Index: /issm/oecreview/Archive/13393-13976/Date.tex
===================================================================
--- /issm/oecreview/Archive/13393-13976/Date.tex	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/Date.tex	(revision 13980)
@@ -0,0 +1,1 @@
+Nov-16-2012
Index: /issm/oecreview/Archive/13393-13976/ISSM-13397-13398.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13397-13398.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13397-13398.diff	(revision 13980)
@@ -0,0 +1,49 @@
+Index: ../trunk-jpl/src/dox/issm.dox
+===================================================================
+--- ../trunk-jpl/src/dox/issm.dox	(revision 13397)
++++ ../trunk-jpl/src/dox/issm.dox	(revision 13398)
+@@ -45,28 +45,28 @@
+ <th  bgcolor=#7AA9DD style="text-align:left;">Language</th><th  bgcolor=#7AA9DD style="text-align:right;">files</th><th  bgcolor=#7AA9DD style="text-align:right;">blank</th><th  bgcolor=#7AA9DD style="text-align:right;">comment</th><th  bgcolor=#7AA9DD style="text-align:right;">code</th><th  bgcolor=#7AA9DD style="text-align:right;">Total</th>
+ </th>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> C++ </th><td  bgcolor=#FFFFFF style="text-align:right;">508</td><td  bgcolor=#FFFFFF style="text-align:right;">14595</td><td  bgcolor=#FFFFFF style="text-align:right;">16762</td><td  bgcolor=#FFFFFF style="text-align:right;">56036</td><td  bgcolor=#FFFFFF style="text-align:right;">87393</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> C++ </th><td  bgcolor=#FFFFFF style="text-align:right;">505</td><td  bgcolor=#FFFFFF style="text-align:right;">14316</td><td  bgcolor=#FFFFFF style="text-align:right;">16564</td><td  bgcolor=#FFFFFF style="text-align:right;">56522</td><td  bgcolor=#FFFFFF style="text-align:right;">87402</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#C6E2FF style="text-align:left;"> MATLAB </th><td  bgcolor=#C6E2FF style="text-align:right;">925</td><td  bgcolor=#C6E2FF style="text-align:right;">6851</td><td  bgcolor=#C6E2FF style="text-align:right;">13228</td><td  bgcolor=#C6E2FF style="text-align:right;">30468</td><td  bgcolor=#C6E2FF style="text-align:right;">50547</td>
++<th  bgcolor=#C6E2FF style="text-align:left;"> MATLAB </th><td  bgcolor=#C6E2FF style="text-align:right;">913</td><td  bgcolor=#C6E2FF style="text-align:right;">6625</td><td  bgcolor=#C6E2FF style="text-align:right;">13054</td><td  bgcolor=#C6E2FF style="text-align:right;">30160</td><td  bgcolor=#C6E2FF style="text-align:right;">49839</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> C/C++  Header </th><td  bgcolor=#FFFFFF style="text-align:right;">378</td><td  bgcolor=#FFFFFF style="text-align:right;">2758</td><td  bgcolor=#FFFFFF style="text-align:right;">2612</td><td  bgcolor=#FFFFFF style="text-align:right;">9818</td><td  bgcolor=#FFFFFF style="text-align:right;">15188</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> C/C++  Header </th><td  bgcolor=#FFFFFF style="text-align:right;">388</td><td  bgcolor=#FFFFFF style="text-align:right;">3069</td><td  bgcolor=#FFFFFF style="text-align:right;">2983</td><td  bgcolor=#FFFFFF style="text-align:right;">11855</td><td  bgcolor=#FFFFFF style="text-align:right;">17907</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#C6E2FF style="text-align:left;"> m4 </th><td  bgcolor=#C6E2FF style="text-align:right;">7</td><td  bgcolor=#C6E2FF style="text-align:right;">997</td><td  bgcolor=#C6E2FF style="text-align:right;">80</td><td  bgcolor=#C6E2FF style="text-align:right;">8259</td><td  bgcolor=#C6E2FF style="text-align:right;">9336</td>
++<th  bgcolor=#C6E2FF style="text-align:left;"> m4 </th><td  bgcolor=#C6E2FF style="text-align:right;">6</td><td  bgcolor=#C6E2FF style="text-align:right;">1052</td><td  bgcolor=#C6E2FF style="text-align:right;">79</td><td  bgcolor=#C6E2FF style="text-align:right;">8993</td><td  bgcolor=#C6E2FF style="text-align:right;">10124</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> Python </th><td  bgcolor=#FFFFFF style="text-align:right;">53</td><td  bgcolor=#FFFFFF style="text-align:right;">400</td><td  bgcolor=#FFFFFF style="text-align:right;">610</td><td  bgcolor=#FFFFFF style="text-align:right;">1424</td><td  bgcolor=#FFFFFF style="text-align:right;">2434</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> Python </th><td  bgcolor=#FFFFFF style="text-align:right;">81</td><td  bgcolor=#FFFFFF style="text-align:right;">2677</td><td  bgcolor=#FFFFFF style="text-align:right;">3936</td><td  bgcolor=#FFFFFF style="text-align:right;">5169</td><td  bgcolor=#FFFFFF style="text-align:right;">11782</td>
+ </tr>
+ <tr>
+ <th  bgcolor=#C6E2FF style="text-align:left;"> Objective  C </th><td  bgcolor=#C6E2FF style="text-align:right;">9</td><td  bgcolor=#C6E2FF style="text-align:right;">98</td><td  bgcolor=#C6E2FF style="text-align:right;">0</td><td  bgcolor=#C6E2FF style="text-align:right;">370</td><td  bgcolor=#C6E2FF style="text-align:right;">468</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> Perl </th><td  bgcolor=#FFFFFF style="text-align:right;">3</td><td  bgcolor=#FFFFFF style="text-align:right;">21</td><td  bgcolor=#FFFFFF style="text-align:right;">23</td><td  bgcolor=#FFFFFF style="text-align:right;">240</td><td  bgcolor=#FFFFFF style="text-align:right;">284</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> Bourne  Shell </th><td  bgcolor=#FFFFFF style="text-align:right;">5</td><td  bgcolor=#FFFFFF style="text-align:right;">58</td><td  bgcolor=#FFFFFF style="text-align:right;">81</td><td  bgcolor=#FFFFFF style="text-align:right;">268</td><td  bgcolor=#FFFFFF style="text-align:right;">407</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#C6E2FF style="text-align:left;"> Bourne  Shell </th><td  bgcolor=#C6E2FF style="text-align:right;">5</td><td  bgcolor=#C6E2FF style="text-align:right;">47</td><td  bgcolor=#C6E2FF style="text-align:right;">75</td><td  bgcolor=#C6E2FF style="text-align:right;">239</td><td  bgcolor=#C6E2FF style="text-align:right;">361</td>
++<th  bgcolor=#C6E2FF style="text-align:left;"> Perl </th><td  bgcolor=#C6E2FF style="text-align:right;">3</td><td  bgcolor=#C6E2FF style="text-align:right;">21</td><td  bgcolor=#C6E2FF style="text-align:right;">23</td><td  bgcolor=#C6E2FF style="text-align:right;">240</td><td  bgcolor=#C6E2FF style="text-align:right;">284</td>
+ </tr>
+ <tr>
+ <th  bgcolor=#FFFFFF style="text-align:left;"> IDL </th><td  bgcolor=#FFFFFF style="text-align:right;">1</td><td  bgcolor=#FFFFFF style="text-align:right;">18</td><td  bgcolor=#FFFFFF style="text-align:right;">4</td><td  bgcolor=#FFFFFF style="text-align:right;">124</td><td  bgcolor=#FFFFFF style="text-align:right;">146</td>
+@@ -75,7 +75,7 @@
+ <th  bgcolor=#C6E2FF style="text-align:left;"> C </th><td  bgcolor=#C6E2FF style="text-align:right;">1</td><td  bgcolor=#C6E2FF style="text-align:right;">2</td><td  bgcolor=#C6E2FF style="text-align:right;">3</td><td  bgcolor=#C6E2FF style="text-align:right;">6</td><td  bgcolor=#C6E2FF style="text-align:right;">11</td>
+ </tr>
+ <tr>
+-<th  bgcolor=#FFFFFF style="text-align:left;"> SUM: </th><td  bgcolor=#FFFFFF style="text-align:right;">1890</td><td  bgcolor=#FFFFFF style="text-align:right;">25787</td><td  bgcolor=#FFFFFF style="text-align:right;">33397</td><td  bgcolor=#FFFFFF style="text-align:right;">106984</td><td  bgcolor=#FFFFFF style="text-align:right;">166168</td>
++<th  bgcolor=#FFFFFF style="text-align:left;"> SUM: </th><td  bgcolor=#FFFFFF style="text-align:right;">1912</td><td  bgcolor=#FFFFFF style="text-align:right;">27936</td><td  bgcolor=#FFFFFF style="text-align:right;">36727</td><td  bgcolor=#FFFFFF style="text-align:right;">113707</td><td  bgcolor=#FFFFFF style="text-align:right;">178370</td>
+ </tr>
+ </table>
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13407-13408.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13407-13408.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13407-13408.diff	(revision 13980)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/externalpackages/adolc/install-update-dev.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-update-dev.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adolc/install-update-dev.sh	(revision 13408)
+@@ -0,0 +1,26 @@
++#!/bin/bash
++set -eu
++
++#This script is very specific to the larour larsen nightly using adolc. 
++#It relies on just an update of adolc, and symlink to an existing adolc 
++#repo. 
++
++#Some cleanup
++rm -rf install adolc_v220_issm
++
++#symlink: 
++ln -s  /u/astrid-r1b/larour/issm-uci/trunk-jpl/externalpackages/adolc/adolc_v220_issm ./adolc_v220_issm
++
++#update and compile
++cd adolc_v220_issm
++git pull
++
++autoreconf -f -i 
++./configure --prefix=$ISSM_DIR/externalpackages/adolc/install 
++
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/adolc/install-update-dev.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13408-13409.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13408-13409.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13408-13409.diff	(revision 13980)
@@ -0,0 +1,130 @@
+Index: ../trunk-jpl/externalpackages/adolc/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install.sh	(revision 13408)
++++ ../trunk-jpl/externalpackages/adolc/install.sh	(revision 13409)
+@@ -1,60 +0,0 @@
+-#!/bin/bash
+-set -eu
+-
+-#some issues on macosx64 with ISSM's autoconf. you might want to run native to mac on this.
+-
+-#Some cleanup
+-rm -rf install ADOL-C-2.2.0 src trunk
+-
+-#Create install directories
+-mkdir install src
+-
+-#Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/ADOL-C-2.2.0.tar.gz' 'ADOL-C-2.2.0.tar.gz'
+-
+-#Untar 
+-tar -zxvf  ADOL-C-2.2.0.tar.gz
+-
+-#Move ADOL-C into install directory
+-mv ADOL-C-2.2.0/* src
+-rm -rf ADOL-C-2.2.0
+-
+-#Compile ADOL-C
+-cd src 
+-
+-#export CC=gcc
+-#export CXX=g++
+-#export CFLAGS="-arch x86_64"
+-#export CXXFLAGS="-arch x86_64"
+-
+-./configure \
+-	--prefix=$ISSM_DIR/externalpackages/adolc/install \
+-	--enable-sparse \
+-	--enable-docexa \
+-	--enable-addexa \
+-	--disable-shave
+-
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
+-make install
+-
+-
+-#Ok, bug with libtool: replace all LIBTOOL= by LIBTOOL=libtool 
+-#in all Makefiles
+-for i in `find ./ -name Makefile `
+-do
+-	echo $i
+-	cat $i | sed 's/LIBTOOL =/LIBTOOL = libtool/g' > $i.bak 
+-	mv $i.bak $i
+-done
+-
+-#remake: 
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
+-make install
+Index: ../trunk-jpl/externalpackages/adolc/install-2.2.0.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-2.2.0.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adolc/install-2.2.0.sh	(revision 13409)
+@@ -0,0 +1,60 @@
++#!/bin/bash
++set -eu
++
++#some issues on macosx64 with ISSM's autoconf. you might want to run native to mac on this.
++
++#Some cleanup
++rm -rf install ADOL-C-2.2.0 src trunk
++
++#Create install directories
++mkdir install src
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/ADOL-C-2.2.0.tar.gz' 'ADOL-C-2.2.0.tar.gz'
++
++#Untar 
++tar -zxvf  ADOL-C-2.2.0.tar.gz
++
++#Move ADOL-C into install directory
++mv ADOL-C-2.2.0/* src
++rm -rf ADOL-C-2.2.0
++
++#Compile ADOL-C
++cd src 
++
++#export CC=gcc
++#export CXX=g++
++#export CFLAGS="-arch x86_64"
++#export CXXFLAGS="-arch x86_64"
++
++./configure \
++	--prefix=$ISSM_DIR/externalpackages/adolc/install \
++	--enable-sparse \
++	--enable-docexa \
++	--enable-addexa \
++	--disable-shave
++
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
++
++
++#Ok, bug with libtool: replace all LIBTOOL= by LIBTOOL=libtool 
++#in all Makefiles
++for i in `find ./ -name Makefile `
++do
++	echo $i
++	cat $i | sed 's/LIBTOOL =/LIBTOOL = libtool/g' > $i.bak 
++	mv $i.bak $i
++done
++
++#remake: 
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
Index: /issm/oecreview/Archive/13393-13976/ISSM-13409-13410.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13409-13410.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13409-13410.diff	(revision 13980)
@@ -0,0 +1,1307 @@
+Index: ../trunk-jpl/src/c/Container/Vertices.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13409)
++++ ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13410)
+@@ -37,73 +37,73 @@
+ /*}}}*/
+ 
+ /*Numerics management*/
+-/*FUNCTION Vertices::DistributeDofs{{{*/
+-void  Vertices::DistributeDofs(int numberofobjects,int numberofdofsperobject){
++/*FUNCTION Vertices::DistributePids{{{*/
++void  Vertices::DistributePids(int numberofobjects){
+ 
+ 	extern int num_procs;
+ 	extern int my_rank;
+ 
+ 	int  i;
+-	int  dofcount=0;
+-	int* alldofcount=NULL;
+-	int* truedofs=NULL;
+-	int* alltruedofs=NULL;
++	int  pidcount    = 0;
++	int *allpidcount = NULL;
++	int *truepids    = NULL;
++	int *alltruepids = NULL;
+ 
+-	/*Go through objects, and distribute dofs locally, from 0 to numberofdofsperobject*/
++	/*Go through objects, and distribute pids locally, from 0 to numberofpidsperobject*/
+ 	for (i=0;i<this->Size();i++){
+ 		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
+-		vertex->DistributeDofs(&dofcount);
++		vertex->DistributePids(&pidcount);
+ 	}
+ 
+-	/* Now every object has distributed dofs, but locally, and with a dof count starting from 
+-	 * 0. This means the dofs between all the cpus are not unique. We now offset the dofs of eache
+-	 * cpus by the total last dofs of the previus cpu, starting from 0.
+-	 * First: bet number of dofs for each cpu*/
+-	alldofcount=xNew<int>(num_procs);
++	/* Now every object has distributed pids, but locally, and with a pid count starting from 
++	 * 0. This means the pids between all the cpus are not unique. We now offset the pids of each
++	 * cpus by the total last pids of the previus cpu, starting from 0.
++	 * First: get number of pids for each cpu*/
++	allpidcount=xNew<int>(num_procs);
+ 	#ifdef _HAVE_MPI_
+-	MPI_Gather(&dofcount,1,MPI_INT,alldofcount,1,MPI_INT,0,MPI_COMM_WORLD);
+-	MPI_Bcast(alldofcount,num_procs,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Gather(&pidcount,1,MPI_INT,allpidcount,1,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Bcast(allpidcount,num_procs,MPI_INT,0,MPI_COMM_WORLD);
+ 	#else
+-	alldofcount[0]=dofcount;
++	allpidcount[0]=pidcount;
+ 	#endif
+ 
+-	/* Every cpu should start its own dof count at the end of the dofcount from cpu-1*/
+-	dofcount=0;
++	/* Every cpu should start its own pid count at the end of the pidcount from cpu-1*/
++	pidcount=0;
+ 	if(my_rank!=0){
+ 		for(i=0;i<my_rank;i++){
+-			dofcount+=alldofcount[i];
++			pidcount+=allpidcount[i];
+ 		}
+ 	}
+ 	for (i=0;i<this->Size();i++){
+ 		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
+-		vertex->OffsetDofs(dofcount);
++		vertex->OffsetPids(pidcount);
+ 	}
+ 
+ 	/* Finally, remember that cpus may have skipped some objects, because they were clones. For every 
+-	 * object that is not a clone, tell them to show their dofs, so that later on, they can get picked 
++	 * object that is not a clone, tell them to show their pids, so that later on, they can get picked 
+ 	 * up by their clones: */
+-	truedofs   =xNewZeroInit<int>(numberofobjects*numberofdofsperobject);
+-	alltruedofs=xNewZeroInit<int>(numberofobjects*numberofdofsperobject);
++	truepids   =xNewZeroInit<int>(numberofobjects);
++	alltruepids=xNewZeroInit<int>(numberofobjects);
+ 	for (i=0;i<this->Size();i++){
+ 		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
+-		vertex->ShowTrueDofs(truedofs);
++		vertex->ShowTruePids(truepids);
+ 	}
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce((void*)truedofs,(void*)alltruedofs,numberofobjects*numberofdofsperobject,MPI_INT,MPI_MAX,MPI_COMM_WORLD);
++	MPI_Allreduce((void*)truepids,(void*)alltruepids,numberofobjects,MPI_INT,MPI_MAX,MPI_COMM_WORLD);
+ 	#else
+-	for(i=0;i<numberofobjects*numberofdofsperobject;i++)alltruedofs[i]=truedofs[i];
++	for(i=0;i<numberofobjects;i++)alltruepids[i]=truepids[i];
+ 	#endif
+ 
+-	/* Now every cpu knows the true dofs of everyone else that is not a clone*/
+-	for (i=0;i<this->Size();i++){
++	/* Now every cpu knows the true pids of everyone else that is not a clone*/
++	for(i=0;i<this->Size();i++){
+ 		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
+-		vertex->UpdateCloneDofs(alltruedofs);
++		vertex->UpdateClonePids(alltruepids);
+ 	}
+ 
+ 	/* Free ressources: */
+-	xDelete<int>(alldofcount);
+-	xDelete<int>(truedofs);
+-	xDelete<int>(alltruedofs);
++	xDelete<int>(allpidcount);
++	xDelete<int>(truepids);
++	xDelete<int>(alltruepids);
+ }
+ /*}}}*/
+ /*FUNCTION Vertices::FlagClones{{{*/
+Index: ../trunk-jpl/src/c/Container/Vertices.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Vertices.h	(revision 13409)
++++ ../trunk-jpl/src/c/Container/Vertices.h	(revision 13410)
+@@ -18,17 +18,15 @@
+ 
+ 	public:
+ 
+-		/*constructors, destructors: {{{*/
++		/*constructors, destructors:*/ 
+ 		Vertices();
+ 		~Vertices();
+-		/*}}}*/
+-		/*numerics: {{{*/
+-		void  DistributeDofs(int numberofnodes,int numdofspernode);
++
++		/*numerics:*/
++		void  DistributePids(int numberofnodes);
+ 		void  FlagClones(int numberofnodes);
+ 		int   NumberOfVertices(void);
+ 		void  Ranks(int* ranks);
+-		/*}}}*/
+-
+ };
+ 
+ #endif //ifndef _VERTICES_H_
+Index: ../trunk-jpl/src/c/modules/VerticesDofx/VerticesDofx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/VerticesDofx/VerticesDofx.cpp	(revision 13409)
++++ ../trunk-jpl/src/c/modules/VerticesDofx/VerticesDofx.cpp	(revision 13410)
+@@ -10,24 +10,18 @@
+ 
+ void VerticesDofx( Vertices* vertices, Parameters* parameters) {
+ 
+-	int i;
+-
+-	int  found=0;
+-	extern int num_procs;
+-	extern int my_rank;
+-	
+ 	/*intermediary: */
+ 	int  numberofvertices;
+ 
+ 	/*figure out how many vertices we have: */
+ 	numberofvertices=vertices->NumberOfVertices();
+ 
+-	/*Ensure that only for each cpu, the partition border vertices only will be taken into account once 
+-	 * across the cluster. To do so, we flag all the clone vertices: */
++	/*Ensure that only for each cpu, the partition border vertices only will be
++	 * taken into account once across the cluster. To do so, we flag all the
++	 * clone vertices: */
+ 	vertices->FlagClones(numberofvertices);
+ 
+-	/*Go through all vertices and distribute 1 dof at a time. When a  vertex has already been distributed his dof on a cpu, 
+-	 * all other cpus with the same vertex cannot distribute it anymore. Use clone field to be sure of that: */
+-	vertices->DistributeDofs(numberofvertices,1); //only 1 dof per vertex.
++	/*Go through all vertices and distribute pids*/
++	vertices->DistributePids(numberofvertices); 
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp	(revision 13409)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp	(revision 13410)
+@@ -209,7 +209,7 @@
+ 
+ 			/*Prepare index list*/
+ 			int doflist1[3];
+-			for(int i=0;i<3;i++) doflist1[i]=((Tria*)element)->nodes[i]->GetVertexDof();
++			for(int i=0;i<3;i++) doflist1[i]=((Tria*)element)->nodes[i]->GetVertexPid();
+ 
+ 			/*Get input (either in element or material)*/
+ 			Input* input=inputs->GetInput(input_enum);
+@@ -639,7 +639,7 @@
+ 
+ 				case TriaEnum: {
+ 					IssmDouble values[3];
+-					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->nodes[i]->GetVertexDof()];
++					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->nodes[i]->GetVertexPid()];
+ 					this->inputs->AddInput(new TriaP1Input(name,values));
+ 					return;
+ 				}
+@@ -681,7 +681,7 @@
+ 
+ 				case TriaEnum: {
+ 					IssmDouble values[3];
+-					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->nodes[i]->GetSidList()]; //use sid list, to index into serial oriented vector 
++					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->nodes[i]->GetVertexSid()]; //use sid list, to index into serial oriented vector 
+ 					this->inputs->AddInput(new TriaP1Input(name,values));
+ 					/*Special case for rheology B in 2D: Pourave land for this solution{{{*/
+ 					if(name==MaterialsRheologyBEnum){
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Matice.cpp	(revision 13409)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Matice.cpp	(revision 13410)
+@@ -189,7 +189,7 @@
+ 
+ 			/*Prepare index list*/
+ 			int doflist1[3];
+-			for(int i=0;i<3;i++) doflist1[i]=((Tria*)element)->nodes[i]->GetVertexDof();
++			for(int i=0;i<3;i++) doflist1[i]=((Tria*)element)->nodes[i]->GetVertexPid();
+ 
+ 			/*Get input (either in element or material)*/
+ 			Input* input=inputs->GetInput(input_enum);
+@@ -559,7 +559,7 @@
+ 
+ 				case TriaEnum: {
+ 					IssmDouble values[3];
+-					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->nodes[i]->GetVertexDof()];
++					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->nodes[i]->GetVertexPid()];
+ 					this->inputs->AddInput(new TriaP1Input(name,values));
+ 					return;
+ 				}
+@@ -601,7 +601,7 @@
+ 
+ 				case TriaEnum: {
+ 					IssmDouble values[3];
+-					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->nodes[i]->GetSidList()]; //use sid list, to index into serial oriented vector 
++					for (int i=0;i<3;i++) values[i]=vector[((Tria*)element)->nodes[i]->GetVertexSid()]; //index into serial oriented vector 
+ 					this->inputs->AddInput(new TriaP1Input(name,values));
+ 					/*Special case for rheology B in 2D: Pourave land for this solution{{{*/
+ 					if(name==MaterialsRheologyBEnum){
+Index: ../trunk-jpl/src/c/classes/objects/Vertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 13409)
++++ ../trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 13410)
+@@ -48,12 +48,12 @@
+ 	/*all the initialization has been done by the initializer, just fill in the id: */
+ 	this->id=vertex_id;
+ 	this->sid=vertex_sid;
++	this->pid=UNDEF;
+ 	this->x=vertex_x;
+ 	this->y=vertex_y;
+ 	this->z=vertex_z;
+ 	this->sigma=vertex_sigma;
+ 	this->connectivity=vertex_connectivity;
+-	this->dof=UNDEF;
+ 
+ 	return;
+ }
+@@ -66,12 +66,12 @@
+ 	_printLine_("Vertex:");
+ 	_printLine_("   id: " << id);
+ 	_printLine_("   sid: " << sid);
++	_printLine_("   pid: " << pid);
+ 	_printLine_("   x: " << x);
+ 	_printLine_("   y: " << y);
+ 	_printLine_("   z: " << z);
+ 	_printLine_("   sigma: " << sigma);
+ 	_printLine_("   connectivity: " << connectivity);
+-	_printLine_("   dof: " << dof);
+ 	_printLine_("   clone: " << clone);
+ 
+ 	return;
+@@ -106,71 +106,78 @@
+ }
+ /*}}}*/
+ 
+-/* DofObject routines: */
+-/*FUNCTION Vertex::DistributeDofs{{{*/
+-void  Vertex::DistributeDofs(int* pdofcount){
++/*Vertex management: */
++/*FUNCTION Vertex::Connectivity{{{*/
++int    Vertex::Connectivity(void){return connectivity;}
++/*}}}*/
++/*FUNCTION Vertex::Sid{{{*/
++int    Vertex::Sid(void){ return sid; }
++/*}}}*/
++/*FUNCTION Vertex::UpdateVertexPosition {{{*/
++void  Vertex::UpdatePosition(Vector<IssmDouble>* vz,Parameters* parameters,IssmDouble* thickness,IssmDouble* bed){
+ 
+-	int i;
+-	extern int my_rank;
+-	int dofcount;
++	IssmDouble oldz,newz;
++	IssmDouble dt,velz;
+ 
+-	dofcount=*pdofcount;
++	/*Get time stepping*/
++	parameters->FindParam(&dt,TimesteppingTimeStepEnum);
++
++	/*sigma remains constant. z=bed+sigma*thickness*/
++	oldz = this->z;
++	newz = bed[this->pid]+sigma*thickness[this->pid];
++	velz = (newz-oldz)/dt;
++	this->z = newz;
++
++	/*put vz in vector*/
++	vz->SetValue(this->pid,velz,INS_VAL);
++}
++/*}}}*/
++/*FUNCTION Vertex::DistributePids{{{*/
++void  Vertex::DistributePids(int* ppidcount){
++
++	/*retrieve current pid*/
++	int pidcount=*ppidcount;
+ 	
+-	if(this->clone){
+-		/*This vertex is a clone! Don't distribute dofs, it will get them from another cpu!*/
+-		return;
+-	}
++	/*This vertex is a clone! Don't distribute pids, it will get them from another cpu!*/
++	if(this->clone) return;
+ 
+-	/*This vertex should distribute his dof, go ahead: */
+-	this->dof=dofcount;
+-	dofcount++;
++	/*This vertex should distribute its pid*/
++	this->pid=pidcount;
++	pidcount++;
+ 
+ 	/*Assign output pointers: */
+-	*pdofcount=dofcount;
+-
++	*ppidcount=pidcount;
+ }
+ /*}}}*/
+-/*FUNCTION Vertex::OffsetDofs{{{*/
+-void  Vertex::OffsetDofs(int dofcount){
++/*FUNCTION Vertex::OffsetPids{{{*/
++void  Vertex::OffsetPids(int pidcount){
+ 	
+-	int i;
+-	extern int my_rank;
+-	
+-	if(this->clone){
+-		/*This vertex is a clone, don't offset the dofs!: */
+-		return;
+-	}
++	/*This vertex is a clone, don't offset the pids*/
++	if(this->clone) return;
+ 
+-	/*This vertex should offset his dof, go ahead: */
+-	this->dof+=dofcount;
++	/*This vertex should offset his pid, go ahead: */
++	this->pid+=pidcount;
+ }
+ /*}}}*/
+-/*FUNCTION Vertex::ShowTrueDofs{{{*/
+-void  Vertex::ShowTrueDofs(int* truedofs){
++/*FUNCTION Vertex::ShowTruePids{{{*/
++void  Vertex::ShowTruePids(int* truepids){
+ 
+-	int j;
+-	extern int my_rank;
+-	
+ 	/*Are we a clone? : */
+ 	if(this->clone)return;
+ 
+-	/*Ok, we are not a clone, just plug our dof into truedofs: */
+-	truedofs[this->id-1]=this->dof;
+-
++	/*Ok, we are not a clone, just plug our pid into truepids: */
++	truepids[this->sid]=this->pid;
+ }
+ /*}}}*/
+-/*FUNCTION Vertex::UpdateCloneDofs{{{*/
+-void  Vertex::UpdateCloneDofs(int* alltruedofs){
++/*FUNCTION Vertex::UpdateClonePids{{{*/
++void  Vertex::UpdateClonePids(int* alltruepids){
+ 
+-	int j;
+-	extern int my_rank;
+-	
+-	/*If we are not a clone, don't update, we already have dofs!: */
+-	if(this->clone==0)return;
++	/*If we are not a clone, don't update, we already have pids: */
++	if(!this->clone)return;
+ 
+-	/*Ok, we are a clone node, but we did not create the dof for this vertex 
+-	 * Therefore, our dof is garbage right now. Go pick it up in the alltruedofs: */
+-	this->dof=alltruedofs[id-1];
++	/*Ok, we are a clone node, but we did not create the pid for this vertex 
++	 * Therefore, our pid is garbage right now. Go pick it up in the alltruepids: */
++	this->pid=alltruepids[this->pid];
+ }
+ /*}}}*/
+ /*FUNCTION Vertex::SetClone {{{*/
+@@ -178,41 +185,15 @@
+ 
+ 	extern int my_rank;
+ 
+-	if (minranks[id-1]==my_rank){
+-		this->clone=0;
++	if (minranks[this->sid]==my_rank){
++		this->clone=false;
+ 	}
+ 	else{
+ 		/*!there is a cpu with lower rank that has the same vertex, 
+ 		therefore, I am a clone*/
+-		this->clone=1; 	
++		this->clone=true;
+ 	}
+ 
+ }
+ /*}}}*/
+ 
+-/*Vertex management: */
+-/*FUNCTION Vertex::Connectivity{{{*/
+-int    Vertex::Connectivity(void){return connectivity;}
+-/*}}}*/
+-/*FUNCTION Vertex::Sid{{{*/
+-int    Vertex::Sid(void){ return sid; }
+-/*}}}*/
+-/*FUNCTION Vertex::UpdateVertexPosition {{{*/
+-void  Vertex::UpdatePosition(Vector<IssmDouble>* vz,Parameters* parameters,IssmDouble* thickness,IssmDouble* bed){
+-
+-	IssmDouble oldz,newz;
+-	IssmDouble dt,velz;
+-
+-	/*Get time stepping*/
+-	parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+-
+-	/*sigma remains constant. z=bed+sigma*thickness*/
+-	oldz = this->z;
+-	newz = bed[this->dof]+sigma*thickness[this->dof];
+-	velz = (newz-oldz)/dt;
+-	this->z = newz;
+-
+-	/*put vz in vector*/
+-	vz->SetValue(this->dof,velz,INS_VAL);
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Vertex.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Vertex.h	(revision 13409)
++++ ../trunk-jpl/src/c/classes/objects/Vertex.h	(revision 13410)
+@@ -21,19 +21,16 @@
+ class Vertex: public Object{
+ 
+ 	public: 
+-
+-		int    id;
+-		int    sid;            //sid for "serial" id, ie the rank of this vertex in the vertices dataset, if the dataset was serial on 1 cpu.
++		bool       clone;
++		int        id;           // random index
++		int        sid;          // "serial" id (rank of this vertex if the dataset was on 1 cpu)
++		int        pid;          // "parallel" id
+ 		IssmDouble x;
+ 		IssmDouble y;
+ 		IssmDouble z;
+-		IssmDouble sigma;          //sigma coordinate: (z-bed)/thickness
+-		int    connectivity;   //number of vertices connected to this vertex
++		IssmDouble sigma;        //sigma coordinate: (z-bed)/thickness
++		int        connectivity; //number of vertices connected to this vertex
+ 
+-		/*dof management: */
+-		int    clone;
+-		int    dof; //dof to recover values in a vertex indexed vector
+-
+ 		/*Vertex constructors, destructors {{{*/
+ 		Vertex();
+ 		Vertex(int id, int sid,IssmDouble x, IssmDouble y, IssmDouble z, IssmDouble sigma, int connectivity); 
+@@ -49,17 +46,14 @@
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+-		/*DofObject routines {{{*/
+-		void  DistributeDofs(int* pdofcount);
+-		void  OffsetDofs(int dofcount);
+-		void  ShowTrueDofs(int* borderdofs);
+-		void  UpdateCloneDofs(int* allborderdofs);
+-		void  SetClone(int* minranks);
+-		/*}}}*/
+-		/*Vertex management: {{{*/
++		/*Vertex management:*/ 
+ 		int   Sid(void); 
+ 		int   Connectivity(void); 
+ 		void  UpdatePosition(Vector<IssmDouble>* vz,Parameters* parameters,IssmDouble* thickness,IssmDouble* bed);
+-		/*}}}*/
++		void  DistributePids(int* ppidcount);
++		void  OffsetPids(int pidcount);
++		void  ShowTruePids(int* borderpids);
++		void  UpdateClonePids(int* allborderpids);
++		void  SetClone(int* minranks);
+ };
+ #endif  /* _VERTEX_H */
+Index: ../trunk-jpl/src/c/classes/objects/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13409)
++++ ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13410)
+@@ -233,16 +233,6 @@
+ 	else _error_("set of enum type " << EnumToStringx(setenum) << " not supported yet!");
+ 
+ } /*}}}*/
+-/*FUNCTION Node::GetDofList1{{{*/
+-int  Node::GetDofList1(void){
+-
+-	Vertex* vertex=NULL;
+-
+-	vertex=(Vertex*)this->hvertex->delivers();
+-
+-	return vertex->dof;
+-}
+-/*}}}*/
+ /*FUNCTION Node::GetDofList{{{*/
+ void  Node::GetDofList(int* outdoflist,int approximation_enum,int setenum){
+ 	int i;
+@@ -305,16 +295,6 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Node::GetSidList{{{*/
+-int  Node::GetSidList(void){
+-
+-	Vertex* vertex=NULL;
+-
+-	vertex=(Vertex*)this->hvertex->delivers();
+-
+-	return vertex->sid;
+-}
+-/*}}}*/
+ /*FUNCTION Node::GetLocalDofList{{{*/
+ void  Node::GetLocalDofList(int* outdoflist,int approximation_enum,int setenum){
+ 	int i;
+@@ -426,15 +406,25 @@
+ 	return vertex->id;
+ }
+ /*}}}*/
+-/*FUNCTION Node::GetVertexDof {{{*/
+-int   Node::GetVertexDof(void){
++/*FUNCTION Node::GetVertexPid{{{*/
++int   Node::GetVertexPid(void){
+ 
+ 	Vertex*  vertex=NULL;
+ 
+ 	vertex=(Vertex*)hvertex->delivers();
+-	return vertex->dof;
++	return vertex->pid;
+ }
+ /*}}}*/
++/*FUNCTION Node::GetVertexSid{{{*/
++int  Node::GetVertexSid(void){
++
++	Vertex* vertex=NULL;
++
++	vertex=(Vertex*)this->hvertex->delivers();
++
++	return vertex->sid;
++}
++/*}}}*/
+ #ifdef _HAVE_DIAGNOSTIC_
+ /*FUNCTION Node::GetCoordinateSystem{{{*/
+ void Node::GetCoordinateSystem(IssmDouble* coord_system_out){
+@@ -445,16 +435,6 @@
+ }
+ /*}}}*/
+ #endif
+-/*FUNCTION Node::SetVertexDof {{{*/
+-void   Node::SetVertexDof(int in_dof){
+-
+-	Vertex*  vertex=NULL;
+-
+-	vertex=(Vertex*)hvertex->delivers();
+-	vertex->dof=in_dof;
+-
+-}
+-/*}}}*/
+ /*FUNCTION Node::InAnalysis{{{*/
+ bool Node::InAnalysis(int in_analysis_type){
+ 	if (in_analysis_type==this->analysis_type) return true;
+@@ -886,7 +866,7 @@
+ }
+ /*}}}*/
+ 
+-/* DofObject routines:*/
++/* indexing routines:*/
+ /*FUNCTION Node::DistributeDofs{{{*/
+ void  Node::DistributeDofs(int* pdofcount,int setenum){
+ 
+@@ -934,7 +914,7 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Node::Off_setDofs{{{*/
++/*FUNCTION Node::OffsetDofs{{{*/
+ void  Node::OffsetDofs(int dofcount,int setenum){
+ 	
+ 	int i;
+Index: ../trunk-jpl/src/c/classes/objects/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Node.h	(revision 13409)
++++ ../trunk-jpl/src/c/classes/objects/Node.h	(revision 13410)
+@@ -66,12 +66,9 @@
+ 		void   CreateNodalConstraints(Vector<IssmDouble>* ys);
+ 		void   SetCurrentConfiguration(DataSet* nodes,Vertices* vertices);
+ 		int    Sid(void); 
+-		int    GetVertexDof(void);
+-		int    GetVertexId(void);
+ #ifdef _HAVE_DIAGNOSTIC_
+ 		void   GetCoordinateSystem(IssmDouble* coord_system_out);
+ #endif
+-		void   SetVertexDof(int in_dof);
+ 		bool   InAnalysis(int analysis_type);
+ 		int    GetApproximation();
+ 		int    GetNumberOfDofs(int approximation_enum,int setenum);
+@@ -85,8 +82,9 @@
+ 		int    GetConnectivity();
+ 		void   GetDofList(int* poutdoflist,int approximation_enum,int setenum);
+ 		void   GetLocalDofList(int* poutdoflist,int approximation_enum,int setenum);
+-		int    GetDofList1(void);
+-		int    GetSidList(void);
++		int    GetVertexId(void);
++		int    GetVertexPid(void);
++		int    GetVertexSid(void);
+ 		IssmDouble GetX();
+ 		IssmDouble GetY();
+ 		IssmDouble GetZ();
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13409)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13410)
+@@ -139,8 +139,8 @@
+ 	area=this->GetArea();
+ 
+ 	/*Figure out the average for this element: */
+-	this->GetSidList(&offsetsid[0]);
+-	this->GetDofList1(&offsetdof[0]);
++	this->GetVertexSidList(&offsetsid[0]);
++	this->GetVertexPidList(&offsetdof[0]);
+ 	mean=0;
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		partition[i]=reCast<int>(qmu_part[offsetsid[i]]);
+@@ -1054,14 +1054,6 @@
+ 	*pdoflist=doflist;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GetDofList1 {{{*/
+-void  Tria::GetDofList1(int* doflist){
+-
+-	int i;
+-	for(i=0;i<3;i++) doflist[i]=nodes[i]->GetDofList1();
+-
+-}
+-/*}}}*/
+ /*FUNCTION Tria::GetElementType {{{*/
+ int Tria::GetElementType(){
+ 
+@@ -1179,11 +1171,19 @@
+ 	delete gauss;
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GetSidList {{{*/
+-void  Tria::GetSidList(int* sidlist){
+-	for(int i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->GetSidList();
++/*FUNCTION Tria::GetVertexPidList {{{*/
++void  Tria::GetVertexPidList(int* doflist){
++
++	int i;
++	for(i=0;i<3;i++) doflist[i]=nodes[i]->GetVertexPid();
++
+ }
+ /*}}}*/
++/*FUNCTION Tria::GetVertexSidList {{{*/
++void  Tria::GetVertexSidList(int* sidlist){
++	for(int i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->GetVertexSid();
++}
++/*}}}*/
+ /*FUNCTION Tria::GetConnectivityList {{{*/
+ void  Tria::GetConnectivityList(int* connectivity){
+ 	for(int i=0;i<NUMVERTICES;i++) connectivity[i]=nodes[i]->GetConnectivity();
+@@ -1242,20 +1242,20 @@
+ /*FUNCTION Tria::GetVectorFromInputs{{{*/
+ void  Tria::GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum){
+ 
+-	int doflist1[NUMVERTICES];
++	int vertexpidlist[NUMVERTICES];
+ 
+ 	/*Get out if this is not an element input*/
+ 	if(!IsInput(input_enum)) return;
+ 
+ 	/*Prepare index list*/
+-	this->GetDofList1(&doflist1[0]);
++	this->GetVertexPidList(&vertexpidlist[0]);
+ 
+ 	/*Get input (either in element or material)*/
+ 	Input* input=inputs->GetInput(input_enum);
+ 	if(!input) _error_("Input " << EnumToStringx(input_enum) << " not found in element");
+ 
+ 	/*We found the enum.  Use its values to fill into the vector, using the vertices ids: */
+-	input->GetVectorFromInputs(vector,&doflist1[0]);
++	input->GetVectorFromInputs(vector,&vertexpidlist[0]);
+ }
+ /*}}}*/
+ /*FUNCTION Tria::GetVectorFromResults{{{*/
+@@ -1267,11 +1267,11 @@
+ 		_error_("Results of offset "<<offset<<" is "<<EnumToStringx(elementresult->InstanceEnum())<<" when "<<EnumToStringx(enum_in)<<" was expected");
+ 	}
+ 	if(interp==P1Enum){
+-		int doflist1[NUMVERTICES];
++		int vertexpidlist[NUMVERTICES];
+ 		int connectivity[NUMVERTICES];
+-		this->GetSidList(&doflist1[0]);
++		this->GetVertexSidList(&vertexpidlist[0]);
+ 		this->GetConnectivityList(&connectivity[0]);
+-		elementresult->GetVectorFromResults(vector,&doflist1[0],&connectivity[0],NUMVERTICES);
++		elementresult->GetVectorFromResults(vector,&vertexpidlist[0],&connectivity[0],NUMVERTICES);
+ 	}
+ 	else if(interp==P0Enum){
+ 		elementresult->GetElementVectorFromResults(vector,sid);
+@@ -1686,7 +1686,7 @@
+ 
+ 			/*Get values on the 3 vertices*/
+ 			for (int i=0;i<3;i++){
+-				values[i]=vector[this->nodes[i]->GetVertexDof()];
++				values[i]=vector[this->nodes[i]->GetVertexPid()];
+ 			}
+ 
+ 			/*update input*/
+@@ -3431,7 +3431,7 @@
+ /*FUNCTION Tria::ControlInputGetGradient{{{*/
+ void Tria::ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index){
+ 
+-	int doflist1[NUMVERTICES];
++	int vertexpidlist[NUMVERTICES];
+ 	Input* input=NULL;
+ 
+ 	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){
+@@ -3443,8 +3443,8 @@
+ 	if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found");
+ 	if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(enum_type) << " is not a ControlInput");
+ 
+-	GradientIndexing(&doflist1[0],control_index);
+-	((ControlInput*)input)->GetGradient(gradient,&doflist1[0]);
++	GradientIndexing(&vertexpidlist[0],control_index);
++	((ControlInput*)input)->GetGradient(gradient,&vertexpidlist[0]);
+ 
+ }/*}}}*/
+ /*FUNCTION Tria::ControlInputScaleGradient{{{*/
+@@ -3466,7 +3466,7 @@
+ /*FUNCTION Tria::ControlInputSetGradient{{{*/
+ void Tria::ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){
+ 
+-	int    doflist1[NUMVERTICES];
++	int    vertexpidlist[NUMVERTICES];
+ 	IssmDouble grad_list[NUMVERTICES];
+ 	Input* grad_input=NULL;
+ 	Input* input=NULL;
+@@ -3480,8 +3480,8 @@
+ 	if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found");
+ 	if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(enum_type) << " is not a ControlInput");
+ 
+-	GradientIndexing(&doflist1[0],control_index);
+-	for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[doflist1[i]];
++	GradientIndexing(&vertexpidlist[0],control_index);
++	for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[vertexpidlist[i]];
+ 	grad_input=new TriaP1Input(GradientEnum,grad_list);
+ 
+ 	((ControlInput*)input)->SetGradient(grad_input);
+@@ -3555,7 +3555,7 @@
+ void  Tria::GradjBGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index){
+ 
+ 	int        i,ig;
+-	int        doflist1[NUMVERTICES];
++	int        vertexpidlist[NUMVERTICES];
+ 	IssmDouble     Jdet,weight;
+ 	IssmDouble     xyz_list[NUMVERTICES][3];
+ 	IssmDouble     dbasis[NDOF2][NUMVERTICES];
+@@ -3565,7 +3565,7 @@
+ 
+ 	/*Retrieve all inputs we will be needing: */
+ 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
+-	GradientIndexing(&doflist1[0],control_index);
++	GradientIndexing(&vertexpidlist[0],control_index);
+ 	Input* rheologyb_input=material->inputs->GetInput(MaterialsRheologyBbarEnum); _assert_(rheologyb_input);
+ 	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);                _assert_(weights_input);
+ 
+@@ -3585,7 +3585,7 @@
+ 		/*Build gradje_g_gaussian vector (actually -dJ/ddrag): */
+ 		for (i=0;i<NUMVERTICES;i++) grade_g[i]+=-weight*Jdet*gauss->weight*(dbasis[0][i]*dk[0]+dbasis[1][i]*dk[1]);
+ 	}
+-	gradient->SetValues(NUMVERTICES,doflist1,grade_g,ADD_VAL);
++	gradient->SetValues(NUMVERTICES,vertexpidlist,grade_g,ADD_VAL);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -3595,7 +3595,7 @@
+ void  Tria::GradjZGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index){
+ 
+ 	int        i,ig;
+-	int        doflist1[NUMVERTICES];
++	int        vertexpidlist[NUMVERTICES];
+ 	IssmDouble     Jdet,weight;
+ 	IssmDouble     xyz_list[NUMVERTICES][3];
+ 	IssmDouble     dbasis[NDOF2][NUMVERTICES];
+@@ -3605,7 +3605,7 @@
+ 
+ 	/*Retrieve all inputs we will be needing: */
+ 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
+-	GradientIndexing(&doflist1[0],control_index);
++	GradientIndexing(&vertexpidlist[0],control_index);
+ 	Input* rheologyz_input=material->inputs->GetInput(MaterialsRheologyZbarEnum); _assert_(rheologyz_input);
+ 	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);                _assert_(weights_input);
+ 
+@@ -3625,7 +3625,7 @@
+ 		/*Build gradje_g_gaussian vector (actually -dJ/ddrag): */
+ 		for (i=0;i<NUMVERTICES;i++) grade_g[i]+=-weight*Jdet*gauss->weight*(dbasis[0][i]*dk[0]+dbasis[1][i]*dk[1]);
+ 	}
+-	gradient->SetValues(NUMVERTICES,doflist1,grade_g,ADD_VAL);
++	gradient->SetValues(NUMVERTICES,vertexpidlist,grade_g,ADD_VAL);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -3750,7 +3750,7 @@
+ 
+ 	int        i,ig;
+ 	int        analysis_type;
+-	int        doflist1[NUMVERTICES];
++	int        vertexpidlist[NUMVERTICES];
+ 	int        connectivity[NUMVERTICES];
+ 	IssmDouble     vx,vy,lambda,mu,alpha_complement,Jdet;
+ 	IssmDouble     bed,thickness,Neff,drag;
+@@ -3768,7 +3768,7 @@
+ 	/*retrive parameters: */
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
+-	GradientIndexing(&doflist1[0],control_index);
++	GradientIndexing(&vertexpidlist[0],control_index);
+ 	this->GetConnectivityList(&connectivity[0]);
+ 
+ 	/*Build frictoin element, needed later: */
+@@ -3826,7 +3826,7 @@
+ 	//}
+ 	/*End Analytical gradient*/
+ 
+-	gradient->SetValues(NUMVERTICES,doflist1,grade_g,ADD_VAL);
++	gradient->SetValues(NUMVERTICES,vertexpidlist,grade_g,ADD_VAL);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -3837,7 +3837,7 @@
+ void  Tria::GradjDragGradient(Vector<IssmDouble>* gradient, int weight_index,int control_index){
+ 
+ 	int        i,ig;
+-	int        doflist1[NUMVERTICES];
++	int        vertexpidlist[NUMVERTICES];
+ 	IssmDouble     Jdet,weight;
+ 	IssmDouble     xyz_list[NUMVERTICES][3];
+ 	IssmDouble     dbasis[NDOF2][NUMVERTICES];
+@@ -3848,7 +3848,7 @@
+ 	/*Retrieve all inputs we will be needing: */
+ 	if(IsFloating())return;
+ 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
+-	GradientIndexing(&doflist1[0],control_index);
++	GradientIndexing(&vertexpidlist[0],control_index);
+ 	Input* dragcoefficient_input=inputs->GetInput(FrictionCoefficientEnum); _assert_(dragcoefficient_input);
+ 	Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum);                 _assert_(weights_input);
+ 
+@@ -3871,7 +3871,7 @@
+ 			_assert_(!xIsNan<IssmDouble>(grade_g[i]));
+ 		}
+ 	}
+-	gradient->SetValues(NUMVERTICES,doflist1,grade_g,ADD_VAL);
++	gradient->SetValues(NUMVERTICES,vertexpidlist,grade_g,ADD_VAL);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -3881,16 +3881,16 @@
+ void  Tria::GradjDhDtBalancedthickness(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	/*Intermediaries*/
+-	int    doflist1[NUMVERTICES];
++	int    vertexpidlist[NUMVERTICES];
+ 	IssmDouble lambda[NUMVERTICES];
+ 	IssmDouble gradient_g[NUMVERTICES];
+ 
+ 	/*Compute Gradient*/
+-	GradientIndexing(&doflist1[0],control_index);
++	GradientIndexing(&vertexpidlist[0],control_index);
+ 	GetInputListOnVertices(&lambda[0],AdjointEnum);
+ 	for(int i=0;i<NUMVERTICES;i++) gradient_g[i]=-lambda[i];
+ 
+-	gradient->SetValues(NUMVERTICES,doflist1,gradient_g,INS_VAL);
++	gradient->SetValues(NUMVERTICES,vertexpidlist,gradient_g,INS_VAL);
+ }
+ /*}}}*/
+ /*FUNCTION Tria::GradjVxBalancedthickness{{{*/
+@@ -3898,7 +3898,7 @@
+ 
+ 	/*Intermediaries*/
+ 	int        i,ig;
+-	int        doflist1[NUMVERTICES];
++	int        vertexpidlist[NUMVERTICES];
+ 	IssmDouble     thickness,Jdet;
+ 	IssmDouble     basis[3];
+ 	IssmDouble     Dlambda[2],dp[2];
+@@ -3908,7 +3908,7 @@
+ 
+ 	/* Get node coordinates and dof list: */
+ 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
+-	GradientIndexing(&doflist1[0],control_index);
++	GradientIndexing(&vertexpidlist[0],control_index);
+ 
+ 	/*Retrieve all inputs we will be needing: */
+ 	Input* adjoint_input=inputs->GetInput(AdjointEnum);     _assert_(adjoint_input);
+@@ -3930,7 +3930,7 @@
+ 		for(i=0;i<NUMVERTICES;i++) grade_g[i]+=thickness*Dlambda[0]*Jdet*gauss->weight*basis[i];
+ 	}
+ 
+-	gradient->SetValues(NUMVERTICES,doflist1,grade_g,ADD_VAL);
++	gradient->SetValues(NUMVERTICES,vertexpidlist,grade_g,ADD_VAL);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -3941,7 +3941,7 @@
+ 
+ 	/*Intermediaries*/
+ 	int        i,ig;
+-	int        doflist1[NUMVERTICES];
++	int        vertexpidlist[NUMVERTICES];
+ 	IssmDouble     thickness,Jdet;
+ 	IssmDouble     basis[3];
+ 	IssmDouble     Dlambda[2],dp[2];
+@@ -3951,7 +3951,7 @@
+ 
+ 	/* Get node coordinates and dof list: */
+ 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
+-	GradientIndexing(&doflist1[0],control_index);
++	GradientIndexing(&vertexpidlist[0],control_index);
+ 
+ 	/*Retrieve all inputs we will be needing: */
+ 	Input* adjoint_input=inputs->GetInput(AdjointEnum);     _assert_(adjoint_input);
+@@ -3972,7 +3972,7 @@
+ 
+ 		for(i=0;i<NUMVERTICES;i++) grade_g[i]+=thickness*Dlambda[1]*Jdet*gauss->weight*basis[i];
+ 	}
+-	gradient->SetValues(NUMVERTICES,doflist1,grade_g,ADD_VAL);
++	gradient->SetValues(NUMVERTICES,vertexpidlist,grade_g,ADD_VAL);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -3987,7 +3987,7 @@
+ 
+ 	/*get gradient indices*/
+ 	for(int i=0;i<NUMVERTICES;i++){
+-		indexing[i]=num_controls*this->nodes[i]->GetVertexDof() + control_index;
++		indexing[i]=num_controls*this->nodes[i]->GetVertexPid() + control_index;
+ 	}
+ 
+ }
+@@ -5204,14 +5204,14 @@
+ /*FUNCTION Tria::GetVectorFromControlInputs{{{*/
+ void  Tria::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data){
+ 
+-	int doflist1[NUMVERTICES];
++	int vertexpidlist[NUMVERTICES];
+ 	Input *input=NULL;
+ 
+ 	/*Get out if this is not an element input*/
+ 	if(!IsInput(control_enum)) return;
+ 
+ 	/*Prepare index list*/
+-	GradientIndexing(&doflist1[0],control_index);
++	GradientIndexing(&vertexpidlist[0],control_index);
+ 
+ 	/*Get input (either in element or material)*/
+ 	if(control_enum==MaterialsRheologyBbarEnum || control_enum==MaterialsRheologyZbarEnum){
+@@ -5226,14 +5226,14 @@
+ 		_error_("input " << EnumToStringx(control_enum) << " is not a ControlInput");
+ 	}
+ 
+-	((ControlInput*)input)->GetVectorFromInputs(vector,&doflist1[0],data);
++	((ControlInput*)input)->GetVectorFromInputs(vector,&vertexpidlist[0],data);
+ }
+ /*}}}*/
+ /*FUNCTION Tria::SetControlInputsFromVector{{{*/
+ void  Tria::SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index){
+ 
+ 	IssmDouble  values[NUMVERTICES];
+-	int     doflist1[NUMVERTICES];
++	int     vertexpidlist[NUMVERTICES];
+ 	Input  *input     = NULL;
+ 	Input  *new_input = NULL;
+ 
+@@ -5241,11 +5241,11 @@
+ 	if(!IsInput(control_enum)) return;
+ 
+ 	/*Prepare index list*/
+-	GradientIndexing(&doflist1[0],control_index);
++	GradientIndexing(&vertexpidlist[0],control_index);
+ 
+ 	/*Get values on vertices*/
+ 	for (int i=0;i<NUMVERTICES;i++){
+-		values[i]=vector[doflist1[i]];
++		values[i]=vector[vertexpidlist[i]];
+ 	}
+ 	new_input = new TriaP1Input(control_enum,values);
+ 
+@@ -5555,7 +5555,7 @@
+ 
+ 			/*Get values on the 3 vertices*/
+ 			for (i=0;i<3;i++){
+-				values[i]=vector[this->nodes[i]->GetSidList()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!)
++				values[i]=vector[this->nodes[i]->GetVertexSidList()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!)
+ 			}
+ 
+ 			/*Branch on the specified type of update: */
+@@ -5661,7 +5661,7 @@
+ 
+ 				/*create input values: */
+ 				for(i=0;i<3;i++){
+-					row=this->nodes[i]->GetSidList();
++					row=this->nodes[i]->GetVertexSidList();
+ 					values[i]=(IssmDouble)matrix[ncols*row+t];
+ 				}
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13409)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13410)
+@@ -189,8 +189,8 @@
+ 		IssmDouble         GetArea(void);
+ 		int            GetElementType(void);
+ 		void	         GetDofList(int** pdoflist,int approximation_enum,int setenum);
+-		void	         GetDofList1(int* doflist);
+-		void           GetSidList(int* sidlist);
++		void	         GetVertexPidList(int* doflist);
++		void           GetVertexSidList(int* sidlist);
+ 		void           GetConnectivityList(int* connectivity);
+ 		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype);
+ 		void           GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue);
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13409)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13410)
+@@ -814,14 +814,22 @@
+ 	*pdoflist=doflist;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetDofList1 {{{*/
+-void  Penta::GetDofList1(int* doflist){
++/*FUNCTION Penta::GetVertexPidList {{{*/
++void  Penta::GetVertexPidList(int* doflist){
+ 
+ 	int i;
+-	for(i=0;i<6;i++) doflist[i]=nodes[i]->GetDofList1();
++	for(i=0;i<6;i++) doflist[i]=nodes[i]->GetVertexPid();
+ 
+ }
+ /*}}}*/
++/*FUNCTION Penta::GetVertexSidList{{{*/
++void  Penta::GetVertexSidList(int* sidlist){
++
++	int i;
++	for(i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->GetVertexSid();
++
++}
++/*}}}*/
+ /*FUNCTION Penta::GetConnectivityList {{{*/
+ void  Penta::GetConnectivityList(int* connectivity){
+ 	for(int i=0;i<NUMVERTICES;i++) connectivity[i]=nodes[i]->GetConnectivity();
+@@ -996,14 +1004,6 @@
+ 	*phi=4*pow(epsilon_eff,2.0)*viscosity;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::GetSidList{{{*/
+-void  Penta::GetSidList(int* sidlist){
+-
+-	int i;
+-	for(i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->GetSidList();
+-
+-}
+-/*}}}*/
+ /*FUNCTION Penta::GetSolutionFromInputs{{{*/
+ void  Penta::GetSolutionFromInputs(Vector<IssmDouble>* solution){
+ 
+@@ -1134,20 +1134,20 @@
+ /*FUNCTION Penta::GetVectorFromInputs{{{*/
+ void  Penta::GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum){
+ 
+-	int doflist1[NUMVERTICES];
++	int vertexpidlist[NUMVERTICES];
+ 
+ 	/*Get out if this is not an element input*/
+ 	if (!IsInput(input_enum)) return;
+ 
+ 	/*Prepare index list*/
+-	this->GetDofList1(&doflist1[0]);
++	this->GetVertexPidList(&vertexpidlist[0]);
+ 
+ 	/*Get input (either in element or material)*/
+ 	Input* input=inputs->GetInput(input_enum);
+ 	if(!input) _error_("Input " << EnumToStringx(input_enum) << " not found in element");
+ 
+ 	/*We found the enum.  Use its values to fill into the vector, using the vertices ids: */
+-	input->GetVectorFromInputs(vector,&doflist1[0]);
++	input->GetVectorFromInputs(vector,&vertexpidlist[0]);
+ }
+ /*}}}*/
+ /*FUNCTION Penta::GetVectorFromResults{{{*/
+@@ -1159,11 +1159,11 @@
+ 		_error_("Results of offset "<<offset<<" is "<<EnumToStringx(elementresult->InstanceEnum())<<" when "<<EnumToStringx(enum_in)<<" was expected");
+ 	}  
+ 	if(interp==P1Enum){
+-		int doflist1[NUMVERTICES];
++		int vertexpidlist[NUMVERTICES];
+ 		int connectivity[NUMVERTICES];
+-		this->GetSidList(&doflist1[0]);
++		this->GetVertexSidList(&vertexpidlist[0]);
+ 		this->GetConnectivityList(&connectivity[0]);
+-		elementresult->GetVectorFromResults(vector,&doflist1[0],&connectivity[0],NUMVERTICES);
++		elementresult->GetVectorFromResults(vector,&vertexpidlist[0],&connectivity[0],NUMVERTICES);
+ 	}
+ 	else if(interp==P0Enum){
+ 		elementresult->GetElementVectorFromResults(vector,sid);
+@@ -1959,7 +1959,7 @@
+ 
+ 				/*Get values on the 6 vertices*/
+ 				for (int i=0;i<6;i++){
+-					values[i]=vector[this->nodes[i]->GetVertexDof()];
++					values[i]=vector[this->nodes[i]->GetVertexPid()];
+ 				}
+ 
+ 				/*update input*/
+@@ -4462,7 +4462,7 @@
+ /*FUNCTION Penta::ControlInputGetGradient{{{*/
+ void Penta::ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index){
+ 
+-	int doflist1[NUMVERTICES];
++	int vertexpidlist[NUMVERTICES];
+ 	Input* input=NULL;
+ 
+ 	if(enum_type==MaterialsRheologyBbarEnum){
+@@ -4480,8 +4480,8 @@
+ 	if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found");
+ 	if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(enum_type) << " is not a ControlInput");
+ 
+-	GradientIndexing(&doflist1[0],control_index);
+-	((ControlInput*)input)->GetGradient(gradient,&doflist1[0]);
++	GradientIndexing(&vertexpidlist[0],control_index);
++	((ControlInput*)input)->GetGradient(gradient,&vertexpidlist[0]);
+ 
+ }/*}}}*/
+ /*FUNCTION Penta::ControlInputScaleGradient{{{*/
+@@ -4506,7 +4506,7 @@
+ /*FUNCTION Penta::ControlInputSetGradient{{{*/
+ void Penta::ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){
+ 
+-	int    doflist1[NUMVERTICES];
++	int    vertexpidlist[NUMVERTICES];
+ 	IssmDouble grad_list[NUMVERTICES];
+ 	Input* grad_input=NULL;
+ 	Input* input=NULL;
+@@ -4523,8 +4523,8 @@
+ 	if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found");
+ 	if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(enum_type) << " is not a ControlInput");
+ 
+-	GradientIndexing(&doflist1[0],control_index);
+-	for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[doflist1[i]];
++	GradientIndexing(&vertexpidlist[0],control_index);
++	for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[vertexpidlist[i]];
+ 	grad_input=new PentaP1Input(GradientEnum,grad_list);
+ 	((ControlInput*)input)->SetGradient(grad_input);
+ 
+@@ -4801,7 +4801,7 @@
+ 
+ 	/*get gradient indices*/
+ 	for(int i=0;i<NUMVERTICES;i++){
+-		indexing[i]=num_controls*this->nodes[i]->GetVertexDof() + control_index;
++		indexing[i]=num_controls*this->nodes[i]->GetVertexPid() + control_index;
+ 	}
+ 
+ }
+@@ -4914,7 +4914,7 @@
+ 
+ 	int        i,j,ig;
+ 	int        analysis_type;
+-	int        doflist1[NUMVERTICES];
++	int        vertexpidlist[NUMVERTICES];
+ 	IssmDouble     vx,vy,lambda,mu,alpha_complement,Jdet;
+ 	IssmDouble     bed,thickness,Neff,drag;
+ 	IssmDouble     xyz_list[NUMVERTICES][3];
+@@ -4931,7 +4931,7 @@
+ 
+ 	/*Retrieve all inputs and parameters*/
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	GradientIndexing(&doflist1[0],control_index);
++	GradientIndexing(&vertexpidlist[0],control_index);
+ 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
+ 	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<2;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+ 	Input* adjointx_input=inputs->GetInput(AdjointxEnum);               _assert_(adjointx_input);
+@@ -4973,7 +4973,7 @@
+ 			grade_g[i]+=grade_g_gaussian[i];
+ 		}
+ 	}
+-	gradient->SetValues(NUMVERTICES,doflist1,grade_g,ADD_VAL);
++	gradient->SetValues(NUMVERTICES,vertexpidlist,grade_g,ADD_VAL);
+ 
+ 	/*Clean up and return*/
+ 	delete gauss;
+@@ -4985,7 +4985,7 @@
+ 
+ 	int        i,j,ig;
+ 	int        analysis_type;
+-	int        doflist1[NUMVERTICES];
++	int        vertexpidlist[NUMVERTICES];
+ 	IssmDouble     bed,thickness,Neff;
+ 	IssmDouble     lambda,mu,xi,Jdet,vx,vy,vz;
+ 	IssmDouble     alpha_complement,drag;
+@@ -5006,7 +5006,7 @@
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
+ 	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<2;j++) xyz_list_tria[i][j]=xyz_list[i][j];
+-	GradientIndexing(&doflist1[0],control_index);
++	GradientIndexing(&vertexpidlist[0],control_index);
+ 	Input* drag_input    =inputs->GetInput(FrictionCoefficientEnum); _assert_(drag_input);
+ 	Input* vx_input      =inputs->GetInput(VxEnum);                  _assert_(vx_input);
+ 	Input* vy_input      =inputs->GetInput(VyEnum);                  _assert_(vy_input);
+@@ -5066,7 +5066,7 @@
+ 		for( i=0; i<NUMVERTICES; i++)grade_g[i]+=grade_g_gaussian[i];
+ 	}
+ 
+-	gradient->SetValues(NUMVERTICES,doflist1,grade_g,ADD_VAL);
++	gradient->SetValues(NUMVERTICES,vertexpidlist,grade_g,ADD_VAL);
+ 
+ 	delete friction;
+ 	delete gauss;
+@@ -5493,13 +5493,13 @@
+ /*FUNCTION Penta::GetVectorFromControlInputs{{{*/
+ void  Penta::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data){
+ 
+-	int doflist1[NUMVERTICES];
++	int vertexpidlist[NUMVERTICES];
+ 
+ 	/*Get out if this is not an element input*/
+ 	if(!IsInput(control_enum)) return;
+ 
+ 	/*Prepare index list*/
+-	GradientIndexing(&doflist1[0],control_index);
++	GradientIndexing(&vertexpidlist[0],control_index);
+ 
+ 	/*Get input (either in element or material)*/
+ 	Input* input=inputs->GetInput(control_enum);
+@@ -5510,14 +5510,14 @@
+ 		_error_("input " << EnumToStringx(control_enum) << " is not a ControlInput");
+ 	}
+ 
+-	((ControlInput*)input)->GetVectorFromInputs(vector,&doflist1[0],data);
++	((ControlInput*)input)->GetVectorFromInputs(vector,&vertexpidlist[0],data);
+ }
+ /*}}}*/
+ /*FUNCTION Penta::SetControlInputsFromVector{{{*/
+ void  Penta::SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index){
+ 
+ 	IssmDouble  values[NUMVERTICES];
+-	int     doflist1[NUMVERTICES];
++	int     vertexpidlist[NUMVERTICES];
+ 	Input  *input     = NULL;
+ 	Input  *new_input = NULL;
+ 
+@@ -5525,11 +5525,11 @@
+ 	if(!IsInput(control_enum)) return;
+ 
+ 	/*Prepare index list*/
+-	GradientIndexing(&doflist1[0],control_index);
++	GradientIndexing(&vertexpidlist[0],control_index);
+ 
+ 	/*Get values on vertices*/
+ 	for (int i=0;i<NUMVERTICES;i++){
+-		values[i]=vector[doflist1[i]];
++		values[i]=vector[vertexpidlist[i]];
+ 	}
+ 	new_input = new PentaP1Input(control_enum,values);
+ 
+@@ -5568,7 +5568,7 @@
+ 
+ 			/*Get values on the 6 vertices*/
+ 			for (i=0;i<6;i++){
+-				values[i]=vector[this->nodes[i]->GetSidList()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!)
++				values[i]=vector[this->nodes[i]->GetVertexSid()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!)
+ 			}
+ 
+ 			/*Branch on the specified type of update: */
+@@ -5688,7 +5688,7 @@
+ 
+ 				/*create input values: */
+ 				for(i=0;i<6;i++){
+-					row=this->nodes[i]->GetSidList();
++					row=this->nodes[i]->GetVertexSid();
+ 					values[i]=(IssmDouble)matrix[ncols*row+t];
+ 				}
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13409)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13410)
+@@ -173,8 +173,8 @@
+ 		ElementVector* CreatePVectorPrognostic(void);
+ 		ElementVector* CreatePVectorSlope(void);
+ 		void	  GetDofList(int** pdoflist,int approximation_enum,int setenum);
+-		void	  GetDofList1(int* doflist);
+-		void    GetSidList(int* sidlist);
++		void	  GetVertexPidList(int* doflist);
++		void    GetVertexSidList(int* sidlist);
+ 		void    GetConnectivityList(int* connectivity);
+ 		int     GetElementType(void);
+ 		void    GetElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13410-13411.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13410-13411.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13410-13411.diff	(revision 13980)
@@ -0,0 +1,321 @@
+Index: ../trunk-jpl/src/m/classes/plotoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/plotoptions.py	(revision 0)
++++ ../trunk-jpl/src/m/classes/plotoptions.py	(revision 13411)
+@@ -0,0 +1,125 @@
++from collections import OrderedDict, Counter, defaultdict
++from pairoptions import *
++
++class plotoptions(object):
++	'''
++	PLOTOPTIONS class definition
++
++		Usage:
++			plotoptions=plotoptions(*arg)
++	'''
++
++	def __init__(self,*arg):
++		self.numberofplots = 0
++		self.figurenumber  = 1
++		self.list          = OrderedDict()
++
++		self.buildlist(*arg)
++
++	def __repr__(self): #{{{
++		s="\n"
++		s+="	numberofplots: %i\n" % self.numberofplots
++		s+="	figurenumber: %i\n"  % self.figurenumber
++		if self.list:
++			s+="	list: (%ix%i)\n" % (len(self.list),2)
++			for item in self.list.iteritems():
++				#s+="	options of plot number %i\n" % item
++				if   isinstance(item[1],(str,unicode)):
++					s+="	field: %-10s value: '%s'\n" % (item[0],item[1])
++				elif isinstance(item[1],(bool,int,long,float)):
++					s+="	field: %-10s value: '%g'\n" % (item[0],item[1])
++				else:
++					s+="	field: %-10s value: '%s'\n" % (item[0],item[1])
++		else:
++			s+="	list: empty\n"
++		return s
++	#}}}
++	def buildlist(self,*arg): #{{{
++		#check length of input
++		if len(arg) % 2:
++			raise TypeError('error: an even number of options is required')
++
++		#go through args and build list (like pairoptions)
++		rawoptions=pairoptions(*arg)
++		numoptions=len(arg)/2
++		rawlist=[] # cannot be a dict since they do not support duplicate keys
++
++		for i in xrange(numoptions):
++			if isinstance(arg[2*i],(str,unicode)):
++				rawlist.append([arg[2*i],arg[2*i+1]])
++			else:
++				#option is not a string, ignore it
++				print "WARNING: option number %d is not a string and will be ignored." % (i+1)
++
++		#get figure number 
++		self.figurenumber=rawoptions.getfieldvalue('figure',1)
++
++		#get number of subplots 
++		numberofplots=Counter(x for sublist in rawlist for x in sublist if isinstance(x,(str,unicode)))['data']
++		self.numberofplots=numberofplots
++
++		#figure out whether alloptions flag is on
++		if rawoptions.getfieldvalue('alloptions','off') is 'on':
++			allflag=1
++		else:
++			allflag=0
++
++		#initialize self.list (will need a list of dict's (or nested dict) for numberofplots>1)
++		#self.list=defaultdict(dict)
++		for i in xrange(numberofplots):
++			self.list[i]=pairoptions()
++
++		#process plot options
++		for i in xrange(len(rawlist)):
++
++			#if alloptions flag is on, apply to all plots
++			if (allflag and 'data' not in rawlist[i][0] and '#' not in rawlist[i][0]):
++				
++				for j in xrange(numberofplots):
++					self.list[j].addfield(rawlist[i][0],rawlist[i][1])
++
++			elif '#' in rawlist[i][0]:
++
++				#get subplots associated
++				string=rawlist[i][0].split('#')
++				plotnums=string[-1].split(',')
++				field=string[0]
++
++				#loop over plotnums
++				for k in xrange(len(plotnums)):
++					plotnum=plotnums[k]
++
++					#Empty
++					if not plotnum: continue
++
++					elif 'all' in plotnum:
++						for j in xrange(numberofplots):
++							self.list[j].addfield(field,rawlist[i][1])
++
++					elif '-' in plotnum:
++						nums=plotnum.split('-')
++						if len(nums)!=2: continue
++						if False in [x.isdigit() for x in nums]:
++							raise ValueError('error: in option i-j both i and j must be integers')
++						for j in xrange(int(nums[0])-1,int(nums[1])):
++							self.list[j].addfield(field,rawlist[i][1])	
++
++					# Deal with #i
++					else:
++						#assign to subplot
++						if int(plotnum)>numberofplots:
++							raise ValueError('error: %s cannot be assigned %d which exceeds the number of subplots' % (field,plotnum))
++						self.list[int(plotnum)-1].addfield(field,rawlist[i][1])
++			else:
++				
++				#go through all subplots and assign key-value pairs
++				j=0
++				while j <= numberofplots-1:
++					if not self.list[j].exist(rawlist[i][0]):
++						self.list[j].addfield(rawlist[i][0],rawlist[i][1])
++						break
++					else:
++						j=j+1
++				if j+1>numberofplots:
++					print "WARNING: too many instances of '%s' in options" % rawlist[i][0]
++	#}}}
+Index: ../trunk-jpl/src/m/classes/pairoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/pairoptions.py	(revision 13410)
++++ ../trunk-jpl/src/m/classes/pairoptions.py	(revision 13411)
+@@ -40,7 +40,7 @@
+ 				self.list[arg[2*i]] = arg[2*i+1];
+ 			else:
+ 				#option is not a string, ignore it
+-				print "WARNING: option number %d '%s' is not a string and will be ignored." % (i+1,type(arg[2*i]))
++				print "WARNING: option number %d is not a string and will be ignored." % (i+1)
+ 	# }}}
+ 
+ 	def addfield(self,field,value):    # {{{
+@@ -127,18 +127,20 @@
+ 			return False
+ 	# }}}
+ 
+-#	function num = fieldoccurences(obj,field), % {{{
+-#	%FIELDOCCURENCES - get number of occurence of a field
+-#
+-#		%check input 
+-#		if ~ischar(field),
+-#			error('fieldoccurences error message: field should be a string');
+-#		end
+-#
+-#		%get number of occurence
+-#		num=sum(strcmpi(field,obj.list(:,1)));
+-#	end % }}}
++	#def fieldoccurences(self,field): #{{{
++	#	'''
++	#	FIELDOCCURENCES - get number of occurence of a field
++	#	'''
++	#
++	#	#check input 
++	#	if not isinstance(field,(str,unicode)):
++	#		raise TypeError("fieldoccurences error message: field should be a string")
+ 
++	#	#get number of occurence
++	#	# ??
++	#	#return num
++	#	#% }}}
++
+ 	def getfieldvalue(self,field,default=None):    # {{{
+ 		"""
+ 		GETOPTION - get the value of an option
+Index: ../trunk-jpl/src/m/plot/plot_manager.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_manager.py	(revision 0)
++++ ../trunk-jpl/src/m/plot/plot_manager.py	(revision 13411)
+@@ -0,0 +1,32 @@
++from pairoptions import *
++import pylab as p
++from checkplotoptions import *
++from plot_mesh import *
++
++def plot_manager(md,options,subplotwidth,nlines,ncols,i):
++	'''
++	PLOT_MANAGER - distribute the plots called by plotmodel
++
++		Usage:
++			plot_manager(md,options,subplotwidth,i);
++
++		See also: PLOTMODEL, PLOT_UNIT
++	'''
++
++	#parse options and get a structure of options
++	options=checkplotoptions(md,options)
++	#print 'options:', options
++
++	#get data to be plotted
++	data=options.getfieldvalue('data');
++
++	#figure out if this is a special plot
++	if isinstance(data,(str,unicode)):
++
++		if data=='mesh': plot_mesh(md,options,nlines,ncols,i)
++		else:
++			print "WARNING: '%s' is not implemented or is not a valid string for option 'data'" % data
++
++	else:
++		print "'data' not a string, plotting model properties yet to be implemented..."
++
+Index: ../trunk-jpl/src/m/plot/checkplotoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/checkplotoptions.py	(revision 0)
++++ ../trunk-jpl/src/m/plot/checkplotoptions.py	(revision 13411)
+@@ -0,0 +1,15 @@
++def checkplotoptions(md,options):
++	'''
++	CHECKPLOTOPTIONS - build a structure that holds all plot options
++
++		Usage:
++			options=checkplotoptions(md,options)
++
++		See also: PLOTMODEL
++
++		NOTE: not fully implemented yet
++	'''
++
++	print "WARNING: checkplotoptions not implemented: options returned as passed"
++	return options
++
+Index: ../trunk-jpl/src/m/plot/plot_mesh.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_mesh.py	(revision 0)
++++ ../trunk-jpl/src/m/plot/plot_mesh.py	(revision 13411)
+@@ -0,0 +1,24 @@
++import pylab as p
++import matplotlib.tri as tri
++
++def plot_mesh(md,options,nlines,ncols,i):
++	'''
++	PLOT_MESH - plot model mesh
++
++		Usage:
++			plot_mesh(md,options,nlines,ncols,i)
++
++		See also: PLOTMODEL
++	'''
++
++	#TODO: implement processmesh
++	x=md.mesh.x
++	y=md.mesh.y
++	elements=md.mesh.elements
++	elements=elements-1 #since python indexes from zero
++
++	p.subplot(nlines,ncols,i)
++	p.triplot(x,y,elements)
++	p.title('Mesh')
++	
++	print 'WARNING: options passed to plot_mesh not implemented yet'
+Index: ../trunk-jpl/src/m/plot/plotmodel.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plotmodel.py	(revision 0)
++++ ../trunk-jpl/src/m/plot/plotmodel.py	(revision 13411)
+@@ -0,0 +1,55 @@
++import pylab as p
++#from pairoptions import *
++from plotoptions import *
++from plot_manager import *
++
++def plotmodel(md,*args):
++	'''
++	at command prompt, type 'plotdoc' for additional documentation
++	'''
++
++	#First process options 
++	options=plotoptions(*args)
++
++	#get number of subplots
++	subplotwidth=math.ceil(math.sqrt(options.numberofplots))
++	
++	#if nlines and ncols specified, then bypass
++	if options.list[0].exist('nlines'):
++		nlines=options.list[0].getfieldvalue('nlines')
++		nl=True
++	else:
++		nlines=subplotwidth
++		nl=False
++	
++	if options.list[0].exist('ncols'):
++		ncols=options.list[0].getfieldvalue('ncols')
++		nc=True
++	else:
++		ncols=subplotwidth
++		nc=False
++	
++	#check that nlines and ncols were given at the same time!
++	if not nl==nc:
++		raise StandardError('error: nlines and ncols need to be specified together, or not at all')
++	
++	#Get figure number and number of plots
++	figurenumber=options.figurenumber
++	numberofplots=options.numberofplots
++	
++	#Go through plots
++	if numberofplots:
++	
++		#Create figure
++		#plots will be visible by default if ipython is run in interactive mode (invoked by ipython --pylab)
++		#handling the 'visible' option will need some check on whether ipython is currently in interactive or non-interactive mode
++		p.figure(figurenumber)
++	
++		try:
++			for i in xrange(numberofplots):
++				plot_manager(options.list[i].getfieldvalue('model',md),options.list[i],subplotwidth,nlines,ncols,i)
++		except StandardError:
++			print 'error in plot_manager'
++	else:
++		raise StandardError('plotmodel error message: no output data found.')
++			
Index: /issm/oecreview/Archive/13393-13976/ISSM-13411-13412.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13411-13412.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13411-13412.diff	(revision 13980)
@@ -0,0 +1,462 @@
+Index: ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp	(revision 13411)
++++ ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp	(revision 13412)
+@@ -18,8 +18,7 @@
+ 	int   n,size = 100;
+ 	int         string_size;
+ 	extern int  my_rank;
+-	extern int  num_procs;
+-                                                                                                                                                                                                     
++
+ 	//variable list of arguments
+ 	va_list args;
+ 
+Index: ../trunk-jpl/src/c/io/PrintfFunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/io/PrintfFunction.cpp	(revision 13411)
++++ ../trunk-jpl/src/c/io/PrintfFunction.cpp	(revision 13412)
+@@ -16,8 +16,6 @@
+ 	int   n,size = 100;
+ 	int         string_size;
+ 	extern int  my_rank;
+-	extern int  num_procs;
+-                                                                                                                                                                                                     
+ 	//variable list of arguments
+ 	va_list args;
+ 
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 13411)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 13412)
+@@ -12,11 +12,6 @@
+ 
+ void ResetConstraintsx(Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads,Materials* materials,  Parameters* parameters){
+ 
+-	int i;
+-
+-	extern int num_procs;
+-	extern int my_rank;
+-
+ 	/*output: */
+ 	int analysis_type;
+ 
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 13411)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 13412)
+@@ -12,11 +12,6 @@
+ 
+ void ConstraintsStatex(int* pconverged, int* pnum_unstable_constraints, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads,Materials* materials,  Parameters* parameters){
+ 
+-	int i;
+-
+-	extern int num_procs;
+-	extern int my_rank;
+-	
+ 	/*output: */
+ 	int converged=0;
+ 	int num_unstable_constraints=0;
+Index: ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp	(revision 13411)
++++ ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp	(revision 13412)
+@@ -11,28 +11,24 @@
+ 
+ void MassFluxx(IssmDouble* pmass_flux, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,bool process_units){
+ 
+-	int i,j;
+-	extern int num_procs;
+-	extern int my_rank;
++	int      i,j;
++	Element *element    = NULL;
++	int      element_id;
+ 	
+-	Element* element=NULL;
+-	int element_id;
+-	
+ 	/*output: */
+ 	IssmDouble mass_flux=0;
+ 	IssmDouble all_mass_flux=0;
+-
+ 	int  counter;
+ 
+ 	/*all segments: */
+-	IssmDouble** array=NULL;
+-	int      M;
+-	int*     mdims_array=NULL;
+-	int*     ndims_array=NULL;
++	IssmDouble **array       = NULL;
++	int          M;
++	int         *mdims_array = NULL;
++	int         *ndims_array = NULL;
+ 
+ 	/*our segments of interest: */
+-	IssmDouble*  segments=NULL;
+-	int      num_segments;
++	IssmDouble *segments     = NULL;
++	int         num_segments;
+ 
+ 	/*First, figure out which segment to compute our mass flux on. Start with retrieving qmu_mass_flux_segments: */
+ 	parameters->FindParam(&array,&M,&mdims_array,&ndims_array,QmuMassFluxSegmentsEnum);
+Index: ../trunk-jpl/src/c/classes/DofIndexing.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 13411)
++++ ../trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 13412)
+@@ -20,17 +20,17 @@
+ /*FUNCTION DofIndexing::DofIndexing(){{{*/
+ DofIndexing::DofIndexing(){
+ 
+-	this->gsize=UNDEF;
+-	this->fsize=UNDEF;
+-	this->ssize=UNDEF;
+-	this->clone=0;
+-	this->f_set=NULL;
+-	this->s_set=NULL;
+-	this->svalues=NULL;
+-	this->doftype=NULL;
+-	this->gdoflist=NULL;
+-	this->fdoflist=NULL;
+-	this->sdoflist=NULL;
++	this->gsize    = UNDEF;
++	this->fsize    = UNDEF;
++	this->ssize    = UNDEF;
++	this->clone    = false;
++	this->f_set    = NULL;
++	this->s_set    = NULL;
++	this->svalues  = NULL;
++	this->doftype  = NULL;
++	this->gdoflist = NULL;
++	this->fdoflist = NULL;
++	this->sdoflist = NULL;
+ 
+ }
+ /*}}}*/
+@@ -42,12 +42,10 @@
+ /*FUNCTION DofIndexing::DofIndexing(DofIndexing* in)  -> copy{{{*/
+ DofIndexing::DofIndexing(DofIndexing* in){ //copy constructor
+ 
+-	int i;
+-	this->gsize=in->gsize;
+-	this->fsize=in->fsize;
+-	this->ssize=in->ssize;
+-	
+-	this->clone=in->clone;
++	this->gsize = in->gsize;
++	this->fsize = in->fsize;
++	this->ssize = in->ssize;
++	this->clone = in->clone;
+ 
+ 	if(this->gsize>0){
+ 		this->f_set=xNew<bool>(this->gsize);
+@@ -57,11 +55,11 @@
+ 		this->gdoflist=xNew<int>(this->gsize); 
+ 	}
+ 	else{
+-		this->f_set=NULL;
+-		this->s_set=NULL;
+-		this->svalues=NULL;
+-		this->doftype=NULL;
+-		this->gdoflist=NULL;
++		this->f_set    = NULL;
++		this->s_set    = NULL;
++		this->svalues  = NULL;
++		this->doftype  = NULL;
++		this->gdoflist = NULL;
+ 	}
+ 	if(this->fsize>0 && this->fsize!=UNDEF)this->fdoflist=xNew<int>(this->fsize); else this->fdoflist=NULL;
+ 	if(this->ssize>0 && this->ssize!=UNDEF)this->sdoflist=xNew<int>(this->ssize); else this->sdoflist=NULL;
+@@ -94,10 +92,8 @@
+ /*FUNCTION DofIndexing::Init{{{*/
+ void DofIndexing::Init(int in_gsize,int* in_doftype){
+ 
+-	int i;
+ 	this->gsize=in_gsize;
+-	
+-	this->clone=0;
++	this->clone=false;
+ 
+ 	/*allocate: */
+ 	if(this->gsize>0){
+@@ -108,7 +104,7 @@
+ 		this->gdoflist=xNew<int>(this->gsize);
+ 	}
+ 
+-	for (i=0;i<this->gsize;i++){
++	for(int i=0;i<this->gsize;i++){
+ 		/*assume dof is free, no constraints, no rigid body constraint: */
+ 		this->f_set[i]=true;
+ 		this->s_set[i]=false;
+Index: ../trunk-jpl/src/c/classes/DofIndexing.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/DofIndexing.h	(revision 13411)
++++ ../trunk-jpl/src/c/classes/DofIndexing.h	(revision 13412)
+@@ -17,7 +17,7 @@
+ 		int ssize; //number of constrained dofs
+ 
+ 		/*partitioning: */
+-		int     clone;   //this node is replicated from another one 
++		bool clone;   //this node is replicated from another one 
+ 
+ 		/*boundary conditions sets: */
+ 		bool*     f_set; //is dof on f-set (on which we solve)
+Index: ../trunk-jpl/src/c/classes/objects/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13411)
++++ ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13412)
+@@ -871,7 +871,6 @@
+ void  Node::DistributeDofs(int* pdofcount,int setenum){
+ 
+ 	int i;
+-	extern int my_rank;
+ 	int dofcount;
+ 
+ 	dofcount=*pdofcount;
+@@ -880,14 +879,12 @@
+ 	if(setenum==FsetEnum) this->indexing.InitSet(setenum);
+ 	if(setenum==SsetEnum) this->indexing.InitSet(setenum);
+ 	
+-		
+ 	/*For clone nodfs, don't distribute dofs, we will get them from another cpu in UpdateCloneDofs!*/
+ 	if(indexing.clone){
+ 		return;
+ 	}
+ 
+ 	/*This node should distribute dofs for setenum set (eg, f_set or s_set), go ahead: */
+-
+ 	if(setenum==GsetEnum){
+ 		for(i=0;i<this->indexing.gsize;i++){
+ 			indexing.gdoflist[i]=dofcount+i;
+@@ -908,17 +905,14 @@
+ 	}
+ 	else _error_("set of enum type " << EnumToStringx(setenum) << " not supported yet!");
+ 
+-
+ 	/*Assign output pointers: */
+ 	*pdofcount=dofcount;
+-
+ }
+ /*}}}*/
+ /*FUNCTION Node::OffsetDofs{{{*/
+ void  Node::OffsetDofs(int dofcount,int setenum){
+ 	
+ 	int i;
+-	extern int my_rank;
+ 	
+ 	if(indexing.clone){
+ 		/*This node is a clone, don't off_set the dofs!: */
+@@ -942,16 +936,24 @@
+ void  Node::ShowTrueDofs(int* truedofs, int ncols,int setenum){
+ 
+ 	int j;
+-	extern int my_rank;
+-	
++
+ 	/*Are we a clone? : */
+-	if(indexing.clone)return;
++	if(indexing.clone) return;
+ 
+ 	/*Ok, we are not a clone, just plug our dofs into truedofs: */
+-	if(setenum==GsetEnum)for(j=0;j<this->indexing.gsize;j++)  *(truedofs+ncols*sid+j)=indexing.gdoflist[j];
+-	else if(setenum==FsetEnum)for(j=0;j<this->indexing.fsize;j++)  *(truedofs+ncols*sid+j)=indexing.fdoflist[j];
+-	else if(setenum==SsetEnum)for(j=0;j<this->indexing.ssize;j++)  *(truedofs+ncols*sid+j)=indexing.sdoflist[j];
+-	else _error_("set of enum type " << EnumToStringx(setenum) << " not supported yet!");
++	switch(setenum){
++		case GsetEnum:
++			for(j=0;j<this->indexing.gsize;j++) truedofs[ncols*sid+j]=indexing.gdoflist[j];
++			break;
++		case FsetEnum:
++			for(j=0;j<this->indexing.fsize;j++) truedofs[ncols*sid+j]=indexing.fdoflist[j];
++			break;
++		case SsetEnum:
++			for(j=0;j<this->indexing.ssize;j++) truedofs[ncols*sid+j]=indexing.sdoflist[j];
++			break;
++		default:
++			_error_("set of enum type " << EnumToStringx(setenum) << " not supported yet!");
++	}
+ 
+ }
+ /*}}}*/
+@@ -959,19 +961,25 @@
+ void  Node::UpdateCloneDofs(int* alltruedofs,int ncols,int setenum){
+ 
+ 	int j;
+-	extern int my_rank;
+-	
++
+ 	/*If we are not a clone, don't update, we already have dofs!: */
+-	if(indexing.clone==0)return;
++	if(!indexing.clone)return;
+ 
+-
+ 	/*Ok, we are a clone node, but we did not create the dofs for this node.
+-	 *      * Therefore, our doflist is garbage right now. Go pick it up in the alltruedofs: */
+-	if(setenum==GsetEnum)for(j=0;j<this->indexing.gsize;j++) indexing.gdoflist[j]=*(alltruedofs+ncols*sid+j);
+-	else if(setenum==FsetEnum)for(j=0;j<this->indexing.fsize;j++) indexing.fdoflist[j]=*(alltruedofs+ncols*sid+j);
+-	else if(setenum==SsetEnum)for(j=0;j<this->indexing.ssize;j++) indexing.sdoflist[j]=*(alltruedofs+ncols*sid+j);
+-	else _error_("set of enum type " << EnumToStringx(setenum) << " not supported yet!");
+-
++	 *Therefore, our doflist is garbage right now. Go pick it up in the alltruedofs: */
++	switch(setenum){
++		case GsetEnum:
++			for(j=0;j<this->indexing.gsize;j++) indexing.gdoflist[j]=alltruedofs[ncols*sid+j];
++			break;
++		case FsetEnum:
++			for(j=0;j<this->indexing.fsize;j++) indexing.fdoflist[j]=alltruedofs[ncols*sid+j];
++			break;
++		case SsetEnum:
++			for(j=0;j<this->indexing.ssize;j++) indexing.sdoflist[j]=alltruedofs[ncols*sid+j];
++			break;
++		default:
++			_error_("set of enum type " << EnumToStringx(setenum) << " not supported yet!");
++	}
+ }
+ /*}}}*/
+ /*FUNCTION Node::SetClone {{{*/
+@@ -980,13 +988,12 @@
+ 	extern int my_rank;
+ 
+ 	if (minranks[sid]==my_rank){
+-		indexing.clone=0;
++		indexing.clone=false;
+ 	}
+ 	else{
+ 		/*!there is a cpu with lower rank that has the same node, 
+ 		therefore, I am a clone*/
+-		indexing.clone=1; 	
++		indexing.clone=true;	
+ 	}
+-
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13411)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13412)
+@@ -227,19 +227,18 @@
+ void  IoModel::FetchConstants(void){
+ 
+ 	extern int my_rank;
+-	extern int num_procs;
+ 	
+ 	/*record descriptions; */
+ 	int record_enum;
+ 	int record_length;
+-	int record_code; //1 to 7 number
++	int record_code;     //1 to 7 number
+ 
+ 	/*records: */
+-	int  booleanint=0;
+-	int  integer=0;
+-	IssmPDouble scalar=0;
+-	char* string=NULL;
+-	int   string_size;
++	int          booleanint  = 0;
++	int          integer     = 0;
++	IssmPDouble  scalar      = 0;
++	char        *string      = NULL;
++	int          string_size;
+ 
+ 	/*Check that some fields have been allocated*/
+ 	_assert_(this->fid || my_rank);
+@@ -457,8 +456,6 @@
+ void  IoModel::FetchData(bool* pboolean,int data_enum){
+ 
+ 	extern int my_rank;
+-	extern int num_procs;
+-	
+ 
+ 	/*output: */
+ 	int   booleanint;
+@@ -487,7 +484,6 @@
+ void  IoModel::FetchData(int* pinteger,int data_enum){
+ 
+ 	extern int my_rank;
+-	extern int num_procs;
+ 
+ 	/*output: */
+ 	int   integer;
+@@ -514,10 +510,7 @@
+ /*FUNCTION IoModel::FetchData(IssmDouble*   pscalar,int data_enum){{{*/
+ void  IoModel::FetchData(IssmDouble* pscalar,int data_enum){
+ 
+-
+ 	extern int my_rank;
+-	extern int num_procs;
+-	
+ 
+ 	/*output: */
+ 	IssmPDouble   scalar;
+@@ -545,8 +538,6 @@
+ void  IoModel::FetchData(char** pstring,int data_enum){
+ 
+ 	extern int my_rank;
+-	extern int num_procs;
+-	
+ 
+ 	/*output: */
+ 	char* string=NULL;
+@@ -596,7 +587,6 @@
+ void  IoModel::FetchData(int** pmatrix,int* pM,int* pN,int data_enum){
+ 
+ 	extern int my_rank;
+-	extern int num_procs;
+ 	int i,j;
+ 
+ 	/*output: */
+@@ -671,7 +661,6 @@
+ void  IoModel::FetchData(IssmDouble** pmatrix,int* pM,int* pN,int data_enum){
+ 
+ 	extern int my_rank;
+-	extern int num_procs;
+ 
+ 	/*output: */
+ 	int M,N;
+@@ -736,8 +725,6 @@
+ void  IoModel::FetchData(char*** pstrings,int* pnumstrings,int data_enum){
+ 
+ 	extern int my_rank;
+-	extern int num_procs;
+-	
+ 	int i;
+ 
+ 	/*output: */
+@@ -808,7 +795,6 @@
+ 	int i;
+ 
+ 	extern int my_rank;
+-	extern int num_procs;
+ 
+ 	/*output: */
+ 	IssmDouble** matrices=NULL;
+@@ -897,12 +883,9 @@
+ /*FUNCTION IoModel::FetchData(Option**  poption,int data_enum){{{*/
+ void  IoModel::FetchData(Option** poption,int index){
+ 
+-	extern int my_rank;
+-	extern int num_procs;
+-
+ 	/*output: */
+-	int     code;
+-	char   *name        = NULL;
++	int   code;
++	char *name = NULL;
+ 
+ 	/*First get option name*/
+ 	this->FetchData(&name,index);
+@@ -1219,7 +1202,6 @@
+ FILE* IoModel::SetFilePointerToData(int* pcode,int* pvector_type, int data_enum){
+ 
+ 	extern int my_rank;
+-	extern int num_procs;
+ 
+ 	int found=0;
+ 	int record_enum;
+@@ -1314,7 +1296,6 @@
+ 
+ 	#ifdef _HAVE_ADOLC_ //cannot come here unless you are running AD mode, from DeclaredIndependents:
+ 	extern int my_rank;
+-	extern int num_procs;
+ 
+ 	/*output: */
+ 	int M,N;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13412-13413.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13412-13413.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13412-13413.diff	(revision 13980)
@@ -0,0 +1,895 @@
+Index: ../trunk-jpl/src/c/Container/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13412)
++++ ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13413)
+@@ -159,7 +159,6 @@
+ 	/*Allocate ranks: */
+ 	ranks=xNew<int>(numnodes);
+ 	minranks=xNew<int>(numnodes);
+-
+ 	for(i=0;i<numnodes;i++)ranks[i]=num_procs; //no cpu can have rank num_procs. This is the maximum limit.
+ 
+ 	/*Now go through all our objects and ask them to report to who they belong (which rank): */
+@@ -170,7 +169,7 @@
+ 	 * dealt with by another cpu. We take the minimum because we are going to manage dof assignment in increasing 
+ 	 * order of cpu rank. This is also why we initialized this array to num_procs.*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)ranks,(void*)minranks,numnodes,MPI_INT,MPI_MIN,MPI_COMM_WORLD);
++	MPI_Allreduce((void*)ranks,(void*)minranks,numnodes,MPI_INT,MPI_MIN,MPI_COMM_WORLD);
+ 	#else
+ 	for(i=0;i<numnodes;i++)minranks[i]=ranks[i];
+ 	#endif
+@@ -328,27 +327,21 @@
+ /*FUNCTION Nodes::Ranks{{{*/
+ void   Nodes::Ranks(int* ranks,int analysis_type){
+ 
++	extern int my_rank;
++	int        sid;
++
+ 	/*Go through nodes, and for each object, report it cpu: */
++	for(int i=0;i<this->Size();i++){
+ 
+-	int i;
+-	int rank;
+-	int sid;
+-	
+-	for(i=0;i<this->Size();i++){
+-
+ 		Node* node=(Node*)this->GetObjectByOffset(i);
+ 
+ 		/*Check that this node corresponds to our analysis currently being carried out: */
+ 		if (node->InAnalysis(analysis_type)){
+-
+-			rank=node->MyRank();
++			/*Plug rank into ranks, according to sid: */
+ 			sid=node->Sid();
+-
+-			/*Plug rank into ranks, according to id: */
+-			ranks[sid]=rank; 
++			ranks[sid]=my_rank; 
+ 		}
+ 	}
+-	return;
+ }
+ /*}}}*/
+ /*FUNCTION Nodes::SetCurrentConfiguration{{{*/
+Index: ../trunk-jpl/src/c/Container/Vertices.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13412)
++++ ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13413)
+@@ -176,20 +176,15 @@
+ /*FUNCTION Vertices::Ranks{{{*/
+ void   Vertices::Ranks(int* ranks){
+ 
++	extern int my_rank;
++	int        sid;
++
+ 	/*Go through a dataset, and for each object, report it cpu: */
+-
+-	int i;
+-	int rank;
+-	int sid;
+-	
+-	for(i=0;i<this->Size();i++){
++	for(int i=0;i<this->Size();i++){
++		/*Plug rank into ranks, according to id: */
+ 		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
+-		rank=vertex->MyRank();
+ 		sid=vertex->Sid();
+-		
+-		/*Plug rank into ranks, according to id: */
+-		ranks[sid]=rank; 
++		ranks[sid]=my_rank; 
+ 	}
+-	return;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/DofIndexing.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 13412)
++++ ../trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 13413)
+@@ -203,4 +203,3 @@
+ 	_printLine_("");
+ }		
+ /*}}}*/
+-
+Index: ../trunk-jpl/src/c/classes/Patch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Patch.cpp	(revision 13412)
++++ ../trunk-jpl/src/c/classes/Patch.cpp	(revision 13413)
+@@ -2,7 +2,7 @@
+  * \brief: implementation of the Patch object
+  */
+ 
+-/*Include files: {{{*/
++/*Include files */
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -18,26 +18,23 @@
+ #include "../EnumDefinitions/EnumDefinitions.h"
+ #include "../shared/shared.h"
+ #include "../include/include.h"
+-/*}}}*/
+ 
+ /*Object constructors and destructors:*/
+ /*FUNCTION Patch::Patch() default constructor {{{*/
+ Patch::Patch(){
+-	this->numrows=0;
+-	this->numcols=0;
+-	this->maxvertices=0;
+-	this->maxnodes=0;
+-	this->values=NULL;
++	this->numrows     = 0;
++	this->numcols     = 0;
++	this->maxvertices = 0;
++	this->maxnodes    = 0;
++	this->values      = NULL;
+ }
+ /*}}}*/
+ /*FUNCTION Patch::Patch(int numrows, int maxvertices, int maxnodes){{{*/
+ Patch::Patch(int in_numrows, int in_maxvertices, int in_maxnodes){
+ 
+-	int i,j;
+ 	this->numrows=in_numrows;
+ 	this->maxvertices=in_maxvertices;
+ 	this->maxnodes=in_maxnodes;
+-    
+ 	this->numcols=1  //enum_type
+ 		+1           //step
+ 		+1           //time 
+@@ -51,9 +48,9 @@
+ 		this->values=NULL;
+ 	}
+ 	else{
+-	        this->values=xNew<IssmDouble>(this->numcols*this->numrows);
+-		for(i=0;i<this->numrows;i++){
+-			for(j=0;j<this->numcols;j++){
++		this->values=xNew<IssmDouble>(this->numcols*this->numrows);
++		for(int i=0;i<this->numrows;i++){
++			for(int j=0;j<this->numcols;j++){
+ 				this->values[i*this->numcols+j]=NAN;
+ 			}
+ 		}
+@@ -97,8 +94,7 @@
+ 	row=this->values+count*this->numcols;
+ 
+ 	/*Let's remember what is on a row: 
+-	 enum_type step time element_id interpolation vertices_ids nodal_values
+-	 */
++	 enum_type step time element_id interpolation vertices_ids nodal_values */
+ 	row[0]=enum_type;
+ 	row[1]=(IssmDouble)step;
+ 	row[2]=time;
+Index: ../trunk-jpl/src/c/classes/Hook.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Hook.cpp	(revision 13412)
++++ ../trunk-jpl/src/c/classes/Hook.cpp	(revision 13413)
+@@ -2,7 +2,6 @@
+  * \brief: implementation of the Hook object: see Hook.h for more explanations.
+  */
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -17,32 +16,27 @@
+ #include "../shared/shared.h"
+ #include "../include/include.h"
+ 
+-
+ /*Constructor/Destructors*/
+ /*FUNCTION Hook::Hook(){{{*/
+ Hook::Hook(){
+-	this->num=0;
+-	this->objects=NULL;
+-	this->ids=NULL;
+-	this->offsets=NULL;
+-	return;
++	this->num     = 0;
++	this->objects = NULL;
++	this->ids     = NULL;
++	this->offsets = NULL;
+ }
+ /*}}}*/
+ /*FUNCTION Hook::Hook(int* ids, int num){{{*/
+ Hook::Hook(int* in_ids, int in_num){
+ 
+-	/*Intermediaries*/
+-	int i;
+-
+ 	/*Get number of objects to hook*/
+ 	this->num=in_num;
+ 
+ 	/*Get out if num=0*/
+ 	if (num==0){
+ 		/*Empty hook*/
+-		this->ids=NULL;
+-		this->objects=NULL;
+-		this->offsets=NULL;
++		this->ids     = NULL;
++		this->objects = NULL;
++		this->offsets = NULL;
+ 	}
+ 	else{
+ 		/*Allocate: */
+@@ -51,21 +45,19 @@
+ 		this->offsets=xNew<int>(this->num);
+ 
+ 		/*Copy ids: */
+-		for (i=0;i<this->num;i++){
+-			this->ids[i]=in_ids[i];
+-			this->objects[i]=NULL;
+-			this->offsets[i]=0;
++		for(int i=0;i<this->num;i++){
++			this->ids[i]     = in_ids[i];
++			this->objects[i] = NULL;
++			this->offsets[i] = 0;
+ 		}
+ 	}
+ }
+ /*}}}*/
+ /*FUNCTION Hook::~Hook(){{{*/
+ Hook::~Hook(){
+-	/*deallocate: */
+ 	xDelete<Object*>(this->objects);
+ 	xDelete<int>(this->ids);
+ 	xDelete<int>(this->offsets);
+-	return;
+ }
+ /*}}}*/
+ 
+@@ -120,8 +112,6 @@
+ /*FUNCTION Hook::copy {{{*/
+ Object* Hook::copy(void){
+ 
+-	int i;
+-
+ 	/*output: */
+ 	Hook* output=NULL;
+ 
+@@ -131,15 +121,15 @@
+ 	/*copy in the fields: */
+ 	output->num=this->num;
+ 	if(output->num){
+-		output->objects=xNew<Object*>(output->num);
+-		output->ids=xNew<int>(output->num);
+-		output->offsets=xNew<int>(output->num);
++		output->objects = xNew<Object*>(output->num);
++		output->ids     = xNew<int>(output->num);
++		output->offsets = xNew<int>(output->num);
+ 	}
+ 	
+-	for(i=0;i<output->num;i++){
+-		output->objects[i]=this->objects[i];
+-		output->offsets[i]=this->offsets[i];
+-		output->ids[i]=this->ids[i];
++	for(int i=0;i<output->num;i++){
++		output->objects[i] = this->objects[i];
++		output->offsets[i] = this->offsets[i];
++		output->ids[i]     = this->ids[i];
+ 	}
+ 
+ 	return (Object*)output;
+@@ -230,8 +220,6 @@
+ /*FUNCTION Hook::Spawn{{{*/
+ Hook* Hook::Spawn(int* indices, int numindices){
+ 
+-	int i;
+-
+ 	/*output: */
+ 	Hook* output=NULL;
+ 
+@@ -245,20 +233,20 @@
+ 	}
+ 
+ 	/*Else, check that we are requesting a half of num*/
+-	if (numindices>this->num) _error_("Cannot spawn hook with " << numindices << " objects from a Hook of " << this->num << " objects");
++	if(numindices>this->num) _error_("Cannot spawn hook with " << numindices << " objects from a Hook of " << this->num << " objects");
+ 
+ 	/*go pickup the correct objects, ids and offsets :*/
+ 	output->num=numindices;
+ 	if(output->num<1) _error_("Trying to spawn an empty ElementProperties!");
+ 
+-	output->objects=xNew<Object*>(output->num);
+-	output->ids=xNew<int>(output->num);
+-	output->offsets=xNew<int>(output->num);
++	output->objects = xNew<Object*>(output->num);
++	output->ids     = xNew<int>(output->num);
++	output->offsets = xNew<int>(output->num);
+ 
+-	for(i=0;i<output->num;i++){
+-		output->objects[i]=this->objects[indices[i]];
+-		output->ids[i]=this->ids[indices[i]];
+-		output->offsets[i]=this->offsets[indices[i]];
++	for(int i=0;i<output->num;i++){
++		output->objects[i] = this->objects[indices[i]];
++		output->ids[i]     = this->ids[indices[i]];
++		output->offsets[i] = this->offsets[indices[i]];
+ 	}
+ 
+ 	return output;
+Index: ../trunk-jpl/src/c/classes/DofIndexing.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/DofIndexing.h	(revision 13412)
++++ ../trunk-jpl/src/c/classes/DofIndexing.h	(revision 13413)
+@@ -12,27 +12,26 @@
+ 	public:
+ 
+ 		/*sizes: */
+-		int gsize; //number of dofs for a node
+-		int fsize; //number of dofs solver for
+-		int ssize; //number of constrained dofs
++		int gsize;   //number of dofs for a node
++		int fsize;   //number of dofs solver for
++		int ssize;   //number of constrained dofs
+ 
+ 		/*partitioning: */
+-		bool clone;   //this node is replicated from another one 
++		bool clone;   //this node is replicated from another one
+ 
+ 		/*boundary conditions sets: */
+-		bool*     f_set; //is dof on f-set (on which we solve)
+-		bool*     s_set; //is dof on s-set (on which boundary conditions -dirichlet- are applied)
+-		IssmDouble*   svalues; //list of constraint values. size g_size, for ease of use.
++		bool       *f_set;     //is dof on f-set (on which we solve)
++		bool       *s_set;     //is dof on s-set (on which boundary conditions -dirichlet- are applied)
++		IssmDouble *svalues;   //list of constraint values. size g_size, for ease of use.
+ 
+ 		/*types of dofs: */
+-		int*     doftype; //approximation type of the dofs (used only for coupling), size g_size
++		int        *doftype;   //approximation type of the dofs (used only for coupling), size g_size
+ 		
+ 		/*list of degrees of freedom: */
+-		int*     gdoflist; //dof list in g_set
+-		int*     fdoflist; //dof list in f_set
+-		int*     sdoflist; //dof list in s_set
++		int *gdoflist;   //dof list in g_set
++		int *fdoflist;   //dof list in f_set
++		int *sdoflist;   //dof list in s_set
+ 
+-
+ 		/*DofIndexing constructors, destructors {{{*/
+ 		DofIndexing();
+ 		DofIndexing(int g_size);
+Index: ../trunk-jpl/src/c/classes/Patch.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Patch.h	(revision 13412)
++++ ../trunk-jpl/src/c/classes/Patch.h	(revision 13413)
+@@ -19,7 +19,6 @@
+ 	   VzEnum 2  .8  2 P1  1 3 4     4.5 3.2  2.5
+ */
+ 
+-
+ #ifndef _PATCH_H_
+ #define  _PATCH_H_
+ 
+@@ -28,12 +27,11 @@
+ 
+ 	public:
+ 
+-		int     numrows; //number of results held in Patch object
+-		int     numcols; //number of columns
+-		int     maxvertices; //maxvertices corresponds to largest amount of vertices on a given element, determined by the geometry.
+-		int     maxnodes;    // maxnodes corresponds to the largest amout of nodes on a given element, determined by the interpolation type.
+-		
+-		IssmDouble* values;  //result values
++		int         numrows;       //number of results held in Patch object
++		int         numcols;       //number of columns
++		int         maxvertices;   //largest amount of vertices on a given element, determined by geometry
++		int         maxnodes;      //the largest amout of nodes on a given element, determined by interpolation
++		IssmDouble *values;        //result values
+ 
+ 		Patch();
+ 		Patch(int numrows, int maxvertices, int maxnodes);
+Index: ../trunk-jpl/src/c/classes/Hook.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Hook.h	(revision 13412)
++++ ../trunk-jpl/src/c/classes/Hook.h	(revision 13413)
+@@ -18,10 +18,10 @@
+ 
+ 	private: 
+ 
+-		int	   num; //number of objects being hooked onto
+-		Object**	   objects; //list of object pointers. we do not allocate objects, just a list a pointers, that will get to point to the real objects from a dataset.
+-		int*   ids;     //list of object ids, to go look for them in datasets.
+-		int*   offsets;  //list of object offsets into datasets, to speed up lookup.
++		int      num;       //number of objects being hooked onto
++		Object **objects;   //list of object pointers
++		int     *ids;       //list of object ids, to go look for them in datasets.
++		int     *offsets;   //list of object offsets into datasets, to speed up lookup.
+ 
+ 	public:
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Contour.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Contour.h	(revision 13412)
++++ ../trunk-jpl/src/c/classes/objects/Contour.h	(revision 13413)
+@@ -21,28 +21,28 @@
+ 
+ 	public: 
+ 
+-		int     id;
+-		int	  nods;  //number of vertices in the contour
+-		doubletype* x;
+-		doubletype* y;
+-		bool    closed; //is this contour closed?
++		int         id;
++		int         nods;     //number of vertices in the contour
++		doubletype *x;
++		doubletype *y;
++		bool        closed;   //is this contour closed?
+ 
+ 		/*Contour constructors, destructors :*/
+-		/*FUNCTION Contour() default constructor {{{*/
++		/*FUNCTION Contour() {{{*/
+ 		Contour(){
+-			this->id=0;
+-			this->nods=0;
+-			this->x=NULL;
+-			this->y=NULL;
+-			this->closed=false;
++			this->id     = 0;
++			this->nods   = 0;
++			this->x      = NULL;
++			this->y      = NULL;
++			this->closed = false;
+ 		}
+ 		/*}}}*/
+ 		/*FUNCTION Contour(int pid, int nods, doubletype* x, doubletype* y,bool closed) {{{*/
+ 		Contour(int pid,int pnods, doubletype* px, doubletype* py,bool pclosed){
+ 
+-			this->id=pid;
+-			this->nods=pnods;
+-			this->closed=pclosed;
++			this->id     = pid;
++			this->nods   = pnods;
++			this->closed = pclosed;
+ 			if(nods){
+ 				this->x=xNew<doubletype>(nods);
+ 				xMemCpy<doubletype>(this->x,px,nods);
+@@ -51,27 +51,23 @@
+ 			}
+ 		}
+ 		/*}}}*/
+-		/*FUNCTION Contour() default constructor {{{*/
++		/*FUNCTION ~Contour() {{{*/
+ 		~Contour(){
+ 			xDelete<doubletype>(this->x);
+ 			xDelete<doubletype>(this->y);
+ 		}
+ 		/*}}}*/
+ 
+-
+ 		/*Object virtual function resolutoin: */
+ 		/*FUNCTION Echo(){{{*/
+ 		void Echo(void){
+-
+-			int i;
+-
+-			_printLine_("Contour: " << id);
+-			_printLine_("   nods: " << nods);
+-			_printLine_("   closed: " << (closed?"true":"false"));
++			_printLine_(" Contour: " << id);
++			_printLine_("    nods: " << nods);
++			_printLine_("  closed: " << (closed?"true":"false"));
+ 			if(nods){
+-				_printLine_("   x,y:");
+-				for(i=0;i<nods;i++){
+-					_printLine_(i << ": " << x[i] << "|" << y[i]);
++				_printLine_("   x , y:");
++				for(int i=0;i<nods;i++){
++					_printLine_(i << ": " << x[i] << " | " << y[i]);
+ 				}
+ 			}
+ 		}
+@@ -87,24 +83,19 @@
+ 		}
+ 		/*}}}*/
+ 		/*FUNCTION MyRank{{{*/
+-		int    MyRank(void){ 
++		int MyRank(void){ 
+ 			extern int my_rank;
+-
+ 			return my_rank; 
+ 		}
+ 		/*}}}*/
+ 		/*FUNCTION ObjectEnum{{{*/
+ 		int ObjectEnum(void){
+-
+ 			return ContourEnum;
+-
+ 		}
+ 		/*}}}*/
+ 		/*FUNCTION copy {{{*/
+ 		Object* copy() {
+-
+ 			return new Contour(*this); 
+-
+ 		}
+ 		/*}}}*/
+ };
+Index: ../trunk-jpl/src/c/classes/objects/Object.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Object.h	(revision 13412)
++++ ../trunk-jpl/src/c/classes/objects/Object.h	(revision 13413)
+@@ -19,7 +19,6 @@
+ 		virtual void  Echo()=0;
+ 		virtual void  DeepEcho()=0;
+ 		virtual int   Id()=0;
+-		virtual int   MyRank()=0;
+ 		virtual int   ObjectEnum()=0;
+ 		virtual Object* copy()=0;
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Node.h	(revision 13412)
++++ ../trunk-jpl/src/c/classes/objects/Node.h	(revision 13413)
+@@ -24,14 +24,14 @@
+ 
+ 	public: 
+ 
+-		int	    id;  //unique arbitrary id.
+-		int     sid; //sid for "serial" id, ie the rank of this node in the nodes dataset, if the dataset was serial on 1 cpu.
++		int id;    //unique arbitrary id.
++		int sid;   //"serial" id (rank of this node if the dataset was serial on 1 cpu)
+ 				
+-		DofIndexing    indexing;
+-		Hook*          hvertex;
+-		Inputs*        inputs; //properties of this node
+-		int            analysis_type;
+-		IssmDouble         coord_system[3][3];
++		DofIndexing  indexing;
++		Hook        *hvertex;
++		Inputs      *inputs;               //properties of this node
++		int          analysis_type;
++		IssmDouble   coord_system[3][3];
+ 
+ 		/*Node constructors, destructors {{{*/
+ 		Node();
+@@ -47,7 +47,6 @@
+ 		Object* copy(){_error_("Not implemented yet (similar to Elements)");};
+ 		/*}}}*/
+ 		/*Update virtual functions definitions: {{{*/
+-		
+ 		void  InputUpdateFromVector(IssmDouble* vector, int name, int type);
+ 		void  InputUpdateFromVector(int* vector, int name, int type);
+ 		void  InputUpdateFromVector(bool* vector, int name, int type);
+@@ -97,9 +96,6 @@
+ 		void   UpdateSpcs(IssmDouble* ys);
+ 		void   VecMerge(Vector<IssmDouble>* ug, IssmDouble* vector_serial,int setenum);
+ 		void   VecReduce(Vector<IssmDouble>* vector, IssmDouble* ug_serial,int setnum);
+-		
+-		/*}}}*/
+-		/*Dof Object routines {{{*/
+ 		void  DistributeDofs(int* pdofcount,int setenum);
+ 		void  OffsetDofs(int dofcount,int setenum);
+ 		void  ShowTrueDofs(int* truerows,int ncols,int setenum);
+Index: ../trunk-jpl/src/c/classes/Update.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Update.h	(revision 13412)
++++ ../trunk-jpl/src/c/classes/Update.h	(revision 13413)
+@@ -32,4 +32,3 @@
+ };
+ 
+ #endif //ifndef _UPDATE_H_
+-
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13412)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13413)
+@@ -23,20 +23,20 @@
+ 
+ /*FUNCTION IoModel::IoModel(){{{*/
+ IoModel::IoModel(){
+-	this->fid=NULL;
+-	this->data=NULL;
+-	this->independents=NULL;
+-	this->constants=NULL;
++	this->fid          = NULL;
++	this->data         = NULL;
++	this->independents = NULL;
++	this->constants    = NULL;
+ 	
+-	this->my_elements=NULL;
+-	this->my_nodes=NULL;
+-	this->my_vertices=NULL;
+-	this->singlenodetoelementconnectivity=NULL;
+-	this->numbernodetoelementconnectivity=NULL;
++	this->my_elements                     = NULL;
++	this->my_nodes                        = NULL;
++	this->my_vertices                     = NULL;
++	this->singlenodetoelementconnectivity = NULL;
++	this->numbernodetoelementconnectivity = NULL;
+ 	
+-	this->nodecounter=0;
+-	this->loadcounter=0;
+-	this->constraintcounter=0;
++	this->nodecounter       = 0;
++	this->loadcounter       = 0;
++	this->constraintcounter = 0;
+ }
+ /*}}}*/
+ /*FUNCTION IoModel::IoModel(FILE*  iomodel_handle){{{*/
+@@ -61,15 +61,15 @@
+ 	for(int i=0;i<MaximumNumberOfEnums;i++) this->independents[i]=false;
+ 	
+ 	/*Initialize permanent data: */
+-	this->my_elements=NULL;
+-	this->my_nodes=NULL;
+-	this->my_vertices=NULL;
+-	this->singlenodetoelementconnectivity=NULL;
+-	this->numbernodetoelementconnectivity=NULL;
++	this->my_elements                     = NULL;
++	this->my_nodes                        = NULL;
++	this->my_vertices                     = NULL;
++	this->singlenodetoelementconnectivity = NULL;
++	this->numbernodetoelementconnectivity = NULL;
+ 	
+-	this->nodecounter=0;
+-	this->loadcounter=0;
+-	this->constraintcounter=0;
++	this->nodecounter       = 0;
++	this->loadcounter       = 0;
++	this->constraintcounter = 0;
+ }
+ /*}}}*/
+ /*FUNCTION IoModel::~IoModel(){{{*/
+@@ -199,15 +199,13 @@
+ /*FUNCTION IoModel::DeleteData(int num,...){{{*/
+ void  IoModel::DeleteData(int num,...){
+ 
+-	va_list ap;
+-	int     dataenum;
+-	int     i;
+-	DoubleMatParam* parameter=NULL;
++	va_list         ap;
++	int             dataenum;
++	DoubleMatParam *parameter = NULL;
+ 
+ 	/*Go through the entire list of enums and delete the corresponding data from the iomodel-data dataset: */
+-
+ 	va_start(ap,num);
+-	for(i = 0; i <num; i++){
++	for(int i=0; i<num; i++){
+ 		dataenum=va_arg(ap, int);
+ 		_assert_(dataenum<MaximumNumberOfEnums);
+ 		
+@@ -216,7 +214,7 @@
+ 	}
+ 	va_end(ap);
+ } /*}}}*/
+-/*FUNCTION IoModel::DeleteData(IssmDouble* {{{*/
++/*FUNCTION IoModel::DeleteData(IssmDouble* vector, int dataenum) {{{*/
+ void  IoModel::DeleteData(IssmDouble* vector, int dataenum){
+ 
+ 	/*do not erase independent variables for the AD mode computations!: */
+@@ -474,7 +472,6 @@
+ 	MPI_Bcast(&booleanint,1,MPI_INT,0,MPI_COMM_WORLD); 
+ 	#endif
+ 
+-	/*cast to bool: */
+ 	/*Assign output pointers: */
+ 	*pboolean=(bool)booleanint;
+ 
+@@ -513,8 +510,8 @@
+ 	extern int my_rank;
+ 
+ 	/*output: */
+-	IssmPDouble   scalar;
+-	int      code;
++	IssmPDouble scalar;
++	int         code;
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+@@ -549,8 +546,6 @@
+ 	
+ 	if(code!=4)_error_("expecting a string for enum " << EnumToStringx(data_enum));
+ 	
+-	/*Now fetch: */
+-	
+ 	/*We have to read a string from disk. First read the dimensions of the string, then the string: */
+ 	if(my_rank==0){  
+ 		if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
+@@ -578,7 +573,6 @@
+ 		string[0]='\0';
+ 	}
+ 
+-
+ 	/*Assign output pointers: */
+ 	*pstring=string;
+ }
+@@ -602,8 +596,6 @@
+ 
+ 	if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
+ 	
+-	/*Now fetch: */
+-
+ 	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+ 	/*numberofelements: */
+ 	if(my_rank==0){  
+@@ -672,8 +664,6 @@
+ 	fid=this->SetFilePointerToData(&code,&vector_type,data_enum);
+ 	if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
+ 	
+-	/*Now fetch: */
+-
+ 	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+ 	/*numberofelements: */
+ 	if(my_rank==0){  
+@@ -793,14 +783,13 @@
+ void  IoModel::FetchData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){
+ 
+ 	int i;
+-
+ 	extern int my_rank;
+ 
+ 	/*output: */
+-	IssmDouble** matrices=NULL;
+-	int*     mdims=NULL;
+-	int*     ndims=NULL;
+-	int      numrecords=0;
++	IssmDouble **matrices   = NULL;
++	int         *mdims      = NULL;
++	int         *ndims      = NULL;
++	int          numrecords = 0;
+ 
+ 	/*intermediary: */
+ 	int     M, N;
+@@ -929,17 +918,17 @@
+ /*FUNCTION IoModel::FetchData(int num,...){{{*/
+ void  IoModel::FetchData(int num,...){
+ 
+-	va_list ap;
+-	int     dataenum;
+-	IssmDouble* matrix=NULL;
+-	int     M,N;
+-	int     i;
++	va_list     ap;
++	int         dataenum;
++	IssmDouble *matrix   = NULL;
++	int         M,N;
+ 
+-	/*Go through the entire list of enums and fetch the corresponding data. Add it to the iomodel->data dataset. Everything
+-	 *we fetch is a IssmDouble* : */
++	/*Go through the entire list of enums and fetch the corresponding data.
++	 * Add it to the iomodel->data dataset. Everything
++	 * we fetch is a IssmDouble* : */
+ 	
+ 	va_start(ap,num);
+-	for(i=0; i<num; i++){
++	for(int i=0; i<num; i++){
+ 		
+ 		dataenum=va_arg(ap, int);
+ 		
+@@ -963,7 +952,6 @@
+ 		this->data[dataenum]=matrix;
+ 	}
+ 	va_end(ap);
+-
+ }
+ /*}}}*/
+ /*FUNCTION IoModel::FetchDataToInput{{{*/
+@@ -982,7 +970,6 @@
+ 	int     nel;
+ 	int     numberofelements;
+ 
+-
+ 	/*variables being fetched: */
+ 	bool    boolean;
+ 	int     integer;
+@@ -1308,8 +1295,6 @@
+ 	fid=this->SetFilePointerToData(&code,&vector_type,independent_enum);
+ 	if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(independent_enum));
+ 	
+-	/*Now fetch: */
+-
+ 	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+ 	/*numberofelements: */
+ 	if(my_rank==0){  
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13412)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13413)
+@@ -2,7 +2,6 @@
+  * \brief: implementation of the FemModel object
+  */
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -32,10 +31,10 @@
+ 	if(my_rank==0) IOMODEL = pfopen(inputfilename ,"rb");
+ 
+ 	/*Initialize internal data: */
+-	this->nummodels=nummodels;
+-	this->solution_type=in_solution_type;
+-	this->analysis_counter=nummodels-1; //point to last analysis_type carried out.
+-	this->results=new Results(); //not initialized by CreateDataSets
++	this->nummodels        = nummodels;
++	this->solution_type    = in_solution_type;
++	this->analysis_counter = nummodels-1;   //point to last analysis_type carried out.
++	this->results          = new Results(); //not initialized by CreateDataSets
+ 	
+ 	/*Dynamically allocate whatever is a list of length nummodels: */
+ 	analysis_type_list=xNew<int>(nummodels);
+@@ -73,9 +72,7 @@
+ 
+ 	/*Add output file name to parameters: */
+ 	this->parameters->AddObject(new StringParam(OutputfilenameEnum,outputfilename));
+-
+ }
+-
+ /*}}}*/
+ /*FUNCTION FemModel::destructor {{{*/
+ FemModel::~FemModel(){
+@@ -152,8 +149,6 @@
+ /*}}}*/
+ /*FUNCTION FemModel::SetCurrentConfiguration(int configuration_type){{{*/
+ void FemModel::SetCurrentConfiguration(int configuration_type){
+-
+-	/*overload: analysis_type = configuration_type: */
+ 	this->SetCurrentConfiguration(configuration_type,configuration_type);
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 13412)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 13413)
+@@ -18,13 +18,13 @@
+ class IoModel {
+ 
+ 	private: 
+-		Parameters  *constants;   //this dataset holds all IssmDouble, int, bool and char *parameters read in from the input file.*
++		Parameters *constants;   //this dataset holds all IssmDouble, int, bool and char from input
+ 	
+ 	public:
+-		IssmDouble **data;        //this dataset holds temporary data, memory intensive.
++		IssmDouble **data;   //this dataset holds temporary data, memory intensive.
+ 		
+ 		/*This data needs to stay memory resident at all time, even if it's memory intensive: */
+-		FILE *fid;         //pointer to input file
++		FILE *fid;                               //pointer to input file
+ 		bool *my_elements;
+ 		bool *my_nodes;
+ 		int  *my_vertices;
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13412)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13413)
+@@ -27,20 +27,20 @@
+ 
+ 	public:
+ 
+-		int                 nummodels;
+-		int                 solution_type;
+-		int*                analysis_type_list; //list of analyses this femmodel is going to carry out
+-		int                 analysis_counter; //counter into analysis_type_list
+-		
+-		Elements*           elements; //elements (one set for all analyses)
+-		Nodes*              nodes; //one set of nodes
+-		Vertices*           vertices; //one set of vertices
+-		Constraints*        constraints; //one set of constraints. each constraint knows which analysis_type it handles
+-		Loads*              loads;  //one set of constraints. each constraint knows which analysis_type it handles
+-		Materials*          materials;  //one set of materials, for each element
+-		Parameters*         parameters; //one set of parameters, independent of the analysis_type
+-		Results*            results; //results that cannot be fit into the elements (such as one time constants, arrays, strings, etc ...)
++		int          nummodels;
++		int          solution_type;
++		int         *analysis_type_list;   //list of analyses this femmodel is going to carry out
++		int          analysis_counter;     //counter into analysis_type_list
+ 
++		Elements    *elements;             //elements (one set for all analyses)
++		Nodes       *nodes;                //one set of nodes
++		Vertices    *vertices;             //one set of vertices
++		Constraints *constraints;          //one set of constraints. each constraint knows which analysis_type it handles
++		Loads       *loads;                //one set of constraints. each constraint knows which analysis_type it handles
++		Materials   *materials;            //one set of materials, for each element
++		Parameters  *parameters;           //one set of parameters, independent of the analysis_type
++		Results     *results;              //results that cannot be fit into the elements 
++
+ 		/*constructors, destructors: */
+ 		FemModel(char* rootpath, char* inputfilename, char* outputfilename, const int solution_type,const int* analyses,const int nummodels);
+ 		~FemModel();
Index: /issm/oecreview/Archive/13393-13976/ISSM-13413-13414.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13413-13414.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13413-13414.diff	(revision 13980)
@@ -0,0 +1,2361 @@
+Index: ../trunk-jpl/src/c/include/types.h
+===================================================================
+--- ../trunk-jpl/src/c/include/types.h	(revision 13413)
++++ ../trunk-jpl/src/c/include/types.h	(revision 13414)
+@@ -39,6 +39,4 @@
+ typedef IssmDouble IssmPDouble;
+ #endif
+ 
+-typedef bool IssmBool;
+-
+ #endif //ifndef _TYPES_H_
+Index: ../trunk-jpl/src/c/classes/objects/Contour.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Contour.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Contour.h	(revision 13414)
+@@ -82,12 +82,6 @@
+ 			return id;
+ 		}
+ 		/*}}}*/
+-		/*FUNCTION MyRank{{{*/
+-		int MyRank(void){ 
+-			extern int my_rank;
+-			return my_rank; 
+-		}
+-		/*}}}*/
+ 		/*FUNCTION ObjectEnum{{{*/
+ 		int ObjectEnum(void){
+ 			return ContourEnum;
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp	(revision 13414)
+@@ -81,12 +81,6 @@
+ /*FUNCTION Matdamageice::Id {{{*/
+ int    Matdamageice::Id(void){ return mid; }
+ /*}}}*/
+-/*FUNCTION Matdamageice::MyRank {{{*/
+-int    Matdamageice::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION Matdamageice::ObjectEnum{{{*/
+ int Matdamageice::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Matice.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Matice.cpp	(revision 13414)
+@@ -81,12 +81,6 @@
+ /*FUNCTION Matice::Id {{{*/
+ int    Matice::Id(void){ return mid; }
+ /*}}}*/
+-/*FUNCTION Matice::MyRank {{{*/
+-int    Matice::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION Matice::ObjectEnum{{{*/
+ int Matice::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Matpar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Matpar.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Matpar.cpp	(revision 13414)
+@@ -84,12 +84,6 @@
+ /*FUNCTION Matpar::Id {{{*/
+ int    Matpar::Id(void){ return mid; }
+ /*}}}*/
+-/*FUNCTION Matpar::MyRank {{{*/
+-int    Matpar::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION Matpar::ObjectEnum{{{*/
+ int Matpar::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.h	(revision 13414)
+@@ -27,7 +27,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Matice.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Matice.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Matice.h	(revision 13414)
+@@ -14,8 +14,8 @@
+ class Matice: public Material{
+ 
+ 	private: 
+-		int	   mid;
+-		Hook* helement;
++		int   mid;
++		Hook *helement;
+ 
+ 	public:
+ 		/*Matice constructors, destructors: {{{*/
+@@ -27,7 +27,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Matpar.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Matpar.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Matpar.h	(revision 13414)
+@@ -42,12 +42,11 @@
+ 		~Matpar();
+ 
+ 		/*Object virtual functions definitions:{{{ */
+-		void  Echo();
+-		void  DeepEcho();
+-		int   Id(); 
+-		int   MyRank();
+-		int   ObjectEnum();
+-		Object* copy();
++		void    Echo();
++		void    DeepEcho();
++		int     Id();
++		int     ObjectEnum();
++		Object *copy();
+ 		/*}}}*/
+ 		/*Update virtual functions resolution: {{{*/
+ 		void   InputUpdateFromVector(IssmDouble* vector, int name, int type);
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.h	(revision 13414)
+@@ -28,7 +28,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp	(revision 13414)
+@@ -83,12 +83,6 @@
+ /*FUNCTION ControlInput::Id{{{*/
+ int    ControlInput::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION ControlInput::MyRank{{{*/
+-int    ControlInput::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION ControlInput::ObjectEnum{{{*/
+ int ControlInput::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.h	(revision 13414)
+@@ -33,7 +33,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp	(revision 13414)
+@@ -54,12 +54,6 @@
+ /*FUNCTION DatasetInput::Id{{{*/
+ int    DatasetInput::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION DatasetInput::MyRank{{{*/
+-int    DatasetInput::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION DatasetInput::ObjectEnum{{{*/
+ int DatasetInput::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.h	(revision 13414)
+@@ -16,10 +16,9 @@
+ class DatasetInput: public Input{
+ 
+ 	public:
+-		int    enum_type;
++		int     enum_type;
++		Inputs *inputs;
+ 
+-		Inputs*     inputs;
+-
+ 		/*DatasetInput constructors, destructors: {{{*/
+ 		DatasetInput();
+ 		DatasetInput(int enum_type);
+@@ -29,7 +28,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id();
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/IntInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/IntInput.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/IntInput.cpp	(revision 13414)
+@@ -47,12 +47,6 @@
+ /*FUNCTION IntInput::Id{{{*/
+ int    IntInput::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION IntInput::MyRank{{{*/
+-int    IntInput::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION IntInput::ObjectEnum{{{*/
+ int IntInput::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/BoolInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/BoolInput.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/BoolInput.cpp	(revision 13414)
+@@ -22,8 +22,8 @@
+ 	return;
+ }
+ /*}}}*/
+-/*FUNCTION BoolInput::BoolInput(IssmDouble* values){{{*/
+-BoolInput::BoolInput(int in_enum_type,IssmBool in_value){
++/*FUNCTION BoolInput::BoolInput(int in_enum_type,bool in_value){{{*/
++BoolInput::BoolInput(int in_enum_type,bool in_value){
+ 
+ 	enum_type=in_enum_type;
+ 	value=in_value;
+@@ -52,12 +52,6 @@
+ /*FUNCTION BoolInput::Id{{{*/
+ int    BoolInput::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION BoolInput::MyRank{{{*/
+-int    BoolInput::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION BoolInput::ObjectEnum{{{*/
+ int BoolInput::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/IntInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/IntInput.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/IntInput.h	(revision 13414)
+@@ -29,7 +29,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/BoolInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/BoolInput.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/BoolInput.h	(revision 13414)
+@@ -17,21 +17,20 @@
+ 
+ 	public:
+ 		/*just hold 3 values for 3 vertices: */
+-		int    enum_type;
+-		IssmBool value;
++		int  enum_type;
++		bool value;
+ 
+ 		/*BoolInput constructors, destructors: {{{*/
+ 		BoolInput();
+-		BoolInput(int enum_type,IssmBool value);
++		BoolInput(int enum_type,bool value);
+ 		~BoolInput();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+-		void  Echo();
+-		void  DeepEcho();
+-		int   Id(); 
+-		int   MyRank();
+-		int   ObjectEnum();
+-		Object* copy();
++		void    Echo();
++		void    DeepEcho();
++		int     Id();
++		int     ObjectEnum();
++		Object *copy();
+ 		/*}}}*/
+ 		/*BoolInput management: {{{*/
+ 		int   InstanceEnum();
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp	(revision 13414)
+@@ -63,12 +63,6 @@
+ /*FUNCTION TriaP1Input::Id{{{*/
+ int    TriaP1Input::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION TriaP1Input::MyRank{{{*/
+-int    TriaP1Input::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION TriaP1Input::ObjectEnum{{{*/
+ int TriaP1Input::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.h	(revision 13414)
+@@ -17,7 +17,7 @@
+ 
+ 	public:
+ 		/*just hold 3 values for 3 vertices: */
+-		int    enum_type;
++		int        enum_type;
+ 		IssmDouble values[3];
+ 
+ 		/*TriaP1Input constructors, destructors: {{{*/
+@@ -26,12 +26,11 @@
+ 		~TriaP1Input();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+-		void  Echo();
+-		void  DeepEcho();
+-		int   Id(); 
+-		int   MyRank();
+-		int   ObjectEnum();
+-		Object* copy();
++		void    Echo();
++		void    DeepEcho();
++		int     Id();
++		int     ObjectEnum();
++		Object *copy();
+ 		/*}}}*/
+ 		/*TriaP1Input management: {{{*/
+ 		int   InstanceEnum();
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 13414)
+@@ -78,12 +78,6 @@
+ /*FUNCTION TransientInput::Id{{{*/
+ int    TransientInput::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION TransientInput::MyRank{{{*/
+-int    TransientInput::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION TransientInput::ObjectEnum{{{*/
+ int TransientInput::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp	(revision 13414)
+@@ -63,12 +63,6 @@
+ /*FUNCTION PentaP1Input::Id{{{*/
+ int    PentaP1Input::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION PentaP1Input::MyRank{{{*/
+-int    PentaP1Input::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION PentaP1Input::ObjectEnum{{{*/
+ int PentaP1Input::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.cpp	(revision 13414)
+@@ -52,12 +52,6 @@
+ /*FUNCTION DoubleInput::Id{{{*/
+ int    DoubleInput::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION DoubleInput::MyRank{{{*/
+-int    DoubleInput::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION DoubleInput::ObjectEnum{{{*/
+ int DoubleInput::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.h	(revision 13414)
+@@ -16,11 +16,11 @@
+ class TransientInput: public Input{
+ 
+ 	public:
+-		int     enum_type;
+-		int     numtimesteps;
+-		Inputs* inputs;
+-		IssmDouble* timesteps;
+-		Parameters* parameters; //to find current time.
++		int         enum_type;
++		int         numtimesteps;
++		Inputs     *inputs;
++		IssmDouble *timesteps;
++		Parameters *parameters;     //to find current time.
+ 
+ 		/*TransientInput constructors, destructors: {{{*/
+ 		TransientInput();
+@@ -32,7 +32,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id();
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.h	(revision 13414)
+@@ -17,7 +17,7 @@
+ 
+ 	public:
+ 		/*just hold 6 values for 6 vertices: */
+-		int    enum_type;
++		int        enum_type;
+ 		IssmDouble values[6];
+ 
+ 		/*PentaP1Input constructors, destructors: {{{*/
+@@ -26,12 +26,11 @@
+ 		~PentaP1Input();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+-		void  Echo();
+-		void  DeepEcho();
+-		int   Id(); 
+-		int   MyRank();
+-		int   ObjectEnum();
+-		Object* copy();
++		void    Echo();
++		void    DeepEcho();
++		int     Id();
++		int     ObjectEnum();
++		Object *copy();
+ 		/*}}}*/
+ 		/*PentaP1Input management: {{{*/
+ 		int   InstanceEnum();
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Icon.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Icon.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Icon.h	(revision 13414)
+@@ -44,10 +44,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Point.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Point.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Point.h	(revision 13414)
+@@ -36,10 +36,6 @@
+ 		void  Read(FILE* fid,char* kstr);
+ 		void  WriteExp(FILE* fid,const char* nstr,int sgn,double cm,double sp);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_LinearRing.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_LinearRing.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_LinearRing.h	(revision 13414)
+@@ -38,10 +38,6 @@
+ 		void  Read(FILE* fid,char* kstr);
+ 		void  WriteExp(FILE* fid,const char* nstr,int sgn,double cm,double sp);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Feature.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Feature.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Feature.h	(revision 13414)
+@@ -44,10 +44,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_StyleSelector.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_StyleSelector.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_StyleSelector.h	(revision 13414)
+@@ -29,10 +29,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_LatLonBox.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_LatLonBox.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_LatLonBox.h	(revision 13414)
+@@ -35,10 +35,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Attribute.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Attribute.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Attribute.h	(revision 13414)
+@@ -30,10 +30,6 @@
+ 		virtual void  DeepEcho();
+ 		virtual void  DeepEcho(const char* indent);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_PolyStyle.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_PolyStyle.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_PolyStyle.h	(revision 13414)
+@@ -32,10 +32,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Object.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Object.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Object.h	(revision 13414)
+@@ -31,10 +31,6 @@
+ 		virtual void  DeepEcho();
+ 		virtual void  DeepEcho(const char* indent);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_SubStyle.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_SubStyle.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_SubStyle.h	(revision 13414)
+@@ -29,10 +29,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_LineString.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_LineString.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_LineString.h	(revision 13414)
+@@ -38,10 +38,6 @@
+ 		void  Read(FILE* fid,char* kstr);
+ 		void  WriteExp(FILE* fid,const char* nstr,int sgn,double cm,double sp);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Overlay.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Overlay.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Overlay.h	(revision 13414)
+@@ -36,10 +36,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Container.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Container.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Container.h	(revision 13414)
+@@ -33,10 +33,6 @@
+ 		void  Read(FILE* fid,char* kstr);
+ 		void  WriteExp(FILE* fid,const char* nstr,int sgn,double cm,double sp);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Polygon.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Polygon.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Polygon.h	(revision 13414)
+@@ -40,10 +40,6 @@
+ 		void  Read(FILE* fid,char* kstr);
+ 		void  WriteExp(FILE* fid,const char* nstr,int sgn,double cm,double sp);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Geometry.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Geometry.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Geometry.h	(revision 13414)
+@@ -29,10 +29,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_ColorStyle.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_ColorStyle.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_ColorStyle.h	(revision 13414)
+@@ -35,9 +35,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+ 		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Placemark.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Placemark.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Placemark.h	(revision 13414)
+@@ -34,10 +34,6 @@
+ 		void  Read(FILE* fid,char* kstr);
+ 		void  WriteExp(FILE* fid,const char* nstr,int sgn,double cm,double sp);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Unknown.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Unknown.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Unknown.h	(revision 13414)
+@@ -32,10 +32,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_GroundOverlay.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_GroundOverlay.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_GroundOverlay.h	(revision 13414)
+@@ -36,10 +36,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Style.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Style.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Style.h	(revision 13414)
+@@ -38,10 +38,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Comment.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Comment.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Comment.h	(revision 13414)
+@@ -30,10 +30,6 @@
+ 		virtual void  DeepEcho();
+ 		virtual void  DeepEcho(const char* indent);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_MultiGeometry.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_MultiGeometry.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_MultiGeometry.h	(revision 13414)
+@@ -34,10 +34,6 @@
+ 		void  Read(FILE* fid,char* kstr);
+ 		void  WriteExp(FILE* fid,const char* nstr,int sgn,double cm,double sp);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_LineStyle.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_LineStyle.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_LineStyle.h	(revision 13414)
+@@ -31,10 +31,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Folder.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Folder.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Folder.h	(revision 13414)
+@@ -30,10 +30,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Document.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Document.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Document.h	(revision 13414)
+@@ -30,10 +30,6 @@
+ 		void  Write(FILE* fid,const char* indent);
+ 		void  Read(FILE* fid,char* kstr);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_File.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_File.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_File.h	(revision 13414)
+@@ -31,10 +31,6 @@
+ 		void  Read(FILE* fid,char* kstr);
+ 		void  WriteExp(FILE* fid,const char* nstr,int sgn,double cm,double sp);
+ 		int   Id(){_error_("Not implemented yet.");};
+-		int   MyRank(){_error_("Not implemented yet.");};
+-		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+-		int   MarshallSize(){_error_("Not implemented yet.");};
+-		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+ 		int   ObjectEnum(){_error_("Not implemented yet.");};
+ 		Object* copy(){_error_("Not implemented yet.");};
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.h	(revision 13414)
+@@ -22,9 +22,9 @@
+ class DoubleVecParam: public Param{
+ 
+ 	private: 
+-		int enum_type;
+-		IssmDouble* values;
+-		int M;
++		int         enum_type;
++		IssmDouble *values;
++		int         M;
+ 
+ 	public:
+ 		/*DoubleVecParam constructors, destructors: {{{*/
+@@ -36,7 +36,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.h	(revision 13414)
+@@ -22,10 +22,10 @@
+ class DoubleMatParam: public Param{
+ 
+ 	protected: 
+-		int enum_type;
+-		IssmDouble* value;
+-		int M;
+-		int N;
++		int         enum_type;
++		IssmDouble *value;
++		int         M;
++		int         N;
+ 
+ 	public:
+ 		/*DoubleMatParam constructors, destructors: {{{*/
+@@ -37,7 +37,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/GenericParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/GenericParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/GenericParam.h	(revision 13414)
+@@ -48,7 +48,6 @@
+                 }
+                 void  Echo() {DeepEcho();};
+                 int   Id(){ return -1; };
+-                int   MyRank() { extern int my_rank; return my_rank;} ;
+                 int   ObjectEnum() {return AdolcParamEnum;};
+ 
+                 // the "copy"  has to implement the base class abstract function
+Index: ../trunk-jpl/src/c/classes/objects/Params/FileParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/FileParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/FileParam.h	(revision 13414)
+@@ -35,7 +35,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.cpp	(revision 13414)
+@@ -84,12 +84,6 @@
+ /*FUNCTION IntVecParam::Id{{{*/
+ int    IntVecParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION IntVecParam::MyRank{{{*/
+-int    IntVecParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION IntVecParam::ObjectEnum{{{*/
+ int IntVecParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/BoolParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/BoolParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/BoolParam.cpp	(revision 13414)
+@@ -25,8 +25,8 @@
+ 	return;
+ }
+ /*}}}*/
+-/*FUNCTION BoolParam::BoolParam(int enum_type,IssmBool value){{{*/
+-BoolParam::BoolParam(int in_enum_type,IssmBool in_value){
++/*FUNCTION BoolParam::BoolParam(int enum_type,bool value){{{*/
++BoolParam::BoolParam(int in_enum_type,bool in_value){
+ 
+ 	enum_type=in_enum_type;
+ 	value=in_value;
+@@ -55,12 +55,6 @@
+ /*FUNCTION BoolParam::Id{{{*/
+ int    BoolParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION BoolParam::MyRank{{{*/
+-int    BoolParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION BoolParam::ObjectEnum{{{*/
+ int BoolParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.cpp	(revision 13414)
+@@ -71,12 +71,6 @@
+ /*FUNCTION IntMatParam::Id{{{*/
+ int    IntMatParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION IntMatParam::MyRank{{{*/
+-int    IntMatParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION IntMatParam::ObjectEnum{{{*/
+ int IntMatParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntParam.h	(revision 13414)
+@@ -36,7 +36,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/StringParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/StringParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/StringParam.cpp	(revision 13414)
+@@ -57,12 +57,6 @@
+ /*FUNCTION StringParam::Id{{{*/
+ int    StringParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION StringParam::MyRank{{{*/
+-int    StringParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION StringParam::ObjectEnum{{{*/
+ int StringParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/VectorParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/VectorParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/VectorParam.h	(revision 13414)
+@@ -36,7 +36,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.cpp	(revision 13414)
+@@ -68,12 +68,6 @@
+ /*FUNCTION DoubleVecParam::Id{{{*/
+ int    DoubleVecParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION DoubleVecParam::MyRank{{{*/
+-int    DoubleVecParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION DoubleVecParam::ObjectEnum{{{*/
+ int DoubleVecParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.h	(revision 13414)
+@@ -36,7 +36,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.h	(revision 13414)
+@@ -38,7 +38,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.cpp	(revision 13414)
+@@ -71,12 +71,6 @@
+ /*FUNCTION DoubleMatParam::Id{{{*/
+ int    DoubleMatParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION DoubleMatParam::MyRank{{{*/
+-int    DoubleMatParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION DoubleMatParam::ObjectEnum{{{*/
+ int DoubleMatParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/TransientParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/TransientParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/TransientParam.h	(revision 13414)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _TRANSIENTPARAM_H_
+ #define _TRANSIENTPARAM_H_
+ 
+@@ -22,10 +21,10 @@
+ class TransientParam: public Param{
+ 
+ 	protected: 
+-		int enum_type;
+-		int N;
+-		IssmDouble* values;
+-		IssmDouble* timesteps;
++		int         enum_type;
++		int         N;
++		IssmDouble *values;
++		IssmDouble *timesteps;
+ 
+ 	public:
+ 		/*TransientParam constructors, destructors: {{{*/
+@@ -37,7 +36,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/FileParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/FileParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/FileParam.cpp	(revision 13414)
+@@ -55,12 +55,6 @@
+ /*FUNCTION FileParam::Id{{{*/
+ int    FileParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION FileParam::MyRank{{{*/
+-int    FileParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION FileParam::ObjectEnum{{{*/
+ int FileParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.h	(revision 13414)
+@@ -23,7 +23,7 @@
+ 
+ 	private: 
+ 		/*just hold 3 values for 3 vertices: */
+-		int enum_type;
++		int        enum_type;
+ 		IssmDouble value;
+ 
+ 	public:
+@@ -36,7 +36,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.h	(revision 13414)
+@@ -22,11 +22,11 @@
+ class DoubleMatArrayParam: public Param{
+ 
+ 	private: 
+-		int      enum_type;
+-		IssmDouble** array; //array of matrices
+-		int      M; //size of array
+-		int*     mdim_array; //m-dimensions of matrices in the array
+-		int*     ndim_array; //n-dimensions -f matrices in the array
++		int          enum_type;
++		IssmDouble **array;        //array of matrices
++		int          M;            //size of array
++		int         *mdim_array;   //m-dimensions of matrices in the array
++		int         *ndim_array;   //n-dimensions -f matrices in the array
+ 
+ 	public:
+ 		/*DoubleMatArrayParam constructors, destructors: {{{*/
+@@ -38,7 +38,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntParam.cpp	(revision 13414)
+@@ -55,12 +55,6 @@
+ /*FUNCTION IntParam::Id{{{*/
+ int    IntParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION IntParam::MyRank{{{*/
+-int    IntParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION IntParam::ObjectEnum{{{*/
+ int IntParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.h	(revision 13414)
+@@ -37,7 +37,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/BoolParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/BoolParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/BoolParam.h	(revision 13414)
+@@ -24,18 +24,17 @@
+ 	public:
+ 		/*just hold 3 values for 3 vertices: */
+ 		int enum_type;
+-		IssmBool value;
++		bool value;
+ 
+ 		/*BoolParam constructors, destructors: {{{*/
+ 		BoolParam();
+-		BoolParam(int enum_type,IssmBool value);
++		BoolParam(int enum_type,bool value);
+ 		~BoolParam();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.h	(revision 13414)
+@@ -37,7 +37,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp	(revision 13414)
+@@ -65,12 +65,6 @@
+ /*FUNCTION VectorParam::Id{{{*/
+ int    VectorParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION VectorParam::MyRank{{{*/
+-int    VectorParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION VectorParam::ObjectEnum{{{*/
+ int VectorParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp	(revision 13414)
+@@ -63,12 +63,6 @@
+ /*FUNCTION MatrixParam::Id{{{*/
+ int    MatrixParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION MatrixParam::MyRank{{{*/
+-int    MatrixParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION MatrixParam::ObjectEnum{{{*/
+ int MatrixParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.cpp	(revision 13414)
+@@ -85,12 +85,6 @@
+ /*FUNCTION StringArrayParam::Id{{{*/
+ int    StringArrayParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION StringArrayParam::MyRank{{{*/
+-int    StringArrayParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION StringArrayParam::ObjectEnum{{{*/
+ int StringArrayParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp	(revision 13414)
+@@ -73,12 +73,6 @@
+ /*FUNCTION TransientParam::Id{{{*/
+ int    TransientParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION TransientParam::MyRank{{{*/
+-int    TransientParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION TransientParam::ObjectEnum{{{*/
+ int TransientParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.cpp	(revision 13414)
+@@ -52,12 +52,6 @@
+ /*FUNCTION DoubleParam::Id{{{*/
+ int    DoubleParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION DoubleParam::MyRank{{{*/
+-int    DoubleParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION DoubleParam::ObjectEnum{{{*/
+ int DoubleParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.cpp	(revision 13414)
+@@ -120,12 +120,6 @@
+ /*FUNCTION DoubleMatArrayParam::Id{{{*/
+ int    DoubleMatArrayParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION DoubleMatArrayParam::MyRank{{{*/
+-int    DoubleMatArrayParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION DoubleMatArrayParam::ObjectEnum{{{*/
+ int DoubleMatArrayParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/StringParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/StringParam.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Params/StringParam.h	(revision 13414)
+@@ -23,8 +23,8 @@
+ 
+ 	private: 
+ 		/*just hold 3 values for 3 vertices: */
+-		int enum_type;
+-		char* value;
++		int   enum_type;
++		char *value;
+ 
+ 	public:
+ 		/*StringParam constructors, destructors: {{{*/
+@@ -36,7 +36,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Segment.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Segment.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Segment.h	(revision 13414)
+@@ -14,31 +14,30 @@
+ class Segment: public Object{
+ 
+ 	public:
+-		int eid;
++		int        eid;
+ 		doubletype x1;
+ 		doubletype y1;
+ 		doubletype x2;
+ 		doubletype y2;
+ 
+-
+ 		/*Segment constructors, destructors :*/
+ 		/*FUNCTION Segment() default constructor {{{*/
+ 		Segment(){
+-			this->eid=UNDEF;
+-			this->x1=UNDEF;
+-			this->y1=UNDEF;
+-			this->x2=UNDEF;
+-			this->y2=UNDEF;
++			this->eid = UNDEF;
++			this->x1  = UNDEF;
++			this->y1  = UNDEF;
++			this->x2  = UNDEF;
++			this->y2  = UNDEF;
+ 		}
+ 		/*}}}*/
+ 		/*FUNCTION Segment(int eid, doubletype x1,doubletype y1,doubletype x2, doubletype y2){{{*/
+ 		Segment(int segment_eid, doubletype segment_x1,doubletype segment_y1,doubletype segment_x2, doubletype segment_y2){
+ 
+-			this->eid=segment_eid;
+-			this->x1=segment_x1;
+-			this->y1=segment_y1;
+-			this->x2=segment_x2;
+-			this->y2=segment_y2;
++			this->eid = segment_eid;
++			this->x1  = segment_x1;
++			this->y1  = segment_y1;
++			this->x2  = segment_x2;
++			this->y2  = segment_y2;
+ 
+ 		}
+ 		/*}}}*/
+@@ -66,13 +65,6 @@
+ 		/*FUNCTION Id{{{*/
+ 		int    Id(void){ return eid; }
+ 		/*}}}*/
+-		/*FUNCTION MyRank{{{*/
+-		int    MyRank(void){ 
+-			extern int my_rank;
+-
+-			return my_rank; 
+-		}
+-		/*}}}*/
+ 		/*FUNCTION ObjectEnum{{{*/
+ 		int ObjectEnum(void){
+ 
+@@ -83,9 +75,7 @@
+ 		/*FUNCTION copy {{{*/
+ 		Object* copy() {
+ 			return new Segment(this->eid,this->x1,this->y1,this->x2,this->y2);
+-
+ 		}
+-
+ 		/*}}}*/
+ 
+ };
+Index: ../trunk-jpl/src/c/classes/objects/Options/GenericOption.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Options/GenericOption.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Options/GenericOption.h	(revision 13414)
+@@ -28,12 +28,12 @@
+ 
+ 	public:
+ 
+-		char* name;
+-		OptionType value;
++		char       *name;
++		OptionType  value;
+ 
+-		int   numel; //in case OptionType is an array
+-		int   ndims; //in case OptionType is a multi-dimensional array: */
+-		int*  size;
++		int         numel;   //in case OptionType is an array
++		int         ndims;   //in case OptionType is a multi-dimensional array: */
++		int        *size;
+ 
+ 		/*GenericOption constructors, destructors*/
+ 		GenericOption(){ /*{{{*/
+@@ -80,7 +80,6 @@
+ 			_printLine_(indent << "         value: " << value);;
+ 		} /*}}}*/
+ 		int   Id(){_error_("Not implemented yet");};
+-		int   MyRank(){_error_("Not implemented yet");};
+ 		int   ObjectEnum(){return GenericOptionEnum;};
+ 		Object* copy(){_error_("Not implemented yet");};
+ 		
+Index: ../trunk-jpl/src/c/classes/objects/Options/Option.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Options/Option.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Options/Option.h	(revision 13414)
+@@ -16,21 +16,18 @@
+ class Option: public Object {
+ 
+ 	public:
+-
+ 		
+-		/*Option constructors, destructors {{{*/
++		/*Option constructors, destructors*/
+ 		Option(){};
+ 		~Option(){};
+-		/*}}}*/
+-		/*Object virtual functions definitions:{{{*/
++
++		/*Object virtual functions definitions*/
+ 		virtual void  Echo()= 0;
+ 		virtual void  DeepEcho()= 0;
+ 		virtual void  DeepEcho(char  *indent)=0;
+ 		int           Id(){_error_("Not implemented yet"); };
+-		int           MyRank(){_error_("Not implemented yet"); };
+ 		int           ObjectEnum(){return OptionEnum;              };
+ 		Object       *copy(){_error_("Not implemented yet"); };
+-		/*}}}*/
+ 
+ 		/*virtual functions: */
+ 		virtual char* Name()=0;
+@@ -40,4 +37,3 @@
+ 
+ };
+ #endif  /* _OPTIONOBJECT_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/Vertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 13414)
+@@ -85,12 +85,6 @@
+ /*FUNCTION Vertex::Id{{{*/
+ int    Vertex::Id(void){ return id; }
+ /*}}}*/
+-/*FUNCTION Vertex::MyRank {{{*/
+-int    Vertex::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION Vertex::ObjectEnum{{{*/
+ int Vertex::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Icefront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Icefront.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Icefront.h	(revision 13414)
+@@ -47,7 +47,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 13414)
+@@ -182,12 +182,6 @@
+ 	return id;
+ }
+ /*}}}*/
+-/*FUNCTION Numericalflux::MyRank {{{*/
+-int    Numericalflux::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION Numericalflux::ObjectEnum{{{*/
+ int Numericalflux::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp	(revision 13414)
+@@ -78,12 +78,6 @@
+ /*FUNCTION Penpair::Id {{{*/
+ int    Penpair::Id(void){ return id; }
+ /*}}}*/
+-/*FUNCTION Penpair::MyRank {{{*/
+-int    Penpair::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION Penpair::ObjectEnum{{{*/
+ int Penpair::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.h	(revision 13414)
+@@ -31,21 +31,21 @@
+ 		Element **elements;
+ 
+ 		/*computational: */
+-		int      penalty_lock;
+-		bool     active;
+-		bool     frozen;
+-		int      counter;
+-		bool     prestable;
+-		bool     material_converged;
+-		IssmDouble   normal[2];
+-		IssmDouble   length;
+-		IssmDouble   fraction;
+-		int      state;
+-		
+-		Parameters* parameters; //pointer to solution parameters
+-		Inputs*  inputs;
++		int         penalty_lock;
++		bool        active;
++		bool        frozen;
++		int         counter;
++		bool        prestable;
++		bool        material_converged;
++		IssmDouble  normal[2];
++		IssmDouble  length;
++		IssmDouble  fraction;
++		int         state;
+ 
++		Parameters *parameters;           //pointer to solution parameters
++		Inputs     *inputs;
+ 
++
+ 		/*Riftfrontconstructors,destructors: {{{*/
+ 		Riftfront();
+ 		Riftfront(int riftfront_id,int i, IoModel* iomodel,int analysis_type);
+@@ -55,7 +55,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h	(revision 13414)
+@@ -19,21 +19,19 @@
+ class Numericalflux: public Load {
+ 
+ 	public: 
+-		int         id;
++		int id;
+ 		int analysis_type;
+ 
+ 		/*Hooks*/
+-		Hook*       helement;
+-		Hook*       hnodes;
++		Hook *helement;
++		Hook *hnodes;
+ 
+ 		/*Corresponding fields*/
+-		Element* element;
+-		Node**   nodes;
++		Element     *element;
++		Node       **nodes;
++		Parameters  *parameters;
++		Inputs      *inputs;
+ 
+-		Parameters *parameters;
+-		Inputs     *inputs;
+-
+-
+ 		/*Numericalflux constructors,destructors {{{*/
+ 		Numericalflux();
+ 		Numericalflux(int numericalflux_id,int i, IoModel* iomodel,int analysis_type);
+@@ -43,7 +41,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Penpair.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Penpair.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Penpair.h	(revision 13414)
+@@ -16,14 +16,12 @@
+ class Penpair: public Load{
+ 
+ 	private: 
+-		int		id;
+-		int analysis_type;
+-		
+-		Hook* hnodes;  //hook to 2 nodes
+-		Node** nodes;
++		int          id;
++		int          analysis_type;
++		Hook        *hnodes;          //hook to 2 nodes
++		Node       **nodes;
++		Parameters  *parameters;      //pointer to solution parameters
+ 
+-		Parameters* parameters; //pointer to solution parameters
+-
+ 	public:
+ 
+ 		/*Penpair constructors, destructors: {{{*/
+@@ -35,7 +33,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Load.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Load.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Load.h	(revision 13414)
+@@ -4,7 +4,6 @@
+  * It is derived from Load, so DataSets can contain them.
+  */ 
+ 
+-
+ #ifndef _LOAD_H_
+ #define _LOAD_H_
+ 
+@@ -24,8 +23,6 @@
+ 	public: 
+ 
+ 		virtual       ~Load(){};
+-		
+-		/*Virtual functions: {{{*/
+ 		virtual void  Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0;
+ 		virtual void  SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0;
+ 		virtual void  CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs)=0;
+@@ -35,6 +32,5 @@
+ 		virtual void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs, IssmDouble kmax)=0;
+ 		virtual void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax)=0;
+ 		virtual bool  InAnalysis(int analysis_type)=0;
+-		/*}}}*/
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp	(revision 13414)
+@@ -125,12 +125,6 @@
+ /*FUNCTION Pengrid::Id {{{*/
+ int    Pengrid::Id(void){ return id; }
+ /*}}}*/
+-/*FUNCTION Pengrid::MyRank {{{*/
+-int    Pengrid::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION Pengrid::ObjectEnum{{{*/
+ int Pengrid::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 13414)
+@@ -156,12 +156,6 @@
+ /*FUNCTION Icefront::Id {{{*/
+ int    Icefront::Id(void){ return id; }
+ /*}}}*/
+-/*FUNCTION Icefront::MyRank {{{*/
+-int    Icefront::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION Icefront::ObjectEnum{{{*/
+ int Icefront::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.h	(revision 13414)
+@@ -48,7 +48,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp	(revision 13414)
+@@ -185,12 +185,6 @@
+ /*FUNCTION Riftfront::Id {{{*/
+ int    Riftfront::Id(void){ return id; }
+ /*}}}*/
+-/*FUNCTION Riftfront::MyRank {{{*/
+-int    Riftfront::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION Riftfront::ObjectEnum{{{*/
+ int Riftfront::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Vertex.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Vertex.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Vertex.h	(revision 13414)
+@@ -42,7 +42,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h	(revision 13414)
+@@ -98,10 +98,6 @@
+ 		int Id(void){ /*{{{*/ 
+ 			return -1; 
+ 		} /*}}}*/
+-		int MyRank(void){ /*{{{*/
+-			extern int my_rank;
+-			return my_rank; 
+-		} /*}}}*/
+ 		int ObjectEnum(void){ /*{{{*/
+ 			_error_("template ObjectEnum not implemented for this ResultType\n");
+ 		} /*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13414)
+@@ -57,20 +57,20 @@
+ 	//intialize inputs, and add as many inputs per element as requested: 
+ 	this->inputs=new Inputs();
+ 	if (iomodel->Data(MeshVertexonbedEnum))
+-	 this->inputs->AddInput(new BoolInput(MeshVertexonbedEnum,reCast<IssmBool>(iomodel->Data(MeshVertexonbedEnum)[io_index])));
++	 this->inputs->AddInput(new BoolInput(MeshVertexonbedEnum,reCast<bool>(iomodel->Data(MeshVertexonbedEnum)[io_index])));
+ 	if (iomodel->Data(MeshVertexonsurfaceEnum))
+-	 this->inputs->AddInput(new BoolInput(MeshVertexonsurfaceEnum,reCast<IssmBool>(iomodel->Data(MeshVertexonsurfaceEnum)[io_index])));
++	 this->inputs->AddInput(new BoolInput(MeshVertexonsurfaceEnum,reCast<bool>(iomodel->Data(MeshVertexonsurfaceEnum)[io_index])));
+ 	if (iomodel->Data(MaskVertexonfloatingiceEnum))
+-	 this->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,reCast<IssmBool>(iomodel->Data(MaskVertexonfloatingiceEnum)[io_index])));
++	 this->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,reCast<bool>(iomodel->Data(MaskVertexonfloatingiceEnum)[io_index])));
+ 	if (iomodel->Data(MaskVertexongroundediceEnum))
+-	  this->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,reCast<IssmBool>(iomodel->Data(MaskVertexongroundediceEnum)[io_index])));
++	  this->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,reCast<bool>(iomodel->Data(MaskVertexongroundediceEnum)[io_index])));
+ 	if (analysis_type==DiagnosticHorizAnalysisEnum)
+ 	 this->inputs->AddInput(new IntInput(ApproximationEnum,reCast<IssmInt>(iomodel->Data(FlowequationVertexEquationEnum)[io_index])));
+ 	/*set single point constraints: */
+ 
+ 	/*spc all nodes on water*/
+ 	if (!iomodel->Data(MaskVertexonwaterEnum)) _error_("iomodel->nodeonwater is NULL");
+-	if (reCast<IssmBool>(iomodel->Data(MaskVertexonwaterEnum)[io_index])){
++	if (reCast<bool>(iomodel->Data(MaskVertexonwaterEnum)[io_index])){
+ 		for(k=1;k<=gsize;k++){
+ 			this->FreezeDof(k);
+ 		}
+@@ -136,7 +136,7 @@
+ 		if (dim==3){
+ 			/*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
+ 			_assert_(iomodel->Data(MeshVertexonbedEnum));
+-			if (!(reCast<IssmBool>(iomodel->Data(MeshVertexonbedEnum)[io_index]))){
++			if (!(reCast<bool>(iomodel->Data(MeshVertexonbedEnum)[io_index]))){
+ 				for(k=1;k<=gsize;k++){
+ 					this->FreezeDof(k);
+ 				}
+@@ -187,13 +187,6 @@
+ /*FUNCTION Node::Id{{{*/
+ int    Node::Id(void){ return id; }
+ /*}}}*/
+-/*FUNCTION Node::MyRank{{{*/
+-int    Node::MyRank(void){ 
+-	extern int my_rank;
+-
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION Node::ObjectEnum{{{*/
+ int Node::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.h	(revision 13414)
+@@ -32,7 +32,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.h	(revision 13414)
+@@ -31,7 +31,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.h	(revision 13414)
+@@ -33,7 +33,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Constraints/Constraint.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Constraints/Constraint.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Constraints/Constraint.h	(revision 13414)
+@@ -4,7 +4,6 @@
+  * It is derived from Object, so DataSets can contain them.
+  */ 
+ 
+-
+ #ifndef _CONSTRAINT_H_
+ #define _CONSTRAINT_H_
+ 
+@@ -23,6 +22,5 @@
+ 		virtual void ConstrainNode(Nodes* nodes,Parameters* parameters)=0;
+ 		virtual bool InAnalysis(int analysis_type)=0;
+ 
+-
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.cpp	(revision 13414)
+@@ -65,12 +65,6 @@
+ /*FUNCTION SpcDynamic::Id {{{*/
+ int    SpcDynamic::Id(void){ return sid; }
+ /*}}}*/
+-/*FUNCTION SpcDynamic::MyRank {{{*/
+-int    SpcDynamic::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION SpcDynamic::ObjectEnum{{{*/
+ int SpcDynamic::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.cpp	(revision 13414)
+@@ -68,12 +68,6 @@
+ /*FUNCTION SpcStatic::Id {{{*/
+ int    SpcStatic::Id(void){ return sid; }
+ /*}}}*/
+-/*FUNCTION SpcStatic::MyRank {{{*/
+-int    SpcStatic::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION SpcStatic::ObjectEnum{{{*/
+ int SpcStatic::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.cpp	(revision 13414)
+@@ -80,12 +80,6 @@
+ /*FUNCTION SpcTransient::Id {{{*/
+ int    SpcTransient::Id(void){ return sid; }
+ /*}}}*/
+-/*FUNCTION SpcTransient::MyRank {{{*/
+-int    SpcTransient::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION SpcTransient::ObjectEnum{{{*/
+ int SpcTransient::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Node.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Node.h	(revision 13414)
+@@ -39,12 +39,11 @@
+ 		~Node();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+-		void  Echo();
+-		void  DeepEcho();
+-		int   Id(); 
+-		int   MyRank();
+-		int   ObjectEnum();
+-		Object* copy(){_error_("Not implemented yet (similar to Elements)");};
++		void    Echo();
++		void    DeepEcho();
++		int     Id();
++		int     ObjectEnum();
++		Object *copy()        {_error_("Not implemented yet (similar to Elements)"); };
+ 		/*}}}*/
+ 		/*Update virtual functions definitions: {{{*/
+ 		void  InputUpdateFromVector(IssmDouble* vector, int name, int type);
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.h	(revision 13414)
+@@ -31,7 +31,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.cpp	(revision 13414)
+@@ -60,12 +60,6 @@
+ /*FUNCTION PentaP1ElementResult::Id{{{*/
+ int    PentaP1ElementResult::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION PentaP1ElementResult::MyRank{{{*/
+-int    PentaP1ElementResult::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION PentaP1ElementResult::ObjectEnum{{{*/
+ int PentaP1ElementResult::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.cpp	(revision 13414)
+@@ -57,12 +57,6 @@
+ /*FUNCTION DoubleElementResult::Id{{{*/
+ int    DoubleElementResult::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION DoubleElementResult::MyRank{{{*/
+-int    DoubleElementResult::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION DoubleElementResult::ObjectEnum{{{*/
+ int DoubleElementResult::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.cpp	(revision 13414)
+@@ -57,12 +57,6 @@
+ /*FUNCTION BoolElementResult::Id{{{*/
+ int    BoolElementResult::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION BoolElementResult::MyRank{{{*/
+-int    BoolElementResult::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION BoolElementResult::ObjectEnum{{{*/
+ int BoolElementResult::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.h	(revision 13414)
+@@ -32,7 +32,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.h	(revision 13414)
+@@ -33,7 +33,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/ElementResultLocal.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/ElementResultLocal.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/ElementResultLocal.h	(revision 13414)
+@@ -8,4 +8,3 @@
+ class Parameters;
+ 
+ #endif //ifndef _ELEMENTRESULTLOCAL_H_
+-
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.h	(revision 13414)
+@@ -33,7 +33,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.cpp	(revision 13414)
+@@ -59,12 +59,6 @@
+ /*FUNCTION TriaP1ElementResult::Id{{{*/
+ int    TriaP1ElementResult::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION TriaP1ElementResult::MyRank{{{*/
+-int    TriaP1ElementResult::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION TriaP1ElementResult::ObjectEnum{{{*/
+ int TriaP1ElementResult::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/ElementResult.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/ElementResult.h	(revision 13414)
+@@ -2,7 +2,6 @@
+  * \brief abstract class for ElementResult object
+  */ 
+ 
+-
+ #ifndef _ELEMENTRESULT_H_
+ #define _ELEMENTRESULT_H_
+ 
+@@ -16,7 +15,6 @@
+ 	public: 
+ 		
+ 		virtual        ~ElementResult(){};
+-		
+ 		virtual         ElementResult* SpawnTriaElementResult(int* indices)=0;
+ 		virtual IssmDouble  GetTime(void)=0;
+ 		virtual int     GetStep(void)=0;
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13414)
+@@ -2039,12 +2039,6 @@
+ 	this->inputs->AddInput(new TriaP1Input(BedEnum,&b[0]));
+ }
+ /*}}}*/
+-/*FUNCTION Tria::MyRank {{{*/
+-int    Tria::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION Tria::NodalValue {{{*/
+ int    Tria::NodalValue(IssmDouble* pvalue, int index, int natureofdataenum,bool process_units){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13414)
+@@ -28,17 +28,17 @@
+ 
+ 	public:
+ 
+-		int  id;
+-		int  sid;
++		int          id;
++		int          sid;
+ 
+-		Node   **nodes;    // 3 nodes
+-		Material  *material;   // 1 material ice
+-		Matpar  *matpar;   // 1 material parameter
+-		int      horizontalneighborsids[3];
++		Node       **nodes;                       // 3 nodes
++		Material    *material;                    // 1 material ice
++		Matpar      *matpar;                      // 1 material parameter
++		int          horizontalneighborsids[3];
+ 
+-		Parameters *parameters;   //pointer to solution parameters
+-		Inputs     *inputs;
+-		Results    *results;
++		Parameters  *parameters;                  //pointer to solution parameters
++		Inputs      *inputs;
++		Results     *results;
+ 
+ 		/*Tria constructors, destructors {{{*/
+ 		Tria();
+@@ -46,12 +46,11 @@
+ 		~Tria();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+-		void  Echo();
+-		void  DeepEcho();
+-		int   Id(); 
+-		int   MyRank();
+-		int   ObjectEnum();
+-		Object* copy();
++		void    Echo();
++		void    DeepEcho();
++		int     Id();
++		int     ObjectEnum();
++		Object *copy();
+ 		/*}}}*/
+ 		/*Update virtual functions resolution: {{{*/
+ 		void  InputUpdateFromSolution(IssmDouble* solutiong);
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13414)
+@@ -2252,12 +2252,6 @@
+ 	return minlength;
+ }
+ /*}}}*/
+-/*FUNCTION Penta::MyRank {{{*/
+-int    Penta::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION Penta::NodalValue {{{*/
+ int    Penta::NodalValue(IssmDouble* pvalue, int index, int natureofdataenum,bool process_units){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13414)
+@@ -33,15 +33,15 @@
+ 		int          id;
+ 		int          sid;
+ 
+-		Node       **nodes;        // 6 nodes
+-		Material    *material;       // 1 material ice
+-		Matpar      *matpar;       // 1 material parameter
+-		Penta      **verticalneighbors;   // 2 neighbors: first one under, second one above
++		Node       **nodes;                       // 6 nodes
++		Material    *material;                    // 1 material ice
++		Matpar      *matpar;                      // 1 material parameter
++		Penta      **verticalneighbors;           // 2 neighbors: first one under, second one above
+ 		int          horizontalneighborsids[3];
+ 
+-		Parameters  *parameters;   //pointer to solution parameters
++		Parameters  *parameters;                  //pointer to solution parameters
+ 		Inputs      *inputs;
+-		Results      *results;
++		Results     *results;
+ 
+ 		/*Penta constructors and destructor: {{{*/
+ 		Penta();
+@@ -49,12 +49,11 @@
+ 		~Penta();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions: {{{*/
+-		Object*   copy();
+-		void	  DeepEcho();
+-		void	  Echo();
+-		int		  ObjectEnum();
+-		int		  Id(); 
+-		int		  MyRank();
++		Object *copy();
++		void    DeepEcho();
++		void    Echo();
++		int     ObjectEnum();
++		int     Id();
+ 		/*}}}*/
+ 		/*Update virtual functions definitions: {{{*/
+ 		void  InputUpdateFromConstant(bool constant, int name);
+Index: ../trunk-jpl/src/c/classes/kriging/Quadtree.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/Quadtree.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/kriging/Quadtree.h	(revision 13414)
+@@ -28,7 +28,6 @@
+ 				void    Echo();
+ 				void    DeepEcho()  {_error_("not implemented yet"); };
+ 				int     Id()        {_error_("not implemented yet"); };
+-				int     MyRank()    {_error_("not implemented yet"); };
+ 				int     ObjectEnum(){_error_("not implemented yet"); };
+ 				Object *copy()      {_error_("not implemented yet"); };
+ 
+Index: ../trunk-jpl/src/c/classes/kriging/Observation.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/Observation.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/kriging/Observation.h	(revision 13414)
+@@ -25,7 +25,6 @@
+ 		void    Echo();
+ 		void    DeepEcho()  {_error_("Not implemented yet"); };
+ 		int     Id()        {_error_("Not implemented yet"); };
+-		int     MyRank()    {_error_("Not implemented yet"); };
+ 		int     ObjectEnum(){_error_("Not implemented yet"); };
+ 		Object *copy()      {_error_("Not implemented yet"); };
+ 
+Index: ../trunk-jpl/src/c/classes/kriging/ExponentialVariogram.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/ExponentialVariogram.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/kriging/ExponentialVariogram.h	(revision 13414)
+@@ -24,7 +24,6 @@
+ 		void  Echo();
+ 		void  DeepEcho(){_error_("Not implemented yet");};
+ 		int   Id(){_error_("Not implemented yet");}; 
+-		int   MyRank(){_error_("Not implemented yet");};
+ 		int   ObjectEnum(){_error_("Not implemented yet");};
+ 		Object* copy(){_error_("Not implemented yet");};
+ 
+Index: ../trunk-jpl/src/c/classes/kriging/GaussianVariogram.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/GaussianVariogram.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/kriging/GaussianVariogram.h	(revision 13414)
+@@ -25,7 +25,6 @@
+ 		void  Echo();
+ 		void  DeepEcho(){_error_("Not implemented yet");};
+ 		int   Id(){_error_("Not implemented yet");}; 
+-		int   MyRank(){_error_("Not implemented yet");};
+ 		int   ObjectEnum(){_error_("Not implemented yet");};
+ 		Object* copy(){_error_("Not implemented yet");};
+ 
+Index: ../trunk-jpl/src/c/classes/kriging/SphericalVariogram.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/SphericalVariogram.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/kriging/SphericalVariogram.h	(revision 13414)
+@@ -24,7 +24,6 @@
+ 		void  Echo();
+ 		void  DeepEcho(){_error_("Not implemented yet");};
+ 		int   Id(){_error_("Not implemented yet");}; 
+-		int   MyRank(){_error_("Not implemented yet");};
+ 		int   ObjectEnum(){_error_("Not implemented yet");};
+ 		Object* copy(){_error_("Not implemented yet");};
+ 
+Index: ../trunk-jpl/src/c/classes/kriging/PowerVariogram.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/PowerVariogram.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/kriging/PowerVariogram.h	(revision 13414)
+@@ -24,7 +24,6 @@
+ 		void  Echo();
+ 		void  DeepEcho(){_error_("Not implemented yet");};
+ 		int   Id(){_error_("Not implemented yet");}; 
+-		int   MyRank(){_error_("Not implemented yet");};
+ 		int   ObjectEnum(){_error_("Not implemented yet");};
+ 		Object* copy(){_error_("Not implemented yet");};
+ 
+Index: ../trunk-jpl/src/c/classes/bamg/BamgQuadtree.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/BamgQuadtree.h	(revision 13413)
++++ ../trunk-jpl/src/c/classes/bamg/BamgQuadtree.h	(revision 13414)
+@@ -33,7 +33,6 @@
+ 					void    Echo()       {_error_("not implemented yet"); };
+ 					void    DeepEcho()   {_error_("not implemented yet"); };
+ 					int     Id()         {_error_("not implemented yet"); };
+-					int     MyRank()     {_error_("not implemented yet"); };
+ 					int     ObjectEnum() {_error_("not implemented yet"); };
+ 					Object *copy()       {_error_("not implemented yet"); };
+ 			};
Index: /issm/oecreview/Archive/13393-13976/ISSM-13414-13415.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13414-13415.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13414-13415.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13414)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13415)
+@@ -5549,7 +5549,7 @@
+ 
+ 			/*Get values on the 3 vertices*/
+ 			for (i=0;i<3;i++){
+-				values[i]=vector[this->nodes[i]->GetVertexSidList()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!)
++				values[i]=vector[this->nodes[i]->GetVertexSid()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!)
+ 			}
+ 
+ 			/*Branch on the specified type of update: */
+@@ -5655,7 +5655,7 @@
+ 
+ 				/*create input values: */
+ 				for(i=0;i<3;i++){
+-					row=this->nodes[i]->GetVertexSidList();
++					row=this->nodes[i]->GetVertexSid();
+ 					values[i]=(IssmDouble)matrix[ncols*row+t];
+ 				}
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13415-13416.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13415-13416.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13415-13416.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/objects/Vertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 13415)
++++ ../trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 13416)
+@@ -171,7 +171,7 @@
+ 
+ 	/*Ok, we are a clone node, but we did not create the pid for this vertex 
+ 	 * Therefore, our pid is garbage right now. Go pick it up in the alltruepids: */
+-	this->pid=alltruepids[this->pid];
++	this->pid=alltruepids[this->sid];
+ }
+ /*}}}*/
+ /*FUNCTION Vertex::SetClone {{{*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13416-13417.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13416-13417.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13416-13417.diff	(revision 13980)
@@ -0,0 +1,345 @@
+Index: ../trunk-jpl/src/m/classes/plotoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/plotoptions.py	(revision 13416)
++++ ../trunk-jpl/src/m/classes/plotoptions.py	(revision 13417)
+@@ -92,10 +92,12 @@
+ 					#Empty
+ 					if not plotnum: continue
+ 
++					# '#all'
+ 					elif 'all' in plotnum:
+ 						for j in xrange(numberofplots):
+ 							self.list[j].addfield(field,rawlist[i][1])
+ 
++					# '#i-j'
+ 					elif '-' in plotnum:
+ 						nums=plotnum.split('-')
+ 						if len(nums)!=2: continue
+Index: ../trunk-jpl/src/m/plot/plot_mesh.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_mesh.py	(revision 13416)
++++ ../trunk-jpl/src/m/plot/plot_mesh.py	(revision 13417)
+@@ -1,5 +1,6 @@
+ import pylab as p
+-import matplotlib.tri as tri
++from processmesh import processmesh
++from applyoptions import applyoptions
+ 
+ def plot_mesh(md,options,nlines,ncols,i):
+ 	'''
+@@ -11,14 +12,14 @@
+ 		See also: PLOTMODEL
+ 	'''
+ 
+-	#TODO: implement processmesh
+-	x=md.mesh.x
+-	y=md.mesh.y
+-	elements=md.mesh.elements
+-	elements=elements-1 #since python indexes from zero
++	x,y,z,elements,is2d=processmesh(md,[],options)
+ 
+-	p.subplot(nlines,ncols,i)
+-	p.triplot(x,y,elements)
+-	p.title('Mesh')
++	if is2d:
++		p.subplot(nlines,ncols,i)
++		p.triplot(x,y,elements)
++	else:
++		print 'WARNING: only 2D mesh plot is currently implemented'
+ 	
+-	print 'WARNING: options passed to plot_mesh not implemented yet'
++	#apply options
++	options.addfielddefault('title','Mesh')
++	applyoptions(md,[],options)
+Index: ../trunk-jpl/src/m/plot/processmesh.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/processmesh.py	(revision 0)
++++ ../trunk-jpl/src/m/plot/processmesh.py	(revision 13417)
+@@ -0,0 +1,86 @@
++from math import isnan
++
++def processmesh(md,data,options):
++	"""
++	PROCESSMESH - process the mesh for plotting
++
++	Usage:
++		[x y z elements is2d]=processmech(md,data,options)
++
++	See also: PLOTMODEL, PROCESSDATA
++	"""
++
++	#some checks
++	if md.mesh.numberofvertices==0:
++		raise ValueError('processmesh error: mesh is empty')
++	if md.mesh.numberofvertices==md.mesh.numberofelements:
++		raise ValueError('processmesh error: the number of elements is the same as the number of nodes')
++
++	if not data or not isinstance(data,dict):
++		
++		if 'latlon' not in options.getfieldvalue('coord','xy').lower(): #convert to lower case for comparison
++			x=md.mesh.x
++			if not isnan(md.mesh.x2d): x2d=md.mesh.x2d
++			y=md.mesh.y
++			if not isnan(md.mesh.y2d): y2d=md.mesh.y2d
++		else:
++			x=md.mesh.long
++			y=md.mesh.lat
++
++		z_field=options.getfieldvalue('z',md.mesh.z)
++		#if isinstance(z_field,basestring): # how could z be a string?
++		#	z=md.(z_field)
++		if isinstance(z_field,(int,long,float)):  # isnumeric
++			z=z_field
++		else:
++			z=md.mesh.z
++		
++		if not isnan(md.mesh.elements2d): 
++			elements2d=md.mesh.elements2d
++			elements2d=elements2d-1
++		# subtract one since python indexes from zero
++		elements=md.mesh.elements
++		elements=elements-1
++
++		#is it a 2D plot?
++		if md.mesh.dimension==2:
++			is2d=1
++		elif md.mesh.dimension==3:
++			if options.getfieldvalue('layer',0)>=1:
++				is2d=1
++			else:
++				is2d=0
++		else:
++			raise ValueError('processmesh error: dim = %d not supported')
++
++		#layer projection?
++		if options.getfieldvalue('layer',0)>=1:
++			 if 'latlon' in options.getfieldvalue('coord','xy').lower():
++				 raise ValueError('processmesh error: cannot work with 3D mesh in lat-lon coords')
++			#we modify (w/c?) the mesh temporarily to a 2D mesh from which the 3D mesh was extruded
++			 x=x2d
++			 y=y2d
++			 z=zeros(size(x2d))
++			 elements=elements2d
++	
++	else:
++		#Process mesh for plotting (triangulation for 2D, polycollection for 3D?)
++		if md.mesh.dimension==2:
++			is2d=1
++		else:
++			# process polycollection here for 3D plot
++			is2d=0
++	
++	#units
++	if options.exist('unit'):
++		unit=options.getfieldvalue('unit')
++		x=x*unit
++		y=y*unit
++		z=z*unit
++
++	##is model a member of planet class? (won't work until planet class defined)
++	#if isinstance(md,planet):
++	#	isplanet=1
++	#else:
++	#	isplanet=0
++	return x,y,z,elements,is2d
+Index: ../trunk-jpl/src/m/plot/plotmodel.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plotmodel.py	(revision 13416)
++++ ../trunk-jpl/src/m/plot/plotmodel.py	(revision 13417)
+@@ -1,7 +1,8 @@
+ import pylab as p
+ #from pairoptions import *
+-from plotoptions import *
+-from plot_manager import *
++from plotoptions import plotoptions
++from plot_manager import plot_manager
++from math import ceil, sqrt
+ 
+ def plotmodel(md,*args):
+ 	'''
+@@ -12,7 +13,7 @@
+ 	options=plotoptions(*args)
+ 
+ 	#get number of subplots
+-	subplotwidth=math.ceil(math.sqrt(options.numberofplots))
++	subplotwidth=ceil(sqrt(options.numberofplots))
+ 	
+ 	#if nlines and ncols specified, then bypass
+ 	if options.list[0].exist('nlines'):
+@@ -43,13 +44,20 @@
+ 		#Create figure
+ 		#plots will be visible by default if ipython is run in interactive mode (invoked by ipython --pylab)
+ 		#handling the 'visible' option will need some check on whether ipython is currently in interactive or non-interactive mode
+-		p.figure(figurenumber)
++
++		#if figsize specified
++		if options.list[0].exist('figsize'):
++			figsize=options.list[0].getfieldvalue('figsize')
++			p.figure(figurenumber,figsize=figsize)
++		else:
++			p.figure(figurenumber)
++
+ 	
+-		try:
+-			for i in xrange(numberofplots):
+-				plot_manager(options.list[i].getfieldvalue('model',md),options.list[i],subplotwidth,nlines,ncols,i)
+-		except StandardError:
+-			print 'error in plot_manager'
++		#try:
++		for i in xrange(numberofplots):
++			plot_manager(options.list[i].getfieldvalue('model',md),options.list[i],subplotwidth,nlines,ncols,i)
++		#except StandardError:
++		#	print 'error in plot_manager'
+ 	else:
+ 		raise StandardError('plotmodel error message: no output data found.')
+ 			
+Index: ../trunk-jpl/src/m/plot/applyoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.py	(revision 0)
++++ ../trunk-jpl/src/m/plot/applyoptions.py	(revision 13417)
+@@ -0,0 +1,145 @@
++from matplotlib.font_manager import FontProperties
++import pylab as p
++
++def applyoptions(md,data,options):
++	'''
++	APPLYOPTIONS - apply options to current plot
++
++		Usage:
++			applyoptions(md,data,options)
++
++		See also: PLOTMODEL, PARSE_OPTIONS
++	'''
++
++	#some defaults (this seems to be adding a field that already exists...)
++	#if not isnan(md.mesh.hemisphere):
++	#	options.addfielddefault('hemisphere',md.mesh.hemisphere)
++
++	#font
++	fontsize=options.getfieldvalue('fontsize',14)
++	fontweight=options.getfieldvalue('fontweight','normal')
++	fontfamily=options.getfieldvalue('fontfamily','sans-serif')
++	font={
++			'fontsize'		:fontsize,
++			'fontweight'	:fontweight,
++			'family'			:fontfamily
++			}
++
++	#title
++	if options.exist('title'):
++		title=options.getfieldvalue('title')
++		if options.exist('titlefontsize'):
++			titlefontsize=options.getfieldvalue('titlefontsize')
++		else:
++			titlefontsize=fontsize
++		if options.exist('titlefontweight'):
++			titlefontweight=options.getfieldvalue('titlefontweight')
++		else:
++			titlefontweight=fontweight
++		#title font
++		titlefont=font.copy()
++		titlefont['size']=titlefontsize
++		titlefont['weight']=titlefontweight
++		p.title(title,**titlefont)
++		
++	#xlabel, ylabel, zlabel
++	if options.exist('labelfontsize'):
++		labelfontsize=options.getfieldvalue('labelfontsize')
++	else:
++		labelfontsize=fontsize
++	if options.exist('labelfontweight'):
++		labelfontweight=options.getfieldvalue('labelfontweight')
++	else:
++		labelfontweight=fontweight
++
++	#font dict for labels
++	labelfont=font.copy()
++	labelfont['fontsize']=labelfontsize
++	labelfont['fontweight']=labelfontweight
++
++	if options.exist('xlabel'):
++		p.xlabel(options.getfieldvalue('xlabel'),**labelfont)
++	if options.exist('ylabel'):
++		p.ylabel(options.getfieldvalue('ylabel'),**labelfont)
++	if options.exist('zlabel'):
++		p.zlabel(options.getfieldvalue('zlabel'),**labelfont)
++
++	#xticks, yticks, zticks
++
++	#view
++
++	#axis
++
++	#box
++
++	#xlim, ylim, zlim
++	if options.exist('xlim'):
++		p.xlim(options.getfieldvalue('xlim'))
++	if options.exist('ylim'):
++		p.xlim(options.getfieldvalue('ylim'))
++	if options.exist('zlim'):
++		p.xlim(options.getfieldvalue('zlim'))
++
++	#latlon
++
++	#Basinzoom
++
++	#ShowBasins
++
++	#Caxis
++
++	#shading
++
++	#grid
++	if options.exist('grid'):
++		p.grid()
++
++	#colormap
++
++	#wrapping
++
++	#colorbar
++
++	#area
++
++	#expdisp
++
++	#text
++
++	#north arrow
++
++	#scale ruler
++
++	#streamlines
++
++	#contours
++
++	#YTickLabel
++
++	#XTickLabel
++
++	#xtick
++
++	#ytick
++
++	#axis positions
++
++	#figure position
++
++	#axes position
++
++	#showregion
++
++	#flat edges of a partition
++
++	#scatter
++
++	#backgroundcolor
++
++	#figurebackgroundcolor
++
++	#lighting
++
++	#point cloud
++
++	#inset
Index: /issm/oecreview/Archive/13393-13976/ISSM-13417-13418.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13417-13418.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13417-13418.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/m/regional/regionaltransient2d.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/regionaltransient2d.m	(revision 13417)
++++ ../trunk-jpl/src/m/regional/regionaltransient2d.m	(revision 13418)
+@@ -30,7 +30,7 @@
+ end
+ 
+ %take every fields from model
+-mde=modelextract(md1,area);
++mde=md1.extract(area);
+ mde.private.bamg=[];
+ mde.mesh.extractedvertices=nan;
+ mde.mesh.extractedelements=nan;
+@@ -130,7 +130,7 @@
+ 
+ 	%Diagnostic.  Don't spc the icefront vertices.
+ 	if ~isnan(md2.diagnostic.icefront)
+-		md1s=modelextract(md1,area);
++		md1s=md1.extract(area);
+ 		%md2.diagnostic.icefront=[md2.mesh.segments 2];
+ 		e2=md2.mesh.segments(:,end);
+ 		e1=md1s.mesh.segments(:,end);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13418-13419.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13418-13419.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13418-13419.diff	(revision 13980)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/externalpackages/adolc/install-dev.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-dev.sh	(revision 13418)
++++ ../trunk-jpl/externalpackages/adolc/install-dev.sh	(revision 13419)
+@@ -2,12 +2,12 @@
+ set -eu
+ 
+ #Some cleanup
+-rm -rf install adolc_v220_issm
++rm -rf install adolc*issm
+ 
+-git clone -b 2.3.x_ISSM  git://gitorious.org/~utke/adol-c/adolc_v220_issm.git 
++git clone -b 2.3.x_ISSM  git://git.mcs.anl.gov/adol-c.git adolc_issm
+ 
+ #Compile ADOL-C
+-cd adolc_v220_issm
++cd adolc_issm
+ 
+ autoreconf -f -i 
+ ./configure --prefix=$ISSM_DIR/externalpackages/adolc/install 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13419-13420.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13419-13420.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13419-13420.diff	(revision 13980)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/m/classes/thermal.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.py	(revision 13419)
++++ ../trunk-jpl/src/m/classes/thermal.py	(revision 13420)
+@@ -1,4 +1,5 @@
+ #module imports
++import numpy
+ from fielddisplay import fielddisplay
+ from EnumDefinitions import *
+ from checkfield import *
+@@ -69,7 +70,9 @@
+ 		md = checkfield(md,'thermal.stabilization','numel',[1],'values',[0,1,2])
+ 		md = checkfield(md,'thermal.spctemperature','forcing',1)
+ 		if EnthalpyAnalysisEnum() in analyses and (md.thermal.isenthalpy or solution==EnthalpySolutionEnum()) and md.mesh.dimension==3:
+-			md = checkfield(md,'thermal.spctemperature','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*(md.geometry.surface-md.mesh.z),'message',"spctemperature should be below the adjusted melting point")
++			pos=numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[1:md.mesh.numberofvertices,:])))
++			replicate=numpy.tile(md.geometry.surface-md.mesh.z,(1,numpy.size(md.thermal.spctemperature,axis=1)))
++			md = checkfield(md,'thermal.spctemperature(numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[1:md.mesh.numberofvertices,:]))))','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate[pos],'message',"spctemperature should be below the adjusted melting point")
+ 			md = checkfield(md,'thermal.isenthalpy','numel',[1],'values',[0,1])
+ 
+ 		return md
Index: /issm/oecreview/Archive/13393-13976/ISSM-13420-13421.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13420-13421.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13420-13421.diff	(revision 13980)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/classes/thermal.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.py	(revision 13420)
++++ ../trunk-jpl/src/m/classes/thermal.py	(revision 13421)
+@@ -70,9 +70,9 @@
+ 		md = checkfield(md,'thermal.stabilization','numel',[1],'values',[0,1,2])
+ 		md = checkfield(md,'thermal.spctemperature','forcing',1)
+ 		if EnthalpyAnalysisEnum() in analyses and (md.thermal.isenthalpy or solution==EnthalpySolutionEnum()) and md.mesh.dimension==3:
+-			pos=numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[1:md.mesh.numberofvertices,:])))
++			pos=numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices-1,:])))
+ 			replicate=numpy.tile(md.geometry.surface-md.mesh.z,(1,numpy.size(md.thermal.spctemperature,axis=1)))
+-			md = checkfield(md,'thermal.spctemperature(numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[1:md.mesh.numberofvertices,:]))))','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate[pos],'message',"spctemperature should be below the adjusted melting point")
++			md = checkfield(md,'thermal.spctemperature(numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices-1,:]))))','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate[pos],'message',"spctemperature should be below the adjusted melting point")
+ 			md = checkfield(md,'thermal.isenthalpy','numel',[1],'values',[0,1])
+ 
+ 		return md
Index: /issm/oecreview/Archive/13393-13976/ISSM-13421-13422.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13421-13422.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13421-13422.diff	(revision 13980)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/classes/thermal.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.py	(revision 13421)
++++ ../trunk-jpl/src/m/classes/thermal.py	(revision 13422)
+@@ -70,9 +70,9 @@
+ 		md = checkfield(md,'thermal.stabilization','numel',[1],'values',[0,1,2])
+ 		md = checkfield(md,'thermal.spctemperature','forcing',1)
+ 		if EnthalpyAnalysisEnum() in analyses and (md.thermal.isenthalpy or solution==EnthalpySolutionEnum()) and md.mesh.dimension==3:
+-			pos=numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices-1,:])))
++			pos=numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices,:])))
+ 			replicate=numpy.tile(md.geometry.surface-md.mesh.z,(1,numpy.size(md.thermal.spctemperature,axis=1)))
+-			md = checkfield(md,'thermal.spctemperature(numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices-1,:]))))','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate[pos],'message',"spctemperature should be below the adjusted melting point")
++			md = checkfield(md,'thermal.spctemperature(numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices,:]))))','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate[pos],'message',"spctemperature should be below the adjusted melting point")
+ 			md = checkfield(md,'thermal.isenthalpy','numel',[1],'values',[0,1])
+ 
+ 		return md
Index: /issm/oecreview/Archive/13393-13976/ISSM-13422-13423.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13422-13423.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13422-13423.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/miscellaneous/fielddisplay.py
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/fielddisplay.py	(revision 13422)
++++ ../trunk-jpl/src/m/miscellaneous/fielddisplay.py	(revision 13423)
+@@ -127,7 +127,7 @@
+ 		elif isinstance(comment,list):
+ 			string="%s%-23s: %-15s -- %s" % (offset,name,characterization,comment[0])
+ 			for commenti in comment:
+-				string+="\n%s%-23s  %-15s    %s" % (offset,'','',comment[i])
++				string+="\n%s%-23s  %-15s    %s" % (offset,'','',commenti)
+ 		else:
+ 			raise RuntimeError("fielddisplay error message: format for comment not supported yet")
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13423-13424.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13423-13424.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13423-13424.diff	(revision 13980)
@@ -0,0 +1,169 @@
+Index: ../trunk-jpl/src/m/classes/pairoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/pairoptions.py	(revision 13423)
++++ ../trunk-jpl/src/m/classes/pairoptions.py	(revision 13424)
+@@ -52,7 +52,7 @@
+ 	# }}}
+ 
+ 	def addfielddefault(self,field,value):    # {{{
+-		"""ADDFIELDDEFAULT - add a field to an options list if it does not exist"""
++		"""ADDFIELDDEFAULT - add a field to an options list if it does not already exist"""
+ 		if isinstance(field,(str,unicode)):
+ 			if field not in self.list:
+ 				self.list[field] = value
+Index: ../trunk-jpl/src/m/plot/plot_manager.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_manager.py	(revision 13423)
++++ ../trunk-jpl/src/m/plot/plot_manager.py	(revision 13424)
+@@ -23,10 +23,13 @@
+ 	#figure out if this is a special plot
+ 	if isinstance(data,(str,unicode)):
+ 
+-		if data=='mesh': plot_mesh(md,options,nlines,ncols,i)
++		# convert string to lower case for a case-insensitive comparison
++		if data.lower()=='mesh': plot_mesh(md,options,nlines,ncols,i)
+ 		else:
+ 			print "WARNING: '%s' is not implemented or is not a valid string for option 'data'" % data
+ 
++	#elif data in vars(md):
+ 	else:
+ 		print "'data' not a string, plotting model properties yet to be implemented..."
+ 
++	
+Index: ../trunk-jpl/src/m/plot/applyoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.py	(revision 13423)
++++ ../trunk-jpl/src/m/plot/applyoptions.py	(revision 13424)
+@@ -1,4 +1,3 @@
+-from matplotlib.font_manager import FontProperties
+ import pylab as p
+ 
+ def applyoptions(md,data,options):
+@@ -15,7 +14,7 @@
+ 	#if not isnan(md.mesh.hemisphere):
+ 	#	options.addfielddefault('hemisphere',md.mesh.hemisphere)
+ 
+-	#font
++	#font {{{
+ 	fontsize=options.getfieldvalue('fontsize',14)
+ 	fontweight=options.getfieldvalue('fontweight','normal')
+ 	fontfamily=options.getfieldvalue('fontfamily','sans-serif')
+@@ -24,8 +23,9 @@
+ 			'fontweight'	:fontweight,
+ 			'family'			:fontfamily
+ 			}
++	#}}}
+ 
+-	#title
++	#title {{{
+ 	if options.exist('title'):
+ 		title=options.getfieldvalue('title')
+ 		if options.exist('titlefontsize'):
+@@ -41,8 +41,9 @@
+ 		titlefont['size']=titlefontsize
+ 		titlefont['weight']=titlefontweight
+ 		p.title(title,**titlefont)
++	#}}}
+ 		
+-	#xlabel, ylabel, zlabel
++	#xlabel, ylabel, zlabel {{{
+ 	if options.exist('labelfontsize'):
+ 		labelfontsize=options.getfieldvalue('labelfontsize')
+ 	else:
+@@ -63,22 +64,67 @@
+ 		p.ylabel(options.getfieldvalue('ylabel'),**labelfont)
+ 	if options.exist('zlabel'):
+ 		p.zlabel(options.getfieldvalue('zlabel'),**labelfont)
++	#}}}
+ 
+-	#xticks, yticks, zticks
++	#xticks, yticks, zticks (tick locations) {{{
++	if options.exist('xticks'):
++		if options.exist('xticklabels'):
++			xticklabels=options.getfieldvalue('xticklabels')
++			p.xticks(options.getfieldvalue('xticks'),xticklabels)
++		else:
++			p.xticks(options.getfieldvalue('xticks'))
++	if options.exist('yticks'):
++		if options.exist('yticklabels'):
++			yticklabels=options.getfieldvalue('yticklabels')
++			p.yticks(options.getfieldvalue('yticks'),yticklabels)
++		else:
++			p.yticks(options.getfieldvalue('yticks'))
++	if options.exist('zticks'):
++		if options.exist('zticklabels'):
++			zticklabels=options.getfieldvalue('zticklabels')
++			p.zticks(options.getfieldvalue('zticks'),zticklabels)
++		else:
++			p.zticks(options.getfieldvalue('zticks'))
++	#}}}
+ 
++	#xticklabels,yticklabels,zticklabels {{{
++	if options.exist('xticklabels'):
++		xticklabels=options.getfieldvalue('xticklabels')
++		xtickloc=p.xticks()[0]	
++		p.xticks(xtickloc,xticklabels)
++	if options.exist('yticklabels'):
++		yticklabels=options.getfieldvalue('yticklabels')
++		ytickloc=p.yticks()[0]	
++		p.yticks(ytickloc,yticklabels)
++	if options.exist('zticklabels'):
++		zticklabels=options.getfieldvalue('zticklabels')
++		ztickloc=p.zticks()[0]	
++		p.zticks(ztickloc,zticklabels)
++	#}}}
++
++	#ticklabelfontsize {{{
++	if options.exist('ticklabelfontsize'):
++		ax=p.gca()
++		for label in ax.get_xticklabels() + ax.get_yticklabels():
++			label.set_fontsize(options.getfieldvalue('ticklabelfontsize'))
++		if int(md.mesh.dimension)==3: 
++			for label in ax.get_zticklabels():
++				label.set_fontsize(options.getfieldvalue('ticklabelfontsize'))
++	#}}}
+ 	#view
+ 
+ 	#axis
+ 
+ 	#box
+ 
+-	#xlim, ylim, zlim
++	#xlim, ylim, zlim {{{
+ 	if options.exist('xlim'):
+ 		p.xlim(options.getfieldvalue('xlim'))
+ 	if options.exist('ylim'):
+ 		p.xlim(options.getfieldvalue('ylim'))
+ 	if options.exist('zlim'):
+ 		p.xlim(options.getfieldvalue('zlim'))
++	#}}}
+ 
+ 	#latlon
+ 
+@@ -90,9 +136,10 @@
+ 
+ 	#shading
+ 
+-	#grid
++	#grid {{{
+ 	if options.exist('grid'):
+ 		p.grid()
++	#}}}
+ 
+ 	#colormap
+ 
+@@ -114,14 +161,9 @@
+ 
+ 	#contours
+ 
+-	#YTickLabel
+ 
+-	#XTickLabel
+ 
+-	#xtick
+ 
+-	#ytick
+-
+ 	#axis positions
+ 
+ 	#figure position
Index: /issm/oecreview/Archive/13393-13976/ISSM-13424-13425.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13424-13425.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13424-13425.diff	(revision 13980)
@@ -0,0 +1,419 @@
+Index: ../trunk-jpl/src/c/Container/Parameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Parameters.cpp	(revision 13424)
++++ ../trunk-jpl/src/c/Container/Parameters.cpp	(revision 13425)
+@@ -296,7 +296,25 @@
+ 	_error_("could not find parameter " << EnumToStringx(enum_type));
+ }
+ /*}}}*/
++/*FUNCTION Parameters::FindParam(DataSet** pdataset,int enum_type){{{*/
++void Parameters::FindParam(DataSet** pdataset,int enum_type){ 
++	_assert_(this);
+ 
++	vector<Object*>::iterator object;
++	Param* param=NULL;
++
++	for ( object=objects.begin() ; object < objects.end(); object++ ){
++
++		param=(Param*)(*object);
++		if(param->InstanceEnum()==enum_type){
++			param->GetParameterValue(pdataset);
++			return;
++		}
++	}
++	_error_("could not find parameter " << EnumToStringx(enum_type));
++}
++/*}}}*/
++
+ /*FUNCTION Parameters::SetParam(bool boolean,int enum_type);{{{*/
+ void   Parameters::SetParam(bool boolean,int enum_type){
+ 
+Index: ../trunk-jpl/src/c/Container/Parameters.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Parameters.h	(revision 13424)
++++ ../trunk-jpl/src/c/Container/Parameters.h	(revision 13425)
+@@ -43,6 +43,7 @@
+ 		void  FindParam(Vector<IssmDouble>** pvec,int enum_type);
+ 		void  FindParam(Matrix<IssmDouble>** pmat,int enum_type);
+ 		void  FindParam(FILE** pfid,int enum_type);
++		void  FindParam(DataSet** pdataset, int enum_type);
+ 		
+ 		void  SetParam(bool boolean,int enum_type);
+ 		void  SetParam(int integer,int enum_type);
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.h	(revision 13425)
+@@ -55,6 +55,7 @@
+ 		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Vec");}
+ 		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Mat");}
+ 		void  GetParameterValue(FILE** pfid){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a boolean");}
+ 		void  SetValue(int integer){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an integer");}
+Index: ../trunk-jpl/src/c/classes/objects/Params/GenericParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/GenericParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/GenericParam.h	(revision 13425)
+@@ -78,6 +78,7 @@
+                 void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a Vec");}
+                 void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a Mat");}
+                 void  GetParameterValue(FILE** pfid){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a FILE");}
++				void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot return a DataSet");}
+ 
+                 void  SetValue(bool boolean){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold a bool");}
+                 void  SetValue(int integer){_error_("Param "<< EnumToStringx(myEnumVal) << " cannot hold an integer");}
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.h	(revision 13425)
+@@ -56,6 +56,7 @@
+ 		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Vec");}
+ 		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Mat");}
+ 		void  GetParameterValue(FILE** pfid){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a boolean");}
+ 		void  SetValue(int integer){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an integer");}
+Index: ../trunk-jpl/src/c/classes/objects/Params/Param.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/Param.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/Param.h	(revision 13425)
+@@ -40,6 +40,7 @@
+ 		virtual void  GetParameterValue(Vector<IssmDouble>** pvec)=0;
+ 		virtual void  GetParameterValue(Matrix<IssmDouble>** pmat)=0;
+ 		virtual void  GetParameterValue(FILE** pfid)=0;
++		virtual void  GetParameterValue(DataSet** pdataset)=0;
+ 		
+ 		virtual void  SetValue(bool boolean)=0;
+ 		virtual void  SetValue(int integer)=0;
+Index: ../trunk-jpl/src/c/classes/objects/Params/FileParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/FileParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/FileParam.h	(revision 13425)
+@@ -54,6 +54,7 @@
+ 		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Vec");}
+ 		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Mat");}
+ 		void  GetParameterValue(FILE** pfid){*pfid=value;};
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a string");}
+ 		void  SetValue(int integer){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a string");}
+Index: ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.h	(revision 13425)
+@@ -0,0 +1,80 @@
++/*! \file DataSetParam.h 
++ *  \brief: header file for triavertexinput object
++ */
++
++
++#ifndef _DATASETPARAM_H_
++#define _DATASETPARAM_H_
++
++/*Headers:*/
++/*{{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./Param.h"
++#include "../../../include/include.h"
++#include "../../../shared/shared.h"
++/*}}}*/
++
++class DataSetParam: public Param{
++
++	private: 
++		int   enum_type;
++		DataSet* value;
++
++	public:
++		/*DataSetParam constructors, destructors: {{{*/
++		DataSetParam();
++		DataSetParam(int enum_type,DataSet* dataset);
++		~DataSetParam();
++		/*}}}*/
++		/*Object virtual functions definitions:{{{ */
++		void  Echo();
++		void  DeepEcho();
++		int   Id(); 
++		int   MyRank();
++		int   ObjectEnum();
++		Object* copy();
++		/*}}}*/
++		/*Param vritual function definitions: {{{*/
++		int   InstanceEnum(){return enum_type;}
++		void  GetParameterValue(bool* pbool){  _error_("Param "<< EnumToStringx(enum_type) << " cannot return a bool");}
++		void  GetParameterValue(int* pinteger){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
++		void  GetParameterValue(int** pintarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
++		void  GetParameterValue(int** pintarray,int* pM,int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
++		void  GetParameterValue(IssmDouble* pIssmDouble){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble");}
++		void  GetParameterValue(IssmDouble* pdouble,IssmDouble time){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble for a given time");}
++		void  GetParameterValue(FILE** pfile){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a file pointer");}
++		void  GetParameterValue(char** pstring){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string");}
++		void  GetParameterValue(char*** pstringarray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a string array");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
++		void  GetParameterValue(IssmDouble** pIssmDoublearray,int* pM, int* pN){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a IssmDouble array");}
++		void  GetParameterValue(IssmDouble*** parray, int* pM,int** pmdims, int** pndims){_error_("DataSet param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot return a matrix array");}
++		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Vec");}
++		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Mat");}
++		void  GetParameterValue(DataSet** pdataset);
++
++		void  SetValue(bool boolean){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a string");}
++		void  SetValue(int integer){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a string");}
++		void  SetValue(IssmDouble scalar){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a string");}
++		void  SetValue(char* string){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a string");}
++		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a file pointer");}
++		void  SetValue(char** stringarray,int M){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a string array");}
++		void  SetValue(IssmDouble* IssmDoublearray,int M){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a IssmDouble array");}
++		void  SetValue(IssmDouble* pIssmDoublearray,int M,int N){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a IssmDouble array");}
++		void  SetValue(int* intarray,int M){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a int array");}
++		void  SetValue(int* pintarray,int M,int N){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a int array");}
++		void  SetValue(Vector<IssmDouble>* vec){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Vec");}
++		void  SetValue(Matrix<IssmDouble>* mat){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a Mat");}
++		void  SetValue(DataSet* dataset){_error_("DataSet param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold a DataSet yet");}
++		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("DataSet param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold an array of matrices");}
++		void  UnitConversion(int direction_enum);
++
++		void GetParameterName(char**pname);
++
++		/*}}}*/
++};
++#endif  /* _INTPARAM_H */
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntParam.h	(revision 13425)
+@@ -55,6 +55,7 @@
+ 		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Vec");}
+ 		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Mat");}
+ 		void  GetParameterValue(FILE** pfid){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a bool");}
+ 		void  SetValue(int integer){this->value=integer;}
+Index: ../trunk-jpl/src/c/classes/objects/Params/VectorParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/VectorParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/VectorParam.h	(revision 13425)
+@@ -55,6 +55,7 @@
+ 		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Mat");}
+ 		void  GetParameterValue(Vector<IssmDouble>** poutput);
+ 		void  GetParameterValue(FILE** pfid){_error_("Vector of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){_error_("Vector of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold a boolean");}
+ 		void  SetValue(int integer){_error_("Vector of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot hold an integer");}
+Index: ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.h	(revision 13425)
+@@ -55,6 +55,7 @@
+ 		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a vec");}
+ 		void  GetParameterValue(Matrix<IssmDouble>** poutput);
+ 		void  GetParameterValue(FILE** pfid){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a boolean");}
+ 		void  SetValue(int integer){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an integer");}
+Index: ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.h	(revision 13425)
+@@ -57,6 +57,7 @@
+ 		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Vec");}
+ 		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Mat");}
+ 		void  GetParameterValue(FILE** pfid){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a boolean");}
+ 		void  SetValue(int integer){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an integer");}
+Index: ../trunk-jpl/src/c/classes/objects/Params/TransientParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/TransientParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/TransientParam.h	(revision 13425)
+@@ -55,6 +55,7 @@
+ 		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a Vec");}
+ 		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a Mat");}
+ 		void  GetParameterValue(FILE** pfid){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold a boolean");}
+ 		void  SetValue(int integer){_error_("Parameter " <<EnumToStringx(enum_type) << " cannot hold an integer");}
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.h	(revision 13425)
+@@ -55,6 +55,7 @@
+ 		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Vec");}
+ 		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Mat");}
+ 		void  GetParameterValue(FILE** pfid){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){this->value=(IssmDouble)boolean;}
+ 		void  SetValue(int integer){this->value=(IssmDouble)integer;}
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.h	(revision 13425)
+@@ -57,6 +57,7 @@
+ 		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(enum_type) << "cannot return a Vec");}
+ 		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(enum_type) << "cannot return a Mat");}
+ 		void  GetParameterValue(FILE** pfid){_error_("Param "<< EnumToStringx(enum_type) << "cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){_error_("Param "<< EnumToStringx(enum_type) << "cannot hold a boolean");}
+ 		void  SetValue(int integer){_error_("Param "<< EnumToStringx(enum_type) << "cannot hold an integer");}
+Index: ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp	(revision 0)
++++ ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp	(revision 13425)
+@@ -0,0 +1,95 @@
++/*!\file DataSetParam.c
++ * \brief: implementation of the DataSetParam object
++ */
++
++/*header files: */
++/*{{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include <stdio.h>
++#include <string.h>
++#include "../objects.h"
++#include "../../../EnumDefinitions/EnumDefinitions.h"
++#include "../../../shared/shared.h"
++#include "../../../Container/Container.h"
++#include "../../../include/include.h"
++/*}}}*/
++
++/*DataSetParam constructors and destructor*/
++/*FUNCTION DataSetParam::DataSetParam(){{{*/
++DataSetParam::DataSetParam(){
++	value=NULL;
++	return;
++}
++/*}}}*/
++/*FUNCTION DataSetParam::DataSetParam(int enum_type,DataSet *value){{{*/
++DataSetParam::DataSetParam(int in_enum_type,DataSet* in_value){
++
++	enum_type=in_enum_type;
++	value=in_value->Copy();;
++}
++/*}}}*/
++/*FUNCTION DataSetParam::~DataSetParam(){{{*/
++DataSetParam::~DataSetParam(){
++	delete value;
++}
++/*}}}*/
++
++/*Object virtual functions definitions:*/
++/*FUNCTION DataSetParam::Echo {{{*/
++void DataSetParam::Echo(void){
++	this->DeepEcho();
++}
++/*}}}*/
++/*FUNCTION DataSetParam::DeepEcho{{{*/
++void DataSetParam::DeepEcho(void){
++
++	_printLine_("DataSetParam:");
++	_printLine_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
++	this->value->Echo();
++}
++/*}}}*/
++/*FUNCTION DataSetParam::Id{{{*/
++int    DataSetParam::Id(void){ return -1; }
++/*}}}*/
++/*FUNCTION DataSetParam::MyRank{{{*/
++int    DataSetParam::MyRank(void){ 
++	extern int my_rank;
++	return my_rank; 
++}
++/*}}}*/
++/*FUNCTION DataSetParam::ObjectEnum{{{*/
++int DataSetParam::ObjectEnum(void){
++
++	return DataSetParamEnum;
++
++}
++/*}}}*/
++/*FUNCTION DataSetParam::copy{{{*/
++Object* DataSetParam::copy() {
++	
++	return new DataSetParam(this->enum_type,this->value);
++
++}
++/*}}}*/
++
++/*DataSetParam virtual functions definitions: */
++/*FUNCTION DataSetParam::GetParameterName{{{*/
++void DataSetParam::GetParameterName(char**pname){
++	EnumToStringx(pname,this->enum_type);
++}
++/*}}}*/
++/*FUNCTION DataSetParam::UnitConversion{{{*/
++void  DataSetParam::UnitConversion(int direction_enum){
++	/*do nothing, no unit conversion*/
++}
++/*}}}*/
++/*FUNCTION DataSetParam::GetParameterValue{{{*/
++void DataSetParam::GetParameterValue(DataSet** pdataset){
++	*pdataset=value->Copy();
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.h	(revision 13425)
+@@ -56,6 +56,7 @@
+ 		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Vec");}
+ 		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Mat");}
+ 		void  GetParameterValue(FILE** pfid){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a boolean");}
+ 		void  SetValue(int integer){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an integer");}
+Index: ../trunk-jpl/src/c/classes/objects/Params/BoolParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/BoolParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/BoolParam.h	(revision 13425)
+@@ -54,6 +54,7 @@
+ 		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Vec");}
+ 		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Mat");}
+ 		void  GetParameterValue(FILE** pfid){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){this->value=boolean;}
+ 		void  SetValue(int integer){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an int");}
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.h	(revision 13425)
+@@ -56,6 +56,7 @@
+ 		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Vec");}
+ 		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Mat");}
+ 		void  GetParameterValue(FILE** pfid){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a boolean");}
+ 		void  SetValue(int integer){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an integer");}
+Index: ../trunk-jpl/src/c/classes/objects/Params/StringParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/StringParam.h	(revision 13424)
++++ ../trunk-jpl/src/c/classes/objects/Params/StringParam.h	(revision 13425)
+@@ -55,6 +55,7 @@
+ 		void  GetParameterValue(Vector<IssmDouble>** pvec){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Vec");}
+ 		void  GetParameterValue(Matrix<IssmDouble>** pmat){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a Mat");}
+ 		void  GetParameterValue(FILE** pfid){_error_("Bool param of enum " << enum_type << " (" << EnumToStringx(enum_type) << ") cannot return a FILE");}
++		void  GetParameterValue(DataSet** pdataset){_error_("Param "<< EnumToStringx(enum_type) << " cannot return a DataSet");}
+ 
+ 		void  SetValue(bool boolean){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a boolean");}
+ 		void  SetValue(int integer){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an integer");}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13425-13426.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13425-13426.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13425-13426.diff	(revision 13980)
@@ -0,0 +1,441 @@
+Index: ../trunk-jpl/src/c/classes/objects/objects.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/objects.h	(revision 13425)
++++ ../trunk-jpl/src/c/classes/objects/objects.h	(revision 13426)
+@@ -12,6 +12,8 @@
+ #include "./Contour.h"
+ #include "./Vertex.h"
+ #include "./Node.h"
++#include "./DependentObject.h"
++#include "./IndependentObject.h"
+ #include "./Segment.h"
+ 
+ /*Constraints: */
+@@ -118,5 +120,6 @@
+ #include "./Params/StringArrayParam.h"
+ #include "./Params/StringParam.h"
+ #include "./Params/TransientParam.h"
++#include "./Params/DataSetParam.h"
+ 
+ #endif
+Index: ../trunk-jpl/src/c/classes/objects/DependentObject.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/DependentObject.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/objects/DependentObject.h	(revision 13426)
+@@ -0,0 +1,38 @@
++/*!\file: DependentObject.h
++ * \brief prototype for DependentObject.h
++ */ 
++
++#ifndef _DEPENDENTOBJECT_H_
++#define  _DEPENDENTOBJECT_H_
++
++/*{{{*/
++#include "./Object.h"
++#include "../../shared/shared.h"
++/*}}}*/
++
++class DependentObject: public Object{
++	
++	public:
++
++		int name;
++		int type;  /*0: scalar, 1: vertex*/
++		
++		/*DependentObject constructors, destructors {{{*/
++		DependentObject();
++		DependentObject(int name, int type);
++		~DependentObject();
++		/*}}}*/
++		/*Object virtual functions definitions:{{{ */
++		void  Echo();
++		void  DeepEcho();
++		int   Id(); 
++		int   MyRank();
++		int   ObjectEnum();
++		Object* copy(void);
++		/*}}}*/
++
++		/*DependentObject methods: */
++		int  NumDependents(void);
++
++};
++#endif //ifndef _DEPENDENTOBJECT_H_
+Index: ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp	(revision 0)
++++ ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp	(revision 13426)
+@@ -0,0 +1,224 @@
++/*!\file IndependentObject.c
++ * \brief: implementation of the IndependentObject object
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include <stdio.h>
++#include <string.h>
++#include "./objects.h"
++#include "../../EnumDefinitions/EnumDefinitions.h"
++#include "../../shared/shared.h"
++#include "../../Container/Container.h"
++#include "../../include/include.h"
++#include "../IoModel.h"
++
++/*IndependentObject constructors and destructor*/
++/*FUNCTION IndependentObject::IndependentObject(){{{*/
++IndependentObject::IndependentObject(){
++	this->name=NoneEnum;
++	this->type=0;
++	this->numberofvertices=0;
++}
++/*}}}*/
++/*FUNCTION IndependentObject::IndependentObject(int in_name, int in_type,int in_numberofvertices){{{*/
++IndependentObject::IndependentObject(int in_name, int in_type,int in_numberofvertices){
++
++	this->numberofvertices=0;
++	this->name=in_name;
++	this->type=in_type;
++	if(in_type!=0 && in_type!=1)_error_("cannot create an IndependentObject of type " << in_type);
++	if(this->type==1)this->numberofvertices=in_numberofvertices;
++
++}
++/*}}}*/
++/*FUNCTION IndependentObject::~IndependentObject() {{{*/
++IndependentObject::~IndependentObject(){ //destructor
++}
++/*}}}*/
++
++/*Object virtual functions definitions:*/
++/*FUNCTION IndependentObject::Echo{{{*/
++void IndependentObject::Echo(void){
++
++	_printLine_("IndependentObject:");
++	_printLine_("   name: " << EnumToStringx(this->name));
++	if(this->type==0)
++		_printLine_("   type: scalar");
++	else if(this->type==1)
++		_printLine_("   type: vertex");
++	else
++		_error_(" unknown type: " << this->type);
++	_printLine_("   numberofvertices: " << this->numberofvertices);
++}
++/*}}}*/
++/*FUNCTION IndependentObject::DeepEcho{{{*/
++void IndependentObject::DeepEcho(void){
++	this->Echo();
++}
++/*}}}*/
++/*FUNCTION IndependentObject::Id{{{*/
++int    IndependentObject::Id(void){ return -1; }
++/*}}}*/
++/*FUNCTION IndependentObject::MyRank{{{*/
++int    IndependentObject::MyRank(void){ 
++	extern int my_rank;
++
++	return my_rank; 
++}
++/*}}}*/
++/*FUNCTION IndependentObject::ObjectEnum{{{*/
++int IndependentObject::ObjectEnum(void){
++
++	return IndependentObjectEnum;
++
++}
++/*}}}*/
++/*FUNCTION IndependentObject::copy{{{*/
++Object* IndependentObject::copy(void) { 
++	return new IndependentObject(name,type,numberofvertices);
++} /*}}}*/
++
++
++/*IndependentObject methods: */
++/*FUNCTION IndependentObject::FetchIndependent{{{*/
++void IndependentObject::FetchIndependent(IoModel* iomodel){
++
++	extern int my_rank;
++	FILE* fid=NULL;
++
++	#ifdef _HAVE_ADOLC_ //cannot come here unless you are running AD mode, from DeclaredIndependents:
++	
++	/*Branch according to the type of variable: */
++	if(type==0){ /*scalar: {{{*/
++
++		/*output: */
++		IssmPDouble  pscalar;
++		IssmDouble   scalar; //same as pscalar, except it's an ADOLC independent variable
++		IssmDouble*  scalar_slot=NULL;
++		int      code;
++
++		/*Set file pointer to beginning of the data: */
++		fid=iomodel->SetFilePointerToData(&code,NULL,name);
++
++		if(code!=3)_error_("expecting a IssmDouble for enum " << EnumToStringx(name));
++
++		/*We have to read a scalar from disk. First read the dimensions of the scalar, then the scalar: */
++		if(my_rank==0){
++			if(fread(&pscalar,sizeof(IssmPDouble),1,fid)!=1)_error_("could not read scalar ");
++		}
++
++		/*Now, before we even broadcast this to other nodes, declare the scalar  as an independent variable!: */
++		scalar<<=pscalar;
++		
++		#ifdef _HAVE_MPI_
++		MPI_Bcast(&scalar,1,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++		#endif
++
++
++		/*Ok, we are almost done. scalar is now an independent variable. We don't want this variable to be fetched again in the 
++		 *future, which would effectively write over the independency in the ADOLC tape! So we are going to keep track of this 
++		 independent variable inthe iomodel->data[name] data slot. Because this data slot holds double*, we allocate a sizeof(double)
++		 space for it: */
++		scalar_slot=xNew<IssmDouble>(1); *scalar_slot=scalar;
++		
++		iomodel->data[name]=scalar_slot;
++		iomodel->independents[name]=true;
++
++
++	} /*}}}*/
++	else if(type==1){ /* vector: {{{*/
++		
++		FILE* fid=NULL;
++		int M,N;
++		IssmPDouble* buffer=NULL; //a buffer to read the data from disk
++		IssmDouble* matrix=NULL; //our independent variable
++		int code=0;
++		int vector_type=0;
++		
++		/*Set file pointer to beginning of the data: */
++		fid=iomodel->SetFilePointerToData(&code,&vector_type,name);
++		if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(name));
++		
++		/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
++		/*numberofelements: */
++		if(my_rank==0){  
++			if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
++		}
++		#ifdef _HAVE_MPI_
++		MPI_Bcast(&M,1,MPI_INT,0,MPI_COMM_WORLD); 
++		#endif
++
++		if(my_rank==0){  
++			if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
++		}
++		#ifdef _HAVE_MPI_
++		MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD); 
++		#endif
++
++		/*Now allocate matrix: */
++		if(M*N){
++			buffer=xNew<IssmPDouble>(M*N);
++			matrix=xNew<IssmDouble>(M*N);
++
++			/*Read matrix on node 0, then broadcast: */
++			if(my_rank==0){  
++				if(fread(buffer,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
++				
++				/*Now, before we even broadcast this to other nodes, declare the whole matrix as a independent variable!: */
++				for (int i=0;i<M*N;++i) matrix[i]<<=buffer[i];  /*we use the <<= ADOLC overloaded operator to declare the independency*/
++			}
++			#ifdef _HAVE_MPI_
++			MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++			#endif
++			
++			xDelete<IssmPDouble>(buffer);
++		}
++		else _error_("cannot declare the independent variable " << EnumToStringx(name) <<  "if it's empty!");
++
++		/*Ok, we are almost done. Matrix is now a independent matrix. We don't want this matrix to be fetched again in the 
++		 *future, which would effectively write over the independency in the ADOLC tape! So we are going to keep track of this 
++		 independent matrix inthe iomodel->data[name] data slot: */
++		iomodel->data[name]=matrix;
++		iomodel->independents[name]=true;
++	}/*}}}*/
++	else _error_("should not have a type of " << type);
++
++	#endif
++}
++/*}}}*/
++/*FUNCTION IndependentObject::NumIndependents{{{*/
++int  IndependentObject::NumIndependents(void){
++
++	/*Branch according to the type of variable: */
++	if(type==0){ /*scalar:*/
++		return 1;
++	}
++	else if(type==1){ /* vector:*/
++		return this->numberofvertices;
++	}
++	else _error_("should not have a type of " << type);
++}
++/*}}}*/
++/*FUNCTION IndependentObject::FillIndependents{{{*/
++void IndependentObject::FillIndependents(IssmDouble** data, IssmDouble* xp){
++
++	int i;
++	
++	/*Branch according to the type of variable: */
++	if(type==0){ /*scalar:*/
++		xp[0]=*(data[name]);
++	}
++	else if(type==1){ /* vector:*/
++		IssmDouble* values=data[name];
++		for(i=0;i<this->numberofvertices;i++){
++			xp[i]=values[i];
++		}
++	}
++	else _error_("should not have a type of " << type);
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/IndependentObject.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/IndependentObject.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/objects/IndependentObject.h	(revision 13426)
+@@ -0,0 +1,43 @@
++/*!\file: IndependentObject.h
++ * \brief prototype for IndependentObject.h
++ */ 
++
++#ifndef _INDEPENDENTOBJECT_H_
++#define  _INDEPENDENTOBJECT_H_
++
++
++/*{{{*/
++#include "./Object.h"
++#include "../../shared/shared.h"
++/*}}}*/
++class IoModel;
++
++class IndependentObject: public Object{
++	
++	public:
++
++		int name;
++		int type;  /*0: scalar, 1: vertex*/
++		int numberofvertices;
++		
++		/*IndependentObject constructors, destructors {{{*/
++		IndependentObject();
++		IndependentObject(int name, int type, int numberofvertices);
++		~IndependentObject();
++		/*}}}*/
++		/*Object virtual functions definitions:{{{ */
++		void  Echo();
++		void  DeepEcho();
++		int   Id(); 
++		int   MyRank();
++		int   ObjectEnum();
++		Object* copy(void);
++		/*}}}*/
++		/*IndependentObject methods: {{{*/
++		void FetchIndependent(IoModel* iomodel);
++		int  NumIndependents(void);
++		void FillIndependents(IssmDouble** data, IssmDouble* xp);
++		/*}}}*/
++
++};
++#endif //ifndef _INDEPENDENTOBJECT_H_
+Index: ../trunk-jpl/src/c/classes/objects/DependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/DependentObject.cpp	(revision 0)
++++ ../trunk-jpl/src/c/classes/objects/DependentObject.cpp	(revision 13426)
+@@ -0,0 +1,96 @@
++/*!\file DependentObject.c
++ * \brief: implementation of the DependentObject object
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include <stdio.h>
++#include <string.h>
++#include "./objects.h"
++#include "../../EnumDefinitions/EnumDefinitions.h"
++#include "../../shared/shared.h"
++#include "../../Container/Container.h"
++#include "../../include/include.h"
++
++/*DependentObject constructors and destructor*/
++/*FUNCTION DependentObject::DependentObject(){{{*/
++DependentObject::DependentObject(){
++	this->name=NoneEnum;
++	this->type=0;
++}
++/*}}}*/
++/*FUNCTION DependentObject::DependentObject(int in_name, int in_type){{{*/
++DependentObject::DependentObject(int in_name, int in_type){
++
++	this->name=in_name;
++	this->type=in_type;
++	if(in_type!=0 && in_type!=1)_error_("cannot create an DependentObject of type " << in_type);
++	if(in_type==1)_error_("not implemented yet!");
++
++}
++/*}}}*/
++/*FUNCTION DependentObject::~DependentObject() {{{*/
++DependentObject::~DependentObject(){ //destructor
++}
++/*}}}*/
++
++
++/*Object virtual functions definitions:*/
++/*FUNCTION DependentObject::Echo{{{*/
++void DependentObject::Echo(void){
++
++	_printLine_("DependentObject:");
++	_printLine_("   name: " << EnumToStringx(this->name));
++	if(this->type==0)
++		_printLine_("   type: scalar");
++	else if(this->type==1)
++		_printLine_("   type: vertex");
++	else
++		_error_(" unknown type: " << this->type);
++}
++/*}}}*/
++/*FUNCTION DependentObject::DeepEcho{{{*/
++void DependentObject::DeepEcho(void){
++	this->Echo();
++}
++/*}}}*/
++/*FUNCTION DependentObject::Id{{{*/
++int    DependentObject::Id(void){ return -1; }
++/*}}}*/
++/*FUNCTION DependentObject::MyRank{{{*/
++int    DependentObject::MyRank(void){ 
++	extern int my_rank;
++
++	return my_rank; 
++}
++/*}}}*/
++/*FUNCTION DependentObject::ObjectEnum{{{*/
++int DependentObject::ObjectEnum(void){
++
++	return DependentObjectEnum;
++
++}
++/*}}}*/
++/*FUNCTION DependentObject::copy{{{*/
++Object* DependentObject::copy(void) { 
++	return new DependentObject(name,type);
++} /*}}}*/
++
++/*DependentObject methods: */
++/*FUNCTION DependentObject::NumDependents{{{*/
++int  DependentObject::NumDependents(void){
++
++	/*Branch according to the type of variable: */
++	if(type==0){ /*scalar:*/
++		return 1;
++	}
++	else if(type==1){ /* vector:*/
++		_error_("not implemented yet!");
++	}
++	else _error_("should not have a type of " << type);
++}
++/*}}}*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13426-13427.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13426-13427.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13426-13427.diff	(revision 13980)
@@ -0,0 +1,527 @@
+Index: ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13426)
++++ ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13427)
+@@ -12,13 +12,20 @@
+ enum definitions{
+ 	/*Model fields {{{1*/
+ 	AutodiffIsautodiffEnum, 
+-	AutodiffDependentsEnum,
+ 	AutodiffNumDependentsEnum,
+-	AutodiffIndependentsEnum,
++	AutodiffNumDependentObjectsEnum,
++	AutodiffDependentObjectNamesEnum,
++	AutodiffDependentObjectTypesEnum,
++	AutodiffDependentObjectsEnum,
+ 	AutodiffNumIndependentsEnum,
++	AutodiffNumIndependentObjectsEnum,
++	AutodiffIndependentObjectNamesEnum,
++	AutodiffIndependentObjectTypesEnum,
++	AutodiffIndependentObjectsEnum,
+ 	AutodiffJacobianEnum,
+ 	AutodiffXpEnum,
+-	AutodiffFosForwardOutputEnum,
++	AutodiffDriverEnum,
++	AutodiffFosForwardIndexEnum,
+ 	BalancethicknessSpcthicknessEnum,
+ 	BalancethicknessStabilizationEnum,
+ 	BalancethicknessThickeningRateEnum,
+@@ -30,6 +37,7 @@
+ 	ConstantsGEnum,
+ 	ConstantsReferencetemperatureEnum,
+ 	ConstantsYtsEnum,
++	DependentObjectEnum,
+ 	DiagnosticAbstolEnum,
+ 	DiagnosticIcefrontEnum,
+ 	DiagnosticIsnewtonEnum,
+@@ -69,6 +77,7 @@
+ 	HydrologyQEnum,
+ 	HydrologySpcwatercolumnEnum,
+ 	HydrologyStabilizationEnum,
++	IndependentObjectEnum,
+ 	InversionControlParametersEnum,
+ 	InversionCostFunctionEnum,
+ 	InversionCostFunctionThresholdEnum,
+@@ -272,6 +281,7 @@
+ 	DatasetInputEnum,
+ 	DofIndexingEnum,
+ 	DoubleInputEnum,
++	DataSetParamEnum,
+ 	DoubleMatArrayParamEnum,
+ 	DoubleMatParamEnum,
+ 	DoubleParamEnum,
+Index: ../trunk-jpl/src/m/enum/AutodiffFosForwardOutputEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffFosForwardOutputEnum.m	(revision 13426)
++++ ../trunk-jpl/src/m/enum/AutodiffFosForwardOutputEnum.m	(revision 13427)
+@@ -1,11 +0,0 @@
+-function macro=AutodiffFosForwardOutputEnum()
+-%AUTODIFFFOSFORWARDOUTPUTENUM - Enum of AutodiffFosForwardOutput
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+-%            Please read src/c/EnumDefinitions/README for more information
+-%
+-%   Usage:
+-%      macro=AutodiffFosForwardOutputEnum()
+-
+-macro=StringToEnum('AutodiffFosForwardOutput');
+Index: ../trunk-jpl/src/m/enum/AutodiffDependentsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffDependentsEnum.m	(revision 13426)
++++ ../trunk-jpl/src/m/enum/AutodiffDependentsEnum.m	(revision 13427)
+@@ -1,11 +0,0 @@
+-function macro=AutodiffDependentsEnum()
+-%AUTODIFFDEPENDENTSENUM - Enum of AutodiffDependents
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+-%            Please read src/c/EnumDefinitions/README for more information
+-%
+-%   Usage:
+-%      macro=AutodiffDependentsEnum()
+-
+-macro=StringToEnum('AutodiffDependents');
+Index: ../trunk-jpl/src/m/enum/AutodiffIndependentsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffIndependentsEnum.m	(revision 13426)
++++ ../trunk-jpl/src/m/enum/AutodiffIndependentsEnum.m	(revision 13427)
+@@ -1,11 +0,0 @@
+-function macro=AutodiffIndependentsEnum()
+-%AUTODIFFINDEPENDENTSENUM - Enum of AutodiffIndependents
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+-%            Please read src/c/EnumDefinitions/README for more information
+-%
+-%   Usage:
+-%      macro=AutodiffIndependentsEnum()
+-
+-macro=StringToEnum('AutodiffIndependents');
+Index: ../trunk-jpl/src/m/enum/AutodiffIndependentObjectTypesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffIndependentObjectTypesEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffIndependentObjectTypesEnum.m	(revision 13427)
+@@ -0,0 +1,11 @@
++function macro=AutodiffIndependentObjectTypesEnum()
++%AUTODIFFINDEPENDENTOBJECTTYPESENUM - Enum of AutodiffIndependentObjectTypes
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffIndependentObjectTypesEnum()
++
++macro=StringToEnum('AutodiffIndependentObjectTypes');
+Index: ../trunk-jpl/src/m/enum/AutodiffFosForwardIndexEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffFosForwardIndexEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffFosForwardIndexEnum.m	(revision 13427)
+@@ -0,0 +1,11 @@
++function macro=AutodiffFosForwardIndexEnum()
++%AUTODIFFFOSFORWARDINDEXENUM - Enum of AutodiffFosForwardIndex
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffFosForwardIndexEnum()
++
++macro=StringToEnum('AutodiffFosForwardIndex');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13426)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13427)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=474;
++macro=484;
+Index: ../trunk-jpl/src/m/enum/AutodiffIndependentObjectNamesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffIndependentObjectNamesEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffIndependentObjectNamesEnum.m	(revision 13427)
+@@ -0,0 +1,11 @@
++function macro=AutodiffIndependentObjectNamesEnum()
++%AUTODIFFINDEPENDENTOBJECTNAMESENUM - Enum of AutodiffIndependentObjectNames
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffIndependentObjectNamesEnum()
++
++macro=StringToEnum('AutodiffIndependentObjectNames');
+Index: ../trunk-jpl/src/m/enum/AutodiffDriverEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffDriverEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffDriverEnum.m	(revision 13427)
+@@ -0,0 +1,11 @@
++function macro=AutodiffDriverEnum()
++%AUTODIFFDRIVERENUM - Enum of AutodiffDriver
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffDriverEnum()
++
++macro=StringToEnum('AutodiffDriver');
+Index: ../trunk-jpl/src/m/enum/AutodiffDependentObjectTypesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffDependentObjectTypesEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffDependentObjectTypesEnum.m	(revision 13427)
+@@ -0,0 +1,11 @@
++function macro=AutodiffDependentObjectTypesEnum()
++%AUTODIFFDEPENDENTOBJECTTYPESENUM - Enum of AutodiffDependentObjectTypes
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffDependentObjectTypesEnum()
++
++macro=StringToEnum('AutodiffDependentObjectTypes');
+Index: ../trunk-jpl/src/m/enum/DataSetParamEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DataSetParamEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DataSetParamEnum.m	(revision 13427)
+@@ -0,0 +1,11 @@
++function macro=DataSetParamEnum()
++%DATASETPARAMENUM - Enum of DataSetParam
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=DataSetParamEnum()
++
++macro=StringToEnum('DataSetParam');
+Index: ../trunk-jpl/src/m/enum/AutodiffDependentObjectNamesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffDependentObjectNamesEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffDependentObjectNamesEnum.m	(revision 13427)
+@@ -0,0 +1,11 @@
++function macro=AutodiffDependentObjectNamesEnum()
++%AUTODIFFDEPENDENTOBJECTNAMESENUM - Enum of AutodiffDependentObjectNames
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffDependentObjectNamesEnum()
++
++macro=StringToEnum('AutodiffDependentObjectNames');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13426)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13427)
+@@ -18,36 +18,56 @@
+ 
+ 	return StringToEnum('AutodiffIsautodiff')[0]
+ 
+-def AutodiffDependentsEnum():
++def AutodiffNumDependentsEnum():
+ 	"""
+-	AUTODIFFDEPENDENTSENUM - Enum of AutodiffDependents
++	AUTODIFFNUMDEPENDENTSENUM - Enum of AutodiffNumDependents
+ 
+ 	   Usage:
+-	      macro=AutodiffDependentsEnum()
++	      macro=AutodiffNumDependentsEnum()
+ 	"""
+ 
+-	return StringToEnum('AutodiffDependents')[0]
++	return StringToEnum('AutodiffNumDependents')[0]
+ 
+-def AutodiffNumDependentsEnum():
++def AutodiffNumDependentObjectsEnum():
+ 	"""
+-	AUTODIFFNUMDEPENDENTSENUM - Enum of AutodiffNumDependents
++	AUTODIFFNUMDEPENDENTOBJECTSENUM - Enum of AutodiffNumDependentObjects
+ 
+ 	   Usage:
+-	      macro=AutodiffNumDependentsEnum()
++	      macro=AutodiffNumDependentObjectsEnum()
+ 	"""
+ 
+-	return StringToEnum('AutodiffNumDependents')[0]
++	return StringToEnum('AutodiffNumDependentObjects')[0]
+ 
+-def AutodiffIndependentsEnum():
++def AutodiffDependentObjectNamesEnum():
+ 	"""
+-	AUTODIFFINDEPENDENTSENUM - Enum of AutodiffIndependents
++	AUTODIFFDEPENDENTOBJECTNAMESENUM - Enum of AutodiffDependentObjectNames
+ 
+ 	   Usage:
+-	      macro=AutodiffIndependentsEnum()
++	      macro=AutodiffDependentObjectNamesEnum()
+ 	"""
+ 
+-	return StringToEnum('AutodiffIndependents')[0]
++	return StringToEnum('AutodiffDependentObjectNames')[0]
+ 
++def AutodiffDependentObjectTypesEnum():
++	"""
++	AUTODIFFDEPENDENTOBJECTTYPESENUM - Enum of AutodiffDependentObjectTypes
++
++	   Usage:
++	      macro=AutodiffDependentObjectTypesEnum()
++	"""
++
++	return StringToEnum('AutodiffDependentObjectTypes')[0]
++
++def AutodiffDependentObjectsEnum():
++	"""
++	AUTODIFFDEPENDENTOBJECTSENUM - Enum of AutodiffDependentObjects
++
++	   Usage:
++	      macro=AutodiffDependentObjectsEnum()
++	"""
++
++	return StringToEnum('AutodiffDependentObjects')[0]
++
+ def AutodiffNumIndependentsEnum():
+ 	"""
+ 	AUTODIFFNUMINDEPENDENTSENUM - Enum of AutodiffNumIndependents
+@@ -58,6 +78,46 @@
+ 
+ 	return StringToEnum('AutodiffNumIndependents')[0]
+ 
++def AutodiffNumIndependentObjectsEnum():
++	"""
++	AUTODIFFNUMINDEPENDENTOBJECTSENUM - Enum of AutodiffNumIndependentObjects
++
++	   Usage:
++	      macro=AutodiffNumIndependentObjectsEnum()
++	"""
++
++	return StringToEnum('AutodiffNumIndependentObjects')[0]
++
++def AutodiffIndependentObjectNamesEnum():
++	"""
++	AUTODIFFINDEPENDENTOBJECTNAMESENUM - Enum of AutodiffIndependentObjectNames
++
++	   Usage:
++	      macro=AutodiffIndependentObjectNamesEnum()
++	"""
++
++	return StringToEnum('AutodiffIndependentObjectNames')[0]
++
++def AutodiffIndependentObjectTypesEnum():
++	"""
++	AUTODIFFINDEPENDENTOBJECTTYPESENUM - Enum of AutodiffIndependentObjectTypes
++
++	   Usage:
++	      macro=AutodiffIndependentObjectTypesEnum()
++	"""
++
++	return StringToEnum('AutodiffIndependentObjectTypes')[0]
++
++def AutodiffIndependentObjectsEnum():
++	"""
++	AUTODIFFINDEPENDENTOBJECTSENUM - Enum of AutodiffIndependentObjects
++
++	   Usage:
++	      macro=AutodiffIndependentObjectsEnum()
++	"""
++
++	return StringToEnum('AutodiffIndependentObjects')[0]
++
+ def AutodiffJacobianEnum():
+ 	"""
+ 	AUTODIFFJACOBIANENUM - Enum of AutodiffJacobian
+@@ -78,16 +138,26 @@
+ 
+ 	return StringToEnum('AutodiffXp')[0]
+ 
+-def AutodiffFosForwardOutputEnum():
++def AutodiffDriverEnum():
+ 	"""
+-	AUTODIFFFOSFORWARDOUTPUTENUM - Enum of AutodiffFosForwardOutput
++	AUTODIFFDRIVERENUM - Enum of AutodiffDriver
+ 
+ 	   Usage:
+-	      macro=AutodiffFosForwardOutputEnum()
++	      macro=AutodiffDriverEnum()
+ 	"""
+ 
+-	return StringToEnum('AutodiffFosForwardOutput')[0]
++	return StringToEnum('AutodiffDriver')[0]
+ 
++def AutodiffFosForwardIndexEnum():
++	"""
++	AUTODIFFFOSFORWARDINDEXENUM - Enum of AutodiffFosForwardIndex
++
++	   Usage:
++	      macro=AutodiffFosForwardIndexEnum()
++	"""
++
++	return StringToEnum('AutodiffFosForwardIndex')[0]
++
+ def BalancethicknessSpcthicknessEnum():
+ 	"""
+ 	BALANCETHICKNESSSPCTHICKNESSENUM - Enum of BalancethicknessSpcthickness
+@@ -198,6 +268,16 @@
+ 
+ 	return StringToEnum('ConstantsYts')[0]
+ 
++def DependentObjectEnum():
++	"""
++	DEPENDENTOBJECTENUM - Enum of DependentObject
++
++	   Usage:
++	      macro=DependentObjectEnum()
++	"""
++
++	return StringToEnum('DependentObject')[0]
++
+ def DiagnosticAbstolEnum():
+ 	"""
+ 	DIAGNOSTICABSTOLENUM - Enum of DiagnosticAbstol
+@@ -588,6 +668,16 @@
+ 
+ 	return StringToEnum('HydrologyStabilization')[0]
+ 
++def IndependentObjectEnum():
++	"""
++	INDEPENDENTOBJECTENUM - Enum of IndependentObject
++
++	   Usage:
++	      macro=IndependentObjectEnum()
++	"""
++
++	return StringToEnum('IndependentObject')[0]
++
+ def InversionControlParametersEnum():
+ 	"""
+ 	INVERSIONCONTROLPARAMETERSENUM - Enum of InversionControlParameters
+@@ -2538,6 +2628,16 @@
+ 
+ 	return StringToEnum('DoubleInput')[0]
+ 
++def DataSetParamEnum():
++	"""
++	DATASETPARAMENUM - Enum of DataSetParam
++
++	   Usage:
++	      macro=DataSetParamEnum()
++	"""
++
++	return StringToEnum('DataSetParam')[0]
++
+ def DoubleMatArrayParamEnum():
+ 	"""
+ 	DOUBLEMATARRAYPARAMENUM - Enum of DoubleMatArrayParam
+@@ -4756,5 +4856,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 474
++	return 484
+ 
+Index: ../trunk-jpl/src/m/enum/AutodiffIndependentObjectsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffIndependentObjectsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffIndependentObjectsEnum.m	(revision 13427)
+@@ -0,0 +1,11 @@
++function macro=AutodiffIndependentObjectsEnum()
++%AUTODIFFINDEPENDENTOBJECTSENUM - Enum of AutodiffIndependentObjects
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffIndependentObjectsEnum()
++
++macro=StringToEnum('AutodiffIndependentObjects');
+Index: ../trunk-jpl/src/m/enum/DependentObjectEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/DependentObjectEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/DependentObjectEnum.m	(revision 13427)
+@@ -0,0 +1,11 @@
++function macro=DependentObjectEnum()
++%DEPENDENTOBJECTENUM - Enum of DependentObject
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=DependentObjectEnum()
++
++macro=StringToEnum('DependentObject');
+Index: ../trunk-jpl/src/m/enum/AutodiffNumIndependentObjectsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffNumIndependentObjectsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffNumIndependentObjectsEnum.m	(revision 13427)
+@@ -0,0 +1,11 @@
++function macro=AutodiffNumIndependentObjectsEnum()
++%AUTODIFFNUMINDEPENDENTOBJECTSENUM - Enum of AutodiffNumIndependentObjects
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffNumIndependentObjectsEnum()
++
++macro=StringToEnum('AutodiffNumIndependentObjects');
+Index: ../trunk-jpl/src/m/enum/AutodiffDependentObjectsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffDependentObjectsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffDependentObjectsEnum.m	(revision 13427)
+@@ -0,0 +1,11 @@
++function macro=AutodiffDependentObjectsEnum()
++%AUTODIFFDEPENDENTOBJECTSENUM - Enum of AutodiffDependentObjects
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffDependentObjectsEnum()
++
++macro=StringToEnum('AutodiffDependentObjects');
+Index: ../trunk-jpl/src/m/enum/AutodiffNumDependentObjectsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffNumDependentObjectsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffNumDependentObjectsEnum.m	(revision 13427)
+@@ -0,0 +1,11 @@
++function macro=AutodiffNumDependentObjectsEnum()
++%AUTODIFFNUMDEPENDENTOBJECTSENUM - Enum of AutodiffNumDependentObjects
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffNumDependentObjectsEnum()
++
++macro=StringToEnum('AutodiffNumDependentObjects');
+Index: ../trunk-jpl/src/m/enum/IndependentObjectEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/IndependentObjectEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/IndependentObjectEnum.m	(revision 13427)
+@@ -0,0 +1,11 @@
++function macro=IndependentObjectEnum()
++%INDEPENDENTOBJECTENUM - Enum of IndependentObject
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=IndependentObjectEnum()
++
++macro=StringToEnum('IndependentObject');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13427-13428.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13427-13428.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13427-13428.diff	(revision 13980)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/c/solutions/prognostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/prognostic_core.cpp	(revision 13427)
++++ ../trunk-jpl/src/c/solutions/prognostic_core.cpp	(revision 13428)
+@@ -16,6 +16,7 @@
+ 	/*parameters: */
+ 	bool save_results;
+ 	bool issmbgradients,ispdd,isdelta18o;
++	int  solution_type;
+ 
+ 	/*activate formulation: */
+ 	femmodel->SetCurrentConfiguration(PrognosticAnalysisEnum);
+@@ -25,6 +26,7 @@
+ 	femmodel->parameters->FindParam(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
+ 	femmodel->parameters->FindParam(&ispdd,SurfaceforcingsIspddEnum);
+ 	femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 
+ 	if(issmbgradients){
+ 	  _printf_(VerboseSolution(),"	call smb gradients module\n");
+@@ -45,4 +47,7 @@
+ 		if(VerboseSolution()) _pprintLine_("   saving results");
+ 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum);
+ 	}
++	
++	
++	if(solution_type=PrognosticSolutionEnum)RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ }
Index: /issm/oecreview/Archive/13393-13976/ISSM-13428-13429.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13428-13429.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13428-13429.diff	(revision 13980)
@@ -0,0 +1,228 @@
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 13428)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 13429)
+@@ -8,6 +8,7 @@
+ 		isautodiff   = false;
+ 		dependents   = {};
+ 		independents = {};
++		driver       = 'fos_forward';
+ 	end
+ 	methods
+ 		function obj = autodiff(varargin) % {{{
+@@ -23,47 +24,84 @@
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+-		%Early return 
+-		if ~obj.isautodiff, return; end
++			%Early return 
++			if ~obj.isautodiff, return; end
+ 
++			%Driver value:
++			md = checkfield(md,'autodiff.driver','values',{'fos_forward'});
++
+ 		end % }}}
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   automatic differentiation parameters:'));
+ 			fielddisplay(obj,'isautodiff','indicates if the automatic differentiation is activated');
+-			fielddisplay(obj,'dependents','list of dependent variables ; ex: {''Thickness'',''FrictionCoefficient''}');
+-			fielddisplay(obj,'independents','list of independent variables ; ex: {''IceVolume'',''MassFlux''}');
++			fielddisplay(obj,'dependents','list of dependent variables');
++			fielddisplay(obj,'independents','list of independent variables');
++			fielddisplay(obj,'driver','ADOLC driver');
+ 		end % }}}
+ 		function marshall(obj,fid) % {{{
+ 
+ 			WriteData(fid,'object',obj,'fieldname','isautodiff','format','Boolean');
++			WriteData(fid,'object',obj,'fieldname','driver','format','String');
+ 			
+ 			%early return
+ 			if ~obj.isautodiff, return; end
+ 
+ 			%process dependent variables
+-			num_dependents=numel(obj.dependents);
+-			WriteData(fid,'data',num_dependents,'enum',AutodiffNumDependentsEnum(),'format','Integer');
+-			
+-			if(num_dependents),
+-				data=zeros(1,num_dependents);
+-				for i=1:num_dependents,
+-					data(i)=StringToEnum(obj.dependents{i});
++			num_dependent_objects=numel(obj.dependents);
++			WriteData(fid,'data',num_dependent_objects,'enum',AutodiffNumDependentObjectsEnum(),'format','Integer');
++
++			if(num_dependent_objects),
++				names=zeros(num_dependent_objects,1);
++				types=zeros(num_dependent_objects,1);
++
++				for i=1:num_dependent_objects,
++					dep=obj.dependents{i};
++
++					names(i)=StringToEnum(dep.name);
++					types(i)=dep.typetoscalar();
+ 				end
+-				WriteData(fid,'data',data,'enum',AutodiffDependentsEnum(),'format','DoubleMat','mattype',3);
++				WriteData(fid,'data',names,'enum',AutodiffDependentObjectNamesEnum(),'format','IntMat','mattype',3);
++				WriteData(fid,'data',types,'enum',AutodiffDependentObjectTypesEnum(),'format','IntMat','mattype',3);
+ 			end
+ 			
++			
+ 			%process independent variables
+-			num_independents=numel(obj.independents);
+-			WriteData(fid,'data',num_independents,'enum',AutodiffNumIndependentsEnum(),'format','Integer');
+-			
+-			if(num_independents)
+-				data=zeros(1,num_independents);
+-				for i=1:num_independents,
+-					data(i)=StringToEnum(obj.independents{i});
++			num_independent_objects=numel(obj.independents);
++			WriteData(fid,'data',num_independent_objects,'enum',AutodiffNumIndependentObjectsEnum(),'format','Integer');
++
++			if(num_independent_objects),
++				names=zeros(num_independent_objects,1);
++				types=zeros(num_independent_objects,1);
++
++				for i=1:num_independent_objects,
++					indep=obj.independents{i};
++
++					names(i)=StringToEnum(indep.name);
++					types(i)=indep.typetoscalar();
+ 				end
+-				WriteData(fid,'data',data,'enum',AutodiffIndependentsEnum(),'format','DoubleMat','mattype',3);
++				WriteData(fid,'data',names,'enum',AutodiffIndependentObjectNamesEnum(),'format','IntMat','mattype',3);
++				WriteData(fid,'data',types,'enum',AutodiffIndependentObjectTypesEnum(),'format','IntMat','mattype',3);
+ 			end
+ 
++			%if driver is fos_forward, build index: 
++			if strcmpi(obj.driver,'fos_forward'),
++				index=0;
++				
++				for i=1:num_independent_objects,
++					indep=obj.independents{i};
++					if ~isnan(indep.fos_forward_index),
++						index=index+indep.fos_forward_index;
++						break;
++					else
++						if strcmpi(indep.type,'scalar'),
++							index=index+1;
++						else
++							index=index+indep.nods;
++						end
++					end
++				end
++				WriteData(fid,'data',index-1,'enum',AutodiffFosForwardIndexEnum(),'format','Integer'); %c-index numbering.
++			end
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/dependent.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/dependent.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/dependent.m	(revision 13429)
+@@ -0,0 +1,46 @@
++%DEPENDENT class definition
++%
++%   Usage:
++%      dependent=dependent();
++
++classdef dependent
++	properties (SetAccess=public) 
++		name                 = '';
++		type                 = '';
++	end
++	methods
++		 function obj= dependent(varargin) % {{{
++			 
++			 %use provided options to change fields
++			 options=pairoptions(varargin{:});
++
++			 %OK get other fields
++			 obj=AssignObjectFields(pairoptions(varargin{:}),obj);
++
++		 end
++		 %}}}
++		function obj = setdefaultparameters(obj) % {{{
++			%do nothing
++
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++			%do nothing for now
++
++		end % }}}
++		function disp(obj) % {{{
++			disp(sprintf('   dependent variable :'));
++
++			fielddisplay(obj,'name','variable name (must match corresponding Enum)');
++			fielddisplay(obj,'type','type of variable (''vertex'' or ''scalar'')');
++
++		end % }}}
++		function scalar=typetoscalar(obj) % {{{
++		if strcmpi(obj.type,'scalar'),
++			scalar=0;
++		elseif strcmpi(obj.type,'vertex'),
++			scalar=1;
++		end
++
++		end % }}}
++	end
++end
+Index: ../trunk-jpl/src/m/classes/independent.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/independent.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/independent.m	(revision 13429)
+@@ -0,0 +1,55 @@
++%INDEPENDENT class definition
++%
++%   Usage:
++%      independent=independent();
++
++classdef independent
++	properties (SetAccess=public) 
++		name                 = '';
++		type                 = '';
++		fos_forward_index    = NaN;
++		nods                 = 0;
++	end
++	methods
++		 function obj= independent(varargin) % {{{
++			 
++			 %use provided options to change fields
++			 options=pairoptions(varargin{:});
++
++			 %OK get other fields
++			 obj=AssignObjectFields(pairoptions(varargin{:}),obj);
++
++		 end
++		 %}}}
++		function obj = setdefaultparameters(obj) % {{{
++			%do nothing
++
++		end % }}}
++		function md = checkconsistency(obj,md,solution,analyses) % {{{
++			%do nothing for now
++			if ~isnan(obj.fos_forward_index),
++				if obj.nods==0,
++					error('independent checkconsistency error: nods should be set to the size of the independent variable');
++				end
++			end
++
++		end % }}}
++		function disp(obj) % {{{
++			disp(sprintf('   independent variable :'));
++
++			fielddisplay(obj,'name','variable name (must match corresponding Enum)');
++			fielddisplay(obj,'type','type of variable (''vertex'' or ''scalar'')');
++			if ~isnan(obj.fos_forward_index),
++				fielddisplay(obj,'fos_forward_index','index for fos_foward driver of ADOLC');
++			end
++
++		end % }}}
++		function scalar=typetoscalar(obj) % {{{
++			if strcmpi(obj.type,'scalar'),
++				scalar=0;
++			elseif strcmpi(obj.type,'vertex'),
++				scalar=1;
++			end
++		end % }}}
++	end
++end
Index: /issm/oecreview/Archive/13393-13976/ISSM-13429-13430.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13429-13430.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13429-13430.diff	(revision 13980)
@@ -0,0 +1,193 @@
+Index: ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13429)
++++ ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13430)
+@@ -18,13 +18,20 @@
+ 
+    if(stage==1){
+ 	      if (strcmp(name,"AutodiffIsautodiff")==0) return AutodiffIsautodiffEnum;
+-	      else if (strcmp(name,"AutodiffDependents")==0) return AutodiffDependentsEnum;
+ 	      else if (strcmp(name,"AutodiffNumDependents")==0) return AutodiffNumDependentsEnum;
+-	      else if (strcmp(name,"AutodiffIndependents")==0) return AutodiffIndependentsEnum;
++	      else if (strcmp(name,"AutodiffNumDependentObjects")==0) return AutodiffNumDependentObjectsEnum;
++	      else if (strcmp(name,"AutodiffDependentObjectNames")==0) return AutodiffDependentObjectNamesEnum;
++	      else if (strcmp(name,"AutodiffDependentObjectTypes")==0) return AutodiffDependentObjectTypesEnum;
++	      else if (strcmp(name,"AutodiffDependentObjects")==0) return AutodiffDependentObjectsEnum;
+ 	      else if (strcmp(name,"AutodiffNumIndependents")==0) return AutodiffNumIndependentsEnum;
++	      else if (strcmp(name,"AutodiffNumIndependentObjects")==0) return AutodiffNumIndependentObjectsEnum;
++	      else if (strcmp(name,"AutodiffIndependentObjectNames")==0) return AutodiffIndependentObjectNamesEnum;
++	      else if (strcmp(name,"AutodiffIndependentObjectTypes")==0) return AutodiffIndependentObjectTypesEnum;
++	      else if (strcmp(name,"AutodiffIndependentObjects")==0) return AutodiffIndependentObjectsEnum;
+ 	      else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
+ 	      else if (strcmp(name,"AutodiffXp")==0) return AutodiffXpEnum;
+-	      else if (strcmp(name,"AutodiffFosForwardOutput")==0) return AutodiffFosForwardOutputEnum;
++	      else if (strcmp(name,"AutodiffDriver")==0) return AutodiffDriverEnum;
++	      else if (strcmp(name,"AutodiffFosForwardIndex")==0) return AutodiffFosForwardIndexEnum;
+ 	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
+ 	      else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
+ 	      else if (strcmp(name,"BalancethicknessThickeningRate")==0) return BalancethicknessThickeningRateEnum;
+@@ -36,6 +43,7 @@
+ 	      else if (strcmp(name,"ConstantsG")==0) return ConstantsGEnum;
+ 	      else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum;
+ 	      else if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum;
++	      else if (strcmp(name,"DependentObject")==0) return DependentObjectEnum;
+ 	      else if (strcmp(name,"DiagnosticAbstol")==0) return DiagnosticAbstolEnum;
+ 	      else if (strcmp(name,"DiagnosticIcefront")==0) return DiagnosticIcefrontEnum;
+ 	      else if (strcmp(name,"DiagnosticIsnewton")==0) return DiagnosticIsnewtonEnum;
+@@ -75,6 +83,7 @@
+ 	      else if (strcmp(name,"HydrologyQ")==0) return HydrologyQEnum;
+ 	      else if (strcmp(name,"HydrologySpcwatercolumn")==0) return HydrologySpcwatercolumnEnum;
+ 	      else if (strcmp(name,"HydrologyStabilization")==0) return HydrologyStabilizationEnum;
++	      else if (strcmp(name,"IndependentObject")==0) return IndependentObjectEnum;
+ 	      else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
+ 	      else if (strcmp(name,"InversionCostFunction")==0) return InversionCostFunctionEnum;
+ 	      else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
+@@ -128,7 +137,10 @@
+ 	      else if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
+ 	      else if (strcmp(name,"MeshElements2d")==0) return MeshElements2dEnum;
+ 	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
+-	      else if (strcmp(name,"MeshLowerelements")==0) return MeshLowerelementsEnum;
++         else stage=2;
++   }
++   if(stage==2){
++	      if (strcmp(name,"MeshLowerelements")==0) return MeshLowerelementsEnum;
+ 	      else if (strcmp(name,"MeshNumberofedges")==0) return MeshNumberofedgesEnum;
+ 	      else if (strcmp(name,"MeshNumberofelements2d")==0) return MeshNumberofelements2dEnum;
+ 	      else if (strcmp(name,"MeshNumberofelements")==0) return MeshNumberofelementsEnum;
+@@ -137,10 +149,7 @@
+ 	      else if (strcmp(name,"MeshNumberofvertices")==0) return MeshNumberofverticesEnum;
+ 	      else if (strcmp(name,"MeshUpperelements")==0) return MeshUpperelementsEnum;
+ 	      else if (strcmp(name,"MeshVertexonbed")==0) return MeshVertexonbedEnum;
+-         else stage=2;
+-   }
+-   if(stage==2){
+-	      if (strcmp(name,"MeshVertexonsurface")==0) return MeshVertexonsurfaceEnum;
++	      else if (strcmp(name,"MeshVertexonsurface")==0) return MeshVertexonsurfaceEnum;
+ 	      else if (strcmp(name,"MeshX")==0) return MeshXEnum;
+ 	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
+ 	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
+@@ -251,7 +260,10 @@
+ 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+ 	      else if (strcmp(name,"HutterApproximation")==0) return HutterApproximationEnum;
+ 	      else if (strcmp(name,"MacAyealApproximation")==0) return MacAyealApproximationEnum;
+-	      else if (strcmp(name,"MacAyealPattynApproximation")==0) return MacAyealPattynApproximationEnum;
++         else stage=3;
++   }
++   if(stage==3){
++	      if (strcmp(name,"MacAyealPattynApproximation")==0) return MacAyealPattynApproximationEnum;
+ 	      else if (strcmp(name,"MacAyealStokesApproximation")==0) return MacAyealStokesApproximationEnum;
+ 	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
+ 	      else if (strcmp(name,"PattynApproximation")==0) return PattynApproximationEnum;
+@@ -260,10 +272,7 @@
+ 	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
+ 	      else if (strcmp(name,"Loads")==0) return LoadsEnum;
+ 	      else if (strcmp(name,"Materials")==0) return MaterialsEnum;
+-         else stage=3;
+-   }
+-   if(stage==3){
+-	      if (strcmp(name,"Nodes")==0) return NodesEnum;
++	      else if (strcmp(name,"Nodes")==0) return NodesEnum;
+ 	      else if (strcmp(name,"Parameters")==0) return ParametersEnum;
+ 	      else if (strcmp(name,"Vertices")==0) return VerticesEnum;
+ 	      else if (strcmp(name,"Results")==0) return ResultsEnum;
+@@ -276,6 +285,7 @@
+ 	      else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
+ 	      else if (strcmp(name,"DofIndexing")==0) return DofIndexingEnum;
+ 	      else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum;
++	      else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum;
+ 	      else if (strcmp(name,"DoubleMatArrayParam")==0) return DoubleMatArrayParamEnum;
+ 	      else if (strcmp(name,"DoubleMatParam")==0) return DoubleMatParamEnum;
+ 	      else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum;
+@@ -373,7 +383,10 @@
+ 	      else if (strcmp(name,"TemperatureSurface")==0) return TemperatureSurfaceEnum;
+ 	      else if (strcmp(name,"TemperatureBasal")==0) return TemperatureBasalEnum;
+ 	      else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum;
+-	      else if (strcmp(name,"Type")==0) return TypeEnum;
++         else stage=4;
++   }
++   if(stage==4){
++	      if (strcmp(name,"Type")==0) return TypeEnum;
+ 	      else if (strcmp(name,"Vel")==0) return VelEnum;
+ 	      else if (strcmp(name,"Velocity")==0) return VelocityEnum;
+ 	      else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
+@@ -383,10 +396,7 @@
+ 	      else if (strcmp(name,"Vy")==0) return VyEnum;
+ 	      else if (strcmp(name,"VyPicard")==0) return VyPicardEnum;
+ 	      else if (strcmp(name,"Vz")==0) return VzEnum;
+-         else stage=4;
+-   }
+-   if(stage==4){
+-	      if (strcmp(name,"VzMacAyeal")==0) return VzMacAyealEnum;
++	      else if (strcmp(name,"VzMacAyeal")==0) return VzMacAyealEnum;
+ 	      else if (strcmp(name,"VzPattyn")==0) return VzPattynEnum;
+ 	      else if (strcmp(name,"VzPicard")==0) return VzPicardEnum;
+ 	      else if (strcmp(name,"VzStokes")==0) return VzStokesEnum;
+@@ -496,11 +506,14 @@
+ 	      else if (strcmp(name,"OptionCell")==0) return OptionCellEnum;
+ 	      else if (strcmp(name,"OptionChar")==0) return OptionCharEnum;
+ 	      else if (strcmp(name,"OptionStruct")==0) return OptionStructEnum;
+-	      else if (strcmp(name,"OptionDouble")==0) return OptionDoubleEnum;
++         else stage=5;
++   }
++   if(stage==5){
++	      if (strcmp(name,"OptionDouble")==0) return OptionDoubleEnum;
+ 	      else if (strcmp(name,"OptionLogical")==0) return OptionLogicalEnum;
+ 	      else if (strcmp(name,"Paterson")==0) return PatersonEnum;
+ 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
+-         else stage=5;
++         else stage=6;
+    }
+ 	/*If we reach this point, the string provided has not been found*/
+ 	_error_("Enum " << name << " not found");
+Index: ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13429)
++++ ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13430)
+@@ -17,13 +17,20 @@
+ 	switch(en){
+ 
+ 		case AutodiffIsautodiffEnum : return "AutodiffIsautodiff";
+-		case AutodiffDependentsEnum : return "AutodiffDependents";
+ 		case AutodiffNumDependentsEnum : return "AutodiffNumDependents";
+-		case AutodiffIndependentsEnum : return "AutodiffIndependents";
++		case AutodiffNumDependentObjectsEnum : return "AutodiffNumDependentObjects";
++		case AutodiffDependentObjectNamesEnum : return "AutodiffDependentObjectNames";
++		case AutodiffDependentObjectTypesEnum : return "AutodiffDependentObjectTypes";
++		case AutodiffDependentObjectsEnum : return "AutodiffDependentObjects";
+ 		case AutodiffNumIndependentsEnum : return "AutodiffNumIndependents";
++		case AutodiffNumIndependentObjectsEnum : return "AutodiffNumIndependentObjects";
++		case AutodiffIndependentObjectNamesEnum : return "AutodiffIndependentObjectNames";
++		case AutodiffIndependentObjectTypesEnum : return "AutodiffIndependentObjectTypes";
++		case AutodiffIndependentObjectsEnum : return "AutodiffIndependentObjects";
+ 		case AutodiffJacobianEnum : return "AutodiffJacobian";
+ 		case AutodiffXpEnum : return "AutodiffXp";
+-		case AutodiffFosForwardOutputEnum : return "AutodiffFosForwardOutput";
++		case AutodiffDriverEnum : return "AutodiffDriver";
++		case AutodiffFosForwardIndexEnum : return "AutodiffFosForwardIndex";
+ 		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
+ 		case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
+ 		case BalancethicknessThickeningRateEnum : return "BalancethicknessThickeningRate";
+@@ -35,6 +42,7 @@
+ 		case ConstantsGEnum : return "ConstantsG";
+ 		case ConstantsReferencetemperatureEnum : return "ConstantsReferencetemperature";
+ 		case ConstantsYtsEnum : return "ConstantsYts";
++		case DependentObjectEnum : return "DependentObject";
+ 		case DiagnosticAbstolEnum : return "DiagnosticAbstol";
+ 		case DiagnosticIcefrontEnum : return "DiagnosticIcefront";
+ 		case DiagnosticIsnewtonEnum : return "DiagnosticIsnewton";
+@@ -74,6 +82,7 @@
+ 		case HydrologyQEnum : return "HydrologyQ";
+ 		case HydrologySpcwatercolumnEnum : return "HydrologySpcwatercolumn";
+ 		case HydrologyStabilizationEnum : return "HydrologyStabilization";
++		case IndependentObjectEnum : return "IndependentObject";
+ 		case InversionControlParametersEnum : return "InversionControlParameters";
+ 		case InversionCostFunctionEnum : return "InversionCostFunction";
+ 		case InversionCostFunctionThresholdEnum : return "InversionCostFunctionThreshold";
+@@ -269,6 +278,7 @@
+ 		case DatasetInputEnum : return "DatasetInput";
+ 		case DofIndexingEnum : return "DofIndexing";
+ 		case DoubleInputEnum : return "DoubleInput";
++		case DataSetParamEnum : return "DataSetParam";
+ 		case DoubleMatArrayParamEnum : return "DoubleMatArrayParam";
+ 		case DoubleMatParamEnum : return "DoubleMatParam";
+ 		case DoubleParamEnum : return "DoubleParam";
Index: /issm/oecreview/Archive/13393-13976/ISSM-13430-13431.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13430-13431.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13430-13431.diff	(revision 13980)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/test/NightlyRun/ad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad.m	(revision 13430)
++++ ../trunk-jpl/test/NightlyRun/ad.m	(revision 13431)
+@@ -5,22 +5,15 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.requested_outputs=StressTensorEnum;
+ md.autodiff.isautodiff=true;
+-md.autodiff.independents={'Thickness','Surface'};
+-md.autodiff.dependents={'IceVolume'};
+-%md=solve(md,TransientSolutionEnum);
+-md=solve(md,PrognosticSolutionEnum);
+ 
+-%Fields and tolerances to track changes
+-field_names     ={'Vx','Vy','Vel','Pressure',...
+-	'StressTensorxx','StressTensoryy','StressTensorxy'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,...
+-	1e-13,1e-13,1e-13};
+-field_values={...
+-	(md.results.TransientSolution.Vx),...
+-	(md.results.TransientSolution.Vy),...
+-	(md.results.TransientSolution.Vel),...
+-	(md.results.TransientSolution.Pressure),...
+-	(md.results.TransientSolution.StressTensorxx),...
+-	(md.results.TransientSolution.StressTensoryy),...
+-	(md.results.TransientSolution.StressTensorxy),...
++md.autodiff.independents={...
++	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',1), ...
++	independent('name','Surface','type','vertex','nods',md.mesh.numberofvertices)...
+ 	};
++
++md.autodiff.dependents={...
++	dependent('name','IceVolume','type','scalar')...
++	};
++md.autodiff.driver='fos_forward';
++
++md=solve(md,PrognosticSolutionEnum);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13431-13432.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13431-13432.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13431-13432.diff	(revision 13980)
@@ -0,0 +1,847 @@
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13431)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13432)
+@@ -11,31 +11,47 @@
+ 
+ 
+ void AutodiffDriversx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,Results* results){
+-	bool isautodiff       = false;
++
++
++	int         i;
++	int         dummy;
++	bool        isautodiff         = false;
++	int         num_dependents;
++	int         num_independents;
++	IssmDouble *axp                = NULL;
++	int         configuration_type;
++	int         solveSize;
++	int         edf_n                ,edf_m;
++	double     *xp                 = NULL;
++	int         anIndepNum;
++
++	
+ 	/*AD mode on?: */
+ 	parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
++
+ 	if(isautodiff){
++
+ 		#ifdef _HAVE_ADOLC_
+-			int  num_dependents;
++
+ 			parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+-			int  num_independents;
+ 			parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
++
+ 			if(!(num_dependents*num_independents)) return;
+-			int  numberofvertices;
+-			parameters->FindParam(&numberofvertices,MeshNumberofverticesEnum);
++
+ 			/*retrieve state variable: */
+-			IssmDouble  *axp  = NULL;
+-			parameters->FindParam(&axp,&num_independents,AutodiffXpEnum);
++			parameters->FindParam(&axp,&dummy,AutodiffXpEnum);
++
+ 			/* driver argument */
+-			double *xp=xNew<double>(num_independents);
+-			for(int i=0;i<num_independents;i++){
++			xp=xNew<double>(num_independents);
++			for(i=0;i<num_independents;i++){
+ 				xp[i]=reCast<double,IssmDouble>(axp[i]);
+ 			}
++
+ 			/* get the dimension for the solverx arguments*/
+-			int configuration_type;
+ 			parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-			int solveSize=nodes->NumberOfDofs(configuration_type,FsetEnum);
+-			int edf_n=solveSize*(solveSize+1), edf_m=solveSize;
++			solveSize=nodes->NumberOfDofs(configuration_type,FsetEnum);
++			edf_n=solveSize*(solveSize+1);
++			edf_m=solveSize;
+ 
+ 			/*get the EDF pointer:*/
+ 			ext_diff_fct *anEDF_for_solverx_p=dynamic_cast<GenericParam<Adolc_edf> * >(parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
+@@ -46,6 +62,7 @@
+ 			anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
+ 			anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
+ 			// anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
++			
+ 			/*allocate the space for the parameters to invoke the forward methods:*/
+ 			anEDF_for_solverx_p->dp_x=xNew<double>(edf_n);
+ 			anEDF_for_solverx_p->dp_X=xNew<double>(edf_n);
+@@ -57,15 +74,17 @@
+ 			anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,edf_m);
+ 			anEDF_for_solverx_p->dp_Z=xNew<double>(edf_n);
+ 			anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,edf_n);
++
+ 			/* Call AD driver:*/
+ 			// single direction:
+ 			double *tangentDir=xNewZeroInit<double>(num_independents);
+-			unsigned int anIndepNum=55; // <---------- make this selectable via config
++			parameters->FindParam(&anIndepNum,AutodiffFosForwardIndexEnum);
+ 			tangentDir[anIndepNum]=1.0;
+ 			double *theJacVecProduct=xNew<double>(num_dependents);
+ 			double *theOutput=xNew<double>(num_dependents);
+ 			if (fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, theJacVecProduct ))
+ 				_error_("fos_forward returned non-zero error code");
++
+ 			results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,theJacVecProduct,num_dependents,1,1,0.0));
+ 
+ #if 0
+@@ -86,9 +105,11 @@
+ 			xDelete(anEDF_for_solverx_p->dpp_U);
+ 			xDelete(anEDF_for_solverx_p->dp_Z);
+ 			xDelete(anEDF_for_solverx_p->dpp_Z);
++
+ 			/*Free ressources: */
+ 			xDelete(xp);
+-			xDelete(axp); // did we allocate this?
++			xDelete(axp); 
++
+ 		#else
+ 			_error_("Should not be requesting AD drivers when an AD library is not available!");
+ 		#endif
+Index: ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp	(revision 13431)
++++ ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp	(revision 13432)
+@@ -13,14 +13,12 @@
+ 
+ 
+ 	int         i;
+-	int         output_enum;
+ 	bool        isautodiff      = false;
+ 	IssmDouble  output_value;
+-	Element    *element         = NULL;
+-	int        *dependent_enums = NULL;
+ 
+ 	int         num_dependents;
+ 	IssmPDouble *dependents;
++	DataSet*    dependent_objects=NULL;
+ 
+ 	/*AD mode on?: */
+ 	parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
+@@ -28,16 +26,18 @@
+ 	if(isautodiff){
+ 		#ifdef _HAVE_ADOLC_
+ 		parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
++		parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
+ 		if(num_dependents){
+ 			dependents=xNew<IssmPDouble>(num_dependents);
+-			parameters->FindParam(&dependent_enums,&num_dependents,AutodiffDependentsEnum);
+ 
+ 			/*Go through our dependent variables, and compute the response:*/
+-			for(i=0;i<num_dependents;i++){
+-				Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters,dependent_enums[i],false,0);
++			for(i=0;i<dependent_objects->Size();i++){
++				DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
++				Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters,dep->name,false,0);
+ 				output_value>>=dependents[i];
+ 			}
+ 		}
++		delete dependent_objects;
+ 		#else
+ 		_error_("Should not be requesting dependents when an AD library is not available!");
+ 		#endif
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13431)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13432)
+@@ -13,15 +13,19 @@
+ 
+ void CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+ 	
+-	int         i,j;
++	int         i;
+ 	Parameters *parameters       = NULL;
+ 	bool        autodiff_analysis;
+-	int*        dependents       = NULL;
+-	int         num_dependents;
+-	int*        independents       = NULL;
+-	int         num_independents;
+-	int         numberofvertices;
++	int         num_dependent_objects;
++	int         num_dep=0;
++	int*        names=NULL;
++	int*        types=NULL;
++	int         dummy;
++	
+ 	IssmDouble* xp=NULL;
++	IssmDouble* xp_backup=NULL;
++	int         num_ind,local_num_ind;
++	DataSet*    dependent_objects=NULL;
+ 	
+ 	/*Get parameters: */
+ 	parameters=*pparameters;
+@@ -31,34 +35,60 @@
+ 	
+ 	if(autodiff_analysis){
+ 
+-		iomodel->Constant(&num_independents,AutodiffNumIndependentsEnum);
+-		iomodel->Constant(&num_dependents,AutodiffNumDependentsEnum);
+-		iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
++		/*retrieve driver: */
++		parameters->AddObject(iomodel->CopyConstantObject(AutodiffDriverEnum));
++		parameters->AddObject(iomodel->CopyConstantObject(AutodiffFosForwardIndexEnum));
+ 
+-		/*recover dependents: */
+-		parameters->AddObject(iomodel->CopyConstantObject(AutodiffNumDependentsEnum));
+-		if(num_dependents){
+-			iomodel->FetchData(&dependents,NULL,&num_dependents,AutodiffDependentsEnum);
+-			parameters->AddObject(new IntVecParam(AutodiffDependentsEnum,dependents,num_dependents));
++		/*Deal with dependents first: {{{*/
++		iomodel->Constant(&num_dependent_objects,AutodiffNumDependentObjectsEnum);
++		dependent_objects=new DataSet();
++		num_dep=0;
++		
++		if(num_dependent_objects){
++			iomodel->FetchData(&names,&dummy,&dummy,AutodiffDependentObjectNamesEnum);
++			iomodel->FetchData(&types,&dummy,&dummy,AutodiffDependentObjectTypesEnum);
++
++			for(i=0;i<num_dependent_objects;i++){
++				DependentObject* dep=new DependentObject(names[i],types[i]);
++				dependent_objects->AddObject(dep);
++				num_dep+=dep->NumDependents();
++			}
++
++			/*Free ressources:*/
++			xDelete<int>(names);
++			xDelete<int>(types);
+ 		}
++		parameters->AddObject(new DataSetParam(AutodiffDependentObjectsEnum,dependent_objects));
++		parameters->AddObject(new IntParam(AutodiffNumDependentsEnum,num_dep));
+ 
+-		/*recover independents: */
+-		parameters->AddObject(iomodel->CopyConstantObject(AutodiffNumIndependentsEnum));
+-		if(num_independents){
+-			iomodel->FetchData(&independents,NULL,&num_independents,AutodiffIndependentsEnum);
+-			parameters->AddObject(new IntVecParam(AutodiffIndependentsEnum,independents,num_independents));
++		delete dependent_objects;
++		/*}}}*/
+ 
+-			/*Build state vector, value at which we compute our gradients of dependent variables in adolc: the xp vector  */
+-			xp=xNew<IssmDouble>(num_independents*numberofvertices);
+-			for(i=0;i<num_independents;i++){
+-				IssmDouble* values=iomodel->data[independents[i]];
+-				for(j=0;j<numberofvertices;j++){
+-					xp[i*numberofvertices+j]=values[j];
+-				}
++		/*Deal with independents: {{{*/
++
++		/*Independents have already been recovered in iomodel->DeclareIndependents. Just do some more processing. 
++		 *In particular, figure out num_independents, and create the state vector xp, or size num_independents x 1 :*/
++		num_ind=0;
++		for(i=0;i<iomodel->independent_objects->Size();i++){
++			IndependentObject* ind=(IndependentObject*)iomodel->independent_objects->GetObjectByOffset(i);
++			num_ind+=ind->NumIndependents();
++		}
++		if(num_ind){
++			xp=xNew<IssmDouble>(num_ind);
++			xp_backup=xp;
++			for(i=0;i<iomodel->independent_objects->Size();i++){
++				IndependentObject* ind=(IndependentObject*)iomodel->independent_objects->GetObjectByOffset(i);
++				ind->FillIndependents(iomodel->data,xp);
++				local_num_ind=ind->NumIndependents(); xp=xp+local_num_ind;
+ 			}
+-			parameters->AddObject(new DoubleVecParam(AutodiffXpEnum,xp,num_independents*numberofvertices));
++			xp=xp_backup; parameters->AddObject(new DoubleVecParam(AutodiffXpEnum,xp,num_ind));
+ 		}
++		parameters->AddObject(new IntParam(AutodiffNumIndependentsEnum,num_ind));
+ 
++		/*Don't forget to copy  iomodel->independent_objects to parameters: */
++		parameters->AddObject(new DataSetParam(AutodiffIndependentObjectsEnum,iomodel->independent_objects));
++		/*}}}*/
++
+ 		/*Assign output pointer: */
+ 		*pparameters=parameters;
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 13431)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 13432)
+@@ -19,7 +19,7 @@
+ void ModelProcessorx(Elements** pelements, Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads, Parameters** pparameters, FILE* IOMODEL,char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_list){
+ 
+ 	int   i,analysis_type,dim,verbose;
+-	bool  isthermal,isprognostic,isdiagnostic,isgroundingline,isenthalpy,autodiff;
++	bool  isthermal,isprognostic,isdiagnostic,isgroundingline,isenthalpy;
+ 	
+ 	/*output: */
+ 	Elements    *elements    = NULL;
+@@ -42,13 +42,7 @@
+ 	iomodel->Constant(&isprognostic,TransientIsprognosticEnum);
+ 	iomodel->Constant(&isdiagnostic,TransientIsdiagnosticEnum);
+ 	iomodel->Constant(&isgroundingline,TransientIsgroundinglineEnum);
+-	iomodel->Constant(&autodiff,AutodiffIsautodiffEnum);
+ 
+-	/*If we are running in AD mode, we need to declare our independent variables now, before 
+-	 *and prevent them from being erased during successive calls to iomodel->FetchData and 
+-	 iomodel->DeleteData:*/
+-	if(autodiff)iomodel->DeclareIndependents();
+-
+ 	SetVerbosityLevel(verbose);
+ 
+ 	for(i=0;i<nummodels;i++){
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13431)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13432)
+@@ -53,6 +53,10 @@
+ 					./classes/objects/Inputs/TransientInput.cpp\
+ 					./classes/objects/Constraints/SpcTransient.cpp\
+ 					./classes/objects/Constraints/SpcTransient.h\
++					./classes/objects/IndependentObject.h\
++					./classes/objects/IndependentObject.cpp\
++					./classes/objects/DependentObject.h\
++					./classes/objects/DependentObject.cpp\
+ 					./classes/DofIndexing.h\
+ 					./classes/DofIndexing.cpp\
+ 					./classes/IoModel.h\
+@@ -151,6 +155,8 @@
+ 					./classes/objects/Params/VectorParam.cpp\
+ 					./classes/objects/Params/TransientParam.h\
+ 					./classes/objects/Params/TransientParam.cpp\
++					./classes/objects/Params/DataSetParam.h\
++					./classes/objects/Params/DataSetParam.cpp\
+ 					./Container/Container.h\
+ 					./Container/Constraints.h\
+ 					./Container/Constraints.cpp\
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13431)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13432)
+@@ -23,53 +23,54 @@
+ 
+ /*FUNCTION IoModel::IoModel(){{{*/
+ IoModel::IoModel(){
+-	this->fid          = NULL;
+-	this->data         = NULL;
+-	this->independents = NULL;
+-	this->constants    = NULL;
++	this->fid=NULL;
++	this->data=NULL;
++	this->independents=NULL;
++	this->constants=NULL;
+ 	
+-	this->my_elements                     = NULL;
+-	this->my_nodes                        = NULL;
+-	this->my_vertices                     = NULL;
+-	this->singlenodetoelementconnectivity = NULL;
+-	this->numbernodetoelementconnectivity = NULL;
++	this->my_elements=NULL;
++	this->my_nodes=NULL;
++	this->my_vertices=NULL;
++	this->singlenodetoelementconnectivity=NULL;
++	this->numbernodetoelementconnectivity=NULL;
+ 	
+-	this->nodecounter       = 0;
+-	this->loadcounter       = 0;
+-	this->constraintcounter = 0;
++	this->nodecounter=0;
++	this->loadcounter=0;
++	this->constraintcounter=0;
+ }
+ /*}}}*/
+ /*FUNCTION IoModel::IoModel(FILE*  iomodel_handle){{{*/
+ IoModel::IoModel(FILE* iomodel_handle){
+-	
++
+ 	/*First, keep track of the file handle: */
+ 	this->fid=iomodel_handle;
+ 
+ 	/*Check that Enums are Synchronized*/
+ 	this->CheckEnumSync();
+ 
++	/*Initialize data: */
++	this->data=xNew<IssmDouble*>(MaximumNumberOfEnums);
++	for(int i=0;i<MaximumNumberOfEnums;i++) this->data[i]=NULL;
++
++	/*If we are running in AD mode, we need to declare our independent variables now, 
++	 *and prevent them from being erased during successive calls to iomodel->FetchConstants, iomodel->FetchData and 
++	 iomodel->DeleteData:*/
++	this->DeclareIndependents();
++
+ 	/*Initialize and read constants:*/
+ 	this->constants=new Parameters();
+ 	this->FetchConstants(); /*this routine goes through the input file, and fetches bools, ints, IssmDoubles and strings only, nothing memory intensive*/
+ 
+-	/*Initialize data: */
+-	this->data=xNew<IssmDouble*>(MaximumNumberOfEnums);
+-	for(int i=0;i<MaximumNumberOfEnums;i++) this->data[i]=NULL;
+-
+-	/*Initialize array detecting whether data[i] is an independent AD mode variable: */
+-	this->independents=xNew<bool>(MaximumNumberOfEnums);
+-	for(int i=0;i<MaximumNumberOfEnums;i++) this->independents[i]=false;
+-	
+ 	/*Initialize permanent data: */
+-	this->my_elements                     = NULL;
+-	this->my_nodes                        = NULL;
+-	this->my_vertices                     = NULL;
+-	this->singlenodetoelementconnectivity = NULL;
+-	this->numbernodetoelementconnectivity = NULL;
++	this->my_elements=NULL;
++	this->my_nodes=NULL;
++	this->my_vertices=NULL;
++	this->singlenodetoelementconnectivity=NULL;
++	this->numbernodetoelementconnectivity=NULL;
+ 	
+-	this->nodecounter       = 0;
+-	this->loadcounter       = 0;
+-	this->constraintcounter = 0;
++	this->nodecounter=0;
++	this->loadcounter=0;
++	this->constraintcounter=0;
+ }
+ /*}}}*/
+ /*FUNCTION IoModel::~IoModel(){{{*/
+@@ -90,6 +91,7 @@
+ 
+ 	xDelete<IssmDouble*>(this->data);
+ 	xDelete<bool>(this->independents);
++	delete this->independent_objects;
+ 	xDelete<bool>(this->my_elements);
+ 	xDelete<bool>(this->my_nodes);
+ 	xDelete<int>(this->my_vertices);
+@@ -196,16 +198,74 @@
+ 	return this->data[data_enum];
+ }
+ /*}}}*/
++/*FUNCTION IoModel::DeclareIndependents{{{*/
++void IoModel::DeclareIndependents(void){
++
++
++	int         i;
++	bool        autodiff                = false;
++	int         num_independent_objects;
++
++	int *names = NULL;
++	int *types = NULL;
++
++	int         numberofvertices;
++	int         dummy;
++
++
++	/*Initialize array detecting whether data[i] is an independent AD mode variable: */
++	this->independents=xNew<bool>(MaximumNumberOfEnums);
++	for(i=0;i<MaximumNumberOfEnums;i++) this->independents[i]=false;
++
++	this->FetchData(&autodiff,AutodiffIsautodiffEnum);
++	if(autodiff){
++	
++		this->FetchData(&numberofvertices,MeshNumberofverticesEnum);
++		
++		#ifdef _HAVE_ADOLC_
++		/*build dataset made of independent objects: */
++		this->independent_objects=new DataSet();
++		this->FetchData(&num_independent_objects,AutodiffNumIndependentObjectsEnum);
++		if(num_independent_objects){
++			this->FetchData(&names,&dummy,&dummy,AutodiffIndependentObjectNamesEnum);
++			this->FetchData(&types,&dummy,&dummy,AutodiffIndependentObjectTypesEnum);
++
++			/*create independent objects, and at the same time, fetch the corresponding independent variables, 
++			 *and declare them as such in ADOLC: */
++			for(i=0;i<num_independent_objects;i++){
++
++				IndependentObject* independent_object=NULL;
++				independent_object=new IndependentObject(names[i],types[i],numberofvertices);
++
++				/*add to independent_objects dataset:*/
++				this->independent_objects->AddObject(independent_object);
++
++				/*now go fetch the independent variable: */
++				independent_object->FetchIndependent(this); //supply the pointer to iomodel.
++			}
++			xDelete<int>(names);
++			xDelete<int>(types);
++		}
++		#else
++		/*if we asked for AD computations, we have a problem!: */
++		_error_("Cannot carry out AD mode computations without support of ADOLC compiled in!");
++		#endif
++	}
++
++}
++/*}}}*/
+ /*FUNCTION IoModel::DeleteData(int num,...){{{*/
+ void  IoModel::DeleteData(int num,...){
+ 
+-	va_list         ap;
+-	int             dataenum;
+-	DoubleMatParam *parameter = NULL;
++	va_list ap;
++	int     dataenum;
++	int     i;
++	DoubleMatParam* parameter=NULL;
+ 
+ 	/*Go through the entire list of enums and delete the corresponding data from the iomodel-data dataset: */
++
+ 	va_start(ap,num);
+-	for(int i=0; i<num; i++){
++	for(i = 0; i <num; i++){
+ 		dataenum=va_arg(ap, int);
+ 		_assert_(dataenum<MaximumNumberOfEnums);
+ 		
+@@ -214,7 +274,7 @@
+ 	}
+ 	va_end(ap);
+ } /*}}}*/
+-/*FUNCTION IoModel::DeleteData(IssmDouble* vector, int dataenum) {{{*/
++/*FUNCTION IoModel::DeleteData(IssmDouble* {{{*/
+ void  IoModel::DeleteData(IssmDouble* vector, int dataenum){
+ 
+ 	/*do not erase independent variables for the AD mode computations!: */
+@@ -225,18 +285,20 @@
+ void  IoModel::FetchConstants(void){
+ 
+ 	extern int my_rank;
++	extern int num_procs;
+ 	
+ 	/*record descriptions; */
+ 	int record_enum;
+ 	int record_length;
+-	int record_code;     //1 to 7 number
++	int record_code; //1 to 7 number
+ 
+ 	/*records: */
+-	int          booleanint  = 0;
+-	int          integer     = 0;
+-	IssmPDouble  scalar      = 0;
+-	char        *string      = NULL;
+-	int          string_size;
++	int  booleanint=0;
++	int  integer=0;
++	IssmPDouble pscalar=0;
++	IssmDouble scalar=0;
++	char* string=NULL;
++	int   string_size;
+ 
+ 	/*Check that some fields have been allocated*/
+ 	_assert_(this->fid || my_rank);
+@@ -298,11 +360,19 @@
+ 
+ 						break;
+ 					case 3:
+-						/*Read the scalar and broadcast it to other cpus:*/
+-						if(fread(&scalar,sizeof(IssmPDouble),1,this->fid)!=1) _error_("could not read scalar ");
+-						#ifdef _HAVE_MPI_
+-						MPI_Bcast(&scalar,1,MPI_DOUBLE,0,MPI_COMM_WORLD); 
+-						#endif
++						/*Read the scalar and broadcast it to other cpus. However, if this record has already 
++						 * been read in DeclareIndependents, we should not re-read it, but grab it from the iomodel->data 
++						 * slots: */
++						if(this->independents[record_enum]){
++							scalar=*(this->data[record_enum]);
++						}
++						else{
++							if(fread(&pscalar,sizeof(IssmPDouble),1,this->fid)!=1) _error_("could not read scalar ");
++							#ifdef _HAVE_MPI_
++							MPI_Bcast(&pscalar,1,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++							#endif
++							scalar=reCast<IssmDouble>(pscalar);
++						}
+ 
+ 						/*create DoubleParam: */
+ 						this->constants->AddObject(new DoubleParam(record_enum,scalar));
+@@ -454,6 +524,8 @@
+ void  IoModel::FetchData(bool* pboolean,int data_enum){
+ 
+ 	extern int my_rank;
++	extern int num_procs;
++	
+ 
+ 	/*output: */
+ 	int   booleanint;
+@@ -472,6 +544,7 @@
+ 	MPI_Bcast(&booleanint,1,MPI_INT,0,MPI_COMM_WORLD); 
+ 	#endif
+ 
++	/*cast to bool: */
+ 	/*Assign output pointers: */
+ 	*pboolean=(bool)booleanint;
+ 
+@@ -481,6 +554,7 @@
+ void  IoModel::FetchData(int* pinteger,int data_enum){
+ 
+ 	extern int my_rank;
++	extern int num_procs;
+ 
+ 	/*output: */
+ 	int   integer;
+@@ -507,11 +581,14 @@
+ /*FUNCTION IoModel::FetchData(IssmDouble*   pscalar,int data_enum){{{*/
+ void  IoModel::FetchData(IssmDouble* pscalar,int data_enum){
+ 
++
+ 	extern int my_rank;
++	extern int num_procs;
++	
+ 
+ 	/*output: */
+-	IssmPDouble scalar;
+-	int         code;
++	IssmPDouble   scalar;
++	int      code;
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+@@ -535,6 +612,8 @@
+ void  IoModel::FetchData(char** pstring,int data_enum){
+ 
+ 	extern int my_rank;
++	extern int num_procs;
++	
+ 
+ 	/*output: */
+ 	char* string=NULL;
+@@ -546,6 +625,8 @@
+ 	
+ 	if(code!=4)_error_("expecting a string for enum " << EnumToStringx(data_enum));
+ 	
++	/*Now fetch: */
++	
+ 	/*We have to read a string from disk. First read the dimensions of the string, then the string: */
+ 	if(my_rank==0){  
+ 		if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
+@@ -573,6 +654,7 @@
+ 		string[0]='\0';
+ 	}
+ 
++
+ 	/*Assign output pointers: */
+ 	*pstring=string;
+ }
+@@ -581,6 +663,7 @@
+ void  IoModel::FetchData(int** pmatrix,int* pM,int* pN,int data_enum){
+ 
+ 	extern int my_rank;
++	extern int num_procs;
+ 	int i,j;
+ 
+ 	/*output: */
+@@ -596,6 +679,8 @@
+ 
+ 	if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
+ 	
++	/*Now fetch: */
++
+ 	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+ 	/*numberofelements: */
+ 	if(my_rank==0){  
+@@ -653,6 +738,7 @@
+ void  IoModel::FetchData(IssmDouble** pmatrix,int* pM,int* pN,int data_enum){
+ 
+ 	extern int my_rank;
++	extern int num_procs;
+ 
+ 	/*output: */
+ 	int M,N;
+@@ -664,6 +750,8 @@
+ 	fid=this->SetFilePointerToData(&code,&vector_type,data_enum);
+ 	if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
+ 	
++	/*Now fetch: */
++
+ 	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+ 	/*numberofelements: */
+ 	if(my_rank==0){  
+@@ -715,6 +803,8 @@
+ void  IoModel::FetchData(char*** pstrings,int* pnumstrings,int data_enum){
+ 
+ 	extern int my_rank;
++	extern int num_procs;
++	
+ 	int i;
+ 
+ 	/*output: */
+@@ -783,13 +873,15 @@
+ void  IoModel::FetchData(IssmDouble*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,int data_enum){
+ 
+ 	int i;
++
+ 	extern int my_rank;
++	extern int num_procs;
+ 
+ 	/*output: */
+-	IssmDouble **matrices   = NULL;
+-	int         *mdims      = NULL;
+-	int         *ndims      = NULL;
+-	int          numrecords = 0;
++	IssmDouble** matrices=NULL;
++	int*     mdims=NULL;
++	int*     ndims=NULL;
++	int      numrecords=0;
+ 
+ 	/*intermediary: */
+ 	int     M, N;
+@@ -872,9 +964,12 @@
+ /*FUNCTION IoModel::FetchData(Option**  poption,int data_enum){{{*/
+ void  IoModel::FetchData(Option** poption,int index){
+ 
++	extern int my_rank;
++	extern int num_procs;
++
+ 	/*output: */
+-	int   code;
+-	char *name = NULL;
++	int     code;
++	char   *name        = NULL;
+ 
+ 	/*First get option name*/
+ 	this->FetchData(&name,index);
+@@ -918,17 +1013,17 @@
+ /*FUNCTION IoModel::FetchData(int num,...){{{*/
+ void  IoModel::FetchData(int num,...){
+ 
+-	va_list     ap;
+-	int         dataenum;
+-	IssmDouble *matrix   = NULL;
+-	int         M,N;
++	va_list ap;
++	int     dataenum;
++	IssmDouble* matrix=NULL;
++	int     M,N;
++	int     i;
+ 
+-	/*Go through the entire list of enums and fetch the corresponding data.
+-	 * Add it to the iomodel->data dataset. Everything
+-	 * we fetch is a IssmDouble* : */
++	/*Go through the entire list of enums and fetch the corresponding data. Add it to the iomodel->data dataset. Everything
++	 *we fetch is a IssmDouble* : */
+ 	
+ 	va_start(ap,num);
+-	for(int i=0; i<num; i++){
++	for(i=0; i<num; i++){
+ 		
+ 		dataenum=va_arg(ap, int);
+ 		
+@@ -952,6 +1047,7 @@
+ 		this->data[dataenum]=matrix;
+ 	}
+ 	va_end(ap);
++
+ }
+ /*}}}*/
+ /*FUNCTION IoModel::FetchDataToInput{{{*/
+@@ -970,6 +1066,7 @@
+ 	int     nel;
+ 	int     numberofelements;
+ 
++
+ 	/*variables being fetched: */
+ 	bool    boolean;
+ 	int     integer;
+@@ -1189,6 +1286,7 @@
+ FILE* IoModel::SetFilePointerToData(int* pcode,int* pvector_type, int data_enum){
+ 
+ 	extern int my_rank;
++	extern int num_procs;
+ 
+ 	int found=0;
+ 	int record_enum;
+@@ -1249,93 +1347,3 @@
+ 	return fid;
+ }
+ /*}}}*/
+-/*FUNCTION IoModel::DeclareIndependents{{{*/
+-void IoModel::DeclareIndependents(void){
+-
+-	bool autodiff=false;
+-	int  dummy;
+-	int i;
+-	int  num_independents;
+-	int* independents=NULL;
+-
+-	#ifdef _HAVE_ADOLC_
+-	/*recover independent enums: */
+-	this->Constant(&num_independents,AutodiffNumIndependentsEnum);
+-	if(num_independents){
+-		this->FetchData(&independents,&dummy,&dummy,AutodiffIndependentsEnum);
+-
+-		/*now go fetch the independent variables for each independent enum: */
+-		for(i=0;i<num_independents;i++){
+-			this->FetchIndependent(independents[i]);
+-		}
+-		xDelete<int>(independents);
+-	}
+-	#else
+-	/*if we asked for AD computations, we have a problem!: */
+-	this->Constant(&autodiff,AutodiffIsautodiffEnum);
+-	if(autodiff)_error_("Cannot carry out AD mode computations without support of ADOLC compiled in!");
+-	#endif
+-
+-}
+-/*}}}*/
+-/*FUNCTION IoModel::FetchIndependent{{{*/
+-void IoModel::FetchIndependent(int independent_enum){
+-
+-	#ifdef _HAVE_ADOLC_ //cannot come here unless you are running AD mode, from DeclaredIndependents:
+-	extern int my_rank;
+-
+-	/*output: */
+-	int M,N;
+-	IssmPDouble* buffer=NULL; //a buffer to read the data from disk
+-	IssmDouble* matrix=NULL; //our independent variable
+-	int code=0;
+-	int vector_type=0;
+-	
+-	/*Set file pointer to beginning of the data: */
+-	fid=this->SetFilePointerToData(&code,&vector_type,independent_enum);
+-	if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(independent_enum));
+-	
+-	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+-	/*numberofelements: */
+-	if(my_rank==0){  
+-		if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+-	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&M,1,MPI_INT,0,MPI_COMM_WORLD); 
+-	#endif
+-
+-	if(my_rank==0){  
+-		if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+-	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD); 
+-	#endif
+-
+-	/*Now allocate matrix: */
+-	if(M*N){
+-		buffer=xNew<IssmPDouble>(M*N);
+-		matrix=xNew<IssmDouble>(M*N);
+-
+-		/*Read matrix on node 0, then broadcast: */
+-		if(my_rank==0){  
+-			if(fread(buffer,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+-			
+-			/*Now, before we even broadcast this to other nodes, declare the whole matrix as a independent variable!: */
+-			for (int i=0;i<M*N;++i) matrix[i]<<=buffer[i];  /*we use the <<= ADOLC overloaded operator to declare the independency*/
+-		}
+-		#ifdef _HAVE_MPI_
+-		MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,MPI_COMM_WORLD); 
+-		#endif
+-		
+-		xDelete<IssmPDouble>(buffer);
+-	}
+-	else _error_("cannot declare the independent variable " << EnumToStringx(independent_enum) <<  "if it's empty!");
+-
+-	/*Ok, we are almost done. Matrix is now a independent matrix. We don't want this matrix to be fetched again in the 
+-	 *future, which would effectively write over the independency in the ADOLC tape! So we are going to keep track of this 
+-	 independent matrix inthe iomodel->data[independent_enum] data slot: */
+-	this->data[independent_enum]=matrix;
+-	this->independents[independent_enum]=true;
+- 	#endif
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 13431)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 13432)
+@@ -38,6 +38,7 @@
+ 		
+ 		/*for AD mode: to keep track of our independent variables we fetch:*/
+ 		bool* independents;
++		DataSet* independent_objects;
+ 
+ 		/*Methods*/
+ 		~IoModel();
Index: /issm/oecreview/Archive/13393-13976/ISSM-13432-13433.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13432-13433.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13432-13433.diff	(revision 13980)
@@ -0,0 +1,137 @@
+Index: ../trunk-jpl/test/NightlyRun/test3001.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.m	(revision 13432)
++++ ../trunk-jpl/test/NightlyRun/test3001.m	(revision 13433)
+@@ -5,6 +5,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.requested_outputs=StressTensorEnum;
+ md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
+ md=solve(md,DiagnosticSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3005.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.m	(revision 13432)
++++ ../trunk-jpl/test/NightlyRun/test3005.m	(revision 13433)
+@@ -4,6 +4,7 @@
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
+ md=solve(md,PrognosticSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3009.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.m	(revision 13432)
++++ ../trunk-jpl/test/NightlyRun/test3009.m	(revision 13433)
+@@ -9,6 +9,7 @@
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
+ md=solve(md,TransientSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3010.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.m	(revision 13432)
++++ ../trunk-jpl/test/NightlyRun/test3010.m	(revision 13433)
+@@ -6,6 +6,7 @@
+ md.transient.requested_outputs=IceVolumeEnum();
+ 
+ md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
+ md=solve(md,TransientSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.m	(revision 13432)
++++ ../trunk-jpl/test/NightlyRun/test3002.m	(revision 13433)
+@@ -5,6 +5,7 @@
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
+ md=solve(md,DiagnosticSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3006.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.m	(revision 13432)
++++ ../trunk-jpl/test/NightlyRun/test3006.m	(revision 13433)
+@@ -7,6 +7,7 @@
+ md.prognostic.stabilization=3;
+ md.prognostic.spcthickness=md.geometry.thickness;
+ md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
+ md=solve(md,PrognosticSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/ad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad.m	(revision 13432)
++++ ../trunk-jpl/test/NightlyRun/ad.m	(revision 13433)
+@@ -5,6 +5,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.requested_outputs=StressTensorEnum;
+ md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
+ 
+ md.autodiff.independents={...
+ 	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',1), ...
+@@ -17,3 +18,4 @@
+ md.autodiff.driver='fos_forward';
+ 
+ md=solve(md,PrognosticSolutionEnum);
++%md=solve(md,TransientSolutionEnum);
+Index: ../trunk-jpl/test/NightlyRun/test3003.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.m	(revision 13432)
++++ ../trunk-jpl/test/NightlyRun/test3003.m	(revision 13433)
+@@ -6,6 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.requested_outputs=StressTensorEnum;
+ md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
+ md=solve(md,DiagnosticSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3007.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.m	(revision 13432)
++++ ../trunk-jpl/test/NightlyRun/test3007.m	(revision 13433)
+@@ -5,6 +5,7 @@
+ md=extrude(md,5,3);
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
+ md=solve(md,PrognosticSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3004.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.m	(revision 13432)
++++ ../trunk-jpl/test/NightlyRun/test3004.m	(revision 13433)
+@@ -5,6 +5,7 @@
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
+ md=solve(md,DiagnosticSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test3008.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.m	(revision 13432)
++++ ../trunk-jpl/test/NightlyRun/test3008.m	(revision 13433)
+@@ -6,6 +6,7 @@
+ md.timestepping.time_step=0;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.autodiff.isautodiff=true;
++md.verbose=verbose('autodiff',true);
+ md=solve(md,ThermalSolutionEnum);
+ 
+ %Fields and tolerances to track changes
Index: /issm/oecreview/Archive/13393-13976/ISSM-13433-13434.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13433-13434.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13433-13434.diff	(revision 13980)
@@ -0,0 +1,38 @@
+Index: ../trunk-jpl/src/c/solutions/prognostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/prognostic_core.cpp	(revision 13433)
++++ ../trunk-jpl/src/c/solutions/prognostic_core.cpp	(revision 13434)
+@@ -49,5 +49,5 @@
+ 	}
+ 	
+ 	
+-	if(solution_type=PrognosticSolutionEnum)RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	if(solution_type==PrognosticSolutionEnum)RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ }
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13433)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13434)
+@@ -186,13 +186,15 @@
+ 	#ifdef _HAVE_ADOLC_
+ 	if(autodiff){
+ 		tapestats(1,tape_stats); //reading of tape statistics
+-		_pprintLine_("   ADOLC statistics: ");
+-		_pprintLine_("   "<<setw(45)<<left<<"Number of independents: " <<tape_stats[0]);
+-		_pprintLine_("   "<<setw(45)<<left<<"Number of dependents: " <<tape_stats[1]);
+-		_pprintLine_("   "<<setw(45)<<left<<"Maximal number of live active variables: " <<tape_stats[2]);
+-		_pprintLine_("   "<<setw(45)<<left<<"Size of value stack (number of overwrites): " <<tape_stats[3]);
+-		_pprintLine_("   "<<setw(45)<<left<<"Buffer size (a multiple of eight): " <<tape_stats[4]);
+-		_pprintLine_("   "<<setw(45)<<left<<"Total number of operations recorded: " <<tape_stats[5]);
++		if(VerboseAutodiff()){
++			_pprintLine_("   ADOLC statistics: ");
++			_pprintLine_("   "<<setw(45)<<left<<"Number of independents: " <<tape_stats[0]);
++			_pprintLine_("   "<<setw(45)<<left<<"Number of dependents: " <<tape_stats[1]);
++			_pprintLine_("   "<<setw(45)<<left<<"Maximal number of live active variables: " <<tape_stats[2]);
++			_pprintLine_("   "<<setw(45)<<left<<"Size of value stack (number of overwrites): " <<tape_stats[3]);
++			_pprintLine_("   "<<setw(45)<<left<<"Buffer size (a multiple of eight): " <<tape_stats[4]);
++			_pprintLine_("   "<<setw(45)<<left<<"Total number of operations recorded: " <<tape_stats[5]);
++		}
+ 	}
+ 	#endif  /*}}}*/
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13434-13435.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13434-13435.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13434-13435.diff	(revision 13980)
@@ -0,0 +1,149 @@
+Index: ../trunk-jpl/src/c/shared/Numerics/Synchronize.sh
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/Synchronize.sh	(revision 13434)
++++ ../trunk-jpl/src/c/shared/Numerics/Synchronize.sh	(revision 13435)
+@@ -1,7 +1,7 @@
+ #!/bin/bash
+ #Synchronize Verbosity
+ #first remove existing files
+-rm $ISSM_DIR/src/m/shared/Verb*.m
++rm $ISSM_DIR/src/m/classes/Verb*.m
+ 
+ echo "Synchronizing Verbosity levels..."
+ 
+@@ -49,21 +49,6 @@
+ 
+ 	echo "$FILENAME -> 2^$POWER = $BINARY"
+ 
+-	#Add Verbosity Matlab file{{{
+-	cat <<END > $ISSM_DIR"/src/m/shared/"$(echo $FILENAME".m")
+-function bool=$(echo $FILENAME)()
+-%$(echo $FILENAME | awk {'print toupper($1)'}) - Return true if $(echo $LEVELNAME | awk {'print tolower($1)'}) level is activated
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/shared/Numerics/Synchronize.sh
+-%            Please read src/c/shared/Numerics/README for more information
+-%
+-%   Usage:
+-%      bool=$FILENAME()
+-
+-bool=logical(bitand(GetVerbosityLevel(),$BINARY));
+-END
+-	#}}}
+ 	#Add case to verbose.m FIELDS{{{
+ 	if [ $i -eq 1 ]; then cat <<END >> FIELDS
+ 		%BEGINFIELDS
+@@ -134,7 +119,7 @@
+ /*FUNCTION SetVerbosityLevel {{{*/
+ void SetVerbosityLevel(int level){
+ 
+-	if(level<0) _error2_("vebosity level should be a positive integer (user provided " << level << ")");
++	if(level<0) _error_("vebosity level should be a positive integer (user provided " << level << ")");
+ 
+ 	verbositylevel = level;
+ 
+Index: ../trunk-jpl/src/c/shared/Numerics/Verbosity.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/Verbosity.cpp	(revision 13434)
++++ ../trunk-jpl/src/c/shared/Numerics/Verbosity.cpp	(revision 13435)
+@@ -27,6 +27,7 @@
+ bool VerboseConvergence(void){return (GetVerbosityLevel() & 16);} /* 2^4*/
+ bool VerboseControl(void){return (GetVerbosityLevel() & 32);} /* 2^5*/
+ bool VerboseQmu(void){return (GetVerbosityLevel() & 64);} /* 2^6*/
++bool VerboseAutodiff(void){return (GetVerbosityLevel() & 128);} /* 2^7*/
+ 
+ /*Verbosity Setup*/
+ static int verbositylevel=-1;
+@@ -40,8 +41,6 @@
+ }/*}}}*/
+ /*FUNCTION GetVerbosityLevel {{{*/
+ int  GetVerbosityLevel(void){
+-
+ 	_assert_(verbositylevel>=0);
+ 	return verbositylevel;
+-
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Numerics/Verbosity.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/Verbosity.h	(revision 13434)
++++ ../trunk-jpl/src/c/shared/Numerics/Verbosity.h	(revision 13435)
+@@ -13,6 +13,7 @@
+ bool VerboseConvergence(void);
+ bool VerboseControl(void);
+ bool VerboseQmu(void);
++bool VerboseAutodiff(void);
+ 
+ /*Setup Verbosity level*/
+ void SetVerbosityLevel(int level);
+Index: ../trunk-jpl/src/m/classes/verbose.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/verbose.m	(revision 13434)
++++ ../trunk-jpl/src/m/classes/verbose.m	(revision 13435)
+@@ -8,6 +8,7 @@
+ %      convergence : convergence criteria
+ %      control     : control method
+ %      qmu         : sensitivity analysis
++%      autodiff    : AD analysis
+ %
+ %   Usage:
+ %      verbose=verbose();
+@@ -22,13 +23,14 @@
+ 	properties (SetAccess=public) 
+ 		% {{{
+ 		%BEGINFIELDS
+-		mprocessor  = false;
+-		module      = false;
+-		solution    = false;
+-		solver      = false;
+-		convergence = false;
+-		control     = false;
+-		qmu         = false;
++		mprocessor=false;
++		module=false;
++		solution=false;
++		solver=false;
++		convergence=false;
++		control=false;
++		qmu=false;
++		autodiff=false;
+ 		%ENDFIELDS
+ 		% }}}
+ 	end
+@@ -82,6 +84,7 @@
+ 		if (verbose.convergence), binary=bitor(binary,16); end
+ 		if (verbose.control), binary=bitor(binary,32); end
+ 		if (verbose.qmu), binary=bitor(binary,64); end
++		if (verbose.autodiff), binary=bitor(binary,128); end
+ 		%ENDVERB2BIN
+ 
+ 		end
+@@ -89,13 +92,14 @@
+ 		function verbose=BinaryToVerbose(verbose,binary) % {{{
+ 
+ 		%BEGINBIN2VERB
+-		verbose.mprocessor =logical(bitand(binary, 1));
+-		verbose.module     =logical(bitand(binary, 2));
+-		verbose.solution   =logical(bitand(binary, 4));
+-		verbose.solver     =logical(bitand(binary, 8));
+-		verbose.convergence=logical(bitand(binary,16));
+-		verbose.control    =logical(bitand(binary,32));
+-		verbose.qmu        =logical(bitand(binary,64));
++		if bitand(binary,1), verbose.mprocessor=true; else verbose.mprocessor=false; end
++		if bitand(binary,2), verbose.module=true; else verbose.module=false; end
++		if bitand(binary,4), verbose.solution=true; else verbose.solution=false; end
++		if bitand(binary,8), verbose.solver=true; else verbose.solver=false; end
++		if bitand(binary,16), verbose.convergence=true; else verbose.convergence=false; end
++		if bitand(binary,32), verbose.control=true; else verbose.control=false; end
++		if bitand(binary,64), verbose.qmu=true; else verbose.qmu=false; end
++		if bitand(binary,128), verbose.autodiff=true; else verbose.autodiff=false; end
+ 		%ENDBIN2VERB
+ 
+ 		end
+@@ -114,6 +118,7 @@
+ 		disp(sprintf('   %15s : %s','convergence',mat2str(verbose.convergence)));
+ 		disp(sprintf('   %15s : %s','control',mat2str(verbose.control)));
+ 		disp(sprintf('   %15s : %s','qmu',mat2str(verbose.qmu)));
++		disp(sprintf('   %15s : %s','autodiff',mat2str(verbose.autodiff)));
+ 		%ENDDISP
+ 
+ 		end
Index: /issm/oecreview/Archive/13393-13976/ISSM-13435-13436.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13435-13436.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13435-13436.diff	(revision 13980)
@@ -0,0 +1,776 @@
+Index: ../trunk-jpl/src/m/mesh/meshconvert.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/meshconvert.py	(revision 13435)
++++ ../trunk-jpl/src/m/mesh/meshconvert.py	(revision 13436)
+@@ -51,7 +51,7 @@
+ 	md.mesh.elementonbed=numpy.ones(md.mesh.numberofelements)
+ 	md.mesh.elementonsurface=numpy.ones(md.mesh.numberofelements)
+ 	md.mesh.vertexonboundary=numpy.zeros(md.mesh.numberofvertices)
+-	md.mesh.vertexonboundary[md.mesh.segments[:,0:1].astype(int)-1]=1
++	md.mesh.vertexonboundary[md.mesh.segments[:,0:2].astype(int)-1]=1
+ 
+ 	return md
+ 
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 0)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 13436)
+@@ -0,0 +1,486 @@
++import os.path
++import numpy
++from collections import OrderedDict
++from pairoptions import *
++from bamggeom import *
++from bamgmesh import *
++from expread import *
++from expwrite import *
++from MatlabFuncs import *
++from BamgMesher import *
++
++def bamg(md,*args):
++	"""
++	BAMG - mesh generation
++
++	   Available options (for more details see ISSM website http://issm.jpl.nasa.gov/):
++
++	   - domain :            followed by an ARGUS file that prescribes the domain outline
++	   - hmin :              minimum edge length (default is 10^-100)
++	   - hmax :              maximum edge length (default is 10^100)
++	   - hVertices :         imposed edge length for each vertex (geometry or mesh)
++	   - hminVertices :      minimum edge length for each vertex (mesh)
++	   - hmaxVertices :      maximum edge length for each vertex (mesh)
++
++	   - anisomax :          maximum ratio between the smallest and largest edges (default is 10^30)
++	   - coeff :             coefficient applied to the metric (2-> twice as many elements, default is 1)
++	   - cutoff :            scalar used to compute the metric when metric type 2 or 3 are applied
++	   - err :               error used to generate the metric from a field
++	   - errg :              geometric error (default is 0.1)
++	   - field :             field of the model that will be used to compute the metric
++	                         to apply several fields, use one column per field
++	   - gradation :         maximum ratio between two adjacent edges
++	   - Hessiantype :       0 -> use double P2 projection (default)
++	                         1 -> use Green formula
++	   - KeepVertices :      try to keep initial vertices when adaptation is done on an existing mesh (default 1)
++	   - MaxCornerAngle :    maximum angle of corners in degree (default is 10)
++	   - maxnbv :            maximum number of vertices used to allocate memory (default is 10^6)
++	   - maxsubdiv :         maximum subdivision of exisiting elements (default is 10)
++	   - metric :            matrix (numberofnodes x 3) used as a metric
++	   - Metrictype :        1 -> absolute error          c/(err coeff^2) * Abs(H)        (default)
++	                         2 -> relative error          c/(err coeff^2) * Abs(H)/max(s,cutoff*max(s))
++	                         3 -> rescaled absolute error c/(err coeff^2) * Abs(H)/(smax-smin)
++	   - nbjacoby :          correction used by Hessiantype=1 (default is 1)
++	   - nbsmooth :          number of metric smoothing procedure (default is 3)
++	   - omega :             relaxation parameter of the smoothing procedure (default is 1.8)
++	   - power :             power applied to the metric (default is 1)
++	   - splitcorners :      split triangles whuch have 3 vertices on the outline (default is 1)
++	   - geometricalmetric : take the geometry into account to generate the metric (default is 0)
++	   - verbose :           level of verbosity (default is 1)
++
++	   - rifts :             followed by an ARGUS file that prescribes the rifts
++	   - toltip :            tolerance to move tip on an existing point of the domain outline
++	   - tracks :            followed by an ARGUS file that prescribes the tracks that the mesh will stick to
++	   - RequiredVertices :  mesh vertices that are required. [x,y,ref]; ref is optional
++	   - tol :               if the distance between 2 points of the domain outline is less than tol, they
++	                         will be merged
++
++	   Examples:
++	      md=bamg(md,'domain','DomainOutline.exp','hmax',3000);
++	      md=bamg(md,'field',[md.inversion.vel_obs md.geometry.thickness],'hmax',20000,'hmin',1000);
++	      md=bamg(md,'metric',A,'hmin',1000,'hmax',20000,'gradation',3,'anisomax',1);
++	"""
++
++	#process options
++	options=pairoptions(*args)
++#	options=deleteduplicates(options,1);
++
++	#initialize the structures required as input of Bamg
++	bamg_options=OrderedDict()
++	bamg_geometry=bamggeom()
++	bamg_mesh=bamgmesh()
++
++	# Bamg Geometry parameters {{{
++	if options.exist('domain'):
++
++		#Check that file exists
++		domainfile=options.getfieldvalue('domain')
++		if not os.path.exists(domainfile):
++			raise IOError("bamg error message: file '%s' not found" % domainfile)
++		domain=expread(domainfile)
++
++		#Build geometry 
++		count=0
++		for i,domaini in enumerate(domain):
++
++			#Check that the domain is closed
++			if (domaini['x'][0]!=domaini['x'][-1] or domaini['y'][0]!=domaini['y'][-1]):
++				raise RuntimeError("bamg error message: all contours provided in ''domain'' should be closed")
++
++			#Checks that all holes are INSIDE the principle domain outline
++			if i:
++				flags=ContourToNodes(domaini['x'],domaini['y'],domain[0],0)
++				if numpy.any(numpy.logical_not(flags)):
++					raise RuntimeError("bamg error message: All holes should be strictly inside the principal domain")
++
++			#Add all points to bamg_geometry
++			nods=domaini['nods']-1    #the domain are closed 0=end
++			bamg_geometry.Vertices=numpy.vstack((bamg_geometry.Vertices,numpy.hstack((domaini['x'][0:nods].reshape(-1,1),domaini['y'][0:nods].reshape(-1,1),numpy.ones((nods,1))))))
++			bamg_geometry.Edges   =numpy.vstack((bamg_geometry.Edges,   numpy.hstack((numpy.arange(count+1,count+nods+1).reshape(-1,1),numpy.hstack((numpy.arange(count+2,count+nods+1),count+1)).reshape(-1,1),1.*numpy.ones((nods,1))))))
++			if i:
++				bamg_geometry.SubDomains=numpy.vstack((bamg_geometry.SubDomains,[2,count+1,1,1]))
++
++			#update counter
++			count=+nods
++
++		#take care of rifts
++		if options.exist('rifts'):
++
++			#Check that file exists
++			riftfile=options.getfieldvalue('rifts')
++			if not os.path.exists(riftfile):
++				raise IOError("bamg error message: file '%s' not found" % riftfile)
++			rift=expread(riftfile)
++
++			for i,rifti in enumerate(rift):
++
++				#detect whether all points of the rift are inside the domain
++				flags=ContourToNodes(rifti['x'],rifti['y'],domain[0],0)
++				if numpy.all(numpy.logical_not(flags)):
++					raise RuntimeError("one rift has all its points outside of the domain outline")
++
++				elif numpy.any(numpy.logical_not(flags)):
++					raise RuntimeError("bamg.m for rifts is not complete.")
++					#We LOTS of work to do
++					print("Rift tip outside of or on the domain has been detected and is being processed...")
++					"""
++
++					%check that only one point is outside (for now)
++					if sum(~flags)~=1,
++						error('bamg error message: only one point outside of the domain is supported yet');
++					end
++
++					%Move tip outside to the first position
++					if flags(1)==0,
++						%OK, first point is outside (do nothing),
++					elseif (flags(end)==0),
++						rift(i).x=flipud(rift(i).x);
++						rift(i).y=flipud(rift(i).y);
++					else
++						error('bamg error message: only a rift tip can be outside of the domain');
++					end
++
++					%Get cordinate of intersection point
++					x1=rift(i).x(1); y1=rift(i).y(1);
++					x2=rift(i).x(2); y2=rift(i).y(2);
++					for j=1:length(domain[0]['x'])-1;
++						if SegIntersect([x1 y1; x2 y2],[domain[0]['x'](j) domain[0]['y'](j); domain[0]['x'](j+1) domain[0]['y'](j+1)]),
++
++							%Get position of the two nodes of the edge in domain
++							i1=j;
++							i2=mod(j+1,domain[0]['nods']);
++
++							%rift is crossing edge [i1 i2] of the domain
++							%Get coordinate of intersection point (http://mathworld.wolfram.com/Line-LineIntersection.html)
++							x3=domain[0]['x'](i1); y3=domain[0]['y'](i1);
++							x4=domain[0]['x'](i2); y4=domain[0]['y'](i2);
++							x=det([det([x1 y1; x2 y2])  x1-x2;det([x3 y3; x4 y4])  x3-x4])/det([x1-x2 y1-y2;x3-x4 y3-y4]);
++							y=det([det([x1 y1; x2 y2])  y1-y2;det([x3 y3; x4 y4])  y3-y4])/det([x1-x2 y1-y2;x3-x4 y3-y4]);
++
++							segdis= sqrt((x4-x3)**2+(y4-y3)**2);
++							tipdis=[sqrt((x-x3)**2+(y-y3)**2)  sqrt((x-x4)**2+(y-y4)**2)];
++
++							if (min(tipdis)/segdis) < getfieldvalue(options,'toltip',0),
++								disp('moving tip-domain intersection point');
++
++								%Get position of the closest point
++								if tipdis(1)>tipdis(2),
++									pos=i2;
++								else
++									pos=i1;
++								end
++
++								%This point is only in Vertices (number pos).
++								%OK, now we can add our own rift
++								nods=rift(i).nods-1;
++								bamg_geometry.Vertices=[bamg_geometry.Vertices; [rift(i).x(2:end) rift(i).y(2:end) ones(nods,1)]];
++								bamg_geometry.Edges=[bamg_geometry.Edges;...
++									pos count+1  (1+i);...
++									[transpose(count+1:count+nods-1) transpose([count+2:count+nods])  (1+i)*ones(nods-1,1)]];
++								count=count+nods;
++
++								break;
++
++							else
++								%Add intersection point to Vertices
++								bamg_geometry.Vertices=[bamg_geometry.Vertices; x y 1];
++								count=count+1;
++
++								%Decompose the crossing edge in 2 subedges
++								pos=find(bamg_geometry.Edges(:,1)==i1 & bamg_geometry.Edges(:,2)==i2);
++								if isempty(pos) error('bamg error message: a problem occured...'); end
++								bamg_geometry.Edges=[bamg_geometry.Edges(1:pos-1,:);...
++									bamg_geometry.Edges(pos,1) count                           bamg_geometry.Edges(pos,3);...
++									count                      bamg_geometry.Edges(pos,2)   bamg_geometry.Edges(pos,3);...
++									bamg_geometry.Edges(pos+1:end,:)];
++
++								%OK, now we can add our own rift
++								nods=rift(i).nods-1;
++								bamg_geometry.Vertices=[bamg_geometry.Vertices; [rift(i).x(2:end) rift(i).y(2:end) ones(nods,1)]];
++								bamg_geometry.Edges=[bamg_geometry.Edges;...
++									count  count+1  2 ;...
++									[transpose(count+1:count+nods-1) transpose([count+2:count+nods])  (1+i)*ones(nods-1,1)]];
++								count=count+nods;
++
++								break;
++							end
++						end
++					end
++					"""
++				else:
++					nods=rifti['nods']-1
++					bamg_geometry.Vertices=numpy.vstack(bamg_geometry.Vertices, numpy.hstack(rifti['x'][:],rifti['y'][:],numpy.ones((nods+1,1))))
++					bamg_geometry.Edges   =numpy.vstack(bamg_geometry.Edges, numpy.hstack(numpy.arange(count+1,count+nods).reshape(-1,1),numpy.arange(count+2,count+nods+1).reshape(-1,1),i*numpy.ones((nods,1))))
++					count=+nods+1
++
++		#Deal with tracks
++		if options.exist('tracks'):
++
++			#read tracks
++			track=options.getfieldvalue('tracks')
++			if all(isinstance(track,(str,unicode))):
++				A=expread(track)
++				track=numpy.hstack((A.x.reshape(-1,1),A.y.reshape(-1,1)))
++			else:
++				track=float(track)    #for some reason, it is of class "single"
++			if numpy.size(track,axis=1)==2:
++				track=numpy.hstack((track,3.*numpy.ones((size(track,axis=0),1))))
++
++			#only keep those inside
++			flags=ContourToNodes(track[:,0],track[:,1],domainfile,0)
++			track=track[numpy.nonzero(flags),:]
++
++			#Add all points to bamg_geometry
++			nods=numpy.size(track,axis=0)
++			bamg_geometry.Vertices=numpy.vstack((bamg_geometry.Vertices,track))
++			bamg_geometry.Edges   =numpy.vstack((bamg_geometry.Edges,numpy.hstack((numpy.arange(count+1,count+nods).reshape(-1,1),numpy.arange(count+2,count+nods+1).reshape(-1,1),3.*numpy.ones((nods-1,1))))))
++
++			#update counter
++			count+=nods
++
++		#Deal with vertices that need to be kept by mesher
++		if options.exist('RequiredVertices'):
++
++			#recover RequiredVertices
++			requiredvertices=float(options.getfieldvalue('RequiredVertices'))    #for some reason, it is of class "single"
++			if numpy.size(requiredvertices,axis=1)==2:
++				requiredvertices=numpy.hstack((requiredvertices,4.*numpy.ones((numpy.size(requiredvertices,axis=0),1))))
++	
++			#only keep those inside
++			flags=ContourToNodes(requiredvertices[:,0],domain[0],0)
++			requiredvertices=requiredvertices[numpy.nonzero(flags),:]
++
++			#Add all points to bamg_geometry
++			nods=numpy.size(requiredvertices,axis=0)
++			bamg_geometry.Vertices=numpy.vstack((bamg_geometry.Vertices,requiredvertices))
++
++			#update counter
++			count+=nods
++
++		#process geom
++		#bamg_geometry=processgeometry(bamg_geometry,options.getfieldvalue('tol',float(nan)),domain[0])
++
++	elif isinstance(md.private.bamg,dict) and 'geometry' in md.private.bamg:
++		bamg_geometry=bamggeom(md.private.bamg['geometry']) 
++	else:
++		#do nothing...
++		pass
++	#}}}
++	# Bamg Mesh parameters {{{
++	if options.exist('domain') and md.mesh.numberofvertices and md.mesh.dimension==2:
++
++		if isinstance(md.private.bamg,dict) and 'mesh' in md.private.bamg:
++			bamg_mesh=bamgmesh(md.private.bamg['mesh'])
++		else:
++			bamg_mesh.Vertices=numpy.hstack((md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),numpy.ones((md.mesh.numberofvertices,1))))
++			bamg_mesh.Triangles=numpy.hstack((md.mesh.elements,numpy.ones((md.mesh.numberofelements,1))))
++
++		if isinstance(md.rifts.riftstruct,dict):
++			raise TypeError("bamg error message: rifts not supported yet. Do meshprocessrift AFTER bamg")
++	#}}}
++	# Bamg Options {{{
++	bamg_options['Crack']=options.getfieldvalue('Crack',0)
++	bamg_options['anisomax']=options.getfieldvalue('anisomax',10.**30)
++	bamg_options['coeff']=options.getfieldvalue('coeff',1.)
++	bamg_options['cutoff']=options.getfieldvalue('cutoff',10.**-5)
++	bamg_options['err']=options.getfieldvalue('err',numpy.array([[0.01]]))
++	bamg_options['errg']=options.getfieldvalue('errg',0.1)
++	bamg_options['field']=options.getfieldvalue('field',numpy.empty((0,1)))
++	bamg_options['gradation']=options.getfieldvalue('gradation',1.5)
++	bamg_options['Hessiantype']=options.getfieldvalue('Hessiantype',0)
++	bamg_options['hmin']=options.getfieldvalue('hmin',10.**-100)
++	bamg_options['hmax']=options.getfieldvalue('hmax',10.**100)
++	bamg_options['hminVertices']=options.getfieldvalue('hminVertices',numpy.empty((0,1)))
++	bamg_options['hmaxVertices']=options.getfieldvalue('hmaxVertices',numpy.empty((0,1)))
++	bamg_options['hVertices']=options.getfieldvalue('hVertices',numpy.empty((0,1)))
++	bamg_options['KeepVertices']=options.getfieldvalue('KeepVertices',1)
++	bamg_options['MaxCornerAngle']=options.getfieldvalue('MaxCornerAngle',10.)
++	bamg_options['maxnbv']=options.getfieldvalue('maxnbv',10**6)
++	bamg_options['maxsubdiv']=options.getfieldvalue('maxsubdiv',10.)
++	bamg_options['metric']=options.getfieldvalue('metric',numpy.empty((0,1)))
++	bamg_options['Metrictype']=options.getfieldvalue('Metrictype',0)
++	bamg_options['nbjacobi']=options.getfieldvalue('nbjacobi',1)
++	bamg_options['nbsmooth']=options.getfieldvalue('nbsmooth',3)
++	bamg_options['omega']=options.getfieldvalue('omega',1.8)
++	bamg_options['power']=options.getfieldvalue('power',1.)
++	bamg_options['splitcorners']=options.getfieldvalue('splitcorners',1)
++	bamg_options['geometricalmetric']=options.getfieldvalue('geometricalmetric',0)
++	bamg_options['verbose']=options.getfieldvalue('verbose',1)
++	#}}}
++
++	#call Bamg
++	bamgmesh_out,bamggeom_out=BamgMesher(bamg_mesh.__dict__,bamg_geometry.__dict__,bamg_options)
++
++	# plug results onto model
++	md.private.bamg=OrderedDict()
++	md.private.bamg['mesh']=bamgmesh(bamgmesh_out)
++	md.private.bamg['geometry']=bamggeom(bamggeom_out)
++	md.mesh.x=bamgmesh_out['Vertices'][:,0].copy()
++	md.mesh.y=bamgmesh_out['Vertices'][:,1].copy()
++	md.mesh.elements=bamgmesh_out['Triangles'][:,0:3].copy()
++	md.mesh.edges=bamgmesh_out['IssmEdges'].copy()
++	md.mesh.segments=bamgmesh_out['IssmSegments'][:,0:3].copy()
++	md.mesh.segmentmarkers=bamgmesh_out['IssmSegments'][:,3].copy()
++
++	#Fill in rest of fields:
++	md.mesh.dimension=2
++	md.mesh.numberofelements=numpy.size(md.mesh.elements,axis=0)
++	md.mesh.numberofvertices=numpy.size(md.mesh.x);
++	md.mesh.numberofedges=numpy.size(md.mesh.edges,axis=0)
++	md.mesh.z=numpy.zeros(md.mesh.numberofvertices)
++	md.mesh.vertexonbed=numpy.ones(md.mesh.numberofvertices)
++	md.mask.vertexonwater=numpy.zeros(md.mesh.numberofvertices)
++	md.mesh.vertexonsurface=numpy.ones(md.mesh.numberofvertices)
++	md.mesh.elementonbed=numpy.ones(md.mesh.numberofelements)
++	md.mesh.elementonsurface=numpy.ones(md.mesh.numberofelements)
++	md.mesh.vertexonboundary=numpy.zeros(md.mesh.numberofvertices)
++	md.mesh.vertexonboundary[md.mesh.segments[:,0:2].astype(int)-1]=1
++	md.mesh.elementconnectivity=md.private.bamg['mesh'].ElementConnectivity
++	md.mesh.elementconnectivity[numpy.nonzero(numpy.isnan(md.mesh.elementconnectivity))]=0
++
++	#Check for orphan
++	if numpy.any(numpy.logical_not(numpy.in1d(numpy.arange(1,md.mesh.numberofvertices+1),md.mesh.elements.flat))):
++		raise RuntimeError("Output mesh has orphans. Decrease MaxCornerAngle to prevent outside points (ex: 0.01)")
++
++	return md
++
++def processgeometry(geom,tol,outline):    # {{{
++
++	raise RuntimeError("bamg.m/processgeometry is not complete.")
++	#Deal with edges
++	print("Checking Edge crossing...")
++	i=0
++	while (i<numpy.size(geom.Edges,axis=0)):
++
++		#edge counter
++		i+=1
++
++		#Get coordinates
++		x1=geom.Vertices[geom.Edges[i,0],0]
++		y1=geom.Vertices[geom.Edges[i,0],1]
++		x2=geom.Vertices[geom.Edges[i,1],0]
++		y2=geom.Vertices[geom.Edges[i,1],1]
++		color1=geom.Edges[i,2]
++
++		j=i    #test edges located AFTER i only
++		while (j<numpy.size(geom.Edges,axis=0)):
++
++			#edge counter
++			j+=1
++
++			#Skip if the two edges already have a vertex in common
++			if any(ismember(geom.Edges[i,0:2],geom.Edges[j,0:2])):
++				continue
++
++			#Get coordinates
++			x3=geom.Vertices[geom.Edges[j,0],0]
++			y3=geom.Vertices[geom.Edges[j,0],1]
++			x4=geom.Vertices[geom.Edges[j,1],0]
++			y4=geom.Vertices[geom.Edges[j,1],1]
++			color2=geom.Edges[j,2]
++
++			#Check if the two edges are crossing one another
++			if SegIntersect(numpy.array([[x1,y1],[x2,y2]]),numpy.array([[x3,y3],[x4,y4]])):
++
++				#Get coordinate of intersection point (http://mathworld.wolfram.com/Line-LineIntersection.html)
++				x=det(numpy.array([det(numpy.array([[x1,y1],[x2,y2]])),x1-x2],[det(numpy.array([[x3,y3],[x4,y4]])),x3-x4])/det(numpy.array([[x1-x2,y1-y2],[x3-x4,y3-y4]])))
++				y=det(numpy.array([det(numpy.array([[x1,y1],[x2,y2]])),y1-y2],[det(numpy.array([[x3,y3],[x4,y4]])),y3-y4])/det(numpy.array([[x1-x2,y1-y2],[x3-x4,y3-y4]])))
++
++				#Add vertex to the list of vertices
++				geom.Vertices=numpy.vstack((geom.Vertices,[x,y,min(color1,color2)]))
++				id=numpy.size(geom.Vertices,axis=0)
++
++				#Update edges i and j
++				edgei=geom.Edges[i,:].copy()
++				edgej=geom.Edges[j,:].copy()
++				geom.Edges[i,:]    =[edgei(0),id      ,edgei(2)]
++				geom.Edges=numpy.vstack((geom.Edges,[id      ,edgei(1),edgei(2)]))
++				geom.Edges[j,:]    =[edgej(0),id      ,edgej(2)]
++				geom.Edges=numpy.vstack((geom.Edges,[id      ,edgej(1),edgej(2)]))
++
++				#update current edge second tip
++				x2=x
++				y2=y
++
++	#Check point outside
++	print("Checking for points outside the domain...")
++	i=0
++	num=0
++	while (i<numpy.size(geom.Vertices,axis=0)):
++
++		#vertex counter
++		i+=1
++
++		#Get coordinates
++		x=geom.Vertices[i,0]
++		y=geom.Vertices[i,1]
++		color=geom.Vertices[i,2]
++
++		#Check that the point is inside the domain
++		if color!=1 and not ContourToNodes(x,y,outline[0],1):
++
++			#Remove points from list of Vertices
++			num+=1
++			geom.Vertices[i,:]=[]
++
++			#update edges
++			posedges=numpy.nonzero(geom.Edges==i)
++			geom.Edges[posedges[0],:]=[]
++			posedges=numpy.nonzero(geom.Edges>i)
++			geom.Edges[posedges]=geom.Edges[posedges]-1
++
++			#update counter
++			i-=1
++
++	if num:
++		print("WARNING: %d points outside the domain outline have been removed" % num)
++
++	"""
++	%Check point spacing
++	if ~isnan(tol),
++		disp('Checking point spacing...');
++		i=0;
++		while (i<size(geom.Vertices,1)),
++
++			%vertex counter
++			i=i+1;
++
++			%Get coordinates
++			x1=geom.Vertices(i,1);
++			y1=geom.Vertices(i,2);
++
++			j=i; %test edges located AFTER i only
++			while (j<size(geom.Vertices,1)),
++
++				%vertex counter
++				j=j+1;
++
++				%Get coordinates
++				x2=geom.Vertices(j,1);
++				y2=geom.Vertices(j,2);
++
++				%Check whether the two vertices are too close
++				if ((x2-x1)**2+(y2-y1)**2<tol**2)
++
++					%Remove points from list of Vertices
++					geom.Vertices(j,:)=[];
++
++					%update edges
++					posedges=find(ismember(geom.Edges,j));
++					geom.Edges(posedges)=i;
++					posedges=find(geom.Edges>j);
++					geom.Edges(posedges)=geom.Edges(posedges)-1;
++
++					%update counter
++					j=j-1;
++
++				end
++			end
++		end
++	end
++	%remove empty edges
++	geom.Edges(find(geom.Edges(:,1)==geom.Edges(:,2)),:)=[];
++	"""
++	return geom
++# }}}
++
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 13435)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 13436)
+@@ -54,15 +54,15 @@
+ 
+ %initialize the structures required as input of Bamg
+ bamg_options=struct();
+-bamg_geometry=bamggeom;
+-bamg_mesh=bamgmesh;
++bamg_geometry=bamggeom();
++bamg_mesh=bamgmesh();
+ 
+ % Bamg Geometry parameters {{{
+ if exist(options,'domain'),
+ 
+ 	%Check that file exists
+ 	domainfile=getfieldvalue(options,'domain');
+-	if ~exist(domainfile,'file') error(['bamg error message: file ' domainfile ' not found ']); end
++	if ~exist(domainfile,'file') error(['bamg error message: file ' domainfile ' not found']); end
+ 	domain=expread(domainfile);
+ 
+ 	%Build geometry 
+@@ -78,14 +78,14 @@
+ 		if i>1,
+ 			flags=ContourToNodes(domain(i).x,domain(i).y,domain(1),0);
+ 			if any(~flags),
+-				error('bamg error message: All holes should be stricly inside the principal domain');
++				error('bamg error message: All holes should be strictly inside the principal domain');
+ 			end
+ 		end
+ 
+ 		%Add all points to bamg_geometry
+ 		nods=domain(i).nods-1; %the domain are closed 1=end;
+ 		bamg_geometry.Vertices=[bamg_geometry.Vertices; [domain(i).x(1:nods) domain(i).y(1:nods) ones(nods,1)]];
+-		bamg_geometry.Edges   =[bamg_geometry.Edges;    [transpose(count+1:count+nods) transpose([count+2:count+nods count+1])  1*ones(nods,1)]];
++		bamg_geometry.Edges   =[bamg_geometry.Edges;    [transpose(count+1:count+nods) transpose([count+2:count+nods count+1])  1.*ones(nods,1)]];
+ 		if i>1, bamg_geometry.SubDomains=[bamg_geometry.SubDomains; 2 count+1 1 1]; end
+ 
+ 		%update counter
+@@ -104,16 +104,16 @@
+ 
+ 		for i=1:length(rift),
+ 
+-			%detect wether all points of the rift are inside the domain
++			%detect whether all points of the rift are inside the domain
+ 			flags=ContourToNodes(rift(i).x,rift(i).y,domain(1),0);
+ 			if ~flags,
+-				error('one Rift has all his points outside of the domain outline'),
++				error('one rift has all its points outside of the domain outline'),
+ 
+ 			elseif any(~flags),
+ 				%We LOTS of work to do
+ 				disp('Rift tip outside of or on the domain has been detected and is being processed...');
+ 
+-				%check that only one point is outsie (for now)
++				%check that only one point is outside (for now)
+ 				if sum(~flags)~=1,
+ 					error('bamg error message: only one point outside of the domain is supported yet');
+ 				end
+@@ -159,7 +159,7 @@
+ 							end
+ 
+ 							%This point is only in Vertices (number pos).
+-							%OK, no we can add our own rift
++							%OK, now we can add our own rift
+ 							nods=rift(i).nods-1;
+ 							bamg_geometry.Vertices=[bamg_geometry.Vertices; [rift(i).x(2:end) rift(i).y(2:end) ones(nods,1)]];
+ 							bamg_geometry.Edges=[bamg_geometry.Edges;...
+@@ -182,7 +182,7 @@
+ 								count                      bamg_geometry.Edges(pos,2)   bamg_geometry.Edges(pos,3);...
+ 								bamg_geometry.Edges(pos+1:end,:)];
+ 
+-							%OK, no we can add our own rift
++							%OK, now we can add our own rift
+ 							nods=rift(i).nods-1;
+ 							bamg_geometry.Vertices=[bamg_geometry.Vertices; [rift(i).x(2:end) rift(i).y(2:end) ones(nods,1)]];
+ 							bamg_geometry.Edges=[bamg_geometry.Edges;...
+@@ -209,12 +209,12 @@
+ 		%read tracks
+ 		track=getfieldvalue(options,'tracks');
+ 		if all(ischar(track)),
+-			A=expread(track); 
++			A=expread(track);
+ 			track=[A.x A.y];
+ 		else
+ 			track=double(track); %for some reason, it is of class "single"
+ 		end
+-		if(size(track,2)==2), track=[track 3*ones(size(track,1),1)]; end
++		if(size(track,2)==2), track=[track 3.*ones(size(track,1),1)]; end
+ 
+ 		%only keep those inside
+ 		flags=ContourToNodes(track(:,1),track(:,2),domainfile,0);
+@@ -223,7 +223,7 @@
+ 		%Add all points to bamg_geometry
+ 		nods=size(track,1);
+ 		bamg_geometry.Vertices=[bamg_geometry.Vertices; track];
+-		bamg_geometry.Edges=[bamg_geometry.Edges; [transpose(count+1:count+nods-1) transpose([count+2:count+nods])  3*ones(nods-1,1)]];
++		bamg_geometry.Edges=[bamg_geometry.Edges; [transpose(count+1:count+nods-1) transpose([count+2:count+nods])  3.*ones(nods-1,1)]];
+ 
+ 		%update counter
+ 		count=count+nods;
+@@ -234,7 +234,7 @@
+ 
+ 		%recover RequiredVertices
+ 		requiredvertices=double(getfieldvalue(options,'RequiredVertices')); %for some reason, it is of class "single"
+-		if(size(requiredvertices,2)==2), requiredvertices=[requiredvertices 4*ones(size(requiredvertices,1),1)]; end
++		if(size(requiredvertices,2)==2), requiredvertices=[requiredvertices 4.*ones(size(requiredvertices,1),1)]; end
+ 	
+ 		%only keep those inside
+ 		flags=ContourToNodes(requiredvertices(:,1),requiredvertices(:,2),domain(1),0);
+@@ -275,29 +275,29 @@
+ %}}}
+ % Bamg Options {{{
+ bamg_options.Crack=getfieldvalue(options,'Crack',0);
+-bamg_options.anisomax=getfieldvalue(options,'anisomax',10^30);
+-bamg_options.coeff=getfieldvalue(options,'coeff',1);
+-bamg_options.cutoff=getfieldvalue(options,'cutoff',10^-5);
++bamg_options.anisomax=getfieldvalue(options,'anisomax',10.^30);
++bamg_options.coeff=getfieldvalue(options,'coeff',1.);
++bamg_options.cutoff=getfieldvalue(options,'cutoff',10.^-5);
+ bamg_options.err=getfieldvalue(options,'err',0.01);
+ bamg_options.errg=getfieldvalue(options,'errg',0.1);
+ bamg_options.field=getfieldvalue(options,'field',[]);
+ bamg_options.gradation=getfieldvalue(options,'gradation',1.5);
+ bamg_options.Hessiantype=getfieldvalue(options,'Hessiantype',0);
+-bamg_options.hmin=getfieldvalue(options,'hmin',10^-100);
+-bamg_options.hmax=getfieldvalue(options,'hmax',10^100);
++bamg_options.hmin=getfieldvalue(options,'hmin',10.^-100);
++bamg_options.hmax=getfieldvalue(options,'hmax',10.^100);
+ bamg_options.hminVertices=getfieldvalue(options,'hminVertices',[]);
+ bamg_options.hmaxVertices=getfieldvalue(options,'hmaxVertices',[]);
+ bamg_options.hVertices=getfieldvalue(options,'hVertices',[]);
+ bamg_options.KeepVertices=getfieldvalue(options,'KeepVertices',1);
+-bamg_options.MaxCornerAngle=getfieldvalue(options,'MaxCornerAngle',10);
++bamg_options.MaxCornerAngle=getfieldvalue(options,'MaxCornerAngle',10.);
+ bamg_options.maxnbv=getfieldvalue(options,'maxnbv',10^6);
+-bamg_options.maxsubdiv=getfieldvalue(options,'maxsubdiv',10);
++bamg_options.maxsubdiv=getfieldvalue(options,'maxsubdiv',10.);
+ bamg_options.metric=getfieldvalue(options,'metric',[]);
+ bamg_options.Metrictype=getfieldvalue(options,'Metrictype',0);
+ bamg_options.nbjacobi=getfieldvalue(options,'nbjacobi',1);
+ bamg_options.nbsmooth=getfieldvalue(options,'nbsmooth',3);
+ bamg_options.omega=getfieldvalue(options,'omega',1.8);
+-bamg_options.power=getfieldvalue(options,'power',1);
++bamg_options.power=getfieldvalue(options,'power',1.);
+ bamg_options.splitcorners=getfieldvalue(options,'splitcorners',1);
+ bamg_options.geometricalmetric=getfieldvalue(options,'geometricalmetric',0);
+ bamg_options.verbose=getfieldvalue(options,'verbose',1);
+@@ -333,8 +333,6 @@
+ md.mesh.elementconnectivity(find(isnan(md.mesh.elementconnectivity)))=0;
+ 
+ %Check for orphan
+-reshape(md.mesh.elements,3*md.mesh.numberofelements,1);
+-(~ismember(1:md.mesh.numberofvertices,sort(unique(reshape(md.mesh.elements,3*md.mesh.numberofelements,1)))));
+ if any(~ismember(1:md.mesh.numberofvertices,sort(unique(reshape(md.mesh.elements,3*md.mesh.numberofelements,1)))))
+ 	error('Output mesh has orphans. Decrease MaxCornerAngle to prevent outside points (ex: 0.01)');
+ end
+Index: ../trunk-jpl/src/m/classes/bamggeom.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/bamggeom.py	(revision 13435)
++++ ../trunk-jpl/src/m/classes/bamggeom.py	(revision 13436)
+@@ -1,3 +1,5 @@
++import numpy
++
+ class bamggeom(object):
+ 	"""
+ 	BAMGGEOM class definition
+@@ -7,14 +9,14 @@
+ 	"""
+ 
+ 	def __init__(self,*args):    # {{{
+-		self.Vertices=[]
+-		self.Edges=[]
+-		self.TangentAtEdges=[]
+-		self.Corners=[]
+-		self.RequiredVertices=[]
+-		self.RequiredEdges=[]
+-		self.CrackedEdges=[]
+-		self.SubDomains=[]
++		self.Vertices=numpy.empty((0,3))
++		self.Edges=numpy.empty((0,3))
++		self.TangentAtEdges=numpy.empty((0,0))
++		self.Corners=numpy.empty((0,1))
++		self.RequiredVertices=numpy.empty((0,1))
++		self.RequiredEdges=numpy.empty((0,1))
++		self.CrackedEdges=numpy.empty((0,0))
++		self.SubDomains=numpy.empty((0,4))
+ 
+ 		if not len(args):
+ 			# if no input arguments, create a default object
+Index: ../trunk-jpl/src/m/classes/bamgmesh.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/bamgmesh.py	(revision 13435)
++++ ../trunk-jpl/src/m/classes/bamgmesh.py	(revision 13436)
+@@ -1,3 +1,5 @@
++import numpy
++
+ class bamgmesh(object):
+ 	"""
+ 	BAMGMESH class definition
+@@ -7,22 +9,22 @@
+ 	"""
+ 
+ 	def __init__(self,*args):    # {{{
+-		self.Vertices=[]
+-		self.Edges=[]
+-		self.Triangles=[]
+-		self.Quadrilaterals=[]
+-		self.IssmEdges=[]
+-		self.IssmSegments=[]
+-		self.VerticesOnGeomVertex=[]
+-		self.VerticesOnGeomEdge=[]
+-		self.EdgesOnGeomEdge=[]
+-		self.SubDomains=[]
+-		self.SubDomainsFromGeom=[]
+-		self.ElementConnectivity=[]
+-		self.NodalConnectivity=[]
+-		self.NodalElementConnectivity=[]
+-		self.CrackedVertices=[]
+-		self.CrackedEdges=[]
++		self.Vertices=numpy.empty((0,3))
++		self.Edges=numpy.empty((0,3))
++		self.Triangles=numpy.empty((0,0))
++		self.Quadrilaterals=numpy.empty((0,0))
++		self.IssmEdges=numpy.empty((0,0))
++		self.IssmSegments=numpy.empty((0,0))
++		self.VerticesOnGeomVertex=numpy.empty((0,0))
++		self.VerticesOnGeomEdge=numpy.empty((0,0))
++		self.EdgesOnGeomEdge=numpy.empty((0,0))
++		self.SubDomains=numpy.empty((0,4))
++		self.SubDomainsFromGeom=numpy.empty((0,0))
++		self.ElementConnectivity=numpy.empty((0,0))
++		self.NodalConnectivity=numpy.empty((0,0))
++		self.NodalElementConnectivity=numpy.empty((0,0))
++		self.CrackedVertices=numpy.empty((0,0))
++		self.CrackedEdges=numpy.empty((0,0))
+ 
+ 		if not len(args):
+ 			# if no input arguments, create a default object
+Index: ../trunk-jpl/src/m/miscellaneous/MatlabFuncs.py
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/MatlabFuncs.py	(revision 13435)
++++ ../trunk-jpl/src/m/miscellaneous/MatlabFuncs.py	(revision 13436)
+@@ -52,9 +52,24 @@
+ 		b=[item in s for item in a]
+ 
+ 	else:
+-		b=numpy.empty_like(a)
+-		for i,item in enumerate(a.flat):
+-			b.flat[i]=item in s
++		if not isinstance(s,numpy.ndarray):
++			b=numpy.empty_like(a)
++			for i,item in enumerate(a.flat):
++				b.flat[i]=item in s
++		else:
++			b=numpy.in1d(a.flat,s.flat).reshape(a.shape)
+ 
+ 	return b
+ 
++def det(a):
++	import numpy
++
++	if   a.shape==(1,):
++		return a[0]
++	elif a.shape==(1,1):
++		return a[0,0]
++	elif a.shape==(2,2):
++		return a[0,0]*a[1,1]-a[0,1]*a[1,0]
++	else:
++		raise TypeError("MatlabFunc.det only implemented for shape (2, 2), not for shape %s." % str(a.shape))
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13436-13437.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13436-13437.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13436-13437.diff	(revision 13980)
@@ -0,0 +1,60 @@
+Index: ../trunk-jpl/test/NightlyRun/test119.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test119.py	(revision 13437)
+@@ -0,0 +1,30 @@
++import numpy
++import time
++from model import *
++from bamg import *
++from MatlabFuncs import *
++
++#Simple mesh
++md=bamg(model(),'domain','../Exp/Square.exp','hmax',100000.)
++x1=md.mesh.x
++y1=md.mesh.y
++
++#hVertices
++md=bamg(model(),'domain','../Exp/Square.exp','hmax',300000.,'hVertices',numpy.array([10000.,100000.,400000.,100000.]).reshape(-1,1))
++x2=md.mesh.x
++y2=md.mesh.y
++
++#big mesh
++t0=time.time()
++md=bamg(model(),'domain','../Exp/Square.exp','hmax',3000.)
++nbelements=md.mesh.numberofelements
++elapsedtime=time.time()-t0
++
++#Fields and tolerances to track changes
++field_names     =['x1','y1','x2','y2','nbelements','elapsed time']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,0.5]
++field_values=[\
++	x1, y1,\
++	x2, y2,\
++	nbelements,elapsedtime,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test119.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.m	(revision 13436)
++++ ../trunk-jpl/test/NightlyRun/test119.m	(revision 13437)
+@@ -1,17 +1,17 @@
+ 
+ %Simple mesh
+-md=bamg(model,'domain','../Exp/Square.exp','hmax',100000);
++md=bamg(model,'domain','../Exp/Square.exp','hmax',100000.);
+ x1=md.mesh.x;
+ y1=md.mesh.y;
+ 
+ %hVertices
+-md=bamg(model,'domain','../Exp/Square.exp','hmax',300000,'hvertices',[10000 100000 400000 100000]');
++md=bamg(model,'domain','../Exp/Square.exp','hmax',300000.,'hVertices',[10000. 100000. 400000. 100000.]');
+ x2=md.mesh.x;
+ y2=md.mesh.y;
+ 
+ %big mesh
+ t0=clock;
+-md=bamg(model,'domain','../Exp/Square.exp','hmax',3000);
++md=bamg(model,'domain','../Exp/Square.exp','hmax',3000.);
+ nbelements=md.mesh.numberofelements;
+ elapsedtime=etime(clock,t0);
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13437-13438.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13437-13438.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13437-13438.diff	(revision 13980)
@@ -0,0 +1,442 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.m	(revision 13437)
++++ ../trunk-jpl/test/NightlyRun/runme.m	(revision 13438)
+@@ -105,7 +105,7 @@
+ elseif strcmpi(benchmark,'mesh'),
+ 	test_ids=intersect(test_ids,[1401:1499]);
+ elseif strcmpi(benchmark,'adolc'),
+-	test_ids=intersect(test_ids,[3001:3010]);
++	test_ids=intersect(test_ids,[3001:3020]);
+ elseif strcmpi(benchmark,'validation'),
+ 	test_ids=intersect(test_ids,[1001:1999]);
+ elseif strcmpi(benchmark,'tranforcing'),
+Index: ../trunk-jpl/test/NightlyRun/ad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad.m	(revision 13437)
++++ ../trunk-jpl/test/NightlyRun/ad.m	(revision 13438)
+@@ -3,13 +3,11 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.diagnostic.requested_outputs=StressTensorEnum;
++
+ md.autodiff.isautodiff=true;
+-md.verbose=verbose('autodiff',true);
+-
++index=1;
+ md.autodiff.independents={...
+-	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',1), ...
+-	independent('name','Surface','type','vertex','nods',md.mesh.numberofvertices)...
++	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
+ 	};
+ 
+ md.autodiff.dependents={...
+@@ -17,5 +15,4 @@
+ 	};
+ md.autodiff.driver='fos_forward';
+ 
+-md=solve(md,PrognosticSolutionEnum);
+-%md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum);
+Index: ../trunk-jpl/test/NightlyRun/test3015.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3015.m	(revision 13438)
+@@ -0,0 +1,77 @@
++%This test runs test3005 with autodiff on, and checks that 
++%the value of the scalar forward difference match a step-wise differential
++
++%First configure
++md=triangle(model,'../Exp/Square.exp',50000);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=setflowequation(md,'macayeal','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.prognostic.requested_outputs=IceVolumeEnum;
++md.verbose=verbose('autodiff',true);
++
++%setup autodiff parameters
++index=1; %this is the scalar component we are checking against
++md.autodiff.independents={...
++	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
++	};
++
++md.autodiff.dependents={...
++	dependent('name','IceVolume','type','scalar')...
++	};
++md.autodiff.driver='fos_forward';
++
++%parameters for the step-wise devivative
++delta=.001;
++h1=md.geometry.thickness(index);
++h0=h1*(1-delta);
++h2=h1*(1+delta);
++deltaH=(h2-h0);
++
++%save model:
++md2=md;
++
++%evaluate derivative by forward and backward stepping 
++%forward
++md=md2;
++md.autodiff.isautodiff=false;
++md.geometry.thickness(index)=h0;
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
++md.geometry.surface=md.geometry.bed+md.geometry.thickness;
++md=SetIceShelfBC(md);
++
++md=solve(md,PrognosticSolutionEnum);
++V0=md.results.PrognosticSolution.IceVolume;
++
++%backward
++md=md2;
++md.autodiff.isautodiff=false;
++md.geometry.thickness(index)=h2;
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
++md.geometry.surface=md.geometry.bed+md.geometry.thickness;
++md=SetIceShelfBC(md);
++
++md=solve(md,PrognosticSolutionEnum);
++V2=md.results.PrognosticSolution.IceVolume;
++
++%compute resulting derivative
++dVdh_an=(V2-V0)/deltaH;
++
++%evaluate derivative using ADOLC 
++md=md2;
++md.autodiff.isautodiff=true;
++md.geometry.thickness(index)=h1;
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
++md.geometry.surface=md.geometry.bed+md.geometry.thickness;
++md=SetIceShelfBC(md);
++
++md=solve(md,PrognosticSolutionEnum);
++%retrieve directly
++dVdh_ad=md.results.PrognosticSolution.AutodiffJacobian;
++
++disp(sprintf('dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dVdh_an,dVdh_ad));
++
++%Fields and tolerances to track changes
++field_names     ={'dV/dh-dV/dh0'};
++field_tolerances={1e-1};
++field_values={dVdh_ad-dVdh_an};
+Index: ../trunk-jpl/test/Archives/Archive3015.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3015.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3015.nc	(revision 13437)
++++ ../trunk-jpl/test/Archives/Archive3015.nc	(revision 13438)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3015.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/c/solutions/prognostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/prognostic_core.cpp	(revision 13437)
++++ ../trunk-jpl/src/c/solutions/prognostic_core.cpp	(revision 13438)
+@@ -17,6 +17,8 @@
+ 	bool save_results;
+ 	bool issmbgradients,ispdd,isdelta18o;
+ 	int  solution_type;
++	int  *requested_outputs = NULL;
++	int  numoutputs=0;
+ 
+ 	/*activate formulation: */
+ 	femmodel->SetCurrentConfiguration(PrognosticAnalysisEnum);
+@@ -27,6 +29,8 @@
+ 	femmodel->parameters->FindParam(&ispdd,SurfaceforcingsIspddEnum);
+ 	femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&numoutputs,PrognosticNumRequestedOutputsEnum);
++	if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,PrognosticRequestedOutputsEnum);
+ 
+ 	if(issmbgradients){
+ 	  _printf_(VerboseSolution(),"	call smb gradients module\n");
+@@ -46,8 +50,11 @@
+ 	if(save_results){
+ 		if(VerboseSolution()) _pprintLine_("   saving results");
+ 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum);
++		RequestedOutputsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs);
+ 	}
+ 	
++	if(solution_type==PrognosticSolutionEnum)RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ 	
+-	if(solution_type==PrognosticSolutionEnum)RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	/*Free ressources:*/
++	xDelete<int>(requested_outputs);
+ }
+Index: ../trunk-jpl/src/c/solutions/diagnostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/diagnostic_core.cpp	(revision 13437)
++++ ../trunk-jpl/src/c/solutions/diagnostic_core.cpp	(revision 13438)
+@@ -104,6 +104,8 @@
+ 		if(dim==3) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VzEnum);
+ 		RequestedOutputsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs);
+ 	}
++	
++	if(solution_type==DiagnosticSolutionEnum)RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(requested_outputs);
+Index: ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13437)
++++ ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13438)
+@@ -151,6 +151,8 @@
+ 	PrognosticSpcthicknessEnum,
+ 	PrognosticStabilizationEnum,
+ 	PrognosticVertexPairingEnum,
++	PrognosticNumRequestedOutputsEnum,
++	PrognosticRequestedOutputsEnum,
+ 	QmuIsdakotaEnum,
+ 	QmuMassFluxSegmentsEnum,
+ 	QmuNumberofpartitionsEnum,
+Index: ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13437)
++++ ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13438)
+@@ -160,6 +160,8 @@
+ 	      else if (strcmp(name,"PrognosticSpcthickness")==0) return PrognosticSpcthicknessEnum;
+ 	      else if (strcmp(name,"PrognosticStabilization")==0) return PrognosticStabilizationEnum;
+ 	      else if (strcmp(name,"PrognosticVertexPairing")==0) return PrognosticVertexPairingEnum;
++	      else if (strcmp(name,"PrognosticNumRequestedOutputs")==0) return PrognosticNumRequestedOutputsEnum;
++	      else if (strcmp(name,"PrognosticRequestedOutputs")==0) return PrognosticRequestedOutputsEnum;
+ 	      else if (strcmp(name,"QmuIsdakota")==0) return QmuIsdakotaEnum;
+ 	      else if (strcmp(name,"QmuMassFluxSegments")==0) return QmuMassFluxSegmentsEnum;
+ 	      else if (strcmp(name,"QmuNumberofpartitions")==0) return QmuNumberofpartitionsEnum;
+@@ -258,12 +260,12 @@
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+ 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+ 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+-	      else if (strcmp(name,"HutterApproximation")==0) return HutterApproximationEnum;
+-	      else if (strcmp(name,"MacAyealApproximation")==0) return MacAyealApproximationEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"MacAyealPattynApproximation")==0) return MacAyealPattynApproximationEnum;
++	      if (strcmp(name,"HutterApproximation")==0) return HutterApproximationEnum;
++	      else if (strcmp(name,"MacAyealApproximation")==0) return MacAyealApproximationEnum;
++	      else if (strcmp(name,"MacAyealPattynApproximation")==0) return MacAyealPattynApproximationEnum;
+ 	      else if (strcmp(name,"MacAyealStokesApproximation")==0) return MacAyealStokesApproximationEnum;
+ 	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
+ 	      else if (strcmp(name,"PattynApproximation")==0) return PattynApproximationEnum;
+@@ -381,12 +383,12 @@
+ 	      else if (strcmp(name,"TemperatureOld")==0) return TemperatureOldEnum;
+ 	      else if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum;
+ 	      else if (strcmp(name,"TemperatureSurface")==0) return TemperatureSurfaceEnum;
+-	      else if (strcmp(name,"TemperatureBasal")==0) return TemperatureBasalEnum;
+-	      else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"Type")==0) return TypeEnum;
++	      if (strcmp(name,"TemperatureBasal")==0) return TemperatureBasalEnum;
++	      else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum;
++	      else if (strcmp(name,"Type")==0) return TypeEnum;
+ 	      else if (strcmp(name,"Vel")==0) return VelEnum;
+ 	      else if (strcmp(name,"Velocity")==0) return VelocityEnum;
+ 	      else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
+@@ -504,12 +506,12 @@
+ 	      else if (strcmp(name,"Option")==0) return OptionEnum;
+ 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
+ 	      else if (strcmp(name,"OptionCell")==0) return OptionCellEnum;
+-	      else if (strcmp(name,"OptionChar")==0) return OptionCharEnum;
+-	      else if (strcmp(name,"OptionStruct")==0) return OptionStructEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"OptionDouble")==0) return OptionDoubleEnum;
++	      if (strcmp(name,"OptionChar")==0) return OptionCharEnum;
++	      else if (strcmp(name,"OptionStruct")==0) return OptionStructEnum;
++	      else if (strcmp(name,"OptionDouble")==0) return OptionDoubleEnum;
+ 	      else if (strcmp(name,"OptionLogical")==0) return OptionLogicalEnum;
+ 	      else if (strcmp(name,"Paterson")==0) return PatersonEnum;
+ 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
+Index: ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13437)
++++ ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13438)
+@@ -156,6 +156,8 @@
+ 		case PrognosticSpcthicknessEnum : return "PrognosticSpcthickness";
+ 		case PrognosticStabilizationEnum : return "PrognosticStabilization";
+ 		case PrognosticVertexPairingEnum : return "PrognosticVertexPairing";
++		case PrognosticNumRequestedOutputsEnum : return "PrognosticNumRequestedOutputs";
++		case PrognosticRequestedOutputsEnum : return "PrognosticRequestedOutputs";
+ 		case QmuIsdakotaEnum : return "QmuIsdakota";
+ 		case QmuMassFluxSegmentsEnum : return "QmuMassFluxSegments";
+ 		case QmuNumberofpartitionsEnum : return "QmuNumberofpartitions";
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13437)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13438)
+@@ -126,15 +126,22 @@
+ 	parameters->AddObject(new IntParam(DiagnosticNumRequestedOutputsEnum,numoutputs));
+ 	if(numoutputs)parameters->AddObject(new IntVecParam(DiagnosticRequestedOutputsEnum,requestedoutputs,numoutputs));
+ 	iomodel->DeleteData(requestedoutputs,DiagnosticRequestedOutputsEnum);
++
+ 	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,TransientRequestedOutputsEnum);
+ 	parameters->AddObject(new IntParam(TransientNumRequestedOutputsEnum,numoutputs));
+ 	if(numoutputs)parameters->AddObject(new IntVecParam(TransientRequestedOutputsEnum,requestedoutputs,numoutputs));
+ 	iomodel->DeleteData(requestedoutputs,TransientRequestedOutputsEnum);
++
+ 	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,SteadystateRequestedOutputsEnum);
+ 	parameters->AddObject(new IntParam(SteadystateNumRequestedOutputsEnum,numoutputs));
+ 	if(numoutputs)parameters->AddObject(new IntVecParam(SteadystateRequestedOutputsEnum,requestedoutputs,numoutputs));
+ 	iomodel->DeleteData(requestedoutputs,SteadystateRequestedOutputsEnum);
+ 	
++	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,PrognosticRequestedOutputsEnum);
++	parameters->AddObject(new IntParam(PrognosticNumRequestedOutputsEnum,numoutputs));
++	if(numoutputs)parameters->AddObject(new IntVecParam(PrognosticRequestedOutputsEnum,requestedoutputs,numoutputs));
++	iomodel->DeleteData(requestedoutputs,PrognosticRequestedOutputsEnum);
++
+ 	/*Before returning, create parameters in case we are running Qmu or control types runs: */
+ 	#ifdef _HAVE_CONTROL_
+ 	CreateParametersControl(&parameters,iomodel,solution_type,analysis_type);
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13437)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13438)
+@@ -91,7 +91,7 @@
+ 
+ 	xDelete<IssmDouble*>(this->data);
+ 	xDelete<bool>(this->independents);
+-	delete this->independent_objects;
++	if(this->independent_objects)delete this->independent_objects;
+ 	xDelete<bool>(this->my_elements);
+ 	xDelete<bool>(this->my_nodes);
+ 	xDelete<int>(this->my_vertices);
+@@ -251,7 +251,9 @@
+ 		_error_("Cannot carry out AD mode computations without support of ADOLC compiled in!");
+ 		#endif
+ 	}
++	else this->independent_objects=NULL;
+ 
++
+ }
+ /*}}}*/
+ /*FUNCTION IoModel::DeleteData(int num,...){{{*/
+Index: ../trunk-jpl/src/m/classes/prognostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/prognostic.m	(revision 13437)
++++ ../trunk-jpl/src/m/classes/prognostic.m	(revision 13438)
+@@ -11,6 +11,7 @@
+ 		 stabilization          = 0;
+ 		 vertex_pairing         = NaN;
+ 		 penalty_factor         = 0;
++		 requested_outputs       = NaN;
+ 	end
+ 	methods
+ 		function obj = prognostic(varargin) % {{{
+@@ -44,7 +45,11 @@
+ 			md = checkfield(md,'prognostic.hydrostatic_adjustment','values',{'Absolute' 'Incremental'});
+ 			md = checkfield(md,'prognostic.stabilization','values',[0 1 2 3]);
+ 			md = checkfield(md,'prognostic.min_thickness','>',0);
++			if ~isempty(md.prognostic.requested_outputs),
++				md = checkfield(md,'prognostic.requested_outputs','size',[NaN 1]);
++			end
+ 
++
+ 		end % }}}
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   Prognostic solution parameters:'));
+@@ -56,6 +61,7 @@
+ 			disp(sprintf('\n      %s','Penalty options:'));
+ 			fielddisplay(obj,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset');
+ 			fielddisplay(obj,'vertex_pairing','pairs of vertices that are penalized');
++			fielddisplay(obj,'requested_outputs','additional outputs requested');
+ 
+ 		end % }}}
+ 		function marshall(obj,fid) % {{{
+@@ -65,6 +71,7 @@
+ 			WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);
+ 			WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double');
++			WriteData(fid,'object',obj,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/enum/PrognosticNumRequestedOutputsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PrognosticNumRequestedOutputsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/PrognosticNumRequestedOutputsEnum.m	(revision 13438)
+@@ -0,0 +1,11 @@
++function macro=PrognosticNumRequestedOutputsEnum()
++%PROGNOSTICNUMREQUESTEDOUTPUTSENUM - Enum of PrognosticNumRequestedOutputs
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=PrognosticNumRequestedOutputsEnum()
++
++macro=StringToEnum('PrognosticNumRequestedOutputs');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13437)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13438)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=484;
++macro=486;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13437)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13438)
+@@ -1408,6 +1408,26 @@
+ 
+ 	return StringToEnum('PrognosticVertexPairing')[0]
+ 
++def PrognosticNumRequestedOutputsEnum():
++	"""
++	PROGNOSTICNUMREQUESTEDOUTPUTSENUM - Enum of PrognosticNumRequestedOutputs
++
++	   Usage:
++	      macro=PrognosticNumRequestedOutputsEnum()
++	"""
++
++	return StringToEnum('PrognosticNumRequestedOutputs')[0]
++
++def PrognosticRequestedOutputsEnum():
++	"""
++	PROGNOSTICREQUESTEDOUTPUTSENUM - Enum of PrognosticRequestedOutputs
++
++	   Usage:
++	      macro=PrognosticRequestedOutputsEnum()
++	"""
++
++	return StringToEnum('PrognosticRequestedOutputs')[0]
++
+ def QmuIsdakotaEnum():
+ 	"""
+ 	QMUISDAKOTAENUM - Enum of QmuIsdakota
+@@ -4856,5 +4876,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 484
++	return 486
+ 
+Index: ../trunk-jpl/src/m/enum/PrognosticRequestedOutputsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/PrognosticRequestedOutputsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/PrognosticRequestedOutputsEnum.m	(revision 13438)
+@@ -0,0 +1,11 @@
++function macro=PrognosticRequestedOutputsEnum()
++%PROGNOSTICREQUESTEDOUTPUTSENUM - Enum of PrognosticRequestedOutputs
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=PrognosticRequestedOutputsEnum()
++
++macro=StringToEnum('PrognosticRequestedOutputs');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13438-13439.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13438-13439.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13438-13439.diff	(revision 13980)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/m/classes/thermal.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.py	(revision 13438)
++++ ../trunk-jpl/src/m/classes/thermal.py	(revision 13439)
+@@ -70,9 +70,12 @@
+ 		md = checkfield(md,'thermal.stabilization','numel',[1],'values',[0,1,2])
+ 		md = checkfield(md,'thermal.spctemperature','forcing',1)
+ 		if EnthalpyAnalysisEnum() in analyses and (md.thermal.isenthalpy or solution==EnthalpySolutionEnum()) and md.mesh.dimension==3:
+-			pos=numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices,:])))
+-			replicate=numpy.tile(md.geometry.surface-md.mesh.z,(1,numpy.size(md.thermal.spctemperature,axis=1)))
+-			md = checkfield(md,'thermal.spctemperature(numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices,:]))))','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate[pos],'message',"spctemperature should be below the adjusted melting point")
++			pos=numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices])))
++#			need to know if md.thermal.spctemperature can have multiple columns?
++#			replicate=numpy.tile(md.geometry.surface-md.mesh.z,(1,numpy.size(md.thermal.spctemperature,axis=1)))
++#			md = checkfield(md,'thermal.spctemperature[numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices,:])))]','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate[pos],'message',"spctemperature should be below the adjusted melting point")
++			replicate=numpy.tile(md.geometry.surface-md.mesh.z,(1))
++			md = checkfield(md,'thermal.spctemperature[numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices])))]','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate[pos],'message',"spctemperature should be below the adjusted melting point")
+ 			md = checkfield(md,'thermal.isenthalpy','numel',[1],'values',[0,1])
+ 
+ 		return md
+Index: ../trunk-jpl/src/m/classes/matice.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/matice.py	(revision 13438)
++++ ../trunk-jpl/src/m/classes/matice.py	(revision 13439)
+@@ -7,7 +7,7 @@
+ 
+ class matice(object):
+ 	"""
+-	MATERIALS class definition
++	MATICE class definition
+ 
+ 	   Usage:
+ 	      matice=matice();
Index: /issm/oecreview/Archive/13393-13976/ISSM-13439-13440.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13439-13440.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13439-13440.diff	(revision 13980)
@@ -0,0 +1,334 @@
+Index: ../trunk-jpl/src/m/plot/plot_manager.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_manager.py	(revision 13439)
++++ ../trunk-jpl/src/m/plot/plot_manager.py	(revision 13440)
+@@ -1,7 +1,11 @@
+ from pairoptions import *
+ import pylab as p
+-from checkplotoptions import *
+-from plot_mesh import *
++from checkplotoptions import checkplotoptions
++from plot_mesh import plot_mesh
++from processmesh import processmesh
++from processdata import processdata
++from plot_unit import plot_unit
++from applyoptions import applyoptions
+ 
+ def plot_manager(md,options,subplotwidth,nlines,ncols,i):
+ 	'''
+@@ -24,12 +28,35 @@
+ 	if isinstance(data,(str,unicode)):
+ 
+ 		# convert string to lower case for a case-insensitive comparison
+-		if data.lower()=='mesh': plot_mesh(md,options,nlines,ncols,i)
++		if data.lower()=='mesh': 
++			plot_mesh(md,options,nlines,ncols,i)
++			return
+ 		else:
+ 			print "WARNING: '%s' is not implemented or is not a valid string for option 'data'" % data
+ 
+ 	#elif data in vars(md):
+-	else:
+-		print "'data' not a string, plotting model properties yet to be implemented..."
++	#else:
++		#print "'data' not a string, plotting model properties yet to be implemented..."
+ 
+-	
++	#Overlay plot
++
++	#Gridded plot
++
++	#Section plot
++
++	#Profile plot
++
++	#process data and model
++	x,y,z,elements,is2d,isplanet=processmesh(md,data,options)
++	data2,datatype=processdata(md,data,options)
++
++	#standard plot
++	p.subplot(nlines,ncols,i)
++
++	#plot unit
++	plot_unit(x,y,z,elements,data2,is2d,isplanet,datatype,options)
++
++	#apply all options
++	applyoptions(md,data2,options)
++
++	#ground overlay on kml plot_unit
+Index: ../trunk-jpl/src/m/plot/plot_mesh.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_mesh.py	(revision 13439)
++++ ../trunk-jpl/src/m/plot/plot_mesh.py	(revision 13440)
+@@ -12,7 +12,7 @@
+ 		See also: PLOTMODEL
+ 	'''
+ 
+-	x,y,z,elements,is2d=processmesh(md,[],options)
++	x,y,z,elements,is2d,isplanet=processmesh(md,[],options)
+ 
+ 	if is2d:
+ 		p.subplot(nlines,ncols,i)
+Index: ../trunk-jpl/src/m/plot/processmesh.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/processmesh.py	(revision 13439)
++++ ../trunk-jpl/src/m/plot/processmesh.py	(revision 13440)
+@@ -16,7 +16,7 @@
+ 	if md.mesh.numberofvertices==md.mesh.numberofelements:
+ 		raise ValueError('processmesh error: the number of elements is the same as the number of nodes')
+ 
+-	if not data or not isinstance(data,dict):
++	if len(data)==0 or not isinstance(data,dict):
+ 		
+ 		if 'latlon' not in options.getfieldvalue('coord','xy').lower(): #convert to lower case for comparison
+ 			x=md.mesh.x
+@@ -51,20 +51,20 @@
+ 			else:
+ 				is2d=0
+ 		else:
+-			raise ValueError('processmesh error: dim = %d not supported')
++			raise ValueError('processmesh error: dim = %d not supported' % md.mesh.dimension)
+ 
+ 		#layer projection?
+ 		if options.getfieldvalue('layer',0)>=1:
+ 			 if 'latlon' in options.getfieldvalue('coord','xy').lower():
+ 				 raise ValueError('processmesh error: cannot work with 3D mesh in lat-lon coords')
+-			#we modify (w/c?) the mesh temporarily to a 2D mesh from which the 3D mesh was extruded
++			#we modify the mesh temporarily to a 2D mesh from which the 3D mesh was extruded
+ 			 x=x2d
+ 			 y=y2d
+ 			 z=zeros(size(x2d))
+ 			 elements=elements2d
+ 	
+ 	else:
+-		#Process mesh for plotting (triangulation for 2D, polycollection for 3D?)
++		#Process mesh for plotting 
+ 		if md.mesh.dimension==2:
+ 			is2d=1
+ 		else:
+@@ -78,9 +78,10 @@
+ 		y=y*unit
+ 		z=z*unit
+ 
+-	##is model a member of planet class? (won't work until planet class defined)
+-	#if isinstance(md,planet):
+-	#	isplanet=1
+-	#else:
+-	#	isplanet=0
+-	return x,y,z,elements,is2d
++	#is model a member of planet class? (workaround until planet class defined)
++	if md.__class__.__name__!='model':
++		isplanet=1
++	else:
++		isplanet=0
++
++	return x,y,z,elements,is2d,isplanet
+Index: ../trunk-jpl/src/m/plot/processdata.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/processdata.py	(revision 0)
++++ ../trunk-jpl/src/m/plot/processdata.py	(revision 13440)
+@@ -0,0 +1,75 @@
++from math import isnan
++import numpy as npy
++
++def processdata(md,data,options):
++	"""
++	PROCESSDATA - process data to be plotted
++
++		datatype = 1 -> elements
++		datatype = 2 -> nodes
++		datatype = 3 -> node quivers
++		datatype = 4 -> patch
++
++		Usage:
++			data,datatype=processdata(md,data,options);
++
++		See also: PLOTMODEL, PROCESSMESH
++	"""
++
++	#check format
++	if (len(data)==0 or (len(data)==1 and not isinstance(data,dict) and isnan(data).all())):
++		raise ValueError("processdata error message: 'data' provided is empty")
++
++	#needed later on
++	if md.mesh.numberofvertices2d:
++		numberofvertices2d=md.mesh.numberofvertices2d
++		numberofelements2d=md.mesh.numberofelements2d
++	else:
++		numberofvertices2d=npy.nan
++		numberofelements2d=npy.nan
++
++	#process patch
++
++	#initialize datatype
++	datatype=0
++
++	#get datasize
++	if npy.ndim(data)==1:
++		datasize=npy.array([len(data),1])
++	else:
++		datasize=shape(data)
++	
++	#process NaN's if any
++	if options.exist('nan'):
++		data[npy.isnan(data)]=options.getfieldvalue('nan',0)
++
++	#non-patch processing 
++
++	#element data
++	if datasize[0]==md.mesh.numberofelements and datasize[1]==1:
++		
++		#initialize datatype if non patch
++		if datatype!=4 and datatype!=5:
++			datatype=1
++
++		#mask?
++
++		#log?
++
++	#node data
++	if datasize[0]==md.mesh.numberofvertices and datasize[1]==1:
++		datatype=2
++
++		#mask?
++
++		#log?
++
++	#layer projection?
++
++	#control arrow density if quiver plot
++
++	#if datatype is still zero, error out
++	if datatype==0:
++		raise ValueError("processdata error: data provided not recognized or not supported")
++	else:
++		return data, datatype
+Index: ../trunk-jpl/src/m/plot/plotmodel.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plotmodel.py	(revision 13439)
++++ ../trunk-jpl/src/m/plot/plotmodel.py	(revision 13440)
+@@ -40,7 +40,7 @@
+ 	
+ 	#Go through plots
+ 	if numberofplots:
+-	
++		
+ 		#Create figure
+ 		#plots will be visible by default if ipython is run in interactive mode (invoked by ipython --pylab)
+ 		#handling the 'visible' option will need some check on whether ipython is currently in interactive or non-interactive mode
+@@ -51,8 +51,7 @@
+ 			p.figure(figurenumber,figsize=figsize)
+ 		else:
+ 			p.figure(figurenumber)
+-
+-	
++			
+ 		#try:
+ 		for i in xrange(numberofplots):
+ 			plot_manager(options.list[i].getfieldvalue('model',md),options.list[i],subplotwidth,nlines,ncols,i)
+Index: ../trunk-jpl/src/m/plot/applyoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.py	(revision 13439)
++++ ../trunk-jpl/src/m/plot/applyoptions.py	(revision 13440)
+@@ -138,14 +138,18 @@
+ 
+ 	#grid {{{
+ 	if options.exist('grid'):
+-		p.grid()
++		if 'on' in options.getfieldvalue('grid','on'):
++			p.grid()
+ 	#}}}
+ 
+ 	#colormap
+ 
+ 	#wrapping
+ 
+-	#colorbar
++	#colorbar {{{
++	if 'on' in options.getfieldvalue('colorbar','on'):
++		p.colorbar()
++	#}}}
+ 
+ 	#area
+ 
+@@ -161,9 +165,6 @@
+ 
+ 	#contours
+ 
+-
+-
+-
+ 	#axis positions
+ 
+ 	#figure position
+Index: ../trunk-jpl/src/m/plot/processdata.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/processdata.m	(revision 13439)
++++ ../trunk-jpl/src/m/plot/processdata.m	(revision 13440)
+@@ -47,10 +47,10 @@
+ 	datatype=0;
+ end
+ 
+-%get datatype
++%get datasize
+ datasize=size(data);
+ 
+-%Process NaN if any (do not now before mask is applied)
++%Process NaN if any (do not know before mask is applied)
+ if exist(options,'nan')
+ 	data(find(isnan(data)))=getfieldvalue(options,'nan',0);
+ end
+Index: ../trunk-jpl/src/m/plot/plot_unit.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_unit.py	(revision 0)
++++ ../trunk-jpl/src/m/plot/plot_unit.py	(revision 13440)
+@@ -0,0 +1,49 @@
++import pylab as p
++
++def plot_unit(x,y,z,elements,data,is2d,isplanet,datatype,options):
++	"""
++	PLOT_UNIT - unit plot, display data
++
++		Usage:
++			plot_unit(x,y,z,elements,data,is2d,isplanet,datatype,options)
++
++		See also: PLOTMODEL, PLOT_MANAGER
++	"""
++
++	#edgecolor
++	edgecolor=options.getfieldvalue('edgecolor','None')
++
++	#number of colorlevels for plots
++	colorlevels=options.getfieldvalue('colorlevels',256)
++
++	if datatype==1:
++		#element plot
++		if is2d:
++			p.tripcolor(x,y,elements,data,colorlevels)
++		else:
++			raise ValueError('plot_unit error: 3D element plot not supported yet')
++		return
++
++	elif datatype==2:
++		#node plot
++		if is2d:
++			p.tricontourf(x,y,elements,data,colorlevels)
++		else:
++			raise ValueError('plot_unit error: 3D node plot not supported yet')
++		return
++
++	elif datatype==3:
++		print 'plot_unit message: quiver plot not implemented yet'
++		return
++
++	elif datatype==4:
++		#P1 patch plot
++		print 'plot_unit message: P1 patch plot not implemented yet'
++		return
++
++	elif datatype==5:
++		print 'plot_unit message: P0 patch plot not implemented yet'
++		return
++
++	else:
++		raise ValueError('datatype=%d not supported' % datatype)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13440-13441.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13440-13441.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13440-13441.diff	(revision 13980)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/modules/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/modules/python/Makefile.am	(revision 13440)
++++ ../trunk-jpl/src/modules/python/Makefile.am	(revision 13441)
+@@ -6,6 +6,7 @@
+ if MODULES
+ lib_LTLIBRARIES = BamgConvertMesh.la\
+ 						BamgMesher.la\
++						ContourToMesh.la\
+ 						ContourToNodes.la\
+ 						ElementConnectivity.la\
+ 						EnumToString.la\
+@@ -64,6 +65,10 @@
+ 								../BamgMesher/BamgMesher.h
+ BamgMesher_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+ 
++ContourToMesh_la_SOURCES = ../ContourToMesh/ContourToMesh.cpp\
++									 ../ContourToMesh/ContourToMesh.h
++ContourToMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
+ ContourToNodes_la_SOURCES = ../ContourToNodes/ContourToNodes.cpp\
+ 									 ../ContourToNodes/ContourToNodes.h
+ ContourToNodes_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13441-13442.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13441-13442.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13441-13442.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/scripts/report.sh
+===================================================================
+--- ../trunk-jpl/scripts/report.sh	(revision 13441)
++++ ../trunk-jpl/scripts/report.sh	(revision 13442)
+@@ -214,7 +214,7 @@
+ 	<th $BODY_FONT>Test name</th> 
+ 	<th $BODY_FONT>Field checked</th>
+ 	</tr>
+-	$(cat matlab_short.log | while read line
++	$(cat python_short.log | while read line
+ do
+ 	echo "<tr>"
+ 	STATUS=`echo $line | awk '{print $1}'`
Index: /issm/oecreview/Archive/13393-13976/ISSM-13442-13443.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13442-13443.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13442-13443.diff	(revision 13980)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/src/m/classes/prognostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/prognostic.m	(revision 13442)
++++ ../trunk-jpl/src/m/classes/prognostic.m	(revision 13443)
+@@ -11,7 +11,7 @@
+ 		 stabilization          = 0;
+ 		 vertex_pairing         = NaN;
+ 		 penalty_factor         = 0;
+-		 requested_outputs       = NaN;
++		 requested_outputs      = NaN;
+ 	end
+ 	methods
+ 		function obj = prognostic(varargin) % {{{
+Index: ../trunk-jpl/src/m/classes/prognostic.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/prognostic.py	(revision 13442)
++++ ../trunk-jpl/src/m/classes/prognostic.py	(revision 13443)
+@@ -22,6 +22,7 @@
+ 		self.stabilization          = 0
+ 		self.vertex_pairing         = float('NaN')
+ 		self.penalty_factor         = 0
++		self.requested_outputs      = float('NaN')
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -34,6 +35,7 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'min_thickness','minimum ice thickness allowed'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' '))
+ 		string="%s\n%s"%(string,fielddisplay(self,'stabilization','0->no, 1->artificial_diffusivity, 2->streamline upwinding, 3->discontinuous Galerkin'))
++		string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested'))
+ 
+ 		return string
+ 		#}}}
+@@ -66,6 +68,7 @@
+ 		md = checkfield(md,'prognostic.hydrostatic_adjustment','values',['Absolute','Incremental'])
+ 		md = checkfield(md,'prognostic.stabilization','values',[0,1,2,3])
+ 		md = checkfield(md,'prognostic.min_thickness','>',0)
++		md = checkfield(md,'prognostic.requested_output','size',[float('NaN'),1])
+ 
+ 		return md
+ 	# }}}
+@@ -77,5 +80,6 @@
+ 		WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3)
+ 		WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
++		WriteData(fid,'object',self,'fieldname','requested_outputs','format','DoubleMat','mattype',3);
+ 	# }}}
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13443-13444.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13443-13444.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13443-13444.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/prognostic.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/prognostic.py	(revision 13443)
++++ ../trunk-jpl/src/m/classes/prognostic.py	(revision 13444)
+@@ -68,7 +68,7 @@
+ 		md = checkfield(md,'prognostic.hydrostatic_adjustment','values',['Absolute','Incremental'])
+ 		md = checkfield(md,'prognostic.stabilization','values',[0,1,2,3])
+ 		md = checkfield(md,'prognostic.min_thickness','>',0)
+-		md = checkfield(md,'prognostic.requested_output','size',[float('NaN'),1])
++		md = checkfield(md,'prognostic.requested_outputs','size',[float('NaN'),1])
+ 
+ 		return md
+ 	# }}}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13444-13445.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13444-13445.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13444-13445.diff	(revision 13980)
@@ -0,0 +1,45 @@
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13444)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13445)
+@@ -80,11 +80,6 @@
+ 	/*out of solution_type, figure out types of analyses needed in the femmodel: */
+ 	AnalysisConfiguration(&analyses,&numanalyses,solution_type);
+ 
+-	/*before we create the model, start the trace on for AD mode: */
+-	#ifdef _HAVE_ADOLC_
+-	trace_on(1);
+-	#endif
+-
+ 	/*Create femmodel, using input file: */
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Barrier(MPI_COMM_WORLD); start_init=MPI_Wtime();
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13444)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13445)
+@@ -52,7 +52,7 @@
+ 	this->data=xNew<IssmDouble*>(MaximumNumberOfEnums);
+ 	for(int i=0;i<MaximumNumberOfEnums;i++) this->data[i]=NULL;
+ 
+-	/*If we are running in AD mode, we need to declare our independent variables now, 
++	/*If we are running in AD mode, we need to start the trace and declare our independent variables now, 
+ 	 *and prevent them from being erased during successive calls to iomodel->FetchConstants, iomodel->FetchData and 
+ 	 iomodel->DeleteData:*/
+ 	this->DeclareIndependents();
+@@ -219,10 +219,14 @@
+ 
+ 	this->FetchData(&autodiff,AutodiffIsautodiffEnum);
+ 	if(autodiff){
+-	
++
+ 		this->FetchData(&numberofvertices,MeshNumberofverticesEnum);
+ 		
+ 		#ifdef _HAVE_ADOLC_
++
++		/*Start the trace: */
++		trace_on(1);
++
+ 		/*build dataset made of independent objects: */
+ 		this->independent_objects=new DataSet();
+ 		this->FetchData(&num_independent_objects,AutodiffNumIndependentObjectsEnum);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13445-13446.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13445-13446.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13445-13446.diff	(revision 13980)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13445)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13446)
+@@ -19,9 +19,6 @@
+ 	int         num_dependents;
+ 	int         num_independents;
+ 	IssmDouble *axp                = NULL;
+-	int         configuration_type;
+-	int         solveSize;
+-	int         edf_n                ,edf_m;
+ 	double     *xp                 = NULL;
+ 	int         anIndepNum;
+ 
+@@ -47,12 +44,6 @@
+ 				xp[i]=reCast<double,IssmDouble>(axp[i]);
+ 			}
+ 
+-			/* get the dimension for the solverx arguments*/
+-			parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-			solveSize=nodes->NumberOfDofs(configuration_type,FsetEnum);
+-			edf_n=solveSize*(solveSize+1);
+-			edf_m=solveSize;
+-
+ 			/*get the EDF pointer:*/
+ 			ext_diff_fct *anEDF_for_solverx_p=dynamic_cast<GenericParam<Adolc_edf> * >(parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
+ 
+@@ -64,16 +55,16 @@
+ 			// anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
+ 			
+ 			/*allocate the space for the parameters to invoke the forward methods:*/
+-			anEDF_for_solverx_p->dp_x=xNew<double>(edf_n);
+-			anEDF_for_solverx_p->dp_X=xNew<double>(edf_n);
+-			anEDF_for_solverx_p->dpp_X=xNew<double>(edf_n, num_independents);
+-			anEDF_for_solverx_p->dp_y=xNew<double>(edf_m);
+-			anEDF_for_solverx_p->dp_Y=xNew<double>(edf_m);
+-			anEDF_for_solverx_p->dpp_Y=xNew<double>(edf_m, num_independents);
+-			anEDF_for_solverx_p->dp_U=xNew<double>(edf_m);
+-			anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,edf_m);
+-			anEDF_for_solverx_p->dp_Z=xNew<double>(edf_n);
+-			anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,edf_n);
++			anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
++			anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
++			anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, num_independents);
++			anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
++			anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
++			anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, num_independents);
++			anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
++			anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,anEDF_for_solverx_p->max_m);
++			anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
++			anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,anEDF_for_solverx_p->max_n);
+ 
+ 			/* Call AD driver:*/
+ 			// single direction:
Index: /issm/oecreview/Archive/13393-13976/ISSM-13446-13447.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13446-13447.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13446-13447.diff	(revision 13980)
@@ -0,0 +1,82 @@
+Index: ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp	(revision 13446)
++++ ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp	(revision 13447)
+@@ -113,7 +113,14 @@
+ 		*pdataref=mxCreateString(string);
+ }
+ /*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref){{{*/
++void WriteData(mxArray** pdataref){
+ 
++		;
++
++}
++/*}}}*/
++
+ /*ISSM objects*/
+ /*FUNCTION WriteData(mxArray** pdataref,BamgGeom* bamggeom){{{*/
+ void WriteData(mxArray** pdataref,BamgGeom* bamggeom){
+Index: ../trunk-jpl/src/c/matlab/io/matlabio.h
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/matlabio.h	(revision 13446)
++++ ../trunk-jpl/src/c/matlab/io/matlabio.h	(revision 13447)
+@@ -25,6 +25,7 @@
+ void WriteData(mxArray** pdataref,bool boolean);
+ void WriteData(mxArray** pdataref,double scalar);
+ void WriteData(mxArray** pdataref,char* string);
++void WriteData(mxArray** pdataref);
+ void WriteData(mxArray** pdataref,BamgGeom* bamggeom);
+ void WriteData(mxArray** pdataref,BamgMesh* bamgmesh);
+ 
+Index: ../trunk-jpl/src/c/python/io/WritePythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13446)
++++ ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13447)
+@@ -45,7 +45,13 @@
+ 
+ 	PyTuple_SetItem(tuple, index, array);
+ }/*}}}*/
++/*FUNCTION WriteData(PyObject* py_tuple,int index){{{*/
++void WriteData(PyObject* py_tuple, int index){
++	
++	PyTuple_SetItem(py_tuple, index, Py_None);
+ 
++}/*}}}*/
++
+ /*ISSM objects*/
+ /*FUNCTION WriteData(PyObject* py_tuple,int index,BamgGeom* bamggeom){{{*/
+ void WriteData(PyObject* py_tuple,int index,BamgGeom* bamggeom){
+@@ -127,7 +133,7 @@
+ 
+ }/*}}}*/
+ /*FUNCTION WriteData(PyObject* py_tuple,int index,SeqVec<double>* vector){{{*/
+-void WriteData(PyObject* tuple,int index,SeqVec<double>* vector){
++void WriteData(PyObject* py_tuple,int index,SeqVec<double>* vector){
+ 	
+ 	int M;
+ 	double* buffer=NULL;
+@@ -139,6 +145,6 @@
+ 	dim=(npy_intp)M;
+ 	array=PyArray_SimpleNewFromData(1,&dim,NPY_DOUBLE,buffer);
+ 	
+-	PyTuple_SetItem(tuple, index, array);
++	PyTuple_SetItem(py_tuple, index, array);
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/modules/ContourToMesh/ContourToMesh.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/ContourToMesh/ContourToMesh.cpp	(revision 13446)
++++ ../trunk-jpl/src/modules/ContourToMesh/ContourToMesh.cpp	(revision 13447)
+@@ -72,9 +72,11 @@
+ 	/* output: */
+ 	if (strcmp(interptype,"node")==0){
+ 		WriteData(PLHS0,in_nod);
++		WriteData(PLHS1);
+ 	}
+ 	else if (strcmp(interptype,"element")==0){
+ 		WriteData(PLHS0,in_elem);
++		WriteData(PLHS1);
+ 	}
+ 	else if (strcmp(interptype,"element and node")==0){
+ 		WriteData(PLHS0,in_nod);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13447-13448.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13447-13448.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13447-13448.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/python/io/pythonio.h
+===================================================================
+--- ../trunk-jpl/src/c/python/io/pythonio.h	(revision 13447)
++++ ../trunk-jpl/src/c/python/io/pythonio.h	(revision 13448)
+@@ -18,6 +18,7 @@
+ void WriteData(PyObject* py_tuple,int index, double* matrix, int M,int N);
+ void WriteData(PyObject* py_tuple,int index, int integer);
+ void WriteData(PyObject* py_tuple,int index, char* string);
++void WriteData(PyObject* py_tuple,int index);
+ void WriteData(PyObject* py_tuple,int index, SeqMat<double>* matrix);
+ void WriteData(PyObject* py_tuple,int index, SeqVec<double>* vector);
+ void WriteData(PyObject* py_tuple,int index, BamgGeom* bamggeom);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13448-13449.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13448-13449.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13448-13449.diff	(revision 13980)
@@ -0,0 +1,122 @@
+Index: ../trunk-jpl/src/m/geometry/FlagElements.py
+===================================================================
+--- ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 13448)
++++ ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 13449)
+@@ -1,7 +1,7 @@
+ import numpy
+ import os
+ #from basinzoom import *
+-#from ContourToMesh import *
++from ContourToMesh import *
+ from MatlabFuncs import *
+ 
+ def FlagElements(md,region):
+@@ -40,12 +40,13 @@
+ 			if not os.path.exists(region):
+ 				if len(region)>3 and not strcmp(region[-4:],'.exp'):
+ 					raise IOError("Error: File 'region' not found!" % region)
++				raise RuntimeError("FlagElements -- basinzoom not yet converted.")
+ 				xlim,ylim=basinzoom('basin',region)
+ 				flag_nodes=numpy.logical_and(numpy.logical_and(md.mesh.x<xlim[1],md.mesh.x>xlim[0]),numpy.logical_and(md.mesh.y<ylim[1],md.mesh.y>ylim[0])).astype(float)
+ 				flag=numpy.prod(flag_nodes[md.mesh.elements],axis=1)
+ 			else:
+ 				#ok, flag elements
+-				flag=ContourToMesh(md.mesh.elements[:,0:3],md.mesh.x,md.mesh.y,region,'element',1)
++				[flag,fnone]=ContourToMesh(md.mesh.elements[:,0:3],md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),region,'element',1)
+ 
+ 		if invert:
+ 			flag=numpy.logical_not(flag)
+Index: ../trunk-jpl/src/m/parameterization/setmask.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setmask.py	(revision 13448)
++++ ../trunk-jpl/src/m/parameterization/setmask.py	(revision 13449)
+@@ -1,55 +1,51 @@
+-from numpy import *
+-import FlagElements as fe
++import numpy
++from FlagElements import *
+ 
+ def setmask(md, floatingicename, groundedicename):
+-	#SETMASK - establish boundaries between grounded and floating ice.
+-	#
+-	#   By default, ice is considered grounded. The contour floatingicename defines nodes 
+-	#   for which ice is floating. The contour groundedicename defines nodes inside an floatingice, 
+-	#   that are grounded (ie: ice rises, islands, etc ...)
+-	#   All input files are in the Argus format (extension .exp).
+-	#
+-	#   Usage:
+-	#      md=setmask(md,floatingicename,groundedicename)
+-	#
+-	#   Examples:
+-	#      md=setmask(md,'all','');
+-	#      md=setmask(md,'Iceshelves.exp','Islands.exp');
++	"""
++	SETMASK - establish boundaries between grounded and floating ice.
+ 
+-	#%Get assigned fields
++	   By default, ice is considered grounded. The contour floatingicename defines nodes 
++	   for which ice is floating. The contour groundedicename defines nodes inside an floatingice, 
++	   that are grounded (ie: ice rises, islands, etc ...)
++	   All input files are in the Argus format (extension .exp).
++
++	   Usage:
++	      md=setmask(md,floatingicename,groundedicename)
++
++	   Examples:
++	      md=setmask(md,'all','');
++	      md=setmask(md,'Iceshelves.exp','Islands.exp');
++	"""
++
++	#Get assigned fields
+ 	x = md.mesh.x
+ 	y = md.mesh.y
+ 	elements = md.mesh.elements
+ 
+ 	#Assign elementonfloatingice, elementongroundedice, vertexongroundedice and vertexonfloatingice. Only change at your own peril! This is synchronized heavily with the GroundingLineMigration module. {{{
+-	elementonfloatingice = fe.FlagElements(md, floatingicename)
+-	elementongroundedice = fe.FlagElements(md, groundedicename) 
++	elementonfloatingice = FlagElements(md, floatingicename)
++	elementongroundedice = FlagElements(md, groundedicename) 
+ 
+ 	#Because groundedice nodes and elements can be included into an floatingice, we need to update. Remember, all the previous 
+ 	#arrays come from domain outlines that can intersect one another: 
+ 
+-	elementonfloatingice = logical_and(elementonfloatingice,~elementongroundedice)
+-	elementongroundedice = ~elementonfloatingice
++	elementonfloatingice = numpy.logical_and(elementonfloatingice,numpy.logical_not(elementongroundedice))
++	elementongroundedice = numpy.logical_not(elementonfloatingice)
+ 
+ 	#the order here is important. we choose vertexongroundedice as default on the grounding line.
+-	vertexonfloatingice = zeros(md.mesh.numberofvertices,'bool')
+-	vertexongroundedice = zeros(md.mesh.numberofvertices,'bool')
++	vertexonfloatingice = numpy.zeros(md.mesh.numberofvertices,'bool')
++	vertexongroundedice = numpy.zeros(md.mesh.numberofvertices,'bool')
++	vertexongroundedice[md.mesh.elements[numpy.nonzero(elementongroundedice),:].astype(int)-1]=True
++	vertexonfloatingice[numpy.nonzero(numpy.logical_not(vertexongroundedice))]=True
++	#}}}
+ 
+-	pos=argwhere(elementongroundedice==1)
+-	pos=md.mesh.elements[pos,:]-1
+-	if pos.size:
+-		vertexongroundedice[pos]=True
++	#Return: 
++	md.mask.elementonfloatingice = elementonfloatingice.astype(float)
++	md.mask.vertexonfloatingice = vertexonfloatingice.astype(float)
++	md.mask.elementongroundedice = elementongroundedice.astype(float)
++	md.mask.vertexongroundedice = vertexongroundedice.astype(float)
++	md.mask.vertexonwater = numpy.zeros(md.mesh.numberofvertices)
++	md.mask.elementonwater = numpy.zeros(md.mesh.numberofelements)
+ 
+-	pos=argwhere(~vertexongroundedice)
+-	if pos.size:
+-		vertexonfloatingice[pos]=True;
+-	#%}}}
+-
+-	#Return: 
+-	md.mask.elementonfloatingice = double(elementonfloatingice)
+-	md.mask.vertexonfloatingice = double(vertexonfloatingice)
+-	md.mask.elementongroundedice = double(elementongroundedice)
+-	md.mask.vertexongroundedice = double(vertexongroundedice)
+-	md.mask.vertexonwater = zeros(md.mesh.numberofvertices)
+-	md.mask.elementonwater = zeros(md.mesh.numberofelements)
+ 	return md
Index: /issm/oecreview/Archive/13393-13976/ISSM-13449-13450.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13449-13450.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13449-13450.diff	(revision 13980)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp	(revision 13449)
++++ ../trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp	(revision 13450)
+@@ -35,6 +35,10 @@
+ 					Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters,"TotalSmb",false,0);
+ 					results->AddObject(new GenericExternalResult<double>(results->Size()+1,TotalSmbEnum,reCast<IssmPDouble>(output_value),step,time));
+ 					break;
++				case MaxVelEnum:
++					Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters,"MaxVel",false,0);
++					results->AddObject(new GenericExternalResult<double>(results->Size()+1,MaxVelEnum,reCast<IssmPDouble>(output_value),step,time));
++					break;
+ 				default:
+ 					/*create this output in the element inputs, and then transfer to results:*/
+ 					for(int j=0;j<elements->Size();j++){
Index: /issm/oecreview/Archive/13393-13976/ISSM-13450-13451.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13450-13451.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13450-13451.diff	(revision 13980)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/src/c/shared/Alloc/xNewDelete.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Alloc/xNewDelete.h	(revision 13450)
++++ ../trunk-jpl/src/c/shared/Alloc/xNewDelete.h	(revision 13451)
+@@ -12,7 +12,7 @@
+ // T with non-trivial constructors require 
+ // C++ style memory management
+ #define USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
+-// but for speed on may alternatively use C memory managment
++// but for speed on may alternatively use C memory management
+ // but can do so safely only for T that are at most 
+ // plain old data structures (POD)
+ #ifndef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
+@@ -72,6 +72,26 @@
+ }
+ 
+ template <class T>
++T** xNewZeroInit(unsigned int dim1, unsigned int dim2) {
++#ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
++  T** aT_pp=xNew<T>(dim1,dim2);
++  for (unsigned int i=0; i<dim1*dim2;++i)
++    *aT_pp[i]=(T)0;
++  return aT_pp;
++#else
++  T* buf=(T*)calloc(dim1*dim2*sizeof(T));
++  assert(buf );
++  T** aT_pp =(T**)malloc(dim1*sizeof(T*));
++  assert(aT_pp );
++  for (unsigned int i=0;i<dim1;++i) {
++    aT_pp [i]=buf;
++    buf+=dim2;
++  }
++  return aT_pp ;
++#endif
++}
++
++template <class T>
+ void xDelete(T**& aT_pp) {
+   if (aT_pp) {
+ #ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
Index: /issm/oecreview/Archive/13393-13976/ISSM-13451-13452.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13451-13452.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13451-13452.diff	(revision 13980)
@@ -0,0 +1,128 @@
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13451)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13452)
+@@ -1,7 +1,7 @@
+ /*!\file AutodiffDriversx
+  * \brief: compute outputs from the AD mode,  using our dependents and independents, and drivers available in Adolc.
+  */
+-
++#include <set>
+ #include "../../modules/modules.h"
+ #include "../../shared/shared.h"
+ #include "../../include/include.h"
+@@ -20,7 +20,9 @@
+ 	int         num_independents;
+ 	IssmDouble *axp                = NULL;
+ 	double     *xp                 = NULL;
+-	int         anIndepNum;
++	int         anIndepIndex;
++	unsigned int * indepIndices    = NULL;
++	int         tangentDirNum = 1;  // <----------- set this via config
+ 
+ 	
+ 	/*AD mode on?: */
+@@ -35,6 +37,10 @@
+ 
+ 			if(!(num_dependents*num_independents)) return;
+ 
++			if (tangentDirNum<1 || tangentDirNum>num_independents) {
++			  _error_("tangentDirNum should be in [1,num_dependents]"); // <------------ fix this error message to relate to config
++			}
++
+ 			/*retrieve state variable: */
+ 			parameters->FindParam(&axp,&dummy,AutodiffXpEnum);
+ 
+@@ -57,33 +63,75 @@
+ 			/*allocate the space for the parameters to invoke the forward methods:*/
+ 			anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
+ 			anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
+-			anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, num_independents);
++			anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, tangentDirNum);
+ 			anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
+ 			anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
+-			anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, num_independents);
++			anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, tangentDirNum);
++                        /*allocate the space for the parameters to invoke the reverse methods:*/
+ 			anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
+ 			anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,anEDF_for_solverx_p->max_m);
+ 			anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
+ 			anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,anEDF_for_solverx_p->max_n);
+ 
+ 			/* Call AD driver:*/
+-			// single direction:
+-			double *tangentDir=xNewZeroInit<double>(num_independents);
+-			parameters->FindParam(&anIndepNum,AutodiffFosForwardIndexEnum);
+-			tangentDir[anIndepNum]=1.0;
+-			double *theJacVecProduct=xNew<double>(num_dependents);
+-			double *theOutput=xNew<double>(num_dependents);
+-			if (fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, theJacVecProduct ))
+-				_error_("fos_forward returned non-zero error code");
++			if (tangentDirNum==1) {
++			  // single direction:
++			  double *tangentDir=xNewZeroInit<double>(num_independents);
++			  parameters->FindParam(&anIndepIndex,AutodiffFosForwardIndexEnum);
++			  tangentDir[anIndepIndex]=1.0;
++			  double *jacTimesTangentDir=xNew<double>(num_dependents);
++			  double *theOutput=xNew<double>(num_dependents);
++			  if (fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir ))
++			    _error_("fos_forward returned non-zero error code");
++			  results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,jacTimesTangentDir,num_dependents,1,1,0.0));
++                          xDelete(theOutput);
++                          xDelete(jacTimesTangentDir);
++                          xDelete(tangentDir);
++			}
++			else {
++			  // full Jacobian or Jacobian projection:
++			  double **jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
++			  if (tangentDirNum>1 && tangentDirNum<num_dependents) {
++			    double **seed=xNewZeroInit<double>(num_independents,tangentDirNum);
+ 
+-			results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,theJacVecProduct,num_dependents,1,1,0.0));
++			    // <<<<<<< from here <<<<<<<<<<<<
++			    unsigned int * indepIndices=xNew<unsigned int>(tangentDirNum);
++			    for(int i =0; i< tangentDirNum;++i) {
++			      indepIndices[i]=i;
++			    }
++			    // <<<<<<<< to here << get this vector of independent indices from the config - should be 0 based and ideally also unsigned
+ 
+-#if 0
+-			double **J=xNew<double>(num_dependents,num_independents);
+-			jacobian(1,num_dependents,num_independents,xp,J);
+-			results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,*J,num_independents,num_dependents,1,1,0.0));
+-			xDelete(J);
+-#endif
++			    // collect indices in a set to prevent accidental duplicates as long as we don't do compression:
++			    std::set<unsigned int> anIndexSet;
++			    for (int i=0; i<tangentDirNum; ++i) {
++			      // make sure the index is in range
++			      if (indepIndices[i]>num_independents) {
++			        _error_("indepIndices values must be in [0,num_independents-1]");
++			      }
++			      if (anIndexSet.find(indepIndices[i])!=anIndexSet.end()) {
++			        _error_("duplicate indepIndices values are not allowed until we implement Jacobian decompression");
++			      }
++			      anIndexSet.insert(indepIndices[i]);
++	                      // now populate the seed matrix from the set of independent indices;
++			      // simple setup with a single 1.0 per column and at most a single 1.0 per row
++			      seed[indepIndices[i]][i]=1.0;
++			    }
++			    double *theOutput=xNew<double>(num_dependents);
++			    if (fov_forward(1,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed )) {
++			      _error_("fov_forward returned non-zero error code");
++			    }
++			    xDelete(theOutput);
++			    xDelete(indepIndices);
++			    xDelete(seed);
++			  }
++			  else {
++			    if (jacobian(1,num_dependents,num_independents,xp,jacTimesSeed)) {
++	                        _error_("jacobian returned non-zero error code");
++			    }
++			  }
++			  results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,*jacTimesSeed,num_dependents*tangentDirNum,1,1,0.0));
++			  xDelete(jacTimesSeed);
++			}
+ 
+ 			/* delete the allocated space for the parameters:*/
+ 			xDelete(anEDF_for_solverx_p->dp_x);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13452-13453.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13452-13453.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13452-13453.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13452)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13453)
+@@ -38,7 +38,7 @@
+ 			if(!(num_dependents*num_independents)) return;
+ 
+ 			if (tangentDirNum<1 || tangentDirNum>num_independents) {
+-			  _error_("tangentDirNum should be in [1,num_dependents]"); // <------------ fix this error message to relate to config
++			  _error_("tangentDirNum should be in [1,num_independents]"); // <------------ fix this error message to relate to config
+ 			}
+ 
+ 			/*retrieve state variable: */
+@@ -91,7 +91,7 @@
+ 			else {
+ 			  // full Jacobian or Jacobian projection:
+ 			  double **jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
+-			  if (tangentDirNum>1 && tangentDirNum<num_dependents) {
++			  if (tangentDirNum<num_dependents) {
+ 			    double **seed=xNewZeroInit<double>(num_independents,tangentDirNum);
+ 
+ 			    // <<<<<<< from here <<<<<<<<<<<<
Index: /issm/oecreview/Archive/13393-13976/ISSM-13453-13454.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13453-13454.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13453-13454.diff	(revision 13980)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/test
+===================================================================
+--- ../trunk-jpl/test	(revision 13453)
++++ ../trunk-jpl/test	(revision 13454)
+
+Property changes on: ../trunk-jpl/test
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++AdTests
Index: /issm/oecreview/Archive/13393-13976/ISSM-13454-13455.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13454-13455.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13454-13455.diff	(revision 13980)
@@ -0,0 +1,1016 @@
+Index: ../trunk-jpl/test/Par/SquareShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.py	(revision 0)
++++ ../trunk-jpl/test/Par/SquareShelf.py	(revision 13455)
+@@ -0,0 +1,89 @@
++import os.path
++import inspect
++import netCDF4
++from numpy import *
++from verbose import *
++from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
++from paterson import *
++from SetIceShelfBC import *
++
++#Start defining model parameters here
++#Geometry
++hmin=300.
++hmax=1000.
++ymin=min(md.mesh.y)
++ymax=max(md.mesh.y)
++
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin)
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++
++#Initial velocity and pressure
++iVelF = netCDF4.Dataset('../Data/SquareShelf.nc','r')
++
++x=reshape(iVelF.variables['x'][:],(-1))
++y=reshape(iVelF.variables['y'][:],(-1))
++vx=iVelF.variables['vx'][:]
++vy=iVelF.variables['vy'][:]
++index=iVelF.variables['index'][:].astype(float)
++index=reshape(index.T,(len(index),3),order='F')
++
++#dbg - begin
++# #print 'vars in SquareShelf.nc:'
++# #for v in iVelF.variables:
++# #	print v
++#dbg - end 
++
++iVelF.close()
++
++[md.initialization.vx]=InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y)
++[md.initialization.vy]=InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y)
++md.initialization.vz=zeros(md.mesh.numberofvertices)
++md.initialization.pressure=zeros(md.mesh.numberofvertices)
++
++#dbg - begin
++#print '...vx:'
++#print md.initialization.vx
++#print '...vy:'
++#print md.initialization.vy
++##print '...vz:'
++##print md.initialization.vz
++##print '...pressure:'
++##print md.initialization.pressure
++#dbg - end 
++
++
++#Materials
++md.initialization.temperature = (273.-20.)*ones(md.mesh.numberofvertices)
++md.materials.rheology_B = paterson(md.initialization.temperature)
++md.materials.rheology_n = 3.*ones(md.mesh.numberofelements)
++
++#Friction
++pos=nonzero(md.mask.elementonfloatingice)
++md.friction.coefficient = 20.*ones(md.mesh.numberofvertices)
++md.friction.coefficient[md.mesh.elements[pos,:].astype(int)-1] = 0.
++md.friction.p = ones(md.mesh.numberofelements)
++md.friction.q = ones(md.mesh.numberofelements)
++
++#Numerical parameters
++md.diagnostic.viscosity_overshoot = 0.3
++md.prognostic.stabilization = 1.
++md.thermal.stabilization = 1.
++md.settings.waitonlock = 30.
++md.verbose=verbose()
++md.diagnostic.restol = 0.10
++md.steadystate.reltol = 0.02
++md.diagnostic.reltol = 0.02
++md.diagnostic.abstol = nan
++md.timestepping.time_step = 1.
++md.timestepping.final_time = 3.
++
++#Boundary conditions:
++# #md=SetIceShelfBC(md)
++print '...calling seticeshelfbc:'
++md=SetIceShelfBC(md,'../Exp/SquareFront.exp')
++print '...called seticeshelfbc:'
++
++#Change name so that no test have the same name
++if len(inspect.stack()) > 2:
++	md.miscellaneous.name=os.path.basename(inspect.stack()[2][1]).split('.')[0]
+Index: ../trunk-jpl/test/NightlyRun/test3007.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3007.py	(revision 13455)
+@@ -0,0 +1,39 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3007.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.extrude(5,3)
++md.cluster=generic('name',oshostname(),'np',3)
++md.autodiff.isautodiff=true
++md=solve(md,PrognosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['PrognosticSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3002.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3002.py	(revision 13455)
+@@ -0,0 +1,43 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3002.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,2)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.autodiff.isautodiff=true
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3005.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3005.py	(revision 13455)
+@@ -0,0 +1,38 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3005.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.autodiff.isautodiff=true
++md=solve(md,PrognosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['PrognosticSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3008.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3008.py	(revision 13455)
+@@ -0,0 +1,41 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3008.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.timestepping.time_step=0
++md.cluster=generic('name',oshostname(),'np',3)
++md.autodiff.isautodiff=true
++md=solve(md,ThermalSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results['ThermalSolution'][1]['Temperature'],\
++	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3003.py	(revision 13455)
+@@ -0,0 +1,52 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3003.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,2)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.diagnostic.requested_outputs=StressTensorEnum()
++md.autodiff.isautodiff=true
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure',\
++	'StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,\
++	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['StressTensorxx'],\
++	md.results['DiagnosticSolution'][1]['StressTensoryy'],\
++	md.results['DiagnosticSolution'][1]['StressTensorzz'],\
++	md.results['DiagnosticSolution'][1]['StressTensorxy'],\
++	md.results['DiagnosticSolution'][1]['StressTensorxz'],\
++	md.results['DiagnosticSolution'][1]['StressTensoryz'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test201.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test201.py	(revision 13455)
+@@ -0,0 +1,26 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++from ContourToMesh import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3006.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3006.py	(revision 13455)
+@@ -0,0 +1,42 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3006.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from meshconvert import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=meshconvert(md)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.prognostic.stabilization=3
++md.prognostic.spcthickness=md.geometry.thickness
++md.autodiff.isautodiff=true
++md=solve(md,PrognosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['PrognosticSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3001.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3001.py	(revision 13455)
+@@ -0,0 +1,47 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3001.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',50000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.diagnostic.requested_outputs=StressTensorEnum()
++md.autodiff.isautodiff=true
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vel','Pressure',\
++	'StressTensorxx','StressTensoryy','StressTensorxy']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['StressTensorxx'],\
++	md.results['DiagnosticSolution'][1]['StressTensoryy'],\
++	md.results['DiagnosticSolution'][1]['StressTensorxy'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3009.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3009.py	(revision 13455)
+@@ -0,0 +1,44 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3009.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.transient.isdiagnostic=0
++md.transient.isprognostic=0
++md.transient.isthermal=1
++md.transient.isgroundingline=0
++md.autodiff.isautodiff=true
++md=solve(md,TransientSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3010.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3010.py	(revision 13455)
+@@ -0,0 +1,66 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3010.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.transient.requested_outputs=IceVolumeEnum()
++
++
++md.autodiff.isautodiff=true
++md=solve(md,TransientSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Volume1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Volume2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Volume3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['IceVolume'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['IceVolume'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['IceVolume'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test3004.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3004.py	(revision 13455)
+@@ -0,0 +1,43 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3004.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,2)
++md=setflowequation(md,'stokes','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.autodiff.isautodiff=true
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-08,1e-08,1e-07,1e-08,1e-08]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/src/modules/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/modules/python/Makefile.am	(revision 13454)
++++ ../trunk-jpl/src/modules/python/Makefile.am	(revision 13455)
+@@ -13,6 +13,7 @@
+ 						InterpFromMeshToMesh2d.la\
+ 						NodeConnectivity.la\
+ 						StringToEnum.la\
++						ContourToMesh.la\
+ 						TriMesh.la
+ endif 
+ #}}}
+@@ -93,6 +94,10 @@
+ 								  ../StringToEnum/StringToEnum.h
+ StringToEnum_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+ 
++ContourToMesh_la_SOURCES = ../ContourToMesh/ContourToMesh.cpp\
++								  ../ContourToMesh/ContourToMesh.h
++ContourToMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
+ TriMesh_la_SOURCES = ../TriMesh/TriMesh.cpp\
+ 							../TriMesh/TriMesh.h
+ TriMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(TRIANGLELIB)
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 13454)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 13455)
+@@ -1,4 +1,5 @@
+ #module imports
++import copy
+ import numpy
+ from fielddisplay import fielddisplay
+ from EnumDefinitions import *
+@@ -80,6 +81,8 @@
+ 	# }}}
+ 
+ 	def marshall(self,fid):    # {{{
++		#print "marshalling flowequation-1"
++		#print self.vertex_equation
+ 		WriteData(fid,'object',self,'fieldname','ismacayealpattyn','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','ishutter','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isl1l2','format','Boolean')
+@@ -88,7 +91,8 @@
+ 		WriteData(fid,'object',self,'fieldname','borderpattyn','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','borderstokes','format','DoubleMat','mattype',1)
+ 		#convert approximations to enums
+-		data=self.vertex_equation
++		## data=list(self.vertex_equation)
++		data=copy.deepcopy(self.vertex_equation)
+ 		data[numpy.nonzero(data==0)]=NoneApproximationEnum()
+ 		data[numpy.nonzero(data==1)]=HutterApproximationEnum()
+ 		data[numpy.nonzero(data==2)]=MacAyealApproximationEnum()
+@@ -99,7 +103,8 @@
+ 		data[numpy.nonzero(data==7)]=PattynStokesApproximationEnum()
+ 		data[numpy.nonzero(data==8)]=L1L2ApproximationEnum()
+ 		WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1)
+-		data=self.element_equation
++		########data=self.element_equation
++		data=copy.deepcopy(self.element_equation)
+ 		data[numpy.nonzero(data==0)]=NoneApproximationEnum()
+ 		data[numpy.nonzero(data==1)]=HutterApproximationEnum()
+ 		data[numpy.nonzero(data==2)]=MacAyealApproximationEnum()
+@@ -110,5 +115,7 @@
+ 		data[numpy.nonzero(data==7)]=PattynStokesApproximationEnum()
+ 		data[numpy.nonzero(data==8)]=L1L2ApproximationEnum()
+ 		WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2)
++		#print "marshalling flowequation-4"
++		#print self.vertex_equation
+ 	# }}}
+ 
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 13454)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 13455)
+@@ -1,5 +1,6 @@
+ import os
+ import numpy
++from ContourToMesh import ContourToMesh
+ 
+ def SetIceShelfBC(md,icefrontfile=''):
+ 	"""
+@@ -23,8 +24,8 @@
+ 	if icefrontfile:
+ 		if not os.path.exists(icefrontfile):
+ 			raise IOError("SetIceShelfBC error message: ice front file '%s' not found." % icefrontfile)
+-		nodeinsideicefront=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,icefrontfile,'node',2)
+-		nodeonicefront=double(md.mesh.vertexonboundary and nodeinsideicefront)
++		nodeinsideicefront=ContourToMesh((md.mesh.elements).reshape(-1,1),(md.mesh.x).reshape(-1,1),(md.mesh.y).reshape(-1,1),icefrontfile,'node',2)
++		nodeonicefront= numpy.bitwise_and( map(int,md.mesh.vertexonboundary), map(int,nodeinsideicefront[0].ravel()) )
+ 	else:
+ 		nodeonicefront=numpy.zeros(md.mesh.numberofvertices)
+ 
+Index: ../trunk-jpl/scripts/mToPy.py
+===================================================================
+--- ../trunk-jpl/scripts/mToPy.py	(revision 0)
++++ ../trunk-jpl/scripts/mToPy.py	(revision 13455)
+@@ -0,0 +1,52 @@
++#!/usr/bin/env python
++#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++#
++program =               'mToPy.py'
++version =               '1.0'
++versionReleaseDate =    '09/24/12'
++origAuthor =            'Mike Pellegrin'
++desc = '\nMain control unit for converting an matlab script file to python'
++#
++#   Note: Output will be put in the same (absolute) location as the input.
++#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++#				History
++#	Date		Developer           Modification
++#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++#	09/24/12	Michael Pellegrin	Initial Release         V1.0
++#
++#
++#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++
++import sys, os, shutil
++import translateToPy
++import mToPy   # touch mToPy to assertain location of installation
++
++def convert ( inputFile ):
++    try:
++      if os.path.exists( inputFile + '.m') and os.path.isfile( inputFile + '.m'):
++        checkBackupOutputFile( inputFile )
++        convertMToPy( inputFile )
++      else:
++        print 'Specified input file: ' + inputFile + '.m doesn\'t appear to exist'
++    finally:
++      print ''
++
++def convertMToPy ( inputFileName ):
++    translateToPy.convertToPython ( inputFileName + '.m', inputFileName + '.py' )
++
++def checkBackupOutputFile ( inputFile ):
++    mFile = inputFile + '.m'
++    pyFile = inputFile + '.py'
++    if os.path.exists( pyFile ):
++        i=1
++        bkupName = pyFile + str(i)
++        while os.path.exists( bkupName ):
++            i+=1
++            bkupName = pyFile + str(i)
++        os.rename( pyFile, bkupName )
++
++    shutil.copyfile(mFile, pyFile)
++
++if __name__ == "__main__":
++    convert( sys.argv[1])
++
+
+Property changes on: ../trunk-jpl/scripts/mToPy.py
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/scripts/translateToPy.py
+===================================================================
+--- ../trunk-jpl/scripts/translateToPy.py	(revision 0)
++++ ../trunk-jpl/scripts/translateToPy.py	(revision 13455)
+@@ -0,0 +1,220 @@
++
++#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++#
++program =               'translateToPy.py'
++version =               '1.0'
++versionReleaseDate =    '09/24/12'
++origAuthor =            'Mike Pellegrin'
++desc = '\nMatlab script conversion into python'
++#
++#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++#				History
++#	Date		Developer           Modification
++#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++#	09/24/12 Michael Pellegrin	Initial Release     V1.0
++#
++#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++
++import codecs, unicodedata
++import sys, re, datetime, os
++import decimal, operator
++
++
++outputLocation = sys.stdout
++inputFile = ""
++
++# other global vars
++indentLevel = 0
++
++
++def setupOutputLocation ( outFile ):
++    if outFile != sys.stdout:
++		globals()['outputLocation'] = open( outFile, 'w' ) # clobber
++
++def translateFile ( inputFile ):
++	f = codecs.open( inputFile, encoding='utf-8' )
++	try:
++		for line in f:
++			# print "in: " +line
++
++			asciiLine = unicodedata.normalize('NFKD', line).encode('ascii','ignore')
++			line = asciiLine
++
++			translateLine( line )
++
++	finally:
++		f.close()
++
++def translateLine ( line ):
++
++	if len(line) == 1:	# blank line
++		output( line )
++
++	elif line.split()[0][0] == '%':		# comment line
++		output("# " + line.replace('%','') )
++
++	else:		# needs cleanup.  this is a real-quick-n-dirty implimentation
++		#print line
++		res = line.replace('{','[')
++		res = res.replace('}',']')
++		res = res.replace('model','model()')
++		res = res.replace('SolutionEnum','SolutionEnum()')
++		res = res.replace('StressTensorEnum','StressTensorEnum()')
++		res = res.replace('.par','.py')
++		res = res.replace('=extrude(md,','.extrude(')
++
++		res = res.replace('thickness(pos)','thickness[pos]')
++		res = res.replace('find(md.','numpy.nonzero(md.')
++
++		res = res.replace('...','\\')
++		res = res.replace(';','')
++		res = res.replace('\n','')
++
++		res = convertFieldValues( res )
++
++		output(res)
++
++def convertFieldValues ( currentLine ):
++	# before utilizing regex's {starting w/ eg. \([0-9]\) } for special case: ...(#)...
++	# i noticed what i'm looking for is only TransientSolution(*). So, ...
++
++	res = currentLine
++	if 'md.results' in currentLine:
++		res = res.replace('(md.results.','md.results[\'')
++
++		if 'TransientSolution(' in currentLine:		# got a TransientSolution([0-9..]) case
++			res = res.replace('TransientSolution(','TransientSolution\'][')
++			parts = res.split(')')
++			res = parts[0] + '][\'' + parts[1].replace('.','') + '\']' + parts[2]
++
++		else:				# handle the other cases for md.results
++			
++			res = res.replace('Solution.Vx)','Solution\'][1][\'Vx\']')
++			res = res.replace('Solution.Vy)','Solution\'][1][\'Vy\']')
++			res = res.replace('Solution.Vz)','Solution\'][1][\'Vz\']')
++			res = res.replace('Solution.Vel)','Solution\'][1][\'Vel\']')
++
++			res = res.replace('Solution.Pressure)','Solution\'][1][\'Pressure\']')
++
++			res = res.replace('Solution.StressTensorxx)','Solution\'][1][\'StressTensorxx\']')
++			res = res.replace('Solution.StressTensorxy)','Solution\'][1][\'StressTensorxy\']')
++			res = res.replace('Solution.StressTensoryy)','Solution\'][1][\'StressTensoryy\']')
++			res = res.replace('Solution.StressTensorzz)','Solution\'][1][\'StressTensorzz\']')
++			res = res.replace('Solution.StressTensorxz)','Solution\'][1][\'StressTensorxz\']')
++			res = res.replace('Solution.StressTensoryz)','Solution\'][1][\'StressTensoryz\']')
++
++			res = res.replace('Solution.Thickness)','Solution\'][1][\'Thickness\']')
++
++			res = res.replace('Solution.Temperature)','Solution\'][1][\'Temperature\']')
++
++			res = res.replace('Solution.BasalforcingsMeltingRate)','Solution\'][1][\'BasalforcingsMeltingRate\']')
++
++			res = res.replace('Solution.SurfaceSlopeX)','Solution\'][1][\'SurfaceSlopeX\']')
++			res = res.replace('Solution.SurfaceSlopeY)','Solution\'][1][\'SurfaceSlopeY\']')
++			res = res.replace('Solution.SurfaceSlopeZ)','Solution\'][1][\'SurfaceSlopeZ\']')
++
++			res = res.replace('Solution.BedSlopeX)','Solution\'][1][\'BedSlopeX\']')
++			res = res.replace('Solution.BedSlopeY)','Solution\'][1][\'BedSlopeY\']')
++			res = res.replace('Solution.BedSlopeZ)','Solution\'][1][\'BedSlopeZ\']')
++
++			res = res.replace('Solution.Enthalpy)','Solution\'][1][\'Enthalpy\']')
++			res = res.replace('Solution.Waterfraction)','Solution\'][1][\'Waterfraction\']')
++			res = res.replace('Solution.Temperature)','Solution\'][1][\'Temperature\']')
++	return res
++
++def output ( line ):
++	numTabs = indentLevel
++	while numTabs:
++		numTabs -= 1
++		print >> outputLocation, '\t',
++	print >> outputLocation, line
++
++def outputTopOfSript( inputFile ):
++
++	global indentLevel
++
++	output("\"\"\"")
++	output("== == == == == == == == == == == == == == == == == == ==")
++	output("Auto generated python script for ISSM:   %s" % (inputFile) )
++	output("Created on %s via %s Ver %s by %s" % ( datetime.date.today(), program, version, os.getlogin()))
++	output("== == == == == == == == == == == == == == == == == == ==")
++	#output("")
++	output(desc)
++	output("%s Author: Michael Pellegrin" % (program))
++	output("%s Date: %s" % (program, versionReleaseDate))
++	output("== == == == == == == == == == == == == == == == == == ==")
++	output("\"\"\"")
++	output("")
++
++def outputBottomOfScript():
++
++	global indentLevel
++
++	output("")
++	
++def genericImports ():
++	output("from MatlabFuncs import *")
++	output("from model import *")
++	output("from EnumDefinitions import *")
++	output("from numpy import *")
++
++def createImports ( inputFile ):
++	genericImports()
++
++	# cycle through eachline to assertain import needs
++	f = codecs.open( inputFile, encoding='utf-8' )
++	try:
++		for line in f:
++			# print "in: " +line
++
++			# toss blank lines
++			if len(line) == 1:
++				continue
++
++			asciiLine = unicodedata.normalize('NFKD', line).encode('ascii','ignore')
++			line = asciiLine
++
++			for il in importList:
++				if line.find(il) != -1:
++					output( "from %s import *" % (il) )
++					importList.remove(il)	# already got it
++
++	finally:
++		output("")
++		f.close()
++
++
++def initImportList ():
++	global importList
++	
++	importList = [ \
++		'triangle'	,\
++		'setmask'	,\
++		'parameterize'	,\
++		'setflowequation'	,\
++		'meshconvert'	,\
++		'solve'	,\
++		#'zeros'					# -> numpy
++		]
++	
++
++
++def convertToPython ( inFile, outFile = sys.stdout ):
++    #print ' in cnvrt to python w/ file:' + inFile
++    initImportList()
++    setupOutputLocation( outFile )
++    outputTopOfSript( inFile )
++    createImports( inFile )
++    translateFile( inFile )
++    #    outputBottomOfScript()
++
++	
++if __name__ == "__main__":
++    #print ' in main w/ arg:' + sys.argv[1]+' '+sys.argv[2]
++    if len(sys.argv)==2:
++        convertToPython( sys.argv[1], sys.argv[2] )
++    else:
++        convertToPython( sys.argv[1] )
++
++
++
+
+Property changes on: ../trunk-jpl/scripts/translateToPy.py
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13455-13456.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13455-13456.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13455-13456.diff	(revision 13980)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.py	(revision 13455)
++++ ../trunk-jpl/test/NightlyRun/runme.py	(revision 13456)
+@@ -214,13 +214,13 @@
+ 			directory=os.getcwd().split('/')    #  not used?
+ 			message=me
+ 			if   strcmpi(output,'nightly'):
+-				fid=open(os.path.join(ISSM_DIR+'nightlylog','pythonerror.log'), 'a')
++				fid=open(os.path.join(ISSM_DIR+'/nightlylog','pythonerror.log'), 'a')
+ 				fid.write('%s' % message)
+ 				fid.write('\n------------------------------------------------------------------\n')
+ 				fid.close()
+ 				print 'FAILURE difference: N/A test id: %i test name: %s field: %s' % (id,id_string,'N/A')
+ 			elif strcmpi(output,'daily'):
+-				fid=open(os.path.join(ISSM_DIR+'dailylog','pythonerror.log'), 'a')
++				fid=open(os.path.join(ISSM_DIR+'/dailylog','pythonerror.log'), 'a')
+ 				fid.write('%s' % message)
+ 				fid.write('\n------------------------------------------------------------------\n')
+ 				fid.close()
Index: /issm/oecreview/Archive/13393-13976/ISSM-13456-13457.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13456-13457.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13456-13457.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13456)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13457)
+@@ -22,7 +22,7 @@
+ 	double     *xp                 = NULL;
+ 	int         anIndepIndex;
+ 	unsigned int * indepIndices    = NULL;
+-	int         tangentDirNum = 1;  // <----------- set this via config
++	int         tangentDirNum = 2;  // <----------- set this via config
+ 
+ 	
+ 	/*AD mode on?: */
+@@ -67,7 +67,7 @@
+ 			anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
+ 			anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
+ 			anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, tangentDirNum);
+-                        /*allocate the space for the parameters to invoke the reverse methods:*/
++			/*allocate the space for the parameters to invoke the reverse methods:*/
+ 			anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
+ 			anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,anEDF_for_solverx_p->max_m);
+ 			anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13457-13458.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13457-13458.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13457-13458.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13457)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13458)
+@@ -91,7 +91,7 @@
+ 			else {
+ 			  // full Jacobian or Jacobian projection:
+ 			  double **jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
+-			  if (tangentDirNum<num_dependents) {
++			  if (tangentDirNum<num_independents) {
+ 			    double **seed=xNewZeroInit<double>(num_independents,tangentDirNum);
+ 
+ 			    // <<<<<<< from here <<<<<<<<<<<<
Index: /issm/oecreview/Archive/13393-13976/ISSM-13458-13459.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13458-13459.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13458-13459.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/shared/Alloc/xNewDelete.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Alloc/xNewDelete.h	(revision 13458)
++++ ../trunk-jpl/src/c/shared/Alloc/xNewDelete.h	(revision 13459)
+@@ -76,7 +76,7 @@
+ #ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES
+   T** aT_pp=xNew<T>(dim1,dim2);
+   for (unsigned int i=0; i<dim1*dim2;++i)
+-    *aT_pp[i]=(T)0;
++    (*aT_pp)[i]=(T)0;
+   return aT_pp;
+ #else
+   T* buf=(T*)calloc(dim1*dim2*sizeof(T));
Index: /issm/oecreview/Archive/13393-13976/ISSM-13459-13460.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13459-13460.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13459-13460.diff	(revision 13980)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.py	(revision 13459)
++++ ../trunk-jpl/test/NightlyRun/runme.py	(revision 13460)
+@@ -214,13 +214,13 @@
+ 			directory=os.getcwd().split('/')    #  not used?
+ 			message=me
+ 			if   strcmpi(output,'nightly'):
+-				fid=open(os.path.join(ISSM_DIR+'/nightlylog','pythonerror.log'), 'a')
++				fid=open(os.path.join(ISSM_DIR,'nightlylog','pythonerror.log'), 'a')
+ 				fid.write('%s' % message)
+ 				fid.write('\n------------------------------------------------------------------\n')
+ 				fid.close()
+ 				print 'FAILURE difference: N/A test id: %i test name: %s field: %s' % (id,id_string,'N/A')
+ 			elif strcmpi(output,'daily'):
+-				fid=open(os.path.join(ISSM_DIR+'/dailylog','pythonerror.log'), 'a')
++				fid=open(os.path.join(ISSM_DIR,'dailylog','pythonerror.log'), 'a')
+ 				fid.write('%s' % message)
+ 				fid.write('\n------------------------------------------------------------------\n')
+ 				fid.close()
Index: /issm/oecreview/Archive/13393-13976/ISSM-13460-13461.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13460-13461.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13460-13461.diff	(revision 13980)
@@ -0,0 +1,606 @@
+Index: ../trunk-jpl/test/NightlyRun/ad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad.m	(revision 13460)
++++ ../trunk-jpl/test/NightlyRun/ad.m	(revision 13461)
+@@ -5,14 +5,18 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+ md.autodiff.isautodiff=true;
++md.verbose.autodiff=true;
+ index=1;
+ md.autodiff.independents={...
+-	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
++	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',(1:md.mesh.numberofvertices)')
++	%independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
+ 	};
+ 
+ md.autodiff.dependents={...
+ 	dependent('name','IceVolume','type','scalar')...
++	dependent('name','MaxVel','type','scalar')...
+ 	};
+-md.autodiff.driver='fos_forward';
++%md.autodiff.driver='fos_forward';
++md.autodiff.driver='fov_forward';
+ 
+ md=solve(md,TransientSolutionEnum);
+Index: ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13460)
++++ ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13461)
+@@ -26,6 +26,7 @@
+ 	AutodiffXpEnum,
+ 	AutodiffDriverEnum,
+ 	AutodiffFosForwardIndexEnum,
++	AutodiffFovForwardIndicesEnum,
+ 	BalancethicknessSpcthicknessEnum,
+ 	BalancethicknessStabilizationEnum,
+ 	BalancethicknessThickeningRateEnum,
+Index: ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13460)
++++ ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13461)
+@@ -32,6 +32,7 @@
+ 	      else if (strcmp(name,"AutodiffXp")==0) return AutodiffXpEnum;
+ 	      else if (strcmp(name,"AutodiffDriver")==0) return AutodiffDriverEnum;
+ 	      else if (strcmp(name,"AutodiffFosForwardIndex")==0) return AutodiffFosForwardIndexEnum;
++	      else if (strcmp(name,"AutodiffFovForwardIndices")==0) return AutodiffFovForwardIndicesEnum;
+ 	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
+ 	      else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
+ 	      else if (strcmp(name,"BalancethicknessThickeningRate")==0) return BalancethicknessThickeningRateEnum;
+@@ -136,11 +137,11 @@
+ 	      else if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
+ 	      else if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
+ 	      else if (strcmp(name,"MeshElements2d")==0) return MeshElements2dEnum;
+-	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"MeshLowerelements")==0) return MeshLowerelementsEnum;
++	      if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
++	      else if (strcmp(name,"MeshLowerelements")==0) return MeshLowerelementsEnum;
+ 	      else if (strcmp(name,"MeshNumberofedges")==0) return MeshNumberofedgesEnum;
+ 	      else if (strcmp(name,"MeshNumberofelements2d")==0) return MeshNumberofelements2dEnum;
+ 	      else if (strcmp(name,"MeshNumberofelements")==0) return MeshNumberofelementsEnum;
+@@ -259,11 +260,11 @@
+ 	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+ 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+-	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"HutterApproximation")==0) return HutterApproximationEnum;
++	      if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
++	      else if (strcmp(name,"HutterApproximation")==0) return HutterApproximationEnum;
+ 	      else if (strcmp(name,"MacAyealApproximation")==0) return MacAyealApproximationEnum;
+ 	      else if (strcmp(name,"MacAyealPattynApproximation")==0) return MacAyealPattynApproximationEnum;
+ 	      else if (strcmp(name,"MacAyealStokesApproximation")==0) return MacAyealStokesApproximationEnum;
+@@ -382,11 +383,11 @@
+ 	      else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
+ 	      else if (strcmp(name,"TemperatureOld")==0) return TemperatureOldEnum;
+ 	      else if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum;
+-	      else if (strcmp(name,"TemperatureSurface")==0) return TemperatureSurfaceEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"TemperatureBasal")==0) return TemperatureBasalEnum;
++	      if (strcmp(name,"TemperatureSurface")==0) return TemperatureSurfaceEnum;
++	      else if (strcmp(name,"TemperatureBasal")==0) return TemperatureBasalEnum;
+ 	      else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum;
+ 	      else if (strcmp(name,"Type")==0) return TypeEnum;
+ 	      else if (strcmp(name,"Vel")==0) return VelEnum;
+@@ -505,11 +506,11 @@
+ 	      else if (strcmp(name,"XYZP")==0) return XYZPEnum;
+ 	      else if (strcmp(name,"Option")==0) return OptionEnum;
+ 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
+-	      else if (strcmp(name,"OptionCell")==0) return OptionCellEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"OptionChar")==0) return OptionCharEnum;
++	      if (strcmp(name,"OptionCell")==0) return OptionCellEnum;
++	      else if (strcmp(name,"OptionChar")==0) return OptionCharEnum;
+ 	      else if (strcmp(name,"OptionStruct")==0) return OptionStructEnum;
+ 	      else if (strcmp(name,"OptionDouble")==0) return OptionDoubleEnum;
+ 	      else if (strcmp(name,"OptionLogical")==0) return OptionLogicalEnum;
+Index: ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13460)
++++ ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13461)
+@@ -31,6 +31,7 @@
+ 		case AutodiffXpEnum : return "AutodiffXp";
+ 		case AutodiffDriverEnum : return "AutodiffDriver";
+ 		case AutodiffFosForwardIndexEnum : return "AutodiffFosForwardIndex";
++		case AutodiffFovForwardIndicesEnum : return "AutodiffFovForwardIndices";
+ 		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
+ 		case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
+ 		case BalancethicknessThickeningRateEnum : return "BalancethicknessThickeningRate";
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13460)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13461)
+@@ -13,18 +13,19 @@
+ void AutodiffDriversx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,Results* results){
+ 
+ 
++	/*diverse: */
+ 	int         i;
+ 	int         dummy;
++
+ 	bool        isautodiff         = false;
+ 	int         num_dependents;
+ 	int         num_independents;
++	char*       driver=NULL;
++
++	/*state variables: */
+ 	IssmDouble *axp                = NULL;
+ 	double     *xp                 = NULL;
+-	int         anIndepIndex;
+-	unsigned int * indepIndices    = NULL;
+-	int         tangentDirNum = 2;  // <----------- set this via config
+ 
+-	
+ 	/*AD mode on?: */
+ 	parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
+ 
+@@ -32,15 +33,13 @@
+ 
+ 		#ifdef _HAVE_ADOLC_
+ 
++			if(VerboseAutodiff())_pprintLine_("   start AD driver");
++
++			/*preliminary checks: */
+ 			parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+ 			parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
+-
+ 			if(!(num_dependents*num_independents)) return;
+-
+-			if (tangentDirNum<1 || tangentDirNum>num_independents) {
+-			  _error_("tangentDirNum should be in [1,num_independents]"); // <------------ fix this error message to relate to config
+-			}
+-
++			
+ 			/*retrieve state variable: */
+ 			parameters->FindParam(&axp,&dummy,AutodiffXpEnum);
+ 
+@@ -53,85 +52,143 @@
+ 			/*get the EDF pointer:*/
+ 			ext_diff_fct *anEDF_for_solverx_p=dynamic_cast<GenericParam<Adolc_edf> * >(parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
+ 
+-			/*set the forward method function pointers: */
+-			anEDF_for_solverx_p->zos_forward=EDF_for_solverx;
+-			anEDF_for_solverx_p->fos_forward=EDF_fos_forward_for_solverx;
+-			anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
+-			anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
+-			// anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
++			/*Branch according to AD driver: */
++			parameters->FindParam(&driver,AutodiffDriverEnum);
++
++			if (strcmp(driver,"fos_forward")==0){
++				
++				int     anIndepIndex;
++				double *tangentDir=NULL;
++				double *jacTimesTangentDir=NULL;
++				double *theOutput=NULL;
++				
++				/*retrieve direction index: */
++				parameters->FindParam(&anIndepIndex,AutodiffFosForwardIndexEnum);
++				
++				tangentDir=xNewZeroInit<double>(num_independents);
++				tangentDir[anIndepIndex]=1.0;
+ 			
+-			/*allocate the space for the parameters to invoke the forward methods:*/
+-			anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
+-			anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
+-			anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, tangentDirNum);
+-			anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
+-			anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
+-			anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, tangentDirNum);
+-			/*allocate the space for the parameters to invoke the reverse methods:*/
+-			anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
+-			anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,anEDF_for_solverx_p->max_m);
+-			anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
+-			anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,anEDF_for_solverx_p->max_n);
++				jacTimesTangentDir=xNew<double>(num_dependents);
++				theOutput=xNew<double>(num_dependents);
++				
++				/*set the forward method function pointers: */
++				anEDF_for_solverx_p->zos_forward=EDF_for_solverx;
++				anEDF_for_solverx_p->fos_forward=EDF_fos_forward_for_solverx;
++				anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
+ 
+-			/* Call AD driver:*/
+-			if (tangentDirNum==1) {
+-			  // single direction:
+-			  double *tangentDir=xNewZeroInit<double>(num_independents);
+-			  parameters->FindParam(&anIndepIndex,AutodiffFosForwardIndexEnum);
+-			  tangentDir[anIndepIndex]=1.0;
+-			  double *jacTimesTangentDir=xNew<double>(num_dependents);
+-			  double *theOutput=xNew<double>(num_dependents);
+-			  if (fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir ))
+-			    _error_("fos_forward returned non-zero error code");
+-			  results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,jacTimesTangentDir,num_dependents,1,1,0.0));
+-                          xDelete(theOutput);
+-                          xDelete(jacTimesTangentDir);
+-                          xDelete(tangentDir);
++				/*allocate the space for the parameters to invoke the forward methods:*/
++				anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
++				anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
++				anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, 1);
++				anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, 1);
++
++				/*allocate the space for the parameters to invoke the reverse methods:*/
++				anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
++				anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,anEDF_for_solverx_p->max_n);
++
++				/*call driver: */
++				if (fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir )) _error_("fos_forward returned non-zero error code");
++
++				/*add to results*/
++				results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,jacTimesTangentDir,num_dependents,1,1,0.0));
++				
++				/*free ressources :*/
++				xDelete(theOutput);
++				xDelete(jacTimesTangentDir);
++				xDelete(tangentDir);
+ 			}
+-			else {
+-			  // full Jacobian or Jacobian projection:
+-			  double **jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
+-			  if (tangentDirNum<num_independents) {
+-			    double **seed=xNewZeroInit<double>(num_independents,tangentDirNum);
++			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward")==0)){
++				
++				int* indepIndices=NULL;
++				int tangentDirNum;
++				int dummy;
++				double **jacTimesSeed=NULL;
++				double **seed=NULL;
++				double *theOutput=NULL;
++				std::set<unsigned int> anIndexSet;
+ 
+-			    // <<<<<<< from here <<<<<<<<<<<<
+-			    unsigned int * indepIndices=xNew<unsigned int>(tangentDirNum);
+-			    for(int i =0; i< tangentDirNum;++i) {
+-			      indepIndices[i]=i;
+-			    }
+-			    // <<<<<<<< to here << get this vector of independent indices from the config - should be 0 based and ideally also unsigned
++					
++				/*retrieve directions:*/
++				if (strcmp(driver,"jacobian")==0){
++					tangentDirNum=num_independents;
++					indepIndices=xNewZeroInit<int>(tangentDirNum);
++					for(i=0;i<num_independents;i++)indepIndices[i]=1;
++				}
++				else{
++					parameters->FindParam(&indepIndices,&tangentDirNum,&dummy,AutodiffFovForwardIndicesEnum);
++				}
+ 
+-			    // collect indices in a set to prevent accidental duplicates as long as we don't do compression:
+-			    std::set<unsigned int> anIndexSet;
+-			    for (int i=0; i<tangentDirNum; ++i) {
+-			      // make sure the index is in range
+-			      if (indepIndices[i]>num_independents) {
+-			        _error_("indepIndices values must be in [0,num_independents-1]");
+-			      }
+-			      if (anIndexSet.find(indepIndices[i])!=anIndexSet.end()) {
+-			        _error_("duplicate indepIndices values are not allowed until we implement Jacobian decompression");
+-			      }
+-			      anIndexSet.insert(indepIndices[i]);
+-	                      // now populate the seed matrix from the set of independent indices;
+-			      // simple setup with a single 1.0 per column and at most a single 1.0 per row
+-			      seed[indepIndices[i]][i]=1.0;
+-			    }
+-			    double *theOutput=xNew<double>(num_dependents);
+-			    if (fov_forward(1,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed )) {
+-			      _error_("fov_forward returned non-zero error code");
+-			    }
+-			    xDelete(theOutput);
+-			    xDelete(indepIndices);
+-			    xDelete(seed);
+-			  }
+-			  else {
+-			    if (jacobian(1,num_dependents,num_independents,xp,jacTimesSeed)) {
+-	                        _error_("jacobian returned non-zero error code");
+-			    }
+-			  }
+-			  results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,*jacTimesSeed,num_dependents*tangentDirNum,1,1,0.0));
+-			  xDelete(jacTimesSeed);
++				/*Some checks: */
++				if (tangentDirNum<1 || tangentDirNum>num_independents) _error_("tangentDirNum should be in [1,num_independents]");
++
++				/* full Jacobian or Jacobian projection:*/
++				jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
++				
++				/*set the forward method function pointers: */
++				anEDF_for_solverx_p->zos_forward=EDF_for_solverx;
++				anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
++				// anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
++
++				/*allocate the space for the parameters to invoke the forward methods:*/
++				anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
++				anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
++				anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, tangentDirNum);
++				anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, tangentDirNum);
++
++				/*allocate the space for the parameters to invoke the reverse methods:*/
++				anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
++				anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,anEDF_for_solverx_p->max_n);
++
++				/*seed matrix: */
++				seed=xNewZeroInit<double>(num_independents,tangentDirNum);
++
++				/*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
++				for (int i=0; i<tangentDirNum; ++i) {
++					/* make sure the index is in range*/
++					if (indepIndices[i]>num_independents) {
++						_error_("indepIndices values must be in [0,num_independents-1]");
++					}
++					if (anIndexSet.find(indepIndices[i])!=anIndexSet.end()) {
++						_error_("duplicate indepIndices values are not allowed until we implement Jacobian decompression");
++					}
++					anIndexSet.insert(indepIndices[i]);
++					/* now populate the seed matrix from the set of independent indices;
++					 * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
++					seed[indepIndices[i]][i]=1.0;
++				}
++
++				/*allocate output: */
++				theOutput=xNew<double>(num_dependents);
++
++				/*call driver: */
++				if (strcmp(driver,"fov_forward")==0){
++					if (fov_forward(1,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed )) _error_("fov_forward returned non-zero error code");
++				}
++				else{
++					if (jacobian(1,num_dependents,num_independents,xp,jacTimesSeed))  _error_("jacobian returned non-zero error code");
++				}
++
++				/*Free ressources: */
++				xDelete(theOutput);
++				xDelete(indepIndices);
++				xDelete(seed);
++
++				/*add to results: */
++				results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,*jacTimesSeed,num_dependents*tangentDirNum,1,1,0.0));
++
++				/*Free ressources: */
++				xDelete(jacTimesSeed);
++				xDelete<int>(indepIndices);
+ 			}
++			else _error_("driver: " << driver << " not yet supported!");
+ 
+ 			/* delete the allocated space for the parameters:*/
+ 			xDelete(anEDF_for_solverx_p->dp_x);
+@@ -148,6 +205,8 @@
+ 			/*Free ressources: */
+ 			xDelete(xp);
+ 			xDelete(axp); 
++			
++			if(VerboseAutodiff())_pprintLine_("   end AD driver");
+ 
+ 		#else
+ 			_error_("Should not be requesting AD drivers when an AD library is not available!");
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13460)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13461)
+@@ -21,6 +21,9 @@
+ 	int*        names=NULL;
+ 	int*        types=NULL;
+ 	int         dummy;
++	char*       autodiff_driver=NULL;
++	int*        indices=NULL;
++	int         num_indices;
+ 	
+ 	IssmDouble* xp=NULL;
+ 	IssmDouble* xp_backup=NULL;
+@@ -36,8 +39,18 @@
+ 	if(autodiff_analysis){
+ 
+ 		/*retrieve driver: */
++		iomodel->Constant(&autodiff_driver,AutodiffDriverEnum);
+ 		parameters->AddObject(iomodel->CopyConstantObject(AutodiffDriverEnum));
+-		parameters->AddObject(iomodel->CopyConstantObject(AutodiffFosForwardIndexEnum));
++		
++		if(strcmp(autodiff_driver,"fos_forward")==0){
++			parameters->AddObject(iomodel->CopyConstantObject(AutodiffFosForwardIndexEnum));
++		}
++		else if(strcmp(autodiff_driver,"fov_forward")==0){
++			/*Retrieve list of indices: */
++			iomodel->FetchData(&indices,&num_indices,&dummy,AutodiffFovForwardIndicesEnum);
++			parameters->AddObject(new IntMatParam(AutodiffFovForwardIndicesEnum,indices,num_indices,1));
++			xDelete<int>(indices);
++		}
+ 
+ 		/*Deal with dependents first: {{{*/
+ 		iomodel->Constant(&num_dependent_objects,AutodiffNumDependentObjectsEnum);
+@@ -91,5 +104,6 @@
+ 
+ 		/*Assign output pointer: */
+ 		*pparameters=parameters;
++
+ 	}
+ }
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 13460)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 13461)
+@@ -28,15 +28,26 @@
+ 			if ~obj.isautodiff, return; end
+ 
+ 			%Driver value:
+-			md = checkfield(md,'autodiff.driver','values',{'fos_forward'});
++			md = checkfield(md,'autodiff.driver','values',{'fos_forward','fov_forward'});
+ 
++			%go through our dependents and independents and check consistency: 
++			for i=1:numel(obj.dependents),
++				dep=obj.dependents{i};
++				md=checkconsistency(dep,md,solution,analyses);
++			end
++			for i=1:numel(obj.independents),
++				indep=obj.independents{i};
++				md=checkconsistency(indep,md,i,solution,analyses,obj.driver);
++			end
++
++
+ 		end % }}}
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   automatic differentiation parameters:'));
+ 			fielddisplay(obj,'isautodiff','indicates if the automatic differentiation is activated');
+ 			fielddisplay(obj,'dependents','list of dependent variables');
+ 			fielddisplay(obj,'independents','list of independent variables');
+-			fielddisplay(obj,'driver','ADOLC driver');
++			fielddisplay(obj,'driver','ADOLC driver (''fos_forward'' or ''fov_forward''');
+ 		end % }}}
+ 		function marshall(obj,fid) % {{{
+ 
+@@ -100,8 +111,31 @@
+ 						end
+ 					end
+ 				end
+-				WriteData(fid,'data',index-1,'enum',AutodiffFosForwardIndexEnum(),'format','Integer'); %c-index numbering.
++				index=index-1; %get c-index numbering going
++				WriteData(fid,'data',index,'enum',AutodiffFosForwardIndexEnum(),'format','Integer'); 
+ 			end
++			%if driver is fov_forward, build indices: 
++			if strcmpi(obj.driver,'fov_forward'),
++				indices=0;
++				
++				for i=1:num_independent_objects,
++					indep=obj.independents{i};
++					if ~isempty(indep.fos_forward_index),
++						indices=indices+indep.fov_forward_indices;
++						break;
++					else
++						if strcmpi(indep.type,'scalar'),
++							indices=indices+1;
++						else
++							indices=indices+indep.nods;
++						end
++					end
++				end
++				indices=indices-1; %get c-indices numbering going
++
++				WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum,'format','IntMat','mattype',3);
++			end
++
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/independent.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/independent.m	(revision 13460)
++++ ../trunk-jpl/src/m/classes/independent.m	(revision 13461)
+@@ -8,6 +8,7 @@
+ 		name                 = '';
+ 		type                 = '';
+ 		fos_forward_index    = NaN;
++		fov_forward_indices  = [];
+ 		nods                 = 0;
+ 	end
+ 	methods
+@@ -25,14 +26,29 @@
+ 			%do nothing
+ 
+ 		end % }}}
+-		function md = checkconsistency(obj,md,solution,analyses) % {{{
++		function md = checkconsistency(obj,md,i,solution,analyses,driver) % {{{
+ 			%do nothing for now
+ 			if ~isnan(obj.fos_forward_index),
++				if ~strcmpi(driver,'fos_forward'),
++					error('cannot declare an independent with a fos_forward_index when the driver is not fos_forward!');
++				end
+ 				if obj.nods==0,
+ 					error('independent checkconsistency error: nods should be set to the size of the independent variable');
+ 				end
+ 			end
+ 
++			if ~isempty(obj.fov_forward_indices),
++				if ~strcmpi(driver,'fov_forward'),
++					error('cannot declare an independent with fov_forward_indices when the driver is not fov_forward!');
++				end
++
++				if obj.nods==0,
++					error('independent checkconsistency error: nods should be set to the size of the independent variable');
++				end
++				md = checkfield(md,['autodiff.independents{' num2str(i) '}.fov_forward_indices'],'>=',1,'<=',obj.nods,'size',[NaN 1]);
++			end
++
++
+ 		end % }}}
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   independent variable :'));
+@@ -42,7 +58,9 @@
+ 			if ~isnan(obj.fos_forward_index),
+ 				fielddisplay(obj,'fos_forward_index','index for fos_foward driver of ADOLC');
+ 			end
+-
++			if ~isnan(obj.fov_forward_indices),
++				fielddisplay(obj,'fov_forward_indices','indices for fov_foward driver of ADOLC');
++			end
+ 		end % }}}
+ 		function scalar=typetoscalar(obj) % {{{
+ 			if strcmpi(obj.type,'scalar'),
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13460)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13461)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=486;
++macro=487;
+Index: ../trunk-jpl/src/m/enum/AutodiffFovForwardIndicesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffFovForwardIndicesEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffFovForwardIndicesEnum.m	(revision 13461)
+@@ -0,0 +1,11 @@
++function macro=AutodiffFovForwardIndicesEnum()
++%AUTODIFFFOVFORWARDINDICESENUM - Enum of AutodiffFovForwardIndices
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffFovForwardIndicesEnum()
++
++macro=StringToEnum('AutodiffFovForwardIndices');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13460)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13461)
+@@ -158,6 +158,16 @@
+ 
+ 	return StringToEnum('AutodiffFosForwardIndex')[0]
+ 
++def AutodiffFovForwardIndicesEnum():
++	"""
++	AUTODIFFFOVFORWARDINDICESENUM - Enum of AutodiffFovForwardIndices
++
++	   Usage:
++	      macro=AutodiffFovForwardIndicesEnum()
++	"""
++
++	return StringToEnum('AutodiffFovForwardIndices')[0]
++
+ def BalancethicknessSpcthicknessEnum():
+ 	"""
+ 	BALANCETHICKNESSSPCTHICKNESSENUM - Enum of BalancethicknessSpcthickness
+@@ -4876,5 +4886,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 486
++	return 487
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13461-13462.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13461-13462.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13461-13462.diff	(revision 13980)
@@ -0,0 +1,287 @@
+Index: ../trunk-jpl/src/m/materials/paterson.py
+===================================================================
+--- ../trunk-jpl/src/m/materials/paterson.py	(revision 13461)
++++ ../trunk-jpl/src/m/materials/paterson.py	(revision 13462)
+@@ -1,24 +1,23 @@
+-from numpy import *
++import numpy
+ 
+ def paterson(temperature):
++	"""
++	PATERSON - figure out the rigidity of ice for a given temperature
+ 
+-    # Local Variables: pos11, pos5, pos10, temperature, pos, T, pos8, pos9, pos6, pos7, pos4, rigidity, pos2, pos3, pos1
+-    # Function calls: length, zeros, argwhere, paterson, error
+-    #PATERSON - figure out the rigidity of ice for a given temperature
+-    #
+-    #   rigidigty (in s^(1/3)Pa) is the flow law paramter in the flow law sigma=B*e(1/3) (Paterson, p97). 
+-    #   temperature is in Kelvin degrees
+-    #
+-    #   Usage:
+-    #      rigidity=paterson(temperature)
+-    
+-	pos=argwhere(temperature<0.)
+-	if len(pos):
+-		print 'input temperature should be in Kelvin (positive)'
+-		return []
+-    
++	   rigidity (in s^(1/3)Pa) is the flow law paramter in the flow law sigma=B*e(1/3) (Paterson, p97). 
++	   temperature is in Kelvin degrees
++
++	   Usage:
++	      rigidity=paterson(temperature)
++	"""
++	
++	if numpy.any(temperature<0.):
++		raise RuntimeError("input temperature should be in Kelvin (positive)")
++	
+ 	T = temperature-273.15
++
+ 	#The routine below is equivalent to:
++
+ 	# n=3; T=temperature-273;
+ 	# %From paterson,
+ 	# Temp=[0;-2;-5;-10;-15;-20;-25;-30;-35;-40;-45;-50];
+@@ -30,21 +29,33 @@
+ 	# fittedmodel=fit(Temp,B,'cubicspline');
+ 	# rigidity=fittedmodel(temperature);
+ 
+-	rigidity=zeros(len(T))
+-	pos1=argwhere(T<=-45);           rigidity[pos1]=10**8*(-0.000292866376675*(T[pos1]+50)**3+ 0.011672640664130*(T[pos1]+50)**2  -0.325004442485481*(T[pos1]+50)+  6.524779401948101)
+-	pos2=argwhere(logical_and(-45<=T,T<-40));   rigidity[pos2]=10**8*(-0.000292866376675*(T[pos2]+45)**3+ 0.007279645014004*(T[pos2]+45)**2  -0.230243014094813*(T[pos2]+45)+  5.154964909039554)
+-	pos3=argwhere(logical_and(-40<=T,T<-35));   rigidity[pos3]=10**8*(0.000072737147457*(T[pos3]+40)**3+  0.002886649363879*(T[pos3]+40)**2  -0.179411542205399*(T[pos3]+40)+  4.149132666831214)
+-	pos4=argwhere(logical_and(-35<=T,T<-30));   rigidity[pos4]=10**8*(-0.000086144770023*(T[pos4]+35)**3+ 0.003977706575736*(T[pos4]+35)**2  -0.145089762507325*(T[pos4]+35)+  3.333333333333331)
+-	pos5=argwhere(logical_and(-30<=T,T<-25));   rigidity[pos5]=10**8*(-0.000043984685769*(T[pos5]+30)**3+ 0.002685535025386*(T[pos5]+30)**2  -0.111773554501713*(T[pos5]+30)+  2.696559088937191)
+-	pos6=argwhere(logical_and(-25<=T,T<-20));   rigidity[pos6]=10**8*(-0.000029799523463*(T[pos6]+25)**3+ 0.002025764738854*(T[pos6]+25)**2  -0.088217055680511*(T[pos6]+25)+  2.199331606342181)
+-	pos7=argwhere(logical_and(-20<=T,T<-15));   rigidity[pos7]=10**8*(0.000136920904777*(T[pos7]+20)**3+  0.001578771886910*(T[pos7]+20)**2  -0.070194372551690*(T[pos7]+20)+  1.805165505978111)
+-	pos8=argwhere(logical_and(-15<=T,T<-10));   rigidity[pos8]=10**8*(-0.000899763781026*(T[pos8]+15)**3+ 0.003632585458564*(T[pos8]+15)**2  -0.044137585824322*(T[pos8]+15)+  1.510778053489523)
+-	pos9=argwhere(logical_and(-10<=T,T<-5));    rigidity[pos9]=10**8*(0.001676964325070*(T[pos9]+10)**3-  0.009863871256831*(T[pos9]+10)**2  -0.075294014815659*(T[pos9]+10)+  1.268434288203714)
+-	pos10=argwhere(logical_and(-5<=T,T<-2));    rigidity[pos10]=10**8*(-0.003748937622487*(T[pos10]+5)**3+0.015290593619213*(T[pos10]+5)**2  -0.048160403003748*(T[pos10]+5)+  0.854987973338348)
+-	pos11=argwhere(-2<=T);           rigidity[pos11]=10**8*(-0.003748937622488*(T[pos11]+2)**3-0.018449844983174*(T[pos11]+2)**2  -0.057638157095631*(T[pos11]+2)+  0.746900791092860)
++	rigidity=numpy.zeros((numpy.size(T,axis=0),1))
++	pos1=numpy.nonzero(T<=-45)
++	rigidity[pos1]=10**8*(-0.000292866376675*(T[pos1]+50)**3+ 0.011672640664130*(T[pos1]+50)**2  -0.325004442485481*(T[pos1]+50)+  6.524779401948101)
++	pos2=numpy.nonzero(numpy.logical_and(-45<=T,T<-40))
++	rigidity[pos2]=10**8*(-0.000292866376675*(T[pos2]+45)**3+ 0.007279645014004*(T[pos2]+45)**2  -0.230243014094813*(T[pos2]+45)+  5.154964909039554)
++	pos3=numpy.nonzero(numpy.logical_and(-40<=T,T<-35))
++	rigidity[pos3]=10**8*(0.000072737147457*(T[pos3]+40)**3+  0.002886649363879*(T[pos3]+40)**2  -0.179411542205399*(T[pos3]+40)+  4.149132666831214)
++	pos4=numpy.nonzero(numpy.logical_and(-35<=T,T<-30))
++	rigidity[pos4]=10**8*(-0.000086144770023*(T[pos4]+35)**3+ 0.003977706575736*(T[pos4]+35)**2  -0.145089762507325*(T[pos4]+35)+  3.333333333333331)
++	pos5=numpy.nonzero(numpy.logical_and(-30<=T,T<-25))
++	rigidity[pos5]=10**8*(-0.000043984685769*(T[pos5]+30)**3+ 0.002685535025386*(T[pos5]+30)**2  -0.111773554501713*(T[pos5]+30)+  2.696559088937191)
++	pos6=numpy.nonzero(numpy.logical_and(-25<=T,T<-20))
++	rigidity[pos6]=10**8*(-0.000029799523463*(T[pos6]+25)**3+ 0.002025764738854*(T[pos6]+25)**2  -0.088217055680511*(T[pos6]+25)+  2.199331606342181)
++	pos7=numpy.nonzero(numpy.logical_and(-20<=T,T<-15))
++	rigidity[pos7]=10**8*(0.000136920904777*(T[pos7]+20)**3+  0.001578771886910*(T[pos7]+20)**2  -0.070194372551690*(T[pos7]+20)+  1.805165505978111)
++	pos8=numpy.nonzero(numpy.logical_and(-15<=T,T<-10))
++	rigidity[pos8]=10**8*(-0.000899763781026*(T[pos8]+15)**3+ 0.003632585458564*(T[pos8]+15)**2  -0.044137585824322*(T[pos8]+15)+  1.510778053489523)
++	pos9=numpy.nonzero(numpy.logical_and(-10<=T,T<-5))
++	rigidity[pos9]=10**8*(0.001676964325070*(T[pos9]+10)**3-  0.009863871256831*(T[pos9]+10)**2  -0.075294014815659*(T[pos9]+10)+  1.268434288203714)
++	pos10=numpy.nonzero(numpy.logical_and(-5<=T,T<-2))
++	rigidity[pos10]=10**8*(-0.003748937622487*(T[pos10]+5)**3+0.015290593619213*(T[pos10]+5)**2  -0.048160403003748*(T[pos10]+5)+  0.854987973338348)
++	pos11=numpy.nonzero(-2<=T)
++	rigidity[pos11]=10**8*(-0.003748937622488*(T[pos11]+2)**3-0.018449844983174*(T[pos11]+2)**2  -0.057638157095631*(T[pos11]+2)+  0.746900791092860)
+ 
+ 	#Now make sure that rigidity is positive
+-	pos=argwhere(rigidity<0);        rigidity[pos]=1**6 
++	pos=numpy.nonzero(rigidity<0)
++	rigidity[pos]=1**6 
+ 
+ 	return rigidity
+ 
+Index: ../trunk-jpl/src/m/materials/paterson.m
+===================================================================
+--- ../trunk-jpl/src/m/materials/paterson.m	(revision 13461)
++++ ../trunk-jpl/src/m/materials/paterson.m	(revision 13462)
+@@ -1,7 +1,7 @@
+ function rigidity=paterson(temperature)
+ %PATERSON - figure out the rigidity of ice for a given temperature
+ %
+-%   rigidigty (in s^(1/3)Pa) is the flow law paramter in the flow law sigma=B*e(1/3) (Paterson, p97). 
++%   rigidity (in s^(1/3)Pa) is the flow law paramter in the flow law sigma=B*e(1/3) (Paterson, p97). 
+ %   temperature is in Kelvin degrees
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 13461)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 13462)
+@@ -51,7 +51,7 @@
+ 		if result['step'] in results and \
+ 		   result['fieldname'] in results[result['step']] and \
+ 		   not strcmp(result['fieldname'],'SolutionType'):
+-			results[result['step']][result['fieldname']]=numpy.concatenate((results[result['step']][result['fieldname']],result['field']),axis=0)
++			results[result['step']][result['fieldname']]=numpy.vstack((results[result['step']][result['fieldname']],result['field']))
+ 		else:
+ 			results[result['step']][result['fieldname']]=result['field']
+ 
+Index: ../trunk-jpl/src/m/classes/thermal.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/thermal.py	(revision 13461)
++++ ../trunk-jpl/src/m/classes/thermal.py	(revision 13462)
+@@ -71,11 +71,8 @@
+ 		md = checkfield(md,'thermal.spctemperature','forcing',1)
+ 		if EnthalpyAnalysisEnum() in analyses and (md.thermal.isenthalpy or solution==EnthalpySolutionEnum()) and md.mesh.dimension==3:
+ 			pos=numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices])))
+-#			need to know if md.thermal.spctemperature can have multiple columns?
+-#			replicate=numpy.tile(md.geometry.surface-md.mesh.z,(1,numpy.size(md.thermal.spctemperature,axis=1)))
+-#			md = checkfield(md,'thermal.spctemperature[numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices,:])))]','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate[pos],'message',"spctemperature should be below the adjusted melting point")
+-			replicate=numpy.tile(md.geometry.surface-md.mesh.z,(1))
+-			md = checkfield(md,'thermal.spctemperature[numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices])))]','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate[pos],'message',"spctemperature should be below the adjusted melting point")
++			replicate=numpy.tile(md.geometry.surface-md.mesh.z,(1,numpy.size(md.thermal.spctemperature,axis=1)))
++			md = checkfield(md,'thermal.spctemperature[numpy.nonzero(numpy.logical_not(numpy.isnan(md.thermal.spctemperature[0:md.mesh.numberofvertices,:])))]','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate[pos],'message',"spctemperature should be below the adjusted melting point")
+ 			md = checkfield(md,'thermal.isenthalpy','numel',[1],'values',[0,1])
+ 
+ 		return md
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 13461)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 13462)
+@@ -241,7 +241,7 @@
+ 			x3d=numpy.concatenate((x3d,md.mesh.x))
+ 			y3d=numpy.concatenate((y3d,md.mesh.y))
+ 			#nodes are distributed between bed and surface accordingly to the given exponent
+-			z3d=numpy.concatenate((z3d,bed3d+thickness3d*extrusionlist[i]))
++			z3d=numpy.concatenate((z3d,(bed3d+thickness3d*extrusionlist[i]).reshape(-1)))
+ 		number_nodes3d=numpy.size(x3d)    #number of 3d nodes for the non extruded part of the mesh
+ 
+ 		#Extrude elements 
+@@ -401,7 +401,7 @@
+ 
+ 		#Put lithostatic pressure if there is an existing pressure
+ 		if not numpy.any(numpy.isnan(md.initialization.pressure)):
+-			md.initialization.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z)
++			md.initialization.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z.reshape(-1,1))
+ 
+ 		#special for thermal modeling:
+ 		md.basalforcings.melting_rate=project3d(md,'vector',md.basalforcings.melting_rate,'type','node','layer',1)
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 13461)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 13462)
+@@ -1,12 +1,12 @@
+ import os
+ import numpy
+-from ContourToMesh import ContourToMesh
++from ContourToMesh import *
+ 
+ def SetIceShelfBC(md,icefrontfile=''):
+ 	"""
+ 	SETICESHELFBC - Create the boundary conditions for diagnostic and thermal models for a  Ice Shelf with Ice Front
+ 
+-	   Neumann BC are used on the ice front (an ANRGUS contour around the ice front
++	   Neumann BC are used on the ice front (an ARGUS contour around the ice front
+ 	   must be given in input)
+ 	   Dirichlet BC are used elsewhere for diagnostic
+ 
+@@ -24,23 +24,23 @@
+ 	if icefrontfile:
+ 		if not os.path.exists(icefrontfile):
+ 			raise IOError("SetIceShelfBC error message: ice front file '%s' not found." % icefrontfile)
+-		nodeinsideicefront=ContourToMesh((md.mesh.elements).reshape(-1,1),(md.mesh.x).reshape(-1,1),(md.mesh.y).reshape(-1,1),icefrontfile,'node',2)
++		nodeinsideicefront=ContourToMesh(md.mesh.elements,md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),icefrontfile,'node',2)
+ 		nodeonicefront= numpy.bitwise_and( map(int,md.mesh.vertexonboundary), map(int,nodeinsideicefront[0].ravel()) )
+ 	else:
+-		nodeonicefront=numpy.zeros(md.mesh.numberofvertices)
++		nodeonicefront=numpy.zeros((md.mesh.numberofvertices,1))
+ 
+ #	pos=find(md.mesh.vertexonboundary & ~nodeonicefront);
+ 	pos=[i for i,(vob,noif) in enumerate(zip(md.mesh.vertexonboundary,nodeonicefront)) if vob and not noif]
+-	md.diagnostic.spcvx=float('NaN')*numpy.ones(md.mesh.numberofvertices)
+-	md.diagnostic.spcvy=float('NaN')*numpy.ones(md.mesh.numberofvertices)
+-	md.diagnostic.spcvz=float('NaN')*numpy.ones(md.mesh.numberofvertices)
++	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.diagnostic.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.diagnostic.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.diagnostic.spcvx[pos]=0
+ 	md.diagnostic.spcvy[pos]=0
+ 	md.diagnostic.spcvz[pos]=0
+ 	md.diagnostic.referential=float('NaN')*numpy.ones((md.mesh.numberofvertices,6))
+ 
+ 	#Dirichlet Values
+-	if numpy.size(md.inversion.vx_obs)==md.mesh.numberofvertices and numpy.size(md.inversion.vy_obs)==md.mesh.numberofvertices:
++	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
+ 		print '      boundary conditions for diagnostic model: spc set as observed velocities'
+ 		md.diagnostic.spcvx[pos]=md.inversion.vx_obs[pos]
+ 		md.diagnostic.spcvy[pos]=md.inversion.vy_obs[pos]
+@@ -55,43 +55,43 @@
+ 		pressureload=md.mesh.segments[pos,:]
+ 	elif md.mesh.dimension==3:
+ #		pressureload_layer1=[md.mesh.segments(pos,1:2)  md.mesh.segments(pos,2)+md.mesh.numberofvertices2d  md.mesh.segments(pos,1)+md.mesh.numberofvertices2d  md.mesh.segments(pos,3)];
+-		pressureload_layer1=numpy.concatenate((md.mesh.segments[pos,0:2],md.mesh.segments[pos,1]+md.mesh.numberofvertices2d,md.mesh.segments[pos,0]+md.mesh.numberofvertices2d,md.mesh.segments[pos,2]),axis=1)
++		pressureload_layer1=numpy.hstack((md.mesh.segments[pos,0:2],md.mesh.segments[pos,1]+md.mesh.numberofvertices2d,md.mesh.segments[pos,0]+md.mesh.numberofvertices2d,md.mesh.segments[pos,2]))
+ 		pressureload=numpy.zeros((0,5))
+ 		for i in xrange(1,md.mesh.numberoflayers):
+ #			pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.mesh.numberofvertices2d pressureload_layer1(:,5)+(i-1)*md.mesh.numberofelements2d ];
+-			pressureload=numpy.concatenate((pressureload,numpy.concatenate((pressureload_layer1[:,0:3]+(i-1)*md.mesh.numberofvertices2d,pressureload_layer1[:,4]+(i-1)*md.mesh.numberofelements2d),axis=1)),axis=0)
++			pressureload=numpy.vstack((pressureload,numpy.hstack((pressureload_layer1[:,0:3]+(i-1)*md.mesh.numberofvertices2d,pressureload_layer1[:,4]+(i-1)*md.mesh.numberofelements2d))))
+ 
+ 	#Add water or air enum depending on the element
+ #	pressureload=[pressureload 1*md.mask.elementonfloatingice(pressureload(:,end))];
+-	pressureload=numpy.concatenate((pressureload,1*md.mask.elementonfloatingice[pressureload[:,-1].astype('int')-1].reshape((-1,1))),axis=1)
++	pressureload=numpy.hstack((pressureload,1*md.mask.elementonfloatingice[pressureload[:,-1].astype('int')-1].reshape((-1,1))))
+ 
+ 	#plug onto model
+ 	md.diagnostic.icefront=pressureload
+ 
+ 	#Create zeros basalforcings and surfaceforcings
+ 	if numpy.all(numpy.isnan(md.surfaceforcings.precipitation)) and (md.surfaceforcings.ispdd==1):
+-		md.surfaceforcings.precipitation=numpy.zeros(md.mesh.numberofvertices)
++		md.surfaceforcings.precipitation=numpy.zeros((md.mesh.numberofvertices,1))
+ 		print '      no surfaceforcings.precipitation specified: values set as zero'
+ 	if numpy.all(numpy.isnan(md.surfaceforcings.mass_balance)) and (md.surfaceforcings.ispdd==0):
+-		md.surfaceforcings.mass_balance=numpy.zeros(md.mesh.numberofvertices)
++		md.surfaceforcings.mass_balance=numpy.zeros((md.mesh.numberofvertices,1))
+ 		print '      no surfaceforcings.mass_balance specified: values set as zero'
+ 	if numpy.all(numpy.isnan(md.basalforcings.melting_rate)):
+-		md.basalforcings.melting_rate=numpy.zeros(md.mesh.numberofvertices)
++		md.basalforcings.melting_rate=numpy.zeros((md.mesh.numberofvertices,1))
+ 		print '      no basalforcings.melting_rate specified: values set as zero'
+ 	if numpy.all(numpy.isnan(md.balancethickness.thickening_rate)):
+-		md.balancethickness.thickening_rate=numpy.zeros(md.mesh.numberofvertices)
++		md.balancethickness.thickening_rate=numpy.zeros((md.mesh.numberofvertices,1))
+ 		print '      no balancethickness.thickening_rate specified: values set as zero'
+ 
+-	md.prognostic.spcthickness=float('NaN')*numpy.ones(md.mesh.numberofvertices)
+-	md.balancethickness.spcthickness=float('NaN')*numpy.ones(md.mesh.numberofvertices)
++	md.prognostic.spcthickness=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.balancethickness.spcthickness=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+ 	if numpy.size(md.initialization.temperature)==md.mesh.numberofvertices:
+-		md.thermal.spctemperature=float('NaN')*numpy.ones(md.mesh.numberofvertices)
++		md.thermal.spctemperature=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+ #		pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
+ 		pos=[i for i,vos in enumerate(md.mesh.vertexonsurface) if vos]
+ 		md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    # impose observed temperature on surface
+ 		if not numpy.size(md.basalforcings.geothermalflux)==md.mesh.numberofvertices:
+-			md.basalforcings.geothermalflux=numpy.zeros(md.mesh.numberofvertices)
++			md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,1))
+ 	else:
+ 		print '      no thermal boundary conditions created: no observed temperature found'
+ 
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 13461)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 13462)
+@@ -93,10 +93,10 @@
+ 		fullspcnodes=numpy.logical_or(numpy.logical_not(numpy.isnan(md.diagnostic.spcvx)).astype(int)+ \
+ 		                              numpy.logical_not(numpy.isnan(md.diagnostic.spcvy)).astype(int)+ \
+ 		                              numpy.logical_not(numpy.isnan(md.diagnostic.spcvz)).astype(int)==3, \
+-		                              numpy.logical_and(nodeonpattyn,nodeonstokes)).astype(int)    #find all the nodes on the boundary of the domain without icefront
++		                              numpy.logical_and(nodeonpattyn,nodeonstokes).reshape(-1,1)).astype(int)    #find all the nodes on the boundary of the domain without icefront
+ #		fullspcelems=double(sum(fullspcnodes(md.mesh.elements),2)==6);         %find all the nodes on the boundary of the domain without icefront
+ 		fullspcelems=(numpy.sum(fullspcnodes[md.mesh.elements.astype(int)-1],axis=1)==6).astype(int)    #find all the nodes on the boundary of the domain without icefront
+-		stokesflag[numpy.nonzero(fullspcelems)]=0
++		stokesflag[numpy.nonzero(fullspcelems.reshape(-1))]=0
+ 		nodeonstokes[md.mesh.elements[numpy.nonzero(stokesflag),:].astype(int)-1]=1
+ 
+ 	#Then complete with NoneApproximation or the other model used if there is no stokes
+@@ -128,7 +128,7 @@
+ 		if numpy.all(numpy.logical_not(numpy.isnan(bordernodes2d))):
+ 			penalties=numpy.zeros((0,2))
+ 			for	i in xrange(1,numlayers):
+-				penalties=numpy.concatenate((penalties,numpy.concatenate((bordernodes2d,bordernodes2d+md.mesh.numberofvertices2d*(i)),axis=1)),axis=0)
++				penalties=numpy.vstack((penalties,numpy.hstack((bordernodes2d,bordernodes2d+md.mesh.numberofvertices2d*(i)))))
+ 			md.diagnostic.vertex_pairing=penalties
+ 
+ 	elif strcmpi(coupling_method,'tiling'):
Index: /issm/oecreview/Archive/13393-13976/ISSM-13462-13463.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13462-13463.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13462-13463.diff	(revision 13980)
@@ -0,0 +1,161 @@
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 13462)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 13463)
+@@ -14,7 +14,7 @@
+ ymin = min(md.mesh.y)
+ ymax = max(md.mesh.y)
+ 
+-md.geometry.thickness = hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin)
++md.geometry.thickness = hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+ md.geometry.surface = md.geometry.bed+md.geometry.thickness
+ 
+@@ -25,28 +25,26 @@
+ y=reshape(f.variables['y'][:],(-1))
+ vx=f.variables['vx'][:]
+ vy=f.variables['vy'][:]
+-#deal with 'F' oriented matlab matrices!
+-index=f.variables['index'][:].astype(float)
+-index=reshape(index.T,(len(index),3),order='F')
++index=f.variables['index'][:]
+ f.close()
+ 
+ [md.initialization.vx] = InterpFromMeshToMesh2d(index, x, y, vx, md.mesh.x, md.mesh.y)
+ [md.initialization.vy] = InterpFromMeshToMesh2d(index, x, y, vy, md.mesh.x, md.mesh.y)
+-md.initialization.vz = zeros(md.mesh.numberofvertices)
+-md.initialization.pressure = zeros(md.mesh.numberofvertices)
++md.initialization.vz = zeros((md.mesh.numberofvertices,1))
++md.initialization.pressure = zeros((md.mesh.numberofvertices,1))
+ #Materials
+-md.initialization.temperature = (273.-20)*ones(md.mesh.numberofvertices)
++md.initialization.temperature = (273.-20.)*ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_B = paterson(md.initialization.temperature)
+-md.materials.rheology_n = 3.*ones(md.mesh.numberofelements)
++md.materials.rheology_n = 3.*ones((md.mesh.numberofelements,1))
+ #Surface mass balance and basal melting
+-md.surfaceforcings.mass_balance = 10.*ones(md.mesh.numberofvertices)
+-md.basalforcings.melting_rate = 5.*ones(md.mesh.numberofvertices)
++md.surfaceforcings.mass_balance = 10.*ones((md.mesh.numberofvertices,1))
++md.basalforcings.melting_rate = 5.*ones((md.mesh.numberofvertices,1))
+ #Friction
+ pos = nonzero(md.mask.elementonfloatingice)
+-md.friction.coefficient = 20.*ones(md.mesh.numberofvertices)
++md.friction.coefficient = 20.*ones((md.mesh.numberofvertices,1))
+ md.friction.coefficient[md.mesh.elements[pos,:].astype(int)-1] =0.
+-md.friction.p = ones(md.mesh.numberofelements)
+-md.friction.q = ones(md.mesh.numberofelements)
++md.friction.p = ones((md.mesh.numberofelements,1))
++md.friction.q = ones((md.mesh.numberofelements,1))
+ #Numerical parameters
+ md.diagnostic.viscosity_overshoot = 0.0
+ md.prognostic.stabilization = 1.
+@@ -56,7 +54,7 @@
+ md.diagnostic.restol = 0.05
+ md.diagnostic.reltol = 0.05
+ md.steadystate.reltol = 0.05
+-md.diagnostic.abstol = nan
++md.diagnostic.abstol = float('nan')
+ md.timestepping.time_step = 1.
+ md.timestepping.final_time = 3.
+ #Deal with boundary conditions:
+Index: ../trunk-jpl/test/Par/Pig.py
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.py	(revision 0)
++++ ../trunk-jpl/test/Par/Pig.py	(revision 13463)
+@@ -0,0 +1,63 @@
++import os.path
++import inspect
++import netCDF4
++from numpy import *
++from verbose import *
++from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
++from paterson import *
++from SetIceShelfBC import *
++
++#Start defining model parameters here
++
++#Geometry and observation
++f = netCDF4.Dataset('../Data/Pig.nc','r')
++x         = reshape(f.variables['x'][:],(-1))
++y         = reshape(f.variables['y'][:],(-1))
++vx_obs    = f.variables['vx_obs'][:]
++vy_obs    = f.variables['vy_obs'][:]
++index     = f.variables['index'][:]
++surface   = f.variables['surface'][:]
++thickness = f.variables['thickness'][:]
++f.close()
++
++[md.inversion.vx_obs]   =InterpFromMeshToMesh2d(index,x,y,vx_obs,md.mesh.x,md.mesh.y)
++[md.inversion.vy_obs]   =InterpFromMeshToMesh2d(index,x,y,vy_obs,md.mesh.x,md.mesh.y)
++[md.geometry.surface]  =InterpFromMeshToMesh2d(index,x,y,surface,md.mesh.x,md.mesh.y)
++[md.geometry.thickness]=InterpFromMeshToMesh2d(index,x,y,thickness,md.mesh.x,md.mesh.y)
++md.geometry.bed=md.geometry.surface-md.geometry.thickness
++md.initialization.vx=md.inversion.vx_obs
++md.initialization.vy=md.inversion.vy_obs
++md.initialization.vz=zeros((md.mesh.numberofvertices,1))
++md.initialization.pressure=zeros((md.mesh.numberofvertices,1))
++
++#Materials
++md.initialization.temperature=(273.-20.)*ones((md.mesh.numberofvertices,1))
++md.materials.rheology_B=paterson(md.initialization.temperature)
++md.materials.rheology_n=3.*ones((md.mesh.numberofelements,1))
++md.initialization.temperature=md.initialization.temperature
++
++#Friction
++pos=numpy.nonzero(md.mask.elementonfloatingice)
++md.friction.coefficient=50.*ones((md.mesh.numberofvertices,1))
++md.friction.coefficient[md.mesh.elements[pos].astype(int)-1]=0.
++md.friction.p=ones((md.mesh.numberofelements,1))
++md.friction.q=ones((md.mesh.numberofelements,1))
++
++#Numerical parameters
++md.diagnostic.viscosity_overshoot=0.3
++md.prognostic.stabilization=1.
++md.verbose=verbose(0)
++md.settings.waitonlock=30.
++md.timestepping.time_step=1.
++md.timestepping.final_time=2.
++md.diagnostic.restol=0.05
++md.diagnostic.reltol=1.
++md.steadystate.reltol=1.
++md.diagnostic.abstol=float('nan')
++
++#Boundary conditions:
++#md=SetMarineIceSheetBC(md)
++
++#Change name so that no test have the same name
++if len(inspect.stack()) > 2:
++	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
+
+Property changes on: ../trunk-jpl/test/Par/Pig.py
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/test/NightlyRun/test121.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.py	(revision 13462)
++++ ../trunk-jpl/test/NightlyRun/test121.py	(revision 13463)
+@@ -13,7 +13,7 @@
+ md.extrude(3,1)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.initialization.waterfraction=numpy.zeros(md.mesh.numberofvertices)
++md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+ md.transient.isdiagnostic=0
+ md.transient.isprognostic=0
+ md.transient.isthermal=1
+Index: ../trunk-jpl/test/NightlyRun/test122.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test122.py	(revision 13462)
++++ ../trunk-jpl/test/NightlyRun/test122.py	(revision 13463)
+@@ -12,7 +12,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,1)
+ md=setflowequation(md,'pattyn','all')
+-md.initialization.waterfraction=numpy.zeros(md.mesh.numberofvertices)
++md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+ md.thermal.isenthalpy=1
+ md.thermal.stabilization=2
+ md.cluster=generic('name',oshostname(),'np',3)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13463-13464.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13463-13464.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13463-13464.diff	(revision 13980)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/modules/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/modules/python/Makefile.am	(revision 13463)
++++ ../trunk-jpl/src/modules/python/Makefile.am	(revision 13464)
+@@ -13,7 +13,6 @@
+ 						InterpFromMeshToMesh2d.la\
+ 						NodeConnectivity.la\
+ 						StringToEnum.la\
+-						ContourToMesh.la\
+ 						TriMesh.la
+ endif 
+ #}}}
+@@ -94,10 +93,6 @@
+ 								  ../StringToEnum/StringToEnum.h
+ StringToEnum_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+ 
+-ContourToMesh_la_SOURCES = ../ContourToMesh/ContourToMesh.cpp\
+-								  ../ContourToMesh/ContourToMesh.h
+-ContourToMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+ TriMesh_la_SOURCES = ../TriMesh/TriMesh.cpp\
+ 							../TriMesh/TriMesh.h
+ TriMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(TRIANGLELIB)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13464-13465.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13464-13465.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13464-13465.diff	(revision 13980)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/Par/SquareShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.py	(revision 13464)
++++ ../trunk-jpl/test/Par/SquareShelf.py	(revision 13465)
+@@ -80,9 +80,7 @@
+ 
+ #Boundary conditions:
+ # #md=SetIceShelfBC(md)
+-print '...calling seticeshelfbc:'
+ md=SetIceShelfBC(md,'../Exp/SquareFront.exp')
+-print '...called seticeshelfbc:'
+ 
+ #Change name so that no test have the same name
+ if len(inspect.stack()) > 2:
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 13464)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 13465)
+@@ -24,6 +24,7 @@
+ 	if icefrontfile:
+ 		if not os.path.exists(icefrontfile):
+ 			raise IOError("SetIceShelfBC error message: ice front file '%s' not found." % icefrontfile)
++		#nodeonicefront= numpy.logical_and( md.mesh.vertexonboundary, nodeinsideicefront.astype(float)) )
+ 		nodeinsideicefront=ContourToMesh(md.mesh.elements,md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),icefrontfile,'node',2)
+ 		nodeonicefront= numpy.bitwise_and( map(int,md.mesh.vertexonboundary), map(int,nodeinsideicefront[0].ravel()) )
+ 	else:
Index: /issm/oecreview/Archive/13393-13976/ISSM-13465-13466.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13465-13466.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13465-13466.diff	(revision 13980)
@@ -0,0 +1,46 @@
+Index: ../trunk-jpl/test/Par/SquareShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelf.py	(revision 13465)
++++ ../trunk-jpl/test/Par/SquareShelf.py	(revision 13466)
+@@ -14,7 +14,7 @@
+ ymin=min(md.mesh.y)
+ ymax=max(md.mesh.y)
+ 
+-md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin)
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ 
+@@ -38,8 +38,8 @@
+ 
+ [md.initialization.vx]=InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y)
+ [md.initialization.vy]=InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y)
+-md.initialization.vz=zeros(md.mesh.numberofvertices)
+-md.initialization.pressure=zeros(md.mesh.numberofvertices)
++md.initialization.vz=zeros((md.mesh.numberofvertices,1))
++md.initialization.pressure=zeros((md.mesh.numberofvertices,1))
+ 
+ #dbg - begin
+ #print '...vx:'
+@@ -54,16 +54,16 @@
+ 
+ 
+ #Materials
+-md.initialization.temperature = (273.-20.)*ones(md.mesh.numberofvertices)
++md.initialization.temperature = (273.-20.)*ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_B = paterson(md.initialization.temperature)
+-md.materials.rheology_n = 3.*ones(md.mesh.numberofelements)
++md.materials.rheology_n = 3.*ones((md.mesh.numberofelements,1))
+ 
+ #Friction
+ pos=nonzero(md.mask.elementonfloatingice)
+-md.friction.coefficient = 20.*ones(md.mesh.numberofvertices)
++md.friction.coefficient = 20.*ones((md.mesh.numberofvertices,1))
+ md.friction.coefficient[md.mesh.elements[pos,:].astype(int)-1] = 0.
+-md.friction.p = ones(md.mesh.numberofelements)
+-md.friction.q = ones(md.mesh.numberofelements)
++md.friction.p = ones((md.mesh.numberofelements,1))
++md.friction.q = ones((md.mesh.numberofelements,1))
+ 
+ #Numerical parameters
+ md.diagnostic.viscosity_overshoot = 0.3
Index: /issm/oecreview/Archive/13393-13976/ISSM-13466-13467.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13466-13467.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13466-13467.diff	(revision 13980)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 13466)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 13467)
+@@ -24,9 +24,8 @@
+ 	if icefrontfile:
+ 		if not os.path.exists(icefrontfile):
+ 			raise IOError("SetIceShelfBC error message: ice front file '%s' not found." % icefrontfile)
+-		#nodeonicefront= numpy.logical_and( md.mesh.vertexonboundary, nodeinsideicefront.astype(float)) )
+-		nodeinsideicefront=ContourToMesh(md.mesh.elements,md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),icefrontfile,'node',2)
+-		nodeonicefront= numpy.bitwise_and( map(int,md.mesh.vertexonboundary), map(int,nodeinsideicefront[0].ravel()) )
++		[nodeinsideicefront,dum]=ContourToMesh(md.mesh.elements,md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),icefrontfile,'node',2)
++		nodeonicefront=numpy.logical_and(md.mesh.vertexonboundary,nodeinsideicefront).astype(float)
+ 	else:
+ 		nodeonicefront=numpy.zeros((md.mesh.numberofvertices,1))
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13467-13468.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13467-13468.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13467-13468.diff	(revision 13980)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13467)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13468)
+@@ -91,7 +91,7 @@
+ 				anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,anEDF_for_solverx_p->max_n);
+ 
+ 				/*call driver: */
+-				if (fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir )) _error_("fos_forward returned non-zero error code");
++				fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir );
+ 
+ 				/*add to results*/
+ 				results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,jacTimesTangentDir,num_dependents,1,1,0.0));
+@@ -170,10 +170,10 @@
+ 
+ 				/*call driver: */
+ 				if (strcmp(driver,"fov_forward")==0){
+-					if (fov_forward(1,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed )) _error_("fov_forward returned non-zero error code");
++					fov_forward(1,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed );
+ 				}
+ 				else{
+-					if (jacobian(1,num_dependents,num_independents,xp,jacTimesSeed))  _error_("jacobian returned non-zero error code");
++					jacobian(1,num_dependents,num_independents,xp,jacTimesSeed);
+ 				}
+ 
+ 				/*Free ressources: */
Index: /issm/oecreview/Archive/13393-13976/ISSM-13468-13469.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13468-13469.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13468-13469.diff	(revision 13980)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/classes/prognostic.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/prognostic.py	(revision 13468)
++++ ../trunk-jpl/src/m/classes/prognostic.py	(revision 13469)
+@@ -68,7 +68,8 @@
+ 		md = checkfield(md,'prognostic.hydrostatic_adjustment','values',['Absolute','Incremental'])
+ 		md = checkfield(md,'prognostic.stabilization','values',[0,1,2,3])
+ 		md = checkfield(md,'prognostic.min_thickness','>',0)
+-		md = checkfield(md,'prognostic.requested_outputs','size',[float('NaN'),1])
++		if not md.prognostic.requested_outputs:
++			md = checkfield(md,'prognostic.requested_outputs','size',[float('NaN'),1])
+ 
+ 		return md
+ 	# }}}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13469-13470.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13469-13470.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13469-13470.diff	(revision 13980)
@@ -0,0 +1,295 @@
+Index: ../trunk-jpl/src/m/geometry/FlagElements.py
+===================================================================
+--- ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 13469)
++++ ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 13470)
+@@ -40,13 +40,13 @@
+ 			if not os.path.exists(region):
+ 				if len(region)>3 and not strcmp(region[-4:],'.exp'):
+ 					raise IOError("Error: File 'region' not found!" % region)
+-				raise RuntimeError("FlagElements -- basinzoom not yet converted.")
++				raise RuntimeError("FlagElements.py calling basinzoom.py is not complete.")
+ 				xlim,ylim=basinzoom('basin',region)
+ 				flag_nodes=numpy.logical_and(numpy.logical_and(md.mesh.x<xlim[1],md.mesh.x>xlim[0]),numpy.logical_and(md.mesh.y<ylim[1],md.mesh.y>ylim[0])).astype(float)
+ 				flag=numpy.prod(flag_nodes[md.mesh.elements],axis=1)
+ 			else:
+ 				#ok, flag elements
+-				[flag,fnone]=ContourToMesh(md.mesh.elements[:,0:3],md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),region,'element',1)
++				[flag,dum]=ContourToMesh(md.mesh.elements[:,0:3],md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),region,'element',1)
+ 
+ 		if invert:
+ 			flag=numpy.logical_not(flag)
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 13469)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 13470)
+@@ -120,7 +120,7 @@
+ 					raise RuntimeError("one rift has all its points outside of the domain outline")
+ 
+ 				elif numpy.any(numpy.logical_not(flags)):
+-					raise RuntimeError("bamg.m for rifts is not complete.")
++					raise RuntimeError("bamg.py for rifts is not complete.")
+ 					#We LOTS of work to do
+ 					print("Rift tip outside of or on the domain has been detected and is being processed...")
+ 					"""
+@@ -346,7 +346,7 @@
+ 
+ def processgeometry(geom,tol,outline):    # {{{
+ 
+-	raise RuntimeError("bamg.m/processgeometry is not complete.")
++	raise RuntimeError("bamg.py/processgeometry is not complete.")
+ 	#Deal with edges
+ 	print("Checking Edge crossing...")
+ 	i=0
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 13469)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 13470)
+@@ -166,6 +166,7 @@
+ 	def checkmessage(self,string):    # {{{
+ 		print ("model not consistent: %s" % string)
+ 		self.private.isconsistent=False
++		return self
+ 	# }}}
+ 
+ 	def extrude(md,*args):    # {{{
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 13469)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 13470)
+@@ -52,7 +52,7 @@
+ end
+ 
+ md.hydrology.spcwatercolumn=zeros(md.mesh.numberofvertices,2);
+-pos=find(md.mesh.vertexonboundary); 
++pos=find(md.mesh.vertexonboundary);
+ md.hydrology.spcwatercolumn(pos,1)=1;
+ 
+ %segment on Neumann (Ice Front)
+@@ -100,7 +100,7 @@
+ 	pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
+ 	if (length(md.basalforcings.geothermalflux)~=md.mesh.numberofvertices),
+ 		md.basalforcings.geothermalflux=zeros(md.mesh.numberofvertices,1);
+-		md.basalforcings.geothermalflux(find(md.mask.vertexongroundedice))=50*10^-3; %50mW/m2
++		md.basalforcings.geothermalflux(find(md.mask.vertexongroundedice))=50.*10.^-3; %50mW/m2
+ 	end
+ else
+ 	disp('      no thermal boundary conditions created: no observed temperature found');
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 13469)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 13470)
+@@ -25,32 +25,32 @@
+ 		if not os.path.exists(icefrontfile):
+ 			raise IOError("SetIceShelfBC error message: ice front file '%s' not found." % icefrontfile)
+ 		[nodeinsideicefront,dum]=ContourToMesh(md.mesh.elements,md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),icefrontfile,'node',2)
+-		nodeonicefront=numpy.logical_and(md.mesh.vertexonboundary,nodeinsideicefront).astype(float)
++		nodeonicefront=numpy.logical_and(md.mesh.vertexonboundary,nodeinsideicefront.reshape(-1)).astype(float)
+ 	else:
+-		nodeonicefront=numpy.zeros((md.mesh.numberofvertices,1))
++		nodeonicefront=numpy.zeros((md.mesh.numberofvertices))
+ 
+ #	pos=find(md.mesh.vertexonboundary & ~nodeonicefront);
+-	pos=[i for i,(vob,noif) in enumerate(zip(md.mesh.vertexonboundary,nodeonicefront)) if vob and not noif]
+-	md.diagnostic.spcvx=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvy=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.diagnostic.spcvz=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	pos=numpy.nonzero(numpy.logical_and(md.mesh.vertexonboundary,numpy.logical_not(nodeonicefront)))[0]
++	md.diagnostic.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.diagnostic.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.diagnostic.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.diagnostic.spcvx[pos]=0
+ 	md.diagnostic.spcvy[pos]=0
+ 	md.diagnostic.spcvz[pos]=0
+-	md.diagnostic.referential=float('NaN')*numpy.ones((md.mesh.numberofvertices,6))
++	md.diagnostic.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
+ 
+ 	#Dirichlet Values
+ 	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
+-		print '      boundary conditions for diagnostic model: spc set as observed velocities'
++		print "      boundary conditions for diagnostic model: spc set as observed velocities"
+ 		md.diagnostic.spcvx[pos]=md.inversion.vx_obs[pos]
+ 		md.diagnostic.spcvy[pos]=md.inversion.vy_obs[pos]
+ 	else:
+-		print '      boundary conditions for diagnostic model: spc set as zero'
++		print "      boundary conditions for diagnostic model: spc set as zero"
+ 
+ 	#segment on Ice Front
+ 	#segment on Neumann (Ice Front)
+ #	pos=find(nodeonicefront(md.mesh.segments(:,1)) | nodeonicefront(md.mesh.segments(:,2)));
+-	pos=[i for i,(noif1,noif2) in enumerate(zip(nodeonicefront[md.mesh.segments[:,0].astype('int')-1],nodeonicefront[md.mesh.segments[:,1].astype('int')-1])) if noif1 or noif2]
++	pos=numpy.nonzero(numpy.logical_or(nodeonicefront[md.mesh.segments[:,0].astype(int)-1],nodeonicefront[md.mesh.segments[:,1].astype(int)-1]))[0]
+ 	if   md.mesh.dimension==2:
+ 		pressureload=md.mesh.segments[pos,:]
+ 	elif md.mesh.dimension==3:
+@@ -59,11 +59,11 @@
+ 		pressureload=numpy.zeros((0,5))
+ 		for i in xrange(1,md.mesh.numberoflayers):
+ #			pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.mesh.numberofvertices2d pressureload_layer1(:,5)+(i-1)*md.mesh.numberofelements2d ];
+-			pressureload=numpy.vstack((pressureload,numpy.hstack((pressureload_layer1[:,0:3]+(i-1)*md.mesh.numberofvertices2d,pressureload_layer1[:,4]+(i-1)*md.mesh.numberofelements2d))))
++			pressureload=numpy.vstack((pressureload,numpy.hstack((pressureload_layer1[:,0:4]+(i-1)*md.mesh.numberofvertices2d,pressureload_layer1[:,4]+(i-1)*md.mesh.numberofelements2d))))
+ 
+ 	#Add water or air enum depending on the element
+ #	pressureload=[pressureload 1*md.mask.elementonfloatingice(pressureload(:,end))];
+-	pressureload=numpy.hstack((pressureload,1*md.mask.elementonfloatingice[pressureload[:,-1].astype('int')-1].reshape((-1,1))))
++	pressureload=numpy.hstack((pressureload,1.*md.mask.elementonfloatingice[pressureload[:,-1].astype('int')-1].reshape(-1,1)))
+ 
+ 	#plug onto model
+ 	md.diagnostic.icefront=pressureload
+@@ -71,29 +71,29 @@
+ 	#Create zeros basalforcings and surfaceforcings
+ 	if numpy.all(numpy.isnan(md.surfaceforcings.precipitation)) and (md.surfaceforcings.ispdd==1):
+ 		md.surfaceforcings.precipitation=numpy.zeros((md.mesh.numberofvertices,1))
+-		print '      no surfaceforcings.precipitation specified: values set as zero'
++		print "      no surfaceforcings.precipitation specified: values set as zero"
+ 	if numpy.all(numpy.isnan(md.surfaceforcings.mass_balance)) and (md.surfaceforcings.ispdd==0):
+ 		md.surfaceforcings.mass_balance=numpy.zeros((md.mesh.numberofvertices,1))
+-		print '      no surfaceforcings.mass_balance specified: values set as zero'
++		print "      no surfaceforcings.mass_balance specified: values set as zero"
+ 	if numpy.all(numpy.isnan(md.basalforcings.melting_rate)):
+ 		md.basalforcings.melting_rate=numpy.zeros((md.mesh.numberofvertices,1))
+-		print '      no basalforcings.melting_rate specified: values set as zero'
++		print "      no basalforcings.melting_rate specified: values set as zero"
+ 	if numpy.all(numpy.isnan(md.balancethickness.thickening_rate)):
+ 		md.balancethickness.thickening_rate=numpy.zeros((md.mesh.numberofvertices,1))
+-		print '      no balancethickness.thickening_rate specified: values set as zero'
++		print "      no balancethickness.thickening_rate specified: values set as zero"
+ 
+-	md.prognostic.spcthickness=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
+-	md.balancethickness.spcthickness=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	md.prognostic.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 
+-	if numpy.size(md.initialization.temperature)==md.mesh.numberofvertices:
+-		md.thermal.spctemperature=float('NaN')*numpy.ones((md.mesh.numberofvertices,1))
++	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
++		md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ #		pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
+-		pos=[i for i,vos in enumerate(md.mesh.vertexonsurface) if vos]
+-		md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    # impose observed temperature on surface
+-		if not numpy.size(md.basalforcings.geothermalflux)==md.mesh.numberofvertices:
++		pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
++		md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
++		if not isinstance(md.basalforcings.geothermalflux,numpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux,axis=0)==md.mesh.numberofvertices:
+ 			md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,1))
+ 	else:
+-		print '      no thermal boundary conditions created: no observed temperature found'
++		print "      no thermal boundary conditions created: no observed temperature found"
+ 
+ 	return md
+ 
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 0)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 13470)
+@@ -0,0 +1,111 @@
++import os
++import numpy
++from ContourToMesh import *
++
++def SetMarineIceSheetBC(md,icefrontfile=''):
++	"""
++	SETICEMARINESHEETBC - Create the boundary conditions for diagnostic and thermal models for a  Marine Ice Sheet with Ice Front
++
++	   Neumann BC are used on the ice front (an ARGUS contour around the ice front
++	   can be given in input, or it will be deduced as onfloatingice & onboundary)
++	   Dirichlet BC are used elsewhere for diagnostic
++
++	   Usage:
++	      md=SetMarineIceSheetBC(md,icefrontfile)
++	      md=SetMarineIceSheetBC(md)
++
++	   Example:
++	      md=SetMarineIceSheetBC(md,'Front.exp')
++	      md=SetMarineIceSheetBC(md)
++
++	   See also: SETICESHELFBC, SETMARINEICESHEETBC
++	"""
++
++	#node on Dirichlet (boundary and ~icefront)
++	if icefrontfile:
++		#User provided Front.exp, use it
++		if not os.path.exists(icefrontfile):
++			raise IOError("SetMarineIceSheetBC error message: ice front file '%s' not found." % icefrontfile)
++		[nodeinsideicefront,dum]=ContourToMesh(md.mesh.elements,md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),icefrontfile,'node',2)
++		vertexonicefront=numpy.logical_and(md.mesh.vertexonboundary,nodeinsideicefront.reshape(-1)).astype(float)
++	else:
++		#Guess where the ice front is
++		vertexonfloatingice=numpy.zeros((md.mesh.numberofvertices))
++		vertexonfloatingice[md.mesh.elements[numpy.nonzero(md.mask.elementonfloatingice),:].astype(int)-1]=1
++		vertexonicefront=numpy.logical_and(md.mesh.vertexonboundary,vertexonfloatingice).astype(float)
++
++#	pos=find(md.mesh.vertexonboundary & ~vertexonicefront);
++	pos=numpy.nonzero(numpy.logical_and(md.mesh.vertexonboundary,numpy.logical_not(vertexonicefront)))[0]
++	if not numpy.size(pos):
++		print("SetMarineIceSheetBC warning: ice front all around the glacier, no dirichlet found. Dirichlet must be added manually.")
++
++	md.diagnostic.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.diagnostic.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.diagnostic.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.diagnostic.spcvx[pos]=0
++	md.diagnostic.spcvy[pos]=0
++	md.diagnostic.spcvz[pos]=0
++	md.diagnostic.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
++
++	#Dirichlet Values
++	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
++		print("      boundary conditions for diagnostic model: spc set as observed velocities")
++		md.diagnostic.spcvx[pos]=md.inversion.vx_obs[pos]
++		md.diagnostic.spcvy[pos]=md.inversion.vy_obs[pos]
++	else:
++		print("      boundary conditions for diagnostic model: spc set as zero")
++
++	md.hydrology.spcwatercolumn=numpy.zeros((md.mesh.numberofvertices,2))
++	pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
++	md.hydrology.spcwatercolumn[pos,0]=1
++
++	#segment on Neumann (Ice Front)
++#	pos=find(vertexonicefront(md.mesh.segments(:,1)) | vertexonicefront(md.mesh.segments(:,2)));
++	pos=numpy.nonzero(numpy.logical_or(vertexonicefront[md.mesh.segments[:,0].astype(int)-1],vertexonicefront[md.mesh.segments[:,1].astype(int)-1]))[0]
++	if   md.mesh.dimension==2:
++		pressureload=md.mesh.segments[pos,:]
++	elif md.mesh.dimension==3:
++#		pressureload_layer1=[md.mesh.segments(pos,1:2)  md.mesh.segments(pos,2)+md.mesh.numberofvertices2d  md.mesh.segments(pos,1)+md.mesh.numberofvertices2d  md.mesh.segments(pos,3)];
++		pressureload_layer1=numpy.hstack((md.mesh.segments[pos,0:2],md.mesh.segments[pos,1]+md.mesh.numberofvertices2d,md.mesh.segments[pos,0]+md.mesh.numberofvertices2d,md.mesh.segments[pos,2]))
++		pressureload=numpy.zeros((0,5))
++		for i in xrange(1,md.mesh.numberoflayers):
++#			pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.mesh.numberofvertices2d pressureload_layer1(:,5)+(i-1)*md.mesh.numberofelements2d ];
++			pressureload=numpy.vstack((pressureload,numpy.hstack((pressureload_layer1[:,0:4]+(i-1)*md.mesh.numberofvertices2d,pressureload_layer1[:,4]+(i-1)*md.mesh.numberofelements2d))))
++
++	#Add water or air enum depending on the element
++#	pressureload=[pressureload 1*md.mask.elementonfloatingice(pressureload(:,end))+ 0*md.mask.elementongroundedice(pressureload(:,end))];
++	pressureload=numpy.hstack((pressureload,1.*md.mask.elementonfloatingice[pressureload[:,-1].astype('int')-1].reshape(-1,1)+0.*md.mask.elementongroundedice[pressureload[:,-1].astype('int')-1].reshape(-1,1)))
++
++	#plug onto model
++	md.diagnostic.icefront=pressureload
++
++	#Create zeros basalforcings and surfaceforcings
++	if numpy.all(numpy.isnan(md.surfaceforcings.precipitation)) and (md.surfaceforcings.ispdd==1):
++		md.surfaceforcings.precipitation=numpy.zeros((md.mesh.numberofvertices,1))
++		print("      no surfaceforcings.precipitation specified: values set as zero")
++	if numpy.all(numpy.isnan(md.surfaceforcings.mass_balance)) and (md.surfaceforcings.ispdd==0):
++		md.surfaceforcings.mass_balance=numpy.zeros((md.mesh.numberofvertices,1))
++		print("      no surfaceforcings.mass_balance specified: values set as zero")
++	if numpy.all(numpy.isnan(md.basalforcings.melting_rate)):
++		md.basalforcings.melting_rate=numpy.zeros((md.mesh.numberofvertices,1))
++		print("      no basalforcings.melting_rate specified: values set as zero")
++	if numpy.all(numpy.isnan(md.balancethickness.thickening_rate)):
++		md.balancethickness.thickening_rate=numpy.zeros((md.mesh.numberofvertices,1))
++		print("      no balancethickness.thickening_rate specified: values set as zero")
++
++	md.prognostic.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++
++	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
++		md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++#		pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
++		pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
++		md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
++		if not isinstance(md.basalforcings.geothermalflux,numpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux,axis=0)==md.mesh.numberofvertices:
++			md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,1))
++			md.basalforcings.geothermalflux[numpy.nonzero(md.mask.vertexongroundedice)]=50.*10.**-3; #50mW/m2
++	else:
++		print("      no thermal boundary conditions created: no observed temperature found");
++
++	return md
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13470-13471.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13470-13471.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13470-13471.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/test/Par/Pig.py
+===================================================================
+--- ../trunk-jpl/test/Par/Pig.py	(revision 13470)
++++ ../trunk-jpl/test/Par/Pig.py	(revision 13471)
+@@ -5,7 +5,7 @@
+ from verbose import *
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+ from paterson import *
+-from SetIceShelfBC import *
++from SetMarineIceSheetBC import *
+ 
+ #Start defining model parameters here
+ 
+@@ -56,7 +56,7 @@
+ md.diagnostic.abstol=float('nan')
+ 
+ #Boundary conditions:
+-#md=SetMarineIceSheetBC(md)
++md=SetMarineIceSheetBC(md)
+ 
+ #Change name so that no test have the same name
+ if len(inspect.stack()) > 2:
Index: /issm/oecreview/Archive/13393-13976/ISSM-13471-13472.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13471-13472.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13471-13472.diff	(revision 13980)
@@ -0,0 +1,120 @@
+Index: ../trunk-jpl/src/m/geometry/GetAreas.py
+===================================================================
+--- ../trunk-jpl/src/m/geometry/GetAreas.py	(revision 0)
++++ ../trunk-jpl/src/m/geometry/GetAreas.py	(revision 13472)
+@@ -0,0 +1,52 @@
++import numpy
++
++def GetAreas(index,x,y,z=numpy.array([])):
++	"""
++	GETAREAS - compute areas or volumes of elements
++
++	   compute areas of triangular elements or volumes 
++	   of pentahedrons
++
++	   Usage:
++	      areas  =GetAreas(index,x,y);
++	      volumes=GetAreas(index,x,y,z);
++
++	   Examples:
++	      areas  =GetAreas(md.mesh.elements,md.mesh.x,md.mesh.y);
++	      volumes=GetAreas(md.mesh.elements,md.mesh.x,md.mesh.y,md.z);
++	"""
++
++	#get number of elements and number of nodes
++	nels=numpy.size(index,axis=0)
++	nods=numpy.size(x)
++
++	#some checks
++	if numpy.size(y)!=nods or (z and numpy.size(z)!=nods):
++		raise TypeError("GetAreas error message: x,y and z do not have the same length.")
++	if numpy.max(index)>nods:
++		raise TypeError("GetAreas error message: index should not have values above %d." % nods)
++	if (not z and numpy.size(index,axis=1)!=3):
++		raise TypeError("GetAreas error message: index should have 3 columns for 2d meshes.")
++	if (z and numpy.size(index,axis=1)!=6):
++		raise TypeError("GetAreas error message: index should have 6 columns for 3d meshes.")
++
++	#initialization
++	areas=numpy.zeros(nels)
++	x1=x[index[:,0].astype(int)-1]
++	x2=x[index[:,1].astype(int)-1]
++	x3=x[index[:,2].astype(int)-1]
++	y1=y[index[:,0].astype(int)-1]
++	y2=y[index[:,1].astype(int)-1]
++	y3=y[index[:,2].astype(int)-1]
++
++	#compute the volume of each element
++	if not z:
++		#compute the surface of the triangle
++		areas=(0.5*((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)))
++	else:
++		#V=area(triangle)*1/3(z1+z2+z3)
++		thickness=numpy.mean(z[index[:,3:6].astype(int)-1])-numpy.mean(z[index[:,0:3].astype(int)-1])
++		areas=(0.5*((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1)))*thickness
++
++	return areas
++
+Index: ../trunk-jpl/src/m/mesh/GetNodalFunctionsCoeff.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/GetNodalFunctionsCoeff.py	(revision 0)
++++ ../trunk-jpl/src/m/mesh/GetNodalFunctionsCoeff.py	(revision 13472)
+@@ -0,0 +1,58 @@
++import numpy
++
++def GetNodalFunctionsCoeff(index,x,y):
++	"""
++	GETNODELFUNCTIONSCOEFF - compute nodal functions coefficients
++
++	   Compute the coefficients alpha beta and optionaly gamma of
++	   2d triangular elements. For each element, the nodal function
++	   is defined as:
++	   N(x,y)=sum(i=1:3) alpha_i * x + beta_i * y + gamma_i
++
++	   Usage:
++	      [alpha beta]=GetNodalFunctionsCoeff(index,x,y);
++	      [alpha beta gamma]=GetNodalFunctionsCoeff(index,x,y);
++
++	   Example:
++	      [alpha beta gamma]=GetNodalFunctionsCoeff(md.mesh.elements,md.mesh.x,md.mesh.y);
++	"""
++
++	#make columns out of x and y
++	x=x.rshape(-1)
++	y=y.rshape(-1)
++
++	#get nels and nods
++	nels=numpy.size(index,axis=0)
++	nods=numpy.size(x)
++
++	#some checks
++	if numpy.size(y)!=nods:
++		raise TypeError("GetNodalFunctionsCoeff error message: x and y do not have the same length.")
++	if numpy.max(index)>nods:
++		raise TypeError("GetNodalFunctionsCoeff error message: index should not have values above %d." % nods)
++	if numpy.size(index,axis=1)!=3:
++		raise TypeError("GetNodalFunctionsCoeff error message: only 2d meshes supported. index should have 3 columns.")
++
++	#initialize output
++	alpha=numpy.zeros((nels,3))
++	beta=numpy.zeros((nels,3))
++
++	#compute nodal functions coefficients N(x,y)=alpha x + beta y +gamma
++	x1=x[index[:,0].astype(int)-1]
++	x2=x[index[:,1].astype(int)-1]
++	x3=x[index[:,2].astype(int)-1]
++	y1=y[index[:,0].astype(int)-1]
++	y2=y[index[:,1].astype(int)-1]
++	y3=y[index[:,2].astype(int)-1]
++	invdet=1./(x1*(y2-y3)-x2*(y1-y3)+x3*(y1-y2))
++
++	#get alpha and beta
++	alpha=numpy.hstack((invdet*(y2-y3),invdet*(y3-y1),invdet*(y1-y2)))
++	beta =numpy.hstack((invdet*(x3-x2),invdet*(x1-x3),invdet*(x2-x1)))
++
++	#get gamma if requested
++	gamma=numpy.zeros((nels,3))
++	gamma=numpy.hstack((invdet*(x2*y3-x3*y2),invdet*(y1*x3-y3*x1),invdet*(x1*y2-x2*y1)))
++
++	return alpha,beta,gamma
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13472-13473.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13472-13473.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13472-13473.diff	(revision 13980)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/test/NightlyRun/ad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad.m	(revision 13472)
++++ ../trunk-jpl/test/NightlyRun/ad.m	(revision 13473)
+@@ -6,10 +6,9 @@
+ 
+ md.autodiff.isautodiff=true;
+ md.verbose.autodiff=true;
+-index=1;
+ md.autodiff.independents={...
+ 	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',(1:md.mesh.numberofvertices)')
+-	%independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
++	%independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',1)
+ 	};
+ 
+ md.autodiff.dependents={...
Index: /issm/oecreview/Archive/13393-13976/ISSM-13473-13474.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13473-13474.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13473-13474.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/externalpackages/adolc
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc	(revision 13473)
++++ ../trunk-jpl/externalpackages/adolc	(revision 13474)
+
+Property changes on: ../trunk-jpl/externalpackages/adolc
+___________________________________________________________________
+Modified: svn:ignore
+## -1,3 +1,4 ##
++adolc_issm
+ adolc_v220_issm
+ trunk
+ *.gz
Index: /issm/oecreview/Archive/13393-13976/ISSM-13474-13475.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13474-13475.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13474-13475.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/execution
+===================================================================
+--- ../trunk-jpl/execution	(revision 13474)
++++ ../trunk-jpl/execution	(revision 13475)
+
+Property changes on: ../trunk-jpl/execution
+___________________________________________________________________
+Modified: svn:ignore
+## -1,2 +1,3 ##
+ test*
++pig*
+ ad*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13475-13476.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13475-13476.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13475-13476.diff	(revision 13980)
@@ -0,0 +1,67 @@
+Index: ../trunk-jpl/src/m/mech/mechanicalproperties.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/mechanicalproperties.m	(revision 13475)
++++ ../trunk-jpl/src/m/mech/mechanicalproperties.m	(revision 13476)
+@@ -75,9 +75,18 @@
+ 
+ 	%eigen values and vectors
+ 	[directions,value]=eig(stress);
++	%sort by absolute value of eigenvalue in descending order
++	[val,idx]=sort(abs(diag(value)),'descend');
++	%re-order eigenvalues and associated vectors 
++	value=value(idx,idx);
++	directions=directions(:,idx);
+ 	valuesstress(i,:)=[value(1,1) value(2,2)];
+ 	directionsstress(i,:)=directions(:)';
+ 	[directions,value]=eig(strain);
++	%same for strainrate
++	[val,idx]=sort(abs(diag(value)),'descend');
++	value=value(idx,idx);
++	directions=directions(:,idx);
+ 	valuesstrain(i,:)=[value(1,1) value(2,2)];
+ 	directionsstrain(i,:)=directions(:)';
+ end
+@@ -88,10 +97,10 @@
+ stress.xx=tau_xx;
+ stress.yy=tau_yy;
+ stress.xy=tau_xy;
+-stress.principalvalue2=valuesstress(:,1);
+-stress.principalaxis2=directionsstress(:,1:2);
+-stress.principalvalue1=valuesstress(:,2);
+-stress.principalaxis1=directionsstress(:,3:4);
++stress.principalvalue1=valuesstress(:,1);
++stress.principalaxis1=directionsstress(:,1:2);
++stress.principalvalue2=valuesstress(:,2);
++stress.principalaxis2=directionsstress(:,3:4);
+ stress.effectivevalue=1/sqrt(2)*sqrt(stress.xx.^2+stress.yy.^2+2*stress.xy.^2);
+ md.results.stress=stress;
+ 
+@@ -99,10 +108,10 @@
+ strainrate.xx=ux;
+ strainrate.yy=vy;
+ strainrate.xy=uyvx;
+-strainrate.principalvalue2=valuesstrain(:,1)*(365.25*24*3600); %strain rate in 1/a instead of 1/s
+-strainrate.principalaxis2=directionsstrain(:,1:2);
+-strainrate.principalvalue1=valuesstrain(:,2)*(365.25*24*3600); %strain rate in 1/a instead of 1/s
+-strainrate.principalaxis1=directionsstrain(:,3:4);
++strainrate.principalvalue1=valuesstrain(:,1)*(365.25*24*3600); %strain rate in 1/a instead of 1/s
++strainrate.principalaxis1=directionsstrain(:,1:2);
++strainrate.principalvalue2=valuesstrain(:,2)*(365.25*24*3600); %strain rate in 1/a instead of 1/s
++strainrate.principalaxis2=directionsstrain(:,3:4);
+ strainrate.effectivevalue=1/sqrt(2)*sqrt(strainrate.xx.^2+strainrate.yy.^2+2*strainrate.xy.^2);
+ md.results.strainrate=strainrate;
+ 
+@@ -110,9 +119,9 @@
+ deviatoricstress.xx=tau_xx;
+ deviatoricstress.yy=tau_yy;
+ deviatoricstress.xy=tau_xy;
+-deviatoricstress.principalvalue2=valuesstress(:,1);
+-deviatoricstress.principalaxis2=directionsstress(:,1:2);
+-deviatoricstress.principalvalue1=valuesstress(:,2);
+-deviatoricstress.principalaxis1=directionsstress(:,3:4);
++deviatoricstress.principalvalue1=valuesstress(:,1);
++deviatoricstress.principalaxis1=directionsstress(:,1:2);
++deviatoricstress.principalvalue2=valuesstress(:,2);
++deviatoricstress.principalaxis2=directionsstress(:,3:4);
+ deviatoricstress.effectivevalue=1/sqrt(2)*sqrt(stress.xx.^2+stress.yy.^2+2*stress.xy.^2);
+ md.results.deviatoricstress=deviatoricstress;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13476-13477.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13476-13477.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13476-13477.diff	(revision 13980)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 13476)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 13477)
+@@ -167,6 +167,9 @@
+ 			R2012a)
+ 			  MATLAB_MAJOR=7
+ 			  MATLAB_MINOR=14
++			R2012b)
++			  MATLAB_MAJOR=7
++			  MATLAB_MINOR=15
+ 			  ;;
+ 			*)
+ 			  AC_MSG_ERROR([can not determine Matlab version number])
Index: /issm/oecreview/Archive/13393-13976/ISSM-13477-13478.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13477-13478.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13477-13478.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 13477)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 13478)
+@@ -167,6 +167,7 @@
+ 			R2012a)
+ 			  MATLAB_MAJOR=7
+ 			  MATLAB_MINOR=14
++			  ;;
+ 			R2012b)
+ 			  MATLAB_MAJOR=7
+ 			  MATLAB_MINOR=15
Index: /issm/oecreview/Archive/13393-13976/ISSM-13478-13479.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13478-13479.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13478-13479.diff	(revision 13980)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/src/m/mech/mechanicalproperties.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/mechanicalproperties.m	(revision 13478)
++++ ../trunk-jpl/src/m/mech/mechanicalproperties.m	(revision 13479)
+@@ -50,13 +50,26 @@
+ B_bar=md.materials.rheology_B(index)*summation/3;
+ power=(md.materials.rheology_n-1)./(2*md.materials.rheology_n);
+ second_inv=(ux.^2+vy.^2+((uy+vx).^2)/4+ux.*vy);
++
+ %some corrections
+-location=find(second_inv~=0);
+-nu(location)=B_bar(location)./(second_inv(location).^power(location));
+ location=find(second_inv==0 & power~=0);
+ nu(location)=10^18; 	%arbitrary maximum viscosity to apply where there is no effective shear
+-location=find(second_inv==0 & power==0);
+-nu(location)=B_bar(location);
++
++if isa(md.materials,'matice')
++	location=find(second_inv~=0);
++	nu(location)=B_bar(location)./(second_inv(location).^power(location));
++	location=find(second_inv==0 & power==0);
++	nu(location)=B_bar(location);
++elseif isa(md.materials,'matdamageice')
++	Zinv=md.materials.rheology_Z(index)*summation/3;
++	location=find(second_inv~=0);
++	nu(location)=Zinv(location).*B_bar(location)./(second_inv(location).^power(location));
++	location=find(second_inv==0 & power==0);
++	nu(location)=Zinv(location).*B_bar(location);
++	clear Zinv
++else
++	error(['class of md.materials (' class(md.materials) ') not recognized or not supported']);
++end
+ clear B_bar location second_inv power
+ 
+ %compute stress
Index: /issm/oecreview/Archive/13393-13976/ISSM-13479-13480.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13479-13480.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13479-13480.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/modules/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/modules/matlab/Makefile.am	(revision 13479)
++++ ../trunk-jpl/src/modules/matlab/Makefile.am	(revision 13480)
+@@ -62,7 +62,7 @@
+ AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER
+ 
+ #Matlab part
+-AM_LDFLAGS = $(MEXLINK) -shrext ${EXEEXT} -module
++AM_LDFLAGS = -module $(MEXLINK) -shrext ${EXEEXT}
+ if VERSION
+ AM_LDFLAGS +=
+ else
Index: /issm/oecreview/Archive/13393-13976/ISSM-13480-13481.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13480-13481.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13480-13481.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13480)
++++ ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13481)
+@@ -159,7 +159,7 @@
+   return 0;
+ }
+ /*}}}*/
+-int EDF_fos_reverse_for_solverx(int m, double *dp_U, int n, double *dp_Z) { /*{{{*/
++int EDF_fos_reverse_for_solverx(int m, double *dp_U, int n, double *dp_Z, double* dp_x, double* dp_y) { /*{{{*/
+   return 0;
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13481-13482.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13481-13482.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13481-13482.diff	(revision 13980)
@@ -0,0 +1,325 @@
+Index: ../trunk-jpl/src/m/mesh/GetNodalFunctionsCoeff.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/GetNodalFunctionsCoeff.py	(revision 13481)
++++ ../trunk-jpl/src/m/mesh/GetNodalFunctionsCoeff.py	(revision 13482)
+@@ -18,8 +18,8 @@
+ 	"""
+ 
+ 	#make columns out of x and y
+-	x=x.rshape(-1)
+-	y=y.rshape(-1)
++	x=x.reshape(-1)
++	y=y.reshape(-1)
+ 
+ 	#get nels and nods
+ 	nels=numpy.size(index,axis=0)
+@@ -47,12 +47,12 @@
+ 	invdet=1./(x1*(y2-y3)-x2*(y1-y3)+x3*(y1-y2))
+ 
+ 	#get alpha and beta
+-	alpha=numpy.hstack((invdet*(y2-y3),invdet*(y3-y1),invdet*(y1-y2)))
+-	beta =numpy.hstack((invdet*(x3-x2),invdet*(x1-x3),invdet*(x2-x1)))
++	alpha=numpy.hstack(((invdet*(y2-y3)).reshape(-1,1),(invdet*(y3-y1)).reshape(-1,1),(invdet*(y1-y2)).reshape(-1,1)))
++	beta =numpy.hstack(((invdet*(x3-x2)).reshape(-1,1),(invdet*(x1-x3)).reshape(-1,1),(invdet*(x2-x1)).reshape(-1,1)))
+ 
+ 	#get gamma if requested
+ 	gamma=numpy.zeros((nels,3))
+-	gamma=numpy.hstack((invdet*(x2*y3-x3*y2),invdet*(y1*x3-y3*x1),invdet*(x1*y2-x2*y1)))
++	gamma=numpy.hstack(((invdet*(x2*y3-x3*y2)).reshape(-1,1),(invdet*(y1*x3-y3*x1)).reshape(-1,1),(invdet*(x1*y2-x2*y1)).reshape(-1,1)))
+ 
+ 	return alpha,beta,gamma
+ 
+Index: ../trunk-jpl/src/m/mesh/ComputeHessian.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/ComputeHessian.m	(revision 13481)
++++ ../trunk-jpl/src/m/mesh/ComputeHessian.m	(revision 13482)
+@@ -19,7 +19,7 @@
+ if length(field)~=numberofnodes & length(field)~=numberofelements,
+ 	error('ComputeHessian error message: the given field size not supported yet');
+ end
+-if strcmpi(type,'node') & strcmpi(type,'element'),
++if ~strcmpi(type,'node') & ~strcmpi(type,'element'),
+ 	error('ComputeHessian error message: only ''node'' or ''element'' type supported yet');
+ end
+ 
+@@ -27,11 +27,11 @@
+ line=index(:);
+ linesize=3*numberofelements;
+ 
+-%get areas and  nodal functions coefficients N(x,y)=alpha x + beta y + gamma 
++%get areas and nodal functions coefficients N(x,y)=alpha x + beta y + gamma 
+ [alpha beta]=GetNodalFunctionsCoeff(index,x,y);
+ areas=GetAreas(index,x,y);
+ 
+-%comput weights that holds the volume of all the element holding the node i
++%compute weights that hold the volume of all the element holding the node i
+ weights=sparse(line,ones(linesize,1),repmat(areas,3,1),numberofnodes,1);
+ 
+ %compute field on nodes if on elements
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 13481)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 13482)
+@@ -261,7 +261,7 @@
+ 		#bamg_geometry=processgeometry(bamg_geometry,options.getfieldvalue('tol',float(nan)),domain[0])
+ 
+ 	elif isinstance(md.private.bamg,dict) and 'geometry' in md.private.bamg:
+-		bamg_geometry=bamggeom(md.private.bamg['geometry']) 
++		bamg_geometry=bamggeom(md.private.bamg['geometry'].__dict__) 
+ 	else:
+ 		#do nothing...
+ 		pass
+@@ -309,7 +309,7 @@
+ 	#}}}
+ 
+ 	#call Bamg
+-	bamgmesh_out,bamggeom_out=BamgMesher(bamg_mesh.__dict__,bamg_geometry.__dict__,bamg_options)
++	[bamgmesh_out,bamggeom_out]=BamgMesher(bamg_mesh.__dict__,bamg_geometry.__dict__,bamg_options)
+ 
+ 	# plug results onto model
+ 	md.private.bamg=OrderedDict()
+Index: ../trunk-jpl/src/m/mesh/ComputeMetric.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/ComputeMetric.py	(revision 0)
++++ ../trunk-jpl/src/m/mesh/ComputeMetric.py	(revision 13482)
+@@ -0,0 +1,74 @@
++import numpy
++
++def ComputeMetric(hessian,scale,epsilon,hmin,hmax,pos):
++	"""
++	COMPUTEMETRIC - compute metric from an Hessian
++
++	   Usage:
++	      metric=ComputeMetric(hessian,scale,epsilon,hmin,hmax,pos)
++	      pos is contains the positions where the metric is wished to be maximized (water?)
++
++	   Example:
++	      metric=ComputeMetric(hessian,2/9,10^-1,100,10^5,find(md.nodeonwater)
++	"""
++
++	#first, find the eigen values of each line of H=[hessian(i,1) hessian(i,2); hessian(i,2) hessian(i,3)]
++	a=hessian[:,0]
++	b=hessian[:,1]
++	d=hessian[:,2]
++	lambda1=0.5*((a+d)+numpy.sqrt(4.*b**2+(a-d)**2))
++	lambda2=0.5*((a+d)-numpy.sqrt(4.*b**2+(a-d)**2))
++	pos1=numpy.nonzero(lambda1==0)[0]
++	pos2=numpy.nonzero(lambda2==0)[0]
++	pos3=numpy.nonzero(numpy.logical_and(b==0,lambda1==lambda2))[0]
++
++	#Modify the eigen values to control the shape of the elements
++	lambda1=numpy.minimum(numpy.maximum(numpy.abs(lambda1)*scale/epsilon,1./hmax**2),1./hmin**2)
++	lambda2=numpy.minimum(numpy.maximum(numpy.abs(lambda2)*scale/epsilon,1./hmax**2),1./hmin**2)
++
++	#compute eigen vectors
++	norm1=numpy.sqrt(8.*b**2+2.*(d-a)**2+2.*(d-a)*numpy.sqrt((a-d)**2+4.*b**2))
++	v1x=2.*b/norm1
++	v1y=((d-a)+numpy.sqrt((a-d)**2+4.*b**2))/norm1
++	norm2=numpy.sqrt(8.*b**2+2.*(d-a)**2-2.*(d-a)*numpy.sqrt((a-d)**2+4.*b**2))
++	v2x=2.*b/norm2
++	v2y=((d-a)-numpy.sqrt((a-d)**2+4.*b**2))/norm2
++
++	v1x[pos3]=1.
++	v1y[pos3]=0.
++	v2x[pos3]=0.
++	v2y[pos3]=1.
++
++	#Compute new metric (for each node M=V*Lambda*V^-1)
++	metric=numpy.hstack((((v1x*v2y-v1y*v2x)**(-1)*( lambda1*v2y*v1x-lambda2*v1y*v2x)).reshape(-1,1), \
++		                 ((v1x*v2y-v1y*v2x)**(-1)*( lambda1*v1y*v2y-lambda2*v1y*v2y)).reshape(-1,1), \
++		                 ((v1x*v2y-v1y*v2x)**(-1)*(-lambda1*v2x*v1y+lambda2*v1x*v2y)).reshape(-1,1)))
++
++	#some corrections for 0 eigen values
++	metric[pos1,:]=numpy.tile(numpy.array([[1./hmax**2,0.,1./hmax**2]]),(numpy.size(pos1),1))
++	metric[pos2,:]=numpy.tile(numpy.array([[1./hmax**2,0.,1./hmax**2]]),(numpy.size(pos2),1))
++
++	#take care of water elements
++	metric[pos ,:]=numpy.tile(numpy.array([[1./hmax**2,0.,1./hmax**2]]),(numpy.size(pos ),1))
++
++	#take care of NaNs if any (use Numpy eig in a loop)
++	pos=numpy.nonzero(numpy.isnan(metric))[0]
++	if pos:
++		print(" %i NaN found in the metric. Use Numpy routine..." % numpy.size(pos))
++		for posi in pos:
++			H=numpy.array([[hessian[posi,0],hessian[posi,1]],[hessian[posi,1],hessian[posi,2]]])
++			[v,u]=numpy.linalg.eig(H)
++			v=numpy.diag(v)
++			lambda1=v[0,0]
++			lambda2=v[1,1]
++			v[0,0]=numpy.minimum(numpy.maximum(numpy.abs(lambda1)*scale/epsilon,1./hmax**2),1./hmin**2)
++			v[1,1]=numpy.minimum(numpy.maximum(numpy.abs(lambda2)*scale/epsilon,1./hmax**2),1./hmin**2)
++
++			metricTria=numpy.dot(numpy.dot(u,v),numpy.linalg.inv(u))
++			metric[posi,:]=numpy.array([metricTria[0,0],metricTria[0,1],metricTria[1,1]])
++
++	if numpy.any(numpy.isnan(metric)):
++		raise RunTimeError("ComputeMetric error message: NaN in the metric despite our efforts...")
++
++	return metric
++
+Index: ../trunk-jpl/src/m/mesh/ComputeMetric.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/ComputeMetric.m	(revision 13481)
++++ ../trunk-jpl/src/m/mesh/ComputeMetric.m	(revision 13482)
+@@ -8,28 +8,28 @@
+ %   Example:
+ %      metric=ComputeMetric(hessian,2/9,10^-1,100,10^5,find(md.nodeonwater)
+ 
+-%first, find the eigen values of eah line of H=[hessian(i,1) hessian(i,2); hessian(i,2)  hessian(i,3)]
++%first, find the eigen values of each line of H=[hessian(i,1) hessian(i,2); hessian(i,2) hessian(i,3)]
+ a=hessian(:,1); b=hessian(:,2); d=hessian(:,3);
+-lambda1=0.5*((a+d)+sqrt(4*b.^2+(a-d).^2));
+-lambda2=0.5*((a+d)-sqrt(4*b.^2+(a-d).^2));
++lambda1=0.5*((a+d)+sqrt(4.*b.^2+(a-d).^2));
++lambda2=0.5*((a+d)-sqrt(4.*b.^2+(a-d).^2));
+ pos1=find(lambda1==0);
+ pos2=find(lambda2==0);
+ pos3=find(b==0 & lambda1==lambda2);
+ 
+ %Modify the eigen values to control the shape of the elements
+-lambda1=min(max(abs(lambda1)*scale/epsilon,1/hmax^2),1/hmin^2);
+-lambda2=min(max(abs(lambda2)*scale/epsilon,1/hmax^2),1/hmin^2);
++lambda1=min(max(abs(lambda1)*scale/epsilon,1./hmax^2),1./hmin^2);
++lambda2=min(max(abs(lambda2)*scale/epsilon,1./hmax^2),1./hmin^2);
+ 
+ %compute eigen vectors
+-norm1=sqrt(8*b.^2+2*(d-a).^2+2*(d-a).*sqrt((a-d).^2+4*b.^2));
+-v1x=2*b./norm1;
+-v1y=((d-a)+sqrt((a-d).^2+4*b.^2))./norm1;
+-norm2=sqrt(8*b.^2+2*(d-a).^2-2*(d-a).*sqrt((a-d).^2+4*b.^2));
+-v2x=2*b./norm2;
+-v2y=((d-a)-sqrt((a-d).^2+4*b.^2))./norm2;
++norm1=sqrt(8.*b.^2+2.*(d-a).^2+2.*(d-a).*sqrt((a-d).^2+4.*b.^2));
++v1x=2.*b./norm1;
++v1y=((d-a)+sqrt((a-d).^2+4.*b.^2))./norm1;
++norm2=sqrt(8.*b.^2+2.*(d-a).^2-2.*(d-a).*sqrt((a-d).^2+4.*b.^2));
++v2x=2.*b./norm2;
++v2y=((d-a)-sqrt((a-d).^2+4.*b.^2))./norm2;
+ 
+-v1x(pos3)=1; v1y(pos3)=0;
+-v2x(pos3)=0; v2y(pos3)=1;
++v1x(pos3)=1.; v1y(pos3)=0.;
++v2x(pos3)=0.; v2y(pos3)=1.;
+ 
+ %Compute new metric (for each node M=V*Lambda*V^-1)
+ metric=full([(v1x.*v2y-v1y.*v2x).^(-1).*(lambda1.*v2y.*v1x-lambda2.*v1y.*v2x) ...
+@@ -37,11 +37,11 @@
+ 	(v1x.*v2y-v1y.*v2x).^(-1).*(-lambda1.*v2x.*v1y+lambda2.*v1x.*v2y)]);
+ 
+ %some corrections for 0 eigen values
+-metric(pos1,:)=repmat([1/hmax^2 0 1/hmax^2],length(pos1),1);
+-metric(pos2,:)=repmat([1/hmax^2 0 1/hmax^2],length(pos2),1);
++metric(pos1,:)=repmat([1./hmax^2 0. 1./hmax^2],length(pos1),1);
++metric(pos2,:)=repmat([1./hmax^2 0. 1./hmax^2],length(pos2),1);
+ 
+ %take care of water elements
+-metric(pos,:)=repmat([1/hmax^2 0 1/hmax^2],length(pos),1);
++metric(pos,:)=repmat([1./hmax^2 0. 1./hmax^2],length(pos),1);
+ 
+ %take care of NaNs if any (use Matlab eig in a loop)
+ [pos posj]=find(isnan(metric)); clear posj;
+@@ -53,8 +53,8 @@
+ 		[u,v]=eig(full(H));
+ 		lambda1=v(1,1);
+ 		lambda2=v(2,2);
+-		v(1,1)=min(max(abs(lambda1)*scale/epsilon,1/hmax^2),1/hmin^2);
+-		v(2,2)=min(max(abs(lambda2)*scale/epsilon,1/hmax^2),1/hmin^2);
++		v(1,1)=min(max(abs(lambda1)*scale/epsilon,1./hmax^2),1./hmin^2);
++		v(2,2)=min(max(abs(lambda2)*scale/epsilon,1./hmax^2),1./hmin^2);
+ 
+ 		metricTria=u*v*u^(-1);
+ 		metric(pos(i),:)=[metricTria(1,1) metricTria(1,2) metricTria(2,2)];
+Index: ../trunk-jpl/src/m/mesh/ComputeHessian.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/ComputeHessian.py	(revision 0)
++++ ../trunk-jpl/src/m/mesh/ComputeHessian.py	(revision 13482)
+@@ -0,0 +1,66 @@
++import numpy
++from GetNodalFunctionsCoeff import *
++from GetAreas import *
++from MatlabFuncs import *
++
++def ComputeHessian(index,x,y,field,type):
++	"""
++	COMPUTEHESSIAN - compute hessian matrix from a field
++
++	   Compute the hessian matrix of a given field
++	   return the three components Hxx Hxy Hyy
++	   for each element or each node
++
++	   Usage:
++	      hessian=ComputeHessian(index,x,y,field,type)
++
++	   Example:
++	      hessian=ComputeHessian(md.mesh.elements,md.mesh.x,md.mesh.y,md.inversion.vel_obs,'node')
++	"""
++
++	#some variables
++	numberofnodes=numpy.size(x)
++	numberofelements=numpy.size(index,axis=0)
++
++	#some checks
++	if numpy.size(field)!=numberofnodes and numpy.size(field)!=numberofelements:
++		raise TypeError("ComputeHessian error message: the given field size not supported yet")
++	if not strcmpi(type,'node') and not strcmpi(type,'element'):
++		raise TypeError("ComputeHessian error message: only 'node' or 'element' type supported yet")
++
++	#initialization
++	line=index.reshape(-1,order='F')
++	linesize=3*numberofelements
++
++	#get areas and nodal functions coefficients N(x,y)=alpha x + beta y + gamma 
++	[alpha,beta,dum]=GetNodalFunctionsCoeff(index,x,y)
++	areas=GetAreas(index,x,y)
++
++	#compute weights that hold the volume of all the element holding the node i
++	weights=sparse(line,numpy.ones((linesize,1)),numpy.tile(areas.reshape(-1,1),(3,1)),numberofnodes,1)
++
++	#compute field on nodes if on elements
++	if numpy.size(field,axis=0)==numberofelements:
++		field=sparse(line,numpy.ones((linesize,1)),numpy.tile(areas*field,(3,1)),numberofnodes,1)/weights
++
++	#Compute gradient for each element
++	grad_elx=numpy.sum(field[index.astype(int)-1,0]*alpha,axis=1) 
++	grad_ely=numpy.sum(field[index.astype(int)-1,0]*beta,axis=1)
++
++	#Compute gradient for each node (average of the elements around)
++	gradx=sparse(line,numpy.ones((linesize,1)),numpy.tile((areas*grad_elx).reshape(-1,1),(3,1)),numberofnodes,1)
++	grady=sparse(line,numpy.ones((linesize,1)),numpy.tile((areas*grad_ely).reshape(-1,1),(3,1)),numberofnodes,1)
++	gradx=gradx/weights
++	grady=grady/weights
++
++	#Compute hessian for each element
++	hessian=numpy.hstack((numpy.sum(gradx[index.astype(int)-1,0]*alpha,axis=1).reshape(-1,1),numpy.sum(grady[index.astype(int)-1,0]*alpha,axis=1).reshape(-1,1),numpy.sum(grady[index.astype(int)-1,0]*beta,axis=1).reshape(-1,1)))
++
++	if strcmpi(type,'node'):
++		#Compute Hessian on the nodes (average of the elements around)
++		hessian=numpy.hstack((sparse(line,numpy.ones((linesize,1)),numpy.tile((areas*hessian[:,0]).reshape(-1,1),(3,1)),numberofnodes,1)/weights, \
++			sparse(line,numpy.ones((linesize,1)),numpy.tile((areas*hessian[:,1]).reshape(-1,1),(3,1)),numberofnodes,1)/weights, \
++			sparse(line,numpy.ones((linesize,1)),numpy.tile((areas*hessian[:,2]).reshape(-1,1),(3,1)),numberofnodes,1)/weights ))
++
++	return hessian
++
+Index: ../trunk-jpl/src/m/miscellaneous/MatlabFuncs.py
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/MatlabFuncs.py	(revision 13481)
++++ ../trunk-jpl/src/m/miscellaneous/MatlabFuncs.py	(revision 13482)
+@@ -73,3 +73,18 @@
+ 	else:
+ 		raise TypeError("MatlabFunc.det only implemented for shape (2, 2), not for shape %s." % str(a.shape))
+ 
++def sparse(ivec,jvec,svec,m=0,n=0,nzmax=0):
++	import numpy
++
++	if not m:
++		m=numpy.max(ivec)
++	if not n:
++		n=numpy.max(jvec)
++
++	a=numpy.zeros((m,n))
++
++	for i,j,s in zip(ivec.reshape(-1,order='F'),jvec.reshape(-1,order='F'),svec.reshape(-1,order='F')):
++		a[i-1,j-1]+=s
++
++	return a
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13482-13483.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13482-13483.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13482-13483.diff	(revision 13980)
@@ -0,0 +1,814 @@
+Index: ../trunk-jpl/test/NightlyRun/ad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad.m	(revision 13482)
++++ ../trunk-jpl/test/NightlyRun/ad.m	(revision 13483)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',50000);
++md=triangle(model,'../Exp/Square.exp',100000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+@@ -14,8 +14,16 @@
+ md.autodiff.dependents={...
+ 	dependent('name','IceVolume','type','scalar')...
+ 	dependent('name','MaxVel','type','scalar')...
++	dependent('name','MassFlux','type','scalar','exp','../Exp/MassFlux1.exp','mesh',md.mesh,'index',1)...
++	dependent('name','MassFlux','type','scalar','exp','../Exp/MassFlux2.exp','mesh',md.mesh,'index',2)...
+ 	};
++
+ %md.autodiff.driver='fos_forward';
+ md.autodiff.driver='fov_forward';
+ 
+ md=solve(md,TransientSolutionEnum);
++
++%plot
++nods=md.mesh.numberofvertices;
++jac=md.results.TransientSolution(1).AutodiffJacobian;
++plotmodel(md,'data',jac(1:nods),'data',jac(nods+1:2*nods),'data',jac(2*nods+1:3*nods),'data',jac(3*nods+1:4*nods));
+Index: ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13482)
++++ ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13483)
+@@ -16,6 +16,7 @@
+ 	AutodiffNumDependentObjectsEnum,
+ 	AutodiffDependentObjectNamesEnum,
+ 	AutodiffDependentObjectTypesEnum,
++	AutodiffDependentObjectIndicesEnum,
+ 	AutodiffDependentObjectsEnum,
+ 	AutodiffNumIndependentsEnum,
+ 	AutodiffNumIndependentObjectsEnum,
+@@ -155,7 +156,8 @@
+ 	PrognosticNumRequestedOutputsEnum,
+ 	PrognosticRequestedOutputsEnum,
+ 	QmuIsdakotaEnum,
+-	QmuMassFluxSegmentsEnum,
++	MassFluxSegmentsEnum,
++	MassFluxSegmentsPresentEnum,
+ 	QmuNumberofpartitionsEnum,
+ 	QmuNumberofresponsesEnum,
+ 	QmuPartitionEnum,
+Index: ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13482)
++++ ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13483)
+@@ -22,6 +22,7 @@
+ 	      else if (strcmp(name,"AutodiffNumDependentObjects")==0) return AutodiffNumDependentObjectsEnum;
+ 	      else if (strcmp(name,"AutodiffDependentObjectNames")==0) return AutodiffDependentObjectNamesEnum;
+ 	      else if (strcmp(name,"AutodiffDependentObjectTypes")==0) return AutodiffDependentObjectTypesEnum;
++	      else if (strcmp(name,"AutodiffDependentObjectIndices")==0) return AutodiffDependentObjectIndicesEnum;
+ 	      else if (strcmp(name,"AutodiffDependentObjects")==0) return AutodiffDependentObjectsEnum;
+ 	      else if (strcmp(name,"AutodiffNumIndependents")==0) return AutodiffNumIndependentsEnum;
+ 	      else if (strcmp(name,"AutodiffNumIndependentObjects")==0) return AutodiffNumIndependentObjectsEnum;
+@@ -136,11 +137,11 @@
+ 	      else if (strcmp(name,"MeshElementconnectivity")==0) return MeshElementconnectivityEnum;
+ 	      else if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
+ 	      else if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
+-	      else if (strcmp(name,"MeshElements2d")==0) return MeshElements2dEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
++	      if (strcmp(name,"MeshElements2d")==0) return MeshElements2dEnum;
++	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
+ 	      else if (strcmp(name,"MeshLowerelements")==0) return MeshLowerelementsEnum;
+ 	      else if (strcmp(name,"MeshNumberofedges")==0) return MeshNumberofedgesEnum;
+ 	      else if (strcmp(name,"MeshNumberofelements2d")==0) return MeshNumberofelements2dEnum;
+@@ -164,7 +165,8 @@
+ 	      else if (strcmp(name,"PrognosticNumRequestedOutputs")==0) return PrognosticNumRequestedOutputsEnum;
+ 	      else if (strcmp(name,"PrognosticRequestedOutputs")==0) return PrognosticRequestedOutputsEnum;
+ 	      else if (strcmp(name,"QmuIsdakota")==0) return QmuIsdakotaEnum;
+-	      else if (strcmp(name,"QmuMassFluxSegments")==0) return QmuMassFluxSegmentsEnum;
++	      else if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum;
++	      else if (strcmp(name,"MassFluxSegmentsPresent")==0) return MassFluxSegmentsPresentEnum;
+ 	      else if (strcmp(name,"QmuNumberofpartitions")==0) return QmuNumberofpartitionsEnum;
+ 	      else if (strcmp(name,"QmuNumberofresponses")==0) return QmuNumberofresponsesEnum;
+ 	      else if (strcmp(name,"QmuPartition")==0) return QmuPartitionEnum;
+@@ -258,12 +260,12 @@
+ 	      else if (strcmp(name,"SurfaceSlopeYAnalysis")==0) return SurfaceSlopeYAnalysisEnum;
+ 	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+ 	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+-	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+-	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
++	      if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
++	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
++	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+ 	      else if (strcmp(name,"HutterApproximation")==0) return HutterApproximationEnum;
+ 	      else if (strcmp(name,"MacAyealApproximation")==0) return MacAyealApproximationEnum;
+ 	      else if (strcmp(name,"MacAyealPattynApproximation")==0) return MacAyealPattynApproximationEnum;
+@@ -381,12 +383,12 @@
+ 	      else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
+ 	      else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
+-	      else if (strcmp(name,"TemperatureOld")==0) return TemperatureOldEnum;
+-	      else if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"TemperatureSurface")==0) return TemperatureSurfaceEnum;
++	      if (strcmp(name,"TemperatureOld")==0) return TemperatureOldEnum;
++	      else if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum;
++	      else if (strcmp(name,"TemperatureSurface")==0) return TemperatureSurfaceEnum;
+ 	      else if (strcmp(name,"TemperatureBasal")==0) return TemperatureBasalEnum;
+ 	      else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum;
+ 	      else if (strcmp(name,"Type")==0) return TypeEnum;
+@@ -504,12 +506,12 @@
+ 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+ 	      else if (strcmp(name,"XY")==0) return XYEnum;
+ 	      else if (strcmp(name,"XYZP")==0) return XYZPEnum;
+-	      else if (strcmp(name,"Option")==0) return OptionEnum;
+-	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"OptionCell")==0) return OptionCellEnum;
++	      if (strcmp(name,"Option")==0) return OptionEnum;
++	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
++	      else if (strcmp(name,"OptionCell")==0) return OptionCellEnum;
+ 	      else if (strcmp(name,"OptionChar")==0) return OptionCharEnum;
+ 	      else if (strcmp(name,"OptionStruct")==0) return OptionStructEnum;
+ 	      else if (strcmp(name,"OptionDouble")==0) return OptionDoubleEnum;
+Index: ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13482)
++++ ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13483)
+@@ -21,6 +21,7 @@
+ 		case AutodiffNumDependentObjectsEnum : return "AutodiffNumDependentObjects";
+ 		case AutodiffDependentObjectNamesEnum : return "AutodiffDependentObjectNames";
+ 		case AutodiffDependentObjectTypesEnum : return "AutodiffDependentObjectTypes";
++		case AutodiffDependentObjectIndicesEnum : return "AutodiffDependentObjectIndices";
+ 		case AutodiffDependentObjectsEnum : return "AutodiffDependentObjects";
+ 		case AutodiffNumIndependentsEnum : return "AutodiffNumIndependents";
+ 		case AutodiffNumIndependentObjectsEnum : return "AutodiffNumIndependentObjects";
+@@ -160,7 +161,8 @@
+ 		case PrognosticNumRequestedOutputsEnum : return "PrognosticNumRequestedOutputs";
+ 		case PrognosticRequestedOutputsEnum : return "PrognosticRequestedOutputs";
+ 		case QmuIsdakotaEnum : return "QmuIsdakota";
+-		case QmuMassFluxSegmentsEnum : return "QmuMassFluxSegments";
++		case MassFluxSegmentsEnum : return "MassFluxSegments";
++		case MassFluxSegmentsPresentEnum : return "MassFluxSegmentsPresent";
+ 		case QmuNumberofpartitionsEnum : return "QmuNumberofpartitions";
+ 		case QmuNumberofresponsesEnum : return "QmuNumberofresponses";
+ 		case QmuPartitionEnum : return "QmuPartition";
+Index: ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp	(revision 13482)
++++ ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp	(revision 13483)
+@@ -33,7 +33,7 @@
+ 			/*Go through our dependent variables, and compute the response:*/
+ 			for(i=0;i<dependent_objects->Size();i++){
+ 				DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
+-				Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters,dep->name,false,0);
++				dep->Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters);
+ 				output_value>>=dependents[i];
+ 			}
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13482)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13483)
+@@ -60,9 +60,10 @@
+ 		if(num_dependent_objects){
+ 			iomodel->FetchData(&names,&dummy,&dummy,AutodiffDependentObjectNamesEnum);
+ 			iomodel->FetchData(&types,&dummy,&dummy,AutodiffDependentObjectTypesEnum);
++			iomodel->FetchData(&indices,&dummy,&dummy,AutodiffDependentObjectIndicesEnum);
+ 
+ 			for(i=0;i<num_dependent_objects;i++){
+-				DependentObject* dep=new DependentObject(names[i],types[i]);
++				DependentObject* dep=new DependentObject(names[i],types[i],indices[i]);
+ 				dependent_objects->AddObject(dep);
+ 				num_dep+=dep->NumDependents();
+ 			}
+@@ -76,7 +77,6 @@
+ 
+ 		delete dependent_objects;
+ 		/*}}}*/
+-
+ 		/*Deal with independents: {{{*/
+ 
+ 		/*Independents have already been recovered in iomodel->DeclareIndependents. Just do some more processing. 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 13482)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 13483)
+@@ -38,19 +38,9 @@
+ 	//descriptors:
+ 	char tag[50];
+ 	
+-	/*parameters for mass flux: */
+-	bool     qmu_mass_flux_present=false;
+-	int qmu_mass_flux_num_profiles=0;
+-	double** array=NULL;
+-	int*     mdims_array=NULL;
+-	int*     ndims_array=NULL;
+-	
+-	double*  matrix=NULL;
+-	double*  temp_matrix=NULL;
++			
+ 	int      M;
+-	int      temp_m,temp_n;
+ 	int      m,n;
+-	int      count;
+ 	bool     dakota_analysis=false;
+ 	char*    name=NULL;
+ 	int      numberofresponses;
+@@ -139,67 +129,6 @@
+ 			}
+ 		}
+ 		/*}}}*/
+-		/*Deal with data needed to compute qmu responses: {{{*/
+-		for(i=0;i<numresponsedescriptors;i++){
+-			
+-			if(strncmp(responsedescriptors[i],"indexed_MassFlux",16)==0){
+-				qmu_mass_flux_present=true;
+-			}
+-		}
+-		
+-		
+-		if(qmu_mass_flux_present){
+-			
+-			/*Fetch the mass flux segments necessary to compute the mass fluxes.  Build a DoubleMatArrayParam object out of them: */ 
+-			iomodel->FetchData(&array,&mdims_array,&ndims_array,&qmu_mass_flux_num_profiles,QmuMassFluxSegmentsEnum);
+-			if(qmu_mass_flux_num_profiles==0)_error_("qmu_mass_flux_num_profiles is 0, when MassFlux computations were requested!");
+-
+-			/*Go through segments, and extract those that belong to this cpu: */
+-			for(i=0;i<qmu_mass_flux_num_profiles;i++){
+-				temp_matrix=array[i];
+-				temp_m=mdims_array[i];
+-				temp_n=ndims_array[i];
+-
+-				m=0;
+-				for(j=0;j<temp_m;j++){
+-					if (  iomodel->my_elements[(int)(*(temp_matrix+5*j+4))-1])m++;
+-				}
+-				if(m){
+-					matrix=xNewZeroInit<double>(5*m);
+-					count=0;
+-					for(j=0;j<temp_m;j++){
+-						if (iomodel->my_elements[(int)*(temp_matrix+5*j+4)-1]){
+-							for(k=0;k<5;k++)*(matrix+5*count+k)=*(temp_matrix+5*j+k);
+-							count++;
+-						}
+-					}
+-				}
+-				else{
+-					matrix=NULL;
+-				}
+-
+-				/*Assign: */
+-				array[i]=matrix;
+-				mdims_array[i]=m;
+-				ndims_array[i]=5;
+-
+-				/*Free temporary matrix: */
+-				xDelete<double>(temp_matrix);
+-			}
+-
+-			/*Ok, we have an array of segments, different on every cpu. Create a DoubleMatArrayParam object with it: */
+-			parameters->AddObject(new DoubleMatArrayParam(QmuMassFluxSegmentsEnum,array,qmu_mass_flux_num_profiles,mdims_array,ndims_array));
+-
+-			/*Free data: */
+-			for(i=0;i<qmu_mass_flux_num_profiles;i++){
+-				double* matrix=array[i];
+-				xDelete<double>(matrix);
+-			}
+-			xDelete<int>(mdims_array); 
+-			xDelete<int>(ndims_array);
+-			xDelete<double*>(array);
+-		}
+-		/*}}}*/
+ 		/*Free data: {{{*/
+ 		for(i=0;i<numresponsedescriptors;i++){
+ 			descriptor=responsedescriptors[i];
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13482)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13483)
+@@ -20,12 +20,24 @@
+ 
+ void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,int analysis_type,int analysis_counter){
+ 	
+-	int         i;
++	int         i,j,m,k;
+ 	int         numoutputs;
+ 	Parameters *parameters       = NULL;
+ 	IssmDouble *requestedoutputs = NULL;
+ 	bool        isdelta18o;
+ 
++	/*parameters for mass flux: {{{*/
++	int      mass_flux_num_profiles=0;
++	bool     mass_flux_present=false;
++	IssmDouble** array=NULL;
++	int*     mdims_array=NULL;
++	int*     ndims_array=NULL;
++	IssmDouble*  temp_matrix=NULL;
++	int      temp_m,temp_n;
++	IssmDouble*  matrix=NULL;
++	int      count;
++	/*}}}*/
++
+ 	if(*pparameters)return; //do not create parameters twice!
+ 
+ 	/*Initialize dataset: */
+@@ -141,7 +153,65 @@
+ 	parameters->AddObject(new IntParam(PrognosticNumRequestedOutputsEnum,numoutputs));
+ 	if(numoutputs)parameters->AddObject(new IntVecParam(PrognosticRequestedOutputsEnum,requestedoutputs,numoutputs));
+ 	iomodel->DeleteData(requestedoutputs,PrognosticRequestedOutputsEnum);
++		
++	
++	/*Deal with mass flux segments: {{{*/
++	iomodel->FetchData(&mass_flux_present,MassFluxSegmentsPresentEnum);
++	parameters->AddObject(new BoolParam(MassFluxSegmentsPresentEnum,mass_flux_present));
+ 
++	if(mass_flux_present){
++
++		/*Fetch the mass flux segments necessary to compute the mass fluxes.  Build a DoubleMatArrayParam object out of them: */ 
++		iomodel->FetchData(&array,&mdims_array,&ndims_array,&mass_flux_num_profiles,MassFluxSegmentsEnum);
++		if(mass_flux_num_profiles==0)_error_("mass_flux_num_profiles is 0, when MassFlux computations were requested!");
++
++		/*Go through segments, and extract those that belong to this cpu: */
++		for(i=0;i<mass_flux_num_profiles;i++){
++			temp_matrix=array[i];
++			temp_m=mdims_array[i];
++			temp_n=ndims_array[i];
++
++			m=0;
++			for(j=0;j<temp_m;j++){
++				if (  iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1] )m++;
++			}
++			if(m){
++				matrix=xNewZeroInit<IssmDouble>(5*m);
++				count=0;
++				for(j=0;j<temp_m;j++){
++					if (iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1]){
++						for(k=0;k<5;k++)*(matrix+5*count+k)=*(temp_matrix+5*j+k);
++						count++;
++					}
++				}
++			}
++			else{
++				matrix=NULL;
++			}
++
++			/*Assign: */
++			array[i]=matrix;
++			mdims_array[i]=m;
++			ndims_array[i]=5;
++
++			/*Free temporary matrix: */
++			xDelete<IssmDouble>(temp_matrix);
++		}
++
++		/*Ok, we have an array of segments, different on every cpu. Create a DoubleMatArrayParam object with it: */
++		parameters->AddObject(new DoubleMatArrayParam(MassFluxSegmentsEnum,array,mass_flux_num_profiles,mdims_array,ndims_array));
++
++		/*Free data: */
++		for(i=0;i<mass_flux_num_profiles;i++){
++			IssmDouble* matrix=array[i];
++			xDelete<IssmDouble>(matrix);
++		}
++		xDelete<int>(mdims_array); 
++		xDelete<int>(ndims_array);
++		xDelete<IssmDouble*>(array);
++	}
++	/*}}}*/
++
+ 	/*Before returning, create parameters in case we are running Qmu or control types runs: */
+ 	#ifdef _HAVE_CONTROL_
+ 	CreateParametersControl(&parameters,iomodel,solution_type,analysis_type);
+Index: ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp	(revision 13482)
++++ ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp	(revision 13483)
+@@ -14,6 +14,7 @@
+ 	int      i,j;
+ 	Element *element    = NULL;
+ 	int      element_id;
++	bool     ispresent=false;
+ 	
+ 	/*output: */
+ 	IssmDouble mass_flux=0;
+@@ -31,15 +32,18 @@
+ 	int         num_segments;
+ 
+ 	/*First, figure out which segment to compute our mass flux on. Start with retrieving qmu_mass_flux_segments: */
+-	parameters->FindParam(&array,&M,&mdims_array,&ndims_array,QmuMassFluxSegmentsEnum);
++	parameters->FindParam(&ispresent,MassFluxSegmentsPresentEnum);
++	if(!ispresent)_error_("no mass flux segments available!");
+ 
++	parameters->FindParam(&array,&M,&mdims_array,&ndims_array,MassFluxSegmentsEnum);
++
+ 	/*Retrieve index of segments being used for MassFlux computation: */
+ 	parameters->FindParam(&counter,IndexEnum);
+ 
+ 	/*retrieve segments from array: */
+ 	segments=array[counter-1]; //matlab to "C" indexing
+ 	num_segments=mdims_array[counter-1];
+-
++	
+ 	/*Go through segments, and then elements, and figure out which elements belong to a segment. 
+ 	 * When we find one, use the element to compute the mass flux on the segment: */
+ 	for(i=0;i<num_segments;i++){
+Index: ../trunk-jpl/src/c/classes/objects/DependentObject.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/DependentObject.h	(revision 13482)
++++ ../trunk-jpl/src/c/classes/objects/DependentObject.h	(revision 13483)
+@@ -9,6 +9,13 @@
+ #include "./Object.h"
+ #include "../../shared/shared.h"
+ /*}}}*/
++		
++class Elements;
++class Nodes;
++class Vertices;
++class Loads;
++class Materials;
++class Parameters;
+ 
+ class DependentObject: public Object{
+ 	
+@@ -16,10 +23,11 @@
+ 
+ 		int name;
+ 		int type;  /*0: scalar, 1: vertex*/
++		int index;  /*0: scalar, 1: vertex*/
+ 		
+ 		/*DependentObject constructors, destructors {{{*/
+ 		DependentObject();
+-		DependentObject(int name, int type);
++		DependentObject(int name, int type,int index);
+ 		~DependentObject();
+ 		/*}}}*/
+ 		/*Object virtual functions definitions:{{{ */
+@@ -33,6 +41,7 @@
+ 
+ 		/*DependentObject methods: */
+ 		int  NumDependents(void);
++		void Responsex(IssmDouble* poutput_value,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters);
+ 
+ };
+ #endif //ifndef _DEPENDENTOBJECT_H_
+Index: ../trunk-jpl/src/c/classes/objects/DependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/DependentObject.cpp	(revision 13482)
++++ ../trunk-jpl/src/c/classes/objects/DependentObject.cpp	(revision 13483)
+@@ -15,19 +15,22 @@
+ #include "../../shared/shared.h"
+ #include "../../Container/Container.h"
+ #include "../../include/include.h"
++#include "../../modules/Responsex/Responsex.h"
+ 
+ /*DependentObject constructors and destructor*/
+ /*FUNCTION DependentObject::DependentObject(){{{*/
+ DependentObject::DependentObject(){
+ 	this->name=NoneEnum;
+ 	this->type=0;
++	this->index=-1;
+ }
+ /*}}}*/
+-/*FUNCTION DependentObject::DependentObject(int in_name, int in_type){{{*/
+-DependentObject::DependentObject(int in_name, int in_type){
++/*FUNCTION DependentObject::DependentObject(int in_name, int in_type, int in_index){{{*/
++DependentObject::DependentObject(int in_name, int in_type,int in_index){
+ 
+ 	this->name=in_name;
+ 	this->type=in_type;
++	this->index=in_index;
+ 	if(in_type!=0 && in_type!=1)_error_("cannot create an DependentObject of type " << in_type);
+ 	if(in_type==1)_error_("not implemented yet!");
+ 
+@@ -51,6 +54,7 @@
+ 		_printLine_("   type: vertex");
+ 	else
+ 		_error_(" unknown type: " << this->type);
++	if(this->index>=0) _printLine_("   index: " << this->index);
+ }
+ /*}}}*/
+ /*FUNCTION DependentObject::DeepEcho{{{*/
+@@ -77,7 +81,7 @@
+ /*}}}*/
+ /*FUNCTION DependentObject::copy{{{*/
+ Object* DependentObject::copy(void) { 
+-	return new DependentObject(name,type);
++	return new DependentObject(name,type,index);
+ } /*}}}*/
+ 
+ /*DependentObject methods: */
+@@ -94,3 +98,16 @@
+ 	else _error_("should not have a type of " << type);
+ }
+ /*}}}*/
++/*FUNCTION DependentObject::Responsex{{{*/
++void  DependentObject::Responsex(IssmDouble* poutput_value,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters){
++
++	if(this->name==MassFluxEnum){
++
++		/*to identify the mass flux that will be computed, we need the index of the profile: */
++		parameters->SetParam(this->index,IndexEnum);
++	}
++	
++	::Responsex(poutput_value,elements,nodes,vertices,loads,materials,parameters,this->name,false,0);
++
++}
++/*}}}*/
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 13482)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 13483)
+@@ -57,26 +57,28 @@
+ 			%early return
+ 			if ~obj.isautodiff, return; end
+ 
+-			%process dependent variables
++			%process dependent variables {{{
+ 			num_dependent_objects=numel(obj.dependents);
+ 			WriteData(fid,'data',num_dependent_objects,'enum',AutodiffNumDependentObjectsEnum(),'format','Integer');
+ 
+ 			if(num_dependent_objects),
+ 				names=zeros(num_dependent_objects,1);
+ 				types=zeros(num_dependent_objects,1);
++				indices=zeros(num_dependent_objects,1);
+ 
+ 				for i=1:num_dependent_objects,
+ 					dep=obj.dependents{i};
+ 
+ 					names(i)=StringToEnum(dep.name);
+ 					types(i)=dep.typetoscalar();
++					indices(i)=dep.index;
+ 				end
+ 				WriteData(fid,'data',names,'enum',AutodiffDependentObjectNamesEnum(),'format','IntMat','mattype',3);
+ 				WriteData(fid,'data',types,'enum',AutodiffDependentObjectTypesEnum(),'format','IntMat','mattype',3);
++				WriteData(fid,'data',indices,'enum',AutodiffDependentObjectIndicesEnum(),'format','IntMat','mattype',3);
+ 			end
+-			
+-			
+-			%process independent variables
++			%}}}
++			%process independent variables {{{
+ 			num_independent_objects=numel(obj.independents);
+ 			WriteData(fid,'data',num_independent_objects,'enum',AutodiffNumIndependentObjectsEnum(),'format','Integer');
+ 
+@@ -93,8 +95,8 @@
+ 				WriteData(fid,'data',names,'enum',AutodiffIndependentObjectNamesEnum(),'format','IntMat','mattype',3);
+ 				WriteData(fid,'data',types,'enum',AutodiffIndependentObjectTypesEnum(),'format','IntMat','mattype',3);
+ 			end
+-
+-			%if driver is fos_forward, build index: 
++			%}}}
++			%if driver is fos_forward, build index:  {{{
+ 			if strcmpi(obj.driver,'fos_forward'),
+ 				index=0;
+ 				
+@@ -114,7 +116,8 @@
+ 				index=index-1; %get c-index numbering going
+ 				WriteData(fid,'data',index,'enum',AutodiffFosForwardIndexEnum(),'format','Integer'); 
+ 			end
+-			%if driver is fov_forward, build indices: 
++			%}}}
++			%if driver is fov_forward, build indices:  {{{
+ 			if strcmpi(obj.driver,'fov_forward'),
+ 				indices=0;
+ 				
+@@ -135,6 +138,21 @@
+ 
+ 				WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum,'format','IntMat','mattype',3);
+ 			end
++			%}}}
++			%deal with mass fluxes:  {{{
++			mass_flux_segments=cell(0,1);
++			for i=1:num_dependent_objects,
++				dep=obj.dependents{i};
++				if strcmpi(dep.name,'MassFlux'),
++					mass_flux_segments{end+1,1}=dep.segments;
++				end
++			end
++			if ~isempty(mass_flux_segments),
++				WriteData(fid,'data',mass_flux_segments,'enum',MassFluxSegmentsEnum,'format','MatArray');
++				flag=true;
++				WriteData(fid,'data',flag,'enum',MassFluxSegmentsPresentEnum,'format','Boolean');
++			end
++			%}}}
+ 
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/classes/qmu.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu.m	(revision 13482)
++++ ../trunk-jpl/src/m/classes/qmu.m	(revision 13483)
+@@ -147,7 +147,11 @@
+ 			WriteData(fid,'object',obj,'fieldname','numberofresponses','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','variabledescriptors','format','StringArray');
+ 			WriteData(fid,'object',obj,'fieldname','responsedescriptors','format','StringArray');
+-			WriteData(fid,'object',obj,'fieldname','mass_flux_segments','format','MatArray');
++			WriteData(fid,'data',obj.mass_flux_segments,'enum',MassFluxSegmentsEnum,'format','MatArray');
++			if ~isempty(mass_flux_segments),
++				flag=true;
++				WriteData(fid,'data',flag,'enum',MassFluxSegmentsPrsentEnum,'format','Boolean');
++			end
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/dependent.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/dependent.m	(revision 13482)
++++ ../trunk-jpl/src/m/classes/dependent.m	(revision 13483)
+@@ -7,24 +7,47 @@
+ 	properties (SetAccess=public) 
+ 		name                 = '';
+ 		type                 = '';
++		exp                  = '';
++		segments             = [];
++		index                = -1;
+ 	end
+ 	methods
+ 		 function obj= dependent(varargin) % {{{
+ 			 
+ 			 %use provided options to change fields
+ 			 options=pairoptions(varargin{:});
++				
++			 obj.name=getfieldvalue(options,'name','');
++			 obj.type=getfieldvalue(options,'type','');
++			 obj.exp=getfieldvalue(options,'exp','');
++			 obj.segments=getfieldvalue(options,'segments',[]);
++			 obj.index=getfieldvalue(options,'index',-1);
+ 
+-			 %OK get other fields
+-			 obj=AssignObjectFields(pairoptions(varargin{:}),obj);
+-
++			 %if name is mass flux: 
++			 if strcmpi(obj.name,'MassFlux'),
++				 %make sure that we supplied a file and that it exists! 
++				 if exist(obj.exp)~=2,
++					 error('dependent checkconsistency: specified ''exp'' file does not exist!');
++				 end
++				 %process the file and retrieve segments
++				 mesh=getfieldvalue(options,'mesh');
++				 obj.segments=MeshProfileIntersection(mesh.elements,mesh.x,mesh.y,obj.exp);
++			 end
+ 		 end
+ 		 %}}}
+ 		function obj = setdefaultparameters(obj) % {{{
+-			%do nothing
+-
++		%do nothing
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 			%do nothing for now
++			if strcmpi(obj.name,'MassFlux'),
++				if isempty(obj.segments),
++					error('dependent checkconsistency error: need segments to compute this dependent response');
++				end
++				if obj.index<=0,
++					error('dependent checkconsistency error: index for segments should be >=1');
++				end
++			end
+ 
+ 		end % }}}
+ 		function disp(obj) % {{{
+@@ -32,6 +55,10 @@
+ 
+ 			fielddisplay(obj,'name','variable name (must match corresponding Enum)');
+ 			fielddisplay(obj,'type','type of variable (''vertex'' or ''scalar'')');
++			if ~isempty(obj.exp),
++				fielddisplay(obj,'exp','file needed to compute dependent variable');
++				fielddisplay(obj,'segments','mass flux segments');
++			end
+ 
+ 		end % }}}
+ 		function scalar=typetoscalar(obj) % {{{
+Index: ../trunk-jpl/src/m/enum/QmuMassFluxSegmentsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/QmuMassFluxSegmentsEnum.m	(revision 13482)
++++ ../trunk-jpl/src/m/enum/QmuMassFluxSegmentsEnum.m	(revision 13483)
+@@ -1,11 +0,0 @@
+-function macro=QmuMassFluxSegmentsEnum()
+-%QMUMASSFLUXSEGMENTSENUM - Enum of QmuMassFluxSegments
+-%
+-%   WARNING: DO NOT MODIFY THIS FILE
+-%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+-%            Please read src/c/EnumDefinitions/README for more information
+-%
+-%   Usage:
+-%      macro=QmuMassFluxSegmentsEnum()
+-
+-macro=StringToEnum('QmuMassFluxSegments');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13482)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13483)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=487;
++macro=489;
+Index: ../trunk-jpl/src/m/enum/MassFluxSegmentsPresentEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassFluxSegmentsPresentEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MassFluxSegmentsPresentEnum.m	(revision 13483)
+@@ -0,0 +1,11 @@
++function macro=MassFluxSegmentsPresentEnum()
++%MASSFLUXSEGMENTSPRESENTENUM - Enum of MassFluxSegmentsPresent
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=MassFluxSegmentsPresentEnum()
++
++macro=StringToEnum('MassFluxSegmentsPresent');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13482)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13483)
+@@ -58,6 +58,16 @@
+ 
+ 	return StringToEnum('AutodiffDependentObjectTypes')[0]
+ 
++def AutodiffDependentObjectIndicesEnum():
++	"""
++	AUTODIFFDEPENDENTOBJECTINDICESENUM - Enum of AutodiffDependentObjectIndices
++
++	   Usage:
++	      macro=AutodiffDependentObjectIndicesEnum()
++	"""
++
++	return StringToEnum('AutodiffDependentObjectIndices')[0]
++
+ def AutodiffDependentObjectsEnum():
+ 	"""
+ 	AUTODIFFDEPENDENTOBJECTSENUM - Enum of AutodiffDependentObjects
+@@ -1448,16 +1458,26 @@
+ 
+ 	return StringToEnum('QmuIsdakota')[0]
+ 
+-def QmuMassFluxSegmentsEnum():
++def MassFluxSegmentsEnum():
+ 	"""
+-	QMUMASSFLUXSEGMENTSENUM - Enum of QmuMassFluxSegments
++	MASSFLUXSEGMENTSENUM - Enum of MassFluxSegments
+ 
+ 	   Usage:
+-	      macro=QmuMassFluxSegmentsEnum()
++	      macro=MassFluxSegmentsEnum()
+ 	"""
+ 
+-	return StringToEnum('QmuMassFluxSegments')[0]
++	return StringToEnum('MassFluxSegments')[0]
+ 
++def MassFluxSegmentsPresentEnum():
++	"""
++	MASSFLUXSEGMENTSPRESENTENUM - Enum of MassFluxSegmentsPresent
++
++	   Usage:
++	      macro=MassFluxSegmentsPresentEnum()
++	"""
++
++	return StringToEnum('MassFluxSegmentsPresent')[0]
++
+ def QmuNumberofpartitionsEnum():
+ 	"""
+ 	QMUNUMBEROFPARTITIONSENUM - Enum of QmuNumberofpartitions
+@@ -4886,5 +4906,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 487
++	return 489
+ 
+Index: ../trunk-jpl/src/m/enum/AutodiffDependentObjectIndicesEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffDependentObjectIndicesEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffDependentObjectIndicesEnum.m	(revision 13483)
+@@ -0,0 +1,11 @@
++function macro=AutodiffDependentObjectIndicesEnum()
++%AUTODIFFDEPENDENTOBJECTINDICESENUM - Enum of AutodiffDependentObjectIndices
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffDependentObjectIndicesEnum()
++
++macro=StringToEnum('AutodiffDependentObjectIndices');
+Index: ../trunk-jpl/src/m/enum/MassFluxSegmentsEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MassFluxSegmentsEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/MassFluxSegmentsEnum.m	(revision 13483)
+@@ -0,0 +1,11 @@
++function macro=MassFluxSegmentsEnum()
++%MASSFLUXSEGMENTSENUM - Enum of MassFluxSegments
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=MassFluxSegmentsEnum()
++
++macro=StringToEnum('MassFluxSegments');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13483-13484.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13483-13484.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13483-13484.diff	(revision 13980)
@@ -0,0 +1,83 @@
+Index: ../trunk-jpl/src/c/python/io/FetchPythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/python/io/FetchPythonData.cpp	(revision 13483)
++++ ../trunk-jpl/src/c/python/io/FetchPythonData.cpp	(revision 13484)
+@@ -74,12 +74,16 @@
+ 	dims=PyArray_DIMS((PyArrayObject*)py_matrix);
+ 	M=dims[0]; N=dims[1];
+ 	
+-	/*retrieve internal value: */
+-	dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
++	if (M && N) {
++		/*retrieve internal value: */
++		dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
+ 
+-	/*copy matrix: */
+-	matrix=xNew<double>(M*N);
+-	memcpy(matrix,dmatrix,(M*N)*sizeof(double));
++		/*copy matrix: */
++		matrix=xNew<double>(M*N);
++		memcpy(matrix,dmatrix,(M*N)*sizeof(double));
++	}
++	else
++		matrix=NULL;
+ 
+ 	/*output: */
+ 	if(pM)*pM=M;
+@@ -106,12 +110,16 @@
+ 	dims=PyArray_DIMS((PyArrayObject*)py_matrix);
+ 	M=dims[0]; N=dims[1];
+ 	
+-	/*retrieve internal value: */
+-	dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
++	if (M && N) {
++		/*retrieve internal value: */
++		dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
+ 
+-	/*transform into integer matrix: */
+-	matrix=xNew<int>(M*N);
+-	for(i=0;i<M*N;i++)matrix[i]=(int)dmatrix[i];
++		/*transform into integer matrix: */
++		matrix=xNew<int>(M*N);
++		for(i=0;i<M*N;i++)matrix[i]=(int)dmatrix[i];
++	}
++	else
++		matrix=NULL;
+ 
+ 	/*output: */
+ 	if(pM)*pM=M;
+@@ -135,12 +143,16 @@
+ 	dims=PyArray_DIMS((PyArrayObject*)py_vector);
+ 	M=dims[0]; 
+ 	
+-	/*retrieve internal value: */
+-	dvector=(double*)PyArray_DATA((PyArrayObject*)py_vector);
++	if (M) {
++		/*retrieve internal value: */
++		dvector=(double*)PyArray_DATA((PyArrayObject*)py_vector);
+ 
+-	/*copy vector: */
+-	vector=xNew<double>(M);
+-	memcpy(vector,dvector,(M)*sizeof(double));
++		/*copy vector: */
++		vector=xNew<double>(M);
++		memcpy(vector,dvector,(M)*sizeof(double));
++	}
++	else
++		vector=NULL;
+ 
+ 	/*output: */
+ 	if(pM)*pM=M;
+Index: ../trunk-jpl/src/m/classes/bamggeom.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/bamggeom.py	(revision 13483)
++++ ../trunk-jpl/src/m/classes/bamggeom.py	(revision 13484)
+@@ -11,7 +11,7 @@
+ 	def __init__(self,*args):    # {{{
+ 		self.Vertices=numpy.empty((0,3))
+ 		self.Edges=numpy.empty((0,3))
+-		self.TangentAtEdges=numpy.empty((0,0))
++		self.TangentAtEdges=numpy.empty((0,4))
+ 		self.Corners=numpy.empty((0,1))
+ 		self.RequiredVertices=numpy.empty((0,1))
+ 		self.RequiredEdges=numpy.empty((0,1))
Index: /issm/oecreview/Archive/13393-13976/ISSM-13484-13485.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13484-13485.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13484-13485.diff	(revision 13980)
@@ -0,0 +1,122 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13484)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13485)
+@@ -24,7 +24,7 @@
+ 	int         numoutputs;
+ 	Parameters *parameters       = NULL;
+ 	IssmDouble *requestedoutputs = NULL;
+-	bool        isdelta18o;
++	bool        isdelta18o,isautodiff;
+ 
+ 	/*parameters for mass flux: {{{*/
+ 	int      mass_flux_num_profiles=0;
+@@ -155,62 +155,65 @@
+ 	iomodel->DeleteData(requestedoutputs,PrognosticRequestedOutputsEnum);
+ 		
+ 	
+-	/*Deal with mass flux segments: {{{*/
+-	iomodel->FetchData(&mass_flux_present,MassFluxSegmentsPresentEnum);
+-	parameters->AddObject(new BoolParam(MassFluxSegmentsPresentEnum,mass_flux_present));
++	if(isautodiff){
++		/*Deal with mass flux segments: {{{*/
++		iomodel->Constant(&isautodiff,AutodiffIsautodiffEnum);
++		iomodel->FetchData(&mass_flux_present,MassFluxSegmentsPresentEnum);
++		parameters->AddObject(new BoolParam(MassFluxSegmentsPresentEnum,mass_flux_present));
+ 
+-	if(mass_flux_present){
++		if(mass_flux_present){
+ 
+-		/*Fetch the mass flux segments necessary to compute the mass fluxes.  Build a DoubleMatArrayParam object out of them: */ 
+-		iomodel->FetchData(&array,&mdims_array,&ndims_array,&mass_flux_num_profiles,MassFluxSegmentsEnum);
+-		if(mass_flux_num_profiles==0)_error_("mass_flux_num_profiles is 0, when MassFlux computations were requested!");
++			/*Fetch the mass flux segments necessary to compute the mass fluxes.  Build a DoubleMatArrayParam object out of them: */ 
++			iomodel->FetchData(&array,&mdims_array,&ndims_array,&mass_flux_num_profiles,MassFluxSegmentsEnum);
++			if(mass_flux_num_profiles==0)_error_("mass_flux_num_profiles is 0, when MassFlux computations were requested!");
+ 
+-		/*Go through segments, and extract those that belong to this cpu: */
+-		for(i=0;i<mass_flux_num_profiles;i++){
+-			temp_matrix=array[i];
+-			temp_m=mdims_array[i];
+-			temp_n=ndims_array[i];
++			/*Go through segments, and extract those that belong to this cpu: */
++			for(i=0;i<mass_flux_num_profiles;i++){
++				temp_matrix=array[i];
++				temp_m=mdims_array[i];
++				temp_n=ndims_array[i];
+ 
+-			m=0;
+-			for(j=0;j<temp_m;j++){
+-				if (  iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1] )m++;
+-			}
+-			if(m){
+-				matrix=xNewZeroInit<IssmDouble>(5*m);
+-				count=0;
++				m=0;
+ 				for(j=0;j<temp_m;j++){
+-					if (iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1]){
+-						for(k=0;k<5;k++)*(matrix+5*count+k)=*(temp_matrix+5*j+k);
+-						count++;
++					if (  iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1] )m++;
++				}
++				if(m){
++					matrix=xNewZeroInit<IssmDouble>(5*m);
++					count=0;
++					for(j=0;j<temp_m;j++){
++						if (iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1]){
++							for(k=0;k<5;k++)*(matrix+5*count+k)=*(temp_matrix+5*j+k);
++							count++;
++						}
+ 					}
+ 				}
+-			}
+-			else{
+-				matrix=NULL;
+-			}
++				else{
++					matrix=NULL;
++				}
+ 
+-			/*Assign: */
+-			array[i]=matrix;
+-			mdims_array[i]=m;
+-			ndims_array[i]=5;
++				/*Assign: */
++				array[i]=matrix;
++				mdims_array[i]=m;
++				ndims_array[i]=5;
+ 
+-			/*Free temporary matrix: */
+-			xDelete<IssmDouble>(temp_matrix);
+-		}
++				/*Free temporary matrix: */
++				xDelete<IssmDouble>(temp_matrix);
++			}
+ 
+-		/*Ok, we have an array of segments, different on every cpu. Create a DoubleMatArrayParam object with it: */
+-		parameters->AddObject(new DoubleMatArrayParam(MassFluxSegmentsEnum,array,mass_flux_num_profiles,mdims_array,ndims_array));
++			/*Ok, we have an array of segments, different on every cpu. Create a DoubleMatArrayParam object with it: */
++			parameters->AddObject(new DoubleMatArrayParam(MassFluxSegmentsEnum,array,mass_flux_num_profiles,mdims_array,ndims_array));
+ 
+-		/*Free data: */
+-		for(i=0;i<mass_flux_num_profiles;i++){
+-			IssmDouble* matrix=array[i];
+-			xDelete<IssmDouble>(matrix);
++			/*Free data: */
++			for(i=0;i<mass_flux_num_profiles;i++){
++				IssmDouble* matrix=array[i];
++				xDelete<IssmDouble>(matrix);
++			}
++			xDelete<int>(mdims_array); 
++			xDelete<int>(ndims_array);
++			xDelete<IssmDouble*>(array);
+ 		}
+-		xDelete<int>(mdims_array); 
+-		xDelete<int>(ndims_array);
+-		xDelete<IssmDouble*>(array);
++		/*}}}*/
+ 	}
+-	/*}}}*/
+ 
+ 	/*Before returning, create parameters in case we are running Qmu or control types runs: */
+ 	#ifdef _HAVE_CONTROL_
Index: /issm/oecreview/Archive/13393-13976/ISSM-13485-13486.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13485-13486.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13485-13486.diff	(revision 13980)
@@ -0,0 +1,417 @@
+Index: ../trunk-jpl/test/NightlyRun/test223.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test223.m	(revision 13485)
++++ ../trunk-jpl/test/NightlyRun/test223.m	(revision 13486)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+ md.geometry.bed=md.geometry.bed+50; md.geometry.surface=md.geometry.surface+50;
+-md.cluster=generic('name',oshostname(),'np',3);
++md.cluster=generic('name',oshostname(),'np',1);
+ md.prognostic.hydrostatic_adjustment='Incremental';
+ md=solve(md,TransientSolutionEnum);
+ 
+Index: ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13485)
++++ ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13486)
+@@ -28,6 +28,7 @@
+ 	AutodiffDriverEnum,
+ 	AutodiffFosForwardIndexEnum,
+ 	AutodiffFovForwardIndicesEnum,
++	AutodiffMassFluxSegmentsPresentEnum,
+ 	BalancethicknessSpcthicknessEnum,
+ 	BalancethicknessStabilizationEnum,
+ 	BalancethicknessThickeningRateEnum,
+@@ -158,6 +159,7 @@
+ 	QmuIsdakotaEnum,
+ 	MassFluxSegmentsEnum,
+ 	MassFluxSegmentsPresentEnum,
++	QmuMassFluxSegmentsPresentEnum,
+ 	QmuNumberofpartitionsEnum,
+ 	QmuNumberofresponsesEnum,
+ 	QmuPartitionEnum,
+Index: ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13485)
++++ ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13486)
+@@ -34,6 +34,7 @@
+ 	      else if (strcmp(name,"AutodiffDriver")==0) return AutodiffDriverEnum;
+ 	      else if (strcmp(name,"AutodiffFosForwardIndex")==0) return AutodiffFosForwardIndexEnum;
+ 	      else if (strcmp(name,"AutodiffFovForwardIndices")==0) return AutodiffFovForwardIndicesEnum;
++	      else if (strcmp(name,"AutodiffMassFluxSegmentsPresent")==0) return AutodiffMassFluxSegmentsPresentEnum;
+ 	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
+ 	      else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
+ 	      else if (strcmp(name,"BalancethicknessThickeningRate")==0) return BalancethicknessThickeningRateEnum;
+@@ -136,11 +137,11 @@
+ 	      else if (strcmp(name,"MeshEdges")==0) return MeshEdgesEnum;
+ 	      else if (strcmp(name,"MeshElementconnectivity")==0) return MeshElementconnectivityEnum;
+ 	      else if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
+-	      else if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"MeshElements2d")==0) return MeshElements2dEnum;
++	      if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
++	      else if (strcmp(name,"MeshElements2d")==0) return MeshElements2dEnum;
+ 	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
+ 	      else if (strcmp(name,"MeshLowerelements")==0) return MeshLowerelementsEnum;
+ 	      else if (strcmp(name,"MeshNumberofedges")==0) return MeshNumberofedgesEnum;
+@@ -167,6 +168,7 @@
+ 	      else if (strcmp(name,"QmuIsdakota")==0) return QmuIsdakotaEnum;
+ 	      else if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum;
+ 	      else if (strcmp(name,"MassFluxSegmentsPresent")==0) return MassFluxSegmentsPresentEnum;
++	      else if (strcmp(name,"QmuMassFluxSegmentsPresent")==0) return QmuMassFluxSegmentsPresentEnum;
+ 	      else if (strcmp(name,"QmuNumberofpartitions")==0) return QmuNumberofpartitionsEnum;
+ 	      else if (strcmp(name,"QmuNumberofresponses")==0) return QmuNumberofresponsesEnum;
+ 	      else if (strcmp(name,"QmuPartition")==0) return QmuPartitionEnum;
+@@ -258,12 +260,12 @@
+ 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeYAnalysis")==0) return SurfaceSlopeYAnalysisEnum;
+-	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+-	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
++	      if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
++	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
++	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+ 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+ 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
+ 	      else if (strcmp(name,"HutterApproximation")==0) return HutterApproximationEnum;
+@@ -381,12 +383,12 @@
+ 	      else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
+-	      else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
+-	      else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"TemperatureOld")==0) return TemperatureOldEnum;
++	      if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
++	      else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
++	      else if (strcmp(name,"TemperatureOld")==0) return TemperatureOldEnum;
+ 	      else if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum;
+ 	      else if (strcmp(name,"TemperatureSurface")==0) return TemperatureSurfaceEnum;
+ 	      else if (strcmp(name,"TemperatureBasal")==0) return TemperatureBasalEnum;
+@@ -504,12 +506,12 @@
+ 	      else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
+ 	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+ 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+-	      else if (strcmp(name,"XY")==0) return XYEnum;
+-	      else if (strcmp(name,"XYZP")==0) return XYZPEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"Option")==0) return OptionEnum;
++	      if (strcmp(name,"XY")==0) return XYEnum;
++	      else if (strcmp(name,"XYZP")==0) return XYZPEnum;
++	      else if (strcmp(name,"Option")==0) return OptionEnum;
+ 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
+ 	      else if (strcmp(name,"OptionCell")==0) return OptionCellEnum;
+ 	      else if (strcmp(name,"OptionChar")==0) return OptionCharEnum;
+Index: ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13485)
++++ ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13486)
+@@ -33,6 +33,7 @@
+ 		case AutodiffDriverEnum : return "AutodiffDriver";
+ 		case AutodiffFosForwardIndexEnum : return "AutodiffFosForwardIndex";
+ 		case AutodiffFovForwardIndicesEnum : return "AutodiffFovForwardIndices";
++		case AutodiffMassFluxSegmentsPresentEnum : return "AutodiffMassFluxSegmentsPresent";
+ 		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
+ 		case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
+ 		case BalancethicknessThickeningRateEnum : return "BalancethicknessThickeningRate";
+@@ -163,6 +164,7 @@
+ 		case QmuIsdakotaEnum : return "QmuIsdakota";
+ 		case MassFluxSegmentsEnum : return "MassFluxSegments";
+ 		case MassFluxSegmentsPresentEnum : return "MassFluxSegmentsPresent";
++		case QmuMassFluxSegmentsPresentEnum : return "QmuMassFluxSegmentsPresent";
+ 		case QmuNumberofpartitionsEnum : return "QmuNumberofpartitions";
+ 		case QmuNumberofresponsesEnum : return "QmuNumberofresponses";
+ 		case QmuPartitionEnum : return "QmuPartition";
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13485)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13486)
+@@ -24,10 +24,12 @@
+ 	int         numoutputs;
+ 	Parameters *parameters       = NULL;
+ 	IssmDouble *requestedoutputs = NULL;
+-	bool        isdelta18o,isautodiff;
++	bool        isdelta18o;
+ 
+ 	/*parameters for mass flux: {{{*/
+ 	int      mass_flux_num_profiles=0;
++	bool     qmu_mass_flux_present=false;
++	bool     autodiff_mass_flux_present=false;
+ 	bool     mass_flux_present=false;
+ 	IssmDouble** array=NULL;
+ 	int*     mdims_array=NULL;
+@@ -155,65 +157,66 @@
+ 	iomodel->DeleteData(requestedoutputs,PrognosticRequestedOutputsEnum);
+ 		
+ 	
+-	if(isautodiff){
+-		/*Deal with mass flux segments: {{{*/
+-		iomodel->Constant(&isautodiff,AutodiffIsautodiffEnum);
+-		iomodel->FetchData(&mass_flux_present,MassFluxSegmentsPresentEnum);
+-		parameters->AddObject(new BoolParam(MassFluxSegmentsPresentEnum,mass_flux_present));
++	/*Deal with mass flux segments: {{{*/
++	iomodel->FetchData(&qmu_mass_flux_present,QmuMassFluxSegmentsPresentEnum);
++	iomodel->FetchData(&autodiff_mass_flux_present,AutodiffMassFluxSegmentsPresentEnum);
+ 
+-		if(mass_flux_present){
++	if(qmu_mass_flux_present || autodiff_mass_flux_present)mass_flux_present=true;
++	else mass_flux_present=false;
++	parameters->AddObject(new BoolParam(MassFluxSegmentsPresentEnum,mass_flux_present));
+ 
+-			/*Fetch the mass flux segments necessary to compute the mass fluxes.  Build a DoubleMatArrayParam object out of them: */ 
+-			iomodel->FetchData(&array,&mdims_array,&ndims_array,&mass_flux_num_profiles,MassFluxSegmentsEnum);
+-			if(mass_flux_num_profiles==0)_error_("mass_flux_num_profiles is 0, when MassFlux computations were requested!");
++	if(mass_flux_present){
+ 
+-			/*Go through segments, and extract those that belong to this cpu: */
+-			for(i=0;i<mass_flux_num_profiles;i++){
+-				temp_matrix=array[i];
+-				temp_m=mdims_array[i];
+-				temp_n=ndims_array[i];
++		/*Fetch the mass flux segments necessary to compute the mass fluxes.  Build a DoubleMatArrayParam object out of them: */ 
++		iomodel->FetchData(&array,&mdims_array,&ndims_array,&mass_flux_num_profiles,MassFluxSegmentsEnum);
++		if(mass_flux_num_profiles==0)_error_("mass_flux_num_profiles is 0, when MassFlux computations were requested!");
+ 
+-				m=0;
++		/*Go through segments, and extract those that belong to this cpu: */
++		for(i=0;i<mass_flux_num_profiles;i++){
++			temp_matrix=array[i];
++			temp_m=mdims_array[i];
++			temp_n=ndims_array[i];
++
++			m=0;
++			for(j=0;j<temp_m;j++){
++				if (  iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1] )m++;
++			}
++			if(m){
++				matrix=xNewZeroInit<IssmDouble>(5*m);
++				count=0;
+ 				for(j=0;j<temp_m;j++){
+-					if (  iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1] )m++;
+-				}
+-				if(m){
+-					matrix=xNewZeroInit<IssmDouble>(5*m);
+-					count=0;
+-					for(j=0;j<temp_m;j++){
+-						if (iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1]){
+-							for(k=0;k<5;k++)*(matrix+5*count+k)=*(temp_matrix+5*j+k);
+-							count++;
+-						}
++					if (iomodel->my_elements[reCast<int>(*(temp_matrix+5*j+4))-1]){
++						for(k=0;k<5;k++)*(matrix+5*count+k)=*(temp_matrix+5*j+k);
++						count++;
+ 					}
+ 				}
+-				else{
+-					matrix=NULL;
+-				}
++			}
++			else{
++				matrix=NULL;
++			}
+ 
+-				/*Assign: */
+-				array[i]=matrix;
+-				mdims_array[i]=m;
+-				ndims_array[i]=5;
++			/*Assign: */
++			array[i]=matrix;
++			mdims_array[i]=m;
++			ndims_array[i]=5;
+ 
+-				/*Free temporary matrix: */
+-				xDelete<IssmDouble>(temp_matrix);
+-			}
++			/*Free temporary matrix: */
++			xDelete<IssmDouble>(temp_matrix);
++		}
+ 
+-			/*Ok, we have an array of segments, different on every cpu. Create a DoubleMatArrayParam object with it: */
+-			parameters->AddObject(new DoubleMatArrayParam(MassFluxSegmentsEnum,array,mass_flux_num_profiles,mdims_array,ndims_array));
++		/*Ok, we have an array of segments, different on every cpu. Create a DoubleMatArrayParam object with it: */
++		parameters->AddObject(new DoubleMatArrayParam(MassFluxSegmentsEnum,array,mass_flux_num_profiles,mdims_array,ndims_array));
+ 
+-			/*Free data: */
+-			for(i=0;i<mass_flux_num_profiles;i++){
+-				IssmDouble* matrix=array[i];
+-				xDelete<IssmDouble>(matrix);
+-			}
+-			xDelete<int>(mdims_array); 
+-			xDelete<int>(ndims_array);
+-			xDelete<IssmDouble*>(array);
++		/*Free data: */
++		for(i=0;i<mass_flux_num_profiles;i++){
++			IssmDouble* matrix=array[i];
++			xDelete<IssmDouble>(matrix);
+ 		}
+-		/*}}}*/
++		xDelete<int>(mdims_array); 
++		xDelete<int>(ndims_array);
++		xDelete<IssmDouble*>(array);
+ 	}
++	/*}}}*/
+ 
+ 	/*Before returning, create parameters in case we are running Qmu or control types runs: */
+ 	#ifdef _HAVE_CONTROL_
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 13485)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 13486)
+@@ -55,7 +55,10 @@
+ 			WriteData(fid,'object',obj,'fieldname','driver','format','String');
+ 			
+ 			%early return
+-			if ~obj.isautodiff, return; end
++			if ~obj.isautodiff, 
++				WriteData(fid,'data',false,'enum',AutodiffMassFluxSegmentsPresentEnum,'format','Boolean');
++				return; 
++			end
+ 
+ 			%process dependent variables {{{
+ 			num_dependent_objects=numel(obj.dependents);
+@@ -147,11 +150,13 @@
+ 					mass_flux_segments{end+1,1}=dep.segments;
+ 				end
+ 			end
+-			if ~isempty(mass_flux_segments),
++			if ~isempty(mass_flux_segments), 
+ 				WriteData(fid,'data',mass_flux_segments,'enum',MassFluxSegmentsEnum,'format','MatArray');
+ 				flag=true;
+-				WriteData(fid,'data',flag,'enum',MassFluxSegmentsPresentEnum,'format','Boolean');
++			else 
++				flag=false; 
+ 			end
++			WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum,'format','Boolean');
+ 			%}}}
+ 
+ 		end % }}}
+Index: ../trunk-jpl/src/m/classes/qmu.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu.m	(revision 13485)
++++ ../trunk-jpl/src/m/classes/qmu.m	(revision 13486)
+@@ -141,17 +141,22 @@
+ 		end % }}}
+ 		function marshall(obj,fid) % {{{
+ 			WriteData(fid,'object',obj,'fieldname','isdakota','format','Boolean');
+-			if ~obj.isdakota, return; end
++			if ~obj.isdakota, 
++				WriteData(fid,'data',false,'enum',QmuMassFluxSegmentsPresentEnum,'format','Boolean');
++				return; 
++			end
+ 			WriteData(fid,'object',obj,'fieldname','partition','format','DoubleMat','mattype',2);
+ 			WriteData(fid,'object',obj,'fieldname','numberofpartitions','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','numberofresponses','format','Integer');
+ 			WriteData(fid,'object',obj,'fieldname','variabledescriptors','format','StringArray');
+ 			WriteData(fid,'object',obj,'fieldname','responsedescriptors','format','StringArray');
+-			WriteData(fid,'data',obj.mass_flux_segments,'enum',MassFluxSegmentsEnum,'format','MatArray');
+-			if ~isempty(mass_flux_segments),
+-				flag=true;
+-				WriteData(fid,'data',flag,'enum',MassFluxSegmentsPrsentEnum,'format','Boolean');
++			if ~isempty(obj.mass_flux_segments), 
++				WriteData(fid,'data',obj.mass_flux_segments,'enum',MassFluxSegmentsEnum,'format','MatArray');
++				flag=true; 
++			else 
++				flag=false; 
+ 			end
++			WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum,'format','Boolean');
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13485)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13486)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=489;
++macro=491;
+Index: ../trunk-jpl/src/m/enum/AutodiffMassFluxSegmentsPresentEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffMassFluxSegmentsPresentEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffMassFluxSegmentsPresentEnum.m	(revision 13486)
+@@ -0,0 +1,11 @@
++function macro=AutodiffMassFluxSegmentsPresentEnum()
++%AUTODIFFMASSFLUXSEGMENTSPRESENTENUM - Enum of AutodiffMassFluxSegmentsPresent
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffMassFluxSegmentsPresentEnum()
++
++macro=StringToEnum('AutodiffMassFluxSegmentsPresent');
+Index: ../trunk-jpl/src/m/enum/QmuMassFluxSegmentsPresentEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/QmuMassFluxSegmentsPresentEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/QmuMassFluxSegmentsPresentEnum.m	(revision 13486)
+@@ -0,0 +1,11 @@
++function macro=QmuMassFluxSegmentsPresentEnum()
++%QMUMASSFLUXSEGMENTSPRESENTENUM - Enum of QmuMassFluxSegmentsPresent
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=QmuMassFluxSegmentsPresentEnum()
++
++macro=StringToEnum('QmuMassFluxSegmentsPresent');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13485)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13486)
+@@ -178,6 +178,16 @@
+ 
+ 	return StringToEnum('AutodiffFovForwardIndices')[0]
+ 
++def AutodiffMassFluxSegmentsPresentEnum():
++	"""
++	AUTODIFFMASSFLUXSEGMENTSPRESENTENUM - Enum of AutodiffMassFluxSegmentsPresent
++
++	   Usage:
++	      macro=AutodiffMassFluxSegmentsPresentEnum()
++	"""
++
++	return StringToEnum('AutodiffMassFluxSegmentsPresent')[0]
++
+ def BalancethicknessSpcthicknessEnum():
+ 	"""
+ 	BALANCETHICKNESSSPCTHICKNESSENUM - Enum of BalancethicknessSpcthickness
+@@ -1478,6 +1488,16 @@
+ 
+ 	return StringToEnum('MassFluxSegmentsPresent')[0]
+ 
++def QmuMassFluxSegmentsPresentEnum():
++	"""
++	QMUMASSFLUXSEGMENTSPRESENTENUM - Enum of QmuMassFluxSegmentsPresent
++
++	   Usage:
++	      macro=QmuMassFluxSegmentsPresentEnum()
++	"""
++
++	return StringToEnum('QmuMassFluxSegmentsPresent')[0]
++
+ def QmuNumberofpartitionsEnum():
+ 	"""
+ 	QMUNUMBEROFPARTITIONSENUM - Enum of QmuNumberofpartitions
+@@ -4906,5 +4926,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 489
++	return 491
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13486-13487.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13486-13487.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13486-13487.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/etc/environment.sh
+===================================================================
+--- ../trunk-jpl/etc/environment.sh	(revision 13486)
++++ ../trunk-jpl/etc/environment.sh	(revision 13487)
+@@ -211,7 +211,7 @@
+ pathappend "$MODELE_DIR/src/exec"
+ 
+ GIT_DIR="$ISSM_DIR/externalpackages/git/install"
+-pathappend "$GIT_DIR/bin"
++pathprepend "$GIT_DIR/bin"
+ 
+ NCVIEW_DIR="$ISSM_DIR/externalpackages/ncview/install"
+ pathappend "$NCVIEW_DIR"
Index: /issm/oecreview/Archive/13393-13976/ISSM-13487-13488.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13487-13488.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13487-13488.diff	(revision 13980)
@@ -0,0 +1,104 @@
+Index: ../trunk-jpl/configs/config-linux64-murdo-ad.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo-ad.sh	(revision 13487)
++++ ../trunk-jpl/configs/config-linux64-murdo-ad.sh	(revision 13488)
+@@ -1,37 +1,10 @@
+ #!/bin/sh
+ 
+ ./configure \
+- --prefix=$ISSM_DIR \
+- --with-serial=no\
+- --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+- --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+- --with-mpi-lib="-L$ISSM_DIR/externalpackages/mpich2/install/lib/ -lmpich" \
+- --with-petsc-arch=$ISSM_ARCH \
+- --with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-plapack-lib="-L$ISSM_DIR/externalpackages/petsc/install/ -lPLAPACK" \
+- --with-plapack-include="-I$ISSM_DIR/externalpackages/petsc/install/externalpackages/PLAPACKR32-hg/INCLUDE" \
+- --with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-hypre-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-ml-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-graphics-lib=/usr/lib64/libX11.so \
+- --with-cxxoptflags="-mtune=barcelona -ffast-math -O3 -msse4.2 -Wno-write-strings "\
+- --with-fortran-lib="-L/usr/lib/gcc/x86_64-redhat-linux/3.4.6/ -lg2c  /usr/lib/gcc/x86_64-redhat-linux/4.1.1/libgfortran.a" \
+- --with-adic2-dir=$ISSM_DIR/externalpackages/adic/install/ \
+---with-numthreads=24 \
+- --without-thermal \
+- --without-control \
+- --without-hydrology \
+- --without-diagnostic \
+- --without-balanced \
+- --without-responses \
+- --without-slope \
+- --without-rifts \
+- --without-steadystate \
+- --without-transient \
+- --without-3d \
+- --without-groundingline
+- 
+-#--without-prognostic \
++	 --prefix=$ISSM_DIR \
++	 --without-kriging \
++	 --without-kml \
++	--with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install \
++	--with-adolc-dir=$ISSM_DIR/externalpackages/adolc/install \
++	--with-matlab-dir=$MATLAB_DIR \
++	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install
+Index: ../trunk-jpl/configs/config-linux64-murdo.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 13487)
++++ ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 13488)
+@@ -1,26 +1,27 @@
+ #!/bin/sh
+ 
++#petsc 3.2
++#mpich 1.4
++
+ ./configure \
+- --prefix=$ISSM_DIR \
+- --with-matlab-dir=$MATLAB_DIR \
+- --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+- --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+- --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+- --with-mpi-lib="-L$ISSM_DIR/externalpackages/mpich2/install/lib/ -lmpich" \
+- --with-petsc-arch=$ISSM_ARCH \
+- --with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-plapack-lib="-L$ISSM_DIR/externalpackages/petsc/install/ -lPLAPACK" \
+- --with-plapack-include="-I$ISSM_DIR/externalpackages/petsc/install/externalpackages/PLAPACKR32-hg/INCLUDE" \
+- --with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-scotch-dir="$ISSM_DIR/externalpackages/scotch/install" \
+- --with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
+- --with-graphics-lib=/usr/lib64/libX11.so \
+- --with-cxxoptflags="-mtune=barcelona -ffast-math -O3 -msse4.2 -Wno-write-strings "\
+- --with-numthreads=18 \
+- --with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+- --enable-debugging
+- 
+- 
++	--prefix=$ISSM_DIR \
++	--with-matlab-dir=$MATLAB_DIR \
++	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
++	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
++	--with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
++	--with-mpi-lib="-L$ISSM_DIR/externalpackages/mpich2/install/lib/ -lmpich" \
++	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
++	--with-plapack-lib="-L$ISSM_DIR/externalpackages/petsc/install/ -lPLAPACK" \
++	--with-plapack-include="-I$ISSM_DIR/externalpackages/petsc/install/externalpackages/PLAPACKR32-hg/INCLUDE" \
++	--with-petsc-arch=$ISSM_ARCH \
++	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
++	--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
++	--with-graphics-lib=/usr/lib64/libX11.so \
++	--with-cxxoptflags="-mtune=barcelona -ffast-math -O3 -msse4.2 -Wno-write-strings "\
++	--with-numthreads=18 \
++	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
++	--enable-debugging \
++	--with-scotch-dir="$ISSM_DIR/externalpackages/scotch/install" 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13488-13489.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13488-13489.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13488-13489.diff	(revision 13980)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/externalpackages/adolc/update.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/update.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/adolc/update.sh	(revision 13489)
+@@ -0,0 +1,14 @@
++#!/bin/bash
++
++cd adolc_issm
++git pull
++
++autoreconf -f -i 
++./configure --prefix=$ISSM_DIR/externalpackages/adolc/install 
++
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/adolc/update.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13489-13490.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13489-13490.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13489-13490.diff	(revision 13980)
@@ -0,0 +1,55 @@
+Index: ../trunk-jpl/src/m/classes/autodiff.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.py	(revision 13489)
++++ ../trunk-jpl/src/m/classes/autodiff.py	(revision 13490)
+@@ -38,5 +38,6 @@
+ 
+ 	def marshall(self,fid):    # {{{
+ 		WriteData(fid,'object',self,'fieldname','isautodiff','format','Boolean')
++		WriteData(fid,'data',False,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
+ 	# }}}
+ 
+Index: ../trunk-jpl/src/m/classes/qmu.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu.py	(revision 13489)
++++ ../trunk-jpl/src/m/classes/qmu.py	(revision 13490)
+@@ -44,7 +44,6 @@
+ 		# {{{setdefaultparameters
+ 		return self
+ 	#}}}
+-
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
+ 
+ 		#Early return
+@@ -67,7 +66,6 @@
+ 
+ 		return md
+ 	# }}}
+-
+ 	def __repr__(self):    # {{{
+ 		s ='   qmu parameters:\n'
+ 
+@@ -140,16 +138,21 @@
+ 
+ 		return s
+ 	# }}}
+-		
+ 	def marshall(self,fid):    # {{{
+ 		WriteData(fid,'object',self,'fieldname','isdakota','format','Boolean')
+ 		if not self.isdakota:
++			WriteData(fid,'data',False,'enum',QmuMassFluxSegmentsPresentEnum(),'format','Boolean');
+ 			return
+ 		WriteData(fid,'object',self,'fieldname','partition','format','DoubleMat','mattype',2)
+ 		WriteData(fid,'object',self,'fieldname','numberofpartitions','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','numberofresponses','format','Integer')
+ 		WriteData(fid,'object',self,'fieldname','variabledescriptors','format','StringArray')
+ 		WriteData(fid,'object',self,'fieldname','responsedescriptors','format','StringArray')
+-		WriteData(fid,'object',self,'fieldname','mass_flux_segments','format','MatArray')
++		if not self.mass_flux_segments:
++			WriteData(fid,'data',self.mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray');
++			flag=True; 
++		else:
++			flag=False; 
++		WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum(),'format','Boolean');
+ 	# }}}
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13490-13491.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13490-13491.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13490-13491.diff	(revision 13980)
@@ -0,0 +1,602 @@
+Index: ../trunk-jpl/test/NightlyRun/test202.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test202.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test202.py	(revision 13491)
+@@ -0,0 +1,42 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test202.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,2)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test211.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test211.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test211.py	(revision 13491)
+@@ -0,0 +1,74 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test211.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',200000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'stokes','all')
++md.diagnostic.reltol=NaN
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names=[\
++	'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++field_tolerances=[\
++	1e-08,1e-08,1e-06,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,\
++	1e-08,1e-08,1e-06,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06,\
++	1e-07,1e-07,1e-06,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test208.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test208.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test208.py	(revision 13491)
+@@ -0,0 +1,57 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test208.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test203.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test203.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test203.py	(revision 13491)
+@@ -0,0 +1,42 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test203.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,2)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test206.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test206.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test206.py	(revision 13491)
+@@ -0,0 +1,40 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test206.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.timestepping.time_step=0
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,ThermalSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results['ThermalSolution'][1]['Temperature'],\
++	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test209.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test209.py	(revision 13491)
+@@ -0,0 +1,72 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test209.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
++				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
++					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++field_tolerances=[\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,\
++	1e-13,1e-13,1e-08,1e-13,1e-13,1e-10,1e-10,1e-10,1e-13,1e-8]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test210.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test210.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test210.py	(revision 13491)
+@@ -0,0 +1,72 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test210.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',200000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
++				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
++					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++field_tolerances=[\
++	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,\
++	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,\
++	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test204.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test204.py	(revision 13491)
+@@ -0,0 +1,42 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test204.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,2)
++md=setflowequation(md,'stokes','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-08,1e-08,1e-07,1e-08,1e-08]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test207.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test207.py	(revision 13491)
+@@ -0,0 +1,47 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test207.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.transient.isdiagnostic=0
++md.transient.isprognostic=0
++md.transient.isthermal=1
++md.transient.isgroundingline=0
++md=solve(md,TransientSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Temperature1','BasalforcingsMeltingRate1','Temperature2','BasalforcingsMeltingRate2','Temperature3','BasalforcingsMeltingRate3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/scripts/translateToPy.py
+===================================================================
+--- ../trunk-jpl/scripts/translateToPy.py	(revision 13490)
++++ ../trunk-jpl/scripts/translateToPy.py	(revision 13491)
+@@ -66,12 +66,31 @@
+ 		res = res.replace('thickness(pos)','thickness[pos]')
+ 		res = res.replace('find(md.','numpy.nonzero(md.')
+ 
++		res = res.replace('\n','')
++
++		# handle inline comments
++		res = res.replace('%','#')
++
+ 		res = res.replace('...','\\')
++
++		# determine if the m file has mult. line cmd (real quick solution)
++		multCmds = res.split(';')
++		numLines = len( multCmds ) - 2
++		allParts = ''
++		for part in multCmds:
++			allParts += part
++			#allParts += re.sub('^\s+','',part)
++			#allParts += part.strip()
++			if numLines > 0:
++				allParts += '\n'
++				numLines -= 1
++		res = allParts	
++
+ 		res = res.replace(';','')
+-		res = res.replace('\n','')
+ 
++
+ 		res = convertFieldValues( res )
+-
++		#print 'resulting line:' + str(res) + '\n'
+ 		output(res)
+ 
+ def convertFieldValues ( currentLine ):
+@@ -103,6 +122,19 @@
+ 			res = res.replace('Solution.StressTensorxz)','Solution\'][1][\'StressTensorxz\']')
+ 			res = res.replace('Solution.StressTensoryz)','Solution\'][1][\'StressTensoryz\']')
+ 
++			res = res.replace('Solution.FrictionCoefficient)','Solution\'][1][\'FrictionCoefficient\']')
++			res = res.replace('Solution.SurfaceforcingsMasBalance)','Solution\'][1][\'SurfaceforcingsMasBalance\']')
++			res = res.replace('Solution.MaskElementonfloatingice)','Solution\'][1][\'MaskElementonfloatingice\']')
++			res = res.replace('Solution.J)','Solution\'][1][\'J\']')
++			res = res.replace('Solution.BalancethicknessThickeningRate)','Solution\'][1][\'BalancethicknessThickeningRate\']')
++
++			res = res.replace('Solution.Gradient1)','Solution\'][1][\'Gradient1\']')
++			res = res.replace('Solution.Gradient2)','Solution\'][1][\'Gradient2\']')
++
++			res = res.replace('Solution.MaterialsRheologyZbar)','Solution\'][1][\'MaterialsRheologyZbar\']')
++			res = res.replace('Solution.MaterialsRheologyBbar)','Solution\'][1][\'MaterialsRheologyBbar\']')
++			res = res.replace('Solution.MaterialsRheologyB)','Solution\'][1][\'MaterialsRheologyB\']')
++
+ 			res = res.replace('Solution.Thickness)','Solution\'][1][\'Thickness\']')
+ 
+ 			res = res.replace('Solution.Temperature)','Solution\'][1][\'Temperature\']')
+@@ -120,6 +152,10 @@
+ 			res = res.replace('Solution.Enthalpy)','Solution\'][1][\'Enthalpy\']')
+ 			res = res.replace('Solution.Waterfraction)','Solution\'][1][\'Waterfraction\']')
+ 			res = res.replace('Solution.Temperature)','Solution\'][1][\'Temperature\']')
++
++			# special case
++			res = res.replace('.DiagnosticSolution.J','[\'DiagnosticSolution\'][1][\'J\']')
++
+ 	return res
+ 
+ def output ( line ):
Index: /issm/oecreview/Archive/13393-13976/ISSM-13491-13492.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13491-13492.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13491-13492.diff	(revision 13980)
@@ -0,0 +1,2303 @@
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3006.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3006.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3006.py	(revision 13492)
+@@ -0,0 +1,42 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3006.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from meshconvert import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=meshconvert(md)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.prognostic.stabilization=3
++md.prognostic.spcthickness=md.geometry.thickness
++md.autodiff.isautodiff=true
++md=solve(md,PrognosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['PrognosticSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1602.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1602.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1602.py	(revision 13492)
+@@ -0,0 +1,62 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test1602.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(5,1)
++md=setflowequation(md,'pattyn','all')
++md.diagnostic.spcvx(numpy.nonzero(md.mesh.y>0))=NaN
++md.initialization.vx(:)=0
++md.initialization.vy(:)=0
++md.initialization.vel(:)=0
++
++
++md.cluster=generic('name',oshostname,'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++vel0=md.results.DiagnosticSolution.Vel
++
++
++theta=30*pi/180
++x=md.mesh.x
++y=md.mesh.y
++md.mesh.x=cos(theta)*x-sin(theta)*y
++md.mesh.y=sin(theta)*x+cos(theta)*y
++
++
++md.diagnostic.referential(:,1:3)=repmat([cos(theta),sin(theta),0],md.mesh.numberofvertices,1)
++md.diagnostic.referential(:,4:6)=repmat([0,0,1],md.mesh.numberofvertices,1)
++md=solve(md,DiagnosticSolutionEnum())
++vel1=md.results.DiagnosticSolution.Vel
++
++
++plotmodel()(md,'data',vel0,'data',vel1,'data',vel1-vel0,'title','Cartesian CS','title','Rotated CS','title','difference','view#all',2)
++disp(['Error between Cartesian and rotated CS: ' num2str(max(abs(vel0-vel1))/(max(abs(vel0))+eps)) ])
++
++
++# Fields and tolerances to track changes
++
++field_names     =['vel1']
++field_tolerances=[1e-9]
++field_values=[\
++	vel1, \
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3007.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3007.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3007.py	(revision 13492)
+@@ -0,0 +1,39 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3007.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.extrude(5,3)
++md.cluster=generic('name',oshostname(),'np',3)
++md.autodiff.isautodiff=true
++md=solve(md,PrognosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['PrognosticSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3008.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3008.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3008.py	(revision 13492)
+@@ -0,0 +1,41 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3008.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.timestepping.time_step=0
++md.cluster=generic('name',oshostname(),'np',3)
++md.autodiff.isautodiff=true
++md=solve(md,ThermalSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results['ThermalSolution'][1]['Temperature'],\
++	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3009.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3009.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3009.py	(revision 13492)
+@@ -0,0 +1,44 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3009.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.transient.isdiagnostic=0
++md.transient.isprognostic=0
++md.transient.isthermal=1
++md.transient.isgroundingline=0
++md.autodiff.isautodiff=true
++md=solve(md,TransientSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test220.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test220.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test220.py	(revision 13492)
+@@ -0,0 +1,42 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test220.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',120000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(2,1)
++md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','pattyn')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-09,1e-09,1e-06,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test212.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test212.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test212.py	(revision 13492)
+@@ -0,0 +1,61 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test212.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',200000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++
++
++# control parameters
++
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['MaterialsRheologyBbar']
++md.inversion.min_parameters=10^6*ones(md.mesh.numberofvertices,1)
++md.inversion.max_parameters=2*10^9*ones(md.mesh.numberofvertices,1)
++md.inversion.nsteps=2
++md.inversion.cost_functions=101*ones(md.inversion.nsteps,1)
++md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1)
++md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1)
++md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1)
++md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1)
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++md.results['DiagnosticSolution'][1]['Gradient1'],\
++md.results['DiagnosticSolution.J'],\
++md.results['DiagnosticSolution'][1]['MaterialsRheologyBbar'],\
++md.results['DiagnosticSolution'][1]['Pressure'],\
++md.results['DiagnosticSolution'][1]['Vel'],\
++md.results['DiagnosticSolution'][1]['Vx'],\
++md.results['DiagnosticSolution'][1]['Vy'],\
++]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test213.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test213.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test213.py	(revision 13492)
+@@ -0,0 +1,63 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test213.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',200000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++
++
++# control parameters
++
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['MaterialsRheologyBbar']
++md.inversion.min_parameters=10^6*ones(md.mesh.numberofvertices,1)
++md.inversion.max_parameters=2*10^9*ones(md.mesh.numberofvertices,1)
++md.inversion.nsteps=2
++md.inversion.cost_functions=101*ones(md.inversion.nsteps,1)
++md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1)
++md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1)
++md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1)
++md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1)
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++#field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Gradient1'],\
++	md.results['DiagnosticSolution'][1]['J'],\
++	md.results['DiagnosticSolution'][1]['MaterialsRheologyB'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test205.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test205.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test205.py	(revision 13492)
+@@ -0,0 +1,42 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test205.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,2)
++md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal','coupling','penalties')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-05,1e-05,1e-05,1e-05,1e-05]
++field_values=[\
++md.results['DiagnosticSolution'][1]['Vx'],\
++md.results['DiagnosticSolution'][1]['Vy'],\
++md.results['DiagnosticSolution'][1]['Vz'],\
++md.results['DiagnosticSolution'][1]['Vel'],\
++md.results['DiagnosticSolution'][1]['Pressure'],\
++]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test214.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test214.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test214.py	(revision 13492)
+@@ -0,0 +1,61 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test214.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',200000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++
++
++# control parameters
++
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['MaterialsRheologyBbar']
++md.inversion.min_parameters=10^6*ones(md.mesh.numberofvertices,1)
++md.inversion.max_parameters=2*10^9*ones(md.mesh.numberofvertices,1)
++md.inversion.nsteps=2
++md.inversion.cost_functions=101*ones(md.inversion.nsteps,1)
++md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1)
++md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1)
++md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1)
++md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1)
++md.inversion.vx_obs=md.initialization.vx md.inversion.vy_obs=md.initialization.vy
++
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy']
++field_tolerances=[1e-07,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08]
++field_values=[\
++	md.results['DiagnosticSolution.Gradient1),\
++	md.results.DiagnosticSolution.J,\
++	md.results['DiagnosticSolution.MaterialsRheologyB),\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy']
++]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test215.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test215.py	(revision 13492)
+@@ -0,0 +1,61 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test215.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',200000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'stokes','all')
++
++
++# control parameters
++
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['MaterialsRheologyBbar']
++md.inversion.min_parameters=10^6*ones(md.mesh.numberofvertices,1)
++md.inversion.max_parameters=2*10^9*ones(md.mesh.numberofvertices,1)
++md.inversion.nsteps=2
++md.inversion.cost_functions=101*ones(md.inversion.nsteps,1)
++md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1)
++md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1)
++md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1)
++md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1)
++md.inversion.vx_obs=md.initialization.vx md.inversion.vy_obs=md.initialization.vy
++
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy']
++field_tolerances=[1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution.Gradient1),\
++	md.results.DiagnosticSolution.J,\
++	md.results['DiagnosticSolution.MaterialsRheologyB),\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy']
++]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test216.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test216.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test216.py	(revision 13492)
+@@ -0,0 +1,50 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test216.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000)
++md=meshprocessrifts(md,'../Exp/Square.exp')
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++
++
++# rift settings
++
++md.rifts.riftstruct.fill=MelangeEnum()
++md.rifts.riftstruct.fraction=0
++md.diagnostic.rift_penalty_lock=2
++md.diagnostic.rift_penalty_threshold=0
++md.rifts.riftstruct.fractionincrement=.1
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vel','Pressure']
++field_tolerances=[1e-11,1e-11,1e-11,1e-11]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test217.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test217.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test217.py	(revision 13492)
+@@ -0,0 +1,121 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test217.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++
++
++# redo the parameter file for this special shelf. 
++
++# constant thickness, constrained (vy=0) flow into an icefront, 
++
++# from 0 m/yr at the grounding line.
++
++
++
++# tighten
++
++md.diagnostic.restol=10^-4
++
++
++# needed later
++
++ymin=min(md.mesh.y)
++ymax=max(md.mesh.y)
++xmin=min(md.mesh.x)
++xmax=max(md.mesh.x)
++
++
++di=md.materials.rho_ice/md.materials.rho_water
++
++
++h=1000
++md.geometry.thickness=h*ones(md.mesh.numberofvertices,1)
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++
++
++# Initial velocity and pressure
++
++md.initialization.vx=zeros(md.mesh.numberofvertices,1)
++md.initialization.vy=zeros(md.mesh.numberofvertices,1)
++md.initialization.vz=zeros(md.mesh.numberofvertices,1)
++md.initialization.pressure=zeros(md.mesh.numberofvertices,1)
++
++
++# Materials
++
++md.initialization.temperature=(273-20)*ones(md.mesh.numberofvertices,1)
++md.materials.rheology_B=paterson(md.initialization.temperature)
++md.materials.rheology_n=3*ones(md.mesh.numberofelements,1)
++
++
++# Boundary conditions:
++
++md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1)
++md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1)
++md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1)
++
++
++# constrain flanks to 0 normal velocity
++
++pos=numpy.nonzero(md.mesh.x==xmin | md.mesh.x==xmax)
++md.diagnostic.spcvx(pos)=0
++md.diagnostic.spcvz(pos)=NaN
++
++
++# constrain grounding line to 0 velocity
++
++pos=numpy.nonzero(md.mesh.y==ymin)
++md.diagnostic.spcvx(pos)=0
++md.diagnostic.spcvy(pos)=0
++
++
++# icefront
++
++nodeonicefront=zeros(md.mesh.numberofvertices,1)
++pos=numpy.nonzero(md.mesh.y==ymax)
++nodeonicefront(pos)=1
++pos=find(nodeonicefront(md.mesh.segments(:,1)) | nodeonicefront(md.mesh.segments(:,2))) diagnostic.icefront=md.mesh.segments(pos,:)
++diagnostic.icefront=[diagnostic.icefront 1*md.mask.elementonfloatingice(diagnostic.icefront(:,end))]
++md.diagnostic.icefront=diagnostic.icefront
++
++
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# create analytical solution: strain rate is constant = ((rho_ice*g*h)/4B)^3 (Paterson, 4th Edition, page 292.
++
++# ey_c=(md.materials.rho_ice*md.constants.g*(1-di)*md.geometry.thickness./(4*md.materials.rheology_B)).^3;
++
++# vy_c=ey_c.*md.mesh.y*md.constants.yts;
++
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vy']
++field_tolerances=[1e-13]
++field_values=[md.results['DiagnosticSolution'][1]['Vy']]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test218.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test218.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test218.py	(revision 13492)
+@@ -0,0 +1,152 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test218.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=squaremesh(model(),1000000,1000000,5,5)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++
++
++# redo the parameter file for this special shelf. 
++
++# constant thickness, constrained (vy=0) flow into an icefront, 
++
++# from 0 m/yr at the grounding line.
++
++
++
++# needed later
++
++ymin=min(md.mesh.y)
++ymax=max(md.mesh.y)
++xmin=min(md.mesh.x)
++xmax=max(md.mesh.x)
++
++
++di=md.materials.rho_ice/md.materials.rho_water
++
++
++h=1000
++md.geometry.thickness=h*ones(md.mesh.numberofvertices,1)
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++
++
++# Initial velocity and pressure
++
++md.initialization.vx=zeros(md.mesh.numberofvertices,1)
++md.initialization.vy=zeros(md.mesh.numberofvertices,1)
++md.initialization.vz=zeros(md.mesh.numberofvertices,1)
++md.initialization.pressure=zeros(md.mesh.numberofvertices,1)
++
++
++# Materials
++
++md.initialization.temperature=(273-20)*ones(md.mesh.numberofvertices,1)
++md.materials.rheology_B=paterson(md.initialization.temperature)
++md.materials.rheology_n=3*ones(md.mesh.numberofelements,1)
++
++
++# Boundary conditions:
++
++md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1)
++md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1)
++md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1)
++
++
++# constrain flanks to 0 normal velocity
++
++pos=numpy.nonzero(md.mesh.x==xmin | md.mesh.x==xmax)
++md.diagnostic.spcvx(pos)=0
++md.diagnostic.spcvz(pos)=NaN
++
++
++# constrain grounding line to 0 velocity
++
++pos=numpy.nonzero(md.mesh.y==ymin)
++md.diagnostic.spcvx(pos)=0
++md.diagnostic.spcvy(pos)=0
++
++
++# icefront
++
++nodeonicefront=zeros(md.mesh.numberofvertices,1)
++pos=numpy.nonzero(md.mesh.y==ymax)
++nodeonicefront(pos)=1
++pos=find(nodeonicefront(md.mesh.segments(:,1)) | nodeonicefront(md.mesh.segments(:,2)))
++diagnostic.icefront=md.mesh.segments(pos,:)
++diagnostic.icefront=[diagnostic.icefront 1*md.mask.elementonfloatingice(diagnostic.icefront(:,end))]
++md.diagnostic.icefront=diagnostic.icefront
++
++
++# partitioning
++
++md.qmu.numberofpartitions=md.mesh.numberofvertices
++md=partitioner(md,'package','linear','npart',md.qmu.numberofpartitions)
++md.qmu.pytition=md.qmu.pytition-1
++
++
++# Dakota options
++
++# variables
++
++md.qmu.variables.rheology_B=normal_uncertain('scaled_MaterialsRheologyB',1,.05)
++
++
++# responses
++
++md.qmu.responses.MaxVel=response_function('MaxVel',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999])
++
++
++# method
++
++md.qmu.method     =dakota_method('nond_l')
++
++
++# parameters
++
++md.qmu.pyams.direct=true
++md.qmu.pyams.analysis_driver='diagnostic'
++md.qmu.pyams.evaluation_concurrency=1
++md.qmu.pyams.interval_type='forward'
++
++
++# imperative! 
++
++md.diagnostic.reltol=10^-10#tighten for qmu analysese
++md.qmu.isdakota=1
++
++
++# solve
++
++md=solve(md,DiagnosticSolutionEnum(),'overwrite','y')
++
++
++# Fields and tolerances to track changes
++
++md.qmu.results=md.results.dakota
++md.results.dakota.importancefactors=importancefactors(md,'scaled_MaterialsRheologyB','MaxVel')
++field_names     =['importancefactors']
++field_tolerances=[1e-10]
++field_values=[\
++md.results.dakota.importancefactors,\
++]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test219.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test219.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test219.py	(revision 13492)
+@@ -0,0 +1,42 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test219.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,2)
++md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3001.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3001.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3001.py	(revision 13492)
+@@ -0,0 +1,47 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3001.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',50000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.diagnostic.requested_outputs=StressTensorEnum()
++md.autodiff.isautodiff=true
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vel','Pressure',\
++	'StressTensorxx','StressTensoryy','StressTensorxy']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['StressTensorxx'],\
++	md.results['DiagnosticSolution'][1]['StressTensoryy'],\
++	md.results['DiagnosticSolution'][1]['StressTensorxy'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3010.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3010.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3010.py	(revision 13492)
+@@ -0,0 +1,66 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3010.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.transient.requested_outputs=IceVolumeEnum()
++
++
++md.autodiff.isautodiff=true
++md=solve(md,TransientSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Volume1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Volume2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Volume3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['IceVolume'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['IceVolume'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['IceVolume'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1301.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1301.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1301.py	(revision 13492)
+@@ -0,0 +1,87 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test1301.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++#  This file can be run to check that the melting in simple conduction is correctly modeled.
++
++#  There is no velocity (no advection) the only thermal boundary conditions are an imposed temperature
++
++#  at upper surface and an impose flux at its base. The result must be a linear temperature from the upper to the lower
++
++#  surface with an imposed slope (Geothermal flux). if it is not the case, something is thermal modeling has been changed...
++
++printingflag=false
++
++
++md=model()
++md=triangle(md,'../Exp/Square.exp',100000)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareThermal.py')
++md.extrude(3,2)
++md=setflowequation(md,'Pattyn','all')
++
++
++# Some conditions specific to melting test
++
++md.initialization.pressure=zeros(md.mesh.numberofvertices,1)
++md.initialization.temperature=273.15*ones(md.mesh.numberofvertices,1)
++pos=numpy.nonzero(md.mesh.vertexonsurface)
++md.thermal.spctemperature(pos)=md.initialization.temperature(pos)
++md.materials.rheology_B=paterson(md.initialization.temperature)
++
++
++# analytical results
++
++# melting heat = geothermal flux
++
++# Mb*L*rho=G   => Mb=G/L*rho
++
++melting=md.basalforcings.geothermalflux/(md.materials.rho_ice*md.materials.latentheat)*md.constants.yts
++
++
++# modeled  results
++
++md.cluster=generic('name',oshostname(),'np',2)
++md=solve(md,ThermalSolutionEnum())
++
++
++# plot results
++
++comp_melting=md.results.ThermalSolution.BasalforcingsMeltingRate
++relative=abs((comp_melting-melting)./melting)*100
++relative(find(comp_melting==melting))=0
++plotmodel()(md,'data',comp_melting,'title','Modeled melting','data',melting,'title','Analytical melting',\
++	'data',comp_melting-melting,'title','Absolute error','data',relative,'title','Relative error [%]',\
++	'layer#all',1,'caxis#2',[1.02964 1.02966]*10^-4,'FontSize#all',20,'figposition','mathieu')
++if printingflag, 
++	set(gcf,'Color','w')
++	printmodel()('thermalmelting','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off')
++	system(['mv thermalmelting.png ' ISSM_DIR '/website/doc_pdf/validation/Images/Thermal '])
++end
++
++
++
++
++# Fields and tolerances to track changes
++
++field_names     =['BasalMelting']
++field_tolerances=[1e-08]
++field_values    =[comp_melting]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3002.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3002.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3002.py	(revision 13492)
+@@ -0,0 +1,43 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3002.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,2)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.autodiff.isautodiff=true
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1302.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1302.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1302.py	(revision 13492)
+@@ -0,0 +1,86 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test1302.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++#  This file can be run to check that the advection-diffusion  is correctly modeled.
++
++#  There is u=v=0 and w=cst everywhere the only thermal boundary conditions are an imposed temperature
++
++#  at upper surface and an impose flux at its base.
++
++printingflag=false
++
++
++md=model()
++md=triangle(md,'../Exp/Square.exp',100000)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareThermal.py')
++md.extrude(30,1)   %NB: the more one extrudes, the better (10-> relative~0.35%, 20->0.1%, 30->0.05%)
++md=setflowequation(md,'Pattyn','all') 
++
++
++# Thermal boundary conditions
++
++pos1=numpy.nonzero(md.mesh.elementonbed)     md.thermal.spctemperature(md.mesh.elements(pos1,1:3))=10
++pos2=numpy.nonzero(md.mesh.elementonsurface) md.thermal.spctemperature(md.mesh.elements(pos2,4:6))=0
++md.initialization.vz=0.1*ones(md.mesh.numberofvertices,1)
++md.initialization.vel=sqrt( md.initialization.vx.^2+ md.initialization.vy.^2+ md.initialization.vz.^2)
++md.initialization.pressure=zeros(md.mesh.numberofvertices,1)
++
++
++md.thermal.stabilization=2
++# analytical results
++
++# d2T/dz2-w*rho_ice*c/k*dT/dz=0   T(surface)=0  T(bed)=10   => T=A exp(alpha z)+B
++
++alpha=0.1/md.constants.yts*md.materials.rho_ice*md.materials.heatcapacity/md.materials.thermalconductivity   %alpha=w rho_ice c /k  and w=0.1m/an
++A=10/(exp(alpha*(-1000))-1)    %A=T(bed)/(exp(alpha*bed)-1)  with bed=-1000 T(bed)=10
++B=-A
++md.initialization.temperature=A*exp(alpha*md.mesh.z)+B
++
++
++# modeled  results
++
++md.cluster=generic('name',oshostname(),'np',2)
++md=solve(md,ThermalSolutionEnum())
++
++
++# plot results
++
++comp_temp=md.results.ThermalSolution.Temperature
++relative=abs((comp_temp-md.initialization.temperature)./md.initialization.temperature)*100
++relative(find(comp_temp==md.initialization.temperature))=0
++plotmodel()(md,'data',comp_temp,'title','Modeled temperature [K]','data',md.initialization.temperature,'view',3,\
++	'title','Analytical temperature [K]','view',3,'data',comp_temp-md.initialization.temperature,\
++	'title','Absolute error [K]','view',3,'data',relative,'title','Relative error [%]','view',3,\
++	'figposition','mathieu','FontSize#all',20)
++if printingflag, 
++	set(gcf,'Color','w')
++	printmodel()('thermaladvection','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off')
++	system(['mv thermaladvection.png ' ISSM_DIR '/website/doc_pdf/validation/Images/EISMINT '])
++end
++
++
++# Fields and tolerances to track changes
++
++field_names     =['AdvectionTemperature']
++field_tolerances=[1e-13]
++field_values    =[comp_temp]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3003.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3003.py	(revision 13492)
+@@ -0,0 +1,52 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3003.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,2)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.diagnostic.requested_outputs=StressTensorEnum()
++md.autodiff.isautodiff=true
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure',\
++	'StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,\
++	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['StressTensorxx'],\
++	md.results['DiagnosticSolution'][1]['StressTensoryy'],\
++	md.results['DiagnosticSolution'][1]['StressTensorzz'],\
++	md.results['DiagnosticSolution'][1]['StressTensorxy'],\
++	md.results['DiagnosticSolution'][1]['StressTensorxz'],\
++	md.results['DiagnosticSolution'][1]['StressTensoryz'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1501.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1501.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1501.py	(revision 13492)
+@@ -0,0 +1,267 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test1501.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++printingflag = false
++
++
++md=triangle(model(),'../Exp/Square.exp',350000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.transient.isthermal=0
++
++
++md.timestepping.time_step=1
++md.settings.output_frequency=1
++md.timestepping.final_time=2000
++
++
++# Solve for thinning rate -> -1 * surface mass balance
++
++smb= 2*ones(md.mesh.numberofvertices,1)   
++md.surfaceforcings.mass_balance= smb
++md.basalforcings.melting_rate= smb
++
++
++md=solve(md,PrognosticSolutionEnum())
++
++
++for i=1:10
++	 md=solve(md,PrognosticSolutionEnum())
++	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - (md.results['PrognosticSolution'][1]['Thickness']-md.geometry.thickness)
++end
++
++
++# Set up transient
++
++smb = md.surfaceforcings.mass_balance
++
++
++tooth= [ [ones(400,1)*(smb') - 10]' [ones(400,1)*(smb')]' ]
++smb=[ [ones(399,1)*(smb')]' smb  tooth tooth]
++
++
++md.surfaceforcings.mass_balance= smb
++md.surfaceforcings.mass_balance(end+1,:)=[1:2000]
++
++
++md=solve(md,TransientSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names=['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','SurfaceforcingsMassBalance1', \
++	'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','SurfaceforcingsMassBalance2', \
++	'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','SurfaceforcingsMassBalance3', \
++	'Vx4','Vy4','Vel4','Pressure4','Bed4','Surface4','Thickness4','SurfaceforcingsMassBalance4', \
++	'Vx5','Vy5','Vel5','Pressure5','Bed5','Surface5','Thickness5','SurfaceforcingsMassBalance5']
++field_tolerances=[1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10]
++field_values=[\
++	md.results['TransientSolution'][400]['Vx'],\
++	md.results['TransientSolution'][400]['Vy'],\
++	md.results['TransientSolution'][400]['Vel'],\
++	md.results['TransientSolution'][400]['Pressure'],\
++	md.results['TransientSolution'][400]['Bed'],\
++	md.results['TransientSolution'][400]['Surface'],\
++	md.results['TransientSolution'][400]['Thickness'],\
++	md.results['TransientSolution'][400]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][800]['Vx'],\
++	md.results['TransientSolution'][800]['Vy'],\
++	md.results['TransientSolution'][800]['Vel'],\
++	md.results['TransientSolution'][800]['Pressure'],\
++	md.results['TransientSolution'][800]['Bed'],\
++	md.results['TransientSolution'][800]['Surface'],\
++	md.results['TransientSolution'][800]['Thickness'],\
++	md.results['TransientSolution'][800]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][1200]['Vx'],\
++	md.results['TransientSolution'][1200]['Vy'],\
++	md.results['TransientSolution'][1200]['Vel'],\
++	md.results['TransientSolution'][1200]['Pressure'],\
++	md.results['TransientSolution'][1200]['Bed'],\
++	md.results['TransientSolution'][1200]['Surface'],\
++	md.results['TransientSolution'][1200]['Thickness'],\
++	md.results['TransientSolution'][1200]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][1600]['Vx'],\
++	md.results['TransientSolution'][1600]['Vy'],\
++	md.results['TransientSolution'][1600]['Vel'],\
++	md.results['TransientSolution'][1600]['Pressure'],\
++	md.results['TransientSolution'][1600]['Bed'],\
++	md.results['TransientSolution'][1600]['Surface'],\
++	md.results['TransientSolution'][1600]['Thickness'],\
++	md.results['TransientSolution'][1600]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][2000]['Vx'],\
++	md.results['TransientSolution'][2000]['Vy'],\
++	md.results['TransientSolution'][2000]['Vel'],\
++	md.results['TransientSolution'][2000]['Pressure'],\
++	md.results['TransientSolution'][2000]['Bed'],\
++	md.results['TransientSolution'][2000]['Surface'],\
++	md.results['TransientSolution'][2000]['Thickness'],\
++	md.results['TransientSolution'][2000]['SurfaceforcingsMassBalance'],\
++	]
++
++
++if printingflag,
++
++
++	starttime = 360
++	endtime = 2000
++	res = 40
++	ts = [starttime:res:endtime]
++
++
++	index = md.mesh.elements
++	x1=md.mesh.x(index(:,1)) x2=md.mesh.x(index(:,2)) x3=md.mesh.x(index(:,3))
++	y1=md.mesh.y(index(:,1)) y2=md.mesh.y(index(:,2)) y3=md.mesh.y(index(:,3))
++	areas=(0.5*((x2-x1).*(y3-y1)-(y2-y1).*(x3-x1)))
++
++
++	thickness = []
++	volume = []
++	massbal = []
++	velocity = []
++	for t=starttime:endtime
++		thickness = [thickness md.results['TransientSolution'][t]['Thickness']]
++		volume = [volume meanmd.results['TransientSolution'][t]['Thicknessvalue,2'].*areas]
++		massbal = [massbal md.results['TransientSolution'][t]['SurfaceforcingsMassBalance']]
++		velocity = [velocity md.results['TransientSolution'][t]['Vel']]
++	end
++
++
++	figure('Position', [0 0 860 932])
++
++
++	options = plotoptions('data','transient_movie','unit','km')
++	options = options.list[1]
++	options = checkplotoptions(md,options)
++
++
++# 	loop over the time steps
++
++	results=md.results.TransientSolution
++	count = 1
++	for i=ts
++
++
++		subplot(5,9,[28:31 37:40])
++		set(gca,'pos',get(gca,'pos')+[-0.08 -0.08 0.07 0.08])
++		field = 'Thickness'
++
++
++# 		process data
++
++		[x y z elements is2d isplanet]=processmesh(md,results(i).(field),options)
++		[data datatype]=processdata(md,results(i).(field),options)
++
++
++		titlestring=[field ' at time ' num2str(results(i).time/md.constants.yts) ' year']
++		plot_unit(x,y,z,elements,data,is2d,isplanet,datatype,options)
++		options=changefieldvalue(options,'title',titlestring)
++		options=addfielddefault(options,'colorbar',1)
++		options=changefieldvalue(options,'caxis',[0 max(max(thickness))])
++		applyoptions(md,[],options)
++
++
++		subplot(5,9,[33:36 42:45])
++		set(gca,'pos',get(gca,'pos')+[-0.00 -0.08 0.07 0.08])
++		field = 'Vel'
++
++
++# 		process data
++
++		[x y z elements is2d isplanet]=processmesh(md,results(i).(field),options)
++		[data datatype]=processdata(md,results(i).(field),options)
++
++
++		titlestring=[field ' at time ' num2str(results(i).time/md.constants.yts) ' year']
++		plot_unit(x,y,z,elements,data,is2d,isplanet,datatype,options)
++		options=changefieldvalue(options,'title',titlestring)
++		options=addfielddefault(options,'colorbar',1)
++		options=changefieldvalue(options,'caxis',[0 max(max(velocity))])
++		applyoptions(md,[],options)
++
++
++		subplot(5,4,1:4)
++		cla
++		set(gca,'pos',get(gca,'pos')+[-0.07 0.03 0.12 0.015])
++		plot(starttime:endtime,mean(massbal),'k','LineWidth', 4)
++		hold on
++		ya = ylim
++		plot([i i], ya, 'r', 'LineWidth',6)
++		ylim(ya) xlim([starttime endtime])
++		title('Surface Mass Balance','FontSize',14)
++		ylabel('m/year','FontSize',14)
++
++
++		subplot(5,4,5:8)
++		cla
++		set(gca,'pos',get(gca,'pos')+[-0.07 0.015 0.12 0.015])
++		plot(starttime:endtime,sum(volume)/1000/1000/1000,'LineWidth',4)
++		hold on
++		ya = ylim
++		plot([i i], ya, 'r', 'LineWidth',6)
++		ylim(ya) xlim([starttime endtime])
++		title('Ice Volume','FontSize',14)
++		ylabel('km^3','FontSize',14)
++
++
++		subplot(5,4,9:12)
++		cla
++		set(gca,'pos',get(gca,'pos')+[-0.07 0 0.12 0.015])
++		plot(starttime:endtime,mean(velocity)/1000, 'LineWidth', 4)
++		hold on
++		ya = ylim
++		plot([i i], ya, 'r', 'LineWidth',6)
++		ylim(ya) xlim([starttime endtime])
++		title('Mean Velocity','FontSize', 14)
++		ylabel('km/year','FontSize', 14)
++		xlabel('year','FontSize', 14)
++
++
++		set(gcf,'Renderer','zbuffer','color','white') %fixes a bug on Mac OS X (not needed in future Matlab version)
++		if i==starttime,
++# 			initialize images and frame
++
++			frame=getframe(gcf)
++			[images,map]=rgb2ind(frame.cdata,256,'nodither')
++			images(1,1,1,length(ts))=0
++		else
++			frame=getframe(gcf)
++			images(:,:,1,count) = rgb2ind(frame.cdata,map,'nodither')
++		end
++
++
++		count = count+1
++
++
++	end
++
++
++	filename='transawtooth2d.gif'
++	imwrite(images,map,filename,'DelayTime',1.0,'LoopCount',inf)
++
++
++end %printingflag
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1303.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1303.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1303.py	(revision 13492)
+@@ -0,0 +1,80 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test1303.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++#  This file can be run to check that the conduction is correctly modeled.
++
++#  There is no velocity (no advection) the only thermal boundary conditions are an imposed temperature
++
++#  at the lower and upper surface. The result must be a linear temperature from the upper to the lower
++
++#  surface. if it is not the case, something is thermal modeling has been changed...
++
++printingflag=false
++
++
++md=model()
++md=triangle(md,'../Exp/Square.exp',100000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareThermal.py')
++md.extrude(11,2)
++md=setflowequation(md,'Pattyn','all')
++pos1=numpy.nonzero(md.mesh.elementonbed)     md.thermal.spctemperature(md.mesh.elements(pos1,1:3))=10
++pos2=numpy.nonzero(md.mesh.elementonsurface) md.thermal.spctemperature(md.mesh.elements(pos2,4:6))=0
++md.initialization.pressure=zeros(md.mesh.numberofvertices,1)
++
++
++# analytical results
++
++# d2T/dz2=0 T(bed)=10 T(surface)=0  => T=0*(z-bed)/thickness+10*(surface-z)/thickness
++
++# each layer of the 3d mesh must have a constant value
++
++md.initialization.temperature=10*(md.geometry.surface-md.mesh.z)./md.geometry.thickness
++
++
++# modeled  results
++
++md.cluster=generic('name',oshostname(),'np',2)
++md=solve(md,ThermalSolutionEnum())
++
++
++# plot results
++
++comp_temp=md.results.ThermalSolution.Temperature
++relative=abs((comp_temp-md.initialization.temperature)./md.initialization.temperature)*100
++relative(find(comp_temp==md.initialization.temperature))=0
++plotmodel()(md,'data',comp_temp,'title','Modeled temperature [K]','data',md.initialization.temperature,'view',3,\
++	'title','Analytical temperature [K]','view',3,'data',comp_temp-md.initialization.temperature,\
++	'title','Absolute error [K]','view',3,'data',relative,'title','Relative error [%]','view',3,\
++	'figposition','mathieu','FontSize#all',20)
++if printingflag, 
++	set(gcf,'Color','w')
++	printmodel()('thermalconduction','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off')
++	system(['mv thermalconduction.png ' ISSM_DIR '/website/doc_pdf/validation/Images/Thermal '])
++end
++
++
++# Fields and tolerances to track changes
++
++field_names     =['ConductionTemperature']
++field_tolerances=[1e-13]
++field_values    =[comp_temp]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3004.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3004.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3004.py	(revision 13492)
+@@ -0,0 +1,43 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3004.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md.extrude(3,2)
++md=setflowequation(md,'stokes','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.autodiff.isautodiff=true
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-08,1e-08,1e-07,1e-08,1e-08]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1601.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1601.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1601.py	(revision 13492)
+@@ -0,0 +1,76 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test1601.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.diagnostic.spcvx(numpy.nonzero(md.mesh.y>0))=NaN
++md.initialization.vx(:)=0
++md.initialization.vy(:)=0
++md.initialization.vel(:)=0
++
++
++md.cluster=generic('name',oshostname,'np',2)
++md=solve(md,DiagnosticSolutionEnum())
++vel0=md.results.DiagnosticSolution.Vel
++
++
++theta=30*pi/180
++x=md.mesh.x
++y=md.mesh.y
++md.mesh.x=cos(theta)*x-sin(theta)*y
++md.mesh.y=sin(theta)*x+cos(theta)*y
++
++
++md.diagnostic.referential(:,1:3)=repmat([cos(theta),sin(theta),0],md.mesh.numberofvertices,1)
++md.diagnostic.referential(:,4:6)=repmat([0,0,1],md.mesh.numberofvertices,1)
++md=solve(md,DiagnosticSolutionEnum())
++vel1=md.results.DiagnosticSolution.Vel
++
++
++plotmodel()(md,'data',vel0,'data',vel1,'data',vel1-vel0,'title','Cartesian CS','title','Rotated CS','title','difference')
++disp(['Error between Cartesian and rotated CS: ' num2str(max(abs(vel0-vel1))/(max(abs(vel0))+eps)) ])
++
++
++# Now, put CS back to normal except on the side where the spc are applied
++
++pos=find(x==0 | x==1000000)
++md.diagnostic.referential(:)=NaN
++md.diagnostic.referential(pos,1:3)=repmat([cos(theta),sin(theta),0],size(pos,1),1)
++md.diagnostic.referential(pos,4:6)=repmat([0,0,1],size(pos,1),1)
++md=solve(md,DiagnosticSolutionEnum())
++vel2=md.results.DiagnosticSolution.Vel
++
++
++plotmodel()(md,'data',vel0,'data',vel2,'data',vel2-vel0,'title','Cartesian CS','title','Rotated CS','title','difference')
++disp(['Error between Cartesian and rotated CS: ' num2str(max(abs(vel0-vel2))/(max(abs(vel0))+eps)) ])
++
++
++# Fields and tolerances to track changes
++
++field_names     =['vel1','vel2']
++field_tolerances=[1e-11,1e-11]
++field_values=[\
++	vel1, \
++	vel2, \
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1502.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1502.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1502.py	(revision 13492)
+@@ -0,0 +1,273 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test1502.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++printingflag = false
++
++
++md=triangle(model(),'../Exp/Square.exp',450000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.extrude(3,1)
++md.cluster=generic('name',oshostname(),'np',2)
++md.transient.isthermal=0
++
++
++md.timestepping.time_step=1
++md.settings.output_frequency=1
++md.timestepping.final_time=2000
++
++
++# Solve for thinning rate -> -1 * surface mass balance
++
++smb= 2*ones(md.mesh.numberofvertices,1)   
++md.surfaceforcings.mass_balance= smb
++md.basalforcings.melting_rate= smb
++
++
++md=solve(md,PrognosticSolutionEnum())
++
++
++for i=1:10
++	 md=solve(md,PrognosticSolutionEnum())
++	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - (md.results['PrognosticSolution'][1]['Thickness']-md.geometry.thickness)
++end
++
++
++# Set up transient
++
++smb = md.surfaceforcings.mass_balance
++
++
++tooth= [ [ones(400,1)*(smb') - 10]' [ones(400,1)*(smb')]' ]
++smb=[ [ones(399,1)*(smb')]' smb  tooth tooth]
++
++
++md.surfaceforcings.mass_balance= smb
++md.surfaceforcings.mass_balance(end+1,:)=[1:2000]
++
++
++md=solve(md,TransientSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names=['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','SurfaceforcingsMassBalance1', \
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','SurfaceforcingsMassBalance2', \
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','SurfaceforcingsMassBalance3', \
++	'Vx4','Vy4','Vz4','Vel4','Pressure4','Bed4','Surface4','Thickness4','SurfaceforcingsMassBalance4', \
++	'Vx5','Vy5','Vz5','Vel5','Pressure5','Bed5','Surface5','Thickness5','SurfaceforcingsMassBalance5']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][400]['Vx'],\
++	md.results['TransientSolution'][400]['Vy'],\
++	md.results['TransientSolution'][400]['Vz'],\
++	md.results['TransientSolution'][400]['Vel'],\
++	md.results['TransientSolution'][400]['Pressure'],\
++	md.results['TransientSolution'][400]['Bed'],\
++	md.results['TransientSolution'][400]['Surface'],\
++	md.results['TransientSolution'][400]['Thickness'],\
++	md.results['TransientSolution'][400]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][800]['Vx'],\
++	md.results['TransientSolution'][800]['Vy'],\
++	md.results['TransientSolution'][800]['Vz'],\
++	md.results['TransientSolution'][800]['Vel'],\
++	md.results['TransientSolution'][800]['Pressure'],\
++	md.results['TransientSolution'][800]['Bed'],\
++	md.results['TransientSolution'][800]['Surface'],\
++	md.results['TransientSolution'][800]['Thickness'],\
++	md.results['TransientSolution'][800]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][1200]['Vx'],\
++	md.results['TransientSolution'][1200]['Vy'],\
++	md.results['TransientSolution'][1200]['Vz'],\
++	md.results['TransientSolution'][1200]['Vel'],\
++	md.results['TransientSolution'][1200]['Pressure'],\
++	md.results['TransientSolution'][1200]['Bed'],\
++	md.results['TransientSolution'][1200]['Surface'],\
++	md.results['TransientSolution'][1200]['Thickness'],\
++	md.results['TransientSolution'][1200]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][1600]['Vx'],\
++	md.results['TransientSolution'][1600]['Vy'],\
++	md.results['TransientSolution'][1600]['Vz'],\
++	md.results['TransientSolution'][1600]['Vel'],\
++	md.results['TransientSolution'][1600]['Pressure'],\
++	md.results['TransientSolution'][1600]['Bed'],\
++	md.results['TransientSolution'][1600]['Surface'],\
++	md.results['TransientSolution'][1600]['Thickness'],\
++	md.results['TransientSolution'][1600]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][2000]['Vx'],\
++	md.results['TransientSolution'][2000]['Vy'],\
++	md.results['TransientSolution'][2000]['Vz'],\
++	md.results['TransientSolution'][2000]['Vel'],\
++	md.results['TransientSolution'][2000]['Pressure'],\
++	md.results['TransientSolution'][2000]['Bed'],\
++	md.results['TransientSolution'][2000]['Surface'],\
++	md.results['TransientSolution'][2000]['Thickness'],\
++	md.results['TransientSolution'][2000]['SurfaceforcingsMassBalance'],\
++	]
++
++
++if printingflag,
++
++
++	starttime = 360
++	endtime = 2000
++	res = 40
++	ts = [starttime:res:endtime]
++
++
++	index = md.mesh.elements
++	x1=md.mesh.x(index(:,1)) x2=md.mesh.x(index(:,2)) x3=md.mesh.x(index(:,3))
++	y1=md.mesh.y(index(:,1)) y2=md.mesh.y(index(:,2)) y3=md.mesh.y(index(:,3))
++	areas=(0.5*((x2-x1).*(y3-y1)-(y2-y1).*(x3-x1)))
++
++
++	thickness = []
++	volume = []
++	massbal = []
++	velocity = []
++	for t=starttime:endtime
++		thickness = [thickness md.results['TransientSolution'][t]['Thickness']]
++		volume = [volume meanmd.results['TransientSolution'][t]['Thicknessvalue,2'].*areas]
++		massbal = [massbal md.results['TransientSolution'][t]['SurfaceforcingsMassBalance']]
++		velocity = [velocity md.results['TransientSolution'][t]['Vel']]
++	end
++
++
++	figure('Position', [0 0 1060 1060])
++
++
++	options = plotoptions('data','transient_movie','unit','km')
++	options = options.list[1]
++	options = checkplotoptions(md,options)
++
++
++# 	loop over the time steps
++
++	results=md.results.TransientSolution
++	count = 1
++	for i=ts
++
++
++		subplot(5,9,[28:31 37:40])
++		set(gca,'pos',get(gca,'pos')+[-0.08 -0.08 0.07 0.08])
++		field = 'Thickness'
++
++
++# 		process data
++
++		[x y z elements is2d isplanet]=processmesh(md,results(i).(field),options)
++		[data datatype]=processdata(md,results(i).(field),options)
++
++
++		titlestring=[field ' at time ' num2str(results(i).time/md.constants.yts) ' year']
++		plot_unit(x,y,z,elements,data,is2d,isplanet,datatype,options)
++		options=changefieldvalue(options,'title',titlestring)
++		options=addfielddefault(options,'colorbar',1)
++		options=changefieldvalue(options,'caxis',[0 max(max(thickness))])
++		applyoptions(md,[],options)
++
++
++		subplot(5,9,[33:36 42:45])
++		set(gca,'pos',get(gca,'pos')+[-0.01 -0.08 0.07 0.08])
++		field = 'Vel'
++
++
++# 		process data
++
++		[x y z elements is2d isplanet]=processmesh(md,results(i).(field),options)
++		[data datatype]=processdata(md,results(i).(field),options)
++
++
++		titlestring=[field ' at time ' num2str(results(i).time/md.constants.yts) ' year']
++		plot_unit(x,y,z,elements,data,is2d,isplanet,datatype,options)
++		options=changefieldvalue(options,'title',titlestring)
++		options=addfielddefault(options,'colorbar',1)
++		options=changefieldvalue(options,'caxis',[0 max(max(velocity))])
++		applyoptions(md,[],options)
++
++
++		subplot(5,4,1:4)
++		cla
++		set(gca,'pos',get(gca,'pos')+[-0.07 0.03 0.12 0.015])
++		plot(starttime:endtime,mean(massbal),'k','LineWidth', 4)
++		hold on
++		ya = ylim
++		plot([i i], ya, 'r', 'LineWidth',6)
++		ylim(ya) xlim([starttime endtime])
++		title('Surface Mass Balance','FontSize',14)
++		ylabel('m/year','FontSize',14)
++
++
++		subplot(5,4,5:8)
++		cla
++		set(gca,'pos',get(gca,'pos')+[-0.07 0.015 0.12 0.015])
++		plot(starttime:endtime,sum(volume)/1000/1000/1000,'LineWidth',4)
++		hold on
++		ya = ylim
++		plot([i i], ya, 'r', 'LineWidth',6)
++		ylim(ya) xlim([starttime endtime])
++		title('Ice Volume','FontSize',14)
++		ylabel('km^3','FontSize',14)
++
++
++		subplot(5,4,9:12)
++		cla
++		set(gca,'pos',get(gca,'pos')+[-0.07 0 0.12 0.015])
++		plot(starttime:endtime,mean(velocity)/1000, 'LineWidth', 4)
++		hold on
++		ya = ylim
++		plot([i i], ya, 'r', 'LineWidth',6)
++		ylim(ya) xlim([starttime endtime])
++		title('Mean Velocity','FontSize', 14)
++		ylabel('km/year','FontSize', 14)
++		xlabel('year','FontSize', 14)
++
++
++		set(gcf,'Renderer','zbuffer','color','white') %fixes a bug on Mac OS X (not needed in future Matlab version)
++		if i==starttime,
++# 			initialize images and frame
++
++			frame=getframe(gcf)
++			[images,map]=rgb2ind(frame.cdata,256,'nodither')
++			images(1,1,1,length(ts))=0
++		else
++			frame=getframe(gcf)
++			images(:,:,1,count) = rgb2ind(frame.cdata,map,'nodither')
++		end
++
++
++		count = count+1
++
++
++	end
++
++
++	filename='transawtooth3d.gif'
++	imwrite(images,map,filename,'DelayTime',1.0,'LoopCount',inf)
++
++
++end %printingflag
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1304.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1304.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1304.py	(revision 13492)
+@@ -0,0 +1,82 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test1304.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++#  This file can be run to check that the geothermal flux in simple conduction is correctly modeled.
++
++#  There is no velocity (no advection) the only thermal boundary conditions are an imposed temperature
++
++#  at upper surface and an impose flux at its base. The result must be a linear temperature from the upper to the lower
++
++#  surface with an imposed slope (Geothermal flux). if it is not the case, something is thermal modeling has been changed...
++
++printingflag=false
++
++
++md=model()
++md=triangle(md,'../Exp/Square.exp',100000)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareThermal.py')
++md.extrude(11,1)
++md=setflowequation(md,'Pattyn','all')
++
++
++pos2=numpy.nonzero(md.mesh.elementonsurface) md.thermal.spctemperature(md.mesh.elements(pos2,4:6))=0
++md.initialization.pressure=zeros(md.mesh.numberofvertices,1)
++md.basalforcings.geothermalflux(:)=0.1 %100mW/m^2
++
++
++# analytical results
++
++# the result is linear with depth and is equal to 0 on the upper surface (See BC)
++
++# d2T/dz2=0  -k*dT/dz(bed)=G  T(surface)=0  => T=-G/k*(z-surface)
++
++md.initialization.temperature=-0.1/md.materials.thermalconductivity*(md.mesh.z-md.geometry.surface) %G=0.1 W/m2
++
++
++# modeled  results
++
++md.cluster=generic('name',oshostname(),'np',2)
++md=solve(md,ThermalSolutionEnum())
++
++
++# plot results
++
++comp_temp=md.results.ThermalSolution.Temperature
++relative=abs((comp_temp-md.initialization.temperature)./md.initialization.temperature)*100
++relative(find(comp_temp==md.initialization.temperature))=0
++plotmodel()(md,'data',comp_temp,'title','Modeled temperature [K]','data',md.initialization.temperature,'view',3,\
++	'title','Analytical temperature','view',3,'data',comp_temp-md.initialization.temperature,\
++	'title','Absolute error [K]','view',3,'data',relative,'title','Relative error [%]','view',3,\
++	'figposition','mathieu','FontSize#all',20)
++if printingflag, 
++	set(gcf,'Color','w')
++	printmodel()('thermalgeothermalflux','png','margin','on','marginsize',25,'frame','off','resolution',0.7,'hardcopy','off')
++	system(['mv thermalgeothermalflux.png ' ISSM_DIR '/website/doc_pdf/validation/Images/Thermal '])
++end
++
++
++# Fields and tolerances to track changes
++
++field_names     =['GeothermalFluxTemperature']
++field_tolerances=[1e-13]
++field_values    =[comp_temp]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3005.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3005.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3005.py	(revision 13492)
+@@ -0,0 +1,38 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test3005.m
++Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++import numpy
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.autodiff.isautodiff=true
++md=solve(md,PrognosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['PrognosticSolution'][1]['Thickness'],\
++	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13492-13493.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13492-13493.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13492-13493.diff	(revision 13980)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 13492)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 13493)
+@@ -267,10 +267,10 @@
+ 		pass
+ 	#}}}
+ 	# Bamg Mesh parameters {{{
+-	if options.exist('domain') and md.mesh.numberofvertices and md.mesh.dimension==2:
++	if not options.exist('domain') and md.mesh.numberofvertices and md.mesh.dimension==2:
+ 
+ 		if isinstance(md.private.bamg,dict) and 'mesh' in md.private.bamg:
+-			bamg_mesh=bamgmesh(md.private.bamg['mesh'])
++			bamg_mesh=bamgmesh(md.private.bamg['mesh'].__dict__)
+ 		else:
+ 			bamg_mesh.Vertices=numpy.hstack((md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),numpy.ones((md.mesh.numberofvertices,1))))
+ 			bamg_mesh.Triangles=numpy.hstack((md.mesh.elements,numpy.ones((md.mesh.numberofelements,1))))
Index: /issm/oecreview/Archive/13393-13976/ISSM-13493-13494.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13493-13494.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13493-13494.diff	(revision 13980)
@@ -0,0 +1,130 @@
+Index: ../trunk-jpl/test/NightlyRun/test514.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test514.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test514.py	(revision 13494)
+@@ -0,0 +1,66 @@
++import numpy
++import copy
++from model import *
++from bamg import *
++from setmask import *
++from parameterize import *
++from ComputeHessian import *
++from ComputeMetric import *
++from MatlabFuncs import *
++
++#Simple mesh 1
++hVertices=10000.*numpy.ones((27,1))
++hVertices[0:5]=1000.
++md=bamg(model(),'domain','../Exp/Pig.exp','hmax',20000.,'hVertices',hVertices,'gradation',3.,'geometricalmetric',1)
++x1=md.mesh.x
++y1=md.mesh.y
++
++#Simple mesh 2
++md=bamg(model(),'domain','../Exp/Pig.exp','hmax',10000.)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++x2=md.mesh.x
++y2=md.mesh.y
++
++#refine existing mesh 1
++hessian=ComputeHessian(md.mesh.elements,md.mesh.x,md.mesh.y,md.inversion.vy_obs,'node')
++metric=ComputeMetric(hessian,2./9.,1.,1000.,25.*10.**3,[])
++md.miscellaneous.dummy=metric
++md2=bamg(copy.deepcopy(md),'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1)
++x3=md2.mesh.x
++y3=md2.mesh.y
++
++#refine existing mesh 2
++md2=bamg(copy.deepcopy(md),'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'anisomax',1.)
++x4=md2.mesh.x
++y4=md2.mesh.y
++
++#refine existing mesh 3
++hVertices=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++hVertices[numpy.nonzero(md.mesh.vertexonboundary)]=500.
++md2=bamg(copy.deepcopy(md),'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'anisomax',1.,'hVertices',hVertices)
++x5=md2.mesh.x
++y5=md2.mesh.y
++
++#refine existing mesh 4
++md2=bamg(copy.deepcopy(md),'field',md.inversion.vy_obs,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'Hessiantype',0,'err',numpy.array([[1.]]))
++x6=md2.mesh.x
++y6=md2.mesh.y
++
++#refine existing mesh 5
++md2=bamg(copy.deepcopy(md),'field',numpy.hstack((md.inversion.vy_obs,md.geometry.thickness)),'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'Hessiantype',1,'err',numpy.array([[10.,100.]])) 
++x7=md2.mesh.x
++y7=md2.mesh.y
++
++#Fields and tolerances to track changes
++field_names     =['x1','y1','x2','y2','x3','y3','x4','y4','x5','y5','x6','y6','x7','y7']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	x1, y1,\
++	y2, y2,\
++	y3, y3,\
++	y4, y4,\
++	y5, y5,\
++	y6, y6,\
++	y7, y7,\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test514.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test514.m	(revision 13493)
++++ ../trunk-jpl/test/NightlyRun/test514.m	(revision 13494)
+@@ -1,12 +1,12 @@
+ %Simple mesh 1
+-hVertices=10000*ones(27,1);
+-hVertices(1:5)=1000;
+-md=bamg(model,'domain','../Exp/Pig.exp','hmax',20000,'hVertices',hVertices,'gradation',3,'geometricalmetric',1);
++hVertices=10000.*ones(27,1);
++hVertices(1:5)=1000.;
++md=bamg(model,'domain','../Exp/Pig.exp','hmax',20000.,'hVertices',hVertices,'gradation',3.,'geometricalmetric',1);
+ x1=md.mesh.x;
+ y1=md.mesh.y;
+ 
+ %Simple mesh 2
+-md=bamg(model,'domain','../Exp/Pig.exp','hmax',10000);
++md=bamg(model,'domain','../Exp/Pig.exp','hmax',10000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ x2=md.mesh.x;
+@@ -14,31 +14,31 @@
+ 
+ %refine existing mesh 1
+ hessian=ComputeHessian(md.mesh.elements,md.mesh.x,md.mesh.y,md.inversion.vy_obs,'node');
+-metric=ComputeMetric(hessian,2/9,1,1000,25*10^3,[]);
++metric=ComputeMetric(hessian,2./9.,1.,1000.,25.*10.^3,[]);
+ md.miscellaneous.dummy=metric;
+-md2=bamg(md,'metric',md.miscellaneous.dummy,'hmin',1000,'hmax',20000,'gradation',3,'geometricalmetric',1);
++md2=bamg(md,'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1);
+ x3=md2.mesh.x;
+ y3=md2.mesh.y;
+ 
+ %refine existing mesh 2
+-md2=bamg(md,'metric',md.miscellaneous.dummy,'hmin',1000,'hmax',20000,'gradation',3,'geometricalmetric',1,'anisomax',1);
++md2=bamg(md,'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'anisomax',1.);
+ x4=md2.mesh.x;
+ y4=md2.mesh.y;
+ 
+ %refine existing mesh 3
+ hVertices=NaN*ones(md.mesh.numberofvertices,1);
+ hVertices(find(md.mesh.vertexonboundary))=500;
+-md2=bamg(md,'metric',md.miscellaneous.dummy,'hmin',1000,'hmax',20000,'gradation',3,'geometricalmetric',1,'anisomax',1,'hVertices',hVertices);
++md2=bamg(md,'metric',md.miscellaneous.dummy,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'anisomax',1.,'hVertices',hVertices);
+ x5=md2.mesh.x;
+ y5=md2.mesh.y;
+ 
+ %refine existing mesh 4
+-md2=bamg(md,'field',md.inversion.vy_obs,'hmin',1000,'hmax',20000,'gradation',3,'geometricalmetric',1,'Hessiantype',0,'err',1);
++md2=bamg(md,'field',md.inversion.vy_obs,'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'Hessiantype',0,'err',1.);
+ x6=md2.mesh.x;
+ y6=md2.mesh.y;
+ 
+ %refine existing mesh 5
+-md2=bamg(md,'field',[md.inversion.vy_obs md.geometry.thickness],'hmin',1000,'hmax',20000,'gradation',3,'geometricalmetric',1,'Hessiantype',1,'err',[10 100]); 
++md2=bamg(md,'field',[md.inversion.vy_obs md.geometry.thickness],'hmin',1000.,'hmax',20000.,'gradation',3.,'geometricalmetric',1,'Hessiantype',1,'err',[10. 100.]); 
+ x7=md2.mesh.x;
+ y7=md2.mesh.y;
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13494-13495.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13494-13495.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13494-13495.diff	(revision 13980)
@@ -0,0 +1,262 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 13494)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 13495)
+@@ -6,6 +6,7 @@
+ from bamgmesh import *
+ from expread import *
+ from expwrite import *
++from SegIntersect import *
+ from MatlabFuncs import *
+ from BamgMesher import *
+ 
+@@ -120,93 +121,93 @@
+ 					raise RuntimeError("one rift has all its points outside of the domain outline")
+ 
+ 				elif numpy.any(numpy.logical_not(flags)):
+-					raise RuntimeError("bamg.py for rifts is not complete.")
+ 					#We LOTS of work to do
+ 					print("Rift tip outside of or on the domain has been detected and is being processed...")
+-					"""
+ 
+-					%check that only one point is outside (for now)
+-					if sum(~flags)~=1,
+-						error('bamg error message: only one point outside of the domain is supported yet');
+-					end
++					#check that only one point is outside (for now)
++					if numpy.sum(numpy.logical_not(flags).astype(int))!=1:
++						raise RuntimeError("bamg error message: only one point outside of the domain is supported yet")
+ 
+-					%Move tip outside to the first position
+-					if flags(1)==0,
+-						%OK, first point is outside (do nothing),
+-					elseif (flags(end)==0),
+-						rift(i).x=flipud(rift(i).x);
+-						rift(i).y=flipud(rift(i).y);
+-					else
+-						error('bamg error message: only a rift tip can be outside of the domain');
+-					end
++					#Move tip outside to the first position
++					if   not flags[0]:
++						#OK, first point is outside (do nothing),
++						pass
++					elif not flags[-1]:
++						rifti['x']=numpy.flipud(rifti['x'])
++						rifti['y']=numpy.flipud(rifti['y'])
++					else:
++						raise RuntimeError("bamg error message: only a rift tip can be outside of the domain")
+ 
+-					%Get cordinate of intersection point
+-					x1=rift(i).x(1); y1=rift(i).y(1);
+-					x2=rift(i).x(2); y2=rift(i).y(2);
+-					for j=1:length(domain[0]['x'])-1;
+-						if SegIntersect([x1 y1; x2 y2],[domain[0]['x'](j) domain[0]['y'](j); domain[0]['x'](j+1) domain[0]['y'](j+1)]),
++					#Get cordinate of intersection point
++					x1=rifti['x'][0]
++					y1=rifti['y'][0]
++					x2=rifti['x'][1]
++					y2=rifti['y'][1]
++					for j in xrange(0,numpy.size(domain[0]['x'])-1):
++						if SegIntersect(numpy.array([[x1,y1],[x2,y2]]),numpy.array([[domain[0]['x'][j],domain[0]['y'][j]],[domain[0]['x'][j+1],domain[0]['y'][j+1]]])):
+ 
+-							%Get position of the two nodes of the edge in domain
+-							i1=j;
+-							i2=mod(j+1,domain[0]['nods']);
++							#Get position of the two nodes of the edge in domain
++							i1=j
++							i2=j+1
+ 
+-							%rift is crossing edge [i1 i2] of the domain
+-							%Get coordinate of intersection point (http://mathworld.wolfram.com/Line-LineIntersection.html)
+-							x3=domain[0]['x'](i1); y3=domain[0]['y'](i1);
+-							x4=domain[0]['x'](i2); y4=domain[0]['y'](i2);
+-							x=det([det([x1 y1; x2 y2])  x1-x2;det([x3 y3; x4 y4])  x3-x4])/det([x1-x2 y1-y2;x3-x4 y3-y4]);
+-							y=det([det([x1 y1; x2 y2])  y1-y2;det([x3 y3; x4 y4])  y3-y4])/det([x1-x2 y1-y2;x3-x4 y3-y4]);
++							#rift is crossing edge [i1 i2] of the domain
++							#Get coordinate of intersection point (http://mathworld.wolfram.com/Line-LineIntersection.html)
++							x3=domain[0]['x'][i1]
++							y3=domain[0]['y'][i1]
++							x4=domain[0]['x'][i2]
++							y4=domain[0]['y'][i2]
++#							x=det([det([x1 y1; x2 y2])  x1-x2;det([x3 y3; x4 y4])  x3-x4])/det([x1-x2 y1-y2;x3-x4 y3-y4]);
++#							y=det([det([x1 y1; x2 y2])  y1-y2;det([x3 y3; x4 y4])  y3-y4])/det([x1-x2 y1-y2;x3-x4 y3-y4]);
++							x=numpy.linalg.det(numpy.array([[numpy.linalg.det(numpy.array([[x1,y1],[x2,y2]])),x1-x2],[numpy.linalg.det(numpy.array([[x3,y3],[x4,y4]])),x3-x4]]))/numpy.linalg.det(numpy.array([[x1-x2,y1-y2],[x3-x4,y3-y4]]));
++							y=numpy.linalg.det(numpy.array([[numpy.linalg.det(numpy.array([[x1,y1],[x2,y2]])),y1-y2],[numpy.linalg.det(numpy.array([[x3,y3],[x4,y4]])),y3-y4]]))/numpy.linalg.det(numpy.array([[x1-x2,y1-y2],[x3-x4,y3-y4]]));
+ 
+-							segdis= sqrt((x4-x3)**2+(y4-y3)**2);
+-							tipdis=[sqrt((x-x3)**2+(y-y3)**2)  sqrt((x-x4)**2+(y-y4)**2)];
++							segdis= sqrt((x4-x3)**2+(y4-y3)**2)
++							tipdis=numpy.array([sqrt((x-x3)**2+(y-y3)**2),sqrt((x-x4)**2+(y-y4)**2)])
+ 
+-							if (min(tipdis)/segdis) < getfieldvalue(options,'toltip',0),
+-								disp('moving tip-domain intersection point');
++							if numpy.min(tipdis)/segdis < options.getfieldvalue('toltip',0):
++								print("moving tip-domain intersection point")
+ 
+-								%Get position of the closest point
+-								if tipdis(1)>tipdis(2),
+-									pos=i2;
+-								else
+-									pos=i1;
+-								end
++								#Get position of the closer point
++								if tipdis[0]>tipdis[1]:
++									pos=i2
++								else:
++									pos=i1
+ 
+-								%This point is only in Vertices (number pos).
+-								%OK, now we can add our own rift
+-								nods=rift(i).nods-1;
+-								bamg_geometry.Vertices=[bamg_geometry.Vertices; [rift(i).x(2:end) rift(i).y(2:end) ones(nods,1)]];
+-								bamg_geometry.Edges=[bamg_geometry.Edges;...
+-									pos count+1  (1+i);...
+-									[transpose(count+1:count+nods-1) transpose([count+2:count+nods])  (1+i)*ones(nods-1,1)]];
+-								count=count+nods;
++								#This point is only in Vertices (number pos).
++								#OK, now we can add our own rift
++								nods=rifti['nods']-1
++								bamg_geometry.Vertices=numpy.vstack((bamg_geometry.Vertices,numpy.hstack((rifti['x'][1:].reshape(-1,1),rifti['y'][1:].reshape(-1,1),numpy.ones((nods,1))))))
++								bamg_geometry.Edges=numpy.vstack((bamg_geometry.Edges,\
++									numpy.array([[pos,count+1,(1+i)]]),\
++									numpy.hstack((numpy.arange(count+1,count+nods).reshape(-1,1),numpy.arange(count+2,count+nods+1).reshape(-1,1),(1+i)*numpy.ones((nods-1,1))))))
++								count+=nods
+ 
+-								break;
++								break
+ 
+-							else
+-								%Add intersection point to Vertices
+-								bamg_geometry.Vertices=[bamg_geometry.Vertices; x y 1];
+-								count=count+1;
++							else:
++								#Add intersection point to Vertices
++								bamg_geometry.Vertices=numpy.vstack((bamg_geometry.Vertices,numpy.array([[x,y,1]])))
++								count+=1
+ 
+-								%Decompose the crossing edge in 2 subedges
+-								pos=find(bamg_geometry.Edges(:,1)==i1 & bamg_geometry.Edges(:,2)==i2);
+-								if isempty(pos) error('bamg error message: a problem occured...'); end
+-								bamg_geometry.Edges=[bamg_geometry.Edges(1:pos-1,:);...
+-									bamg_geometry.Edges(pos,1) count                           bamg_geometry.Edges(pos,3);...
+-									count                      bamg_geometry.Edges(pos,2)   bamg_geometry.Edges(pos,3);...
+-									bamg_geometry.Edges(pos+1:end,:)];
++								#Decompose the crossing edge into 2 subedges
++								pos=numpy.nonzero(numpy.logical_and(bamg_geometry.Edges[:,0]==i1,bamg_geometry.Edges[:,1]==i2))[0]
++								if not pos:
++									raise RuntimeError("bamg error message: a problem occurred...")
++								bamg_geometry.Edges=numpy.vstack((bamg_geometry.Edges[0:pos-1,:],\
++									numpy.array([[bamg_geometry.Edges[pos,0],count                     ,bamg_geometry.Edges[pos,2]]]),\
++									numpy.array([[count                     ,bamg_geometry.Edges[pos,1],bamg_geometry.Edges[pos,2]]]),\
++									bamg_geometry.Edges[pos+1:,:]))
+ 
+-								%OK, now we can add our own rift
+-								nods=rift(i).nods-1;
+-								bamg_geometry.Vertices=[bamg_geometry.Vertices; [rift(i).x(2:end) rift(i).y(2:end) ones(nods,1)]];
+-								bamg_geometry.Edges=[bamg_geometry.Edges;...
+-									count  count+1  2 ;...
+-									[transpose(count+1:count+nods-1) transpose([count+2:count+nods])  (1+i)*ones(nods-1,1)]];
++								#OK, now we can add our own rift
++								nods=rifti['nods']-1
++								bamg_geometry.Vertices=numpy.vstack((bamg_geometry.Vertices,numpy.hstack((rifti['x'][1:].reshape(-1,1),rifti['y'][1:].reshape(-1,1),numpy.ones((nods,1))))))
++								bamg_geometry.Edges=numpy.vstack((bamg_geometry.Edges,\
++									numpy.array([[count,count+1,2]]),\
++									numpy.hstack((numpy.arange(count+1,count+nods).reshape(-1,1),numpy.arange(count+2,count+nods+1).reshape(-1,1),(1+i)*numpy.ones((nods-1,1))))))
+ 								count=count+nods;
+ 
+-								break;
+-							end
+-						end
+-					end
+-					"""
++								break
++
+ 				else:
+ 					nods=rifti['nods']-1
+ 					bamg_geometry.Vertices=numpy.vstack(bamg_geometry.Vertices, numpy.hstack(rifti['x'][:],rifti['y'][:],numpy.ones((nods+1,1))))
+@@ -383,8 +384,8 @@
+ 			if SegIntersect(numpy.array([[x1,y1],[x2,y2]]),numpy.array([[x3,y3],[x4,y4]])):
+ 
+ 				#Get coordinate of intersection point (http://mathworld.wolfram.com/Line-LineIntersection.html)
+-				x=det(numpy.array([det(numpy.array([[x1,y1],[x2,y2]])),x1-x2],[det(numpy.array([[x3,y3],[x4,y4]])),x3-x4])/det(numpy.array([[x1-x2,y1-y2],[x3-x4,y3-y4]])))
+-				y=det(numpy.array([det(numpy.array([[x1,y1],[x2,y2]])),y1-y2],[det(numpy.array([[x3,y3],[x4,y4]])),y3-y4])/det(numpy.array([[x1-x2,y1-y2],[x3-x4,y3-y4]])))
++				x=numpy.linalg.det(numpy.array([numpy.linalg.det(numpy.array([[x1,y1],[x2,y2]])),x1-x2],[numpy.linalg.det(numpy.array([[x3,y3],[x4,y4]])),x3-x4])/numpy.linalg.det(numpy.array([[x1-x2,y1-y2],[x3-x4,y3-y4]])))
++				y=numpy.linalg.det(numpy.array([numpy.linalg.det(numpy.array([[x1,y1],[x2,y2]])),y1-y2],[numpy.linalg.det(numpy.array([[x3,y3],[x4,y4]])),y3-y4])/numpy.linalg.det(numpy.array([[x1-x2,y1-y2],[x3-x4,y3-y4]])))
+ 
+ 				#Add vertex to the list of vertices
+ 				geom.Vertices=numpy.vstack((geom.Vertices,[x,y,min(color1,color2)]))
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 13494)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 13495)
+@@ -136,7 +136,7 @@
+ 
+ 						%Get position of the two nodes of the edge in domain
+ 						i1=j;
+-						i2=mod(j+1,domain(1).nods);
++						i2=j+1;
+ 
+ 						%rift is crossing edge [i1 i2] of the domain
+ 						%Get coordinate of intersection point (http://mathworld.wolfram.com/Line-LineIntersection.html)
+@@ -151,7 +151,7 @@
+ 						if (min(tipdis)/segdis) < getfieldvalue(options,'toltip',0),
+ 							disp('moving tip-domain intersection point');
+ 
+-							%Get position of the closest point
++							%Get position of the closer point
+ 							if tipdis(1)>tipdis(2),
+ 								pos=i2;
+ 							else
+@@ -164,7 +164,7 @@
+ 							bamg_geometry.Vertices=[bamg_geometry.Vertices; [rift(i).x(2:end) rift(i).y(2:end) ones(nods,1)]];
+ 							bamg_geometry.Edges=[bamg_geometry.Edges;...
+ 								pos count+1  (1+i);...
+-								[transpose(count+1:count+nods-1) transpose([count+2:count+nods])  (1+i)*ones(nods-1,1)]];
++								[transpose(count+1:count+nods-1) transpose(count+2:count+nods)  (1+i)*ones(nods-1,1)]];
+ 							count=count+nods;
+ 
+ 							break;
+@@ -174,12 +174,12 @@
+ 							bamg_geometry.Vertices=[bamg_geometry.Vertices; x y 1];
+ 							count=count+1;
+ 
+-							%Decompose the crossing edge in 2 subedges
++							%Decompose the crossing edge into 2 subedges
+ 							pos=find(bamg_geometry.Edges(:,1)==i1 & bamg_geometry.Edges(:,2)==i2);
+-							if isempty(pos) error('bamg error message: a problem occured...'); end
++							if isempty(pos) error('bamg error message: a problem occurred...'); end
+ 							bamg_geometry.Edges=[bamg_geometry.Edges(1:pos-1,:);...
+-								bamg_geometry.Edges(pos,1) count                           bamg_geometry.Edges(pos,3);...
+-								count                      bamg_geometry.Edges(pos,2)   bamg_geometry.Edges(pos,3);...
++								bamg_geometry.Edges(pos,1) count                      bamg_geometry.Edges(pos,3);...
++								count                      bamg_geometry.Edges(pos,2) bamg_geometry.Edges(pos,3);...
+ 								bamg_geometry.Edges(pos+1:end,:)];
+ 
+ 							%OK, now we can add our own rift
+@@ -187,7 +187,7 @@
+ 							bamg_geometry.Vertices=[bamg_geometry.Vertices; [rift(i).x(2:end) rift(i).y(2:end) ones(nods,1)]];
+ 							bamg_geometry.Edges=[bamg_geometry.Edges;...
+ 								count  count+1  2 ;...
+-								[transpose(count+1:count+nods-1) transpose([count+2:count+nods])  (1+i)*ones(nods-1,1)]];
++								[transpose(count+1:count+nods-1) transpose(count+2:count+nods)  (1+i)*ones(nods-1,1)]];
+ 							count=count+nods;
+ 
+ 							break;
+@@ -197,7 +197,7 @@
+ 			else
+ 				nods=rift(i).nods-1;
+ 				bamg_geometry.Vertices=[bamg_geometry.Vertices; [rift(i).x(:) rift(i).y(:) ones(nods+1,1)]];
+-				bamg_geometry.Edges=[bamg_geometry.Edges; [transpose(count+1:count+nods) transpose([count+2:count+nods+1])  (1+i)*ones(nods,1)]];
++				bamg_geometry.Edges=[bamg_geometry.Edges; [transpose(count+1:count+nods) transpose(count+2:count+nods+1)  (1+i)*ones(nods,1)]];
+ 				count=count+nods+1;
+ 			end
+ 		end
+@@ -223,7 +223,7 @@
+ 		%Add all points to bamg_geometry
+ 		nods=size(track,1);
+ 		bamg_geometry.Vertices=[bamg_geometry.Vertices; track];
+-		bamg_geometry.Edges=[bamg_geometry.Edges; [transpose(count+1:count+nods-1) transpose([count+2:count+nods])  3.*ones(nods-1,1)]];
++		bamg_geometry.Edges=[bamg_geometry.Edges; [transpose(count+1:count+nods-1) transpose(count+2:count+nods)  3.*ones(nods-1,1)]];
+ 
+ 		%update counter
+ 		count=count+nods;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13495-13496.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13495-13496.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13495-13496.diff	(revision 13980)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 13495)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 13496)
+@@ -158,8 +158,8 @@
+ 							y4=domain[0]['y'][i2]
+ #							x=det([det([x1 y1; x2 y2])  x1-x2;det([x3 y3; x4 y4])  x3-x4])/det([x1-x2 y1-y2;x3-x4 y3-y4]);
+ #							y=det([det([x1 y1; x2 y2])  y1-y2;det([x3 y3; x4 y4])  y3-y4])/det([x1-x2 y1-y2;x3-x4 y3-y4]);
+-							x=numpy.linalg.det(numpy.array([[numpy.linalg.det(numpy.array([[x1,y1],[x2,y2]])),x1-x2],[numpy.linalg.det(numpy.array([[x3,y3],[x4,y4]])),x3-x4]]))/numpy.linalg.det(numpy.array([[x1-x2,y1-y2],[x3-x4,y3-y4]]));
+-							y=numpy.linalg.det(numpy.array([[numpy.linalg.det(numpy.array([[x1,y1],[x2,y2]])),y1-y2],[numpy.linalg.det(numpy.array([[x3,y3],[x4,y4]])),y3-y4]]))/numpy.linalg.det(numpy.array([[x1-x2,y1-y2],[x3-x4,y3-y4]]));
++							x=numpy.linalg.det(numpy.array([[numpy.linalg.det(numpy.array([[x1,y1],[x2,y2]])),x1-x2],[numpy.linalg.det(numpy.array([[x3,y3],[x4,y4]])),x3-x4]]))/numpy.linalg.det(numpy.array([[x1-x2,y1-y2],[x3-x4,y3-y4]]))
++							y=numpy.linalg.det(numpy.array([[numpy.linalg.det(numpy.array([[x1,y1],[x2,y2]])),y1-y2],[numpy.linalg.det(numpy.array([[x3,y3],[x4,y4]])),y3-y4]]))/numpy.linalg.det(numpy.array([[x1-x2,y1-y2],[x3-x4,y3-y4]]))
+ 
+ 							segdis= sqrt((x4-x3)**2+(y4-y3)**2)
+ 							tipdis=numpy.array([sqrt((x-x3)**2+(y-y3)**2),sqrt((x-x4)**2+(y-y4)**2)])
+@@ -204,7 +204,7 @@
+ 								bamg_geometry.Edges=numpy.vstack((bamg_geometry.Edges,\
+ 									numpy.array([[count,count+1,2]]),\
+ 									numpy.hstack((numpy.arange(count+1,count+nods).reshape(-1,1),numpy.arange(count+2,count+nods+1).reshape(-1,1),(1+i)*numpy.ones((nods-1,1))))))
+-								count=count+nods;
++								count+=nods
+ 
+ 								break
+ 
+@@ -326,7 +326,7 @@
+ 	#Fill in rest of fields:
+ 	md.mesh.dimension=2
+ 	md.mesh.numberofelements=numpy.size(md.mesh.elements,axis=0)
+-	md.mesh.numberofvertices=numpy.size(md.mesh.x);
++	md.mesh.numberofvertices=numpy.size(md.mesh.x)
+ 	md.mesh.numberofedges=numpy.size(md.mesh.edges,axis=0)
+ 	md.mesh.z=numpy.zeros(md.mesh.numberofvertices)
+ 	md.mesh.vertexonbed=numpy.ones(md.mesh.numberofvertices)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13496-13497.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13496-13497.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13496-13497.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.2-greenplanet.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.2-greenplanet.sh	(revision 13496)
++++ ../trunk-jpl/externalpackages/petsc/install-3.2-greenplanet.sh	(revision 13497)
+@@ -21,7 +21,7 @@
+ 	--PETSC_ARCH="$ISSM_ARCH" \
+ 	--with-batch=1 \
+ 	--with-debugging=0 \
+-	--with-shared-libraries=0 \
++	--with-shared-libraries=1 \
+ 	--known-mpi-shared-libraries=1 \
+ 	--with-mpi-dir=/sopt/mpi/openmpi-1.5.4_psm/intel/ \
+ 	--with-blas-lapack-dir=/opt/intel/mkl/10.2.4.032/ \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13497-13498.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13497-13498.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13497-13498.diff	(revision 13980)
@@ -0,0 +1,64 @@
+Index: ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13497)
++++ ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13498)
+@@ -160,6 +160,22 @@
+ }
+ /*}}}*/
+ int EDF_fos_reverse_for_solverx(int m, double *dp_U, int n, double *dp_Z, double* dp_x, double* dp_y) { /*{{{*/
++  // copy to transpose the matrix
++  double* transposed=xNew<double>(m*m);
++  for (int i=0; i<m; ++i) for (int j=0; j<m; ++j) transposed[j*m+i]=dp_x[i*m+j];
++  gsl_matrix_view aTransposed = gsl_matrix_view_array (transposed,m,m);
++  // the adjoint of the solution is our right-hand side
++  gsl_vector_view x_bar=gsl_vector_view_array(dp_U,m);
++  // the last m elements of dp_Z representing the adjoint of the right-hand side we want to compute:
++  gsl_vector_view b_bar=gsl_vector_view_array(dp_Z+m*m,m);
++  gsl_permutation *p = gsl_permutation_alloc (m);
++  int permSign;
++  gsl_linalg_LU_decomp (&aTransposed.matrix, p, &permSign);
++  gsl_linalg_LU_solve (&aTransposed.matrix, p, &x_bar.vector, &b_bar.vector);
++  // now do the adjoint of the matrix
++  for (int i=0; i<m; ++i) for (int j=0; j<m; ++j) dp_Z[i*m+j]-=dp_Z[m*m+i]*dp_y[j];
++  gsl_permutation_free(p);
++  xDelete(transposed);
+   return 0;
+ }
+ /*}}}*/
+@@ -188,8 +204,7 @@
+ 	/*GSL Matrices and vectors: */
+ 	int              s;
+ 	gsl_matrix_view  a;
+-	gsl_vector_view  b;
+-	gsl_vector      *x = NULL;
++	gsl_vector_view  b,x;
+ 	gsl_permutation *p = NULL;
+ //	for (int i=0; i<n*n; ++i) std::cout << "SolverxSeq A["<< i << "]=" << A[i] << std::endl;
+ //	for (int i=0; i<n; ++i) std::cout << "SolverxSeq b["<< i << "]=" << B[i] << std::endl;
+@@ -200,24 +215,16 @@
+ 	/*Initialize gsl matrices and vectors: */
+ 	a = gsl_matrix_view_array (Acopy,n,n);
+ 	b = gsl_vector_view_array (B,n);
+-	x = gsl_vector_alloc (n);
++	x = gsl_vector_view_array (X,n);
+ 
+ 	/*Run LU and solve: */
+ 	p = gsl_permutation_alloc (n);
+ 	gsl_linalg_LU_decomp (&a.matrix, p, &s);
+-	gsl_linalg_LU_solve (&a.matrix, p, &b.vector, x);
++	gsl_linalg_LU_solve (&a.matrix, p, &b.vector, &x.vector);
+ 
+-	//printf ("x = \n");
+-	//gsl_vector_fprintf (stdout, x, "%g");
+-
+-	/*Copy result*/
+-	xMemCpy(X,gsl_vector_ptr(x,0),n);
+-//      for (int i=0; i<n; ++i) std::cout << "SolverxSeq x["<< i << "]=" << X[i] << std::endl;
+-
+ 	/*Clean up and assign output pointer*/
+ 	xDelete(Acopy);
+ 	gsl_permutation_free(p);
+-	gsl_vector_free(x);
+ #endif
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13498-13499.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13498-13499.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13498-13499.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13498)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13499)
+@@ -101,7 +101,7 @@
+ 				xDelete(jacTimesTangentDir);
+ 				xDelete(tangentDir);
+ 			}
+-			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward")==0)){
++			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"jacobian")==0)){
+ 				
+ 				int* indepIndices=NULL;
+ 				int tangentDirNum;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13499-13500.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13499-13500.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13499-13500.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 13499)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 13500)
+@@ -28,7 +28,7 @@
+ 			if ~obj.isautodiff, return; end
+ 
+ 			%Driver value:
+-			md = checkfield(md,'autodiff.driver','values',{'fos_forward','fov_forward'});
++			md = checkfield(md,'autodiff.driver','values',{'fos_forward','fov_forward','fos_reverse','fov_reverse'});
+ 
+ 			%go through our dependents and independents and check consistency: 
+ 			for i=1:numel(obj.dependents),
Index: /issm/oecreview/Archive/13393-13976/ISSM-13500-13501.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13500-13501.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13500-13501.diff	(revision 13980)
@@ -0,0 +1,63 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13500)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13501)
+@@ -211,6 +211,7 @@
+ 
+ 	int         numberofvertices;
+ 	int         dummy;
++	char*       driver=NULL;
+ 
+ 
+ 	/*Initialize array detecting whether data[i] is an independent AD mode variable: */
+@@ -224,10 +225,36 @@
+ 		
+ 		#ifdef _HAVE_ADOLC_
+ 
+-		/*Start the trace: */
+-		trace_on(1);
+-
+-		/*build dataset made of independent objects: */
++		/*Start the trace:  {{{
++		 * to do so, figure out what kind of driver we are running. Then, according to ADOLC documentation, 
++		 * we'll need to activate keep. 
++		 *
++		 * From ADOLC userdoc: 
++		 * The optional integer argument keep of trace on determines whether the numerical values of all active variables are 
++		 * recorded in a buffered temporary array or file called the taylor stack. This option takes effect if keep = 1 and 
++		 * prepares the scene for an immediately following gradient evaluation by a call to a routine implementing the reverse 
++		 * mode as described in the Section 4 and Section 5. 
++		 *
++		 */
++		this->FetchData(&driver,AutodiffDriverEnum);
++		if (strlen(driver)<=3){
++			/*there is no "_reverse" string within the driver string: */
++			if(VerboseAutodiff())_pprintLine_("   trace activated with keep off");
++			trace_on(1);
++		}
++		else{
++			if (strcmp((const char*)(driver+3),"_reverse")==0){
++				if(VerboseAutodiff())_pprintLine_("   trace activated with keep on");
++				trace_on(1,1);
++			}
++			else{
++				if(VerboseAutodiff())_pprintLine_("   trace activated with keep off");
++				trace_on(1);
++			}
++		}
++		xDelete<char>(driver);
++		/*}}}*/
++		/*build dataset made of independent objects: {{{*/
+ 		this->independent_objects=new DataSet();
+ 		this->FetchData(&num_independent_objects,AutodiffNumIndependentObjectsEnum);
+ 		if(num_independent_objects){
+@@ -249,7 +276,8 @@
+ 			}
+ 			xDelete<int>(names);
+ 			xDelete<int>(types);
+-		}
++		} /*}}}*/
++
+ 		#else
+ 		/*if we asked for AD computations, we have a problem!: */
+ 		_error_("Cannot carry out AD mode computations without support of ADOLC compiled in!");
Index: /issm/oecreview/Archive/13393-13976/ISSM-13501-13502.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13501-13502.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13501-13502.diff	(revision 13980)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13501)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13502)
+@@ -118,6 +118,13 @@
+ 	#ifdef _HAVE_ADOLC_
+ 	GenericParam<Adolc_edf> *theAdolcEDF_p=new GenericParam<Adolc_edf>(AdolcParamEnum);
+ 	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(EDF_for_solverx);
++	// to save some space:
++	// we know we won't use adolc inside of  the solver:
++	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->nestedAdolc=false;
++	// the solution vector is just allocated and doesn't have a meaningfull prior value
++	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->dp_y_priorRequired=false;
++	 // the solver wrapper makes sure the matrix and the right hand side don't change
++	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->dp_x_changes=false;
+ 	femmodel->parameters->AddObject(theAdolcEDF_p);
+ 	#else
+ 	if(autodiff) _error_("ISSM was not compiled with ADOLC support, cannot carry out autodiff analysis!");
Index: /issm/oecreview/Archive/13393-13976/ISSM-13502-13503.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13502-13503.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13502-13503.diff	(revision 13980)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/src/m/geometry/SegIntersect.py
+===================================================================
+--- ../trunk-jpl/src/m/geometry/SegIntersect.py	(revision 13502)
++++ ../trunk-jpl/src/m/geometry/SegIntersect.py	(revision 13503)
+@@ -1,5 +1,4 @@
+ import numpy
+-from MatlabFuncs import *
+ 
+ def SegIntersect(seg1,seg2):
+ 	"""
+@@ -47,7 +46,7 @@
+ 		return bval
+ 
+ 	#if colinear
+-	if test1*test2==0 and test3*test4==0 and det(numpy.hstack((n1.reshape((-1,1)),n2.reshape(-1,1))))==0:
++	if test1*test2==0 and test3*test4==0 and numpy.linalg.det(numpy.hstack((n1.reshape((-1,1)),n2.reshape(-1,1))))==0:
+ 
+ 		#projection on the axis O1O2
+ 		O2O1=numpy.array([xA/2.+xB/2.,yB/2.+yA/2.])-numpy.array([xD/2.+xC/2.,yD/2.+yC/2.])
+Index: ../trunk-jpl/src/m/geometry/FlagElements.py
+===================================================================
+--- ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 13502)
++++ ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 13503)
+@@ -46,7 +46,7 @@
+ 				flag=numpy.prod(flag_nodes[md.mesh.elements],axis=1)
+ 			else:
+ 				#ok, flag elements
+-				[flag,dum]=ContourToMesh(md.mesh.elements[:,0:3],md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),region,'element',1)
++				[flag,dum]=ContourToMesh(md.mesh.elements[:,0:3].copy(),md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),region,'element',1)
+ 
+ 		if invert:
+ 			flag=numpy.logical_not(flag)
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 13502)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 13503)
+@@ -122,13 +122,13 @@
+ 		#Create the border nodes between Pattyn and MacAyeal and extrude them
+ 		numnodes2d=md.mesh.numberofvertices2d
+ 		numlayers=md.mesh.numberoflayers
+-		bordernodes2d=numpy.nonzero(numpy.logical_and(nodeonpattyn[1:numnodes2d],nodeonmacayeal[1:numnodes2d]))    #Nodes connected to two different types of elements
++		bordernodes2d=numpy.nonzero(numpy.logical_and(nodeonpattyn[0:numnodes2d],nodeonmacayeal[0:numnodes2d]))[0]+1    #Nodes connected to two different types of elements
+ 
+ 		#initialize and fill in penalties structure
+ 		if numpy.all(numpy.logical_not(numpy.isnan(bordernodes2d))):
+ 			penalties=numpy.zeros((0,2))
+ 			for	i in xrange(1,numlayers):
+-				penalties=numpy.vstack((penalties,numpy.hstack((bordernodes2d,bordernodes2d+md.mesh.numberofvertices2d*(i)))))
++				penalties=numpy.vstack((penalties,numpy.hstack((bordernodes2d.reshape(-1,1),bordernodes2d.reshape(-1,1)+md.mesh.numberofvertices2d*(i)))))
+ 			md.diagnostic.vertex_pairing=penalties
+ 
+ 	elif strcmpi(coupling_method,'tiling'):
Index: /issm/oecreview/Archive/13393-13976/ISSM-13503-13504.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13503-13504.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13503-13504.diff	(revision 13980)
@@ -0,0 +1,94 @@
+Index: ../trunk-jpl/test/NightlyRun/test205.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test205.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test205.py	(revision 13504)
+@@ -0,0 +1,42 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test205.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,2)
++md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal','coupling','penalties')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-05,1e-05,1e-05,1e-05,1e-05]
++field_values=[\
++md.results['DiagnosticSolution'][1]['Vx'],\
++md.results['DiagnosticSolution'][1]['Vy'],\
++md.results['DiagnosticSolution'][1]['Vz'],\
++md.results['DiagnosticSolution'][1]['Vel'],\
++md.results['DiagnosticSolution'][1]['Pressure'],\
++]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test205.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test205.py	(revision 13503)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test205.py	(revision 13504)
+@@ -1,42 +0,0 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test205.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+-from MatlabFuncs import *
+-from model import *
+-from EnumDefinitions import *
+-from numpy import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from solve import *
+-
+-md=triangle(model(),'../Exp/Square.exp',150000)
+-md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,2)
+-md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal','coupling','penalties')
+-md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
+-
+-
+-# Fields and tolerances to track changes
+-
+-field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-05,1e-05,1e-05,1e-05,1e-05]
+-field_values=[\
+-md.results['DiagnosticSolution'][1]['Vx'],\
+-md.results['DiagnosticSolution'][1]['Vy'],\
+-md.results['DiagnosticSolution'][1]['Vz'],\
+-md.results['DiagnosticSolution'][1]['Vel'],\
+-md.results['DiagnosticSolution'][1]['Pressure'],\
+-]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13504-13505.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13504-13505.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13504-13505.diff	(revision 13980)
@@ -0,0 +1,92 @@
+Index: ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13504)
++++ ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13505)
+@@ -28,6 +28,7 @@
+ 	AutodiffDriverEnum,
+ 	AutodiffFosForwardIndexEnum,
+ 	AutodiffFovForwardIndicesEnum,
++	AutodiffFosReverseIndexEnum,
+ 	AutodiffMassFluxSegmentsPresentEnum,
+ 	BalancethicknessSpcthicknessEnum,
+ 	BalancethicknessStabilizationEnum,
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13504)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13505)
+@@ -243,7 +243,7 @@
+ 			trace_on(1);
+ 		}
+ 		else{
+-			if (strcmp((const char*)(driver+3),"_reverse")==0){
++			if (strncmp((const char*)(driver+3),"_reverse",8)==0){
+ 				if(VerboseAutodiff())_pprintLine_("   trace activated with keep on");
+ 				trace_on(1,1);
+ 			}
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 13504)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 13505)
+@@ -28,7 +28,7 @@
+ 			if ~obj.isautodiff, return; end
+ 
+ 			%Driver value:
+-			md = checkfield(md,'autodiff.driver','values',{'fos_forward','fov_forward','fos_reverse','fov_reverse'});
++			md = checkfield(md,'autodiff.driver','values',{'fos_forward','fov_forward','fov_forward_all','fos_reverse','fov_reverse','fov_reverse_all'});
+ 
+ 			%go through our dependents and independents and check consistency: 
+ 			for i=1:numel(obj.dependents),
+Index: ../trunk-jpl/src/m/enum/AutodiffFosReverseIndexEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffFosReverseIndexEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffFosReverseIndexEnum.m	(revision 13505)
+@@ -0,0 +1,11 @@
++function macro=AutodiffFosReverseIndexEnum()
++%AUTODIFFFOSREVERSEINDEXENUM - Enum of AutodiffFosReverseIndex
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffFosReverseIndexEnum()
++
++macro=StringToEnum('AutodiffFosReverseIndex');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13504)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13505)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=491;
++macro=492;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13504)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13505)
+@@ -178,6 +178,16 @@
+ 
+ 	return StringToEnum('AutodiffFovForwardIndices')[0]
+ 
++def AutodiffFosReverseIndexEnum():
++	"""
++	AUTODIFFFOSREVERSEINDEXENUM - Enum of AutodiffFosReverseIndex
++
++	   Usage:
++	      macro=AutodiffFosReverseIndexEnum()
++	"""
++
++	return StringToEnum('AutodiffFosReverseIndex')[0]
++
+ def AutodiffMassFluxSegmentsPresentEnum():
+ 	"""
+ 	AUTODIFFMASSFLUXSEGMENTSPRESENTENUM - Enum of AutodiffMassFluxSegmentsPresent
+@@ -4926,5 +4936,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 491
++	return 492
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13505-13506.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13505-13506.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13505-13506.diff	(revision 13980)
@@ -0,0 +1,80 @@
+Index: ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13505)
++++ ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13506)
+@@ -34,6 +34,7 @@
+ 	      else if (strcmp(name,"AutodiffDriver")==0) return AutodiffDriverEnum;
+ 	      else if (strcmp(name,"AutodiffFosForwardIndex")==0) return AutodiffFosForwardIndexEnum;
+ 	      else if (strcmp(name,"AutodiffFovForwardIndices")==0) return AutodiffFovForwardIndicesEnum;
++	      else if (strcmp(name,"AutodiffFosReverseIndex")==0) return AutodiffFosReverseIndexEnum;
+ 	      else if (strcmp(name,"AutodiffMassFluxSegmentsPresent")==0) return AutodiffMassFluxSegmentsPresentEnum;
+ 	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
+ 	      else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
+@@ -136,11 +137,11 @@
+ 	      else if (strcmp(name,"MeshDimension")==0) return MeshDimensionEnum;
+ 	      else if (strcmp(name,"MeshEdges")==0) return MeshEdgesEnum;
+ 	      else if (strcmp(name,"MeshElementconnectivity")==0) return MeshElementconnectivityEnum;
+-	      else if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
++	      if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
++	      else if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
+ 	      else if (strcmp(name,"MeshElements2d")==0) return MeshElements2dEnum;
+ 	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
+ 	      else if (strcmp(name,"MeshLowerelements")==0) return MeshLowerelementsEnum;
+@@ -259,11 +260,11 @@
+ 	      else if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
+-	      else if (strcmp(name,"SurfaceSlopeYAnalysis")==0) return SurfaceSlopeYAnalysisEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
++	      if (strcmp(name,"SurfaceSlopeYAnalysis")==0) return SurfaceSlopeYAnalysisEnum;
++	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+ 	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+ 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
+@@ -382,11 +383,11 @@
+ 	      else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
+-	      else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
++	      if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
++	      else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
+ 	      else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
+ 	      else if (strcmp(name,"TemperatureOld")==0) return TemperatureOldEnum;
+ 	      else if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum;
+@@ -505,11 +506,11 @@
+ 	      else if (strcmp(name,"Verbose")==0) return VerboseEnum;
+ 	      else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
+ 	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+-	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"XY")==0) return XYEnum;
++	      if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
++	      else if (strcmp(name,"XY")==0) return XYEnum;
+ 	      else if (strcmp(name,"XYZP")==0) return XYZPEnum;
+ 	      else if (strcmp(name,"Option")==0) return OptionEnum;
+ 	      else if (strcmp(name,"GenericOption")==0) return GenericOptionEnum;
+Index: ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13505)
++++ ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13506)
+@@ -33,6 +33,7 @@
+ 		case AutodiffDriverEnum : return "AutodiffDriver";
+ 		case AutodiffFosForwardIndexEnum : return "AutodiffFosForwardIndex";
+ 		case AutodiffFovForwardIndicesEnum : return "AutodiffFovForwardIndices";
++		case AutodiffFosReverseIndexEnum : return "AutodiffFosReverseIndex";
+ 		case AutodiffMassFluxSegmentsPresentEnum : return "AutodiffMassFluxSegmentsPresent";
+ 		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
+ 		case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
Index: /issm/oecreview/Archive/13393-13976/ISSM-13506-13507.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13506-13507.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13506-13507.diff	(revision 13980)
@@ -0,0 +1,178 @@
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13506)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13507)
+@@ -55,6 +55,10 @@
+ 			/*Branch according to AD driver: */
+ 			parameters->FindParam(&driver,AutodiffDriverEnum);
+ 
++			/* these are always needed regardless of the interpreter */
++                        anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
++                        anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
++
+ 			if (strcmp(driver,"fos_forward")==0){
+ 				
+ 				int     anIndepIndex;
+@@ -65,43 +69,33 @@
+ 				/*retrieve direction index: */
+ 				parameters->FindParam(&anIndepIndex,AutodiffFosForwardIndexEnum);
+ 				
++				if (anIndepIndex<0 || anIndepIndex>=num_independents) _error_("index value for AutodiffFosForwardIndexEnum should be in [0,num_independents-1]");
++
+ 				tangentDir=xNewZeroInit<double>(num_independents);
+ 				tangentDir[anIndepIndex]=1.0;
+ 			
+ 				jacTimesTangentDir=xNew<double>(num_dependents);
+ 				theOutput=xNew<double>(num_dependents);
+ 				
+-				/*set the forward method function pointers: */
+-				anEDF_for_solverx_p->zos_forward=EDF_for_solverx;
++				/*set the forward method function pointer: */
+ 				anEDF_for_solverx_p->fos_forward=EDF_fos_forward_for_solverx;
+-				anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
+ 
+-				/*allocate the space for the parameters to invoke the forward methods:*/
+-				anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
++                                /*allocate the space for the parameters to invoke the EDF fos_forward:*/
+ 				anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
+-				anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, 1);
+-				anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
+ 				anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
+-				anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, 1);
+ 
+-				/*allocate the space for the parameters to invoke the reverse methods:*/
+-				anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
+-				anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,anEDF_for_solverx_p->max_m);
+-				anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
+-				anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,anEDF_for_solverx_p->max_n);
+-
+ 				/*call driver: */
+ 				fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir );
+ 
+ 				/*add to results*/
+ 				results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,jacTimesTangentDir,num_dependents,1,1,0.0));
+ 				
+-				/*free ressources :*/
++				/*free resources :*/
+ 				xDelete(theOutput);
+ 				xDelete(jacTimesTangentDir);
+ 				xDelete(tangentDir);
+ 			}
+-			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"jacobian")==0)){
++			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward_all")==0)){
+ 				
+ 				int* indepIndices=NULL;
+ 				int tangentDirNum;
+@@ -113,7 +107,7 @@
+ 
+ 					
+ 				/*retrieve directions:*/
+-				if (strcmp(driver,"jacobian")==0){
++				if (strcmp(driver,"fov_forward_all")==0){
+ 					tangentDirNum=num_independents;
+ 					indepIndices=xNewZeroInit<int>(tangentDirNum);
+ 					for(i=0;i<num_independents;i++)indepIndices[i]=1;
+@@ -129,24 +123,13 @@
+ 				jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
+ 				
+ 				/*set the forward method function pointers: */
+-				anEDF_for_solverx_p->zos_forward=EDF_for_solverx;
+ 				anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
+ 				// anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
+ 
+-				/*allocate the space for the parameters to invoke the forward methods:*/
+-				anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
+-				anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
++				/*allocate the space for the parameters to invoke EDF fov_forward:*/
+ 				anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, tangentDirNum);
+-				anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
+-				anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
+ 				anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, tangentDirNum);
+ 
+-				/*allocate the space for the parameters to invoke the reverse methods:*/
+-				anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
+-				anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,anEDF_for_solverx_p->max_m);
+-				anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
+-				anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,anEDF_for_solverx_p->max_n);
+-
+ 				/*seed matrix: */
+ 				seed=xNewZeroInit<double>(num_independents,tangentDirNum);
+ 
+@@ -169,14 +152,8 @@
+ 				theOutput=xNew<double>(num_dependents);
+ 
+ 				/*call driver: */
+-				if (strcmp(driver,"fov_forward")==0){
+-					fov_forward(1,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed );
+-				}
+-				else{
+-					jacobian(1,num_dependents,num_independents,xp,jacTimesSeed);
+-				}
+-
+-				/*Free ressources: */
++				fov_forward(1,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed );
++				/*Free resources: */
+ 				xDelete(theOutput);
+ 				xDelete(indepIndices);
+ 				xDelete(seed);
+@@ -184,10 +161,49 @@
+ 				/*add to results: */
+ 				results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,*jacTimesSeed,num_dependents*tangentDirNum,1,1,0.0));
+ 
+-				/*Free ressources: */
++				/*Free resources: */
+ 				xDelete(jacTimesSeed);
+-				xDelete<int>(indepIndices);
++				xDelete(indepIndices);
+ 			}
++			else if (strcmp(driver,"fos_reverse")==0) {
++
++				int     aDepIndex=0;
++				double *aWeightVector=NULL;
++				double *weightVectorTimesJac=NULL;
++
++				/*retrieve direction index: */
++				parameters->FindParam(&aDepIndex,AutodiffFosReverseIndexEnum);
++
++				if (aDepIndex<0 || aDepIndex>=num_dependents) _error_("index value for AutodiffFosReverseIndexEnum should be in [0,num_dependents-1]");
++
++				aWeightVector=xNewZeroInit<double>(num_dependents);
++				aWeightVector[aDepIndex]=1.0;
++
++				weightVectorTimesJac=xNew<double>(num_independents);
++
++				/*set the forward method function pointer: */
++				anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
++
++				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
++				anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
++
++				/*call driver: */
++				fos_reverse(1,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
++
++				/*add to results*/
++				results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,weightVectorTimesJac,num_independents,1,1,0.0));
++
++				/*free resources :*/
++				xDelete(weightVectorTimesJac);
++				xDelete(aWeightVector);
++			}
++			else if (strcmp(driver,"fov_reverse")==0) {
++				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
++				anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,anEDF_for_solverx_p->max_n);
++				_error_("driver: " << driver << " not yet supported!");
++			}
+ 			else _error_("driver: " << driver << " not yet supported!");
+ 
+ 			/* delete the allocated space for the parameters:*/
+@@ -202,7 +218,7 @@
+ 			xDelete(anEDF_for_solverx_p->dp_Z);
+ 			xDelete(anEDF_for_solverx_p->dpp_Z);
+ 
+-			/*Free ressources: */
++			/*Free resources: */
+ 			xDelete(xp);
+ 			xDelete(axp); 
+ 			
Index: /issm/oecreview/Archive/13393-13976/ISSM-13507-13508.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13507-13508.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13507-13508.diff	(revision 13980)
@@ -0,0 +1,85 @@
+Index: ../trunk-jpl/test/NightlyRun/ad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad.m	(revision 13507)
++++ ../trunk-jpl/test/NightlyRun/ad.m	(revision 13508)
+@@ -7,19 +7,20 @@
+ md.autodiff.isautodiff=true;
+ md.verbose.autodiff=true;
+ md.autodiff.independents={...
+-	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',(1:md.mesh.numberofvertices)')
++	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices);
++	%independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',(1:md.mesh.numberofvertices)')
+ 	%independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',1)
+ 	};
+ 
+ md.autodiff.dependents={...
+-	dependent('name','IceVolume','type','scalar')...
+-	dependent('name','MaxVel','type','scalar')...
+-	dependent('name','MassFlux','type','scalar','exp','../Exp/MassFlux1.exp','mesh',md.mesh,'index',1)...
+-	dependent('name','MassFlux','type','scalar','exp','../Exp/MassFlux2.exp','mesh',md.mesh,'index',2)...
++	dependent('name','MaxVel','type','scalar','fos_reverse_index',1)...
++	%dependent('name','IceVolume','type','scalar')...
++	%dependent('name','MassFlux','type','scalar','exp','../Exp/MassFlux1.exp','mesh',md.mesh,'index',1)...
++	%dependent('name','MassFlux','type','scalar','exp','../Exp/MassFlux2.exp','mesh',md.mesh,'index',2)...
+ 	};
+ 
+ %md.autodiff.driver='fos_forward';
+-md.autodiff.driver='fov_forward';
++md.autodiff.driver='fos_reverse';
+ 
+ md=solve(md,TransientSolutionEnum);
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3019.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3019.m	(revision 13508)
+@@ -0,0 +1,35 @@
++md=triangle(model,'../Exp/Square.exp',100000);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=setflowequation(md,'macayeal','all');
++md.cluster=generic('name',oshostname(),'np',3);
++
++md.autodiff.isautodiff=true;
++md.verbose.autodiff=true;
++
++%first run scalar reverse mode: 
++md.autodiff.independents={independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices)};
++md.autodiff.dependents={dependent('name','MaxVel','type','scalar','fos_reverse_index',1)};
++md.autodiff.driver='fos_reverse';
++
++md=solve(md,TransientSolutionEnum);
++
++%recover jacobian: 
++jac_reverse=md.results.TransientSolution(1).AutodiffJacobian;
++
++
++%now run vectorial forward mode
++md.autodiff.independents={independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',(1:md.mesh.numberofvertices)')};
++md.autodiff.dependents={dependent('name','MaxVel','type','scalar')};
++md.autodiff.driver='fov_forward';
++
++md=solve(md,TransientSolutionEnum);
++
++%recover jacobian: 
++jac_forward=md.results.TransientSolution(1).AutodiffJacobian;
++
++
++%Fields and tolerances to track changes
++field_names     ={'Jac Forward','Jac Reverse','Jac Forward - Reverse'};
++field_tolerances={1e-13,1e-13,1e-13};
++field_values={jac_forward,jac_reverse,jac_forward-jac_reverse};
+Index: ../trunk-jpl/test/Archives/Archive3019.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3019.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3019.nc	(revision 13507)
++++ ../trunk-jpl/test/Archives/Archive3019.nc	(revision 13508)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3019.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13508-13509.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13508-13509.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13508-13509.diff	(revision 13980)
@@ -0,0 +1,97 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13508)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13509)
+@@ -45,6 +45,9 @@
+ 		if(strcmp(autodiff_driver,"fos_forward")==0){
+ 			parameters->AddObject(iomodel->CopyConstantObject(AutodiffFosForwardIndexEnum));
+ 		}
++		else if(strcmp(autodiff_driver,"fos_reverse")==0){
++			parameters->AddObject(iomodel->CopyConstantObject(AutodiffFosReverseIndexEnum));
++		}
+ 		else if(strcmp(autodiff_driver,"fov_forward")==0){
+ 			/*Retrieve list of indices: */
+ 			iomodel->FetchData(&indices,&num_indices,&dummy,AutodiffFovForwardIndicesEnum);
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 13508)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 13509)
+@@ -120,6 +120,27 @@
+ 				WriteData(fid,'data',index,'enum',AutodiffFosForwardIndexEnum(),'format','Integer'); 
+ 			end
+ 			%}}}
++			%if driver is fos_reverse, build index:  {{{
++			if strcmpi(obj.driver,'fos_reverse'),
++				index=0;
++				
++				for i=1:num_dependent_objects,
++					dep=obj.dependents{i};
++					if ~isnan(dep.fos_reverse_index),
++						index=index+dep.fos_reverse_index;
++						break;
++					else
++						if strcmpi(dep.type,'scalar'),
++							index=index+1;
++						else
++							index=index+dep.nods;
++						end
++					end
++				end
++				index=index-1; %get c-index numbering going
++				WriteData(fid,'data',index,'enum',AutodiffFosReverseIndexEnum(),'format','Integer'); 
++			end
++			%}}}
+ 			%if driver is fov_forward, build indices:  {{{
+ 			if strcmpi(obj.driver,'fov_forward'),
+ 				indices=0;
+Index: ../trunk-jpl/src/m/classes/dependent.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/dependent.m	(revision 13508)
++++ ../trunk-jpl/src/m/classes/dependent.m	(revision 13509)
+@@ -7,9 +7,11 @@
+ 	properties (SetAccess=public) 
+ 		name                 = '';
+ 		type                 = '';
++		fos_reverse_index    = NaN;
+ 		exp                  = '';
+ 		segments             = [];
+ 		index                = -1;
++		nods                 = 0;
+ 	end
+ 	methods
+ 		 function obj= dependent(varargin) % {{{
+@@ -22,6 +24,7 @@
+ 			 obj.exp=getfieldvalue(options,'exp','');
+ 			 obj.segments=getfieldvalue(options,'segments',[]);
+ 			 obj.index=getfieldvalue(options,'index',-1);
++			 obj.nods=getfieldvalue(options,'nods',0);
+ 
+ 			 %if name is mass flux: 
+ 			 if strcmpi(obj.name,'MassFlux'),
+@@ -48,13 +51,26 @@
+ 					error('dependent checkconsistency error: index for segments should be >=1');
+ 				end
+ 			end
++			if ~isnan(obj.fos_reverse_index),
++				if ~strcmpi(driver,'fos_reverse'),
++					error('cannot declare a dependent with a fos_reverse_index when the driver is not fos_reverse!');
++				end
++				if obj.nods==0,
++					error('ependent checkconsistency error: nods should be set to the size of the independent variable');
++				end
+ 
++			end
++
+ 		end % }}}
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   dependent variable :'));
+ 
+ 			fielddisplay(obj,'name','variable name (must match corresponding Enum)');
+ 			fielddisplay(obj,'type','type of variable (''vertex'' or ''scalar'')');
++			
++			if ~isnan(obj.fos_reverse_index),
++				fielddisplay(obj,'fos_reverse_index','index for fos_reverse driver of ADOLC');
++			end
+ 			if ~isempty(obj.exp),
+ 				fielddisplay(obj,'exp','file needed to compute dependent variable');
+ 				fielddisplay(obj,'segments','mass flux segments');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13509-13510.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13509-13510.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13509-13510.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/execution
+===================================================================
+--- ../trunk-jpl/execution	(revision 13509)
++++ ../trunk-jpl/execution	(revision 13510)
+
+Property changes on: ../trunk-jpl/execution
+___________________________________________________________________
+Modified: svn:ignore
+## -1,3 +1,4 ##
++Pig
+ test*
+ pig*
+ ad*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13510-13511.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13510-13511.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13510-13511.diff	(revision 13980)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/execution
+===================================================================
+--- ../trunk-jpl/execution	(revision 13510)
++++ ../trunk-jpl/execution	(revision 13511)
+
+Property changes on: ../trunk-jpl/execution
+___________________________________________________________________
+Modified: svn:ignore
+## -1,4 +1,4 ##
+-Pig
++Pig-*
+ test*
+ pig*
+ ad*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13511-13512.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13511-13512.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13511-13512.diff	(revision 13980)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13511)
++++ ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13512)
+@@ -179,6 +179,28 @@
+   return 0;
+ }
+ /*}}}*/
++int EDF_fov_reverse_for_solverx(int m, int p, double **dpp_U, int n, double **dpp_Z, double* dp_x, double* dp_y) { /*{{{*/
++	// copy to transpose the matrix
++	double* transposed=xNew<double>(m*m);
++	for (int i=0; i<m; ++i) for (int j=0; j<m; ++j) transposed[j*m+i]=dp_x[i*m+j];
++	gsl_matrix_view aTransposed = gsl_matrix_view_array (transposed,m,m);
++	gsl_permutation *perm_p = gsl_permutation_alloc (m);
++	int permSign;
++	gsl_linalg_LU_decomp (&aTransposed.matrix, perm_p, &permSign);
++	for (int weightsRowIndex=0;weightsRowIndex<p;++weightsRowIndex) {
++		// the adjoint of the solution is our right-hand side
++		gsl_vector_view x_bar=gsl_vector_view_array(dpp_U[weightsRowIndex],m);
++		// the last m elements of dp_Z representing the adjoint of the right-hand side we want to compute:
++		gsl_vector_view b_bar=gsl_vector_view_array(dpp_Z[weightsRowIndex]+m*m,m);
++		gsl_linalg_LU_solve (&aTransposed.matrix, perm_p, &x_bar.vector, &b_bar.vector);
++		// now do the adjoint of the matrix
++		for (int i=0; i<m; ++i) for (int j=0; j<m; ++j) dpp_Z[weightsRowIndex][i*m+j]-=dpp_Z[weightsRowIndex][m*m+i]*dp_y[j];
++	}
++	gsl_permutation_free(perm_p);
++	xDelete(transposed);
++	return 0;
++}
++/*}}}*/
+ void SolverxSeq(IssmDouble *X,IssmDouble *A,IssmDouble *B,int n, Parameters* parameters){/*{{{*/
+ 	// pack inputs to conform to the EDF-prescribed interface
+         // ensure a contiguous block of locations:
Index: /issm/oecreview/Archive/13393-13976/ISSM-13512-13513.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13512-13513.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13512-13513.diff	(revision 13980)
@@ -0,0 +1,76 @@
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13512)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13513)
+@@ -198,11 +198,67 @@
+ 				xDelete(weightVectorTimesJac);
+ 				xDelete(aWeightVector);
+ 			}
+-			else if (strcmp(driver,"fov_reverse")==0) {
++			else if ((strcmp(driver,"fov_reverse")==0) || (strcmp(driver,"fov_reverse_all")==0)){
++
++				int* depIndices=NULL;
++				int weightNum;
++				int dummy;
++				double **weightsTimesJac=NULL;
++				double **weights=NULL;
++				std::set<unsigned int> anIndexSet;
++
++
++				/*retrieve directions:*/
++				if (strcmp(driver,"fov_reverse_all")==0){
++					weightNum=num_dependents;
++					depIndices=xNewZeroInit<int>(weightNum);
++					for(i=0;i<num_dependents;i++)depIndices[i]=1;
++				}
++				else{
++					parameters->FindParam(&depIndices,&weightNum,&dummy,AutodiffFovForwardIndicesEnum);
++				}
++
++				/*Some checks: */
++				if (weightNum<1 || weightNum>num_dependents) _error_("tangentDirNum should be in [1,num_dependents]");
++
++				/* full Jacobian or Jacobian projection:*/
++				weightsTimesJac=xNew<double>(weightNum,num_independents);
++
++				/*set the forward method function pointers: */
++				anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
++
+ 				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
+-				anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,anEDF_for_solverx_p->max_m);
+-				anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,anEDF_for_solverx_p->max_n);
+-				_error_("driver: " << driver << " not yet supported!");
++				anEDF_for_solverx_p->dpp_U=xNew<double>(weightNum,anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dpp_Z=xNew<double>(weightNum,anEDF_for_solverx_p->max_n);
++
++				/*seed matrix: */
++				weights=xNewZeroInit<double>(weightNum,num_dependents);
++
++				/*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
++				for (int i=0; i<weightNum; ++i) {
++					/* make sure the index is in range*/
++					if (depIndices[i]>num_dependents) {
++						_error_("depIndices values must be in [0,num_dependents-1]");
++					}
++					if (anIndexSet.find(depIndices[i])!=anIndexSet.end()) {
++						_error_("duplicate depIndices values are not allowed until we implement Jacobian decompression");
++					}
++					anIndexSet.insert(depIndices[i]);
++					/* now populate the seed matrix from the set of independent indices;
++					 * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
++					weights[depIndices[i]][i]=1.0;
++				}
++
++				/*call driver: */
++				fov_reverse(1,num_dependents,num_independents, weightNum, weights, weightsTimesJac );
++
++				/*add to results: */
++				results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,*weightsTimesJac,weightNum*num_independents,1,1,0.0));
++
++				/*Free resources: */
++				xDelete(weights);
++				xDelete(weightsTimesJac);
++				xDelete(depIndices);
+ 			}
+ 			else _error_("driver: " << driver << " not yet supported!");
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13513-13514.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13513-13514.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13513-13514.diff	(revision 13980)
@@ -0,0 +1,216 @@
+Index: ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13513)
++++ ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13514)
+@@ -70,113 +70,113 @@
+ 
+ #ifdef _HAVE_ADOLC_
+ int EDF_for_solverx(int n, IssmPDouble *x, int m, IssmPDouble *y){ /*{{{*/
+-    SolverxSeq(y,x, x+m*m, m); // x is where the matrix starts, x+m*m is where the right-hand side starts
+-    return 0;
++	SolverxSeq(y,x, x+m*m, m); // x is where the matrix starts, x+m*m is where the right-hand side starts
++	return 0;
+ } /*}}}*/
+ int EDF_fos_forward_for_solverx(int n, IssmPDouble *inVal, IssmPDouble *inDeriv, int m, IssmPDouble *outVal, IssmPDouble *outDeriv) { /*{{{*/
+ #ifdef _HAVE_GSL_
+-//  for (int i=0; i<m*m; ++i) std::cout << "EDF_fos_forward_for_solverx A["<< i << "]=" << inVal[i] << std::endl;
+-//  for (int i=0; i<m; ++i) std::cout << "EDF_fos_forward_for_solverx b["<< i << "]=" << inVal[i+m*m] << std::endl;
+-  // the matrix will be modified by LU decomposition. Use gsl_A copy
+-  double* Acopy = xNew<double>(m*m);
+-  xMemCpy(Acopy,inVal,m*m);
+-  /*Initialize gsl matrices and vectors: */
+-  gsl_matrix_view gsl_A = gsl_matrix_view_array (Acopy,m,m);
+-  gsl_vector_view gsl_b = gsl_vector_view_array (inVal+m*m,m); // the right hand side starts at address inVal+m*m
+-  gsl_permutation *perm_p = gsl_permutation_alloc (m);
+-  int  signPerm;
+-  // factorize
+-  gsl_linalg_LU_decomp (&gsl_A.matrix, perm_p, &signPerm);
+-  gsl_vector *gsl_x_p = gsl_vector_alloc (m);
+-  // solve for the value
+-  gsl_linalg_LU_solve (&gsl_A.matrix, perm_p, &gsl_b.vector, gsl_x_p);
+-  /*Copy result*/
+-  xMemCpy(outVal,gsl_vector_ptr(gsl_x_p,0),m);
+-  gsl_vector_free(gsl_x_p);
+-//  for (int i=0; i<m; ++i) std::cout << "EDF_fos_forward_for_solverx x["<< i << "]=" << outVal[i] << std::endl;
+-  // solve for the derivatives acc. to A * dx = r  with r=db - dA * x
+-  // compute the RHS
+-  double* r=xNew<double>(m);
+-  for (int i=0; i<m; i++) {
+-    r[i]=inDeriv[m*m+i]; // this is db[i]
+-    for (int j=0;j<m; j++) {
+-      r[i]-=inDeriv[i*m+j]*outVal[j]; // this is dA[i][j]*x[j]
+-    }
+-  }
+-  gsl_vector_view gsl_r=gsl_vector_view_array(r,m);
+-  gsl_vector *gsl_dx_p = gsl_vector_alloc(m);
+-  gsl_linalg_LU_solve (&gsl_A.matrix, perm_p, &gsl_r.vector, gsl_dx_p);
+-  xMemCpy(outDeriv,gsl_vector_ptr(gsl_dx_p,0),m);
+-  gsl_vector_free(gsl_dx_p);
+-  xDelete(r);
+-  gsl_permutation_free(perm_p);
+-  xDelete(Acopy);
+-  #endif
+-  return 0;
++	//  for (int i=0; i<m*m; ++i) std::cout << "EDF_fos_forward_for_solverx A["<< i << "]=" << inVal[i] << std::endl;
++	//  for (int i=0; i<m; ++i) std::cout << "EDF_fos_forward_for_solverx b["<< i << "]=" << inVal[i+m*m] << std::endl;
++	// the matrix will be modified by LU decomposition. Use gsl_A copy
++	double* Acopy = xNew<double>(m*m);
++	xMemCpy(Acopy,inVal,m*m);
++	/*Initialize gsl matrices and vectors: */
++	gsl_matrix_view gsl_A = gsl_matrix_view_array (Acopy,m,m);
++	gsl_vector_view gsl_b = gsl_vector_view_array (inVal+m*m,m); // the right hand side starts at address inVal+m*m
++	gsl_permutation *perm_p = gsl_permutation_alloc (m);
++	int  signPerm;
++	// factorize
++	gsl_linalg_LU_decomp (&gsl_A.matrix, perm_p, &signPerm);
++	gsl_vector *gsl_x_p = gsl_vector_alloc (m);
++	// solve for the value
++	gsl_linalg_LU_solve (&gsl_A.matrix, perm_p, &gsl_b.vector, gsl_x_p);
++	/*Copy result*/
++	xMemCpy(outVal,gsl_vector_ptr(gsl_x_p,0),m);
++	gsl_vector_free(gsl_x_p);
++	//  for (int i=0; i<m; ++i) std::cout << "EDF_fos_forward_for_solverx x["<< i << "]=" << outVal[i] << std::endl;
++	// solve for the derivatives acc. to A * dx = r  with r=db - dA * x
++	// compute the RHS
++	double* r=xNew<double>(m);
++	for (int i=0; i<m; i++) {
++		r[i]=inDeriv[m*m+i]; // this is db[i]
++		for (int j=0;j<m; j++) {
++			r[i]-=inDeriv[i*m+j]*outVal[j]; // this is dA[i][j]*x[j]
++		}
++	}
++	gsl_vector_view gsl_r=gsl_vector_view_array(r,m);
++	gsl_vector *gsl_dx_p = gsl_vector_alloc(m);
++	gsl_linalg_LU_solve (&gsl_A.matrix, perm_p, &gsl_r.vector, gsl_dx_p);
++	xMemCpy(outDeriv,gsl_vector_ptr(gsl_dx_p,0),m);
++	gsl_vector_free(gsl_dx_p);
++	xDelete(r);
++	gsl_permutation_free(perm_p);
++	xDelete(Acopy);
++#endif
++	return 0;
+ } /*}}}*/
+ int EDF_fov_forward_for_solverx(int n, IssmPDouble *inVal, int directionCount, IssmPDouble **inDeriv, int m, IssmPDouble *outVal, IssmPDouble **outDeriv) { /*{{{*/
+ #ifdef _HAVE_GSL_
+-  // the matrix will be modified by LU decomposition. Use gsl_A copy
+-  double* Acopy = xNew<double>(m*m);
+-  xMemCpy(Acopy,inVal,m*m);
+-  /*Initialize gsl matrices and vectors: */
+-  gsl_matrix_view gsl_A = gsl_matrix_view_array (Acopy,m,m);
+-  gsl_vector_view gsl_b = gsl_vector_view_array (inVal+m*m,m); // the right hand side starts at address inVal+m*m
+-  gsl_permutation *perm_p = gsl_permutation_alloc (m);
+-  int  signPerm;
+-  // factorize
+-  gsl_linalg_LU_decomp (&gsl_A.matrix, perm_p, &signPerm);
+-  gsl_vector *gsl_x_p = gsl_vector_alloc (m);
+-  // solve for the value
+-  gsl_linalg_LU_solve (&gsl_A.matrix, perm_p, &gsl_b.vector, gsl_x_p);
+-  /*Copy result*/
+-  xMemCpy(outVal,gsl_vector_ptr(gsl_x_p,0),m);
+-  gsl_vector_free(gsl_x_p);
+-  // solve for the derivatives acc. to A * dx = r  with r=db - dA * x
+-  double* r=xNew<double>(m);
+-  gsl_vector *gsl_dx_p = gsl_vector_alloc(m);
+-  for (int dir=0;dir<directionCount;++dir) {
+-    // compute the RHS
+-    for (int i=0; i<m; i++) {
+-      r[i]=inDeriv[m*m+i][dir]; // this is db[i]
+-      for (int j=0;j<m; j++) {
+-        r[i]-=inDeriv[i*m+j][dir]*outVal[j]; // this is dA[i][j]*x[j]
+-      }
+-    }
+-    gsl_vector_view gsl_r=gsl_vector_view_array(r,m);
+-    gsl_linalg_LU_solve (&gsl_A.matrix, perm_p, &gsl_r.vector, gsl_dx_p);
+-    // reuse r
+-    xMemCpy(r,gsl_vector_ptr(gsl_dx_p,0),m);
+-    for (int i=0; i<m; i++) {
+-      outDeriv[i][dir]=r[i];
+-    }
+-  }
+-  gsl_vector_free(gsl_dx_p);
+-  xDelete(r);
+-  gsl_permutation_free(perm_p);
+-  xDelete(Acopy);
+-  #endif
+-  return 0;
++	// the matrix will be modified by LU decomposition. Use gsl_A copy
++	double* Acopy = xNew<double>(m*m);
++	xMemCpy(Acopy,inVal,m*m);
++	/*Initialize gsl matrices and vectors: */
++	gsl_matrix_view gsl_A = gsl_matrix_view_array (Acopy,m,m);
++	gsl_vector_view gsl_b = gsl_vector_view_array (inVal+m*m,m); // the right hand side starts at address inVal+m*m
++	gsl_permutation *perm_p = gsl_permutation_alloc (m);
++	int  signPerm;
++	// factorize
++	gsl_linalg_LU_decomp (&gsl_A.matrix, perm_p, &signPerm);
++	gsl_vector *gsl_x_p = gsl_vector_alloc (m);
++	// solve for the value
++	gsl_linalg_LU_solve (&gsl_A.matrix, perm_p, &gsl_b.vector, gsl_x_p);
++	/*Copy result*/
++	xMemCpy(outVal,gsl_vector_ptr(gsl_x_p,0),m);
++	gsl_vector_free(gsl_x_p);
++	// solve for the derivatives acc. to A * dx = r  with r=db - dA * x
++	double* r=xNew<double>(m);
++	gsl_vector *gsl_dx_p = gsl_vector_alloc(m);
++	for (int dir=0;dir<directionCount;++dir) {
++		// compute the RHS
++		for (int i=0; i<m; i++) {
++			r[i]=inDeriv[m*m+i][dir]; // this is db[i]
++			for (int j=0;j<m; j++) {
++				r[i]-=inDeriv[i*m+j][dir]*outVal[j]; // this is dA[i][j]*x[j]
++			}
++		}
++		gsl_vector_view gsl_r=gsl_vector_view_array(r,m);
++		gsl_linalg_LU_solve (&gsl_A.matrix, perm_p, &gsl_r.vector, gsl_dx_p);
++		// reuse r
++		xMemCpy(r,gsl_vector_ptr(gsl_dx_p,0),m);
++		for (int i=0; i<m; i++) {
++			outDeriv[i][dir]=r[i];
++		}
++	}
++	gsl_vector_free(gsl_dx_p);
++	xDelete(r);
++	gsl_permutation_free(perm_p);
++	xDelete(Acopy);
++#endif
++	return 0;
+ }
+ /*}}}*/
+ int EDF_fos_reverse_for_solverx(int m, double *dp_U, int n, double *dp_Z, double* dp_x, double* dp_y) { /*{{{*/
+-  // copy to transpose the matrix
+-  double* transposed=xNew<double>(m*m);
+-  for (int i=0; i<m; ++i) for (int j=0; j<m; ++j) transposed[j*m+i]=dp_x[i*m+j];
+-  gsl_matrix_view aTransposed = gsl_matrix_view_array (transposed,m,m);
+-  // the adjoint of the solution is our right-hand side
+-  gsl_vector_view x_bar=gsl_vector_view_array(dp_U,m);
+-  // the last m elements of dp_Z representing the adjoint of the right-hand side we want to compute:
+-  gsl_vector_view b_bar=gsl_vector_view_array(dp_Z+m*m,m);
+-  gsl_permutation *p = gsl_permutation_alloc (m);
+-  int permSign;
+-  gsl_linalg_LU_decomp (&aTransposed.matrix, p, &permSign);
+-  gsl_linalg_LU_solve (&aTransposed.matrix, p, &x_bar.vector, &b_bar.vector);
+-  // now do the adjoint of the matrix
+-  for (int i=0; i<m; ++i) for (int j=0; j<m; ++j) dp_Z[i*m+j]-=dp_Z[m*m+i]*dp_y[j];
+-  gsl_permutation_free(p);
+-  xDelete(transposed);
+-  return 0;
++	// copy to transpose the matrix
++	double* transposed=xNew<double>(m*m);
++	for (int i=0; i<m; ++i) for (int j=0; j<m; ++j) transposed[j*m+i]=dp_x[i*m+j];
++	gsl_matrix_view aTransposed = gsl_matrix_view_array (transposed,m,m);
++	// the adjoint of the solution is our right-hand side
++	gsl_vector_view x_bar=gsl_vector_view_array(dp_U,m);
++	// the last m elements of dp_Z representing the adjoint of the right-hand side we want to compute:
++	gsl_vector_view b_bar=gsl_vector_view_array(dp_Z+m*m,m);
++	gsl_permutation *p = gsl_permutation_alloc (m);
++	int permSign;
++	gsl_linalg_LU_decomp (&aTransposed.matrix, p, &permSign);
++	gsl_linalg_LU_solve (&aTransposed.matrix, p, &x_bar.vector, &b_bar.vector);
++	// now do the adjoint of the matrix
++	for (int i=0; i<m; ++i) for (int j=0; j<m; ++j) dp_Z[i*m+j]-=dp_Z[m*m+i]*dp_y[j];
++	gsl_permutation_free(p);
++	xDelete(transposed);
++	return 0;
+ }
+ /*}}}*/
+ int EDF_fov_reverse_for_solverx(int m, int p, double **dpp_U, int n, double **dpp_Z, double* dp_x, double* dp_y) { /*{{{*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13514-13515.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13514-13515.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13514-13515.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13514)
++++ ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13515)
+@@ -168,13 +168,13 @@
+ 	gsl_vector_view x_bar=gsl_vector_view_array(dp_U,m);
+ 	// the last m elements of dp_Z representing the adjoint of the right-hand side we want to compute:
+ 	gsl_vector_view b_bar=gsl_vector_view_array(dp_Z+m*m,m);
+-	gsl_permutation *p = gsl_permutation_alloc (m);
++	gsl_permutation *perm_p = gsl_permutation_alloc (m);
+ 	int permSign;
+-	gsl_linalg_LU_decomp (&aTransposed.matrix, p, &permSign);
+-	gsl_linalg_LU_solve (&aTransposed.matrix, p, &x_bar.vector, &b_bar.vector);
++	gsl_linalg_LU_decomp (&aTransposed.matrix, perm_p, &permSign);
++	gsl_linalg_LU_solve (&aTransposed.matrix, perm_p, &x_bar.vector, &b_bar.vector);
+ 	// now do the adjoint of the matrix
+ 	for (int i=0; i<m; ++i) for (int j=0; j<m; ++j) dp_Z[i*m+j]-=dp_Z[m*m+i]*dp_y[j];
+-	gsl_permutation_free(p);
++	gsl_permutation_free(perm_p);
+ 	xDelete(transposed);
+ 	return 0;
+ }
Index: /issm/oecreview/Archive/13393-13976/ISSM-13515-13516.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13515-13516.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13515-13516.diff	(revision 13980)
@@ -0,0 +1,418 @@
+Index: ../trunk-jpl/test/NightlyRun/test3019.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.m	(revision 13515)
++++ ../trunk-jpl/test/NightlyRun/test3019.m	(revision 13516)
+@@ -1,3 +1,4 @@
++%test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup.
+ md=triangle(model,'../Exp/Square.exp',100000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+Index: ../trunk-jpl/test/NightlyRun/test3020.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3020.m	(revision 13516)
+@@ -0,0 +1,86 @@
++%This test runs test3020 with autodiff on, and checks that 
++%the value of the scalar forward difference match a step-wise differential
++
++%First configure
++md=triangle(model,'../Exp/Square.exp',150000);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=setflowequation(md,'macayeal','all');
++md.cluster=generic('name',oshostname(),'np',3);
++md.transient.requested_outputs=[IceVolumeEnum;MaxVelEnum];
++md.verbose=verbose('autodiff',true);
++md.diagnostic.restol=.000001;
++
++%setup autodiff parameters
++index=1; %this is the scalar component we are checking against
++md.autodiff.independents={...
++	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
++	};
++
++md.autodiff.dependents={...
++	dependent('name','IceVolume','type','scalar'),...
++	dependent('name','MaxVel','type','scalar')...
++	};
++md.autodiff.driver='fos_forward';
++
++%parameters for the step-wise devivative
++delta=.00001;
++h1=md.geometry.thickness(index);
++h0=h1*(1-delta);
++h2=h1*(1+delta);
++deltaH=(h2-h0);
++
++%save model:
++md2=md;
++
++%evaluate derivative by forward and backward stepping 
++%forward
++md=md2;
++md.autodiff.isautodiff=false;
++md.geometry.thickness(index)=h0;
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
++md.geometry.surface=md.geometry.bed+md.geometry.thickness;
++md=SetIceShelfBC(md);
++
++md=solve(md,TransientSolutionEnum);
++V0=md.results.TransientSolution(end).IceVolume;
++MaxV0=md.results.TransientSolution(end).MaxVel;
++
++%backward
++md=md2;
++md.autodiff.isautodiff=false;
++md.geometry.thickness(index)=h2;
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
++md.geometry.surface=md.geometry.bed+md.geometry.thickness;
++md=SetIceShelfBC(md);
++
++md=solve(md,TransientSolutionEnum);
++V2=md.results.TransientSolution(end).IceVolume;
++MaxV2=md.results.TransientSolution(end).MaxVel;
++
++%compute resulting derivative
++dVdh_an=(V2-V0)/deltaH;
++dMaxVdh_an=(MaxV2-MaxV0)/deltaH;
++
++
++%evaluate derivative using ADOLC 
++md=md2;
++md.autodiff.isautodiff=true;
++md.geometry.thickness(index)=h1;
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
++md.geometry.surface=md.geometry.bed+md.geometry.thickness;
++md=SetIceShelfBC(md);
++
++md=solve(md,TransientSolutionEnum);
++%retrieve directly
++dVdh_ad=md.results.TransientSolution(1).AutodiffJacobian(1);
++dMaxVdh_ad=md.results.TransientSolution(1).AutodiffJacobian(2);
++
++disp(sprintf('dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dVdh_an,dVdh_ad));
++disp(sprintf('dMaxV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dMaxVdh_an,dMaxVdh_ad));
++
++
++%Fields and tolerances to track changes
++field_names     ={'dV/dh-dV/dh0','dMaxV/dh-dMaxV/dh0'};
++field_tolerances={1e-13,1e-13};
++field_values={dVdh_ad-dVdh_an,dMaxVdh_an-dMaxVdh_ad};
+Index: ../trunk-jpl/test/Archives/Archive3020.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/test/Archives/Archive3020.nc
+===================================================================
+--- ../trunk-jpl/test/Archives/Archive3020.nc	(revision 13515)
++++ ../trunk-jpl/test/Archives/Archive3020.nc	(revision 13516)
+
+Property changes on: ../trunk-jpl/test/Archives/Archive3020.nc
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/externalpackages/esmf/esmf_4_0_0rp2_src.tar.gz
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/externalpackages/esmf/esmf_4_0_0rp2_src.tar.gz
+===================================================================
+--- ../trunk-jpl/externalpackages/esmf/esmf_4_0_0rp2_src.tar.gz	(revision 13515)
++++ ../trunk-jpl/externalpackages/esmf/esmf_4_0_0rp2_src.tar.gz	(revision 13516)
+
+Property changes on: ../trunk-jpl/externalpackages/esmf/esmf_4_0_0rp2_src.tar.gz
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13515)
++++ ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13516)
+@@ -30,6 +30,7 @@
+ 	AutodiffFovForwardIndicesEnum,
+ 	AutodiffFosReverseIndexEnum,
+ 	AutodiffMassFluxSegmentsPresentEnum,
++	AutodiffKeepEnum,
+ 	BalancethicknessSpcthicknessEnum,
+ 	BalancethicknessStabilizationEnum,
+ 	BalancethicknessThickeningRateEnum,
+Index: ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13515)
++++ ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13516)
+@@ -36,6 +36,7 @@
+ 	      else if (strcmp(name,"AutodiffFovForwardIndices")==0) return AutodiffFovForwardIndicesEnum;
+ 	      else if (strcmp(name,"AutodiffFosReverseIndex")==0) return AutodiffFosReverseIndexEnum;
+ 	      else if (strcmp(name,"AutodiffMassFluxSegmentsPresent")==0) return AutodiffMassFluxSegmentsPresentEnum;
++	      else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
+ 	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
+ 	      else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
+ 	      else if (strcmp(name,"BalancethicknessThickeningRate")==0) return BalancethicknessThickeningRateEnum;
+@@ -136,11 +137,11 @@
+ 	      else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum;
+ 	      else if (strcmp(name,"MeshDimension")==0) return MeshDimensionEnum;
+ 	      else if (strcmp(name,"MeshEdges")==0) return MeshEdgesEnum;
+-	      else if (strcmp(name,"MeshElementconnectivity")==0) return MeshElementconnectivityEnum;
+          else stage=2;
+    }
+    if(stage==2){
+-	      if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
++	      if (strcmp(name,"MeshElementconnectivity")==0) return MeshElementconnectivityEnum;
++	      else if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
+ 	      else if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
+ 	      else if (strcmp(name,"MeshElements2d")==0) return MeshElements2dEnum;
+ 	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
+@@ -259,11 +260,11 @@
+ 	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+-	      else if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SurfaceSlopeYAnalysis")==0) return SurfaceSlopeYAnalysisEnum;
++	      if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
++	      else if (strcmp(name,"SurfaceSlopeYAnalysis")==0) return SurfaceSlopeYAnalysisEnum;
+ 	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+ 	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+ 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
+@@ -382,11 +383,11 @@
+ 	      else if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
+-	      else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
++	      if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
++	      else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
+ 	      else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
+ 	      else if (strcmp(name,"TemperatureOld")==0) return TemperatureOldEnum;
+@@ -505,11 +506,11 @@
+ 	      else if (strcmp(name,"Sset")==0) return SsetEnum;
+ 	      else if (strcmp(name,"Verbose")==0) return VerboseEnum;
+ 	      else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
+-	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
++	      if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
++	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+ 	      else if (strcmp(name,"XY")==0) return XYEnum;
+ 	      else if (strcmp(name,"XYZP")==0) return XYZPEnum;
+ 	      else if (strcmp(name,"Option")==0) return OptionEnum;
+Index: ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13515)
++++ ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13516)
+@@ -35,6 +35,7 @@
+ 		case AutodiffFovForwardIndicesEnum : return "AutodiffFovForwardIndices";
+ 		case AutodiffFosReverseIndexEnum : return "AutodiffFosReverseIndex";
+ 		case AutodiffMassFluxSegmentsPresentEnum : return "AutodiffMassFluxSegmentsPresent";
++		case AutodiffKeepEnum : return "AutodiffKeep";
+ 		case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
+ 		case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
+ 		case BalancethicknessThickeningRateEnum : return "BalancethicknessThickeningRate";
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13515)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13516)
+@@ -37,8 +37,11 @@
+ 	iomodel->Constant(&autodiff_analysis,AutodiffIsautodiffEnum);
+ 	
+ 	if(autodiff_analysis){
++	
++		/*Copy some parameters from IoModel to parameters dataset: */
++		parameters->AddObject(iomodel->CopyConstantObject(AutodiffKeepEnum));
+ 
+-		/*retrieve driver: */
++		/*retrieve driver: {{{*/
+ 		iomodel->Constant(&autodiff_driver,AutodiffDriverEnum);
+ 		parameters->AddObject(iomodel->CopyConstantObject(AutodiffDriverEnum));
+ 		
+@@ -54,7 +57,7 @@
+ 			parameters->AddObject(new IntMatParam(AutodiffFovForwardIndicesEnum,indices,num_indices,1));
+ 			xDelete<int>(indices);
+ 		}
+-
++		/*}}}*/
+ 		/*Deal with dependents first: {{{*/
+ 		iomodel->Constant(&num_dependent_objects,AutodiffNumDependentObjectsEnum);
+ 		dependent_objects=new DataSet();
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13515)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13516)
+@@ -211,7 +211,7 @@
+ 
+ 	int         numberofvertices;
+ 	int         dummy;
+-	char*       driver=NULL;
++	bool        keep=false;
+ 
+ 
+ 	/*Initialize array detecting whether data[i] is an independent AD mode variable: */
+@@ -225,34 +225,11 @@
+ 		
+ 		#ifdef _HAVE_ADOLC_
+ 
+-		/*Start the trace:  {{{
+-		 * to do so, figure out what kind of driver we are running. Then, according to ADOLC documentation, 
+-		 * we'll need to activate keep. 
+-		 *
+-		 * From ADOLC userdoc: 
+-		 * The optional integer argument keep of trace on determines whether the numerical values of all active variables are 
+-		 * recorded in a buffered temporary array or file called the taylor stack. This option takes effect if keep = 1 and 
+-		 * prepares the scene for an immediately following gradient evaluation by a call to a routine implementing the reverse 
+-		 * mode as described in the Section 4 and Section 5. 
+-		 *
+-		 */
+-		this->FetchData(&driver,AutodiffDriverEnum);
+-		if (strlen(driver)<=3){
+-			/*there is no "_reverse" string within the driver string: */
+-			if(VerboseAutodiff())_pprintLine_("   trace activated with keep off");
+-			trace_on(1);
+-		}
+-		else{
+-			if (strncmp((const char*)(driver+3),"_reverse",8)==0){
+-				if(VerboseAutodiff())_pprintLine_("   trace activated with keep on");
+-				trace_on(1,1);
+-			}
+-			else{
+-				if(VerboseAutodiff())_pprintLine_("   trace activated with keep off");
+-				trace_on(1);
+-			}
+-		}
+-		xDelete<char>(driver);
++		/*Start trace: {{{*/
++		this->FetchData(&keep,AutodiffKeepEnum);
++		if(keep)trace_on(1,1);
++		else    trace_on(1);
++
+ 		/*}}}*/
+ 		/*build dataset made of independent objects: {{{*/
+ 		this->independent_objects=new DataSet();
+Index: ../trunk-jpl/src/m/classes/autodiff.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.py	(revision 13515)
++++ ../trunk-jpl/src/m/classes/autodiff.py	(revision 13516)
+@@ -39,5 +39,6 @@
+ 	def marshall(self,fid):    # {{{
+ 		WriteData(fid,'object',self,'fieldname','isautodiff','format','Boolean')
+ 		WriteData(fid,'data',False,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
++		WriteData(fid,'data',False,'enum',AutodiffKeepEnum(),'format','Boolean');
+ 	# }}}
+ 
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 13515)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 13516)
+@@ -57,6 +57,7 @@
+ 			%early return
+ 			if ~obj.isautodiff, 
+ 				WriteData(fid,'data',false,'enum',AutodiffMassFluxSegmentsPresentEnum,'format','Boolean');
++				WriteData(fid,'data',false,'enum',AutodiffKeepEnum,'format','Boolean');
+ 				return; 
+ 			end
+ 
+@@ -179,7 +180,28 @@
+ 			end
+ 			WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum,'format','Boolean');
+ 			%}}}
++			%deal with trace keep on: {{{
++			keep=false;
+ 
++			%From ADOLC userdoc: 
++			% The optional integer argument keep of trace on determines whether the numerical values of all active variables are 
++			% recorded in a buffered temporary array or file called the taylor stack. This option takes effect if keep = 1 and 
++			% prepares the scene for an immediately following gradient evaluation by a call to a routine implementing the reverse 
++			% mode as described in the Section 4 and Section 5. 
++			%
++
++			if length(obj.driver)<=3,
++				keep=false; %there is no "_reverse" string within the driver string: 
++			else
++				if strncmpi(obj.driver(4:end),'_reverse',8),
++					keep=true;
++				else
++					keep=false;
++				end
++			end
++			WriteData(fid,'data',keep,'enum',AutodiffKeepEnum,'format','Boolean');
++			%}}}
++
+ 		end % }}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13515)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13516)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=492;
++macro=493;
+Index: ../trunk-jpl/src/m/enum/AutodiffKeepEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/AutodiffKeepEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/AutodiffKeepEnum.m	(revision 13516)
+@@ -0,0 +1,11 @@
++function macro=AutodiffKeepEnum()
++%AUTODIFFKEEPENUM - Enum of AutodiffKeep
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=AutodiffKeepEnum()
++
++macro=StringToEnum('AutodiffKeep');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13515)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13516)
+@@ -198,6 +198,16 @@
+ 
+ 	return StringToEnum('AutodiffMassFluxSegmentsPresent')[0]
+ 
++def AutodiffKeepEnum():
++	"""
++	AUTODIFFKEEPENUM - Enum of AutodiffKeep
++
++	   Usage:
++	      macro=AutodiffKeepEnum()
++	"""
++
++	return StringToEnum('AutodiffKeep')[0]
++
+ def BalancethicknessSpcthicknessEnum():
+ 	"""
+ 	BALANCETHICKNESSSPCTHICKNESSENUM - Enum of BalancethicknessSpcthickness
+@@ -4936,5 +4946,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 492
++	return 493
+ 
+Index: ../trunk-jpl/configs/config-macosx64-larour-bothapis.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-larour-bothapis.sh	(revision 13515)
++++ ../trunk-jpl/configs/config-macosx64-larour-bothapis.sh	(revision 13516)
+@@ -11,7 +11,7 @@
+ 	--with-matlab-dir=$MATLAB_DIR \
+ 	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
+ 	--with-python-version=$pythonversion \
+-	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
++	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+ 	--with-mpi-lib=" $ISSM_DIR/externalpackages/mpich2/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpl.a " \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13516-13517.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13516-13517.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13516-13517.diff	(revision 13980)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/m/classes/inversion.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.py	(revision 13516)
++++ ../trunk-jpl/src/m/classes/inversion.py	(revision 13517)
+@@ -170,13 +170,13 @@
+ 		WriteData(fid,'object',self,'fieldname','thickness_obs','format','DoubleMat','mattype',1)
+ 
+ 		#process control parameters
+-		num_control_parameters=numpy.size(self.control_parameters)
+-		data=[StringToEnum(self.control_parameters[i])[0] for i in xrange(0,num_control_parameters)]
++		num_control_parameters=len(self.control_parameters)
++		data=numpy.array([StringToEnum(control_parameter)[0] for control_parameter in self.control_parameters])
+ 		WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3)
+ 		WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer')
+ 
+ 		#process cost functions
+-		num_cost_functions=size(self.cost_functions,1)
++		num_cost_functions=numpy.size(self.cost_functions,1)
+ 		data=self.cost_functions
+ 		data[numpy.nonzero(data==101)]=SurfaceAbsVelMisfitEnum()
+ 		data[numpy.nonzero(data==102)]=SurfaceRelVelMisfitEnum()
Index: /issm/oecreview/Archive/13393-13976/ISSM-13517-13518.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13517-13518.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13517-13518.diff	(revision 13980)
@@ -0,0 +1,145 @@
+Index: ../trunk-jpl/test/NightlyRun/test212.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test212.py	(revision 13518)
+@@ -0,0 +1,61 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test212.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',200000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++
++
++# control parameters
++
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['MaterialsRheologyBbar']
++md.inversion.min_parameters=10**6*ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=2*10**9*ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=101*ones((md.inversion.nsteps,1))
++md.inversion.cost_functions_coefficients=ones((md.mesh.numberofvertices,1))
++md.inversion.gradient_scaling=10**7*ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2*ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=0.3*ones((md.inversion.nsteps,1))
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++md.results['DiagnosticSolution'][1]['Gradient1'],\
++md.results['DiagnosticSolution'][1]['J'],\
++md.results['DiagnosticSolution'][1]['MaterialsRheologyBbar'],\
++md.results['DiagnosticSolution'][1]['Pressure'],\
++md.results['DiagnosticSolution'][1]['Vel'],\
++md.results['DiagnosticSolution'][1]['Vx'],\
++md.results['DiagnosticSolution'][1]['Vy'],\
++]
+Index: ../trunk-jpl/test/NightlyRun/test212.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.m	(revision 13517)
++++ ../trunk-jpl/test/NightlyRun/test212.m	(revision 13518)
+@@ -24,7 +24,7 @@
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+-	md.results.DiagnosticSolution.J,...
++	(md.results.DiagnosticSolution.J),...
+ 	(md.results.DiagnosticSolution.MaterialsRheologyBbar),...
+ 	(md.results.DiagnosticSolution.Pressure),...
+ 	(md.results.DiagnosticSolution.Vel),...
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test212.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test212.py	(revision 13517)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test212.py	(revision 13518)
+@@ -1,61 +0,0 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test212.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+-from MatlabFuncs import *
+-from model import *
+-from EnumDefinitions import *
+-from numpy import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from solve import *
+-
+-md=triangle(model(),'../Exp/Square.exp',200000)
+-md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
+-
+-
+-# control parameters
+-
+-md.inversion.iscontrol=1
+-md.inversion.control_parameters=['MaterialsRheologyBbar']
+-md.inversion.min_parameters=10^6*ones(md.mesh.numberofvertices,1)
+-md.inversion.max_parameters=2*10^9*ones(md.mesh.numberofvertices,1)
+-md.inversion.nsteps=2
+-md.inversion.cost_functions=101*ones(md.inversion.nsteps,1)
+-md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1)
+-md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1)
+-md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1)
+-md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1)
+-md.inversion.vx_obs=md.initialization.vx
+-md.inversion.vy_obs=md.initialization.vy
+-
+-
+-md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
+-
+-
+-# Fields and tolerances to track changes
+-
+-field_names     =['Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+-field_values=[\
+-md.results['DiagnosticSolution'][1]['Gradient1'],\
+-md.results['DiagnosticSolution.J'],\
+-md.results['DiagnosticSolution'][1]['MaterialsRheologyBbar'],\
+-md.results['DiagnosticSolution'][1]['Pressure'],\
+-md.results['DiagnosticSolution'][1]['Vel'],\
+-md.results['DiagnosticSolution'][1]['Vx'],\
+-md.results['DiagnosticSolution'][1]['Vy'],\
+-]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13518-13519.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13518-13519.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13518-13519.diff	(revision 13980)
@@ -0,0 +1,448 @@
+Index: ../trunk-jpl/test/NightlyRun/test214.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.m	(revision 13518)
++++ ../trunk-jpl/test/NightlyRun/test214.m	(revision 13519)
+@@ -25,7 +25,7 @@
+ field_tolerances={1e-07,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+-	md.results.DiagnosticSolution.J,...
++	(md.results.DiagnosticSolution.J),...
+ 	(md.results.DiagnosticSolution.MaterialsRheologyB),...
+ 	(md.results.DiagnosticSolution.Pressure),...
+ 	(md.results.DiagnosticSolution.Vel),...
+Index: ../trunk-jpl/test/NightlyRun/test214.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test214.py	(revision 13519)
+@@ -0,0 +1,62 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test214.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',200000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++
++
++# control parameters
++
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['MaterialsRheologyBbar']
++md.inversion.min_parameters=10**6*ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=2.*10**9*ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=101.*ones((md.inversion.nsteps,1))
++md.inversion.cost_functions_coefficients=ones((md.mesh.numberofvertices,1))
++md.inversion.gradient_scaling=10**7*ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2.*ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=0.3*ones((md.inversion.nsteps,1))
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
++field_tolerances=[1e-07,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Gradient1'],\
++	md.results['DiagnosticSolution'][1]['J'],\
++	md.results['DiagnosticSolution'][1]['MaterialsRheologyB'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy']
++]
+Index: ../trunk-jpl/test/NightlyRun/test215.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.m	(revision 13518)
++++ ../trunk-jpl/test/NightlyRun/test215.m	(revision 13519)
+@@ -25,7 +25,7 @@
+ field_tolerances={1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+-	md.results.DiagnosticSolution.J,...
++	(md.results.DiagnosticSolution.J),...
+ 	(md.results.DiagnosticSolution.MaterialsRheologyB),...
+ 	(md.results.DiagnosticSolution.Pressure),...
+ 	(md.results.DiagnosticSolution.Vel),...
+Index: ../trunk-jpl/test/NightlyRun/test212.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.py	(revision 13518)
++++ ../trunk-jpl/test/NightlyRun/test212.py	(revision 13519)
+@@ -31,12 +31,12 @@
+ md.inversion.iscontrol=1
+ md.inversion.control_parameters=['MaterialsRheologyBbar']
+ md.inversion.min_parameters=10**6*ones((md.mesh.numberofvertices,1))
+-md.inversion.max_parameters=2*10**9*ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=2.*10**9*ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=101*ones((md.inversion.nsteps,1))
++md.inversion.cost_functions=101.*ones((md.inversion.nsteps,1))
+ md.inversion.cost_functions_coefficients=ones((md.mesh.numberofvertices,1))
+ md.inversion.gradient_scaling=10**7*ones((md.inversion.nsteps,1))
+-md.inversion.maxiter_per_step=2*ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2.*ones((md.inversion.nsteps,1))
+ md.inversion.step_threshold=0.3*ones((md.inversion.nsteps,1))
+ md.inversion.vx_obs=md.initialization.vx
+ md.inversion.vy_obs=md.initialization.vy
+Index: ../trunk-jpl/test/NightlyRun/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test215.py	(revision 13519)
+@@ -0,0 +1,62 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test215.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',200000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'stokes','all')
++
++
++# control parameters
++
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['MaterialsRheologyBbar']
++md.inversion.min_parameters=10**6*ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=2.*10**9*ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=101.*ones((md.inversion.nsteps,1))
++md.inversion.cost_functions_coefficients=ones((md.mesh.numberofvertices,1))
++md.inversion.gradient_scaling=10**7*ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2.*ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=0.3*ones((md.inversion.nsteps,1))
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
++field_tolerances=[1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Gradient1'],\
++	md.results['DiagnosticSolution'][1]['J'],\
++	md.results['DiagnosticSolution'][1]['MaterialsRheologyB'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy']
++]
+Index: ../trunk-jpl/test/NightlyRun/test213.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test213.py	(revision 13519)
+@@ -0,0 +1,63 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test213.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',200000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++
++
++# control parameters
++
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['MaterialsRheologyBbar']
++md.inversion.min_parameters=10**6*ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=2.*10**9*ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=101.*ones((md.inversion.nsteps,1))
++md.inversion.cost_functions_coefficients=ones((md.mesh.numberofvertices,1))
++md.inversion.gradient_scaling=10**7*ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2.*ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=0.3*ones((md.inversion.nsteps,1))
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++#field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Gradient1'],\
++	md.results['DiagnosticSolution'][1]['J'],\
++	md.results['DiagnosticSolution'][1]['MaterialsRheologyB'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test213.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test213.py	(revision 13518)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test213.py	(revision 13519)
+@@ -1,63 +0,0 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test213.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+-from MatlabFuncs import *
+-from model import *
+-from EnumDefinitions import *
+-from numpy import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from solve import *
+-
+-md=triangle(model(),'../Exp/Square.exp',200000)
+-md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
+-md=setflowequation(md,'macayeal','all')
+-
+-
+-# control parameters
+-
+-md.inversion.iscontrol=1
+-md.inversion.control_parameters=['MaterialsRheologyBbar']
+-md.inversion.min_parameters=10^6*ones(md.mesh.numberofvertices,1)
+-md.inversion.max_parameters=2*10^9*ones(md.mesh.numberofvertices,1)
+-md.inversion.nsteps=2
+-md.inversion.cost_functions=101*ones(md.inversion.nsteps,1)
+-md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1)
+-md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1)
+-md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1)
+-md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1)
+-md.inversion.vx_obs=md.initialization.vx
+-md.inversion.vy_obs=md.initialization.vy
+-
+-
+-md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
+-
+-
+-# Fields and tolerances to track changes
+-
+-field_names     =['Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+-#field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+-field_values=[\
+-	md.results['DiagnosticSolution'][1]['Gradient1'],\
+-	md.results['DiagnosticSolution'][1]['J'],\
+-	md.results['DiagnosticSolution'][1]['MaterialsRheologyB'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test214.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test214.py	(revision 13518)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test214.py	(revision 13519)
+@@ -1,61 +0,0 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test214.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+-from MatlabFuncs import *
+-from model import *
+-from EnumDefinitions import *
+-from numpy import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from solve import *
+-
+-md=triangle(model(),'../Exp/Square.exp',200000)
+-md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
+-md=setflowequation(md,'pattyn','all')
+-
+-
+-# control parameters
+-
+-md.inversion.iscontrol=1
+-md.inversion.control_parameters=['MaterialsRheologyBbar']
+-md.inversion.min_parameters=10^6*ones(md.mesh.numberofvertices,1)
+-md.inversion.max_parameters=2*10^9*ones(md.mesh.numberofvertices,1)
+-md.inversion.nsteps=2
+-md.inversion.cost_functions=101*ones(md.inversion.nsteps,1)
+-md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1)
+-md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1)
+-md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1)
+-md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1)
+-md.inversion.vx_obs=md.initialization.vx md.inversion.vy_obs=md.initialization.vy
+-
+-
+-md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
+-
+-
+-# Fields and tolerances to track changes
+-
+-field_names     =['Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy']
+-field_tolerances=[1e-07,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08]
+-field_values=[\
+-	md.results['DiagnosticSolution.Gradient1),\
+-	md.results.DiagnosticSolution.J,\
+-	md.results['DiagnosticSolution.MaterialsRheologyB),\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy']
+-]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test215.py	(revision 13518)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test215.py	(revision 13519)
+@@ -1,61 +0,0 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test215.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+-from MatlabFuncs import *
+-from model import *
+-from EnumDefinitions import *
+-from numpy import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from solve import *
+-
+-md=triangle(model(),'../Exp/Square.exp',200000)
+-md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
+-md=setflowequation(md,'stokes','all')
+-
+-
+-# control parameters
+-
+-md.inversion.iscontrol=1
+-md.inversion.control_parameters=['MaterialsRheologyBbar']
+-md.inversion.min_parameters=10^6*ones(md.mesh.numberofvertices,1)
+-md.inversion.max_parameters=2*10^9*ones(md.mesh.numberofvertices,1)
+-md.inversion.nsteps=2
+-md.inversion.cost_functions=101*ones(md.inversion.nsteps,1)
+-md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1)
+-md.inversion.gradient_scaling=10^7*ones(md.inversion.nsteps,1)
+-md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1)
+-md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1)
+-md.inversion.vx_obs=md.initialization.vx md.inversion.vy_obs=md.initialization.vy
+-
+-
+-md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
+-
+-
+-# Fields and tolerances to track changes
+-
+-field_names     =['Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy']
+-field_tolerances=[1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
+-field_values=[\
+-	md.results['DiagnosticSolution.Gradient1),\
+-	md.results.DiagnosticSolution.J,\
+-	md.results['DiagnosticSolution.MaterialsRheologyB),\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy']
+-]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13519-13520.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13519-13520.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13519-13520.diff	(revision 13980)
@@ -0,0 +1,109 @@
+Index: ../trunk-jpl/src/m/mesh/triangle.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/triangle.py	(revision 13519)
++++ ../trunk-jpl/src/m/mesh/triangle.py	(revision 13520)
+@@ -1,56 +1,66 @@
+-from numpy import *
+-import TriMesh as tm
+-import NodeConnectivity as nc
+-import ElementConnectivity as ec
++import numpy
++from TriMesh import *
++from NodeConnectivity import *
++from ElementConnectivity import *
++from MatlabFuncs import *
+ 
+-def triangle(md, domainname, resolution,riftname=''):
+-	#TRIANGLE - create model mesh using the triangle package
+-	#
+-	#   This routine creates a model mesh using TriMesh and a domain outline, to within a certain resolution
+-	#   where md is a @model object, domainname is the name of an Argus domain outline file, 
+-	#   and resolution is a characteristic length for the mesh (same unit as the domain outline
+-	#   unit). Riftname is an optional argument (Argus domain outline) describing rifts.
+-	#
+-	#   Usage:
+-	#      md=triangle(md,domainname,resolution)
+-	#   or md=triangle(md,domainname, resolution, riftname)
+-	#
+-	#   Examples:
+-	#      md=triangle(md,'DomainOutline.exp',1000);
+-	#      md=triangle(md,'DomainOutline.exp',1000,'Rifts.exp');
++def triangle(md,domainname,*args):
++	"""
++	TRIANGLE - create model mesh using the triangle package
+ 
++	   This routine creates a model mesh using TriMesh and a domain outline, to within a certain resolution
++	   where md is a @model object, domainname is the name of an Argus domain outline file, 
++	   and resolution is a characteristic length for the mesh (same unit as the domain outline
++	   unit). Riftname is an optional argument (Argus domain outline) describing rifts.
+ 
++	   Usage:
++	      md=triangle(md,domainname,resolution)
++	   or md=triangle(md,domainname, resolution, riftname)
++
++	   Examples:
++	      md=triangle(md,'DomainOutline.exp',1000);
++	      md=triangle(md,'DomainOutline.exp',1000,'Rifts.exp');
++	"""
++
+ 	#Figure out a characteristic area. Resolution is a node oriented concept (ex a 1000m  resolution node would 
+ 	#be made of 1000*1000 area squares). 
+ 
++	if len(args)==1:
++		resolution=args[0]
++		riftname=''
++	if len(args)==2:
++		riftname=args[0]
++		resolution=args[1]
++
+ 	#Check that mesh was not already run, and warn user: 
+-	if md.mesh.numberofelements != 0.:
+-		choice = input('This model already has a mesh. Are you sure you want to go ahead? (y/n)')
+-		if choice != 'y':
++	if md.mesh.numberofelements:
++		choice = raw_input('This model already has a mesh. Are you sure you want to go ahead? (y/n)')
++		if not strcmp(choice,'y'):
+ 			print 'no meshing done ... exiting'
+-			return []
+-		
+-	area = resolution**2.
++			return None
+ 
++	area = resolution**2
++
+ 	#Mesh using TriMesh
+-	[md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers]=tm.TriMesh(domainname,riftname,area)
++	[md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers]=TriMesh(domainname,riftname,area)
+ 
+-
+ 	#Fill in rest of fields:
+-	md.mesh.numberofelements = len(md.mesh.elements)
+-	md.mesh.numberofvertices = len(md.mesh.x)
+-	md.mesh.z = zeros(md.mesh.numberofvertices)
+-	md.mesh.vertexonboundary = zeros(md.mesh.numberofvertices)
++	md.mesh.numberofelements = numpy.size(md.mesh.elements,axis=0)
++	md.mesh.numberofvertices = numpy.size(md.mesh.x)
++	md.mesh.z = numpy.zeros(md.mesh.numberofvertices)
++	md.mesh.vertexonboundary = numpy.zeros(md.mesh.numberofvertices)
+ 	md.mesh.vertexonboundary[md.mesh.segments[:,0:2].astype(int)-1] = 1.
+-	md.mesh.vertexonbed = ones(md.mesh.numberofvertices)
+-	md.mesh.vertexonsurface = ones(md.mesh.numberofvertices)
+-	md.mesh.elementonbed = ones(md.mesh.numberofelements)
+-	md.mesh.elementonsurface = ones(md.mesh.numberofelements)
++	md.mesh.vertexonbed = numpy.ones(md.mesh.numberofvertices)
++	md.mesh.vertexonsurface = numpy.ones(md.mesh.numberofvertices)
++	md.mesh.elementonbed = numpy.ones(md.mesh.numberofelements)
++	md.mesh.elementonsurface = numpy.ones(md.mesh.numberofelements)
+ 
+ 	#Now, build the connectivity tables for this mesh.
+-	[md.mesh.vertexconnectivity]= nc.NodeConnectivity(md.mesh.elements, md.mesh.numberofvertices)
+-	[md.mesh.elementconnectivity] = ec.ElementConnectivity(md.mesh.elements, md.mesh.vertexconnectivity)
+-	
++	[md.mesh.vertexconnectivity]= NodeConnectivity(md.mesh.elements, md.mesh.numberofvertices)
++	[md.mesh.elementconnectivity] = ElementConnectivity(md.mesh.elements, md.mesh.vertexconnectivity)
++
+ 	#type of model
+ 	md.mesh.dimension = 2.
++
+ 	return md
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13520-13521.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13520-13521.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13520-13521.diff	(revision 13980)
@@ -0,0 +1,289 @@
+Index: ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13520)
++++ ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13521)
+@@ -196,6 +196,8 @@
+ 	SurfaceforcingsIssmbgradientsEnum,
+ 	SurfaceforcingsMonthlytemperaturesEnum,
+ 	SurfaceforcingsHcEnum,
++	SurfaceforcingsHrefEnum,
++	SurfaceforcingsSmbrefEnum,
+ 	SurfaceforcingsSmbPosMaxEnum,
+ 	SurfaceforcingsSmbPosMinEnum,
+ 	SurfaceforcingsAPosEnum,
+Index: ../trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp	(revision 13520)
++++ ../trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp	(revision 13521)
+@@ -71,6 +71,7 @@
+ 		case SurfaceforcingsBPosEnum:						scale=yts;break;     //m/yr
+ 		case SurfaceforcingsANegEnum:						scale=yts;break;     //m/yr
+ 		case SurfaceforcingsBNegEnum:						scale=yts;break;     //m/yr
++		case SurfaceforcingsSmbrefEnum:					scale=yts;break;     //m/yr
+ 		case MisfitEnum:                             scale=pow(yts,2);break; //(m/yr)^2
+ 		case MassFluxEnum:                           scale=pow((IssmDouble)10,-12)*yts;break; // (GigaTon/year)
+ 		case TotalSmbEnum:                           scale=pow((IssmDouble)10,-12)*yts;break; // (GigaTon/year)
+Index: ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13520)
++++ ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13521)
+@@ -205,6 +205,8 @@
+ 	      else if (strcmp(name,"SurfaceforcingsIssmbgradients")==0) return SurfaceforcingsIssmbgradientsEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsMonthlytemperatures")==0) return SurfaceforcingsMonthlytemperaturesEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsHc")==0) return SurfaceforcingsHcEnum;
++	      else if (strcmp(name,"SurfaceforcingsHref")==0) return SurfaceforcingsHrefEnum;
++	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsSmbPosMax")==0) return SurfaceforcingsSmbPosMaxEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsSmbPosMin")==0) return SurfaceforcingsSmbPosMinEnum;
+ 	      else if (strcmp(name,"SurfaceforcingsAPos")==0) return SurfaceforcingsAPosEnum;
+@@ -258,12 +260,12 @@
+ 	      else if (strcmp(name,"PrognosticAnalysis")==0) return PrognosticAnalysisEnum;
+ 	      else if (strcmp(name,"PrognosticSolution")==0) return PrognosticSolutionEnum;
+ 	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
+-	      else if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
+-	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
+          else stage=3;
+    }
+    if(stage==3){
+-	      if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
++	      if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
++	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
++	      else if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeYAnalysis")==0) return SurfaceSlopeYAnalysisEnum;
+ 	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+ 	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
+@@ -381,12 +383,12 @@
+ 	      else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
+ 	      else if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
+-	      else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
+-	      else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
++	      if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
++	      else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
++	      else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
+ 	      else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
+@@ -504,12 +506,12 @@
+ 	      else if (strcmp(name,"Scaled")==0) return ScaledEnum;
+ 	      else if (strcmp(name,"Separate")==0) return SeparateEnum;
+ 	      else if (strcmp(name,"Sset")==0) return SsetEnum;
+-	      else if (strcmp(name,"Verbose")==0) return VerboseEnum;
+-	      else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
++	      if (strcmp(name,"Verbose")==0) return VerboseEnum;
++	      else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
++	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+ 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+ 	      else if (strcmp(name,"XY")==0) return XYEnum;
+ 	      else if (strcmp(name,"XYZP")==0) return XYZPEnum;
+Index: ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13520)
++++ ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13521)
+@@ -201,6 +201,8 @@
+ 		case SurfaceforcingsIssmbgradientsEnum : return "SurfaceforcingsIssmbgradients";
+ 		case SurfaceforcingsMonthlytemperaturesEnum : return "SurfaceforcingsMonthlytemperatures";
+ 		case SurfaceforcingsHcEnum : return "SurfaceforcingsHc";
++		case SurfaceforcingsHrefEnum : return "SurfaceforcingsHref";
++		case SurfaceforcingsSmbrefEnum : return "SurfaceforcingsSmbref";
+ 		case SurfaceforcingsSmbPosMaxEnum : return "SurfaceforcingsSmbPosMax";
+ 		case SurfaceforcingsSmbPosMinEnum : return "SurfaceforcingsSmbPosMin";
+ 		case SurfaceforcingsAPosEnum : return "SurfaceforcingsAPos";
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 13520)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 13521)
+@@ -72,6 +72,8 @@
+ 	}
+ 	if(issmbgradients){
+ 	        iomodel->FetchDataToInput(elements,SurfaceforcingsHcEnum);
++	        iomodel->FetchDataToInput(elements,SurfaceforcingsHrefEnum);
++	        iomodel->FetchDataToInput(elements,SurfaceforcingsSmbrefEnum);
+ 	        iomodel->FetchDataToInput(elements,SurfaceforcingsSmbPosMaxEnum);
+ 	        iomodel->FetchDataToInput(elements,SurfaceforcingsSmbPosMinEnum);
+ 	        iomodel->FetchDataToInput(elements,SurfaceforcingsAPosEnum);
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13520)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13521)
+@@ -2262,6 +2262,8 @@
+ 	IssmDouble a_neg[NUMVERTICES];				// Hs-SMB relation parameter
+ 	IssmDouble b_neg[NUMVERTICES];				// Hs-SMB relation paremeter
+ 	IssmDouble Hc[NUMVERTICES];					// elevation of transition between accumulation regime and ablation regime
++	IssmDouble Href[NUMVERTICES];					// reference elevation from which deviations are used to calculate the SMB adjustment
++	IssmDouble Smbref[NUMVERTICES];				// reference SMB to which deviations are added
+ 	IssmDouble smb_pos_max[NUMVERTICES];		// maximum SMB value in the accumulation regime
+ 	IssmDouble smb_pos_min[NUMVERTICES];		// minimum SMB value in the accumulation regime
+    IssmDouble rho_water;                   // density of fresh water
+@@ -2272,6 +2274,8 @@
+ 
+ 	/*Recover SmbGradients*/
+ 	GetInputListOnVertices(&Hc[0],SurfaceforcingsHcEnum);
++	GetInputListOnVertices(&Href[0],SurfaceforcingsHrefEnum);
++	GetInputListOnVertices(&Smbref[0],SurfaceforcingsSmbrefEnum);
+ 	GetInputListOnVertices(&smb_pos_max[0],SurfaceforcingsSmbPosMaxEnum);
+ 	GetInputListOnVertices(&smb_pos_min[0],SurfaceforcingsSmbPosMinEnum);
+ 	GetInputListOnVertices(&a_pos[0],SurfaceforcingsAPosEnum);
+@@ -2290,15 +2294,24 @@
+    // loop over all vertices
+    for(i=0;i<NUMVERTICES;i++){
+      if(s[i]>Hc[i]){
+-	    smb[i]=a_pos[i]+b_pos[i]*s[i];
+-		 if(smb[i]>smb_pos_max[i]){smb[i]=smb_pos_max[i];}
+-		 if(smb[i]<smb_pos_min[i]){smb[i]=smb_pos_min[i];}
++		  if(Href[i]>Hc[i]){smb[i]=Smbref[i]+b_pos[i]*(s[i]-Href[i]);}
++		  if(Href[i]<=Hc[i]){smb[i]=a_pos[i]+b_pos[i]*s[i];}
++		  if(smb[i]>smb_pos_max[i]){smb[i]=smb_pos_max[i];}
++		  if(smb[i]<smb_pos_min[i]){smb[i]=smb_pos_min[i];}
+ 	  }
+ 	  else{
+-	    smb[i]=a_neg[i]+b_neg[i]*s[i];
++		  if(Href[i]>Hc[i]){smb[i]=a_neg[i]+b_neg[i]*s[i];}
++		  if(Href[i]<=Hc[i]){smb[i]=Smbref[i]+b_neg[i]*(s[i]-Href[i]);}
+ 	  }
+ 	  smb[i]=smb[i]/rho_ice;      // SMB in m/y ice		
+-	}  //end of the loop over the vertices
++  /*   printf("s %e \n",s[i]); 
++     printf("Hsref %e \n",Href[i]); 
++     printf("Hc %e \n",Hc[i]); 
++     printf("Smbref %e \n",Smbref[i]); 
++     printf("b_neg %e \n",b_neg[i]); 
++     printf("smb %e \n",smb[i]); 
++	  _error_("stop-in-code"); */
++		}  //end of the loop over the vertices
+ 	  /*Update inputs*/
+ 	  this->inputs->AddInput(new TriaP1Input(SurfaceforcingsMassBalanceEnum,&smb[0]));
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13520)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13521)
+@@ -2656,6 +2656,8 @@
+ 	IssmDouble a_neg[NUMVERTICES];				// Hs-SMB relation parameter
+ 	IssmDouble b_neg[NUMVERTICES];				// Hs-SMB relation paremeter
+ 	IssmDouble Hc[NUMVERTICES];					// elevation of transition between accumulation regime and ablation regime
++	IssmDouble Href[NUMVERTICES];					// reference elevation from which deviations are used to calculate the SMB adjustment
++	IssmDouble Smbref[NUMVERTICES];				// reference SMB to which deviations are added
+ 	IssmDouble smb_pos_max[NUMVERTICES];		// maximum SMB value in the accumulation regime
+ 	IssmDouble smb_pos_min[NUMVERTICES];		// minimum SMB value in the accumulation regime
+    IssmDouble rho_water;                   // density of fresh water
+@@ -2666,6 +2668,8 @@
+ 
+ 	/*Recover SmbGradients*/
+ 	GetInputListOnVertices(&Hc[0],SurfaceforcingsHcEnum);
++	GetInputListOnVertices(&Href[0],SurfaceforcingsHrefEnum);
++	GetInputListOnVertices(&Smbref[0],SurfaceforcingsSmbrefEnum);
+ 	GetInputListOnVertices(&smb_pos_max[0],SurfaceforcingsSmbPosMaxEnum);
+ 	GetInputListOnVertices(&smb_pos_min[0],SurfaceforcingsSmbPosMinEnum);
+ 	GetInputListOnVertices(&a_pos[0],SurfaceforcingsAPosEnum);
+@@ -2682,17 +2686,18 @@
+    rho_water=matpar->GetRhoFreshwater();
+ 			
+    // loop over all vertices
+-   for(i=0;i<NUMVERTICES;i++){
++ for(i=0;i<NUMVERTICES;i++){
+      if(s[i]>Hc[i]){
+-	    smb[i]=a_pos[i]+b_pos[i]*s[i];
+-		 if(smb[i]>smb_pos_max[i]){smb[i]=smb_pos_max[i];}
+-		 if(smb[i]<smb_pos_min[i]){smb[i]=smb_pos_min[i];}
++		  if(Href[i]>Hc[i]){smb[i]=Smbref[i]+b_pos[i]*(s[i]-Href[i]);}
++		  if(Href[i]<=Hc[i]){smb[i]=a_pos[i]+b_pos[i]*s[i];}
++		  if(smb[i]>smb_pos_max[i]){smb[i]=smb_pos_max[i];}
++		  if(smb[i]<smb_pos_min[i]){smb[i]=smb_pos_min[i];}
+ 	  }
+ 	  else{
+-	    smb[i]=a_neg[i]+b_neg[i]*s[i];
++		  if(Href[i]>Hc[i]){smb[i]=a_neg[i]+b_neg[i]*s[i];}
++		  if(Href[i]<=Hc[i]){smb[i]=Smbref[i]+b_neg[i]*(s[i]-Href[i]);}
+ 	  }
+ 	  smb[i]=smb[i]/rho_ice;      // SMB in m/y ice		
+-	  
+ 	}  //end of the loop over the vertices
+ 	  /*Update inputs*/
+ 	  this->inputs->AddInput(new PentaP1Input(SurfaceforcingsMassBalanceEnum,&smb[0]));
+@@ -3653,11 +3658,11 @@
+ 			GetElementSizes(&hx,&hy,&hz);
+ 			vel=sqrt(pow(vx,2.)+pow(vy,2.)+pow(vz,2.))+1.e-14;
+ 			h=sqrt( pow(hx*vx/vel,2.) + pow(hy*vy/vel,2.) + pow(hz*vz/vel,2.));
++			vz=0;
++			K[0][0]=h/(2*vel)*(vx*vx);  K[0][1]=h/(2*vel)*(vx*vy); K[0][2]=h/(2*vel)*(vx*vz);
++			K[1][0]=h/(2*vel)*(vy*vx);  K[1][1]=h/(2*vel)*(vy*vy); K[1][2]=h/(2*vel)*(vy*vz);
++			K[2][0]=h/(2*vel)*(vz*vx);  K[2][1]=h/(2*vel)*(vz*vy); K[2][2]=h/(2*vel)*(vz*vz);
+ 
+-			K[0][0]=h/(2*vel)*fabs(vx*vx);  K[0][1]=h/(2*vel)*fabs(vx*vy); K[0][2]=h/(2*vel)*fabs(vx*vz);
+-			K[1][0]=h/(2*vel)*fabs(vy*vx);  K[1][1]=h/(2*vel)*fabs(vy*vy); K[1][2]=h/(2*vel)*fabs(vy*vz);
+-			K[2][0]=h/(2*vel)*fabs(vz*vx);  K[2][1]=h/(2*vel)*fabs(vz*vy); K[2][2]=h/(2*vel)*fabs(vz*vz);
+-
+ 			D_scalar_stab=gauss->weight*Jdet;
+ 			if(reCast<bool,IssmDouble>(dt)) D_scalar_stab=D_scalar_stab*dt;
+ 			for(i=0;i<3;i++) for(j=0;j<3;j++) K[i][j] = D_scalar_stab*K[i][j];
+@@ -4313,7 +4318,7 @@
+ 	IssmDouble B[numdof];
+ 	IssmDouble B_average,s_average;
+ 	int*   doflist=NULL;
+-	//IssmDouble pressure[numdof];
++	IssmDouble pressure[numdof];
+ 
+ 	/*Get dof list: */
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+@@ -4321,9 +4326,9 @@
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdof;i++){
+ 		values[i]=solution[doflist[i]];
+-		//GetInputListOnVertices(&pressure[0],PressureEnum);
+-		//if(values[i]>matpar->TMeltingPoint(pressure[i])) values[i]=matpar->TMeltingPoint(pressure[i]);
+-		//if(values[i]<matpar->TMeltingPoint(pressure[i])-50) values[i]=matpar->TMeltingPoint(pressure[i])-50;
++		GetInputListOnVertices(&pressure[0],PressureEnum);
++		if(values[i]>matpar->TMeltingPoint(pressure[i])) values[i]=matpar->TMeltingPoint(pressure[i]);
++		if(values[i]<matpar->TMeltingPoint(pressure[i])-50) values[i]=matpar->TMeltingPoint(pressure[i])-50;
+ 
+ 		/*Check solution*/
+ 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
+Index: ../trunk-jpl/src/m/classes/surfaceforcings.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/surfaceforcings.m	(revision 13520)
++++ ../trunk-jpl/src/m/classes/surfaceforcings.m	(revision 13521)
+@@ -11,6 +11,8 @@
+ 		issmbgradients = 0;
+ 		isdelta18o = 0;
+ 		hc = NaN;
++		href = NaN;
++		smbref = NaN;
+ 		smb_pos_max = NaN;
+ 		smb_pos_min = NaN;
+ 		a_pos = NaN;
+@@ -59,6 +61,8 @@
+ 					end
+ 				elseif(obj.issmbgradients)
+ 					md = checkfield(md,'surfaceforcings.hc','forcing',1,'NaN',1);
++					md = checkfield(md,'surfaceforcings.href','forcing',1,'NaN',1);
++					md = checkfield(md,'surfaceforcings.smbref','forcing',1,'NaN',1);
+ 					md = checkfield(md,'surfaceforcings.smb_pos_max','forcing',1,'NaN',1);
+ 					md = checkfield(md,'surfaceforcings.smb_pos_min','forcing',1,'NaN',1);
+ 					md = checkfield(md,'surfaceforcings.a_pos','forcing',1,'NaN',1);
+@@ -88,6 +92,8 @@
+ 			fielddisplay(obj,'delta18o_surface','surface elevation of the delta18o site, required if pdd is activated and delta18o activated');
+ 			fielddisplay(obj,'issmbgradients','is smb gradients method activated (0 or 1, default is 0)');
+ 			fielddisplay(obj,'hc',' elevation of intersection between accumulation and ablation regime required if smb gradients is activated');
++			fielddisplay(obj,'href',' reference elevation from which deviation is used to calculate SMB adjustment in smb gradients method');
++			fielddisplay(obj,'smbref',' reference smb from which deviation is calculated in smb gradients method');
+ 			fielddisplay(obj,'smb_pos_max',' maximum value of positive smb required if smb gradients is activated');
+ 			fielddisplay(obj,'smb_pos_min',' minimum value of positive smb required if smb gradients is activated');
+ 			fielddisplay(obj,'a_pos',' intercept of hs - smb regression line for accumulation regime required if smb gradients is activated');
+@@ -116,6 +122,8 @@
+ 			WriteData(fid,'object',obj,'fieldname','issmbgradients','format','Boolean');
+ 			if obj.issmbgradients,
+ 				WriteData(fid,'object',obj,'fieldname','hc','format','DoubleMat','mattype',1);
++				WriteData(fid,'object',obj,'fieldname','href','format','DoubleMat','mattype',1);
++				WriteData(fid,'object',obj,'fieldname','smbref','format','DoubleMat','mattype',1);
+ 				WriteData(fid,'object',obj,'fieldname','smb_pos_max','format','DoubleMat','mattype',1);
+ 				WriteData(fid,'object',obj,'fieldname','smb_pos_min','format','DoubleMat','mattype',1);
+ 				WriteData(fid,'object',obj,'fieldname','a_pos','format','DoubleMat','mattype',1);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13522-13523.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13522-13523.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13522-13523.diff	(revision 13980)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13522)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13523)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=493;
++macro=495;
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13522)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13523)
+@@ -1858,6 +1858,26 @@
+ 
+ 	return StringToEnum('SurfaceforcingsHc')[0]
+ 
++def SurfaceforcingsHrefEnum():
++	"""
++	SURFACEFORCINGSHREFENUM - Enum of SurfaceforcingsHref
++
++	   Usage:
++	      macro=SurfaceforcingsHrefEnum()
++	"""
++
++	return StringToEnum('SurfaceforcingsHref')[0]
++
++def SurfaceforcingsSmbrefEnum():
++	"""
++	SURFACEFORCINGSSMBREFENUM - Enum of SurfaceforcingsSmbref
++
++	   Usage:
++	      macro=SurfaceforcingsSmbrefEnum()
++	"""
++
++	return StringToEnum('SurfaceforcingsSmbref')[0]
++
+ def SurfaceforcingsSmbPosMaxEnum():
+ 	"""
+ 	SURFACEFORCINGSSMBPOSMAXENUM - Enum of SurfaceforcingsSmbPosMax
+@@ -4946,5 +4966,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 493
++	return 495
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13523-13524.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13523-13524.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13523-13524.diff	(revision 13980)
@@ -0,0 +1,267 @@
+Index: ../trunk-jpl/src/m/mesh/ElementsFromEdge.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/ElementsFromEdge.m	(revision 13523)
++++ ../trunk-jpl/src/m/mesh/ElementsFromEdge.m	(revision 13524)
+@@ -1,15 +1,15 @@
+-function edgeelements=ElementsFromEdge(elements,A,B) 
++function edgeelements=ElementsFromEdge(elements,A,B)
+ %ELEMENTSFROMEDGE: find elements connected to one edge defined by nodes A and B
+ %
+-% Usage: edgeelements=ElementsFromEdge(elements,A,B) 
++%   Usage: edgeelements=ElementsFromEdge(elements,A,B) 
+ %
+-% Eg:    edgeelements=ElementsFromEdge(md.mesh.elements,tip1,tip2)
++%   Eg:    edgeelements=ElementsFromEdge(md.mesh.elements,tip1,tip2)
+ %
+ %
+ edgeelements=find(...
+-(elements(:,1)==A & elements(:,2)==B )| ...
+-(elements(:,1)==A & elements(:,3)==B )| ...
+-(elements(:,2)==A & elements(:,3)==B )| ...
+-(elements(:,2)==A & elements(:,1)==B )| ...
+-(elements(:,3)==A & elements(:,1)==B )| ...
+-(elements(:,3)==A & elements(:,2)==B ));
++	(elements(:,1)==A & elements(:,2)==B )| ...
++	(elements(:,1)==A & elements(:,3)==B )| ...
++	(elements(:,2)==A & elements(:,3)==B )| ...
++	(elements(:,2)==A & elements(:,1)==B )| ...
++	(elements(:,3)==A & elements(:,1)==B )| ...
++	(elements(:,3)==A & elements(:,2)==B ));
+Index: ../trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.py	(revision 0)
++++ ../trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.py	(revision 13524)
+@@ -0,0 +1,110 @@
++import numpy
++from ElementsFromEdge import *
++from MatlabFuncs import *
++
++def meshprocessoutsiderifts(md,domainoutline):
++	"""
++	MESHPROCESSOUTSIDERIFTS - process rifts when they touch the domain outline
++
++	   Usage:
++	      md=meshprocessoutsiderifts(md,domain)
++
++	"""
++
++	#go through rifts, and figure out which ones touch the domain outline
++	for rift in md.rifts.riftstruct:
++	
++		#first, flag nodes that belong to the domain outline
++		flags=ContourToMesh(md.mesh.elements,md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),domainoutline,'node',0)
++
++		tips=rift.tips
++		outsidetips=tips[numpy.nonzero(flags[rift.tips-1])[0]]
++
++		#we have found outsidetips, tips that touch the domain outline. go through them
++		for tip in outsidetips:
++		
++			#find tip in the segments, take first segment (there should be 2) that holds tip, 
++			#and node_connected_to_tip is the other node on this segment:
++			tipindex=numpy.nonzero(rift.segments[:,0]==tip)[0]
++			if tipindex:
++				tipindex=tipindex[0]
++				node_connected_to_tip=rift.segments[tipindex,1]
++			else:
++				tipindex=numpy.nonzero(rift.segments[:,1]==tip)[0]
++				tipindex=tipindex[0]
++				node_connected_to_tip=rift.segments[tipindex,1]
++
++			#ok, we have the tip node, and the first node connected to it, on the rift. Now, 
++			#identify all the elements that are connected to the tip, and that are on the same 
++			#side of the rift.
++			A=tip
++			B=node_connected_to_tip
++
++			elements=numpy.empty(0)
++
++			while flags(B):    #as long as B does not belong to the domain outline, keep looking.
++				#detect elements on edge A,B:
++				edgeelements=ElementsFromEdge(md.mesh.elements,A,B)
++				#rule out those we already detected
++				already_detected=ismember(edgeelements,elements)
++				nextelement=edgeelements(numpy.nonzero(numpy.logical_not(already_detected))[0])
++				#add new detected element to the list of elements we are looking for.
++				elements=numpy.concatenate((elements,nextelement))
++				#new B:
++				B=md.mesh.elements[nextelement-1,numpy.nonzero(numpy.logical_not(ismember(md.mesh.elements[nextelement-1,:],numpy.array([A,B]))))]
++		
++			#take the list of elements on one side of the rift that connect to the tip, 
++			#and duplicate the tip on them, so as to open the rift to the outside.
++			num=numpy.size(md.mesh.x)+1
++			md.mesh.x=numpy.concatenate((md.mesh.x,md.mesh.x[tip]))
++			md.mesh.y=numpy.concatenate((md.mesh.y,md.mesh.y[tip]))
++			md.mesh.numberofvertices=num
++		
++			#replace tip in elements
++			newelements=md.mesh.elements[elements.astype(int)-1,:]
++			pos=numpy.nonzero(newelements==tip)
++			newelements[pos]=num
++			md.mesh.elements[elements.astype(int)-1,:]=newelements
++			rift.tips=numpy.concatenate((rift.tips,num))
++
++			#deal with segments
++			tipsegments=numpy.nonzero(numpy.logical_or(md.mesh.segments[:,0]==tip,md.mesh.segments[:,1]==tip))[0]
++			for segment_index in tipsegments:
++				pos=numpy.nonzero(md.mesh.segments[segment_index,0:2]!=tip)[0]
++				other_node=md.mesh.segments[segment_index,pos]
++				if not isconnected(md.mesh.elements,other_node,tip):
++					pos=numpy.nonzero(md.mesh.segments[segment_index,0:2]==tip)[0]
++					md.mesh.segments[segment_index,pos]=num
++
++	#Fill in rest of fields:
++	md.mesh.numberofelements=numpy.size(md.mesh.elements,axis=0)
++	md.mesh.numberofvertices=numpy.size(md.mesh.x)
++	md.mesh.z=numpy.zeros(md.mesh.numberofvertices)
++	md.mesh.vertexonboundary=numpy.zeros(numpy.size(md.mesh.x))
++	md.mesh.vertexonboundary[md.mesh.segments[:,0:2].astype(int)-1]=1
++	md.rifts.numrifts=length(md.rifts.riftstruct)
++	md.flowequation.element_equation=3.*numpy.ones(md.mesh.numberofelements)
++	md.mesh.vertexonbed=numpy.ones(md.mesh.numberofvertices)
++	md.mesh.vertexonsurface=numpy.ones(md.mesh.numberofvertices)
++	md.mesh.elementonbed=numpy.ones(md.mesh.numberofelements)
++	md.mesh.elementonsurface=numpy.ones(md.mesh.numberofelements)
++
++	return md
++
++def isconnected(elements,A,B):    # {{{
++	"""
++	ISCONNECTED: are two nodes connected by a triangulation?
++
++	   Usage: flag=isconnected(elements,A,B)
++
++	"""
++
++	elements=ElementsFromEdge(elements,A,B)
++	if not elements:
++		flag=0
++	else:
++		flag=1
++
++	return flag
++	# }}}
++
+Index: ../trunk-jpl/src/m/mesh/rifts/meshprocessrifts.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/meshprocessrifts.py	(revision 0)
++++ ../trunk-jpl/src/m/mesh/rifts/meshprocessrifts.py	(revision 13524)
+@@ -0,0 +1,64 @@
++import numpy
++#from TriMeshProcessRifts import *
++from ContourToMesh import *
++from meshprocessoutsiderifts import *
++from GetAreas import *
++
++def meshprocessrifts(md,domainoutline):
++	"""
++	MESHPROCESSRIFTS - process mesh when rifts are present
++
++	   split rifts inside mesh (rifts are defined by presence of
++	   segments inside the domain outline)
++	   if domain outline is provided, check for rifts that could touch it, and open them up.
++
++	   Usage:
++	      md=meshprocessrifts(md,domainoutline)
++
++	   Ex: 
++	      md=meshprocessrifts(md,'DomainOutline.exp');
++	
++	"""
++
++	#Call MEX file
++	[md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers,md.rifts.riftstruct]=TriMeshProcessRifts(md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers)
++	if not isinstance(md.rifts.riftstruct,'list') or not md.rifts.riftstruct:
++		raise RuntimeError("TriMeshProcessRifts did not find any rift")
++
++	#Fill in rest of fields:
++	numrifts=len(md.rifts.riftstruct)
++	md.mesh.numberofelements=numpy.size(md.mesh.elements,axis=0)
++	md.mesh.numberofvertices=numpy.size(md.mesh.x)
++	md.mesh.z=numpy.zeros(md.mesh.numberofvertices)
++	md.mesh.vertexonboundary=numpy.zeros(numpy.size(md.mesh.x))
++	md.mesh.vertexonboundary[md.mesh.segments[:,0:2].astype(int)-1]=1
++	md.mesh.vertexonbed=numpy.ones(md.mesh.numberofvertices)
++	md.mesh.vertexonsurface=numpy.ones(md.mesh.numberofvertices)
++	md.mesh.elementonbed=numpy.ones(md.mesh.numberofelements)
++	md.mesh.elementonsurface=numpy.ones(md.mesh.numberofelements)
++
++	#get coordinates of rift tips
++	for rift in md.rifts.riftstruct:
++		rift.tip1coordinates=numpy.hstack((md.mesh.x[rift.tips[0].astype(int)-1].reshape(-1,1),md.mesh.y[rift.tips[0].astype(int)-1].reshape(-1,1)))
++		rift.tip2coordinates=numpy.hstack((md.mesh.x[rift.tips[1].astype(int)-1].reshape(-1,1),md.mesh.y[rift.tips[1].astype(int)-1].reshape(-1,1)))
++
++	#In case we have rifts that open up the domain outline, we need to open them: 
++	flags=ContourToMesh(md.mesh.elements,md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),domainoutline,'node',0)
++	found=0
++	for rift in md.rifts.riftstruct:
++		if flags[rift.tips[0].astype(int)-1]==0:
++			found=1
++			break
++		if flags[rift.tips[1].astype(int)-1]==0:
++			found=1
++			break
++	if found:
++		md=meshprocessoutsiderifts(md,domainoutline)
++
++	#get elements that are not correctly oriented in the correct direction:
++	aires=GetAreas(md.mesh.elements,md.mesh.x,md.mesh.y)
++	pos=numpy.nonzero(aires<0)[0]
++	md.mesh.elements[pos,:]=numpy.array([[md.mesh.elements[pos,1],md.mesh.elements[pos,0],md.mesh.elements[pos,2]]])
++
++	return md
++
+Index: ../trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.m	(revision 13523)
++++ ../trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.m	(revision 13524)
+@@ -40,7 +40,7 @@
+ 
+ 		elements=[];
+ 
+-		while  flags(B), %as long as B does not belong to the domain outline, keep looking.
++		while flags(B), %as long as B does not belong to the domain outline, keep looking.
+ 			%detect elements on edge A,B:
+ 			edgeelements=ElementsFromEdge(md.mesh.elements,A,B);
+ 			%rule out those we already detected
+@@ -68,7 +68,7 @@
+ 
+ 		%deal with segments
+ 		tipsegments=find((md.mesh.segments(:,1)==tip) | (md.mesh.segments(:,2)==tip));
+-		for  k=1:length(tipsegments),
++		for k=1:length(tipsegments),
+ 			segment_index=tipsegments(k);
+ 			pos=find(md.mesh.segments(segment_index,1:2)~=tip);
+ 			other_node=md.mesh.segments(segment_index,pos);
+Index: ../trunk-jpl/src/m/mesh/ElementsFromEdge.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/ElementsFromEdge.py	(revision 0)
++++ ../trunk-jpl/src/m/mesh/ElementsFromEdge.py	(revision 13524)
+@@ -0,0 +1,27 @@
++import numpy
++
++def ElementsFromEdge(elements,A,B):
++	"""
++	ELEMENTSFROMEDGE: find elements connected to one edge defined by nodes A and B
++
++	   Usage: edgeelements=ElementsFromEdge(elements,A,B) 
++
++	   Eg:    edgeelements=ElementsFromEdge(md.mesh.elements,tip1,tip2)
++
++	"""
++
++	edgeelements=numpy.nonzero(\
++		numpy.logical_or( \
++		numpy.logical_or( \
++		numpy.logical_or(numpy.logical_and(elements[:,0]==A,elements[:,1]==B), \
++						 numpy.logical_and(elements[:,0]==A,elements[:,2]==B)) \
++		, \
++		numpy.logical_or(numpy.logical_and(elements[:,1]==A,elements[:,2]==B), \
++						 numpy.logical_and(elements[:,1]==A,elements[:,0]==B)) \
++		), \
++		numpy.logical_or(numpy.logical_and(elements[:,2]==A,elements[:,0]==B), \
++						 numpy.logical_and(elements[:,2]==A,elements[:,1]==B)) \
++		))[0]+1
++
++	return edgeelements
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13524-13525.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13524-13525.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13524-13525.diff	(revision 13980)
@@ -0,0 +1,225 @@
+Index: ../trunk-jpl/test/NightlyRun/test217.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test217.py	(revision 13525)
+@@ -0,0 +1,94 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test217.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from paterson import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++
++# redo the parameter file for this special shelf. 
++# constant thickness, constrained (vy=0) flow into an icefront, 
++# from 0 m/yr at the grounding line.
++
++# tighten
++md.diagnostic.restol=10**-4
++
++# needed later
++ymin=min(md.mesh.y)
++ymax=max(md.mesh.y)
++xmin=min(md.mesh.x)
++xmax=max(md.mesh.x)
++
++di=md.materials.rho_ice/md.materials.rho_water
++
++h=1000.
++md.geometry.thickness=h*ones((md.mesh.numberofvertices,1))
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++
++# Initial velocity and pressure
++md.initialization.vx=zeros((md.mesh.numberofvertices,1))
++md.initialization.vy=zeros((md.mesh.numberofvertices,1))
++md.initialization.vz=zeros((md.mesh.numberofvertices,1))
++md.initialization.pressure=zeros((md.mesh.numberofvertices,1))
++
++# Materials
++md.initialization.temperature=(273.-20.)*ones((md.mesh.numberofvertices,1))
++md.materials.rheology_B=paterson(md.initialization.temperature)
++md.materials.rheology_n=3*ones((md.mesh.numberofelements,1))
++
++# Boundary conditions:
++md.diagnostic.spcvx=float(nan)*ones((md.mesh.numberofvertices,1))
++md.diagnostic.spcvy=float(nan)*ones((md.mesh.numberofvertices,1))
++md.diagnostic.spcvz=float(nan)*ones((md.mesh.numberofvertices,1))
++
++# constrain flanks to 0 normal velocity
++pos=numpy.nonzero(numpy.logical_or(md.mesh.x==xmin,md.mesh.x==xmax))
++md.diagnostic.spcvx[pos]=0
++md.diagnostic.spcvz[pos]=float(nan)
++
++# constrain grounding line to 0 velocity
++pos=numpy.nonzero(md.mesh.y==ymin)
++md.diagnostic.spcvx[pos]=0
++md.diagnostic.spcvy[pos]=0
++
++# icefront
++nodeonicefront=zeros(md.mesh.numberofvertices)
++pos=numpy.nonzero(md.mesh.y==ymax)
++nodeonicefront[pos]=1
++pos=numpy.nonzero(numpy.logical_or(nodeonicefront[md.mesh.segments[:,0].astype(int)-1],nodeonicefront[md.mesh.segments[:,1].astype(int)-1]))[0]
++diagnostic.icefront=md.mesh.segments[pos,:]
++diagnostic.icefront=numpy.hstack((diagnostic.icefront,1.*md.mask.elementonfloatingice[diagnostic.icefront[:,-1].astype(int)-1].reshape(-1,1)))
++md.diagnostic.icefront=diagnostic.icefront
++
++md=solve(md,DiagnosticSolutionEnum())
++
++# create analytical solution: strain rate is constant = ((rho_ice*g*h)/4B)^3 (Paterson, 4th Edition, page 292.
++# ey_c=(md.materials.rho_ice*md.constants.g*(1-di)*md.geometry.thickness./(4*md.materials.rheology_B)).^3;
++# vy_c=ey_c.*md.mesh.y*md.constants.yts;
++
++# Fields and tolerances to track changes
++field_names     =['Vy']
++field_tolerances=[1e-13]
++field_values=[md.results['DiagnosticSolution'][1]['Vy']]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test217.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test217.py	(revision 13524)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test217.py	(revision 13525)
+@@ -1,121 +0,0 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test217.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+-from MatlabFuncs import *
+-from model import *
+-from EnumDefinitions import *
+-from numpy import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from solve import *
+-
+-md=triangle(model(),'../Exp/Square.exp',150000)
+-md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
+-md.cluster=generic('name',oshostname(),'np',3)
+-
+-
+-# redo the parameter file for this special shelf. 
+-
+-# constant thickness, constrained (vy=0) flow into an icefront, 
+-
+-# from 0 m/yr at the grounding line.
+-
+-
+-
+-# tighten
+-
+-md.diagnostic.restol=10^-4
+-
+-
+-# needed later
+-
+-ymin=min(md.mesh.y)
+-ymax=max(md.mesh.y)
+-xmin=min(md.mesh.x)
+-xmax=max(md.mesh.x)
+-
+-
+-di=md.materials.rho_ice/md.materials.rho_water
+-
+-
+-h=1000
+-md.geometry.thickness=h*ones(md.mesh.numberofvertices,1)
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness
+-
+-
+-# Initial velocity and pressure
+-
+-md.initialization.vx=zeros(md.mesh.numberofvertices,1)
+-md.initialization.vy=zeros(md.mesh.numberofvertices,1)
+-md.initialization.vz=zeros(md.mesh.numberofvertices,1)
+-md.initialization.pressure=zeros(md.mesh.numberofvertices,1)
+-
+-
+-# Materials
+-
+-md.initialization.temperature=(273-20)*ones(md.mesh.numberofvertices,1)
+-md.materials.rheology_B=paterson(md.initialization.temperature)
+-md.materials.rheology_n=3*ones(md.mesh.numberofelements,1)
+-
+-
+-# Boundary conditions:
+-
+-md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1)
+-md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1)
+-md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1)
+-
+-
+-# constrain flanks to 0 normal velocity
+-
+-pos=numpy.nonzero(md.mesh.x==xmin | md.mesh.x==xmax)
+-md.diagnostic.spcvx(pos)=0
+-md.diagnostic.spcvz(pos)=NaN
+-
+-
+-# constrain grounding line to 0 velocity
+-
+-pos=numpy.nonzero(md.mesh.y==ymin)
+-md.diagnostic.spcvx(pos)=0
+-md.diagnostic.spcvy(pos)=0
+-
+-
+-# icefront
+-
+-nodeonicefront=zeros(md.mesh.numberofvertices,1)
+-pos=numpy.nonzero(md.mesh.y==ymax)
+-nodeonicefront(pos)=1
+-pos=find(nodeonicefront(md.mesh.segments(:,1)) | nodeonicefront(md.mesh.segments(:,2))) diagnostic.icefront=md.mesh.segments(pos,:)
+-diagnostic.icefront=[diagnostic.icefront 1*md.mask.elementonfloatingice(diagnostic.icefront(:,end))]
+-md.diagnostic.icefront=diagnostic.icefront
+-
+-
+-md=solve(md,DiagnosticSolutionEnum())
+-
+-
+-# create analytical solution: strain rate is constant = ((rho_ice*g*h)/4B)^3 (Paterson, 4th Edition, page 292.
+-
+-# ey_c=(md.materials.rho_ice*md.constants.g*(1-di)*md.geometry.thickness./(4*md.materials.rheology_B)).^3;
+-
+-# vy_c=ey_c.*md.mesh.y*md.constants.yts;
+-
+-
+-
+-# Fields and tolerances to track changes
+-
+-field_names     =['Vy']
+-field_tolerances=[1e-13]
+-field_values=[md.results['DiagnosticSolution'][1]['Vy']]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13525-13526.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13525-13526.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13525-13526.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/android/helloworld/Google Play Store App Release Tutorial.rtf
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Google Play Store App Release Tutorial.rtf	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Google Play Store App Release Tutorial.rtf	(revision 13526)
+@@ -0,0 +1,16 @@
++{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf470
++{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
++{\colortbl;\red255\green255\blue255;}
++\margl1440\margr1440\vieww10800\viewh8400\viewkind0
++\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural
++
++\f0\fs24 \cf0 This is a 16-step-by-step guidelines to get an android app on the Google Play Store.\
++\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural
++\cf0 http://developer.android.com/distribute/googleplay/publish/preparing.html\
++\
++\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural
++\cf0 We need to make a developer account first and start from there.\
++\
++We don't have to worry about the public accessing our "beta" apps since it's not released/published to the public yet. Once everything is done, we can publish it and it's ready for public use.\
++\
++}
+\ No newline at end of file
Index: /issm/oecreview/Archive/13393-13976/ISSM-13526-13527.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13526-13527.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13526-13527.diff	(revision 13980)
@@ -0,0 +1,168 @@
+Index: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/CLibHelloWorld.dll
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/CLibHelloWorld.dll
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/HelloWorldJNI/CLibHelloWorld.dll	(revision 13526)
++++ ../trunk-jpl/src/android/helloworld/HelloWorldJNI/CLibHelloWorld.dll	(revision 13527)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/CLibHelloWorld.dll
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.class	(revision 13526)
++++ ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.class	(revision 13527)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Results.jpg
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Results.jpg
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Results.jpg	(revision 13526)
++++ ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Results.jpg	(revision 13527)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Results.jpg
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.h
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.h	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.h	(revision 13527)
+@@ -0,0 +1,21 @@
++/* DO NOT EDIT THIS FILE - it is machine generated */
++#include <jni.h>
++/* Header for class HelloWorld */
++
++#ifndef _Included_HelloWorld
++#define _Included_HelloWorld
++#ifdef __cplusplus
++extern "C" {
++#endif
++/*
++ * Class:     HelloWorld
++ * Method:    print
++ * Signature: ()V
++ */
++JNIEXPORT void JNICALL Java_HelloWorld_print
++  (JNIEnv *, jobject);
++
++#ifdef __cplusplus
++}
++#endif
++#endif
+
+Property changes on: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.h
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Main.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Main.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Main.java	(revision 13527)
+@@ -0,0 +1,8 @@
++class Main
++{
++	public static void main (String[] args)
++	{
++		HelloWorld hw = new HelloWorld();
++		hw.print();
++	}
++}
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Main.java
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Main.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Main.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Main.class	(revision 13526)
++++ ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Main.class	(revision 13527)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/Main.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.java	(revision 13527)
+@@ -0,0 +1,16 @@
++class HelloWorld
++{
++	public native void print(); //native method
++	static //static initializer code
++	{
++		System.loadLibrary("CLibHelloWorld");
++	}
++}
++class Main
++{
++	public static void main (String[] args)
++	{
++		HelloWorld hw = new HelloWorld();
++		hw.print();
++	}
++}
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.java
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.cpp
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.cpp	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.cpp	(revision 13527)
+@@ -0,0 +1,8 @@
++#include <stdio.h>
++#include <jni.h>
++#include "HelloWorld.h"
++JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)
++{
++	printf("Hello World!\n");
++	return;
++}
+\ No newline at end of file
+
+Property changes on: ../trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.cpp
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13527-13528.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13527-13528.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13527-13528.diff	(revision 13980)
@@ -0,0 +1,42 @@
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13527)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13528)
+@@ -3658,11 +3658,11 @@
+ 			GetElementSizes(&hx,&hy,&hz);
+ 			vel=sqrt(pow(vx,2.)+pow(vy,2.)+pow(vz,2.))+1.e-14;
+ 			h=sqrt( pow(hx*vx/vel,2.) + pow(hy*vy/vel,2.) + pow(hz*vz/vel,2.));
+-			vz=0;
+-			K[0][0]=h/(2*vel)*(vx*vx);  K[0][1]=h/(2*vel)*(vx*vy); K[0][2]=h/(2*vel)*(vx*vz);
+-			K[1][0]=h/(2*vel)*(vy*vx);  K[1][1]=h/(2*vel)*(vy*vy); K[1][2]=h/(2*vel)*(vy*vz);
+-			K[2][0]=h/(2*vel)*(vz*vx);  K[2][1]=h/(2*vel)*(vz*vy); K[2][2]=h/(2*vel)*(vz*vz);
+ 
++			K[0][0]=h/(2*vel)*fabs(vx*vx);  K[0][1]=h/(2*vel)*fabs(vx*vy); K[0][2]=h/(2*vel)*fabs(vx*vz);
++			K[1][0]=h/(2*vel)*fabs(vy*vx);  K[1][1]=h/(2*vel)*fabs(vy*vy); K[1][2]=h/(2*vel)*fabs(vy*vz);
++			K[2][0]=h/(2*vel)*fabs(vz*vx);  K[2][1]=h/(2*vel)*fabs(vz*vy); K[2][2]=h/(2*vel)*fabs(vz*vz);
++
+ 			D_scalar_stab=gauss->weight*Jdet;
+ 			if(reCast<bool,IssmDouble>(dt)) D_scalar_stab=D_scalar_stab*dt;
+ 			for(i=0;i<3;i++) for(j=0;j<3;j++) K[i][j] = D_scalar_stab*K[i][j];
+@@ -4318,7 +4318,7 @@
+ 	IssmDouble B[numdof];
+ 	IssmDouble B_average,s_average;
+ 	int*   doflist=NULL;
+-	IssmDouble pressure[numdof];
++	//IssmDouble pressure[numdof];
+ 
+ 	/*Get dof list: */
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+@@ -4326,9 +4326,9 @@
+ 	/*Use the dof list to index into the solution vector: */
+ 	for(i=0;i<numdof;i++){
+ 		values[i]=solution[doflist[i]];
+-		GetInputListOnVertices(&pressure[0],PressureEnum);
+-		if(values[i]>matpar->TMeltingPoint(pressure[i])) values[i]=matpar->TMeltingPoint(pressure[i]);
+-		if(values[i]<matpar->TMeltingPoint(pressure[i])-50) values[i]=matpar->TMeltingPoint(pressure[i])-50;
++		//GetInputListOnVertices(&pressure[0],PressureEnum);
++		//if(values[i]>matpar->TMeltingPoint(pressure[i])) values[i]=matpar->TMeltingPoint(pressure[i]);
++		//if(values[i]<matpar->TMeltingPoint(pressure[i])-50) values[i]=matpar->TMeltingPoint(pressure[i])-50;
+ 
+ 		/*Check solution*/
+ 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
Index: /issm/oecreview/Archive/13393-13976/ISSM-13528-13529.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13528-13529.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13528-13529.diff	(revision 13980)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/test/NightlyRun/test328.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test328.m	(revision 13528)
++++ ../trunk-jpl/test/NightlyRun/test328.m	(revision 13529)
+@@ -11,6 +11,15 @@
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y;
+ md.surfaceforcings.hc=(md.surfaceforcings.a_pos-md.surfaceforcings.a_neg)./(md.surfaceforcings.b_neg-md.surfaceforcings.b_pos);
+ md.transient.requested_outputs=TotalSmbEnum();
++md.surfaceforcings.href=md.geometry.surface;
++for i=1:size(md.surfaceforcings.hc),
++	if md.geometry.surface(i)<md.surfaceforcings.hc(i)
++		smbref(i)=md.surfaceforcings.a_neg(i)+md.surfaceforcings.b_neg(i)*md.geometry.surface(i);
++	else
++		smbref(i)=md.surfaceforcings.a_pos(i)+md.surfaceforcings.b_pos(i)*md.geometry.surface(i);
++	end
++end
++md.surfaceforcings.smbref=smbref';
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum);
+ 
+Index: ../trunk-jpl/test/NightlyRun/test329.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.m	(revision 13528)
++++ ../trunk-jpl/test/NightlyRun/test329.m	(revision 13529)
+@@ -11,6 +11,15 @@
+ md.surfaceforcings.a_neg=-20000. - 0.00005*md.mesh.x + 0.0001*md.mesh.y;
+ md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y;
+ md.surfaceforcings.hc=(md.surfaceforcings.a_pos-md.surfaceforcings.a_neg)./(md.surfaceforcings.b_neg-md.surfaceforcings.b_pos);
++md.surfaceforcings.href=md.geometry.surface;
++for i=1:size(md.surfaceforcings.hc),
++	if md.geometry.surface(i)<md.surfaceforcings.hc(i)
++		smbref(i)=md.surfaceforcings.a_neg(i)+md.surfaceforcings.b_neg(i)*md.geometry.surface(i);
++	else
++		smbref(i)=md.surfaceforcings.a_pos(i)+md.surfaceforcings.b_pos(i)*md.geometry.surface(i);
++	end
++end
++md.surfaceforcings.smbref=smbref';
+ md.transient.requested_outputs=TotalSmbEnum();
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13529-13530.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13529-13530.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13529-13530.diff	(revision 13980)
@@ -0,0 +1,583 @@
+Index: ../trunk-jpl/src/c/solutions/solutions.h
+===================================================================
+--- ../trunk-jpl/src/c/solutions/solutions.h	(revision 13529)
++++ ../trunk-jpl/src/c/solutions/solutions.h	(revision 13530)
+@@ -44,6 +44,7 @@
+ void WriteLockFile(char* filename);
+ void controlrestart(FemModel* femmodel,IssmDouble* J);
+ void ResetBoundaryConditions(FemModel* femmodel, int analysis_type);
++void EnvironmentInit(int argc,char** argv);
+ 
+ //solution configuration
+ void AnalysisConfiguration(int** panalyses,int* pnumanalyses, int solutiontype);
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13530)
+@@ -4,8 +4,7 @@
+ 
+ #include "../issm.h"
+ #include "../include/globals.h"
+-#include "../shared/Numerics/adolc_edf.h"
+-
++	
+ int main(int argc,char **argv){
+ 
+ 	/*I/O: */
+@@ -45,31 +44,17 @@
+ 	IssmPDouble Time_start, Flops_start;
+ 	IssmPDouble Solution_time, Memory_use, Current_flops;
+ 
+-	ISSMBOOT();
++	IssmBoot();
+ 
++	EnvironmentInit(argc,argv);
+ 	
+-	/*Initialize environments: Petsc, MPI, etc...: */
+-	#ifdef _HAVE_PETSC_
+-	ierr=PetscInitialize(&argc,&argv,(char*)0,"");  
+-	if(ierr) _error_("Could not initialize Petsc");
+-	#else
+-	#ifdef _HAVE_MPI_
+-	MPI_Init(&argc,&argv);
+-	#endif
+-	#endif
+-
+-	#ifdef _HAVE_MPI_
++		#ifdef _HAVE_MPI_
+ 	MPI_Barrier(MPI_COMM_WORLD); start=MPI_Wtime();
+ 	#else
+ 	start=(IssmPDouble)clock();
+ 	#endif
+ 
+-	/*Size and rank: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);  
+-	MPI_Comm_size(MPI_COMM_WORLD,&num_procs); 
+-	#endif
+-
++	
+ 	/*First process inputs*/
+ 	_pprintLine_("");
+ 	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
+@@ -114,7 +99,7 @@
+ 	finish_init=(IssmPDouble)clock();
+ 	#endif
+ 	
+-	/*If running AD, then initialize the tape: */
++	/*If running AD, then initialize a placeholder with which to work: */
+ 	#ifdef _HAVE_ADOLC_
+ 	GenericParam<Adolc_edf> *theAdolcEDF_p=new GenericParam<Adolc_edf>(AdolcParamEnum);
+ 	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(EDF_for_solverx);
+@@ -248,9 +233,8 @@
+ 	#endif
+ 	#endif
+ 
+-	
+ 	/*end module: */
+-	ISSMEND();
++	IssmEnd();
+ 
+ 	return 0; //unix success return;
+ }
+Index: ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 0)
++++ ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13530)
+@@ -0,0 +1,22 @@
++/*!\file:  EnvironmentInit.cpp
++ * \brief: initialize Petsc, MPI, you name it
++ */ 
++
++void EnvironmentInit(int argc,char** argv){
++
++	/*Initialize environments: Petsc, MPI, etc...: */
++	#ifdef _HAVE_PETSC_
++	ierr=PetscInitialize(&argc,&argv,(char*)0,"");  
++	if(ierr) _error_("Could not initialize Petsc");
++	#else
++	#ifdef _HAVE_MPI_
++	MPI_Init(&argc,&argv);
++	#endif
++	#endif
++	
++	/*Size and rank: */
++	#ifdef _HAVE_MPI_
++	MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);  
++	MPI_Comm_size(MPI_COMM_WORLD,&num_procs); 
++	#endif
++}
+Index: ../trunk-jpl/src/c/solutions/kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13530)
+@@ -35,24 +35,10 @@
+ 	IssmDouble *predictions = NULL;
+ 	IssmDouble *error       = NULL;
+ 
+-	ISSMBOOT();
++	IssmBoot();
+ 
+-	/*Initialize environments: Petsc, MPI, etc...: */
+-#ifdef _HAVE_PETSC_
+-	int ierr=PetscInitialize(&argc,&argv,(char*)0,"");  
+-	if(ierr) _error_("Could not initialize Petsc");
+-#else
+-#ifdef _HAVE_MPI_
+-	MPI_Init(&argc,&argv);
+-#endif
+-#endif
++	EnvironmentInit(argc,argv);
+ 
+-	/*Size and rank: */
+-#ifdef _HAVE_MPI_
+-	MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);  
+-	MPI_Comm_size(MPI_COMM_WORLD,&num_procs); 
+-#endif
+-
+ 	/*First process inputs*/
+ 	_pprintLine_("");
+ 	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
+@@ -111,7 +97,7 @@
+ #endif
+ 
+ 	/*end module: */
+-	ISSMEND();
++	IssmEnd();
+ 
+ 	return 0; //unix success return;
+ }
+Index: ../trunk-jpl/src/c/include/macros.h
+===================================================================
+--- ../trunk-jpl/src/c/include/macros.h	(revision 13529)
++++ ../trunk-jpl/src/c/include/macros.h	(revision 13530)
+@@ -70,16 +70,16 @@
+   ((void) 0)
+ #endif
+ /*}}}*/
+-/* ISSMBOOT/ISSMEND {{{*/
++/* IssmBoot/IssmEnd {{{*/
+ 
+ /*The following macros hide the error exception handling in a matlab module. Just put 
+- * ISSMBOOT(); and ISSMEND(); at the beginning and end of a module, and c++ exceptions 
++ * IssmBoot(); and IssmEnd(); at the beginning and end of a module, and c++ exceptions 
+  * will be trapped. Really nifty!*/
+ 
+-#define ISSMBOOT(); \
++#define IssmBoot(); \
+ 	try{
+ 
+-#define ISSMEND(); }\
++#define IssmEnd(); }\
+ 	catch(ErrorException &exception){\
+ 		exception.Report(); \
+ 		return 1;\
+Index: ../trunk-jpl/src/c/shared/Numerics/adolc_edf.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/adolc_edf.h	(revision 13529)
++++ ../trunk-jpl/src/c/shared/Numerics/adolc_edf.h	(revision 13530)
+@@ -1,28 +0,0 @@
+-/*
+- * adolc_edf.h
+- *
+- *  Created on: Jun 26, 2012
+- *      Author: utke
+- */
+-
+-#ifndef _ADOLC_EDF_H_
+-#define _ADOLC_EDF_H_
+-
+-#include "../../include/include.h"
+-
+-#ifdef _HAVE_ADOLC_
+-
+-struct Adolc_edf {
+-    ext_diff_fct *myEDF_for_solverx_p;
+-    Adolc_edf() : myEDF_for_solverx_p(0) {}
+-    inline friend std::ostream& operator << ( ostream&, const Adolc_edf& );
+-};
+-
+-std::ostream& operator << ( std::ostream& out, const Adolc_edf& a) {
+-    out << a.myEDF_for_solverx_p;
+-    return out;
+-}
+-
+-#endif
+-
+-#endif
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13530)
+@@ -7,7 +7,6 @@
+ #include "../../include/include.h"
+ #include "../../toolkits/toolkits.h"
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+-#include "../../shared/Numerics/adolc_edf.h"
+ 
+ 
+ void AutodiffDriversx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,Results* results){
+Index: ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13530)
+@@ -11,6 +11,7 @@
+ 
+ #include "./Solverx.h"
+ #include "../../shared/shared.h"
++#include "../../classes/classes.h"
+ #include "../../include/include.h"
+ #include "../../io/io.h"
+ 
+@@ -18,10 +19,6 @@
+ #include <gsl/gsl_linalg.h>
+ #endif
+ 
+-#ifdef _HAVE_ADOLC_
+-#include "../../shared/Numerics/adolc_edf.h"
+-#endif
+-
+ void SolverxSeq(SeqVec<IssmDouble>** puf,SeqMat<IssmDouble>* Kff, SeqVec<IssmDouble>* pf, Parameters* parameters){/*{{{*/
+ 
+ #ifdef _HAVE_GSL_
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13529)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13530)
+@@ -66,6 +66,7 @@
+ 					./classes/objects/Segment.h\
+ 					./classes/objects/Vertex.h\
+ 					./classes/objects/Vertex.cpp\
++					./classes/objects/AdolcEdf.h\
+ 					./classes/Hook.h\
+ 					./classes/Hook.cpp\
+ 					./classes/Patch.h\
+@@ -187,7 +188,6 @@
+ 					./shared/MemOps/xMemCpy.h\
+ 					./shared/Matrix/matrix.h\
+ 					./shared/Matrix/MatrixUtils.cpp\
+-					./shared/Numerics/adolc_edf.h\
+ 					./shared/Numerics/numerics.h\
+ 					./shared/Numerics/Verbosity.h\
+ 					./shared/Numerics/Verbosity.cpp\
+@@ -349,6 +349,7 @@
+ 					./solutions/ResetBoundaryConditions.cpp\
+ 					./solutions/AnalysisConfiguration.cpp\
+ 					./solutions/CorePointerFromSolutionEnum.cpp\
++					./solutions/EnvironmentInit.cpp\
+ 					./solvers/solver_linear.cpp\
+ 					./solvers/solver_nonlinear.cpp\
+ 					./solvers/solver_newton.cpp\
+Index: ../trunk-jpl/src/c/classes/objects.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects.h	(revision 13529)
++++ ../trunk-jpl/src/c/classes/objects.h	(revision 13530)
+@@ -1,68 +0,0 @@
+-/* \file objects.h
+- * \brief: prototype header for all objects.
+- */
+-
+-#ifndef ALL_OBJECTS_H_
+-#define ALL_OBJECTS_H_
+-
+-/*Abstract classes: */
+-#include "./objects/objects.h"
+-
+-/*Objects: */
+-#include "./Hook.h"
+-#include "./DofIndexing.h"
+-#include "./IoModel.h"
+-#include "./Patch.h"
+-#include "./Update.h"
+-
+-/*Gauss*/
+-#include "./gauss/GaussTria.h"
+-#include "./gauss/GaussPenta.h"
+-
+-/*Numerics:*/
+-#include "./matrix/ElementMatrix.h"
+-#include "./matrix/ElementVector.h"
+-#include "./matrix/Vector.h"
+-#include "./matrix/Matrix.h"
+-
+-/*C objects: */
+-#include "./FemModel.h"
+-#include "./OptArgs.h"
+-#include "./OptPars.h"
+-
+-/*Bamg: */
+-#include "./bamg/BamgOpts.h"
+-#include "./bamg/BamgGeom.h"
+-#include "./bamg/BamgMesh.h"
+-#include "./bamg/Metric.h"
+-#include "./bamg/DoubleAndInt.h"
+-#include "./bamg/Direction.h"
+-#include "./bamg/BamgVertex.h"
+-#include "./bamg/AdjacentTriangle.h"
+-#include "./bamg/Edge.h"
+-#include "./bamg/GeomVertex.h"
+-#include "./bamg/GeomEdge.h"
+-#include "./bamg/Curve.h"
+-#include "./bamg/Triangle.h"
+-#include "./bamg/ListofIntersectionTriangles.h"
+-#include "./bamg/GeomSubDomain.h"
+-#include "./bamg/SubDomain.h"
+-#include "./bamg/VertexOnGeom.h"
+-#include "./bamg/VertexOnVertex.h"
+-#include "./bamg/VertexOnEdge.h"
+-#include "./bamg/CrackedEdge.h"
+-#include "./bamg/Mesh.h"
+-#include "./bamg/Geometry.h"
+-#include "./bamg/BamgQuadtree.h"
+-#include "./bamg/SetOfE4.h"
+-
+-/*Kriging*/
+-#include "./kriging/Variogram.h"
+-#include "./kriging/GaussianVariogram.h"
+-#include "./kriging/ExponentialVariogram.h"
+-#include "./kriging/SphericalVariogram.h"
+-#include "./kriging/PowerVariogram.h"
+-#include "./kriging/Quadtree.h"
+-#include "./kriging/Observation.h"
+-
+-#endif
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 13529)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 13530)
+@@ -29,5 +29,6 @@
+ #include "./FemModel.h"
+ #include "./OptArgs.h"
+ #include "./OptPars.h"
++#include "./AdolcEdf.h"
+ 
+ #endif
+Index: ../trunk-jpl/src/c/classes/AdolcEdf.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdolcEdf.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/AdolcEdf.h	(revision 13530)
+@@ -0,0 +1,26 @@
++/*
++ * adolc_edf.h
++ *
++ *  Created on: Jun 26, 2012
++ *      Author: utke
++ */
++
++#ifndef _ADOLC_EDF_H_
++#define _ADOLC_EDF_H_
++
++#ifdef _HAVE_ADOLC_
++
++struct Adolc_edf {
++    ext_diff_fct *myEDF_for_solverx_p;
++    Adolc_edf() : myEDF_for_solverx_p(0) {}
++    inline friend std::ostream& operator << ( ostream&, const Adolc_edf& );
++};
++
++std::ostream& operator << ( std::ostream& out, const Adolc_edf& a) {
++    out << a.myEDF_for_solverx_p;
++    return out;
++}
++
++#endif
++
++#endif
+Index: ../trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp	(revision 13530)
+@@ -10,7 +10,7 @@
+ 
+ #include <stdio.h>
+ #include <string.h>
+-#include "../objects.h"
++#include "../objects/objects.h"
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ #include "../../shared/shared.h"
+ #include "../../include/include.h"
+Index: ../trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp	(revision 13530)
+@@ -10,7 +10,7 @@
+ 
+ #include <stdio.h>
+ #include <string.h>
+-#include "../objects.h"
++#include "../objects/objects.h"
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ #include "../../shared/shared.h"
+ #include "../../include/include.h"
+Index: ../trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp	(revision 13530)
+@@ -10,7 +10,7 @@
+ 
+ #include <stdio.h>
+ #include <string.h>
+-#include "../objects.h"
++#include "../objects/objects.h"
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ #include "../../shared/shared.h"
+ #include "../../include/include.h"
+Index: ../trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp	(revision 13530)
+@@ -10,7 +10,7 @@
+ 
+ #include <stdio.h>
+ #include <string.h>
+-#include "../objects.h"
++#include "../objects/objects.h"
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ #include "../../shared/shared.h"
+ #include "../../include/include.h"
+Index: ../trunk-jpl/src/c/classes/kriging/Quadtree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/Quadtree.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/kriging/Quadtree.cpp	(revision 13530)
+@@ -1,4 +1,4 @@
+-#include "../objects.h"
++#include "../objects/objects.h"
+ 
+ /*DOCUMENTATION What is a Quadtree? {{{
+  * A Quadtree is a very simple way to group vertices according
+Index: ../trunk-jpl/src/c/classes/kriging/Observation.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/Observation.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/kriging/Observation.cpp	(revision 13530)
+@@ -3,7 +3,7 @@
+  */
+ 
+ #include <stdlib.h>
+-#include "../objects.h"
++#include "../objects/objects.h"
+ 
+ /*Observation constructors and destructor*/
+ /*FUNCTION Observation::Observation(){{{*/
+Index: ../trunk-jpl/src/c/classes/bamg/ListofIntersectionTriangles.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/ListofIntersectionTriangles.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/bamg/ListofIntersectionTriangles.cpp	(revision 13530)
+@@ -3,7 +3,7 @@
+ #include <cmath>
+ #include <ctime>
+ 
+-#include "../objects.h"
++#include "../objects/objects.h"
+ 
+ namespace bamg {
+ 
+Index: ../trunk-jpl/src/c/classes/bamg/Triangle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Triangle.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/bamg/Triangle.cpp	(revision 13530)
+@@ -3,7 +3,7 @@
+ #include <cmath>
+ #include <ctime>
+ 
+-#include "../objects.h"
++#include "../objects/objects.h"
+ 
+ namespace bamg {
+ 
+Index: ../trunk-jpl/src/c/classes/bamg/BamgOpts.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/BamgOpts.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/bamg/BamgOpts.cpp	(revision 13530)
+@@ -1,7 +1,7 @@
+ #include <stdio.h>
+ #include "../../shared/shared.h"
+ #include "../../include/include.h"
+-#include "../objects.h"
++#include "../objects/objects.h"
+ #include "../../io/io.h"
+ 
+ /*Constructors/Destructors*/
+Index: ../trunk-jpl/src/c/classes/bamg/BamgGeom.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/BamgGeom.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/bamg/BamgGeom.cpp	(revision 13530)
+@@ -1,5 +1,5 @@
+ #include <stdio.h>
+-#include "../objects.h"
++#include "../objects/objects.h"
+ #include "../../io/io.h"
+ #include "../../shared/shared.h"
+ 
+Index: ../trunk-jpl/src/c/classes/bamg/BamgMesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/BamgMesh.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/bamg/BamgMesh.cpp	(revision 13530)
+@@ -1,5 +1,5 @@
+ #include <stdio.h>
+-#include "../objects.h"
++#include "../objects/objects.h"
+ #include "../../io/io.h"
+ #include "../../shared/shared.h"
+ 
+Index: ../trunk-jpl/src/c/classes/bamg/Geometry.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Geometry.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/bamg/Geometry.cpp	(revision 13530)
+@@ -3,7 +3,7 @@
+ #include <cmath>
+ #include <ctime>
+ 
+-#include "../objects.h"
++#include "../objects/objects.h"
+ #include "../../include/include.h"
+ #include "../../shared/Exceptions/exceptions.h"
+ 
+Index: ../trunk-jpl/src/c/classes/bamg/BamgQuadtree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/BamgQuadtree.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/bamg/BamgQuadtree.cpp	(revision 13530)
+@@ -2,7 +2,7 @@
+ #include <string.h>
+ #include <stdlib.h>
+ 
+-#include "../objects.h"
++#include "../objects/objects.h"
+ 
+ namespace bamg {
+ 
+Index: ../trunk-jpl/src/c/classes/bamg/BamgVertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/BamgVertex.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/bamg/BamgVertex.cpp	(revision 13530)
+@@ -3,7 +3,7 @@
+ #include <cmath>
+ #include <ctime>
+ 
+-#include "../objects.h"
++#include "../objects/objects.h"
+ 
+ namespace bamg {
+ 
+Index: ../trunk-jpl/src/c/classes/bamg/SetOfE4.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/SetOfE4.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/bamg/SetOfE4.cpp	(revision 13530)
+@@ -1,4 +1,4 @@
+-#include "../objects.h"
++#include "../objects/objects.h"
+ 
+ using namespace std;
+ namespace bamg {
+Index: ../trunk-jpl/src/c/classes/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Mesh.cpp	(revision 13529)
++++ ../trunk-jpl/src/c/classes/bamg/Mesh.cpp	(revision 13530)
+@@ -3,7 +3,7 @@
+ #include <cmath>
+ #include <ctime>
+ 
+-#include "../objects.h"
++#include "../objects/objects.h"
+ 
+ namespace bamg {
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13530-13531.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13530-13531.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13530-13531.diff	(revision 13980)
@@ -0,0 +1,79 @@
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13530)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13531)
+@@ -44,8 +44,10 @@
+ 	IssmPDouble Time_start, Flops_start;
+ 	IssmPDouble Solution_time, Memory_use, Current_flops;
+ 
+-	IssmBoot();
++	/*Initialize exception trapping: */
++	ExceptionTrapBegin();
+ 
++	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+ 	EnvironmentInit(argc,argv);
+ 	
+ 		#ifdef _HAVE_MPI_
+@@ -233,8 +235,8 @@
+ 	#endif
+ 	#endif
+ 
+-	/*end module: */
+-	IssmEnd();
++	/*Finalize exception trapping: */
++	ExceptionTrapEnd();
+ 
+ 	return 0; //unix success return;
+ }
+Index: ../trunk-jpl/src/c/solutions/kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13530)
++++ ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13531)
+@@ -35,8 +35,10 @@
+ 	IssmDouble *predictions = NULL;
+ 	IssmDouble *error       = NULL;
+ 
+-	IssmBoot();
++	/*Initialize exception trapping: */
++	ExceptionTrapBegin();
+ 
++	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+ 	EnvironmentInit(argc,argv);
+ 
+ 	/*First process inputs*/
+@@ -96,8 +98,8 @@
+ #endif
+ #endif
+ 
+-	/*end module: */
+-	IssmEnd();
++	/*Finalize exception trapping: */
++	ExceptionTrapEnd();
+ 
+ 	return 0; //unix success return;
+ }
+Index: ../trunk-jpl/src/c/include/macros.h
+===================================================================
+--- ../trunk-jpl/src/c/include/macros.h	(revision 13530)
++++ ../trunk-jpl/src/c/include/macros.h	(revision 13531)
+@@ -70,16 +70,16 @@
+   ((void) 0)
+ #endif
+ /*}}}*/
+-/* IssmBoot/IssmEnd {{{*/
++/* ExceptionTrapBegin/ExceptionTrapEnd {{{*/
+ 
+ /*The following macros hide the error exception handling in a matlab module. Just put 
+- * IssmBoot(); and IssmEnd(); at the beginning and end of a module, and c++ exceptions 
++ * ExceptionTrapBegin(); and ExceptionTrapEnd(); at the beginning and end of a module, and c++ exceptions 
+  * will be trapped. Really nifty!*/
+ 
+-#define IssmBoot(); \
++#define ExceptionTrapBegin(); \
+ 	try{
+ 
+-#define IssmEnd(); }\
++#define ExceptionTrapEnd(); }\
+ 	catch(ErrorException &exception){\
+ 		exception.Report(); \
+ 		return 1;\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13531-13532.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13531-13532.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13531-13532.diff	(revision 13980)
@@ -0,0 +1,103 @@
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13531)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13532)
+@@ -34,9 +34,8 @@
+ 	char *rootpath       = NULL;
+ 
+ 	/*time*/
+-	IssmPDouble   start, finish;
++	IssmPDouble   finish;
+ 	IssmPDouble   start_core, finish_core;
+-	IssmPDouble   start_init, finish_init;
+ 	int      ierr;
+ 
+ 	/*profiling*/   
+@@ -50,12 +49,8 @@
+ 	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+ 	EnvironmentInit(argc,argv);
+ 	
+-		#ifdef _HAVE_MPI_
+-	MPI_Barrier(MPI_COMM_WORLD); start=MPI_Wtime();
+-	#else
+-	start=(IssmPDouble)clock();
+-	#endif
+-
++	/*Some profiling: */
++	profiler=new Profiler(); profiler->Tag(Start);
+ 	
+ 	/*First process inputs*/
+ 	_pprintLine_("");
+@@ -68,11 +63,8 @@
+ 	AnalysisConfiguration(&analyses,&numanalyses,solution_type);
+ 
+ 	/*Create femmodel, using input file: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Barrier(MPI_COMM_WORLD); start_init=MPI_Wtime();
+-	#else
+-	start_init=(IssmPDouble)clock();
+-	#endif
++	profiler->Tag(StartInit);
++	
+ 	femmodel=new FemModel(rootpath,binfilename,outbinfilename,solution_type,analyses,numanalyses);
+ 	
+ 	/*get type of solution we are going to run: */
+@@ -95,11 +87,8 @@
+ 	femmodel->parameters->FindParam(&profiling,DebugProfilingEnum); 
+ 	femmodel->parameters->FindParam(&autodiff,AutodiffIsautodiffEnum);
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
+-	#else
+-	finish_init=(IssmPDouble)clock();
+-	#endif
++	/*Profiling: */
++	profiler->Tag(FinishInit);
+ 	
+ 	/*If running AD, then initialize a placeholder with which to work: */
+ 	#ifdef _HAVE_ADOLC_
+@@ -118,11 +107,7 @@
+ 	#endif
+ 
+ 	_pprintLine_("call computational core:");
+-	#ifdef _HAVE_MPI_
+-	MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
+-	#else
+-	start_core=(IssmPDouble)clock();
+-	#endif
++	profiler->Tag(StartCore);
+ 	
+ 	if(profiling)ProfilingStart(&Time_start,&Flops_start);
+ 
+@@ -161,12 +146,8 @@
+ 	}
+ 	#endif
+ 
++	profiler->Tag(FinishCore);
+ 
+-	#ifdef _HAVE_MPI_
+-	MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
+-	#else
+-	finish_core=(IssmPDouble)clock();
+-	#endif
+ 	
+ 	_pprintLine_("write results to disk:");
+ 	OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+Index: ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13531)
++++ ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13532)
+@@ -1,7 +1,13 @@
+ /*!\file:  EnvironmentInit.cpp
+  * \brief: initialize Petsc, MPI, you name it
+  */ 
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
+ 
++
+ void EnvironmentInit(int argc,char** argv){
+ 
+ 	/*Initialize environments: Petsc, MPI, etc...: */
Index: /issm/oecreview/Archive/13393-13976/ISSM-13532-13533.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13532-13533.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13532-13533.diff	(revision 13980)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13532)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13533)
+@@ -36,7 +36,6 @@
+ 	/*time*/
+ 	IssmPDouble   finish;
+ 	IssmPDouble   start_core, finish_core;
+-	int      ierr;
+ 
+ 	/*profiling*/   
+ 	bool profiling = false;
+Index: ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13532)
++++ ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13533)
+@@ -6,13 +6,15 @@
+ #else
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
++#include "../include/include.h"
++#include "../toolkits/toolkits.h"
++#include "../include/globals.h"
+ 
+-
+ void EnvironmentInit(int argc,char** argv){
+ 
+ 	/*Initialize environments: Petsc, MPI, etc...: */
+ 	#ifdef _HAVE_PETSC_
+-	ierr=PetscInitialize(&argc,&argv,(char*)0,"");  
++	int ierr=PetscInitialize(&argc,&argv,(char*)0,"");  
+ 	if(ierr) _error_("Could not initialize Petsc");
+ 	#else
+ 	#ifdef _HAVE_MPI_
Index: /issm/oecreview/Archive/13393-13976/ISSM-13533-13534.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13533-13534.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13533-13534.diff	(revision 13980)
@@ -0,0 +1,553 @@
+Index: ../trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp	(revision 0)
++++ ../trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp	(revision 13534)
+@@ -0,0 +1,24 @@
++/*!\file:  EnvironmentFinalize.cpp
++ * \brief: finalize Petsc, MPI, you name it
++ */ 
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++#include "../include/include.h"
++#include "../toolkits/toolkits.h"
++#include "../shared/shared.h"
++
++void EnvironmentFinalize(void){
++
++	#ifdef _HAVE_PETSC_
++	_pprintLine_("closing MPI and Petsc");
++	PetscFinalize(); 
++	#else
++	#ifdef _HAVE_MPI_
++	_pprintLine_("closing MPI and Petsc");
++	MPI_Finalize();
++	#endif
++	#endif
++}
+Index: ../trunk-jpl/src/c/solutions/solutions.h
+===================================================================
+--- ../trunk-jpl/src/c/solutions/solutions.h	(revision 13533)
++++ ../trunk-jpl/src/c/solutions/solutions.h	(revision 13534)
+@@ -45,6 +45,7 @@
+ void controlrestart(FemModel* femmodel,IssmDouble* J);
+ void ResetBoundaryConditions(FemModel* femmodel, int analysis_type);
+ void EnvironmentInit(int argc,char** argv);
++void EnvironmentFinalize(void);
+ 
+ //solution configuration
+ void AnalysisConfiguration(int** panalyses,int* pnumanalyses, int solutiontype);
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13533)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13534)
+@@ -5,6 +5,8 @@
+ #include "../issm.h"
+ #include "../include/globals.h"
+ 	
++void ProfilerEcho(Profiler* profiler);
++
+ int main(int argc,char **argv){
+ 
+ 	/*I/O: */
+@@ -33,11 +35,8 @@
+ 	char *petscfilename  = NULL;
+ 	char *rootpath       = NULL;
+ 
+-	/*time*/
+-	IssmPDouble   finish;
+-	IssmPDouble   start_core, finish_core;
+-
+ 	/*profiling*/   
++	Profiler* profiler=NULL;
+ 	bool profiling = false;
+ 	IssmPDouble Time_start, Flops_start;
+ 	IssmPDouble Solution_time, Memory_use, Current_flops;
+@@ -184,39 +183,32 @@
+ 	delete femmodel;
+ 
+ 	/*Get finish time and close*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Barrier(MPI_COMM_WORLD); finish = MPI_Wtime( );
++	profiler->Tag(Finish); ProfilerEcho(profiler);
++
++	/*Finalize environment:*/
++	EnvironmentFinalize();
++
++	/*Finalize exception trapping: */
++	ExceptionTrapEnd();
++
++	/*Return unix success: */
++	return 0; 
++}
++	
++
++
++void ProfilerEcho(Profiler* profiler){
++
+ 	_pprintLine_("");
+-	_pprintLine_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<finish_init-start_init);
+-	_pprintLine_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<finish_core-start_core);
++	_pprintLine_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->Delta(StartInit,FinishInit));
++	_pprintLine_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->Delta(StartCore,FinishCore));
+ 	_pprintLine_("");
+-	_pprintLine_("   Total elapsed time:"<<int((finish-start)/3600)<<" hrs "<<int(int(finish-start)%3600/60)<<" min "<<int(finish-start)%60<<" sec");
+-	_pprintLine_("");
+-	#else
+-	finish=(IssmPDouble)clock();
+-	_pprintLine_("");
+-	_pprintLine_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<(finish_init-start_init)/CLOCKS_PER_SEC);
+-	_pprintLine_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<(finish_core-start_core)/CLOCKS_PER_SEC);
+-	_pprintLine_("");
+ 	_pprintLine_("   Total elapsed time:"
+-				<<int((finish-start)/CLOCKS_PER_SEC/3600)<<" hrs "
+-				<<int(int(finish-start)/CLOCKS_PER_SEC%3600/60)<<" min "
+-				<<int(finish-start)/CLOCKS_PER_SEC%60<<" sec");
++		<<profiler->DeltaModHour(Start,Finish)<<" hrs "
++		<<profiler->DeltaModMin(Start,Finish)<<" min "
++		<<profiler->DeltaModSec(Start,Finish)<<" sec"
++		);
+ 	_pprintLine_("");
+-	#endif
+-	
+-	#ifdef _HAVE_PETSC_
+-	_pprintLine_("closing MPI and Petsc");
+-	PetscFinalize(); 
+-	#else
+-	#ifdef _HAVE_MPI_
+-	_pprintLine_("closing MPI and Petsc");
+-	MPI_Finalize();
+-	#endif
+-	#endif
+ 
+-	/*Finalize exception trapping: */
+-	ExceptionTrapEnd();
++}
+ 
+-	return 0; //unix success return;
+-}
+Index: ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13533)
++++ ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13534)
+@@ -8,9 +8,11 @@
+ #endif
+ #include "../include/include.h"
+ #include "../toolkits/toolkits.h"
+-#include "../include/globals.h"
+ 
+ void EnvironmentInit(int argc,char** argv){
++	
++	extern int my_rank;
++	extern int num_procs;
+ 
+ 	/*Initialize environments: Petsc, MPI, etc...: */
+ 	#ifdef _HAVE_PETSC_
+Index: ../trunk-jpl/src/c/solutions/kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13533)
++++ ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13534)
+@@ -88,15 +88,8 @@
+ 	delete options;
+ 	delete results;
+ 
+-#ifdef _HAVE_PETSC_
+-	_pprintLine_("closing MPI and Petsc");
+-	PetscFinalize(); 
+-#else
+-#ifdef _HAVE_MPI_
+-	_pprintLine_("closing MPI and Petsc");
+-	MPI_Finalize();
+-#endif
+-#endif
++	/*Finalize environment:*/
++	EnvironmentFinalize();
+ 
+ 	/*Finalize exception trapping: */
+ 	ExceptionTrapEnd();
+Index: ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13533)
++++ ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13534)
+@@ -322,6 +322,7 @@
+ 	PenpairEnum,
+ 	PentaEnum,
+ 	PentaP1InputEnum,
++	ProfilerEnum,
+ 	MatrixParamEnum,
+ 	VectorParamEnum,
+ 	RiftfrontEnum,
+Index: ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13533)
++++ ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13534)
+@@ -326,6 +326,7 @@
+ 	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
+ 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
+ 	      else if (strcmp(name,"PentaP1Input")==0) return PentaP1InputEnum;
++	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
+ 	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
+ 	      else if (strcmp(name,"VectorParam")==0) return VectorParamEnum;
+ 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+@@ -382,11 +383,11 @@
+ 	      else if (strcmp(name,"SegmentOnIceShelf")==0) return SegmentOnIceShelfEnum;
+ 	      else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
+-	      else if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
+          else stage=4;
+    }
+    if(stage==4){
+-	      if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
++	      if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
++	      else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
+ 	      else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
+@@ -505,11 +506,11 @@
+ 	      else if (strcmp(name,"Regular")==0) return RegularEnum;
+ 	      else if (strcmp(name,"Scaled")==0) return ScaledEnum;
+ 	      else if (strcmp(name,"Separate")==0) return SeparateEnum;
+-	      else if (strcmp(name,"Sset")==0) return SsetEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"Verbose")==0) return VerboseEnum;
++	      if (strcmp(name,"Sset")==0) return SsetEnum;
++	      else if (strcmp(name,"Verbose")==0) return VerboseEnum;
+ 	      else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
+ 	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+ 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
+Index: ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13533)
++++ ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13534)
+@@ -319,6 +319,7 @@
+ 		case PenpairEnum : return "Penpair";
+ 		case PentaEnum : return "Penta";
+ 		case PentaP1InputEnum : return "PentaP1Input";
++		case ProfilerEnum : return "Profiler";
+ 		case MatrixParamEnum : return "MatrixParam";
+ 		case VectorParamEnum : return "VectorParam";
+ 		case RiftfrontEnum : return "Riftfront";
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13533)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13534)
+@@ -158,6 +158,8 @@
+ 					./classes/objects/Params/TransientParam.cpp\
+ 					./classes/objects/Params/DataSetParam.h\
+ 					./classes/objects/Params/DataSetParam.cpp\
++					./classes/objects/Profiler.h\
++					./classes/objects/Profiler.cpp\
+ 					./Container/Container.h\
+ 					./Container/Constraints.h\
+ 					./Container/Constraints.cpp\
+@@ -350,6 +352,7 @@
+ 					./solutions/AnalysisConfiguration.cpp\
+ 					./solutions/CorePointerFromSolutionEnum.cpp\
+ 					./solutions/EnvironmentInit.cpp\
++					./solutions/EnvironmentFinalize.cpp\
+ 					./solvers/solver_linear.cpp\
+ 					./solvers/solver_nonlinear.cpp\
+ 					./solvers/solver_newton.cpp\
+Index: ../trunk-jpl/src/c/classes/objects/objects.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/objects.h	(revision 13533)
++++ ../trunk-jpl/src/c/classes/objects/objects.h	(revision 13534)
+@@ -12,6 +12,7 @@
+ #include "./Contour.h"
+ #include "./Vertex.h"
+ #include "./Node.h"
++#include "./Profiler.h"
+ #include "./DependentObject.h"
+ #include "./IndependentObject.h"
+ #include "./Segment.h"
+Index: ../trunk-jpl/src/c/classes/objects/Profiler.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Profiler.cpp	(revision 0)
++++ ../trunk-jpl/src/c/classes/objects/Profiler.cpp	(revision 13534)
+@@ -0,0 +1,139 @@
++/*!\file Profiler.c
++ * \brief: implementation of the Profiler object
++ */
++
++/*Include files: {{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./Profiler.h"
++/*}}}*/
++
++/*Profiler constructors and destructors:*/
++/*FUNCTION Profiler::Profiler() default constructor {{{*/
++Profiler::Profiler(){
++		 this->timetags=new Parameters();
++}
++/*}}}*/
++/*FUNCTION Profiler::~Profiler(){{{*/
++Profiler::~Profiler(){
++	delete timetags;
++}
++/*}}}*/
++
++/*Object virtual functions definitions:*/
++/*FUNCTION Profiler::Echo{{{*/
++void Profiler::Echo(void){
++
++	_printLine_("Profiler:");
++	_printLine_("   time tags: ");
++	this->timetags->Echo();
++
++}
++/*}}}*/
++/*FUNCTION Profiler::DeepEcho{{{*/
++void Profiler::DeepEcho(void){
++
++	_printLine_("Profiler:");
++	_printLine_("   time tags: ");
++	this->timetags->DeepEcho();
++
++}
++/*}}}*/
++/*FUNCTION Profiler::Id{{{*/
++int    Profiler::Id(void){ return -1; }
++/*}}}*/
++/*FUNCTION Profiler::ObjectEnum{{{*/
++int Profiler::ObjectEnum(void){
++
++	return ProfilerEnum;
++
++}
++/*}}}*/
++
++/*Profiler routines:*/
++/*FUNCTION Profiler::Tag {{{*/
++void  Profiler::Tag(int tagenum,bool dontmpisync){
++
++	double time;
++
++	/*If mpisync requested, make sure all the cpus are at the same point 
++	 *in the execution: */
++	if(!dontmpisync){
++		#ifdef _HAVE_MPI_
++		MPI_Barrier(MPI_COMM_WORLD); 
++		#endif
++	}
++
++	/*Now capture time: */
++	#ifdef _HAVE_MPI_
++	time=MPI_Wtime();
++	#else
++	time=(IssmPDouble)clock();
++	#endif
++
++	/*Plug into this->timetags: */
++	this->timetags->AddObject(new DoubleParam(tagenum,time));
++
++}
++/*}}}*/
++/*FUNCTION Profiler::Delta {{{*/
++double  Profiler::Delta(int inittag, int finaltag){
++
++	double init, final;
++	this->timetags->FindParam(&init,inittag);
++	this->timetags->FindParam(&final,finaltag);
++
++	#ifdef _HAVE_MPI_
++	return final-init;
++	#else
++	return (final-init)/CLOCKS_PER_SEC;
++	#endif
++}
++/*}}}*/
++/*FUNCTION Profiler::DeltaModHour {{{*/
++int Profiler::DeltaModHour(int inittag, int finishtag){
++
++	double init, finish;
++	this->timetags->FindParam(&init,inittag);
++	this->timetags->FindParam(&finish,finishtag);
++
++	#ifdef _HAVE_MPI_
++	return int((finish-init)/3600);
++	#else
++	return int((finish-init)/CLOCKS_PER_SEC/3600);
++	#endif
++
++}
++/*}}}*/
++/*FUNCTION Profiler::DeltaModMin {{{*/
++int Profiler::DeltaModMin(int inittag, int finishtag){
++
++	double init, finish;
++	this->timetags->FindParam(&init,inittag);
++	this->timetags->FindParam(&finish,finishtag);
++
++	#ifdef _HAVE_MPI_
++	return int(int(finish-init)%3600/60);
++	#else
++	return int(int(finish-init)/CLOCKS_PER_SEC%3600/60);
++	#endif
++}
++/*}}}*/
++/*FUNCTION Profiler::DeltaModSec {{{*/
++int Profiler::DeltaModSec(int inittag, int finishtag){
++
++	double init, finish;
++	this->timetags->FindParam(&init,inittag);
++	this->timetags->FindParam(&finish,finishtag);
++
++	#ifdef _HAVE_MPI_
++	return int(finish-init)%60;
++	#else
++	return int(finish-init)/CLOCKS_PER_SEC%60;
++	#endif
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Profiler.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Profiler.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/objects/Profiler.h	(revision 13534)
+@@ -0,0 +1,52 @@
++/*!\file Profiler.h
++ * \brief: header file for node object
++ */
++
++#ifndef _PROFILER_H_
++#define _PROFILER_H_
++
++/*Headers:*/
++/*{{{*/
++#include "./Object.h"
++#include "../../shared/shared.h"
++/*}}}*/
++
++class DataSet;
++class Parameters;
++
++enum ProfilerEnums {
++	Start,
++	StartInit,
++	FinishInit,
++	StartCore,
++	FinishCore,
++	Finish
++};
++
++
++class Profiler: public Object{
++
++	public: 
++		Parameters*  timetags;
++
++		/*Profiler constructors, destructors {{{*/
++		Profiler();
++		~Profiler();
++		/*}}}*/
++		/*Object virtual functions definitions:{{{ */
++		void    Echo();
++		void    DeepEcho();
++		int     Id();
++		int     ObjectEnum();
++		Object *copy()        {_error_("Not implemented yet"); };
++		/*}}}*/
++		/*Profiler routines {{{*/
++		void    Tag(int tagenum,bool dontmpisync=false);
++		double  Delta(int inittag, int finaltag);
++		int     DeltaModHour(int inittag, int finaltag);
++		int     DeltaModMin(int inittag, int finaltag);
++		int     DeltaModSec(int inittag, int finaltag);
++		/*}}}*/
++};
++
++#endif  /* _PROFILER_H_ */
+Index: ../trunk-jpl/src/m/enum/SurfaceforcingsSmbrefEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SurfaceforcingsSmbrefEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/SurfaceforcingsSmbrefEnum.m	(revision 13534)
+@@ -0,0 +1,11 @@
++function macro=SurfaceforcingsSmbrefEnum()
++%SURFACEFORCINGSSMBREFENUM - Enum of SurfaceforcingsSmbref
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=SurfaceforcingsSmbrefEnum()
++
++macro=StringToEnum('SurfaceforcingsSmbref');
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13533)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13534)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=495;
++macro=496;
+Index: ../trunk-jpl/src/m/enum/SurfaceforcingsHrefEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/SurfaceforcingsHrefEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/SurfaceforcingsHrefEnum.m	(revision 13534)
+@@ -0,0 +1,11 @@
++function macro=SurfaceforcingsHrefEnum()
++%SURFACEFORCINGSHREFENUM - Enum of SurfaceforcingsHref
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=SurfaceforcingsHrefEnum()
++
++macro=StringToEnum('SurfaceforcingsHref');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13533)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13534)
+@@ -3038,6 +3038,16 @@
+ 
+ 	return StringToEnum('PentaP1Input')[0]
+ 
++def ProfilerEnum():
++	"""
++	PROFILERENUM - Enum of Profiler
++
++	   Usage:
++	      macro=ProfilerEnum()
++	"""
++
++	return StringToEnum('Profiler')[0]
++
+ def MatrixParamEnum():
+ 	"""
+ 	MATRIXPARAMENUM - Enum of MatrixParam
+@@ -4966,5 +4976,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 495
++	return 496
+ 
+Index: ../trunk-jpl/src/m/enum/ProfilerEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/ProfilerEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/ProfilerEnum.m	(revision 13534)
+@@ -0,0 +1,11 @@
++function macro=ProfilerEnum()
++%PROFILERENUM - Enum of Profiler
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=ProfilerEnum()
++
++macro=StringToEnum('Profiler');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13534-13535.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13534-13535.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13534-13535.diff	(revision 13980)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/test/NightlyRun/ad_maxalloc.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad_maxalloc.m	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/ad_maxalloc.m	(revision 13535)
+@@ -0,0 +1,19 @@
++md=triangle(model,'../Exp/Square.exp',100000);
++md=setmask(md,'all','');
++md=parameterize(md,'../Par/SquareShelfConstrained.par');
++md=setflowequation(md,'macayeal','all');
++md.cluster=generic('name',oshostname(),'np',3);
++
++md.autodiff.isautodiff=true;
++md.verbose.autodiff=true;
++md.autodiff.independents={...
++	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',(1:md.mesh.numberofvertices)')
++	};
++
++md.autodiff.dependents={...
++	dependent('name','MaxVel','type','scalar')
++	};
++
++md.autodiff.driver='fov_forward';
++
++md=solve(md,TransientSolutionEnum);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13535-13536.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13535-13536.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13535-13536.diff	(revision 13980)
@@ -0,0 +1,102 @@
+Index: ../trunk-jpl/src/c/shared/Sys/ProfilingEnd.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sys/ProfilingEnd.cpp	(revision 13535)
++++ ../trunk-jpl/src/c/shared/Sys/ProfilingEnd.cpp	(revision 13536)
+@@ -1,43 +0,0 @@
+-/*!\file:  ProfilingEnd.cpp
+- * \brief ProfilingEnd.c: finalize profiling after calling a routine. Needs to mirror a ProfilingStart routine.
+- */
+-
+-/*Include files: {{{*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-#include "../../include/macros.h"
+-#include "../shared.h"
+-#include "../../io/io.h"
+-/*}}}*/
+-
+-void ProfilingEnd(double* pSolution_time, double* pMemory_use, double* pCurrent_flops, double Time_start, double Flops_start){
+-
+-	double Solution_time, Memory_use, Current_flops;
+-	double Time_finish, Flops_finish, memUse;
+-	
+-	#ifdef _HAVE_PETSC_
+-	PetscGetTime(&Time_finish);
+-	PetscGetFlops(&Flops_finish);
+-	PetscMemoryGetCurrentUsage(&memUse);
+-	
+-	Solution_time=Time_finish-Time_start;
+-	Current_flops=Flops_finish-Flops_start;
+-	_pprintLine_("PETSc elapsed time  : " << Solution_time << "  Seconds");
+-	_pprintLine_("PETSc elapsed flops : " << Current_flops << "  Flops");
+-	_pprintLine_("PETSc memory used   : " << memUse << "  Bytes");
+-	#else
+-		_error_("Profiling not supported under this numerical toolkit");
+-	#endif
+-
+-	/*Assign pointers: */
+-	*pSolution_time=Solution_time;
+-	*pMemory_use=memUse;
+-	*pCurrent_flops=Current_flops;
+-	return;
+-}
+-
+-
+-
+Index: ../trunk-jpl/src/c/shared/Sys/sys.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sys/sys.h	(revision 13535)
++++ ../trunk-jpl/src/c/shared/Sys/sys.h	(revision 13536)
+@@ -1,12 +0,0 @@
+-/* \file sys.h
+- * \brief: header file for ISSM system routines (profiling, timing, etc ...)
+- */
+-
+-
+-#ifndef _ISSM_SYS_H_
+-#define _ISSM_SYS_H_
+-
+-void ProfilingEnd(double* pSolution_time, double* pMemory_use, double* pCurrent_flops, double Time_start, double Flops_start);
+-void ProfilingStart(double* pTime_start, double* pFlops_start);
+-
+-#endif
+Index: ../trunk-jpl/src/c/shared/Sys/ProfilingStart.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sys/ProfilingStart.cpp	(revision 13535)
++++ ../trunk-jpl/src/c/shared/Sys/ProfilingStart.cpp	(revision 13536)
+@@ -1,32 +0,0 @@
+-/*!\file:  ProfilingStart.cpp
+- * \brief ProfilingStart.c: initialize profiling before calling a routine
+- */
+-
+-
+-/*Include files: {{{*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-#include "../../include/macros.h"
+-#include "../shared.h"
+-#include "../../io/io.h"
+-/*}}}*/
+-
+-void ProfilingStart(double* pTime_start, double* pFlops_start){
+-	
+-	double Time_start, Flops_start;
+-	
+-	#ifdef _HAVE_PETSC_
+-		PetscGetTime(&Time_start);
+-		PetscGetFlops(&Flops_start );
+-	#else
+-		_error_("Profiling not supported under this numerical toolkit");
+-	#endif
+-
+-	/*Assign pointers: */
+-	*pTime_start=Time_start;
+-	*pFlops_start=Flops_start;
+-	return;
+-}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13536-13537.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13536-13537.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13536-13537.diff	(revision 13980)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13536)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13537)
+@@ -223,9 +223,6 @@
+ 					./shared/Wrapper/wrappershared.h\
+ 					./shared/Wrapper/ModuleBoot.cpp\
+ 					./shared/Wrapper/ModuleEnd.cpp\
+-					./shared/Sys/sys.h\
+-					./shared/Sys/ProfilingStart.cpp\
+-					./shared/Sys/ProfilingEnd.cpp\
+ 					./toolkits/metis/metisincludes.h\
+ 					./toolkits/issm/issmtoolkit.h\
+ 					./toolkits/issm/SeqVec.h\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13537-13538.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13537-13538.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13537-13538.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/shared/shared.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/shared.h	(revision 13537)
++++ ../trunk-jpl/src/c/shared/shared.h	(revision 13538)
+@@ -15,7 +15,6 @@
+ #include "MemOps/xMemCpy.h"
+ #include "Numerics/numerics.h"
+ #include "Sorting/sorting.h"
+-#include "Sys/sys.h"
+ #include "Threads/issm_threads.h"
+ #include "TriMesh/trimesh.h"
+ #include "Wrapper/wrappershared.h"
Index: /issm/oecreview/Archive/13393-13976/ISSM-13538-13539.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13538-13539.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13538-13539.diff	(revision 13980)
@@ -0,0 +1,1294 @@
+Index: ../trunk-jpl/src/c/solutions/solutions.h
+===================================================================
+--- ../trunk-jpl/src/c/solutions/solutions.h	(revision 13538)
++++ ../trunk-jpl/src/c/solutions/solutions.h	(revision 13539)
+@@ -29,6 +29,7 @@
+ void slopecompute_core(FemModel* femmodel);
+ void steadystate_core(FemModel* femmodel);
+ void transient_core(FemModel* femmodel);
++void dakota_core(FemModel* femmodel);
+ IssmDouble objectivefunction(IssmDouble search_scalar,OptArgs* optargs);
+ 
+ //convergence:
+@@ -46,10 +47,12 @@
+ void ResetBoundaryConditions(FemModel* femmodel, int analysis_type);
+ void EnvironmentInit(int argc,char** argv);
+ void EnvironmentFinalize(void);
++int  DakotaSpawnCore(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, void* femmodel,int counter);
+ 
+ //solution configuration
+ void AnalysisConfiguration(int** panalyses,int* pnumanalyses, int solutiontype);
+ void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype);
+ void AdjointCorePointerFromSolutionEnum(void (**padjointcore)(FemModel*),int solutiontype);
+ 
++
+ #endif
+Index: ../trunk-jpl/src/c/solutions/dakota_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/dakota_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/solutions/dakota_core.cpp	(revision 13539)
+@@ -0,0 +1,129 @@
++/*!\file:  dakota_core.cpp
++ * \brief: wrapper to the Dakota capabilities. qmu fires up Dakota, and registers a Dakota Pluggin
++ * which will be in charge of running the solution sequences repeteadly, to garner statistics. 
++ *
++ * This routine deals with running ISSM and Dakota in library mode. In library mode, Dakota does not 
++ * run as an execuatble. Its capabilities are linked into the ISSM software. ISSM calls dakota routines 
++ * directly from the dakota library. qmu.cpp is the code that is in charge of calling those routines. 
++ *
++ * Dakota has its own way of running in parallel (for embarassingly parallel jobs). We do not want that, 
++ * as ISSM knows exactly how to run "really parallel" jobs that use all CPUS. To bypass Dakota's parallelism, 
++ * we overloaded the constructor for the parallel library (see the Dakota patch in the externalpackages/dakota
++ * directory). This overloaded constructor fires up Dakota serially on CPU 0 only! We take care of broadcasting 
++ * to the other CPUS, hence ISSM is running in parallel, and Dakota serially on CPU0. 
++ *
++ * Now, how does CPU 0 drive all other CPUS to carry out sensitivity analysese? By synchronizing its call to 
++ * our ISSM cores (diagnostic_core, thermal_core, transient_core, etc ...) on CPU 0 with all other CPUS. 
++ * This explains the structure of qmu.cpp, where cpu 0 runs Dakota, the Dakota pluggin fires up DakotaSpawnCore.cpp, 
++ * while the other CPUS are waiting for a broadcast from CPU0, once they get it, they also fire up 
++ * DakotaSpawnCore. In the end, DakotaSpawnCore is fired up on all CPUS, with CPU0 having Dakota inputs, that it will 
++ * broacast to other CPUS. 
++ *
++ * Now, how does dakota call the DakotaSpawnCore routine? The DakotaSpawnCore is embedded into the DakotaPlugin object 
++ * which is derived from the Direct Interface Dakota objct. This is the only way to run Dakota in library 
++ * mode (see their developper guide for more info). Dakota registers the DakotaPlugin object into its own 
++ * database, and calls on the embedded DakotaSpawnCore from CPU0. 
++ *
++ */ 
++
++/*include files: {{{*/
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./solutions.h"
++#include "../shared/shared.h"
++#include "../include/include.h"
++#include "../io/io.h"
++#include "../toolkits/toolkits.h"
++#include "../EnumDefinitions/EnumDefinitions.h"
++#include "../classes/dakota/DakotaPlugin.h"
++
++#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
++#include "ParallelLibrary.H"
++#include "ProblemDescDB.H"
++#include "DakotaStrategy.H"
++#include "DakotaModel.H"
++#include "DakotaInterface.H"
++
++#endif
++/*}}}*/
++
++void dakota_core(FemModel* femmodel){ 
++
++
++	#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
++	
++	extern int         my_rank;
++	char*              dakota_input_file  = NULL;
++	char*              dakota_output_file = NULL;
++	char*              dakota_error_file  = NULL;
++	int                status=0;
++	Dakota::ModelLIter ml_iter;
++	Parameters* parameters                = NULL;
++
++	/*Retrieve parameters: */
++	parameters=femmodel->parameters;
++
++	/*Recover dakota_input_file, dakota_output_file and dakota_error_file, in the parameters dataset in parallel */
++	parameters->FindParam(&dakota_input_file,QmuInNameEnum);
++	parameters->FindParam(&dakota_output_file,QmuOutNameEnum);
++	parameters->FindParam(&dakota_error_file,QmuErrNameEnum);
++
++	if(my_rank==0){
++	
++		// Instantiate/initialize the parallel library and problem description
++		// database objects.
++		Dakota::ParallelLibrary parallel_lib("serial"); //use our own ISSM Dakota library mode constructor, which only fires up Dakota on CPU 0. 
++		Dakota::ProblemDescDB problem_db(parallel_lib); 
++
++		// Manage input file parsing, output redirection, and restart processing
++		// without a CommandLineHandler.  This version relies on parsing of an
++		// input file.
++		problem_db.manage_inputs(dakota_input_file);
++		// specify_outputs_restart() is only necessary if specifying non-defaults
++		parallel_lib.specify_outputs_restart(dakota_output_file,dakota_error_file,NULL,NULL);
++
++		// Instantiate the Strategy object (which instantiates all Model and
++		// Iterator objects) using the parsed information in problem_db.
++		Dakota::Strategy selected_strategy(problem_db);
++
++		// convenience function for iterating over models and performing any
++		// interface plug-ins
++		Dakota::ModelList& models = problem_db.model_list();
++
++		for (ml_iter = models.begin(); ml_iter != models.end(); ml_iter++) {
++
++			Dakota::Interface& interface = ml_iter->interface();
++
++			//set DB nodes to the existing Model specification
++			problem_db.set_db_model_nodes(ml_iter->model_id());
++
++			// Serial case: plug in derived Interface object without an analysisComm
++			interface.assign_rep(new SIM::DakotaPlugin(problem_db,(void*)femmodel), false);
++		}
++	
++		// Execute the strategy
++		problem_db.lock(); // prevent run-time DB queries
++		selected_strategy.run_strategy();
++		
++		//Warn other cpus that we are done running the dakota iterator, by setting the counter to -1:
++		DakotaSpawnCore(NULL,0, NULL,NULL,0,femmodel,-1);
++
++	}
++	else{
++
++		for(;;){
++			if(!DakotaSpawnCore(NULL,0, NULL,NULL,0,femmodel,0))break; //counter came in at -1 on cpu0, bail out.
++		}
++	}
++
++	/*Free ressources:*/
++	xDelete<char>(dakota_input_file);
++	xDelete<char>(dakota_error_file);
++	xDelete<char>(dakota_output_file);
++
++	#endif //#ifdef _HAVE_DAKOTA_
++}
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13538)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13539)
+@@ -6,6 +6,7 @@
+ #include "../include/globals.h"
+ 	
+ void ProfilerEcho(Profiler* profiler);
++void ProfilerEnd(Profiler* profiler, Results* results, Parameters* parameters);
+ 
+ int main(int argc,char **argv){
+ 
+@@ -37,9 +38,6 @@
+ 
+ 	/*profiling*/   
+ 	Profiler* profiler=NULL;
+-	bool profiling = false;
+-	IssmPDouble Time_start, Flops_start;
+-	IssmPDouble Solution_time, Memory_use, Current_flops;
+ 
+ 	/*Initialize exception trapping: */
+ 	ExceptionTrapBegin();
+@@ -47,8 +45,9 @@
+ 	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+ 	EnvironmentInit(argc,argv);
+ 	
+-	/*Some profiling: */
+-	profiler=new Profiler(); profiler->Tag(Start);
++	/*Start profiler: */
++	profiler=new Profiler(); 
++	profiler->Tag(Start);
+ 	
+ 	/*First process inputs*/
+ 	_pprintLine_("");
+@@ -82,7 +81,6 @@
+ 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+ 	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
+ 	femmodel->parameters->FindParam(&tao_analysis,InversionTaoEnum);
+-	femmodel->parameters->FindParam(&profiling,DebugProfilingEnum); 
+ 	femmodel->parameters->FindParam(&autodiff,AutodiffIsautodiffEnum);
+ 
+ 	/*Profiling: */
+@@ -105,48 +103,38 @@
+ 	#endif
+ 
+ 	_pprintLine_("call computational core:");
++
++		
+ 	profiler->Tag(StartCore);
+-	
+-	if(profiling)ProfilingStart(&Time_start,&Flops_start);
+-
+ 	if(dakota_analysis){
+ 		#ifdef _HAVE_DAKOTA_
+-		Dakotax(femmodel);
++		dakota_core(femmodel);
+ 		#else
+ 		_error_("ISSM was not compiled with dakota support, cannot carry out dakota analysis!");
+ 		#endif
+ 	}
+ 	else if(control_analysis){
+ 		#ifdef _HAVE_CONTROL_
+-		if(tao_analysis)
+-		 controltao_core(femmodel);
+-		else
+-		 control_core(femmodel);
++		if(tao_analysis) controltao_core(femmodel);
++		else control_core(femmodel);
+ 		#else
+-		_error_("ISSM was not compiled with control support, cannot carry out dakota analysis!");
++		_error_("ISSM was not compiled with control support, cannot carry out control analysis!");
+ 		#endif
+ 	}
+ 	else{
+ 		solutioncore(femmodel);
+ 	}
+ 
+-	if(profiling){
+-		ProfilingEnd(&Solution_time,&Memory_use,&Current_flops,Time_start,Flops_start);
+-		femmodel->results->AddObject(new GenericExternalResult<double>(femmodel->results->Size()+1, ProfilingSolutionTimeEnum, Solution_time, 1, 0));
+-		femmodel->results->AddObject(new GenericExternalResult<double>(femmodel->results->Size()+1, ProfilingCurrentMemEnum, Memory_use, 1, 0));
+-		femmodel->results->AddObject(new GenericExternalResult<double>(femmodel->results->Size()+1, ProfilingCurrentFlopsEnum, Current_flops, 1, 0));
+-	}
+-
+ 	#ifdef _HAVE_ADOLC_
+ 	if(autodiff){
+ 		trace_off();
+ 		AutodiffDriversx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+ 	}
+ 	#endif
+-
+ 	profiler->Tag(FinishCore);
+ 
+-	
++	ProfilerEnd(profiler,femmodel->results,femmodel->parameters);
++
+ 	_pprintLine_("write results to disk:");
+ 	OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+ 	
+@@ -182,8 +170,9 @@
+ 	xDelete<char>(rootpath);
+ 	delete femmodel;
+ 
+-	/*Get finish time and close*/
+-	profiler->Tag(Finish); ProfilerEcho(profiler);
++	/*Profiling at the end: */
++	profiler->Tag(Finish); 
++	ProfilerEcho(profiler);
+ 
+ 	/*Finalize environment:*/
+ 	EnvironmentFinalize();
+@@ -195,20 +184,44 @@
+ 	return 0; 
+ }
+ 	
++void ProfilerEcho(Profiler* profiler){ /*{{{*/
+ 
+-
+-void ProfilerEcho(Profiler* profiler){
+-
+ 	_pprintLine_("");
+-	_pprintLine_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->Delta(StartInit,FinishInit));
+-	_pprintLine_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->Delta(StartCore,FinishCore));
++	_pprintLine_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(StartInit,FinishInit));
++	_pprintLine_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(StartCore,FinishCore));
+ 	_pprintLine_("");
+ 	_pprintLine_("   Total elapsed time:"
+-		<<profiler->DeltaModHour(Start,Finish)<<" hrs "
+-		<<profiler->DeltaModMin(Start,Finish)<<" min "
+-		<<profiler->DeltaModSec(Start,Finish)<<" sec"
++		<<profiler->DeltaTimeModHour(Start,Finish)<<" hrs "
++		<<profiler->DeltaTimeModMin(Start,Finish)<<" min "
++		<<profiler->DeltaTimeModSec(Start,Finish)<<" sec"
+ 		);
+ 	_pprintLine_("");
+ 
+-}
++} /*}}}*/
++void ProfilerEnd(Profiler* profiler, Results* results, Parameters* parameters){ /*{{{*/
+ 
++	bool profiling = false;
++	
++	IssmDouble solution_time;
++	IssmDouble solution_flops;
++	IssmDouble solution_memory;
++
++	parameters->FindParam(&profiling,DebugProfilingEnum); 
++
++	if(profiling){
++
++		solution_time=profiler->DeltaTime(StartCore,FinishCore);
++		solution_flops=profiler->DeltaFlops(StartCore,FinishCore);
++		solution_memory=profiler->Memory(FinishCore);
++
++		_pprintLine_("Solution elapsed time  : " << solution_time << "  Seconds");
++		_pprintLine_("Solution elapsed flops : " << solution_flops << "  Flops");
++		_pprintLine_("Solution memory used   : " << solution_memory << "  Bytes");
++
++		/*Add to results: */
++		results->AddObject(new GenericExternalResult<double>(results->Size()+1, ProfilingSolutionTimeEnum, solution_time, 1, 0));
++		results->AddObject(new GenericExternalResult<double>(results->Size()+1, ProfilingCurrentMemEnum, solution_memory, 1, 0));
++		results->AddObject(new GenericExternalResult<double>(results->Size()+1, ProfilingCurrentFlopsEnum, solution_flops, 1, 0));
++	}
++
++} /*}}}*/
+Index: ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 0)
++++ ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13539)
+@@ -0,0 +1,198 @@
++/*!\file:  DakotaSpawnCore.cpp
++ 
++ * \brief: run core ISSM solution using Dakota inputs coming from CPU 0.
++ * \sa qmu.cpp DakotaPlugin.cpp
++ *
++ * This routine needs to be understood simultaneously with qmu.cpp and DakotaPlugin. 
++ * DakotaSpawnCoreParallel is called by all CPUS, with CPU 0 holding Dakota variable values, along 
++ * with variable descriptors. 
++ *
++ * DakotaSpawnCoreParallel takes care of broadcasting the variables and their descriptors across the MPI 
++ * ring. Once this is done, we use the variables to modify the inputs for the solution core. 
++ * For ex, if "rho_ice" is provided, for ex 920, we include "rho_ice" in the inputs, then 
++ * call the core with the modified inputs. This is the way we get Dakota to explore the parameter 
++ * spce of the core. 
++ *
++ * Once the core is called, we process the results of the core, and using the processed results, 
++ * we compute response functions. The responses are computed on all CPUS, but they are targeted 
++ * for CPU 0, which will get these values back to the Dakota engine. 
++ *
++ */ 
++
++/*Includes and prototypes: {{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++
++#include "../classes/objects/objects.h"
++#include "../io/io.h"
++#include "../EnumDefinitions/EnumDefinitions.h"
++#include "../shared/shared.h"
++#include "../include/include.h"
++#include "../solutions/solutions.h"
++#include "../modules/modules.h"
++
++void DakotaMPI_Bcast(double** pvariables, char*** pvariables_descriptors,int* pnumvariables, int* pnumresponses);
++void DakotaFree(double** pvariables,char*** pvariables_descriptors,char*** presponses_descriptors,int numvariables,int numresponses);
++
++/*}}}*/
++
++/*Notice the d_, which prefixes anything that is being provided to us by the Dakota pluggin. Careful. some things are ours, some are dakotas!: */
++int DakotaSpawnCore(double* d_responses, int d_numresponses, double* d_variables, char** d_variables_descriptors,int d_numvariables, void* void_femmodel,int counter){
++	
++	int i;
++	extern int my_rank;
++	
++	char   **responses_descriptors     = NULL; //these are our!  there are only numresponsedescriptors of them, not d_numresponses!!!
++	int      numresponsedescriptors;
++	char    *string                    = NULL;
++	int      string_length;
++	int      solution_type;
++	bool     control_analysis          = false;
++	void (*solutioncore)(FemModel*)    = NULL;
++	FemModel* femmodel                 = NULL;
++
++
++	/*If counter==-1 on cpu0, it means that the dakota runs are done. In which case, bail out and return 0: */
++	#ifdef _HAVE_MPI_
++	MPI_Bcast(&counter,1,MPI_INT,0,MPI_COMM_WORLD); 
++	#endif
++	if(counter==-1)return 0;
++
++	/*cast void_femmodel to FemModel: */
++	femmodel=(FemModel*)void_femmodel;
++
++	/*retrieve parameters: */
++	femmodel->parameters->FindParam(&responses_descriptors,&numresponsedescriptors,QmuResponsedescriptorsEnum);
++	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
++	
++	if(VerboseQmu()) _pprintLine_("qmu iteration: " << counter);
++
++	/* only cpu 0, running dakota is providing us with variables and variables_descriptors and numresponses: broadcast onto other cpus: */
++	DakotaMPI_Bcast(&d_variables,&d_variables_descriptors,&d_numvariables,&d_numresponses);
++
++	/*Modify core inputs in objects contained in femmodel, to reflect the dakota variables inputs: */
++	InputUpdateFromDakotax(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,d_variables,d_variables_descriptors,d_numvariables);
++
++	/*Determine solution sequence: */
++	if(VerboseQmu()) _pprintLine_("Starting " << EnumToStringx(solution_type) << " core:");
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	#ifdef _HAVE_CONTROL_
++	if(control_analysis)solutioncore=&control_core;
++	#else
++	_error_("ISSM was not compiled with control capabilities, exiting!");
++	#endif
++
++	/*Run the core solution sequence: */
++	solutioncore(femmodel);
++
++	/*compute responses: */
++	if(VerboseQmu()) _pprintLine_("compute dakota responses:");
++	DakotaResponsesx(d_responses,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,responses_descriptors,numresponsedescriptors,d_numresponses);
++	
++	/*Free ressources:*/
++	DakotaFree(&d_variables,&d_variables_descriptors,&responses_descriptors, d_numvariables, numresponsedescriptors);
++}
++
++void DakotaMPI_Bcast(double** pvariables, char*** pvariables_descriptors,int* pnumvariables, int* pnumresponses){ /*{{{*/
++
++	/* * \brief: broadcast variables_descriptors, variables, numvariables and numresponses
++	 * from cpu 0 to all other cpus.
++	 */ 
++
++	int i;
++	extern int my_rank;
++
++	/*inputs and outputs: */
++	double* variables=NULL;
++	char**  variables_descriptors=NULL;
++	int     numvariables;
++	int     numresponses;
++
++	/*intermediary: */
++	char* string=NULL;
++	int   string_length;
++
++
++	/*recover inputs from pointers: */
++	variables=*pvariables;
++	variables_descriptors=*pvariables_descriptors;
++	numvariables=*pnumvariables;
++	numresponses=*pnumresponses;
++
++	/*numvariables: */
++	MPI_Bcast(&numvariables,1,MPI_INT,0,MPI_COMM_WORLD); 
++	
++	/*variables:*/
++	if(my_rank!=0)variables=xNew<double>(numvariables);
++	MPI_Bcast(variables,numvariables,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++
++	/*variables_descriptors: */
++	if(my_rank!=0){
++		variables_descriptors=xNew<char*>(numvariables);
++	}
++	for(i=0;i<numvariables;i++){
++		if(my_rank==0){
++			string=variables_descriptors[i];
++			string_length=(strlen(string)+1)*sizeof(char);
++		}
++		MPI_Bcast(&string_length,1,MPI_INT,0,MPI_COMM_WORLD); 
++		if(my_rank!=0)string=xNew<char>(string_length);
++		MPI_Bcast(string,string_length,MPI_CHAR,0,MPI_COMM_WORLD); 
++		if(my_rank!=0)variables_descriptors[i]=string;
++	}
++
++	/*numresponses: */
++	MPI_Bcast(&numresponses,1,MPI_INT,0,MPI_COMM_WORLD); 
++
++	/*Assign output pointers:*/
++	*pnumvariables=numvariables;
++	*pvariables=variables;
++	*pvariables_descriptors=variables_descriptors;
++	*pnumresponses=numresponses;
++} /*}}}*/
++void DakotaFree(double** pvariables,char*** pvariables_descriptors,char*** presponses_descriptors,int numvariables,int numresponses){ /*{{{*/
++ 
++	/*\brief DakotaFree: free allocations on other cpus, not done by Dakota.*/
++
++	int i;
++	extern int my_rank;
++	
++	double  *variables             = NULL;
++	char   **variables_descriptors = NULL;
++	char   **responses_descriptors = NULL;
++	char    *string                = NULL;
++
++	/*recover pointers: */
++	variables=*pvariables;
++	variables_descriptors=*pvariables_descriptors;
++	responses_descriptors=*presponses_descriptors;
++
++
++	/*Free variables and variables_descriptors only on cpu !=0*/
++	if(my_rank!=0){
++		xDelete<double>(variables);
++		for(i=0;i<numvariables;i++){
++			string=variables_descriptors[i];
++			xDelete<char>(string);
++		}
++		xDelete<char*>(variables_descriptors);
++	}
++	
++	//responses descriptors on every cpu
++	for(i=0;i<numresponses;i++){
++		string=responses_descriptors[i];
++		xDelete<char>(string);
++	}
++	//rest of dynamic allocations.
++	xDelete<char*>(responses_descriptors);
++
++	/*Assign output pointers:*/
++	*pvariables=variables;
++	*pvariables_descriptors=variables_descriptors;
++	*presponses_descriptors=responses_descriptors;
++} /*}}}*/
+Index: ../trunk-jpl/src/c/shared/String/sharedstring.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/String/sharedstring.h	(revision 13538)
++++ ../trunk-jpl/src/c/shared/String/sharedstring.h	(revision 13539)
+@@ -7,5 +7,9 @@
+ 
+ int  DescriptorIndex(char* root, int* pindex,char* descriptor);
+ 
++#ifndef WIN32
++int stricmp(const char* a,const char* b);
++#endif
++
+ #endif //ifndef _SHAREDSTRING_H_
+ 
+Index: ../trunk-jpl/src/c/shared/shared.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/shared.h	(revision 13538)
++++ ../trunk-jpl/src/c/shared/shared.h	(revision 13539)
+@@ -15,6 +15,7 @@
+ #include "MemOps/xMemCpy.h"
+ #include "Numerics/numerics.h"
+ #include "Sorting/sorting.h"
++#include "String/sharedstring.h"
+ #include "Threads/issm_threads.h"
+ #include "TriMesh/trimesh.h"
+ #include "Wrapper/wrappershared.h"
+Index: ../trunk-jpl/src/c/modules/Dakotax/SpawnCoreParallel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Dakotax/SpawnCoreParallel.cpp	(revision 13538)
++++ ../trunk-jpl/src/c/modules/Dakotax/SpawnCoreParallel.cpp	(revision 13539)
+@@ -1,87 +0,0 @@
+-/*!\file:  SpawnCoreParallel.cpp
+- * \brief: run core ISSM solution using Dakota inputs coming from CPU 0.
+- * \sa qmu.cpp DakotaPlugin.cpp
+- *
+- * This routine needs to be understood simultaneously with qmu.cpp and DakotaPlugin. 
+- * SpawnCoreParallel is called by all CPUS, with CPU 0 holding Dakota variable values, along 
+- * with variable descriptors. 
+- *
+- * SpawnCoreParallel takes care of broadcasting the variables and their descriptors across the MPI 
+- * ring. Once this is done, we use the variables to modify the inputs for the solution core. 
+- * For ex, if "rho_ice" is provided, for ex 920, we include "rho_ice" in the inputs, then 
+- * call the core with the modified inputs. This is the way we get Dakota to explore the parameter 
+- * spce of the core. 
+- *
+- * Once the core is called, we process the results of the core, and using the processed results, 
+- * we compute response functions. The responses are computed on all CPUS, but they are targeted 
+- * for CPU 0, which will get these values back to the Dakota engine. 
+- *
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-
+-#include "../../classes/objects/objects.h"
+-#include "../../io/io.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-#include "../../io/io.h"
+-#include "../../shared/shared.h"
+-#include "./Dakotax.h"
+-#include "../../include/include.h"
+-#include "../../solutions/solutions.h"
+-#include "../modules.h"
+-
+-void SpawnCoreParallel(double* d_responses, int d_numresponses, double* d_variables, char** d_variables_descriptors,int d_numvariables, FemModel* femmodel,int counter){
+-
+-	/*Notice the d_, which prefixes anything that is being provided to us by the Dakota pluggin. Careful. some things are ours, some are dakotas!: */
+-
+-	int i;
+-	extern int my_rank;
+-	
+-	char   **responses_descriptors     = NULL; //these are our!  there are only numresponsedescriptors of them, not d_numresponses!!!
+-	int      numresponsedescriptors;
+-	char    *string                    = NULL;
+-	int      string_length;
+-	int      solution_type;
+-	bool     control_analysis          = false;
+-	void (*solutioncore)(FemModel*)    = NULL;
+-
+-	/*synchronize all cpus, as CPU 0 is probably late (it is starting the entire dakota strategy!) : */
+-	MPI_Barrier(MPI_COMM_WORLD);
+-	if(VerboseQmu()) _pprintLine_("qmu iteration: " << counter);
+-	
+-	/*retrieve parameters: */
+-	femmodel->parameters->FindParam(&responses_descriptors,&numresponsedescriptors,QmuResponsedescriptorsEnum);
+-	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+-	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
+-
+-	/* only cpu 0, running dakota is providing us with variables and variables_descriptors and numresponses: broadcast onto other cpus: */
+-	DakotaMPI_Bcast(&d_variables,&d_variables_descriptors,&d_numvariables,&d_numresponses);
+-
+-	/*Modify core inputs in objects contained in femmodel, to reflect the dakota variables inputs: */
+-	InputUpdateFromDakotax(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,d_variables,d_variables_descriptors,d_numvariables);
+-
+-	/*Determine solution sequence: */
+-	if(VerboseQmu()) _pprintLine_("Starting " << EnumToStringx(solution_type) << " core:");
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+-	#ifdef _HAVE_CONTROL_
+-	if(control_analysis)solutioncore=&control_core;
+-	#else
+-	_error_("ISSM was not compiled with control capabilities, exiting!");
+-	#endif
+-
+-	/*Run the core solution sequence: */
+-	solutioncore(femmodel);
+-
+-	/*compute responses: */
+-	if(VerboseQmu()) _pprintLine_("compute dakota responses:");
+-	DakotaResponsesx(d_responses,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,responses_descriptors,numresponsedescriptors,d_numresponses);
+-	
+-	/*Free ressources:*/
+-	DakotaFree(&d_variables,&d_variables_descriptors,&responses_descriptors, d_numvariables, numresponsedescriptors);
+-}
+-
+Index: ../trunk-jpl/src/c/modules/Dakotax/SpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Dakotax/SpawnCore.cpp	(revision 13538)
++++ ../trunk-jpl/src/c/modules/Dakotax/SpawnCore.cpp	(revision 13539)
+@@ -1,29 +0,0 @@
+-/*!\file:  SpawnCore.cpp
+- * \brief: branch into SpawnCoreMatlab and SpawnCoreParallel.
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-
+-#include "../../classes/objects/objects.h"
+-#include "../../io/io.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-#include "../../shared/shared.h"
+-#include "./Dakotax.h"
+-#include "../../include/include.h"
+-
+-int SpawnCore(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, void* femmodel,int counter){
+-
+-	/*Branch into a serial SpawnCore and a parallel SpawnCore: */
+-
+-	/*Call SpawnCoreParallel unless counter=-1 on cpu0, in which case, bail out and return 0: */
+-	MPI_Bcast(&counter,1,MPI_INT,0,MPI_COMM_WORLD); 
+-	if(counter==-1)return 0;
+-
+-	SpawnCoreParallel(responses, numresponses, variables, variables_descriptors,numvariables, (FemModel*)femmodel,counter);
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/modules/Dakotax/DakotaFree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Dakotax/DakotaFree.cpp	(revision 13538)
++++ ../trunk-jpl/src/c/modules/Dakotax/DakotaFree.cpp	(revision 13539)
+@@ -1,57 +0,0 @@
+-/*!\file: DakotaFree.cpp
+- * \brief DakotaFree: free allocations on other cpus, not done by Dakota.
+-
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../../Container/Container.h"    
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-#include "../modules.h"
+-
+-
+-void DakotaFree(double** pvariables,char*** pvariables_descriptors,char*** presponses_descriptors,int numvariables,int numresponses){
+-
+-	int i;
+-	extern int my_rank;
+-	
+-	double  *variables             = NULL;
+-	char   **variables_descriptors = NULL;
+-	char   **responses_descriptors = NULL;
+-	char    *string                = NULL;
+-
+-	/*recover pointers: */
+-	variables=*pvariables;
+-	variables_descriptors=*pvariables_descriptors;
+-	responses_descriptors=*presponses_descriptors;
+-
+-
+-	/*Free variables and variables_descriptors only on cpu !=0*/
+-	if(my_rank!=0){
+-		xDelete<double>(variables);
+-		for(i=0;i<numvariables;i++){
+-			string=variables_descriptors[i];
+-			xDelete<char>(string);
+-		}
+-		xDelete<char*>(variables_descriptors);
+-	}
+-	
+-	//responses descriptors on every cpu
+-	for(i=0;i<numresponses;i++){
+-		string=responses_descriptors[i];
+-		xDelete<char>(string);
+-	}
+-	//rest of dynamic allocations.
+-	xDelete<char*>(responses_descriptors);
+-
+-	/*Assign output pointers:*/
+-	*pvariables=variables;
+-	*pvariables_descriptors=variables_descriptors;
+-	*presponses_descriptors=responses_descriptors;
+-}
+Index: ../trunk-jpl/src/c/modules/Dakotax/DakotaMPI_Bcast.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Dakotax/DakotaMPI_Bcast.cpp	(revision 13538)
++++ ../trunk-jpl/src/c/modules/Dakotax/DakotaMPI_Bcast.cpp	(revision 13539)
+@@ -1,66 +0,0 @@
+-/*!\file: DakotaMPI_Bcast
+- * \brief: broadcast variables_descriptors, variables, numvariables and numresponses
+- * from cpu 0 to all other cpus.
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./Dakotax.h"
+-
+-void DakotaMPI_Bcast(double** pvariables, char*** pvariables_descriptors,int* pnumvariables, int* pnumresponses){
+-
+-	int i;
+-	extern int my_rank;
+-
+-	/*inputs and outputs: */
+-	double* variables=NULL;
+-	char**  variables_descriptors=NULL;
+-	int     numvariables;
+-	int     numresponses;
+-
+-	/*intermediary: */
+-	char* string=NULL;
+-	int   string_length;
+-
+-
+-	/*recover inputs from pointers: */
+-	variables=*pvariables;
+-	variables_descriptors=*pvariables_descriptors;
+-	numvariables=*pnumvariables;
+-	numresponses=*pnumresponses;
+-
+-	/*numvariables: */
+-	MPI_Bcast(&numvariables,1,MPI_INT,0,MPI_COMM_WORLD); 
+-	
+-	/*variables:*/
+-	if(my_rank!=0)variables=xNew<double>(numvariables);
+-	MPI_Bcast(variables,numvariables,MPI_DOUBLE,0,MPI_COMM_WORLD); 
+-
+-	/*variables_descriptors: */
+-	if(my_rank!=0){
+-		variables_descriptors=xNew<char*>(numvariables);
+-	}
+-	for(i=0;i<numvariables;i++){
+-		if(my_rank==0){
+-			string=variables_descriptors[i];
+-			string_length=(strlen(string)+1)*sizeof(char);
+-		}
+-		MPI_Bcast(&string_length,1,MPI_INT,0,MPI_COMM_WORLD); 
+-		if(my_rank!=0)string=xNew<char>(string_length);
+-		MPI_Bcast(string,string_length,MPI_CHAR,0,MPI_COMM_WORLD); 
+-		if(my_rank!=0)variables_descriptors[i]=string;
+-	}
+-
+-	/*numresponses: */
+-	MPI_Bcast(&numresponses,1,MPI_INT,0,MPI_COMM_WORLD); 
+-
+-	/*Assign output pointers:*/
+-	*pnumvariables=numvariables;
+-	*pvariables=variables;
+-	*pvariables_descriptors=variables_descriptors;
+-	*pnumresponses=numresponses;
+-}
+Index: ../trunk-jpl/src/c/modules/Dakotax/DescriptorIndex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Dakotax/DescriptorIndex.cpp	(revision 13538)
++++ ../trunk-jpl/src/c/modules/Dakotax/DescriptorIndex.cpp	(revision 13539)
+@@ -1,71 +0,0 @@
+-/*!\file:  DescriptorIndex: return type of qmu variable: indexed, scaled, nodal or regular
+- * + figure out the descriptor root. 
+- * Ex: scaled_Thickness_1 should return SCALEDENUM, fill root with Thickness, and initialize index 
+- * to 1.
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <stdio.h>
+-#include <string.h>
+-#include <ctype.h>
+-#include "../../shared/shared.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-int  DescriptorIndex(char* root, int* pindex,char* descriptor){ //We assume root has already been allocated, and we just have to copy into it.
+-	
+-	char * pch=NULL;
+-
+-	/*retrieve first token, separated by underscore: */
+-	pch = strtok (descriptor,"_");
+-	if(!pch)_error_("descriptor " << descriptor << " is not correctly formatted!");
+-
+-	if (strncmp(pch,"scaled",6)==0){
+-		/*we have a scaled variable. recover the root: */
+-		pch = strtok (NULL, "_");
+-		if(!pch)_error_("scaled descriptor " << descriptor << " is not correctly formatted!");
+-		memcpy(root,pch,(strlen(pch)+1)*sizeof(char));
+-
+-		/*now recover  the index if it exists: */
+-		pch = strtok (NULL, "_");
+-		if(!pch){
+-			*pindex=-1;
+-		}
+-		else{
+-			sscanf(pch,"%i",pindex);
+-		}
+-		return ScaledEnum;
+-	}
+-	else if (strncmp(pch,"indexed",7)==0){
+-		/*we have an indexed variable. recover the root: */
+-		pch = strtok (NULL, "_");
+-		if(!pch)_error_("indexed descriptor " << descriptor << " is not correctly formatted!");
+-		memcpy(root,pch,(strlen(pch)+1)*sizeof(char));
+-		/*now recover  the index: */
+-		pch = strtok (NULL, "_");
+-		if(!pch)_error_("indexed descriptor " << descriptor << " is not correctly formatted!");
+-		sscanf(pch,"%i",pindex);
+-		return IndexedEnum;
+-	}
+-	else if (strncmp(pch,"nodal",5)==0){
+-		/*we have an indexed variable. recover the root: */
+-		pch = strtok (NULL, "_");
+-		if(!pch)_error_("nodal descriptor " << descriptor << " is not correctly formatted!");
+-		memcpy(root,pch,(strlen(pch)+1)*sizeof(char));
+-		/*now recover  the index: */
+-		pch = strtok (NULL, "_");
+-		if(!pch)_error_("nodal descriptor " << descriptor << " is not correctly formatted!");
+-		sscanf(pch,"%i",pindex);
+-		return NodalEnum;
+-	}
+-	else{
+-		/*We don't have _ in the name, this is a regular variable: */
+-		memcpy(root,pch,(strlen(pch)+1)*sizeof(char));
+-		*pindex=-1;
+-		return RegularEnum;
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/Dakotax/Dakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Dakotax/Dakotax.cpp	(revision 13538)
++++ ../trunk-jpl/src/c/modules/Dakotax/Dakotax.cpp	(revision 13539)
+@@ -1,128 +0,0 @@
+-/*!\file:  Dakotax.cpp
+- * \brief: wrapper to the Dakota capabilities. qmu fires up Dakota, and registers a Dakota Pluggin
+- * which will be in charge of running the solution sequences repeteadly, to garner statistics. 
+- *
+- * This routine deals with running ISSM and Dakota in library mode. In library mode, Dakota does not 
+- * run as an execuatble. Its capabilities are linked into the ISSM software. ISSM calls dakota routines 
+- * directly from the dakota library. qmu.cpp is the code that is in charge of calling those routines. 
+- *
+- * Dakota has its own way of running in parallel (for embarassingly parallel jobs). We do not want that, 
+- * as ISSM knows exactly how to run "really parallel" jobs that use all CPUS. To bypass Dakota's parallelism, 
+- * we overloaded the constructor for the parallel library (see the Dakota patch in the externalpackages/dakota
+- * directory). This overloaded constructor fires up Dakota serially on CPU 0 only! We take care of broadcasting 
+- * to the other CPUS, hence ISSM is running in parallel, and Dakota serially on CPU0. 
+- *
+- * Now, how does CPU 0 drive all other CPUS to carry out sensitivity analysese? By synchronizing its call to 
+- * our ISSM cores (diagnostic_core, thermal_core, transient_core, etc ...) on CPU 0 with all other CPUS. 
+- * This explains the structure of qmu.cpp, where cpu 0 runs Dakota, the Dakota pluggin fires up SpawnCore.cpp, 
+- * while the other CPUS are waiting for a broadcast from CPU0, once they get it, they also fire up 
+- * SpawnCore. In the end, SpawnCore is fired up on all CPUS, with CPU0 having Dakota inputs, that it will 
+- * broacast to other CPUS. 
+- *
+- * Now, how does dakota call the SpawnCore routine? The SpawnCore is embedded into the DakotaPlugin object 
+- * which is derived from the Direct Interface Dakota objct. This is the only way to run Dakota in library 
+- * mode (see their developper guide for more info). Dakota registers the DakotaPlugin object into its own 
+- * database, and calls on the embedded SpawnCore from CPU0. 
+- *
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./Dakotax.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../io/io.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-#include "../../classes/dakota/DakotaPlugin.h"
+-
+-#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
+-#include "ParallelLibrary.H"
+-#include "ProblemDescDB.H"
+-#include "DakotaStrategy.H"
+-#include "DakotaModel.H"
+-#include "DakotaInterface.H"
+-
+-#endif
+-
+-void Dakotax(FemModel* femmodel){ 
+-
+-
+-	#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
+-	
+-	extern int         my_rank;
+-	char*              dakota_input_file  = NULL;
+-	char*              dakota_output_file = NULL;
+-	char*              dakota_error_file  = NULL;
+-	int                status=0;
+-	Dakota::ModelLIter ml_iter;
+-	Parameters* parameters                = NULL;
+-
+-	/*Retrieve parameters: */
+-	parameters=femmodel->parameters;
+-
+-	/*Recover dakota_input_file, dakota_output_file and dakota_error_file, in the parameters dataset in parallel */
+-	parameters->FindParam(&dakota_input_file,QmuInNameEnum);
+-	parameters->FindParam(&dakota_output_file,QmuOutNameEnum);
+-	parameters->FindParam(&dakota_error_file,QmuErrNameEnum);
+-
+-	if(my_rank==0){
+-	
+-		// Instantiate/initialize the parallel library and problem description
+-		// database objects.
+-		Dakota::ParallelLibrary parallel_lib("serial"); //use our own ISSM Dakota library mode constructor, which only fires up Dakota on CPU 0. 
+-		Dakota::ProblemDescDB problem_db(parallel_lib); 
+-
+-		// Manage input file parsing, output redirection, and restart processing
+-		// without a CommandLineHandler.  This version relies on parsing of an
+-		// input file.
+-		problem_db.manage_inputs(dakota_input_file);
+-		// specify_outputs_restart() is only necessary if specifying non-defaults
+-		parallel_lib.specify_outputs_restart(dakota_output_file,dakota_error_file,NULL,NULL);
+-
+-		// Instantiate the Strategy object (which instantiates all Model and
+-		// Iterator objects) using the parsed information in problem_db.
+-		Dakota::Strategy selected_strategy(problem_db);
+-
+-		// convenience function for iterating over models and performing any
+-		// interface plug-ins
+-		Dakota::ModelList& models = problem_db.model_list();
+-
+-		for (ml_iter = models.begin(); ml_iter != models.end(); ml_iter++) {
+-
+-			Dakota::Interface& interface = ml_iter->interface();
+-
+-			//set DB nodes to the existing Model specification
+-			problem_db.set_db_model_nodes(ml_iter->model_id());
+-
+-			// Serial case: plug in derived Interface object without an analysisComm
+-			interface.assign_rep(new SIM::DakotaPlugin(problem_db,(void*)femmodel), false);
+-		}
+-	
+-		// Execute the strategy
+-		problem_db.lock(); // prevent run-time DB queries
+-		selected_strategy.run_strategy();
+-		
+-		//Warn other cpus that we are done running the dakota iterator, by setting the counter to -1:
+-		SpawnCore(NULL,0, NULL,NULL,0,femmodel,-1);
+-
+-	}
+-	else{
+-
+-		for(;;){
+-			if(!SpawnCore(NULL,0, NULL,NULL,0,femmodel,0))break; //counter came in at -1 on cpu0, bail out.
+-		}
+-	}
+-
+-	/*Free ressources:*/
+-	xDelete<char>(dakota_input_file);
+-	xDelete<char>(dakota_error_file);
+-	xDelete<char>(dakota_output_file);
+-
+-	#endif //#ifdef _HAVE_DAKOTA_
+-}
+Index: ../trunk-jpl/src/c/modules/Dakotax/Dakotax.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Dakotax/Dakotax.h	(revision 13538)
++++ ../trunk-jpl/src/c/modules/Dakotax/Dakotax.h	(revision 13539)
+@@ -9,13 +9,7 @@
+ #include "../../classes/classes.h"
+ 
+ /* local prototypes: */
+-int  SpawnCore(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, void* femmodel,int counter);
+-int  DescriptorIndex(char* root, int* pindex,char* descriptor);
+-
+ void Dakotax(FemModel* femmodel);
+-void SpawnCoreParallel(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, FemModel* femmodel,int counter);
+-void DakotaResponses(double* responses,char** responses_descriptors,int numresponses,FemModel* femmodel);
+-void DakotaMPI_Bcast(double** pvariables, char*** pvariables_descriptors,int* pnumvariables, int* pnumresponses);
+-void DakotaFree(double** pvariables,char*** pvariables_descriptors,char*** presponses_descriptors,int numvariables,int numresponses);
++int  DakotaSpawnCore(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, void* femmodel,int counter);
+ 
+ #endif  /* _DAKOTAX_H */
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13538)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13539)
+@@ -220,6 +220,7 @@
+ 					./shared/Elements/PddSurfaceMassBalance.cpp\
+ 					./shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp\
+ 					./shared/String/sharedstring.h\
++					./shared/String/DescriptorIndex.cpp\
+ 					./shared/Wrapper/wrappershared.h\
+ 					./shared/Wrapper/ModuleBoot.cpp\
+ 					./shared/Wrapper/ModuleEnd.cpp\
+@@ -372,14 +373,9 @@
+ 					  ./modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp\
+ 					  ./modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp\
+ 					  ./modules/AverageOntoPartitionx/AverageOntoPartitionx.h\
+-					  ./modules/Dakotax/Dakotax.h\
+-					  ./modules/Dakotax/Dakotax.cpp\
+-					  ./modules/Dakotax/DakotaMPI_Bcast.cpp\
+-					  ./modules/Dakotax/DakotaFree.cpp\
+-					  ./modules/Dakotax/SpawnCore.cpp\
+-					  ./modules/Dakotax/DescriptorIndex.cpp\
+ 					  ./modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp\
+-					  ./modules/Dakotax/SpawnCoreParallel.cpp
++					  ./solutions/dakota_core.cpp\
++					  ./solutions/DakotaSpawnCore.cpp
+ #}}}
+ #Transient sources  {{{
+ transient_sources  = ./modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp \
+Index: ../trunk-jpl/src/c/classes/objects/Profiler.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Profiler.cpp	(revision 13538)
++++ ../trunk-jpl/src/c/classes/objects/Profiler.cpp	(revision 13539)
+@@ -15,12 +15,12 @@
+ /*Profiler constructors and destructors:*/
+ /*FUNCTION Profiler::Profiler() default constructor {{{*/
+ Profiler::Profiler(){
+-		 this->timetags=new Parameters();
++		 this->time=new Parameters();
+ }
+ /*}}}*/
+ /*FUNCTION Profiler::~Profiler(){{{*/
+ Profiler::~Profiler(){
+-	delete timetags;
++	delete time;
+ }
+ /*}}}*/
+ 
+@@ -30,7 +30,7 @@
+ 
+ 	_printLine_("Profiler:");
+ 	_printLine_("   time tags: ");
+-	this->timetags->Echo();
++	this->time->Echo();
+ 
+ }
+ /*}}}*/
+@@ -39,7 +39,7 @@
+ 
+ 	_printLine_("Profiler:");
+ 	_printLine_("   time tags: ");
+-	this->timetags->DeepEcho();
++	this->time->DeepEcho();
+ 
+ }
+ /*}}}*/
+@@ -58,7 +58,9 @@
+ /*FUNCTION Profiler::Tag {{{*/
+ void  Profiler::Tag(int tagenum,bool dontmpisync){
+ 
+-	double time;
++	IssmDouble t;
++	IssmDouble f;
++	IssmDouble m;
+ 
+ 	/*If mpisync requested, make sure all the cpus are at the same point 
+ 	 *in the execution: */
+@@ -68,24 +70,34 @@
+ 		#endif
+ 	}
+ 
+-	/*Now capture time: */
++	/*Capture time: */
+ 	#ifdef _HAVE_MPI_
+-	time=MPI_Wtime();
++	t=MPI_Wtime();
+ 	#else
+-	time=(IssmPDouble)clock();
++	t=(IssmPDouble)clock();
+ 	#endif
+ 
+-	/*Plug into this->timetags: */
+-	this->timetags->AddObject(new DoubleParam(tagenum,time));
++	/*Capture flops: */
++	#ifdef _HAVE_PETSC_
++		PetscGetFlops(&f);
++		PetscMemoryGetCurrentUsage(&m);
++	#else
++		/*do nothing for now:*/
++	#endif
+ 
++	/*Plug into this->time: */
++	this->time->AddObject(new DoubleParam(tagenum,t));
++	this->flops->AddObject(new DoubleParam(tagenum,f));
++	this->memory->AddObject(new DoubleParam(tagenum,m));
++
+ }
+ /*}}}*/
+-/*FUNCTION Profiler::Delta {{{*/
+-double  Profiler::Delta(int inittag, int finaltag){
++/*FUNCTION Profiler::DeltaTime {{{*/
++IssmDouble  Profiler::DeltaTime(int inittag, int finaltag){
+ 
+-	double init, final;
+-	this->timetags->FindParam(&init,inittag);
+-	this->timetags->FindParam(&final,finaltag);
++	IssmDouble init, final;
++	this->time->FindParam(&init,inittag);
++	this->time->FindParam(&final,finaltag);
+ 
+ 	#ifdef _HAVE_MPI_
+ 	return final-init;
+@@ -94,46 +106,65 @@
+ 	#endif
+ }
+ /*}}}*/
+-/*FUNCTION Profiler::DeltaModHour {{{*/
+-int Profiler::DeltaModHour(int inittag, int finishtag){
++/*FUNCTION Profiler::DeltaFlops {{{*/
++IssmDouble  Profiler::DeltaFlops(int inittag, int finaltag){
+ 
+-	double init, finish;
+-	this->timetags->FindParam(&init,inittag);
+-	this->timetags->FindParam(&finish,finishtag);
++	IssmDouble init, final;
++	this->flops->FindParam(&init,inittag);
++	this->flops->FindParam(&final,finaltag);
+ 
++	return final-init;
++}
++/*}}}*/
++/*FUNCTION Profiler::DeltaTimeModHour {{{*/
++int Profiler::DeltaTimeModHour(int inittag, int finishtag){
++
++	IssmDouble init, finish;
++	this->time->FindParam(&init,inittag);
++	this->time->FindParam(&finish,finishtag);
++
+ 	#ifdef _HAVE_MPI_
+-	return int((finish-init)/3600);
++	return int((reCast<int,IssmDouble>(finish-init))/3600);
+ 	#else
+-	return int((finish-init)/CLOCKS_PER_SEC/3600);
++	return int((reCast<int,IssmDouble>(finish-init))/CLOCKS_PER_SEC/3600);
+ 	#endif
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Profiler::DeltaModMin {{{*/
+-int Profiler::DeltaModMin(int inittag, int finishtag){
++/*FUNCTION Profiler::DeltaTimeModMin {{{*/
++int Profiler::DeltaTimeModMin(int inittag, int finishtag){
+ 
+-	double init, finish;
+-	this->timetags->FindParam(&init,inittag);
+-	this->timetags->FindParam(&finish,finishtag);
++	IssmDouble init, finish;
++	this->time->FindParam(&init,inittag);
++	this->time->FindParam(&finish,finishtag);
+ 
+ 	#ifdef _HAVE_MPI_
+-	return int(int(finish-init)%3600/60);
++	return int(int(reCast<int,IssmDouble>(finish-init))%3600/60);
+ 	#else
+-	return int(int(finish-init)/CLOCKS_PER_SEC%3600/60);
++	return int(int(reCast<int,IssmDouble>(finish-init))/CLOCKS_PER_SEC%3600/60);
+ 	#endif
+ }
+ /*}}}*/
+-/*FUNCTION Profiler::DeltaModSec {{{*/
+-int Profiler::DeltaModSec(int inittag, int finishtag){
++/*FUNCTION Profiler::DeltaTimeModSec {{{*/
++int Profiler::DeltaTimeModSec(int inittag, int finishtag){
+ 
+-	double init, finish;
+-	this->timetags->FindParam(&init,inittag);
+-	this->timetags->FindParam(&finish,finishtag);
++	IssmDouble init, finish;
++	this->time->FindParam(&init,inittag);
++	this->time->FindParam(&finish,finishtag);
+ 
+ 	#ifdef _HAVE_MPI_
+-	return int(finish-init)%60;
++	return int(reCast<int,IssmDouble>(finish-init))%60;
+ 	#else
+-	return int(finish-init)/CLOCKS_PER_SEC%60;
++	return int(reCast<int,IssmDouble>(finish-init))/CLOCKS_PER_SEC%60;
+ 	#endif
+ }
+ /*}}}*/
++/*FUNCTION Profiler::Memory {{{*/
++IssmDouble  Profiler::Memory(int tag){
++
++	IssmDouble m;
++	this->memory->FindParam(&m,tag);
++
++	return m;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Profiler.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Profiler.h	(revision 13538)
++++ ../trunk-jpl/src/c/classes/objects/Profiler.h	(revision 13539)
+@@ -27,7 +27,9 @@
+ class Profiler: public Object{
+ 
+ 	public: 
+-		Parameters*  timetags;
++		Parameters*  time;
++		Parameters*  flops;
++		Parameters*  memory;
+ 
+ 		/*Profiler constructors, destructors {{{*/
+ 		Profiler();
+@@ -42,10 +44,12 @@
+ 		/*}}}*/
+ 		/*Profiler routines {{{*/
+ 		void    Tag(int tagenum,bool dontmpisync=false);
+-		double  Delta(int inittag, int finaltag);
+-		int     DeltaModHour(int inittag, int finaltag);
+-		int     DeltaModMin(int inittag, int finaltag);
+-		int     DeltaModSec(int inittag, int finaltag);
++		IssmDouble  Memory(int tag);
++		IssmDouble  DeltaTime(int inittag, int finaltag);
++		IssmDouble  DeltaFlops(int inittag, int finaltag);
++		int     DeltaTimeModHour(int inittag, int finaltag);
++		int     DeltaTimeModMin(int inittag, int finaltag);
++		int     DeltaTimeModSec(int inittag, int finaltag);
+ 		/*}}}*/
+ };
+ 
+Index: ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp	(revision 13538)
++++ ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp	(revision 13539)
+@@ -87,7 +87,7 @@
+ 	responses=xNewZeroInit<IssmDouble>(numFns);
+ 
+ 	/*run core solution: */
+-	SpawnCore(responses,numFns, variables,variable_descriptors,numACV,femmodel,counter);
++	DakotaSpawnCore(responses,numFns, variables,variable_descriptors,numACV,femmodel,counter);
+ 
+ 	/*populate responses: */
+ 	for(i=0;i<numFns;i++){
Index: /issm/oecreview/Archive/13393-13976/ISSM-13539-13540.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13539-13540.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13539-13540.diff	(revision 13980)
@@ -0,0 +1,1113 @@
+Index: ../trunk-jpl/externalpackages/python/install-2.7.3-macosx-lion.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/python/install-2.7.3-macosx-lion.sh	(revision 13539)
++++ ../trunk-jpl/externalpackages/python/install-2.7.3-macosx-lion.sh	(revision 13540)
+@@ -7,7 +7,7 @@
+ mkdir install src
+ 
+ #Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py http://issm.jpl.nasa.gov/files/externalpackages/Python-2.7.3.tgz Python-2.7.3.tgz
++#$ISSM_DIR/scripts/DownloadExternalPackage.py http://issm.jpl.nasa.gov/files/externalpackages/Python-2.7.3.tgz Python-2.7.3.tgz
+ 
+ #Untar and move python into install directory
+ tar -zxvf  Python-2.7.3.tgz
+@@ -16,8 +16,7 @@
+ 
+ #Configure and compile
+ cd src 
+-./configure \
+- --enable-framework="$ISSM_DIR/externalpackages/python/install/Library/Frameworks" 
++./configure --enable-framework="$ISSM_DIR/externalpackages/python/install/Library/Frameworks" 
+ if [ $# -eq 0 ]; then
+ 	make
+ else
+Index: ../trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 13539)
++++ ../trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 13540)
+@@ -17,88 +17,42 @@
+ #include "../include/include.h"
+ #include "../solvers/solvers.h"
+ 
+-void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype){
++void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore){
+ 
+ 	/*output: */
+ 	void (*solutioncore)(FemModel*)=NULL;
+ 
+-	switch(solutiontype){
++	/*parameters: */
++	bool control_analysis=false;
++	bool tao_analysis=false;
++	bool dakota_analysis=false;
+ 	
+-		case DiagnosticSolutionEnum:
+-			#ifdef _HAVE_DIAGNOSTIC_
+-			solutioncore=&diagnostic_core;
+-			#else
+-			_error_("ISSM was not compiled with diagnostic capabilities. Exiting");
+-			#endif
+-			break;
+-		case SteadystateSolutionEnum:
+-			#ifdef _HAVE_STEADYSTATE_
+-			solutioncore=&steadystate_core;
+-			#else
+-			_error_("ISSM was not compiled with steady state capabilities. Exiting");
+-			#endif
+-			break;
+-		case ThermalSolutionEnum:
+-			#ifdef _HAVE_THERMAL_
+-			solutioncore=&thermal_core;
+-			#else
+-			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+-			#endif
+-			break;
+-		case EnthalpySolutionEnum:
+-			#ifdef _HAVE_THERMAL_
+-			solutioncore=&enthalpy_core;
+-			#else
+-			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+-			#endif
+-			break;
+-		case BalancethicknessSolutionEnum:
+-			#ifdef _HAVE_BALANCED_
+-			solutioncore=&balancethickness_core;
+-			#else
+-			_error_("ISSM was not compiled with balanced capabilities. Exiting");
+-			#endif
+-			break;
+-		case HydrologySolutionEnum:
+-			#ifdef _HAVE_HYDROLOGY_
+-			solutioncore=&hydrology_core;
+-			#else
+-			_error_("ISSM was not compiled with hydrology capabilities. Exiting");
+-			#endif
+-			break;
+-		case SurfaceSlopeSolutionEnum:
+-			#ifdef _HAVE_SLOPE_
+-			solutioncore=&surfaceslope_core;
+-			#else
+-			_error_("ISSM was not compiled with slope capabilities. Exiting");
+-			#endif
+-			break;
+-		case BedSlopeSolutionEnum:
+-			#ifdef _HAVE_SLOPE_
+-			solutioncore=&bedslope_core;
+-			#else
+-			_error_("ISSM was not compiled with slope capabilities. Exiting");
+-			#endif
+-			break;
+-		case TransientSolutionEnum:
+-			#ifdef _HAVE_TRANSIENT_
+-			solutioncore=&transient_core;
+-			#else
+-			_error_("ISSM was not compiled with transient capabilities. Exiting");
+-			#endif
+-			break;
+-		case PrognosticSolutionEnum:
+-			#ifdef _HAVE_PROGNOSTIC_
+-			solutioncore=&prognostic_core;
+-			#else
+-			_error_("ISSM was not compiled with prognostic capabilities. Exiting");
+-			#endif
+-			break;
+-		default:
+-			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
+-			break;
++	/* retrieve some parameters that tell us whether wrappers are allowed, or whether we return 
++	 * a pure core. Wrappers can be dakota_core (which samples many solution_cores) or control_core (which 
++	 * carries out adjoint based inversion on a certain core: */
++	parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
++	parameters->FindParam(&control_analysis,InversionIscontrolEnum);
++	parameters->FindParam(&tao_analysis,InversionTaoEnum);
++
++	if(nodakotacore)dakota_analysis=false;
++
++	if(dakota_analysis){
++		#ifdef _HAVE_DAKOTA_
++		solutioncore=dakota_core;
++		#else
++		_error_("ISSM was not compiled with dakota support, cannot carry out dakota analysis!");
++		#endif
+ 	}
+-	
++	else if(control_analysis){
++		#ifdef _HAVE_CONTROL_
++		if(tao_analysis) solutioncore=controltao_core;
++		else solutioncore=control_core;
++		#else
++		_error_("ISSM was not compiled with control support, cannot carry out control analysis!");
++		#endif
++	}
++	else PureCorePointerFromSolutionEnum(&solutioncore,parameters,solutiontype);  /*This means we retrieve a core solution that is not a wrapper*/
++
+ 	/*Assign output pointer:*/
+ 	_assert_(psolutioncore);
+ 	*psolutioncore=solutioncore;
+Index: ../trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp	(revision 0)
++++ ../trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp	(revision 13540)
+@@ -0,0 +1,106 @@
++/*!\file:  PureCorePointerFromSolutionEnum.cpp
++ * \brief: return type of analyses, number of analyses and core solution function.
++ */ 
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "../toolkits/toolkits.h"
++#include "../classes/objects/objects.h"
++#include "../shared/shared.h"
++#include "../EnumDefinitions/EnumDefinitions.h"
++#include "./solutions.h"
++#include "../modules/modules.h"
++#include "../include/include.h"
++#include "../solvers/solvers.h"
++
++void PureCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype){
++
++	/*output: */
++	void (*solutioncore)(FemModel*)=NULL;
++
++	switch(solutiontype){
++	
++		case DiagnosticSolutionEnum:
++			#ifdef _HAVE_DIAGNOSTIC_
++			solutioncore=&diagnostic_core;
++			#else
++			_error_("ISSM was not compiled with diagnostic capabilities. Exiting");
++			#endif
++			break;
++		case SteadystateSolutionEnum:
++			#ifdef _HAVE_STEADYSTATE_
++			solutioncore=&steadystate_core;
++			#else
++			_error_("ISSM was not compiled with steady state capabilities. Exiting");
++			#endif
++			break;
++		case ThermalSolutionEnum:
++			#ifdef _HAVE_THERMAL_
++			solutioncore=&thermal_core;
++			#else
++			_error_("ISSM was not compiled with thermal capabilities. Exiting");
++			#endif
++			break;
++		case EnthalpySolutionEnum:
++			#ifdef _HAVE_THERMAL_
++			solutioncore=&enthalpy_core;
++			#else
++			_error_("ISSM was not compiled with thermal capabilities. Exiting");
++			#endif
++			break;
++		case BalancethicknessSolutionEnum:
++			#ifdef _HAVE_BALANCED_
++			solutioncore=&balancethickness_core;
++			#else
++			_error_("ISSM was not compiled with balanced capabilities. Exiting");
++			#endif
++			break;
++		case HydrologySolutionEnum:
++			#ifdef _HAVE_HYDROLOGY_
++			solutioncore=&hydrology_core;
++			#else
++			_error_("ISSM was not compiled with hydrology capabilities. Exiting");
++			#endif
++			break;
++		case SurfaceSlopeSolutionEnum:
++			#ifdef _HAVE_SLOPE_
++			solutioncore=&surfaceslope_core;
++			#else
++			_error_("ISSM was not compiled with slope capabilities. Exiting");
++			#endif
++			break;
++		case BedSlopeSolutionEnum:
++			#ifdef _HAVE_SLOPE_
++			solutioncore=&bedslope_core;
++			#else
++			_error_("ISSM was not compiled with slope capabilities. Exiting");
++			#endif
++			break;
++		case TransientSolutionEnum:
++			#ifdef _HAVE_TRANSIENT_
++			solutioncore=&transient_core;
++			#else
++			_error_("ISSM was not compiled with transient capabilities. Exiting");
++			#endif
++			break;
++		case PrognosticSolutionEnum:
++			#ifdef _HAVE_PROGNOSTIC_
++			solutioncore=&prognostic_core;
++			#else
++			_error_("ISSM was not compiled with prognostic capabilities. Exiting");
++			#endif
++			break;
++		default:
++			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
++			break;
++	}
++	
++	/*Assign output pointer:*/
++	_assert_(psolutioncore);
++	*psolutioncore=solutioncore;
++
++}
+Index: ../trunk-jpl/src/c/solutions/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/ad_core.cpp	(revision 0)
++++ ../trunk-jpl/src/c/solutions/ad_core.cpp	(revision 13540)
+@@ -0,0 +1,301 @@
++/*!\file ad_core
++ * \brief: compute outputs from the AD mode,  using our dependents and independents, and drivers available in Adolc.
++ */
++
++/*Includes: {{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++
++#include <set>
++#include "../toolkits/toolkits.h"
++#include "../classes/objects/objects.h"
++#include "../shared/shared.h"
++#include "../io/io.h"
++#include "../EnumDefinitions/EnumDefinitions.h"
++#include "./solutions.h"
++#include "../modules/modules.h"
++#include "../include/include.h"
++#include "../solvers/solvers.h"
++/*}}}*/
++
++void ad_core(FemModel* femmodel){
++	
++	/*diverse: */
++	int         i;
++	int         dummy;
++
++	bool        isautodiff         = false;
++	int         num_dependents;
++	int         num_independents;
++	char*       driver=NULL;
++
++	/*state variables: */
++	IssmDouble *axp                = NULL;
++	double     *xp                 = NULL;
++
++	/*AD mode on?: */
++	femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
++
++	if(isautodiff){
++
++		#ifdef _HAVE_ADOLC_
++
++			if(VerboseAutodiff())_pprintLine_("   start ad core");
++		
++			/*First, stop tracing: */
++			trace_off();
++
++			/*preliminary checks: */
++			femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
++			femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
++			if(!(num_dependents*num_independents)) return;
++			
++			/*retrieve state variable: */
++			femmodel->parameters->FindParam(&axp,&dummy,AutodiffXpEnum);
++
++			/* driver argument */
++			xp=xNew<double>(num_independents);
++			for(i=0;i<num_independents;i++){
++				xp[i]=reCast<double,IssmDouble>(axp[i]);
++			}
++
++			/*get the EDF pointer:*/
++			ext_diff_fct *anEDF_for_solverx_p=dynamic_cast<GenericParam<Adolc_edf> * >(femmodel->parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
++
++			/*Branch according to AD driver: */
++			femmodel->parameters->FindParam(&driver,AutodiffDriverEnum);
++
++			/* these are always needed regardless of the interpreter */
++                        anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
++                        anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
++
++			if (strcmp(driver,"fos_forward")==0){
++				
++				int     anIndepIndex;
++				double *tangentDir=NULL;
++				double *jacTimesTangentDir=NULL;
++				double *theOutput=NULL;
++				
++				/*retrieve direction index: */
++				femmodel->parameters->FindParam(&anIndepIndex,AutodiffFosForwardIndexEnum);
++				
++				if (anIndepIndex<0 || anIndepIndex>=num_independents) _error_("index value for AutodiffFosForwardIndexEnum should be in [0,num_independents-1]");
++
++				tangentDir=xNewZeroInit<double>(num_independents);
++				tangentDir[anIndepIndex]=1.0;
++			
++				jacTimesTangentDir=xNew<double>(num_dependents);
++				theOutput=xNew<double>(num_dependents);
++				
++				/*set the forward method function pointer: */
++				anEDF_for_solverx_p->fos_forward=EDF_fos_forward_for_solverx;
++
++				/*allocate the space for the parameters to invoke the EDF fos_forward:*/
++				anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
++				anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
++
++				/*call driver: */
++				fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir );
++
++				/*add to results*/
++				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,jacTimesTangentDir,num_dependents,1,1,0.0));
++				
++				/*free resources :*/
++				xDelete(theOutput);
++				xDelete(jacTimesTangentDir);
++				xDelete(tangentDir);
++			}
++			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward_all")==0)){
++				
++				int* indepIndices=NULL;
++				int tangentDirNum;
++				int dummy;
++				double **jacTimesSeed=NULL;
++				double **seed=NULL;
++				double *theOutput=NULL;
++				std::set<unsigned int> anIndexSet;
++
++					
++				/*retrieve directions:*/
++				if (strcmp(driver,"fov_forward_all")==0){
++					tangentDirNum=num_independents;
++					indepIndices=xNewZeroInit<int>(tangentDirNum);
++					for(i=0;i<num_independents;i++)indepIndices[i]=1;
++				}
++				else{
++					femmodel->parameters->FindParam(&indepIndices,&tangentDirNum,&dummy,AutodiffFovForwardIndicesEnum);
++				}
++
++				/*Some checks: */
++				if (tangentDirNum<1 || tangentDirNum>num_independents) _error_("tangentDirNum should be in [1,num_independents]");
++
++				/* full Jacobian or Jacobian projection:*/
++				jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
++				
++				/*set the forward method function pointers: */
++				anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
++				// anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
++
++				/*allocate the space for the parameters to invoke EDF fov_forward:*/
++				anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, tangentDirNum);
++				anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, tangentDirNum);
++
++				/*seed matrix: */
++				seed=xNewZeroInit<double>(num_independents,tangentDirNum);
++
++				/*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
++				for (int i=0; i<tangentDirNum; ++i) {
++					/* make sure the index is in range*/
++					if (indepIndices[i]>num_independents) {
++						_error_("indepIndices values must be in [0,num_independents-1]");
++					}
++					if (anIndexSet.find(indepIndices[i])!=anIndexSet.end()) {
++						_error_("duplicate indepIndices values are not allowed until we implement Jacobian decompression");
++					}
++					anIndexSet.insert(indepIndices[i]);
++					/* now populate the seed matrix from the set of independent indices;
++					 * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
++					seed[indepIndices[i]][i]=1.0;
++				}
++
++				/*allocate output: */
++				theOutput=xNew<double>(num_dependents);
++
++				/*call driver: */
++				fov_forward(1,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed );
++				/*Free resources: */
++				xDelete(theOutput);
++				xDelete(indepIndices);
++				xDelete(seed);
++
++				/*add to results: */
++				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,*jacTimesSeed,num_dependents*tangentDirNum,1,1,0.0));
++
++				/*Free resources: */
++				xDelete(jacTimesSeed);
++				xDelete(indepIndices);
++			}
++			else if (strcmp(driver,"fos_reverse")==0) {
++
++				int     aDepIndex=0;
++				double *aWeightVector=NULL;
++				double *weightVectorTimesJac=NULL;
++
++				/*retrieve direction index: */
++				femmodel->parameters->FindParam(&aDepIndex,AutodiffFosReverseIndexEnum);
++
++				if (aDepIndex<0 || aDepIndex>=num_dependents) _error_("index value for AutodiffFosReverseIndexEnum should be in [0,num_dependents-1]");
++
++				aWeightVector=xNewZeroInit<double>(num_dependents);
++				aWeightVector[aDepIndex]=1.0;
++
++				weightVectorTimesJac=xNew<double>(num_independents);
++
++				/*set the forward method function pointer: */
++				anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
++
++				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
++				anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
++
++				/*call driver: */
++				fos_reverse(1,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
++
++				/*add to results*/
++				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,weightVectorTimesJac,num_independents,1,1,0.0));
++
++				/*free resources :*/
++				xDelete(weightVectorTimesJac);
++				xDelete(aWeightVector);
++			}
++			else if ((strcmp(driver,"fov_reverse")==0) || (strcmp(driver,"fov_reverse_all")==0)){
++
++				int* depIndices=NULL;
++				int weightNum;
++				int dummy;
++				double **weightsTimesJac=NULL;
++				double **weights=NULL;
++				std::set<unsigned int> anIndexSet;
++
++
++				/*retrieve directions:*/
++				if (strcmp(driver,"fov_reverse_all")==0){
++					weightNum=num_dependents;
++					depIndices=xNewZeroInit<int>(weightNum);
++					for(i=0;i<num_dependents;i++)depIndices[i]=1;
++				}
++				else{
++					femmodel->parameters->FindParam(&depIndices,&weightNum,&dummy,AutodiffFovForwardIndicesEnum);
++				}
++
++				/*Some checks: */
++				if (weightNum<1 || weightNum>num_dependents) _error_("tangentDirNum should be in [1,num_dependents]");
++
++				/* full Jacobian or Jacobian projection:*/
++				weightsTimesJac=xNew<double>(weightNum,num_independents);
++
++				/*set the forward method function pointers: */
++				anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
++
++				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
++				anEDF_for_solverx_p->dpp_U=xNew<double>(weightNum,anEDF_for_solverx_p->max_m);
++				anEDF_for_solverx_p->dpp_Z=xNew<double>(weightNum,anEDF_for_solverx_p->max_n);
++
++				/*seed matrix: */
++				weights=xNewZeroInit<double>(weightNum,num_dependents);
++
++				/*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
++				for (int i=0; i<weightNum; ++i) {
++					/* make sure the index is in range*/
++					if (depIndices[i]>num_dependents) {
++						_error_("depIndices values must be in [0,num_dependents-1]");
++					}
++					if (anIndexSet.find(depIndices[i])!=anIndexSet.end()) {
++						_error_("duplicate depIndices values are not allowed until we implement Jacobian decompression");
++					}
++					anIndexSet.insert(depIndices[i]);
++					/* now populate the seed matrix from the set of independent indices;
++					 * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
++					weights[depIndices[i]][i]=1.0;
++				}
++
++				/*call driver: */
++				fov_reverse(1,num_dependents,num_independents, weightNum, weights, weightsTimesJac );
++
++				/*add to results: */
++				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,*weightsTimesJac,weightNum*num_independents,1,1,0.0));
++
++				/*Free resources: */
++				xDelete(weights);
++				xDelete(weightsTimesJac);
++				xDelete(depIndices);
++			}
++			else _error_("driver: " << driver << " not yet supported!");
++
++			/* delete the allocated space for the parameters:*/
++			xDelete(anEDF_for_solverx_p->dp_x);
++			xDelete(anEDF_for_solverx_p->dp_X);
++			xDelete(anEDF_for_solverx_p->dpp_X);
++			xDelete(anEDF_for_solverx_p->dp_y);
++			xDelete(anEDF_for_solverx_p->dp_Y);
++			xDelete(anEDF_for_solverx_p->dpp_Y);
++			xDelete(anEDF_for_solverx_p->dp_U);
++			xDelete(anEDF_for_solverx_p->dpp_U);
++			xDelete(anEDF_for_solverx_p->dp_Z);
++			xDelete(anEDF_for_solverx_p->dpp_Z);
++
++			/*Free resources: */
++			xDelete(xp);
++			xDelete(axp); 
++			
++			if(VerboseAutodiff())_pprintLine_("   end AD core");
++
++		#else
++			_error_("Should not be requesting AD drivers when an AD library is not available!");
++		#endif
++	}
++}
+Index: ../trunk-jpl/src/c/solutions/solutions.h
+===================================================================
+--- ../trunk-jpl/src/c/solutions/solutions.h	(revision 13539)
++++ ../trunk-jpl/src/c/solutions/solutions.h	(revision 13540)
+@@ -30,6 +30,7 @@
+ void steadystate_core(FemModel* femmodel);
+ void transient_core(FemModel* femmodel);
+ void dakota_core(FemModel* femmodel);
++void ad_core(FemModel* femmodel);
+ IssmDouble objectivefunction(IssmDouble search_scalar,OptArgs* optargs);
+ 
+ //convergence:
+@@ -51,7 +52,8 @@
+ 
+ //solution configuration
+ void AnalysisConfiguration(int** panalyses,int* pnumanalyses, int solutiontype);
+-void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype);
++void PureCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype);
++void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore=false);
+ void AdjointCorePointerFromSolutionEnum(void (**padjointcore)(FemModel*),int solutiontype);
+ 
+ 
+Index: ../trunk-jpl/src/c/solutions/dakota_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/dakota_core.cpp	(revision 13539)
++++ ../trunk-jpl/src/c/solutions/dakota_core.cpp	(revision 13540)
+@@ -64,13 +64,10 @@
+ 	Dakota::ModelLIter ml_iter;
+ 	Parameters* parameters                = NULL;
+ 
+-	/*Retrieve parameters: */
+-	parameters=femmodel->parameters;
+-
+ 	/*Recover dakota_input_file, dakota_output_file and dakota_error_file, in the parameters dataset in parallel */
+-	parameters->FindParam(&dakota_input_file,QmuInNameEnum);
+-	parameters->FindParam(&dakota_output_file,QmuOutNameEnum);
+-	parameters->FindParam(&dakota_error_file,QmuErrNameEnum);
++	femmodel->parameters->FindParam(&dakota_input_file,QmuInNameEnum);
++	femmodel->parameters->FindParam(&dakota_output_file,QmuOutNameEnum);
++	femmodel->parameters->FindParam(&dakota_error_file,QmuErrNameEnum);
+ 
+ 	if(my_rank==0){
+ 	
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13539)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13540)
+@@ -14,7 +14,6 @@
+ 	FILE *output_fid       = NULL;
+ 	FILE *petscoptionsfid  = NULL;
+ 	bool  waitonlock       = false;
+-	bool  dakota_analysis,control_analysis,tao_analysis;
+ 
+ 	/*AD: */
+ 	bool autodiff=false;
+@@ -78,9 +77,6 @@
+ 
+ 	/*get parameters: */
+ 	femmodel->parameters->FindParam(&waitonlock,SettingsWaitonlockEnum);
+-	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+-	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
+-	femmodel->parameters->FindParam(&tao_analysis,InversionTaoEnum);
+ 	femmodel->parameters->FindParam(&autodiff,AutodiffIsautodiffEnum);
+ 
+ 	/*Profiling: */
+@@ -103,36 +99,9 @@
+ 	#endif
+ 
+ 	_pprintLine_("call computational core:");
+-
+-		
+-	profiler->Tag(StartCore);
+-	if(dakota_analysis){
+-		#ifdef _HAVE_DAKOTA_
+-		dakota_core(femmodel);
+-		#else
+-		_error_("ISSM was not compiled with dakota support, cannot carry out dakota analysis!");
+-		#endif
+-	}
+-	else if(control_analysis){
+-		#ifdef _HAVE_CONTROL_
+-		if(tao_analysis) controltao_core(femmodel);
+-		else control_core(femmodel);
+-		#else
+-		_error_("ISSM was not compiled with control support, cannot carry out control analysis!");
+-		#endif
+-	}
+-	else{
+-		solutioncore(femmodel);
+-	}
+-
+-	#ifdef _HAVE_ADOLC_
+-	if(autodiff){
+-		trace_off();
+-		AutodiffDriversx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+-	}
+-	#endif
+-	profiler->Tag(FinishCore);
+-
++	profiler->Tag(StartCore); solutioncore(femmodel); profiler->Tag(FinishCore); 
++	profiler->Tag(StartAdCore); ad_core(femmodel); profiler->Tag(FinishAdCore); 
++	
+ 	ProfilerEnd(profiler,femmodel->results,femmodel->parameters);
+ 
+ 	_pprintLine_("write results to disk:");
+@@ -219,9 +188,9 @@
+ 		_pprintLine_("Solution memory used   : " << solution_memory << "  Bytes");
+ 
+ 		/*Add to results: */
+-		results->AddObject(new GenericExternalResult<double>(results->Size()+1, ProfilingSolutionTimeEnum, solution_time, 1, 0));
+-		results->AddObject(new GenericExternalResult<double>(results->Size()+1, ProfilingCurrentMemEnum, solution_memory, 1, 0));
+-		results->AddObject(new GenericExternalResult<double>(results->Size()+1, ProfilingCurrentFlopsEnum, solution_flops, 1, 0));
++		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingSolutionTimeEnum, solution_time, 1, 0));
++		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentMemEnum, solution_memory, 1, 0));
++		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentFlopsEnum, solution_flops, 1, 0));
+ 	}
+ 
+ } /*}}}*/
+Index: ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13539)
++++ ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13540)
+@@ -54,6 +54,7 @@
+ 	bool     control_analysis          = false;
+ 	void (*solutioncore)(FemModel*)    = NULL;
+ 	FemModel* femmodel                 = NULL;
++	bool      nodakotacore             = true;
+ 
+ 
+ 	/*If counter==-1 on cpu0, it means that the dakota runs are done. In which case, bail out and return 0: */
+@@ -80,12 +81,7 @@
+ 
+ 	/*Determine solution sequence: */
+ 	if(VerboseQmu()) _pprintLine_("Starting " << EnumToStringx(solution_type) << " core:");
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+-	#ifdef _HAVE_CONTROL_
+-	if(control_analysis)solutioncore=&control_core;
+-	#else
+-	_error_("ISSM was not compiled with control capabilities, exiting!");
+-	#endif
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type,nodakotacore);
+ 
+ 	/*Run the core solution sequence: */
+ 	solutioncore(femmodel);
+@@ -96,6 +92,8 @@
+ 	
+ 	/*Free ressources:*/
+ 	DakotaFree(&d_variables,&d_variables_descriptors,&responses_descriptors, d_numvariables, numresponsedescriptors);
++
++	return 1; //this is critical! do not return 0, otherwise, dakota_core will stop running!
+ }
+ 
+ void DakotaMPI_Bcast(double** pvariables, char*** pvariables_descriptors,int* pnumvariables, int* pnumresponses){ /*{{{*/
+Index: ../trunk-jpl/src/c/solutions/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/control_core.cpp	(revision 13539)
++++ ../trunk-jpl/src/c/solutions/control_core.cpp	(revision 13540)
+@@ -61,7 +61,7 @@
+ 	femmodel->parameters->SetParam(false,SaveResultsEnum);
+ 
+ 	/*out of solution_type, figure out solution core and adjoint function pointer*/
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	PureCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+ 	AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
+ 
+ 	/*Launch once a complete solution to set up all inputs*/
+Index: ../trunk-jpl/src/c/solutions/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13539)
++++ ../trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13540)
+@@ -93,7 +93,7 @@
+ 	if(VerboseControl()) _pprintLine_("   preparing final solution");
+ 	femmodel->parameters->SetParam(true,SaveResultsEnum);
+ 	void (*solutioncore)(FemModel*)=NULL;
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	PureCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+ 	solutioncore(femmodel);
+ 
+ 	/*Clean up and return*/
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13539)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp	(revision 13540)
+@@ -1,286 +0,0 @@
+-/*!\file AutodiffDriversx
+- * \brief: compute outputs from the AD mode,  using our dependents and independents, and drivers available in Adolc.
+- */
+-#include <set>
+-#include "../../modules/modules.h"
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-
+-void AutodiffDriversx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,Results* results){
+-
+-
+-	/*diverse: */
+-	int         i;
+-	int         dummy;
+-
+-	bool        isautodiff         = false;
+-	int         num_dependents;
+-	int         num_independents;
+-	char*       driver=NULL;
+-
+-	/*state variables: */
+-	IssmDouble *axp                = NULL;
+-	double     *xp                 = NULL;
+-
+-	/*AD mode on?: */
+-	parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
+-
+-	if(isautodiff){
+-
+-		#ifdef _HAVE_ADOLC_
+-
+-			if(VerboseAutodiff())_pprintLine_("   start AD driver");
+-
+-			/*preliminary checks: */
+-			parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+-			parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
+-			if(!(num_dependents*num_independents)) return;
+-			
+-			/*retrieve state variable: */
+-			parameters->FindParam(&axp,&dummy,AutodiffXpEnum);
+-
+-			/* driver argument */
+-			xp=xNew<double>(num_independents);
+-			for(i=0;i<num_independents;i++){
+-				xp[i]=reCast<double,IssmDouble>(axp[i]);
+-			}
+-
+-			/*get the EDF pointer:*/
+-			ext_diff_fct *anEDF_for_solverx_p=dynamic_cast<GenericParam<Adolc_edf> * >(parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
+-
+-			/*Branch according to AD driver: */
+-			parameters->FindParam(&driver,AutodiffDriverEnum);
+-
+-			/* these are always needed regardless of the interpreter */
+-                        anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
+-                        anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
+-
+-			if (strcmp(driver,"fos_forward")==0){
+-				
+-				int     anIndepIndex;
+-				double *tangentDir=NULL;
+-				double *jacTimesTangentDir=NULL;
+-				double *theOutput=NULL;
+-				
+-				/*retrieve direction index: */
+-				parameters->FindParam(&anIndepIndex,AutodiffFosForwardIndexEnum);
+-				
+-				if (anIndepIndex<0 || anIndepIndex>=num_independents) _error_("index value for AutodiffFosForwardIndexEnum should be in [0,num_independents-1]");
+-
+-				tangentDir=xNewZeroInit<double>(num_independents);
+-				tangentDir[anIndepIndex]=1.0;
+-			
+-				jacTimesTangentDir=xNew<double>(num_dependents);
+-				theOutput=xNew<double>(num_dependents);
+-				
+-				/*set the forward method function pointer: */
+-				anEDF_for_solverx_p->fos_forward=EDF_fos_forward_for_solverx;
+-
+-                                /*allocate the space for the parameters to invoke the EDF fos_forward:*/
+-				anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
+-				anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
+-
+-				/*call driver: */
+-				fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir );
+-
+-				/*add to results*/
+-				results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,jacTimesTangentDir,num_dependents,1,1,0.0));
+-				
+-				/*free resources :*/
+-				xDelete(theOutput);
+-				xDelete(jacTimesTangentDir);
+-				xDelete(tangentDir);
+-			}
+-			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward_all")==0)){
+-				
+-				int* indepIndices=NULL;
+-				int tangentDirNum;
+-				int dummy;
+-				double **jacTimesSeed=NULL;
+-				double **seed=NULL;
+-				double *theOutput=NULL;
+-				std::set<unsigned int> anIndexSet;
+-
+-					
+-				/*retrieve directions:*/
+-				if (strcmp(driver,"fov_forward_all")==0){
+-					tangentDirNum=num_independents;
+-					indepIndices=xNewZeroInit<int>(tangentDirNum);
+-					for(i=0;i<num_independents;i++)indepIndices[i]=1;
+-				}
+-				else{
+-					parameters->FindParam(&indepIndices,&tangentDirNum,&dummy,AutodiffFovForwardIndicesEnum);
+-				}
+-
+-				/*Some checks: */
+-				if (tangentDirNum<1 || tangentDirNum>num_independents) _error_("tangentDirNum should be in [1,num_independents]");
+-
+-				/* full Jacobian or Jacobian projection:*/
+-				jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
+-				
+-				/*set the forward method function pointers: */
+-				anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
+-				// anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
+-
+-				/*allocate the space for the parameters to invoke EDF fov_forward:*/
+-				anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, tangentDirNum);
+-				anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, tangentDirNum);
+-
+-				/*seed matrix: */
+-				seed=xNewZeroInit<double>(num_independents,tangentDirNum);
+-
+-				/*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
+-				for (int i=0; i<tangentDirNum; ++i) {
+-					/* make sure the index is in range*/
+-					if (indepIndices[i]>num_independents) {
+-						_error_("indepIndices values must be in [0,num_independents-1]");
+-					}
+-					if (anIndexSet.find(indepIndices[i])!=anIndexSet.end()) {
+-						_error_("duplicate indepIndices values are not allowed until we implement Jacobian decompression");
+-					}
+-					anIndexSet.insert(indepIndices[i]);
+-					/* now populate the seed matrix from the set of independent indices;
+-					 * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
+-					seed[indepIndices[i]][i]=1.0;
+-				}
+-
+-				/*allocate output: */
+-				theOutput=xNew<double>(num_dependents);
+-
+-				/*call driver: */
+-				fov_forward(1,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed );
+-				/*Free resources: */
+-				xDelete(theOutput);
+-				xDelete(indepIndices);
+-				xDelete(seed);
+-
+-				/*add to results: */
+-				results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,*jacTimesSeed,num_dependents*tangentDirNum,1,1,0.0));
+-
+-				/*Free resources: */
+-				xDelete(jacTimesSeed);
+-				xDelete(indepIndices);
+-			}
+-			else if (strcmp(driver,"fos_reverse")==0) {
+-
+-				int     aDepIndex=0;
+-				double *aWeightVector=NULL;
+-				double *weightVectorTimesJac=NULL;
+-
+-				/*retrieve direction index: */
+-				parameters->FindParam(&aDepIndex,AutodiffFosReverseIndexEnum);
+-
+-				if (aDepIndex<0 || aDepIndex>=num_dependents) _error_("index value for AutodiffFosReverseIndexEnum should be in [0,num_dependents-1]");
+-
+-				aWeightVector=xNewZeroInit<double>(num_dependents);
+-				aWeightVector[aDepIndex]=1.0;
+-
+-				weightVectorTimesJac=xNew<double>(num_independents);
+-
+-				/*set the forward method function pointer: */
+-				anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
+-
+-				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
+-				anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
+-				anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
+-
+-				/*call driver: */
+-				fos_reverse(1,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
+-
+-				/*add to results*/
+-				results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,weightVectorTimesJac,num_independents,1,1,0.0));
+-
+-				/*free resources :*/
+-				xDelete(weightVectorTimesJac);
+-				xDelete(aWeightVector);
+-			}
+-			else if ((strcmp(driver,"fov_reverse")==0) || (strcmp(driver,"fov_reverse_all")==0)){
+-
+-				int* depIndices=NULL;
+-				int weightNum;
+-				int dummy;
+-				double **weightsTimesJac=NULL;
+-				double **weights=NULL;
+-				std::set<unsigned int> anIndexSet;
+-
+-
+-				/*retrieve directions:*/
+-				if (strcmp(driver,"fov_reverse_all")==0){
+-					weightNum=num_dependents;
+-					depIndices=xNewZeroInit<int>(weightNum);
+-					for(i=0;i<num_dependents;i++)depIndices[i]=1;
+-				}
+-				else{
+-					parameters->FindParam(&depIndices,&weightNum,&dummy,AutodiffFovForwardIndicesEnum);
+-				}
+-
+-				/*Some checks: */
+-				if (weightNum<1 || weightNum>num_dependents) _error_("tangentDirNum should be in [1,num_dependents]");
+-
+-				/* full Jacobian or Jacobian projection:*/
+-				weightsTimesJac=xNew<double>(weightNum,num_independents);
+-
+-				/*set the forward method function pointers: */
+-				anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
+-
+-				/*allocate the space for the parameters to invoke the EDF fos_reverse :*/
+-				anEDF_for_solverx_p->dpp_U=xNew<double>(weightNum,anEDF_for_solverx_p->max_m);
+-				anEDF_for_solverx_p->dpp_Z=xNew<double>(weightNum,anEDF_for_solverx_p->max_n);
+-
+-				/*seed matrix: */
+-				weights=xNewZeroInit<double>(weightNum,num_dependents);
+-
+-				/*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
+-				for (int i=0; i<weightNum; ++i) {
+-					/* make sure the index is in range*/
+-					if (depIndices[i]>num_dependents) {
+-						_error_("depIndices values must be in [0,num_dependents-1]");
+-					}
+-					if (anIndexSet.find(depIndices[i])!=anIndexSet.end()) {
+-						_error_("duplicate depIndices values are not allowed until we implement Jacobian decompression");
+-					}
+-					anIndexSet.insert(depIndices[i]);
+-					/* now populate the seed matrix from the set of independent indices;
+-					 * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
+-					weights[depIndices[i]][i]=1.0;
+-				}
+-
+-				/*call driver: */
+-				fov_reverse(1,num_dependents,num_independents, weightNum, weights, weightsTimesJac );
+-
+-				/*add to results: */
+-				results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,*weightsTimesJac,weightNum*num_independents,1,1,0.0));
+-
+-				/*Free resources: */
+-				xDelete(weights);
+-				xDelete(weightsTimesJac);
+-				xDelete(depIndices);
+-			}
+-			else _error_("driver: " << driver << " not yet supported!");
+-
+-			/* delete the allocated space for the parameters:*/
+-			xDelete(anEDF_for_solverx_p->dp_x);
+-			xDelete(anEDF_for_solverx_p->dp_X);
+-			xDelete(anEDF_for_solverx_p->dpp_X);
+-			xDelete(anEDF_for_solverx_p->dp_y);
+-			xDelete(anEDF_for_solverx_p->dp_Y);
+-			xDelete(anEDF_for_solverx_p->dpp_Y);
+-			xDelete(anEDF_for_solverx_p->dp_U);
+-			xDelete(anEDF_for_solverx_p->dpp_U);
+-			xDelete(anEDF_for_solverx_p->dp_Z);
+-			xDelete(anEDF_for_solverx_p->dpp_Z);
+-
+-			/*Free resources: */
+-			xDelete(xp);
+-			xDelete(axp); 
+-			
+-			if(VerboseAutodiff())_pprintLine_("   end AD driver");
+-
+-		#else
+-			_error_("Should not be requesting AD drivers when an AD library is not available!");
+-		#endif
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.h	(revision 13539)
++++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.h	(revision 13540)
+@@ -1,13 +0,0 @@
+-/*!\file:  AutodiffDriversx.h
+- * \brief header file for  requesting AD results (gradient, jacobian, etc ...)
+- */ 
+-
+-#ifndef _AUTODIFF_DRIVERSX_H_
+-#define _AUTODIFF_DRIVERSX_H_
+-
+-#include "../../Container/Container.h"
+-
+-/* local prototypes: */
+-void AutodiffDriversx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,Results* results);
+-
+-#endif  /* _AUTODIFF_DRIVERSX_H_*/
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13539)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13540)
+@@ -7,7 +7,6 @@
+ 
+ /*Modules: */
+ #include "./AddExternalResultx/AddExternalResultx.h"
+-#include "./AutodiffDriversx/AutodiffDriversx.h"
+ #include "./AverageFilterx/AverageFilterx.h"
+ #include "./AverageOntoPartitionx/AverageOntoPartitionx.h"
+ #include "./Bamgx/Bamgx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13539)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13540)
+@@ -326,8 +326,6 @@
+ 					./modules/RequestedOutputsx/RequestedOutputsx.cpp\
+ 					./modules/RequestedDependentsx/RequestedDependentsx.h\
+ 					./modules/RequestedDependentsx/RequestedDependentsx.cpp\
+-					./modules/AutodiffDriversx/AutodiffDriversx.h\
+-					./modules/AutodiffDriversx/AutodiffDriversx.cpp\
+ 					./modules/ResetConstraintsx/ResetConstraintsx.h\
+ 					./modules/ResetConstraintsx/ResetConstraintsx.cpp\
+ 					./modules/ResetCoordinateSystemx/ResetCoordinateSystemx.h\
+@@ -349,8 +347,10 @@
+ 					./solutions/ResetBoundaryConditions.cpp\
+ 					./solutions/AnalysisConfiguration.cpp\
+ 					./solutions/CorePointerFromSolutionEnum.cpp\
++					./solutions/PureCorePointerFromSolutionEnum.cpp\
+ 					./solutions/EnvironmentInit.cpp\
+ 					./solutions/EnvironmentFinalize.cpp\
++					./solutions/ad_core.cpp\
+ 					./solvers/solver_linear.cpp\
+ 					./solvers/solver_nonlinear.cpp\
+ 					./solvers/solver_newton.cpp\
+Index: ../trunk-jpl/src/c/classes/objects/Profiler.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Profiler.cpp	(revision 13539)
++++ ../trunk-jpl/src/c/classes/objects/Profiler.cpp	(revision 13540)
+@@ -16,6 +16,8 @@
+ /*FUNCTION Profiler::Profiler() default constructor {{{*/
+ Profiler::Profiler(){
+ 		 this->time=new Parameters();
++		 this->flops=new Parameters();
++		 this->memory=new Parameters();
+ }
+ /*}}}*/
+ /*FUNCTION Profiler::~Profiler(){{{*/
+Index: ../trunk-jpl/src/c/classes/objects/Profiler.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Profiler.h	(revision 13539)
++++ ../trunk-jpl/src/c/classes/objects/Profiler.h	(revision 13540)
+@@ -20,6 +20,8 @@
+ 	FinishInit,
+ 	StartCore,
+ 	FinishCore,
++	StartAdCore,
++	FinishAdCore,
+ 	Finish
+ };
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13541-13542.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13541-13542.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13541-13542.diff	(revision 13980)
@@ -0,0 +1,70 @@
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13541)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13542)
+@@ -60,7 +60,6 @@
+ 
+ 	/*Create femmodel, using input file: */
+ 	profiler->Tag(StartInit);
+-	
+ 	femmodel=new FemModel(rootpath,binfilename,outbinfilename,solution_type,analyses,numanalyses);
+ 	
+ 	/*get type of solution we are going to run: */
+@@ -82,22 +81,6 @@
+ 	/*Profiling: */
+ 	profiler->Tag(FinishInit);
+ 	
+-	/*If running AD, then initialize a placeholder with which to work: */
+-	#ifdef _HAVE_ADOLC_
+-	GenericParam<Adolc_edf> *theAdolcEDF_p=new GenericParam<Adolc_edf>(AdolcParamEnum);
+-	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(EDF_for_solverx);
+-	// to save some space:
+-	// we know we won't use adolc inside of  the solver:
+-	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->nestedAdolc=false;
+-	// the solution vector is just allocated and doesn't have a meaningfull prior value
+-	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->dp_y_priorRequired=false;
+-	 // the solver wrapper makes sure the matrix and the right hand side don't change
+-	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->dp_x_changes=false;
+-	femmodel->parameters->AddObject(theAdolcEDF_p);
+-	#else
+-	if(autodiff) _error_("ISSM was not compiled with ADOLC support, cannot carry out autodiff analysis!");
+-	#endif
+-
+ 	_pprintLine_("call computational core:");
+ 	profiler->Tag(StartCore); solutioncore(femmodel); profiler->Tag(FinishCore); 
+ 	profiler->Tag(StartAdCore); ad_core(femmodel); profiler->Tag(FinishAdCore); 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13541)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13542)
+@@ -6,9 +6,10 @@
+ #include "../../../toolkits/toolkits.h"
+ #include "../../../io/io.h"
+ #include "../../../EnumDefinitions/EnumDefinitions.h"
+-#include "../../../classes/objects/objects.h"
++#include "../../../classes/classes.h"
+ #include "../../../shared/shared.h"
+ #include "../../../include/include.h"
++#include "../../Solverx/Solverx.h"
+ #include "../ModelProcessorx.h"
+ 
+ void CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+@@ -107,6 +108,18 @@
+ 		/*Don't forget to copy  iomodel->independent_objects to parameters: */
+ 		parameters->AddObject(new DataSetParam(AutodiffIndependentObjectsEnum,iomodel->independent_objects));
+ 		/*}}}*/
++	/*initialize a placeholder to store solver pointers: {{{*/
++	GenericParam<Adolc_edf> *theAdolcEDF_p=new GenericParam<Adolc_edf>(AdolcParamEnum);
++	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(EDF_for_solverx);
++	// to save some space:
++	// we know we won't use adolc inside of  the solver:
++	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->nestedAdolc=false;
++	// the solution vector is just allocated and doesn't have a meaningfull prior value
++	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->dp_y_priorRequired=false;
++	 // the solver wrapper makes sure the matrix and the right hand side don't change
++	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->dp_x_changes=false;
++	parameters->AddObject(theAdolcEDF_p);
++	/*}}}*/
+ 
+ 		/*Assign output pointer: */
+ 		*pparameters=parameters;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13542-13543.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13542-13543.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13542-13543.diff	(revision 13980)
@@ -0,0 +1,96 @@
+Index: ../trunk-jpl/src/c/solutions/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/ad_core.cpp	(revision 13542)
++++ ../trunk-jpl/src/c/solutions/ad_core.cpp	(revision 13543)
+@@ -32,6 +32,7 @@
+ 	int         num_dependents;
+ 	int         num_independents;
+ 	char*       driver=NULL;
++	size_t   tape_stats[11];
+ 
+ 	/*state variables: */
+ 	IssmDouble *axp                = NULL;
+@@ -287,13 +288,23 @@
+ 			xDelete(anEDF_for_solverx_p->dpp_U);
+ 			xDelete(anEDF_for_solverx_p->dp_Z);
+ 			xDelete(anEDF_for_solverx_p->dpp_Z);
+-
++	
++			/*Print statistics: {{{*/
++			tapestats(1,tape_stats); //reading of tape statistics
++			if(VerboseAutodiff()){
++				_pprintLine_("   ADOLC statistics: ");
++				_pprintLine_("   "<<setw(45)<<left<<"Number of independents: " <<tape_stats[0]);
++				_pprintLine_("   "<<setw(45)<<left<<"Number of dependents: " <<tape_stats[1]);
++				_pprintLine_("   "<<setw(45)<<left<<"Maximal number of live active variables: " <<tape_stats[2]);
++				_pprintLine_("   "<<setw(45)<<left<<"Size of value stack (number of overwrites): " <<tape_stats[3]);
++				_pprintLine_("   "<<setw(45)<<left<<"Buffer size (a multiple of eight): " <<tape_stats[4]);
++				_pprintLine_("   "<<setw(45)<<left<<"Total number of operations recorded: " <<tape_stats[5]);
++			}
++			if(VerboseAutodiff())_pprintLine_("   end AD core");
++			
+ 			/*Free resources: */
+ 			xDelete(xp);
+ 			xDelete(axp); 
+-			
+-			if(VerboseAutodiff())_pprintLine_("   end AD core");
+-
+ 		#else
+ 			_error_("Should not be requesting AD drivers when an AD library is not available!");
+ 		#endif
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13542)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13543)
+@@ -15,10 +15,6 @@
+ 	FILE *petscoptionsfid  = NULL;
+ 	bool  waitonlock       = false;
+ 
+-	/*AD: */
+-	bool autodiff=false;
+-	size_t   tape_stats[11];
+-
+ 	/*FemModel: */
+ 	FemModel *femmodel = NULL;
+ 
+@@ -74,13 +70,9 @@
+ 	ParsePetscOptionsx(femmodel->parameters,petscoptionsfid);
+ 	pfclose(petscoptionsfid,petscfilename);
+ 
+-	/*get parameters: */
+-	femmodel->parameters->FindParam(&waitonlock,SettingsWaitonlockEnum);
+-	femmodel->parameters->FindParam(&autodiff,AutodiffIsautodiffEnum);
+-
+-	/*Profiling: */
+ 	profiler->Tag(FinishInit);
+ 	
++	/*call cores: */
+ 	_pprintLine_("call computational core:");
+ 	profiler->Tag(StartCore); solutioncore(femmodel); profiler->Tag(FinishCore); 
+ 	profiler->Tag(StartAdCore); ad_core(femmodel); profiler->Tag(FinishAdCore); 
+@@ -90,24 +82,9 @@
+ 	_pprintLine_("write results to disk:");
+ 	OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+ 	
+-	/*If running AD, close our tape, print statistics: {{{*/
+-	#ifdef _HAVE_ADOLC_
+-	if(autodiff){
+-		tapestats(1,tape_stats); //reading of tape statistics
+-		if(VerboseAutodiff()){
+-			_pprintLine_("   ADOLC statistics: ");
+-			_pprintLine_("   "<<setw(45)<<left<<"Number of independents: " <<tape_stats[0]);
+-			_pprintLine_("   "<<setw(45)<<left<<"Number of dependents: " <<tape_stats[1]);
+-			_pprintLine_("   "<<setw(45)<<left<<"Maximal number of live active variables: " <<tape_stats[2]);
+-			_pprintLine_("   "<<setw(45)<<left<<"Size of value stack (number of overwrites): " <<tape_stats[3]);
+-			_pprintLine_("   "<<setw(45)<<left<<"Buffer size (a multiple of eight): " <<tape_stats[4]);
+-			_pprintLine_("   "<<setw(45)<<left<<"Total number of operations recorded: " <<tape_stats[5]);
+-		}
+-	}
+-	#endif  /*}}}*/
+-
+ 	/*Close output and petsc options file and write lock file if requested*/
+ 	pfclose(output_fid,lockfilename);
++	femmodel->parameters->FindParam(&waitonlock,SettingsWaitonlockEnum);
+ 	if (waitonlock>0){
+ 		_pprintLine_("write lock file:");
+ 		WriteLockFile(lockfilename);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13543-13544.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13543-13544.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13543-13544.diff	(revision 13980)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/externalpackages/python/install-2.7.3-macosx-lion.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/python/install-2.7.3-macosx-lion.sh	(revision 13543)
++++ ../trunk-jpl/externalpackages/python/install-2.7.3-macosx-lion.sh	(revision 13544)
+@@ -7,7 +7,7 @@
+ mkdir install src
+ 
+ #Download from ISSM server
+-#$ISSM_DIR/scripts/DownloadExternalPackage.py http://issm.jpl.nasa.gov/files/externalpackages/Python-2.7.3.tgz Python-2.7.3.tgz
++$ISSM_DIR/scripts/DownloadExternalPackage.py http://issm.jpl.nasa.gov/files/externalpackages/Python-2.7.3.tgz Python-2.7.3.tgz
+ 
+ #Untar and move python into install directory
+ tar -zxvf  Python-2.7.3.tgz
+@@ -16,7 +16,8 @@
+ 
+ #Configure and compile
+ cd src 
+-./configure --enable-framework="$ISSM_DIR/externalpackages/python/install/Library/Frameworks" 
++./configure \
++ --enable-framework="$ISSM_DIR/externalpackages/python/install/Library/Frameworks" 
+ if [ $# -eq 0 ]; then
+ 	make
+ else
Index: /issm/oecreview/Archive/13393-13976/ISSM-13544-13545.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13544-13545.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13544-13545.diff	(revision 13980)
@@ -0,0 +1,108 @@
+Index: ../trunk-jpl/src/c/solutions/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/ad_core.cpp	(revision 13544)
++++ ../trunk-jpl/src/c/solutions/ad_core.cpp	(revision 13545)
+@@ -25,18 +25,17 @@
+ void ad_core(FemModel* femmodel){
+ 	
+ 	/*diverse: */
+-	int         i;
+-	int         dummy;
++	int     i;
++	int     dummy;
++	int     num_dependents;
++	int     num_independents;
++	bool    isautodiff       = false;
++	char   *driver           = NULL;
++	size_t  tape_stats[11];
+ 
+-	bool        isautodiff         = false;
+-	int         num_dependents;
+-	int         num_independents;
+-	char*       driver=NULL;
+-	size_t   tape_stats[11];
+-
+ 	/*state variables: */
+-	IssmDouble *axp                = NULL;
+-	double     *xp                 = NULL;
++	IssmDouble *axp = NULL;
++	double     *xp  = NULL;
+ 
+ 	/*AD mode on?: */
+ 	femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
+@@ -71,15 +70,15 @@
+ 			femmodel->parameters->FindParam(&driver,AutodiffDriverEnum);
+ 
+ 			/* these are always needed regardless of the interpreter */
+-                        anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
+-                        anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
++			anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
++			anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
+ 
+ 			if (strcmp(driver,"fos_forward")==0){
+ 				
+ 				int     anIndepIndex;
+-				double *tangentDir=NULL;
+-				double *jacTimesTangentDir=NULL;
+-				double *theOutput=NULL;
++				double *tangentDir         = NULL;
++				double *jacTimesTangentDir = NULL;
++				double *theOutput          = NULL;
+ 				
+ 				/*retrieve direction index: */
+ 				femmodel->parameters->FindParam(&anIndepIndex,AutodiffFosForwardIndexEnum);
+@@ -112,14 +111,13 @@
+ 			}
+ 			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward_all")==0)){
+ 				
+-				int* indepIndices=NULL;
+-				int tangentDirNum;
+-				int dummy;
+-				double **jacTimesSeed=NULL;
+-				double **seed=NULL;
+-				double *theOutput=NULL;
++				int      tangentDirNum;
++				int      dummy;
++				int     *indepIndices  = NULL;
++				double **jacTimesSeed  = NULL;
++				double **seed          = NULL;
++				double  *theOutput     = NULL;
+ 				std::set<unsigned int> anIndexSet;
+-
+ 					
+ 				/*retrieve directions:*/
+ 				if (strcmp(driver,"fov_forward_all")==0){
+@@ -301,6 +299,7 @@
+ 				_pprintLine_("   "<<setw(45)<<left<<"Total number of operations recorded: " <<tape_stats[5]);
+ 			}
+ 			if(VerboseAutodiff())_pprintLine_("   end AD core");
++			/*}}}*/
+ 			
+ 			/*Free resources: */
+ 			xDelete(xp);
+Index: ../trunk-jpl/src/c/solutions/solutions.h
+===================================================================
+--- ../trunk-jpl/src/c/solutions/solutions.h	(revision 13544)
++++ ../trunk-jpl/src/c/solutions/solutions.h	(revision 13545)
+@@ -56,5 +56,4 @@
+ void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore=false);
+ void AdjointCorePointerFromSolutionEnum(void (**padjointcore)(FemModel*),int solutiontype);
+ 
+-
+ #endif
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13544)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13545)
+@@ -74,9 +74,8 @@
+ 	
+ 	/*call cores: */
+ 	_pprintLine_("call computational core:");
+-	profiler->Tag(StartCore); solutioncore(femmodel); profiler->Tag(FinishCore); 
+-	profiler->Tag(StartAdCore); ad_core(femmodel); profiler->Tag(FinishAdCore); 
+-	
++	profiler->Tag(StartCore);   solutioncore(femmodel); profiler->Tag(FinishCore); 
++	profiler->Tag(StartAdCore); ad_core(femmodel);      profiler->Tag(FinishAdCore); 
+ 	ProfilerEnd(profiler,femmodel->results,femmodel->parameters);
+ 
+ 	_pprintLine_("write results to disk:");
Index: /issm/oecreview/Archive/13393-13976/ISSM-13545-13546.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13545-13546.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13545-13546.diff	(revision 13980)
@@ -0,0 +1,76 @@
+Index: ../trunk-jpl/src/c/solutions/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/ad_core.cpp	(revision 13545)
++++ ../trunk-jpl/src/c/solutions/ad_core.cpp	(revision 13546)
+@@ -44,7 +44,6 @@
+ 
+ 		#ifdef _HAVE_ADOLC_
+ 
+-			if(VerboseAutodiff())_pprintLine_("   start ad core");
+ 		
+ 			/*First, stop tracing: */
+ 			trace_off();
+@@ -54,6 +53,8 @@
+ 			femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
+ 			if(!(num_dependents*num_independents)) return;
+ 			
++			if(VerboseAutodiff())_pprintLine_("   start ad core");
++			
+ 			/*retrieve state variable: */
+ 			femmodel->parameters->FindParam(&axp,&dummy,AutodiffXpEnum);
+ 
+@@ -119,6 +120,7 @@
+ 				double  *theOutput     = NULL;
+ 				std::set<unsigned int> anIndexSet;
+ 					
++					
+ 				/*retrieve directions:*/
+ 				if (strcmp(driver,"fov_forward_all")==0){
+ 					tangentDirNum=num_independents;
+@@ -275,6 +277,7 @@
+ 			}
+ 			else _error_("driver: " << driver << " not yet supported!");
+ 
++
+ 			/* delete the allocated space for the parameters:*/
+ 			xDelete(anEDF_for_solverx_p->dp_x);
+ 			xDelete(anEDF_for_solverx_p->dp_X);
+@@ -287,7 +290,7 @@
+ 			xDelete(anEDF_for_solverx_p->dp_Z);
+ 			xDelete(anEDF_for_solverx_p->dpp_Z);
+ 	
+-			/*Print statistics: {{{*/
++			/*Print statistics:*/
+ 			tapestats(1,tape_stats); //reading of tape statistics
+ 			if(VerboseAutodiff()){
+ 				_pprintLine_("   ADOLC statistics: ");
+@@ -299,7 +302,6 @@
+ 				_pprintLine_("   "<<setw(45)<<left<<"Total number of operations recorded: " <<tape_stats[5]);
+ 			}
+ 			if(VerboseAutodiff())_pprintLine_("   end AD core");
+-			/*}}}*/
+ 			
+ 			/*Free resources: */
+ 			xDelete(xp);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13545)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13546)
+@@ -38,6 +38,8 @@
+ 	iomodel->Constant(&autodiff_analysis,AutodiffIsautodiffEnum);
+ 	
+ 	if(autodiff_analysis){
++
++		#ifdef _HAVE_ADOLC_
+ 	
+ 		/*Copy some parameters from IoModel to parameters dataset: */
+ 		parameters->AddObject(iomodel->CopyConstantObject(AutodiffKeepEnum));
+@@ -121,6 +123,8 @@
+ 	parameters->AddObject(theAdolcEDF_p);
+ 	/*}}}*/
+ 
++		#endif
++
+ 		/*Assign output pointer: */
+ 		*pparameters=parameters;
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13546-13547.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13546-13547.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13546-13547.diff	(revision 13980)
@@ -0,0 +1,46 @@
+Index: ../trunk-jpl/src/c/modules/Dakotax/Dakotax.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Dakotax/Dakotax.h	(revision 13546)
++++ ../trunk-jpl/src/c/modules/Dakotax/Dakotax.h	(revision 13547)
+@@ -1,15 +0,0 @@
+-/*!\file:  Dakotax.h
+- * \brief header file for Qmu engine using Dakota
+- */ 
+-
+-#ifndef _DAKOTAX_H
+-#define _DAKOTAX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/classes.h"
+-
+-/* local prototypes: */
+-void Dakotax(FemModel* femmodel);
+-int  DakotaSpawnCore(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, void* femmodel,int counter);
+-
+-#endif  /* _DAKOTAX_H */
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13546)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13547)
+@@ -97,7 +97,6 @@
+ #include "./PointCloudFindNeighborsx/PointCloudFindNeighborsx.h"
+ #include "./PositiveDegreeDayx/PositiveDegreeDayx.h"
+ #include "./PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.h"
+-#include "./Dakotax/Dakotax.h"
+ #include "./Reduceloadx/Reduceloadx.h"
+ #include "./Reducevectorgtosx/Reducevectorgtosx.h"
+ #include "./Reducevectorgtofx/Reducevectorgtofx.h"
+Index: ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp	(revision 13546)
++++ ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp	(revision 13547)
+@@ -24,8 +24,8 @@
+ /*Standard ISSM includes: */
+ #include "../../shared/shared.h"
+ #include "../../include/include.h"
++#include "../../solutions/solutions.h"
+ #include "../classes.h"
+-#include "../../modules/Dakotax/Dakotax.h"
+ 
+ /*Standard includes: */
+ #include <string>
Index: /issm/oecreview/Archive/13393-13976/ISSM-13547-13548.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13547-13548.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13547-13548.diff	(revision 13980)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp	(revision 13547)
++++ ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp	(revision 13548)
+@@ -42,19 +42,16 @@
+ 
+ namespace SIM {
+ 
+-//constructor
+-DakotaPlugin::DakotaPlugin(const Dakota::ProblemDescDB& problem_db,void* in_femmodel):Dakota::DirectApplicInterface(problem_db){
++DakotaPlugin::DakotaPlugin(const Dakota::ProblemDescDB& problem_db,void* in_femmodel):Dakota::DirectApplicInterface(problem_db){/*{{{*/
+ 
+-
+ 	femmodel=in_femmodel;
+ 	counter=0;
+-}
++}/*}}}*/
++DakotaPlugin::~DakotaPlugin(){/*{{{*/
++	/* Virtual destructor handles referenceCount at Interface level. */ 
++}/*}}}*/
++int DakotaPlugin::derived_map_ac(const Dakota::String& driver){/*{{{*/
+ 
+-//destructor
+-DakotaPlugin::~DakotaPlugin(){ /* Virtual destructor handles referenceCount at Interface level. */ }
+-
+-int DakotaPlugin::derived_map_ac(const Dakota::String& driver) {
+-
+ 	int i;
+ 	IssmDouble* variables=NULL;
+ 	char** variable_descriptors=NULL;
+@@ -94,7 +91,6 @@
+ 		fnVals[i]=responses[i];
+ 	}
+ 
+-
+ 	/*Free ressources:*/
+ 	xDelete<IssmDouble>(variables);
+ 	for(i=0;i<numACV;i++){
+@@ -105,12 +101,10 @@
+ 	xDelete<IssmDouble>(responses);
+ 
+ 	return 0;
+-}
+-  
+-
+-int DakotaPlugin::GetCounter(){
++}/*}}}*/
++int DakotaPlugin::GetCounter(){/*{{{*/
+ 	return counter;
+-}
++}/*}}}*/
+ 
+ } // namespace SIM
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13548-13549.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13548-13549.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13548-13549.diff	(revision 13980)
@@ -0,0 +1,394 @@
+Index: ../trunk-jpl/src/c/solutions/WriteLockFile.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/WriteLockFile.cpp	(revision 13548)
++++ ../trunk-jpl/src/c/solutions/WriteLockFile.cpp	(revision 13549)
+@@ -1,25 +0,0 @@
+-/*!\file:  WriteLockFile.cpp
+- * \brief
+- */ 
+-#include <stdio.h>
+-#include "../shared/shared.h"
+-#include "../include/include.h"
+-
+-void WriteLockFile(char* filename){
+-
+-	int i;
+-	extern int my_rank;
+-	
+-	/* output: */
+-	FILE* fid=NULL;
+-
+-	/* Open lock file and write 1 into it: */
+-	if(my_rank==0){
+-		fid=fopen(filename,"w");
+-		if(fid==NULL) _error_("error message: could not open lock file " << filename);
+-
+-		/*Close file: */
+-		if(fclose(fid)!=0) _error_("could not close lock file " << filename);
+-	}
+-
+-}	
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13548)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13549)
+@@ -10,11 +10,6 @@
+ 
+ int main(int argc,char **argv){
+ 
+-	/*I/O: */
+-	FILE *output_fid       = NULL;
+-	FILE *petscoptionsfid  = NULL;
+-	bool  waitonlock       = false;
+-
+ 	/*FemModel: */
+ 	FemModel *femmodel = NULL;
+ 
+@@ -49,31 +44,20 @@
+ 	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
+ 	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
+ 	_pprintLine_("");
++
+ 	ProcessArguments(&solution_type,&binfilename,&outbinfilename,&petscfilename,&lockfilename,&rootpath,argc,argv);
+ 
+ 	/*out of solution_type, figure out types of analyses needed in the femmodel: */
+ 	AnalysisConfiguration(&analyses,&numanalyses,solution_type);
+ 
+-	/*Create femmodel, using input file: */
++	/*Create femmodel from input files: */
+ 	profiler->Tag(StartInit);
+-	femmodel=new FemModel(rootpath,binfilename,outbinfilename,solution_type,analyses,numanalyses);
+-	
+-	/*get type of solution we are going to run: */
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+-
+-	/*Open output file once for all*/
+-	output_fid=pfopen(outbinfilename,"wb");
+-	femmodel->parameters->SetParam(output_fid,OutputFilePointerEnum);
+-
+-	/*add petsc options to parameters: */
+-	petscoptionsfid=pfopen(petscfilename,"r");
+-	ParsePetscOptionsx(femmodel->parameters,petscoptionsfid);
+-	pfclose(petscoptionsfid,petscfilename);
+-
++	femmodel=new FemModel(rootpath,binfilename,outbinfilename,petscfilename,lockfilename,solution_type,analyses,numanalyses);
+ 	profiler->Tag(FinishInit);
+ 	
+ 	/*call cores: */
+ 	_pprintLine_("call computational core:");
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+ 	profiler->Tag(StartCore);   solutioncore(femmodel); profiler->Tag(FinishCore); 
+ 	profiler->Tag(StartAdCore); ad_core(femmodel);      profiler->Tag(FinishAdCore); 
+ 	ProfilerEnd(profiler,femmodel->results,femmodel->parameters);
+@@ -81,14 +65,10 @@
+ 	_pprintLine_("write results to disk:");
+ 	OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+ 	
+-	/*Close output and petsc options file and write lock file if requested*/
+-	pfclose(output_fid,lockfilename);
+-	femmodel->parameters->FindParam(&waitonlock,SettingsWaitonlockEnum);
+-	if (waitonlock>0){
+-		_pprintLine_("write lock file:");
+-		WriteLockFile(lockfilename);
+-	}
+-
++	/*Profiling at the end: */
++	profiler->Tag(Finish); 
++	ProfilerEcho(profiler);
++	
+ 	/*Free resources */
+ 	xDelete<int>(analyses);
+ 	xDelete<char>(lockfilename);
+@@ -98,10 +78,6 @@
+ 	xDelete<char>(rootpath);
+ 	delete femmodel;
+ 
+-	/*Profiling at the end: */
+-	profiler->Tag(Finish); 
+-	ProfilerEcho(profiler);
+-
+ 	/*Finalize environment:*/
+ 	EnvironmentFinalize();
+ 
+Index: ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h
+===================================================================
+--- ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13548)
++++ ../trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h	(revision 13549)
+@@ -511,6 +511,8 @@
+ 	NodalEnum,
+ 	OldGradientEnum,
+ 	OutputFilePointerEnum,
++	OutputFileNameEnum,
++	LockFileNameEnum,
+ 	PetscOptionsAnalysesEnum,
+ 	PetscOptionsStringsEnum,
+ 	QmuErrNameEnum,
+Index: ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp
+===================================================================
+--- ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp	(revision 0)
++++ ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp	(revision 13549)
+@@ -0,0 +1,25 @@
++/*!\file:  WriteLockFile.cpp
++ * \brief
++ */ 
++#include <stdio.h>
++#include "../../shared/shared.h"
++#include "../../include/include.h"
++
++void WriteLockFile(char* filename){
++
++	int i;
++	extern int my_rank;
++	
++	/* output: */
++	FILE* fid=NULL;
++
++	/* Open lock file and write 1 into it: */
++	if(my_rank==0){
++		fid=fopen(filename,"w");
++		if(fid==NULL) _error_("error message: could not open lock file " << filename);
++
++		/*Close file: */
++		if(fclose(fid)!=0) _error_("could not close lock file " << filename);
++	}
++
++}	
+Index: ../trunk-jpl/src/c/io/Disk/diskio.h
+===================================================================
+--- ../trunk-jpl/src/c/io/Disk/diskio.h	(revision 13548)
++++ ../trunk-jpl/src/c/io/Disk/diskio.h	(revision 13549)
+@@ -9,5 +9,6 @@
+ 
+ FILE* pfopen(char* filename,const char* format);
+ void  pfclose(FILE* fid,char* filename);
++void WriteLockFile(char* filename);
+ 
+ #endif	/* _IO_H_ */
+Index: ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13548)
++++ ../trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 13549)
+@@ -498,18 +498,20 @@
+ 	      else if (strcmp(name,"Nodal")==0) return NodalEnum;
+ 	      else if (strcmp(name,"OldGradient")==0) return OldGradientEnum;
+ 	      else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum;
++	      else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
++	      else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
+ 	      else if (strcmp(name,"PetscOptionsAnalyses")==0) return PetscOptionsAnalysesEnum;
+ 	      else if (strcmp(name,"PetscOptionsStrings")==0) return PetscOptionsStringsEnum;
+ 	      else if (strcmp(name,"QmuErrName")==0) return QmuErrNameEnum;
+ 	      else if (strcmp(name,"QmuInName")==0) return QmuInNameEnum;
+ 	      else if (strcmp(name,"QmuOutName")==0) return QmuOutNameEnum;
+ 	      else if (strcmp(name,"Regular")==0) return RegularEnum;
+-	      else if (strcmp(name,"Scaled")==0) return ScaledEnum;
+-	      else if (strcmp(name,"Separate")==0) return SeparateEnum;
+          else stage=5;
+    }
+    if(stage==5){
+-	      if (strcmp(name,"Sset")==0) return SsetEnum;
++	      if (strcmp(name,"Scaled")==0) return ScaledEnum;
++	      else if (strcmp(name,"Separate")==0) return SeparateEnum;
++	      else if (strcmp(name,"Sset")==0) return SsetEnum;
+ 	      else if (strcmp(name,"Verbose")==0) return VerboseEnum;
+ 	      else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
+ 	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+Index: ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13548)
++++ ../trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 13549)
+@@ -488,6 +488,8 @@
+ 		case NodalEnum : return "Nodal";
+ 		case OldGradientEnum : return "OldGradient";
+ 		case OutputFilePointerEnum : return "OutputFilePointer";
++		case OutputFileNameEnum : return "OutputFileName";
++		case LockFileNameEnum : return "LockFileName";
+ 		case PetscOptionsAnalysesEnum : return "PetscOptionsAnalyses";
+ 		case PetscOptionsStringsEnum : return "PetscOptionsStrings";
+ 		case QmuErrNameEnum : return "QmuErrName";
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13548)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13549)
+@@ -235,6 +235,7 @@
+ 					./io/Disk/diskio.h\
+ 					./io/Disk/pfopen.cpp\
+ 					./io/Disk/pfclose.cpp\
++					./io/Disk/WriteLockFile.cpp\
+ 					./io/PrintfFunction.cpp\
+ 					./EnumDefinitions/EnumDefinitions.h\
+ 					./modules/ModelProcessorx/ModelProcessorx.h\
+@@ -343,7 +344,6 @@
+ 					./modules/InputConvergencex/InputConvergencex.h\
+ 					./solutions/convergence.cpp\
+ 					./solutions/ProcessArguments.cpp\
+-					./solutions/WriteLockFile.cpp\
+ 					./solutions/ResetBoundaryConditions.cpp\
+ 					./solutions/AnalysisConfiguration.cpp\
+ 					./solutions/CorePointerFromSolutionEnum.cpp\
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13548)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13549)
+@@ -19,12 +19,14 @@
+ 
+ /*Object constructors and destructor*/
+ /*FUNCTION FemModel::constructor {{{*/
+-FemModel::FemModel(char* rootpath, char* inputfilename, char* outputfilename, const int in_solution_type,const int* analyses,const int nummodels){
++FemModel::FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int in_solution_type,const int* analyses,const int nummodels){
+ 
+ 	/*intermediary*/
+ 	int         i;
+ 	int         analysis_type;
+ 	FILE       *IOMODEL = NULL;
++	FILE       *petscoptionsfid = NULL;
++	FILE       *output_fid = NULL;
+ 	extern int  my_rank;
+ 
+ 	/*Open input file on cpu 0: */
+@@ -70,8 +72,18 @@
+ 	/*Close input file descriptors: */
+ 	if(my_rank==0) pfclose(IOMODEL,inputfilename);
+ 
+-	/*Add output file name to parameters: */
+-	this->parameters->AddObject(new StringParam(OutputfilenameEnum,outputfilename));
++	/*Open output file once for all and add output file name and file descriptor to parameters*/
++	output_fid=pfopen(outputfilename,"wb");
++	this->parameters->AddObject(new StringParam(OutputFileNameEnum,outputfilename));
++	this->parameters->SetParam(output_fid,OutputFilePointerEnum);
++	
++	/*Save lock file name for later: */
++	this->parameters->AddObject(new StringParam(LockFileNameEnum,lockfilename));
++
++	/*Now, deal with petsc options, which need to be put into the parameters dataset: */
++	petscoptionsfid=pfopen(petscfilename,"r");
++	ParsePetscOptionsx(this->parameters,petscoptionsfid);
++	pfclose(petscoptionsfid,petscfilename);
+ }
+ /*}}}*/
+ /*FUNCTION FemModel::destructor {{{*/
+@@ -79,9 +91,28 @@
+ 
+ 	/*Intermediary*/
+ 	int i;
++	FILE* output_fid;
++	char* outbinfilename=NULL;
++	char* lockfilename=NULL;
++	bool   waitonlock=false;
+ 
++	/*Close output file: */
++	this->parameters->FindParam(&output_fid,OutputFilePointerEnum); 
++	this->parameters->FindParam(&outbinfilename,OutputFileNameEnum); 
++	pfclose(output_fid,outbinfilename);
++	
++	/*Write lock file if requested: */
++	this->parameters->FindParam(&waitonlock,SettingsWaitonlockEnum);
++	this->parameters->FindParam(&lockfilename,LockFileNameEnum);
++	if (waitonlock>0){
++		_pprintLine_("write lock file:");
++		WriteLockFile(lockfilename);
++	}
++
+ 	/*Delete all the datasets: */
+ 	xDelete<int>(analysis_type_list);
++	xDelete<char>(outbinfilename);
++	xDelete<char>(lockfilename);
+ 	delete elements;
+ 	delete nodes;
+ 	delete vertices;
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13548)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13549)
+@@ -42,7 +42,7 @@
+ 		Results     *results;              //results that cannot be fit into the elements 
+ 
+ 		/*constructors, destructors: */
+-		FemModel(char* rootpath, char* inputfilename, char* outputfilename, const int solution_type,const int* analyses,const int nummodels);
++		FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
+ 		~FemModel();
+ 
+ 		/*Methods: */
+Index: ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13548)
++++ ../trunk-jpl/src/m/enum/MaximumNumberOfEnums.m	(revision 13549)
+@@ -8,4 +8,4 @@
+ %   Usage:
+ %      macro=MaximumNumberOfEnums()
+ 
+-macro=496;
++macro=498;
+Index: ../trunk-jpl/src/m/enum/OutputfilenameEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/OutputfilenameEnum.m	(revision 13548)
++++ ../trunk-jpl/src/m/enum/OutputfilenameEnum.m	(revision 13549)
+@@ -1,11 +1,11 @@
+-function macro=OutputfilenameEnum()
+-%OUTPUTFILENAMEENUM - Enum of Outputfilename
++function macro=OutputFileNameEnum()
++%OUTPUTFILENAMEENUM - Enum of OutputFileName
+ %
+ %   WARNING: DO NOT MODIFY THIS FILE
+ %            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
+ %            Please read src/c/EnumDefinitions/README for more information
+ %
+ %   Usage:
+-%      macro=OutputfilenameEnum()
++%      macro=OutputFileNameEnum()
+ 
+-macro=StringToEnum('Outputfilename');
++macro=StringToEnum('OutputFileName');
+Index: ../trunk-jpl/src/m/enum/EnumDefinitions.py
+===================================================================
+--- ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13548)
++++ ../trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 13549)
+@@ -4728,6 +4728,26 @@
+ 
+ 	return StringToEnum('OutputFilePointer')[0]
+ 
++def OutputFileNameEnum():
++	"""
++	OUTPUTFILENAMEENUM - Enum of OutputFileName
++
++	   Usage:
++	      macro=OutputFileNameEnum()
++	"""
++
++	return StringToEnum('OutputFileName')[0]
++
++def LockFileNameEnum():
++	"""
++	LOCKFILENAMEENUM - Enum of LockFileName
++
++	   Usage:
++	      macro=LockFileNameEnum()
++	"""
++
++	return StringToEnum('LockFileName')[0]
++
+ def PetscOptionsAnalysesEnum():
+ 	"""
+ 	PETSCOPTIONSANALYSESENUM - Enum of PetscOptionsAnalyses
+@@ -4976,5 +4996,5 @@
+ 	      macro=MaximumNumberOfEnums()
+ 	"""
+ 
+-	return 496
++	return 498
+ 
+Index: ../trunk-jpl/src/m/enum/LockFileNameEnum.m
+===================================================================
+--- ../trunk-jpl/src/m/enum/LockFileNameEnum.m	(revision 0)
++++ ../trunk-jpl/src/m/enum/LockFileNameEnum.m	(revision 13549)
+@@ -0,0 +1,11 @@
++function macro=LockFileNameEnum()
++%LOCKFILENAMEENUM - Enum of LockFileName
++%
++%   WARNING: DO NOT MODIFY THIS FILE
++%            this file has been automatically generated by src/c/EnumDefinitions/Synchronize.sh
++%            Please read src/c/EnumDefinitions/README for more information
++%
++%   Usage:
++%      macro=LockFileNameEnum()
++
++macro=StringToEnum('LockFileName');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13549-13550.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13549-13550.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13549-13550.diff	(revision 13980)
@@ -0,0 +1,47 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13549)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13550)
+@@ -110,23 +110,26 @@
+ 		/*Don't forget to copy  iomodel->independent_objects to parameters: */
+ 		parameters->AddObject(new DataSetParam(AutodiffIndependentObjectsEnum,iomodel->independent_objects));
+ 		/*}}}*/
+-	/*initialize a placeholder to store solver pointers: {{{*/
+-	GenericParam<Adolc_edf> *theAdolcEDF_p=new GenericParam<Adolc_edf>(AdolcParamEnum);
+-	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(EDF_for_solverx);
+-	// to save some space:
+-	// we know we won't use adolc inside of  the solver:
+-	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->nestedAdolc=false;
+-	// the solution vector is just allocated and doesn't have a meaningfull prior value
+-	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->dp_y_priorRequired=false;
+-	 // the solver wrapper makes sure the matrix and the right hand side don't change
+-	theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->dp_x_changes=false;
+-	parameters->AddObject(theAdolcEDF_p);
+-	/*}}}*/
+ 
+ 		#endif
++	}
++		
++	#ifdef _HAVE_ADOLC_
++		/*initialize a placeholder to store solver pointers: {{{*/
++		GenericParam<Adolc_edf> *theAdolcEDF_p=new GenericParam<Adolc_edf>(AdolcParamEnum);
++		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p=reg_ext_fct(EDF_for_solverx);
++		// to save some space:
++		// we know we won't use adolc inside of  the solver:
++		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->nestedAdolc=false;
++		// the solution vector is just allocated and doesn't have a meaningfull prior value
++		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->dp_y_priorRequired=false;
++		// the solver wrapper makes sure the matrix and the right hand side don't change
++		theAdolcEDF_p->GetParameterValue().myEDF_for_solverx_p->dp_x_changes=false;
++		parameters->AddObject(theAdolcEDF_p);
++		/*}}}*/
++	#endif
++	
++	/*Assign output pointer: */
++	*pparameters=parameters;
+ 
+-		/*Assign output pointer: */
+-		*pparameters=parameters;
+-
+-	}
+ }
Index: /issm/oecreview/Archive/13393-13976/ISSM-13550-13551.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13550-13551.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13550-13551.diff	(revision 13980)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/externalpackages/adolc/install-update-dev.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/adolc/install-update-dev.sh	(revision 13550)
++++ ../trunk-jpl/externalpackages/adolc/install-update-dev.sh	(revision 13551)
+@@ -6,13 +6,13 @@
+ #repo. 
+ 
+ #Some cleanup
+-rm -rf install adolc_v220_issm
++rm -rf install adolc_issm
+ 
+ #symlink: 
+-ln -s  /u/astrid-r1b/larour/issm-uci/trunk-jpl/externalpackages/adolc/adolc_v220_issm ./adolc_v220_issm
++ln -s  /u/astrid-r1b/larour/issm-uci/trunk-jpl/externalpackages/adolc/adolc_issm ./adolc_issm
+ 
+ #update and compile
+-cd adolc_v220_issm
++cd adolc_issm
+ git pull
+ 
+ autoreconf -f -i 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13551-13552.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13551-13552.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13551-13552.diff	(revision 13980)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test3015.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.m	(revision 13551)
++++ ../trunk-jpl/test/NightlyRun/test3015.m	(revision 13552)
+@@ -73,5 +73,5 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'dV/dh-dV/dh0'};
+-field_tolerances={1e-1};
++field_tolerances={1e-13};
+ field_values={dVdh_ad-dVdh_an};
+Index: ../trunk-jpl/test/Archives/Archive3020.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13552-13553.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13552-13553.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13552-13553.diff	(revision 13980)
@@ -0,0 +1,237 @@
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13552)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13553)
+@@ -13,69 +13,36 @@
+ 	/*FemModel: */
+ 	FemModel *femmodel = NULL;
+ 
+-	/*configuration: */
+-	void (*solutioncore)(FemModel*)=NULL; //core solution function pointer
+-	int* analyses=NULL;
+-	int  numanalyses;
+-	int  solution_type;
++	/*Print starting banner: {{{*/
++	_pprintLine_("");
++	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
++	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
++	_pprintLine_(""); 
++	/*}}}*/
+ 
+-	/*File names*/
+-	char *lockfilename   = NULL;
+-	char *binfilename    = NULL;
+-	char *outbinfilename = NULL;
+-	char *petscfilename  = NULL;
+-	char *rootpath       = NULL;
+-
+-	/*profiling*/   
+-	Profiler* profiler=NULL;
+-
+ 	/*Initialize exception trapping: */
+ 	ExceptionTrapBegin();
+ 
+ 	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+ 	EnvironmentInit(argc,argv);
+-	
+-	/*Start profiler: */
+-	profiler=new Profiler(); 
+-	profiler->Tag(Start);
+-	
+-	/*First process inputs*/
+-	_pprintLine_("");
+-	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
+-	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
+-	_pprintLine_("");
++		
++	/*Initialize femmodel from arguments provided command line: */
++	femmodel=new FemModel(argc,argv);
+ 
+-	ProcessArguments(&solution_type,&binfilename,&outbinfilename,&petscfilename,&lockfilename,&rootpath,argc,argv);
++	/*Solve: */
++	femmodel->Solve();
+ 
+-	/*out of solution_type, figure out types of analyses needed in the femmodel: */
+-	AnalysisConfiguration(&analyses,&numanalyses,solution_type);
++	/*Some profiling: */
++	ProfilerEnd(femmodel->profiler,femmodel->results,femmodel->parameters);
+ 
+-	/*Create femmodel from input files: */
+-	profiler->Tag(StartInit);
+-	femmodel=new FemModel(rootpath,binfilename,outbinfilename,petscfilename,lockfilename,solution_type,analyses,numanalyses);
+-	profiler->Tag(FinishInit);
+-	
+-	/*call cores: */
+-	_pprintLine_("call computational core:");
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+-	profiler->Tag(StartCore);   solutioncore(femmodel); profiler->Tag(FinishCore); 
+-	profiler->Tag(StartAdCore); ad_core(femmodel);      profiler->Tag(FinishAdCore); 
+-	ProfilerEnd(profiler,femmodel->results,femmodel->parameters);
+-
+ 	_pprintLine_("write results to disk:");
+ 	OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+ 	
+ 	/*Profiling at the end: */
+-	profiler->Tag(Finish); 
+-	ProfilerEcho(profiler);
++	femmodel->profiler->Tag(Finish); 
++	ProfilerEcho(femmodel->profiler);
+ 	
+-	/*Free resources */
+-	xDelete<int>(analyses);
+-	xDelete<char>(lockfilename);
+-	xDelete<char>(binfilename);
+-	xDelete<char>(outbinfilename);
+-	xDelete<char>(petscfilename);
+-	xDelete<char>(rootpath);
++	/*Wrap up: */
+ 	delete femmodel;
+ 
+ 	/*Finalize environment:*/
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13552)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13553)
+@@ -11,6 +11,7 @@
+ #include <stdio.h>
+ #include "../Container/Container.h"
+ #include "../modules/ModelProcessorx/ModelProcessorx.h"
++#include "../solutions/solutions.h"
+ #include "../io/io.h"
+ #include "./classes.h"
+ #include "../include/include.h"
+@@ -18,9 +19,57 @@
+ #include "../modules/modules.h"
+ 
+ /*Object constructors and destructor*/
+-/*FUNCTION FemModel::constructor {{{*/
++/*FUNCTION FemModel::FemModel(int argc,char** argv){{{*/
++FemModel::FemModel(int argc,char** argv){
++
++	/*configuration: */
++	int* analyses=NULL;
++	int  numanalyses;
++	int  solution_type;
++
++	/*File names*/
++	char *lockfilename   = NULL;
++	char *binfilename    = NULL;
++	char *outbinfilename = NULL;
++	char *petscfilename  = NULL;
++	char *rootpath       = NULL;
++
++	/*Start profiler: */
++	this->profiler=new Profiler();
++	profiler->Tag(Start);
++
++	/*From command line arguments, retrieve different filenames needed to create the FemModel: */
++	ProcessArguments(&solution_type,&binfilename,&outbinfilename,&petscfilename,&lockfilename,&rootpath,argc,argv);
++
++	/*out of solution_type, figure out types of analyses needed in the femmodel: */
++	AnalysisConfiguration(&analyses,&numanalyses,solution_type);
++
++	/*Create femmodel from input files: */
++	profiler->Tag(StartInit);
++	this->InitFromFiles(rootpath,binfilename,outbinfilename,petscfilename,lockfilename,solution_type,analyses,numanalyses);
++	profiler->Tag(FinishInit);
++
++	/*Free resources */
++	xDelete<int>(analyses);
++	xDelete<char>(lockfilename);
++	xDelete<char>(binfilename);
++	xDelete<char>(outbinfilename);
++	xDelete<char>(petscfilename);
++	xDelete<char>(rootpath);
++
++}
++/*}}}*/
++/*FUNCTION FemModel::FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int in_solution_type,const int* analyses,const int nummodels){{{*/
+ FemModel::FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int in_solution_type,const int* analyses,const int nummodels){
+ 
++	/*Call InitFromFiles. This constructor is just a wrapper: */
++	this->InitFromFiles(rootpath, inputfilename, outputfilename, petscfilename, lockfilename, in_solution_type,analyses,nummodels);
++
++}
++/*}}}*/
++/*FUNCTION FemModel::InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int in_solution_type,const int* analyses,const int nummodels){{{*/
++void FemModel::InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int in_solution_type,const int* analyses,const int nummodels){
++	
+ 	/*intermediary*/
+ 	int         i;
+ 	int         analysis_type;
+@@ -121,11 +170,39 @@
+ 	delete materials;
+ 	delete parameters;
+ 	delete results;
++	delete profiler;
+ 
+ }
+ /*}}}*/
+ 
+ /*Object management*/
++/*FUNCTION FemModel::Solve {{{*/
++void FemModel::Solve(void){
++
++	int solution_type;
++	void (*solutioncore)(FemModel*)=NULL; //core solution function pointer
++	
++	_pprintLine_("call computational core:");
++
++	/*Retrieve solution_type from parameters: */
++	this->parameters->FindParam(&solution_type,SolutionTypeEnum);
++
++	/*Figure out which solution core we are going to run with the current solution type: */
++	CorePointerFromSolutionEnum(&solutioncore,this->parameters,solution_type);
++
++	/*run solutoin core: */
++	profiler->Tag(StartCore);   
++	solutioncore(this); 
++	profiler->Tag(FinishCore);
++
++	/*run AD core if needed: */
++	profiler->Tag(StartAdCore); 
++	ad_core(this);      
++	profiler->Tag(FinishAdCore);
++
++
++}
++/*}}}*/
+ /*FUNCTION FemModel::Echo {{{*/
+ void FemModel::Echo(void){
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13552)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13553)
+@@ -18,6 +18,7 @@
+ class Constraints;
+ class Loads;
+ class Materials;
++class Profiler;
+ /*}}}*/
+ 
+ 
+@@ -32,6 +33,8 @@
+ 		int         *analysis_type_list;   //list of analyses this femmodel is going to carry out
+ 		int          analysis_counter;     //counter into analysis_type_list
+ 
++		Profiler*    profiler;             //keep time, cpu and mem statistics while we are running.
++
+ 		Elements    *elements;             //elements (one set for all analyses)
+ 		Nodes       *nodes;                //one set of nodes
+ 		Vertices    *vertices;             //one set of vertices
+@@ -42,11 +45,14 @@
+ 		Results     *results;              //results that cannot be fit into the elements 
+ 
+ 		/*constructors, destructors: */
++		FemModel(int argc,char** argv);
+ 		FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
+ 		~FemModel();
++		void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
+ 
+ 		/*Methods: */
+ 		void Echo();
++		void Solve(void);
+ 
+ 		/*Fem: */
+ 		void  SetCurrentConfiguration(int configuration_type);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13553-13554.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13553-13554.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13553-13554.diff	(revision 13980)
@@ -0,0 +1,269 @@
+Index: ../trunk-jpl/src/c/solutions/solutions.h
+===================================================================
+--- ../trunk-jpl/src/c/solutions/solutions.h	(revision 13553)
++++ ../trunk-jpl/src/c/solutions/solutions.h	(revision 13554)
+@@ -49,6 +49,7 @@
+ void EnvironmentInit(int argc,char** argv);
+ void EnvironmentFinalize(void);
+ int  DakotaSpawnCore(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, void* femmodel,int counter);
++void PrintBanner(void);
+ 
+ //solution configuration
+ void AnalysisConfiguration(int** panalyses,int* pnumanalyses, int solutiontype);
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13553)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13554)
+@@ -1,25 +1,14 @@
+ /*!\file:  issm.cpp
+- * \brief: ISSM main parallel program
++ * \brief: ISSM main program
+  */ 
+ 
+ #include "../issm.h"
+-#include "../include/globals.h"
+ 	
+-void ProfilerEcho(Profiler* profiler);
+-void ProfilerEnd(Profiler* profiler, Results* results, Parameters* parameters);
+-
+ int main(int argc,char **argv){
+ 
+-	/*FemModel: */
+-	FemModel *femmodel = NULL;
++	/*Print starting banner:*/
++	PrintBanner();
+ 
+-	/*Print starting banner: {{{*/
+-	_pprintLine_("");
+-	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
+-	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
+-	_pprintLine_(""); 
+-	/*}}}*/
+-
+ 	/*Initialize exception trapping: */
+ 	ExceptionTrapBegin();
+ 
+@@ -27,21 +16,14 @@
+ 	EnvironmentInit(argc,argv);
+ 		
+ 	/*Initialize femmodel from arguments provided command line: */
+-	femmodel=new FemModel(argc,argv);
++	FemModel *femmodel = new FemModel(argc,argv);
+ 
+ 	/*Solve: */
+ 	femmodel->Solve();
+ 
+-	/*Some profiling: */
+-	ProfilerEnd(femmodel->profiler,femmodel->results,femmodel->parameters);
+-
+-	_pprintLine_("write results to disk:");
+-	OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
++	/*Output results: */
++	femmodel->OutputResults();
+ 	
+-	/*Profiling at the end: */
+-	femmodel->profiler->Tag(Finish); 
+-	ProfilerEcho(femmodel->profiler);
+-	
+ 	/*Wrap up: */
+ 	delete femmodel;
+ 
+@@ -54,45 +36,3 @@
+ 	/*Return unix success: */
+ 	return 0; 
+ }
+-	
+-void ProfilerEcho(Profiler* profiler){ /*{{{*/
+-
+-	_pprintLine_("");
+-	_pprintLine_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(StartInit,FinishInit));
+-	_pprintLine_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(StartCore,FinishCore));
+-	_pprintLine_("");
+-	_pprintLine_("   Total elapsed time:"
+-		<<profiler->DeltaTimeModHour(Start,Finish)<<" hrs "
+-		<<profiler->DeltaTimeModMin(Start,Finish)<<" min "
+-		<<profiler->DeltaTimeModSec(Start,Finish)<<" sec"
+-		);
+-	_pprintLine_("");
+-
+-} /*}}}*/
+-void ProfilerEnd(Profiler* profiler, Results* results, Parameters* parameters){ /*{{{*/
+-
+-	bool profiling = false;
+-	
+-	IssmDouble solution_time;
+-	IssmDouble solution_flops;
+-	IssmDouble solution_memory;
+-
+-	parameters->FindParam(&profiling,DebugProfilingEnum); 
+-
+-	if(profiling){
+-
+-		solution_time=profiler->DeltaTime(StartCore,FinishCore);
+-		solution_flops=profiler->DeltaFlops(StartCore,FinishCore);
+-		solution_memory=profiler->Memory(FinishCore);
+-
+-		_pprintLine_("Solution elapsed time  : " << solution_time << "  Seconds");
+-		_pprintLine_("Solution elapsed flops : " << solution_flops << "  Flops");
+-		_pprintLine_("Solution memory used   : " << solution_memory << "  Bytes");
+-
+-		/*Add to results: */
+-		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingSolutionTimeEnum, solution_time, 1, 0));
+-		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentMemEnum, solution_memory, 1, 0));
+-		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentFlopsEnum, solution_flops, 1, 0));
+-	}
+-
+-} /*}}}*/
+Index: ../trunk-jpl/src/c/solutions/PrintBanner.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/PrintBanner.cpp	(revision 0)
++++ ../trunk-jpl/src/c/solutions/PrintBanner.cpp	(revision 13554)
+@@ -0,0 +1,15 @@
++/*!\file: PrintBanner.cpp
++ * \brief: print banner information on ISSM
++ */ 
++
++#include "../include/include.h"
++#include "../shared/shared.h"
++
++void PrintBanner(void){
++
++	_pprintLine_("");
++	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
++	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
++	_pprintLine_("");
++}
++
+Index: ../trunk-jpl/src/c/solutions/kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13553)
++++ ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13554)
+@@ -3,7 +3,6 @@
+  */ 
+ 
+ #include "../issm.h"
+-#include "../include/globals.h"
+ 
+ /*Local prototypes*/
+ void ProcessArguments2(char** pbinfilename,char** poutbinfilename,char** plockfilename,char** prootpath,int argc,char **argv);
+Index: ../trunk-jpl/src/c/issm.h
+===================================================================
+--- ../trunk-jpl/src/c/issm.h	(revision 13553)
++++ ../trunk-jpl/src/c/issm.h	(revision 13554)
+@@ -11,6 +11,7 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
++#include "./include/globals.h" //only include this header file once!
+ #include "./include/include.h"
+ #include "./shared/shared.h"
+ #include "./classes/classes.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13553)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13554)
+@@ -342,6 +342,7 @@
+ 					./modules/InputToResultx/InputToResultx.h\
+ 					./modules/InputConvergencex/InputConvergencex.cpp\
+ 					./modules/InputConvergencex/InputConvergencex.h\
++					./solutions/PrintBanner.cpp\
+ 					./solutions/convergence.cpp\
+ 					./solutions/ProcessArguments.cpp\
+ 					./solutions/ResetBoundaryConditions.cpp\
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13553)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13554)
+@@ -170,22 +170,54 @@
+ 	delete materials;
+ 	delete parameters;
+ 	delete results;
++
++	/*Before we delete the profiler, report statistics for this run: */
++	profiler->Tag(Finish);  //final tagging
++	_pprintLine_("");
++	_pprintLine_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(StartInit,FinishInit));
++	_pprintLine_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(StartCore,FinishCore));
++	_pprintLine_("");
++	_pprintLine_("   Total elapsed time:"
++			<<profiler->DeltaTimeModHour(Start,Finish)<<" hrs "
++			<<profiler->DeltaTimeModMin(Start,Finish)<<" min "
++			<<profiler->DeltaTimeModSec(Start,Finish)<<" sec"
++			);
++	_pprintLine_("");
++
++	/*Now delete: */
+ 	delete profiler;
+ 
+ }
+ /*}}}*/
+ 
+ /*Object management*/
++/*FUNCTION FemModel::OutputResults {{{*/
++void FemModel::OutputResults(void){
++	
++	_pprintLine_("write results to disk:");
++
++	/*Just call the OutputResultsx module: */
++	OutputResultsx(this->elements, this->nodes, this->vertices, this->loads, this->materials, this->parameters,this->results);
++
++}
++/*}}}*/
+ /*FUNCTION FemModel::Solve {{{*/
+ void FemModel::Solve(void){
+ 
++	/*profiling: */
++	bool profiling = false;
++	IssmDouble solution_time;
++	IssmDouble solution_flops;
++	IssmDouble solution_memory;
++
++	/*solution: */
+ 	int solution_type;
+ 	void (*solutioncore)(FemModel*)=NULL; //core solution function pointer
+ 	
+ 	_pprintLine_("call computational core:");
+ 
+ 	/*Retrieve solution_type from parameters: */
+-	this->parameters->FindParam(&solution_type,SolutionTypeEnum);
++	parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 
+ 	/*Figure out which solution core we are going to run with the current solution type: */
+ 	CorePointerFromSolutionEnum(&solutioncore,this->parameters,solution_type);
+@@ -200,7 +232,24 @@
+ 	ad_core(this);      
+ 	profiler->Tag(FinishAdCore);
+ 
++	/*some profiling results for the core: */
++	parameters->FindParam(&profiling,DebugProfilingEnum);
++	if(profiling){
+ 
++		solution_time=profiler->DeltaTime(StartCore,FinishCore);
++		solution_flops=profiler->DeltaFlops(StartCore,FinishCore);
++		solution_memory=profiler->Memory(FinishCore);
++
++		_pprintLine_("Solution elapsed time  : " << solution_time << "  Seconds");
++		_pprintLine_("Solution elapsed flops : " << solution_flops << "  Flops");
++		_pprintLine_("Solution memory used   : " << solution_memory << "  Bytes");
++
++		/*Add to results: */
++		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingSolutionTimeEnum, solution_time, 1, 0));
++		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentMemEnum, solution_memory, 1, 0));
++		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentFlopsEnum, solution_flops, 1, 0));
++	}
++
+ }
+ /*}}}*/
+ /*FUNCTION FemModel::Echo {{{*/
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13553)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13554)
+@@ -53,6 +53,7 @@
+ 		/*Methods: */
+ 		void Echo();
+ 		void Solve(void);
++		void OutputResults(void);
+ 
+ 		/*Fem: */
+ 		void  SetCurrentConfiguration(int configuration_type);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13554-13555.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13554-13555.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13554-13555.diff	(revision 13980)
@@ -0,0 +1,183 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/MPI_Boundariesfromrange.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/MPI_Boundariesfromrange.cpp	(revision 13554)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/MPI_Boundariesfromrange.cpp	(revision 13555)
+@@ -1,38 +0,0 @@
+-/*!\file MPI_Boundariesfromrange.cpp
+- * \brief: routine to figure out from a range distribution, the lower and upper 
+- * bounds for the current cpu.
+- */
+-
+-#include "./mpipatches.h"
+-#include "../../../shared/shared.h"
+-
+-int MPI_Boundariesfromrange(int* plower_row, int* pupper_row,int range){
+-
+-	extern int num_procs;
+-	extern int my_rank;
+-	
+-	/*output: */
+-	int lower_row,upper_row;
+-
+-	/*intermediary: */
+-	int  i;
+-	int* allranges=NULL;
+-
+-	/*Gather all range values into allranges, for all nodes*/
+-	allranges=xNew<int>(num_procs);
+-	MPI_Allgather(&range,1,MPI_INT,allranges,1,MPI_INT,MPI_COMM_WORLD);
+-
+-	/*From all ranges, get lower row and upper row*/
+-	lower_row=0;
+-	upper_row=lower_row+allranges[0];
+-	for (i=1;i<=my_rank;i++){
+-		lower_row=lower_row+allranges[i-1];
+-		upper_row=upper_row+allranges[i];
+-	}
+-
+-	/*Assign output pointers: */
+-	xDelete<int>(allranges);
+-	*plower_row=lower_row;
+-	*pupper_row=upper_row;
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/MPI_Lowerrow.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/MPI_Lowerrow.cpp	(revision 13554)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/MPI_Lowerrow.cpp	(revision 13555)
+@@ -1,27 +0,0 @@
+-/*!\file MPI_Lowerrow.cpp
+- * \brief: routine to distribute jobs in parallel. 
+- * This handy routine will provide, along with the MPI_Upperrow, a distributed range 
+- * for an index (like i,j, in a for loop). 
+- * Ex: for(i=MPI_Lowerrow(num_procs)0;i<MPI_Upperrow(num_procs);i++)
+- * This ensures easy parallelisation of loops if needed.
+- */
+-
+-#include "./mpipatches.h"
+-
+-int MPI_Lowerrow(int n){
+-
+-
+-	int range;
+-	int lower_row;
+-	int upper_row;
+-	
+-
+-	/*First, figure out our range : */
+-	range=DetermineLocalSize(n);
+-
+-	/*Now determien upper and lower boundaries: */
+-	MPI_Boundariesfromrange(&lower_row,&upper_row,range);
+-
+-	return lower_row;
+-	
+-}
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/MPI_Upperrow.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/MPI_Upperrow.cpp	(revision 13554)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/MPI_Upperrow.cpp	(revision 13555)
+@@ -1,30 +0,0 @@
+-/*!\file MPI_Upperrow.cpp
+- * \brief: routine to distribute jobs in parallel. 
+- * This handy routine will provide, along with the MPI_Lowrrow, a distributed range 
+- * for an index (like i,j, in a for loop). 
+- * Ex: for(i=MPI_Lowerrow(num_procs)0;i<MPI_Upperrow(num_procs);i++)
+- * This ensures easy parallelisation of loops if needed.
+- */
+-
+-#include "./mpipatches.h"
+-
+-int MPI_Upperrow(int n){
+-
+-	int range;
+-	int lower_row;
+-	int upper_row;
+-
+-	/*First, figure out our range : */
+-	range=DetermineLocalSize(n);
+-
+-	/*Now determien upper and lower boundaries: */
+-	MPI_Boundariesfromrange(&lower_row,&upper_row,range);
+-
+-	return upper_row;
+-	
+-}
+-
+-
+-
+-
+-
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 13554)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 13555)
+@@ -6,8 +6,11 @@
+ #include <math.h>
+ #include "../../../shared/shared.h"
+ 
+-int DetermineLocalSize(int global_size){
++int DetermineLocalSize(int global_size,MPI_Comm comm){
+ 
++	/*size of comm: */
++	int my_rank,num_procs;
++
+ 	/*output: */
+ 	int  local_size;
+ 
+@@ -16,10 +19,15 @@
+ 	int  row_rest;
+ 	int* num_local_rows=NULL;
+ 
+-	/*from MPI: */
+-	extern int num_procs;
+-	extern int my_rank;
+-	
++	/*retrieve my_rank: */
++	#ifdef _HAVE_MPI_
++	MPI_Comm_rank(comm,&my_rank);
++	MPI_Comm_size(comm,&num_procs);
++	#else
++	my_rank=0;
++	num_procs=1;
++	#endif
++
+ 	/*We are  not bound by any library, just use what seems most logical*/
+ 	num_local_rows=xNew<int>(num_procs);    
+ 
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h	(revision 13554)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h	(revision 13555)
+@@ -5,14 +5,5 @@
+ 
+ #ifndef MPI_PATCHES_H_ 
+ #define MPI_PATCHES_H_
+-
+-
+-int MPI_Boundariesfromrange(int* plower_row, int* pupper_row,int range);
+-int MPI_Lowerrow(int n);
+-int MPI_Upperrow(int n);
+-int DetermineLocalSize(int global_size);
+-
+-
+-
+-
++int DetermineLocalSize(int global_size,MPI_Comm comm);
+ #endif
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13554)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13555)
+@@ -792,10 +792,7 @@
+ #Mpi sources  {{{
+ mpi_sources= ./toolkits/mpi/mpiincludes.h\
+ 				./toolkits/mpi/patches/mpipatches.h\
+-				./toolkits/mpi/patches/DetermineLocalSize.cpp\
+-				./toolkits/mpi/patches/MPI_Upperrow.cpp\
+-				./toolkits/mpi/patches/MPI_Lowerrow.cpp\
+-				./toolkits/mpi/patches/MPI_Boundariesfromrange.cpp
++				./toolkits/mpi/patches/DetermineLocalSize.cpp
+ #}}}
+ #Metis sources  {{{
+ metis_sources= ./toolkits/metis/patches/metispatches.h\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13555-13556.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13555-13556.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13555-13556.diff	(revision 13980)
@@ -0,0 +1,155 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatPartition.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatPartition.cpp	(revision 13555)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatPartition.cpp	(revision 13556)
+@@ -1,138 +0,0 @@
+-/*!\file: MatPartition.cpp
+- * \brief partition matrix according to node sets
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
+-
+-#include "../../../shared/shared.h"
+-#include "../../mpi/patches/mpipatches.h"
+-
+-int MatPartition(Mat* poutmatrix,Mat matrixA,double* row_partition_vector,int row_partition_vector_size ,
+-		double* col_partition_vector,int col_partition_vector_size){
+-
+-	int i;
+-	
+-	/*Petsc matrix*/
+-	int d_nz;
+-	int o_nz;
+-	int* node_rows=NULL;
+-	int* node_cols=NULL;
+-	int count;
+-	IS col_index=NULL;
+-	IS row_index=NULL;
+-	int lower_row,upper_row,range;
+-	int MA,NA; //matrixA dimensions
+-	const char* type=NULL;
+-	int csize;
+-
+-	/*output*/
+-	Mat outmatrix=NULL;
+-	
+-	/*get input matrix size: */
+-	MatGetSize(matrixA,&MA,&NA);
+-
+-    /*If one of the partitioning row or col vectors has a 0 dimension, we return a NILL matrix. Return it with the same type as matrixA.*/
+-	
+-    if ((row_partition_vector_size==0) || (col_partition_vector==0)){
+-		MatGetType(matrixA,&type);
+-		if (strcmp(type,"mpiaij")==0){
+-			d_nz=0;
+-			o_nz=0;
+-			#if _PETSC_MAJOR_ == 3 && _PETSC_MINOR_ > 2
+-			MatCreateAIJ(MPI_COMM_WORLD,PETSC_DETERMINE,PETSC_DETERMINE, 0,0,d_nz,PETSC_NULL,o_nz,PETSC_NULL,&outmatrix);
+-			#else
+-			MatCreateMPIAIJ(MPI_COMM_WORLD,PETSC_DETERMINE,PETSC_DETERMINE, 0,0,d_nz,PETSC_NULL,o_nz,PETSC_NULL,&outmatrix);
+-			#endif
+-		}
+-		else if (strcmp(type,"mpidense")==0){
+-			#if _PETSC_MAJOR_ == 3 && _PETSC_MINOR_ > 2
+-			MatCreateDense(MPI_COMM_WORLD,PETSC_DETERMINE,PETSC_DETERMINE, 0,0,PETSC_NULL,&outmatrix);
+-			#else
+-			MatCreateMPIDense(MPI_COMM_WORLD,PETSC_DETERMINE,PETSC_DETERMINE, 0,0,PETSC_NULL,&outmatrix);
+-			#endif
+-		}
+-		else{
+-			_error_("MatType " << type << " not supported yet");
+-		}
+-		/*Assemble*/
+-		MatAssemblyBegin(outmatrix,MAT_FINAL_ASSEMBLY);
+-		MatAssemblyEnd(outmatrix,MAT_FINAL_ASSEMBLY);
+-	}
+-	else{
+-		/*Both vectors are non nill, use MatGetSubMatrix to condense out*/
+-		/*Figure out which rows each node is going to get from matrix A.*/
+-		MatGetOwnershipRange(matrixA,&lower_row,&upper_row);
+-		upper_row--;
+-		range=upper_row-lower_row+1;
+-
+-		count=0;
+-		if (range){
+-			node_rows=xNew<int>(range); //this is the maximum number of rows one node can extract.
+-		
+-			for (i=0;i<row_partition_vector_size;i++){
+-				if ( ((int)(*(row_partition_vector+i))>=(lower_row+1)) && ((int)(*(row_partition_vector+i))<=(upper_row+1)) ){
+-					*(node_rows+count)=(int)*(row_partition_vector+i)-1;
+-					count++;
+-				}
+-			}
+-		}
+-		else{
+-			count=0;
+-		}
+-		
+-		/*Now each node has a node_rows vectors holding which rows they should extract from matrixA. Create an Index Set from node_rows.*/
+-		#if _PETSC_MAJOR_ < 3 || (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 2)
+-		ISCreateGeneral(MPI_COMM_WORLD,count,node_rows,&row_index);
+-		#else
+-		ISCreateGeneral(MPI_COMM_WORLD,count,node_rows,PETSC_COPY_VALUES,&row_index);
+-		#endif
+-		
+-		/*Same deal for columns*/
+-		node_cols=xNew<int>(col_partition_vector_size);
+-		for (i=0;i<col_partition_vector_size;i++){
+-			*(node_cols+i)=(int)*(col_partition_vector+i)-1;
+-		}
+-		#if _PETSC_MAJOR_ < 3 || (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 2)
+-		ISCreateGeneral(MPI_COMM_WORLD,col_partition_vector_size,node_cols,&col_index);
+-		#else
+-		ISCreateGeneral(MPI_COMM_WORLD,col_partition_vector_size,node_cols,PETSC_COPY_VALUES,&col_index);
+-		#endif
+-
+-		/*Call MatGetSubMatrix*/
+-		csize=DetermineLocalSize(col_partition_vector_size);
+-		if(col_partition_vector_size==row_partition_vector_size){
+-			#if _PETSC_MAJOR_ >= 3 
+-			MatGetSubMatrix(matrixA,row_index,col_index,MAT_INITIAL_MATRIX,&outmatrix);
+-			#else
+-			MatGetSubMatrix(matrixA,row_index,col_index,count,MAT_INITIAL_MATRIX,&outmatrix);
+-			#endif
+-		}
+-		else{
+-			#if _PETSC_MAJOR_ >= 3 
+-			MatGetSubMatrix(matrixA,row_index,col_index,MAT_INITIAL_MATRIX,&outmatrix);
+-			#else
+-			MatGetSubMatrix(matrixA,row_index,col_index,csize,MAT_INITIAL_MATRIX,&outmatrix);
+-			#endif
+-		}
+-
+-	}
+-
+-	/*Free ressources:*/
+-	xDelete<int>(node_rows);
+-	xDelete<int>(node_cols);
+-	ISFree(&col_index);
+-	ISFree(&row_index);
+-
+-	/*Assign output pointers:*/
+-	*poutmatrix=outmatrix;
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13555)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13556)
+@@ -772,7 +772,6 @@
+ 					./toolkits/petsc/patches/MatFree.cpp\
+ 					./toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp\
+ 					./toolkits/petsc/patches/VecPartition.cpp\
+-					./toolkits/petsc/patches/MatPartition.cpp\
+ 					./toolkits/petsc/patches/MatInvert.cpp\
+ 					./toolkits/petsc/patches/MatMultPatch.cpp\
+ 					./toolkits/petsc/patches/ISSMToPetscMatrixType.cpp\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13556-13557.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13556-13557.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13556-13557.diff	(revision 13980)
@@ -0,0 +1,45 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/ISFree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/ISFree.cpp	(revision 13556)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/ISFree.cpp	(revision 13557)
+@@ -1,28 +0,0 @@
+-/*!\file:  ISFree.cpp
+- * \brief wrapper to ISDestroy
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-
+-/*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscmat.h"
+-#include "petscksp.h"
+-
+-void ISFree(IS* pis){
+-
+-	#if _PETSC_MAJOR_ < 3 || (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 2)
+-	if(*pis)ISDestroy(*pis);
+-	*pis=NULL;
+-	#else
+-	if(*pis)ISDestroy(pis);
+-	*pis=NULL;
+-	#endif
+-
+-}
+-
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13556)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13557)
+@@ -768,7 +768,6 @@
+ 					./toolkits/petsc/patches/PetscVectorToDoubleVector.cpp\
+ 					./toolkits/petsc/patches/VecDuplicatePatch.cpp\
+ 					./toolkits/petsc/patches/KSPFree.cpp\
+-					./toolkits/petsc/patches/ISFree.cpp\
+ 					./toolkits/petsc/patches/MatFree.cpp\
+ 					./toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp\
+ 					./toolkits/petsc/patches/VecPartition.cpp\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13557-13558.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13557-13558.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13557-13558.diff	(revision 13980)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 13557)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 13558)
+@@ -6,11 +6,8 @@
+ #include <math.h>
+ #include "../../../shared/shared.h"
+ 
+-int DetermineLocalSize(int global_size,MPI_Comm comm){
++int DetermineLocalSize(int global_size){
+ 
+-	/*size of comm: */
+-	int my_rank,num_procs;
+-
+ 	/*output: */
+ 	int  local_size;
+ 
+@@ -19,15 +16,10 @@
+ 	int  row_rest;
+ 	int* num_local_rows=NULL;
+ 
+-	/*retrieve my_rank: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Comm_rank(comm,&my_rank);
+-	MPI_Comm_size(comm,&num_procs);
+-	#else
+-	my_rank=0;
+-	num_procs=1;
+-	#endif
+-
++	/*from MPI: */
++	extern int num_procs;
++	extern int my_rank;
++	
+ 	/*We are  not bound by any library, just use what seems most logical*/
+ 	num_local_rows=xNew<int>(num_procs);    
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13558-13559.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13558-13559.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13558-13559.diff	(revision 13980)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h	(revision 13558)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h	(revision 13559)
+@@ -5,5 +5,5 @@
+ 
+ #ifndef MPI_PATCHES_H_ 
+ #define MPI_PATCHES_H_
+-int DetermineLocalSize(int global_size,MPI_Comm comm);
++int DetermineLocalSize(int global_size);
+ #endif
Index: /issm/oecreview/Archive/13393-13976/ISSM-13559-13560.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13559-13560.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13559-13560.diff	(revision 13980)
@@ -0,0 +1,721 @@
+Index: ../trunk-jpl/src/android/helloworld/My First App/.classpath
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/.classpath	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/.classpath	(revision 13560)
+@@ -0,0 +1,8 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<classpath>
++	<classpathentry kind="src" path="src"/>
++	<classpathentry kind="src" path="gen"/>
++	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
++	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
++	<classpathentry kind="output" path="bin/classes"/>
++</classpath>
+Index: ../trunk-jpl/src/android/helloworld/My First App/project.properties
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/project.properties	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/project.properties	(revision 13560)
+@@ -0,0 +1,14 @@
++# This file is automatically generated by Android Tools.
++# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
++#
++# This file must be checked in Version Control Systems.
++#
++# To customize properties used by the Ant build system edit
++# "ant.properties", and override values to adapt the script to your
++# project structure.
++#
++# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
++#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
++
++# Project target.
++target=android-16
+Index: ../trunk-jpl/src/android/helloworld/My First App/.project
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/.project	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/.project	(revision 13560)
+@@ -0,0 +1,33 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<projectDescription>
++	<name>My First App</name>
++	<comment></comment>
++	<projects>
++	</projects>
++	<buildSpec>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>org.eclipse.jdt.core.javabuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++	</buildSpec>
++	<natures>
++		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
++		<nature>org.eclipse.jdt.core.javanature</nature>
++	</natures>
++</projectDescription>
+Index: ../trunk-jpl/src/android/helloworld/My First App/proguard-project.txt
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/proguard-project.txt	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/proguard-project.txt	(revision 13560)
+@@ -0,0 +1,20 @@
++# To enable ProGuard in your project, edit project.properties
++# to define the proguard.config property as described in that file.
++#
++# Add project specific ProGuard rules here.
++# By default, the flags in this file are appended to flags specified
++# in ${sdk.dir}/tools/proguard/proguard-android.txt
++# You can edit the include path and order by changing the ProGuard
++# include property in project.properties.
++#
++# For more details, see
++#   http://developer.android.com/guide/developing/tools/proguard.html
++
++# Add any project specific keep options here:
++
++# If your project uses WebView with JS, uncomment the following
++# and specify the fully qualified class name to the JavaScript interface
++# class:
++#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
++#   public *;
++#}
+Index: ../trunk-jpl/src/android/helloworld/My First App/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/AndroidManifest.xml	(revision 13560)
+@@ -0,0 +1,25 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.my.first.app"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="8"
++        android:targetSdkVersion="15" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".MainActivity"
++            android:label="@string/title_activity_main" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/My First App/src/com/example/my/first/app/MainActivity.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/src/com/example/my/first/app/MainActivity.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/src/com/example/my/first/app/MainActivity.java	(revision 13560)
+@@ -0,0 +1,103 @@
++package com.example.my.first.app;
++
++import android.app.Activity;
++import android.content.Context;
++import android.os.Bundle;
++import android.util.AttributeSet;
++import android.view.Menu;
++import android.view.View;
++import android.widget.SeekBar;
++import android.widget.SeekBar.OnSeekBarChangeListener;
++import android.widget.TextView;
++import android.widget.Toast;
++import android.graphics.*;
++import android.graphics.drawable.ShapeDrawable;
++import android.graphics.drawable.shapes.RectShape;
++
++public class MainActivity extends Activity implements OnSeekBarChangeListener{
++    private SeekBar bar; 
++    private TextView textProgress,textAction;
++    //CustomDrawableView mCustomDrawableView;
++        
++    /*public class CustomDrawableView extends View {
++        private ShapeDrawable mDrawable;
++        
++        public CustomDrawableView(Context context, AttributeSet attrs) {
++            super(context, attrs);
++        
++
++
++        int x = 10;
++        int y = 10;
++        int width = 300;
++        int height = 50;
++
++        mDrawable = new ShapeDrawable(new RectShape());
++        mDrawable.getPaint().setColor(0xff74AC23);
++        mDrawable.setBounds(x, y, x + width, y + height);
++        }
++
++        protected void onDraw(Canvas canvas) {
++        mDrawable.draw(canvas);
++        }
++    }*/
++    
++    @Override
++    public void onCreate(Bundle savedInstanceState) { 
++        super.onCreate(savedInstanceState);
++        setContentView(R.layout.activity_main);
++
++        Toast.makeText(MainActivity.this,"You clicked me!", Toast.LENGTH_LONG).show();
++        bar = (SeekBar)findViewById(R.id.seekBar1); // make seekbar object
++        bar.setOnSeekBarChangeListener(this); // set seekbar listener.
++        // since we are using this class as the listener the class is "this"
++
++        // make text label for progress value
++        textProgress = (TextView)findViewById(R.id.textViewProgress);
++        // make text label for action
++        textAction = (TextView)findViewById(R.id.textViewAction);
++
++        //Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
++        //Canvas c = new Canvas(b);
++        //mCustomDrawableView = (CustomDrawableView) findViewById(R.id.custom_drawable_view);
++        
++    }
++ 
++
++    @Override
++    public void onProgressChanged(SeekBar seekBar, int progress,
++    		boolean fromUser) 
++    {
++    	// change progress text label with current seekbar value
++    	textProgress.setText("The value is: "+progress);
++    	// change action text label to changing
++    	textAction.setText("changing");
++    	//drawPoints()
++    }
++    @Override
++    public void onStartTrackingTouch(SeekBar seekBar) {
++    	// TODO Auto-generated method stub
++    	textAction.setText("starting to track touch");
++
++    }
++    @Override
++    public void onStopTrackingTouch(SeekBar seekBar) {
++    	// TODO Auto-generated method stub
++    	seekBar.setSecondaryProgress(seekBar.getProgress()); // set the shade of the previous value.
++    	textAction.setText("ended tracking touch");
++    }
++    @Override
++    public boolean onCreateOptionsMenu(Menu menu) {
++        getMenuInflater().inflate(R.menu.activity_main, menu);
++        return true;
++    }
++    
++
++
++
++
++}
++
++    
++
++
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/AndroidManifest.xml	(revision 13560)
+@@ -0,0 +1,25 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.my.first.app"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="8"
++        android:targetSdkVersion="15" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".MainActivity"
++            android:label="@string/title_activity_main" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/jarlist.cache
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/jarlist.cache	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/jarlist.cache	(revision 13560)
+@@ -0,0 +1,3 @@
++# cache for current jar dependecy. DO NOT EDIT.
++# format is <lastModified> <length> <SHA-1> <path>
++# Encoding is UTF-8
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$string.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$string.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$string.class	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$string.class	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$string.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$attr.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$attr.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$attr.class	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$attr.class	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$attr.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/MainActivity.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/MainActivity.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/MainActivity.class	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/MainActivity.class	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/MainActivity.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R.class	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R.class	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$id.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$id.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$id.class	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$id.class	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$id.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$layout.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$layout.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$layout.class	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$layout.class	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$layout.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/BuildConfig.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/BuildConfig.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/BuildConfig.class	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/BuildConfig.class	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/BuildConfig.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$style.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$style.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$style.class	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$style.class	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$style.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$drawable.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$drawable.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$drawable.class	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$drawable.class	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$drawable.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$menu.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$menu.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$menu.class	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$menu.class	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R$menu.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app/R.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app/R.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app/R.java	(revision 13560)
+@@ -0,0 +1,41 @@
++/* AUTO-GENERATED FILE.  DO NOT MODIFY.
++ *
++ * This class was automatically generated by the
++ * aapt tool from the resource data it found.  It
++ * should not be modified by hand.
++ */
++
++package com.example.my.first.app;
++
++public final class R {
++    public static final class attr {
++    }
++    public static final class drawable {
++        public static final int ic_action_search=0x7f020000;
++        public static final int ic_launcher=0x7f020001;
++    }
++    public static final class id {
++        public static final int button1=0x7f070001;
++        public static final int edit_message=0x7f070000;
++        public static final int menu_settings=0x7f070005;
++        public static final int seekBar1=0x7f070002;
++        public static final int textViewAction=0x7f070004;
++        public static final int textViewProgress=0x7f070003;
++    }
++    public static final class layout {
++        public static final int activity_main=0x7f030000;
++    }
++    public static final class menu {
++        public static final int activity_main=0x7f060000;
++    }
++    public static final class string {
++        public static final int app_name=0x7f040000;
++        public static final int button_send=0x7f040002;
++        public static final int edit_message=0x7f040001;
++        public static final int menu_settings=0x7f040003;
++        public static final int title_activity_main=0x7f040004;
++    }
++    public static final class style {
++        public static final int AppTheme=0x7f050000;
++    }
++}
+Index: ../trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app/BuildConfig.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app/BuildConfig.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app/BuildConfig.java	(revision 13560)
+@@ -0,0 +1,6 @@
++/** Automatically generated file. DO NOT MODIFY */
++package com.example.my.first.app;
++
++public final class BuildConfig {
++    public final static boolean DEBUG = true;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/My First App/libs/android-support-v4.jar
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/libs/android-support-v4.jar
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/libs/android-support-v4.jar	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/libs/android-support-v4.jar	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/libs/android-support-v4.jar
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/values/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/res/values/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/res/values/styles.xml	(revision 13560)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/values/strings.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/res/values/strings.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/res/values/strings.xml	(revision 13560)
+@@ -0,0 +1,7 @@
++<resources>
++    <string name="app_name">My First App</string>
++    <string name="edit_message">Enter a message</string>
++    <string name="button_send">Send</string>
++    <string name="menu_settings">Settings</string>
++    <string name="title_activity_main">MainActivity</string>
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-hdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/res/drawable-hdpi/ic_launcher.png	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/res/drawable-hdpi/ic_launcher.png	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-hdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-hdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/res/drawable-hdpi/ic_action_search.png	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/res/drawable-hdpi/ic_action_search.png	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-hdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/menu/activity_main.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/res/menu/activity_main.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/res/menu/activity_main.xml	(revision 13560)
+@@ -0,0 +1,6 @@
++<menu xmlns:android="http://schemas.android.com/apk/res/android">
++    <item android:id="@+id/menu_settings"
++        android:title="@string/menu_settings"
++        android:orderInCategory="100"
++        android:showAsAction="never" />
++</menu>
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/values-v11/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/res/values-v11/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/res/values-v11/styles.xml	(revision 13560)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-ldpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/res/drawable-ldpi/ic_launcher.png	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/res/drawable-ldpi/ic_launcher.png	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-ldpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/values-v14/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/res/values-v14/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/res/values-v14/styles.xml	(revision 13560)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-mdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/res/drawable-mdpi/ic_launcher.png	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/res/drawable-mdpi/ic_launcher.png	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-mdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-mdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/res/drawable-mdpi/ic_action_search.png	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/res/drawable-mdpi/ic_action_search.png	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-mdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/res/drawable-xhdpi/ic_launcher.png	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/res/drawable-xhdpi/ic_launcher.png	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-xhdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/res/drawable-xhdpi/ic_action_search.png	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/res/drawable-xhdpi/ic_action_search.png	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/res/drawable-xhdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/res/layout/activity_main.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/res/layout/activity_main.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/My First App/res/layout/activity_main.xml	(revision 13560)
+@@ -0,0 +1,62 @@
++<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
++    xmlns:tools="http://schemas.android.com/tools"
++    android:layout_width="match_parent"
++    android:layout_height="match_parent"
++    android:orientation="horizontal" >
++
++    <EditText
++        android:id="@+id/edit_message"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_alignParentTop="true"
++        android:layout_centerHorizontal="true"
++        android:layout_marginTop="48dp"
++        android:ems="10"
++        android:hint="@string/edit_message" />
++
++    <Button
++        android:id="@+id/button1"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_alignParentBottom="true"
++        android:layout_centerHorizontal="true"
++        android:layout_marginBottom="36dp"
++        android:text="@string/button_send" />
++
++    <SeekBar
++        android:id="@+id/seekBar1"
++        android:layout_width="match_parent"
++        android:layout_height="wrap_content"
++        android:layout_above="@+id/button1"
++        android:layout_alignParentLeft="true"
++        android:layout_marginBottom="50dp" />
++
++    <TextView
++        android:id="@+id/textViewProgress"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_above="@+id/seekBar1"
++        android:layout_centerHorizontal="true"
++        android:layout_marginBottom="22dp"
++        android:text="progress displayed here"
++        android:textAppearance="?android:attr/textAppearanceLarge" />
++
++    <TextView
++        android:id="@+id/textViewAction"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_above="@+id/textViewProgress"
++        android:layout_alignRight="@+id/textViewProgress"
++        android:layout_marginBottom="26dp"
++        android:text="action displayed here"
++        android:textAppearance="?android:attr/textAppearanceLarge" />
++
++<!--<com.example.my.first.app.MainActivity.CustomDrawableView
++   android:id="@+id/custom_drawable_view"
++   android:layout_width="fill_parent"     
++    android:layout_height="wrap_content" /> 
++-->
++
++    
++
++</RelativeLayout>
+Index: ../trunk-jpl/src/android/helloworld/My First App/ic_launcher-web.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/My First App/ic_launcher-web.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/ic_launcher-web.png	(revision 13559)
++++ ../trunk-jpl/src/android/helloworld/My First App/ic_launcher-web.png	(revision 13560)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/ic_launcher-web.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13560-13561.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13560-13561.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13560-13561.diff	(revision 13980)
@@ -0,0 +1,858 @@
+Index: ../trunk-jpl/src/android/helloworld/Square/.classpath
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/.classpath	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/.classpath	(revision 13561)
+@@ -0,0 +1,8 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<classpath>
++	<classpathentry kind="src" path="src"/>
++	<classpathentry kind="src" path="gen"/>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
++	<classpathentry kind="output" path="bin/classes"/>
++</classpath>
+Index: ../trunk-jpl/src/android/helloworld/Square/jni/Android.mk
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/jni/Android.mk	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/jni/Android.mk	(revision 13561)
+@@ -0,0 +1,8 @@
++LOCAL_PATH := $(call my-dir)
++ 
++include $(CLEAR_VARS)
++ 
++LOCAL_MODULE    := squared
++LOCAL_SRC_FILES := SquaredNumber.cpp
++ 
++include $(BUILD_SHARED_LIBRARY)
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/Square/jni/square.h
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/jni/square.h	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/jni/square.h	(revision 13561)
+@@ -0,0 +1,21 @@
++/* DO NOT EDIT THIS FILE - it is machine generated */
++#include <jni.h>
++/* Header for class com_example_square_SquareNumber */
++
++#ifndef _Included_com_example_square_SquareNumber
++#define _Included_com_example_square_SquareNumber
++#ifdef __cplusplus
++extern "C" {
++#endif
++/*
++ * Class:     com_example_square_SquareNumber
++ * Method:    squared
++ * Signature: (I)I
++ */
++JNIEXPORT jint JNICALL Java_com_example_square_SquareNumber_squared
++  (JNIEnv *, jclass, jint);
++
++#ifdef __cplusplus
++}
++#endif
++#endif
+Index: ../trunk-jpl/src/android/helloworld/Square/project.properties
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/project.properties	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/project.properties	(revision 13561)
+@@ -0,0 +1,14 @@
++# This file is automatically generated by Android Tools.
++# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
++#
++# This file must be checked in Version Control Systems.
++#
++# To customize properties used by the Ant build system edit
++# "ant.properties", and override values to adapt the script to your
++# project structure.
++#
++# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
++#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
++
++# Project target.
++target=android-16
+Index: ../trunk-jpl/src/android/helloworld/Square/.project
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/.project	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/.project	(revision 13561)
+@@ -0,0 +1,33 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<projectDescription>
++	<name>Square</name>
++	<comment></comment>
++	<projects>
++	</projects>
++	<buildSpec>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>org.eclipse.jdt.core.javabuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++	</buildSpec>
++	<natures>
++		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
++		<nature>org.eclipse.jdt.core.javanature</nature>
++	</natures>
++</projectDescription>
+Index: ../trunk-jpl/src/android/helloworld/Square/proguard-project.txt
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/proguard-project.txt	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/proguard-project.txt	(revision 13561)
+@@ -0,0 +1,20 @@
++# To enable ProGuard in your project, edit project.properties
++# to define the proguard.config property as described in that file.
++#
++# Add project specific ProGuard rules here.
++# By default, the flags in this file are appended to flags specified
++# in ${sdk.dir}/tools/proguard/proguard-android.txt
++# You can edit the include path and order by changing the ProGuard
++# include property in project.properties.
++#
++# For more details, see
++#   http://developer.android.com/guide/developing/tools/proguard.html
++
++# Add any project specific keep options here:
++
++# If your project uses WebView with JS, uncomment the following
++# and specify the fully qualified class name to the JavaScript interface
++# class:
++#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
++#   public *;
++#}
+Index: ../trunk-jpl/src/android/helloworld/Square/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/AndroidManifest.xml	(revision 13561)
+@@ -0,0 +1,25 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.square"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="10"
++        android:targetSdkVersion="15" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".Main"
++            android:label="@string/title_activity_main" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/Main.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/Main.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/Main.java	(revision 13561)
+@@ -0,0 +1,20 @@
++package com.example.square;
++
++import android.os.Bundle;
++import android.app.Activity;
++import android.view.Menu;
++
++public class Main extends Activity {
++
++    @Override
++    public void onCreate(Bundle savedInstanceState) {
++        super.onCreate(savedInstanceState);
++        setContentView(R.layout.activity_main);
++    }
++
++    @Override
++    public boolean onCreateOptionsMenu(Menu menu) {
++        getMenuInflater().inflate(R.menu.activity_main, menu);
++        return true;
++    }
++}
+Index: ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/Square.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/Square.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/Square.class	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/Square.class	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/Square.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.java	(revision 13561)
+@@ -0,0 +1,20 @@
++
++package com.example.square;
++
++
++public class SquareNumber {
++    // Declare native method (and make it public to expose it directly)
++    public static native int squared(int base);
++ 
++    // Provide additional functionality, that &quot;extends&quot; the native method
++    public static int to4(int base)
++    {
++        int sq = squared(base);
++        return squared(sq);
++    }
++ 
++    // Load library
++    static {
++        System.loadLibrary("libSquareNumber");
++    }
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.cpp
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.cpp	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.cpp	(revision 13561)
+@@ -0,0 +1,7 @@
++#include libSquareNumber;
++
++JNIEXPORT jint JNICALL Java_org_edwards_1research_demo_jni_SquaredWrapper_squared
++  (JNIEnv * je, jclass jc, jint base)
++{
++        return (base*base);
++}
+Index: ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.class	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.class	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/AndroidManifest.xml	(revision 13561)
+@@ -0,0 +1,25 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.square"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="10"
++        android:targetSdkVersion="15" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".Main"
++            android:label="@string/title_activity_main" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/resources.ap_
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/resources.ap_
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/resources.ap_	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/resources.ap_	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/resources.ap_
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-hdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-hdpi/ic_launcher.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-hdpi/ic_launcher.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-hdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-hdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-hdpi/ic_action_search.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-hdpi/ic_action_search.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-hdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-ldpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-ldpi/ic_launcher.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-ldpi/ic_launcher.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-ldpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-mdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-mdpi/ic_launcher.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-mdpi/ic_launcher.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-mdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-mdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-mdpi/ic_action_search.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-mdpi/ic_action_search.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-mdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-xhdpi/ic_launcher.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-xhdpi/ic_launcher.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-xhdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-xhdpi/ic_action_search.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-xhdpi/ic_action_search.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/res/drawable-xhdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/Square.apk
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/Square.apk
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/Square.apk	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/Square.apk	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/Square.apk
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/jarlist.cache
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/jarlist.cache	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/jarlist.cache	(revision 13561)
+@@ -0,0 +1,3 @@
++# cache for current jar dependecy. DO NOT EDIT.
++# format is <lastModified> <length> <SHA-1> <path>
++# Encoding is UTF-8
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes.dex
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes.dex
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/classes.dex	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/classes.dex	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/classes.dex
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$string.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$string.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$string.class	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$string.class	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$string.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$attr.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$attr.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$attr.class	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$attr.class	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$attr.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R.class	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R.class	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$id.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$id.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$id.class	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$id.class	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$id.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$layout.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$layout.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$layout.class	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$layout.class	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$layout.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/Main.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/Main.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/Main.class	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/Main.class	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/Main.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/BuildConfig.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/BuildConfig.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/BuildConfig.class	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/BuildConfig.class	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/BuildConfig.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$style.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$style.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$style.class	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$style.class	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$style.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/SquareNumber.cpp
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/SquareNumber.cpp	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/SquareNumber.cpp	(revision 13561)
+@@ -0,0 +1,7 @@
++#include libSquareNumber;
++
++JNIEXPORT jint JNICALL Java_org_edwards_1research_demo_jni_SquaredWrapper_squared
++  (JNIEnv * je, jclass jc, jint base)
++{
++        return (base*base);
++}
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$drawable.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$drawable.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$drawable.class	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$drawable.class	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$drawable.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/SquareNumber.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/SquareNumber.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/SquareNumber.class	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/SquareNumber.class	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/SquareNumber.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$menu.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$menu.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$menu.class	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$menu.class	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R$menu.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/gen/com/example/square/R.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/gen/com/example/square/R.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/gen/com/example/square/R.java	(revision 13561)
+@@ -0,0 +1,35 @@
++/* AUTO-GENERATED FILE.  DO NOT MODIFY.
++ *
++ * This class was automatically generated by the
++ * aapt tool from the resource data it found.  It
++ * should not be modified by hand.
++ */
++
++package com.example.square;
++
++public final class R {
++    public static final class attr {
++    }
++    public static final class drawable {
++        public static final int ic_action_search=0x7f020000;
++        public static final int ic_launcher=0x7f020001;
++    }
++    public static final class id {
++        public static final int menu_settings=0x7f070000;
++    }
++    public static final class layout {
++        public static final int activity_main=0x7f030000;
++    }
++    public static final class menu {
++        public static final int activity_main=0x7f060000;
++    }
++    public static final class string {
++        public static final int app_name=0x7f040000;
++        public static final int hello_world=0x7f040001;
++        public static final int menu_settings=0x7f040002;
++        public static final int title_activity_main=0x7f040003;
++    }
++    public static final class style {
++        public static final int AppTheme=0x7f050000;
++    }
++}
+Index: ../trunk-jpl/src/android/helloworld/Square/gen/com/example/square/BuildConfig.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/gen/com/example/square/BuildConfig.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/gen/com/example/square/BuildConfig.java	(revision 13561)
+@@ -0,0 +1,6 @@
++/** Automatically generated file. DO NOT MODIFY */
++package com.example.square;
++
++public final class BuildConfig {
++    public final static boolean DEBUG = true;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/Square/libs/android-support-v4.jar
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/libs/android-support-v4.jar
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/libs/android-support-v4.jar	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/libs/android-support-v4.jar	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/libs/android-support-v4.jar
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/values/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/res/values/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/res/values/styles.xml	(revision 13561)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/Square/res/values/strings.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/res/values/strings.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/res/values/strings.xml	(revision 13561)
+@@ -0,0 +1,8 @@
++<resources>
++
++    <string name="app_name">Square</string>
++    <string name="hello_world">Hello world!</string>
++    <string name="menu_settings">Settings</string>
++    <string name="title_activity_main">Main</string>
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-hdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/res/drawable-hdpi/ic_launcher.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/res/drawable-hdpi/ic_launcher.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/res/drawable-hdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-hdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/res/drawable-hdpi/ic_action_search.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/res/drawable-hdpi/ic_action_search.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/res/drawable-hdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/menu/activity_main.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/res/menu/activity_main.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/res/menu/activity_main.xml	(revision 13561)
+@@ -0,0 +1,6 @@
++<menu xmlns:android="http://schemas.android.com/apk/res/android">
++    <item android:id="@+id/menu_settings"
++        android:title="@string/menu_settings"
++        android:orderInCategory="100"
++        android:showAsAction="never" />
++</menu>
+Index: ../trunk-jpl/src/android/helloworld/Square/res/values-v11/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/res/values-v11/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/res/values-v11/styles.xml	(revision 13561)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-ldpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/res/drawable-ldpi/ic_launcher.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/res/drawable-ldpi/ic_launcher.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/res/drawable-ldpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/values-v14/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/res/values-v14/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/res/values-v14/styles.xml	(revision 13561)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-mdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/res/drawable-mdpi/ic_launcher.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/res/drawable-mdpi/ic_launcher.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/res/drawable-mdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-mdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/res/drawable-mdpi/ic_action_search.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/res/drawable-mdpi/ic_action_search.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/res/drawable-mdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/res/drawable-xhdpi/ic_launcher.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/res/drawable-xhdpi/ic_launcher.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/res/drawable-xhdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/res/drawable-xhdpi/ic_action_search.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/res/drawable-xhdpi/ic_action_search.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/res/drawable-xhdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/res/layout/activity_main.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/res/layout/activity_main.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/res/layout/activity_main.xml	(revision 13561)
+@@ -0,0 +1,6 @@
++<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
++    xmlns:tools="http://schemas.android.com/tools"
++    android:layout_width="match_parent"
++    android:layout_height="match_parent" >
++
++</RelativeLayout>
+Index: ../trunk-jpl/src/android/helloworld/Square/ic_launcher-web.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/ic_launcher-web.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/ic_launcher-web.png	(revision 13560)
++++ ../trunk-jpl/src/android/helloworld/Square/ic_launcher-web.png	(revision 13561)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/Square/ic_launcher-web.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/Square/.settings/org.eclipse.jdt.core.prefs
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/Square/.settings/org.eclipse.jdt.core.prefs	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/Square/.settings/org.eclipse.jdt.core.prefs	(revision 13561)
+@@ -0,0 +1,4 @@
++eclipse.preferences.version=1
++org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
++org.eclipse.jdt.core.compiler.compliance=1.5
++org.eclipse.jdt.core.compiler.source=1.5
Index: /issm/oecreview/Archive/13393-13976/ISSM-13561-13562.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13561-13562.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13561-13562.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/m/plot/radarpower.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/radarpower.m	(revision 13561)
++++ ../trunk-jpl/src/m/plot/radarpower.m	(revision 13562)
+@@ -64,13 +64,13 @@
+ 		%md.radaroverlay.x=(xmin:(xmax-xmin)/(size(md.radaroverlay.pwr,2)-1):xmax);
+ 		%md.radaroverlay.y=(ymin:(ymax-ymin)/(size(md.radaroverlay.pwr,1)-1):ymax);
+ 		if highres,
+-			if ~exist([jplsvn() '/projects/ModelData/MOG/mog100g_r2_hp1.tif']),
+-				error(['radarpower error message: file ' jplsvn() '/projects/ModelData/MOG/mog100g_r2_hp1.tif not found.']);
++			if ~exist([jplsvn() '/projects/ModelData/MOG/mog100_r2_hp1.tif']),
++				error(['radarpower error message: file ' jplsvn() '/projects/ModelData/MOG/mog100_r2_hp1.tif not found.']);
+ 			end
+ 			geotiff_name=[jplsvn() '/projects/ModelData/MOG/mog100_r2_hp1.tif'];
+ 		else
+-			if ~exist([jplsvn() '/projects/ModelData/MOG/mog500g_r2_hp1.tif']),
+-				error(['radarpower error message: file ' jplsvn() '/projects/ModelData/MOG/mog500g_r2_hp1.tif not found.']);
++			if ~exist([jplsvn() '/projects/ModelData/MOG/mog500_r2_hp1.tif']),
++				error(['radarpower error message: file ' jplsvn() '/projects/ModelData/MOG/mog500_r2_hp1.tif not found.']);
+ 			end
+ 			geotiff_name=[jplsvn() '/projects/ModelData/MOG/mog500_r2_hp1.tif'];
+ 		end
Index: /issm/oecreview/Archive/13393-13976/ISSM-13562-13563.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13562-13563.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13562-13563.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/m/plot/applyoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.m	(revision 13562)
++++ ../trunk-jpl/src/m/plot/applyoptions.m	(revision 13563)
+@@ -146,7 +146,7 @@
+ 		set(c,'Position',getfieldvalue(options,'colorbarpos'));
+ 	end
+ 	if exist(options,'log'),
+-		nlab=5;
++		nlab=length(get(c,'YTick'));
+ 		logvalue=getfieldvalue(options,'log');
+ 
+ 		scaleminmax=caxis;
+@@ -429,7 +429,7 @@
+ if exist(options,'scatter')
+ 	data=getfieldvalue(options,'scatter');
+ 	hold on
+-	plot_scatter(data(:,1),data(:,2),getfieldvalue(options,'scattersize',3),data(:,3),options);
++	plot_scatter(data(:,1),data(:,2),data(:,3),options);
+ end
+ 
+ %backgroundcolor
Index: /issm/oecreview/Archive/13393-13976/ISSM-13563-13564.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13563-13564.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13563-13564.diff	(revision 13980)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/plot/applyoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.m	(revision 13563)
++++ ../trunk-jpl/src/m/plot/applyoptions.m	(revision 13564)
+@@ -214,9 +214,9 @@
+ 				set(c,'YTick',tick_vals);
+ 			end
+ 		end
+-		labels = cell(1,size(tick_vals,1));
+-		for i = 1:size(tick_vals,1)
+-			labels{i} = sprintf('%-3.4g',round_ice(tick_vals(i),2));
++		labels = cell(1,numel(tick_vals));
++		for i = 1:numel(tick_vals)
++			labels{i} = num2str(tick_vals(i));
+ 		end
+ 		set(c,'YTickLabel',labels);
+ 	end
Index: /issm/oecreview/Archive/13393-13976/ISSM-13564-13565.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13564-13565.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13564-13565.diff	(revision 13980)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/plot/plot_overlay.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_overlay.m	(revision 13564)
++++ ../trunk-jpl/src/m/plot/plot_overlay.m	(revision 13565)
+@@ -149,6 +149,8 @@
+ if ~isnan(data_min),
+ 	options=changefieldvalue(options,'caxis',[data_min data_max]); % force caxis so that the colorbar is ready
+ end
+-options=addfielddefault(options,'axis','equal off');              % default axis
++options=addfielddefault(options,'xlim',xlim);        % default xlim
++options=addfielddefault(options,'ylim',ylim);        % default ylim
++options=addfielddefault(options,'axis','equal off'); % default axis
+ applyoptions(md,data,options);
+ drawnow
Index: /issm/oecreview/Archive/13393-13976/ISSM-13565-13566.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13565-13566.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13565-13566.diff	(revision 13980)
@@ -0,0 +1,94 @@
+Index: ../trunk-jpl/src/m/parameterization/setflowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 13565)
++++ ../trunk-jpl/src/m/parameterization/setflowequation.py	(revision 13566)
+@@ -136,7 +136,7 @@
+ 			#Find node at the border
+ 			nodeonmacayealpattyn[numpy.nonzero(numpy.logical_and(nodeonmacayeal,nodeonpattyn))]=1
+ 			#Macayeal elements in contact with this layer become MacAyealPattyn elements
+-			matrixelements=ismember(md.mesh.elements,numpy.nonzero(nodeonmacayealpattyn))
++			matrixelements=ismember(md.mesh.elements.astype(int)-1,numpy.nonzero(nodeonmacayealpattyn)[0])
+ 			commonelements=numpy.sum(matrixelements,axis=1)!=0
+ 			commonelements[numpy.nonzero(pattynflag)]=0    #only one layer: the elements previously in macayeal
+ 			macayealflag[numpy.nonzero(commonelements)]=0    #these elements are now macayealpattynelements
+@@ -145,14 +145,14 @@
+ 			nodeonmacayeal[md.mesh.elements[numpy.nonzero(macayealflag),:].astype(int)-1]=1
+ 
+ 			#rule out elements that don't touch the 2 boundaries
+-			pos=numpy.nonzero(macayealpattynflag)
+-			elist=numpy.zeros(len(pos))
+-			elist = elist + numpy.any(numpy.sum(nodeonmacayeal[md.mesh.elements[pos,:].astype(int)-1],axis=1),axis=1)
+-			elist = elist - numpy.any(numpy.sum(nodeonpattyn[md.mesh.elements[pos,:].astype(int)-1]  ,axis=1),axis=1)
+-			pos1=numpy.nonzero(elist==1)
++			pos=numpy.nonzero(macayealpattynflag)[0]
++			elist=numpy.zeros(numpy.size(pos),dtype=int)
++			elist = elist + numpy.sum(nodeonmacayeal[md.mesh.elements[pos,:].astype(int)-1],axis=1).astype(bool)
++			elist = elist - numpy.sum(nodeonpattyn[md.mesh.elements[pos,:].astype(int)-1]  ,axis=1).astype(bool)
++			pos1=numpy.nonzero(elist==1)[0]
+ 			macayealflag[pos[pos1]]=1
+ 			macayealpattynflag[pos[pos1]]=0
+-			pos2=numpy.nonzero(elist==-1)
++			pos2=numpy.nonzero(elist==-1)[0]
+ 			pattynflag[pos[pos2]]=1
+ 			macayealpattynflag[pos[pos2]]=0
+ 
+@@ -168,7 +168,7 @@
+ 			#Find node at the border
+ 			nodeonpattynstokes[numpy.nonzero(numpy.logical_and(nodeonpattyn,nodeonstokes))]=1
+ 			#Stokes elements in contact with this layer become PattynStokes elements
+-			matrixelements=ismember(md.mesh.elements,numpy.nonzero(nodeonpattynstokes))
++			matrixelements=ismember(md.mesh.elements.astype(int)-1,numpy.nonzero(nodeonpattynstokes)[0])
+ 			commonelements=numpy.sum(matrixelements,axis=1)!=0
+ 			commonelements[numpy.nonzero(pattynflag)]=0    #only one layer: the elements previously in macayeal
+ 			stokesflag[numpy.nonzero(commonelements)]=0    #these elements are now macayealpattynelements
+@@ -177,14 +177,14 @@
+ 			nodeonstokes[md.mesh.elements[numpy.nonzero(stokesflag),:].astype(int)-1]=1
+ 
+ 			#rule out elements that don't touch the 2 boundaries
+-			pos=numpy.nonzero(pattynstokesflag)
+-			elist=numpy.zeros(len(pos))
+-			elist = elist + numpy.any(numpy.sum(nodeonstokes[md.mesh.elements[pos,:].astype(int)-1],axis=1),axis=1)
+-			elist = elist - numpy.any(numpy.sum(nodeonpattyn[md.mesh.elements[pos,:].astype(int)-1],axis=1),axis=1)
+-			pos1=numpy.nonzero(elist==1)
++			pos=numpy.nonzero(pattynstokesflag)[0]
++			elist=numpy.zeros(numpy.size(pos),dtype=int)
++			elist = elist + numpy.sum(nodeonstokes[md.mesh.elements[pos,:].astype(int)-1],axis=1).astype(bool)
++			elist = elist - numpy.sum(nodeonpattyn[md.mesh.elements[pos,:].astype(int)-1],axis=1).astype(bool)
++			pos1=numpy.nonzero(elist==1)[0]
+ 			stokesflag[pos[pos1]]=1
+ 			pattynstokesflag[pos[pos1]]=0
+-			pos2=numpy.nonzero(elist==-1)
++			pos2=numpy.nonzero(elist==-1)[0]
+ 			pattynflag[pos[pos2]]=1
+ 			pattynstokesflag[pos[pos2]]=0
+ 
+@@ -200,7 +200,7 @@
+ 			#Find node at the border
+ 			nodeonmacayealstokes[numpy.nonzero(numpy.logical_and(nodeonmacayeal,nodeonstokes))]=1
+ 			#Stokes elements in contact with this layer become MacAyealStokes elements
+-			matrixelements=ismember(md.mesh.elements,numpy.nonzero(nodeonmacayealstokes))
++			matrixelements=ismember(md.mesh.elements.astype(int)-1,numpy.nonzero(nodeonmacayealstokes)[0])
+ 			commonelements=numpy.sum(matrixelements,axis=1)!=0
+ 			commonelements[numpy.nonzero(macayealflag)]=0    #only one layer: the elements previously in macayeal
+ 			stokesflag[numpy.nonzero(commonelements)]=0    #these elements are now macayealmacayealelements
+@@ -209,14 +209,14 @@
+ 			nodeonstokes[md.mesh.elements[numpy.nonzero(stokesflag),:].astype(int)-1]=1
+ 
+ 			#rule out elements that don't touch the 2 boundaries
+-			pos=numpy.nonzero(macayealstokesflag)
+-			elist=numpy.zeros(len(pos))
+-			elist = elist + numpy.any(numpy.sum(nodeonmacayeal[md.mesh.elements[pos,:].astype(int)-1],axis=1),axis=1)
+-			elist = elist - numpy.any(numpy.sum(nodeonstokes[md.mesh.elements[pos,:].astype(int)-1]  ,axis=1),axis=1)
+-			pos1=numpy.nonzero(elist==1)
++			pos=numpy.nonzero(macayealstokesflag)[0]
++			elist=numpy.zeros(numpy.size(pos),dtype=int)
++			elist = elist + numpy.sum(nodeonmacayeal[md.mesh.elements[pos,:].astype(int)-1],axis=1).astype(bool)
++			elist = elist - numpy.sum(nodeonstokes[md.mesh.elements[pos,:].astype(int)-1]  ,axis=1).astype(bool)
++			pos1=numpy.nonzero(elist==1)[0]
+ 			macayealflag[pos[pos1]]=1
+ 			macayealstokesflag[pos[pos1]]=0
+-			pos2=numpy.nonzero(elist==-1)
++			pos2=numpy.nonzero(elist==-1)[0]
+ 			stokesflag[pos[pos2]]=1
+ 			macayealstokesflag[pos[pos2]]=0
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13566-13567.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13566-13567.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13566-13567.diff	(revision 13980)
@@ -0,0 +1,107 @@
+Index: ../trunk-jpl/test/NightlyRun/test219.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test219.py	(revision 13567)
+@@ -0,0 +1,42 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test219.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,2)
++md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test217.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.py	(revision 13566)
++++ ../trunk-jpl/test/NightlyRun/test217.py	(revision 13567)
+@@ -56,7 +56,7 @@
+ # Materials
+ md.initialization.temperature=(273.-20.)*ones((md.mesh.numberofvertices,1))
+ md.materials.rheology_B=paterson(md.initialization.temperature)
+-md.materials.rheology_n=3*ones((md.mesh.numberofelements,1))
++md.materials.rheology_n=3.*ones((md.mesh.numberofelements,1))
+ 
+ # Boundary conditions:
+ md.diagnostic.spcvx=float(nan)*ones((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test219.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test219.py	(revision 13566)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test219.py	(revision 13567)
+@@ -1,42 +0,0 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test219.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+-from MatlabFuncs import *
+-from model import *
+-from EnumDefinitions import *
+-from numpy import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from solve import *
+-
+-md=triangle(model(),'../Exp/Square.exp',150000)
+-md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,2)
+-md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal')
+-md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
+-
+-
+-# Fields and tolerances to track changes
+-
+-field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-13]
+-field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13567-13568.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13567-13568.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13567-13568.diff	(revision 13980)
@@ -0,0 +1,114 @@
+Index: ../trunk-jpl/test/NightlyRun/test219.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.py	(revision 13567)
++++ ../trunk-jpl/test/NightlyRun/test219.py	(revision 13568)
+@@ -20,7 +20,7 @@
+ from setflowequation import *
+ from solve import *
+ 
+-md=triangle(model(),'../Exp/Square.exp',150000)
++md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.extrude(3,2)
+@@ -28,7 +28,6 @@
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+-
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+Index: ../trunk-jpl/test/NightlyRun/test220.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test220.py	(revision 13568)
+@@ -0,0 +1,41 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test220.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',120000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(2,1)
++md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','pattyn')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-09,1e-09,1e-06,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test220.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test220.py	(revision 13567)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test220.py	(revision 13568)
+@@ -1,42 +0,0 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test220.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+-from MatlabFuncs import *
+-from model import *
+-from EnumDefinitions import *
+-from numpy import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from solve import *
+-
+-md=triangle(model(),'../Exp/Square.exp',120000)
+-md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(2,1)
+-md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','pattyn')
+-md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,DiagnosticSolutionEnum())
+-
+-
+-# Fields and tolerances to track changes
+-
+-field_names     =['Vx','Vy','Vz','Vel','Pressure']
+-field_tolerances=[1e-09,1e-09,1e-06,1e-09,1e-09]
+-field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13568-13569.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13568-13569.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13568-13569.diff	(revision 13980)
@@ -0,0 +1,192 @@
+Index: ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 13568)
++++ ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 13569)
+@@ -10,7 +10,7 @@
+ 
+ #include <stdio.h>
+ 
+-int binary_search(int* poffset,int target,int* sorted_integers,int num_integers){
++int binary_search(int* poffset,int target,int* sorted_integers,int num_integers){ /*{{{*/
+ 
+ 	/*output: */
+ 	int offset;  //offset, if found
+@@ -62,4 +62,68 @@
+ 	
+ 	/*Return result: */
+ 	return found;
+-}
++} /*}}}*/
++int binary_search(int* poffset,double target,double* sorted_doubles,int num_doubles){ /*{{{*/
++
++	/*output: */
++	int offset=0;  
++	int found=0; /*found=0: not found.   
++				   found=1: found, and target is == to value at offset 
++				   found=2: found, and target is > to value at offset  and < to value at offset+1
++				   */
++
++	/*intermediary: */
++	double* beg=NULL;
++	double* end=NULL;
++	double* mid=NULL;
++
++	// point to beginning and end of the array
++	beg=sorted_doubles;
++	end=sorted_doubles+num_doubles;
++	mid=beg+(int)(num_doubles/2.0);
++
++	if (target<*beg){
++		offset==-1;
++		found=0;
++	}
++	if (*beg==target){
++		found=1;
++		offset=0;
++	}
++	else if(*(end-1)==target){
++		found=1;
++		offset=num_doubles-1;
++	}
++	else{
++		while((beg <= end) && !( target>=*mid &&  target<*(mid+1)) ){
++			// is the target in lower or upper half?
++			if (target < *mid) {
++				end = mid - 1;  //new end
++				mid = beg + (end-beg)/2;  //new middle
++			}
++			else {
++				beg = mid + 1;  //new beginning
++				mid = beg + (end-beg)/2;  //new middle
++			}
++		}
++			  
++		//did we find the target?
++		if( target>*mid &&  target<*(mid+1)){
++			found=2;
++			offset=mid-sorted_doubles;
++		}
++		else if( target==*mid){
++			found=1;
++			offset=mid-sorted_doubles;
++		}
++		else {
++			found=0;
++		}
++	}
++
++	/*Assign output pointers:*/
++	*poffset=offset;
++	
++	/*Return result: */
++	return found;
++} /*}}}*/
+Index: ../trunk-jpl/src/c/shared/Sorting/sorting.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sorting/sorting.h	(revision 13568)
++++ ../trunk-jpl/src/c/shared/Sorting/sorting.h	(revision 13569)
+@@ -6,5 +6,6 @@
+ #define  _SORTING_H_
+ 
+ int binary_search(int* poffset,int target,int* sorted_integers,int num_integers);
++int binary_search(int* poffset,double target,double* sorted_doubles,int num_doubles);
+ 
+ #endif //ifndef _SORTING_H_
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 13568)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 13569)
+@@ -425,56 +425,58 @@
+ /*FUNCTION TransientInput::GetTimeInput{{{*/
+ Input* TransientInput::GetTimeInput(IssmDouble intime){
+ 
+-	int     i,j;
+ 	IssmDouble  deltat;
+ 	IssmDouble  alpha1,alpha2;
+-	bool    found=false;
++	
+ 	Input*  input=NULL;
+ 	Input*  input1=NULL;
+ 	Input*  input2=NULL;
++	
++	bool    found=false;
++	int     found_offset=0;
++	int     offset;
+ 
+ 	/*Ok, we have the time, go through the timesteps, and figure out which interval we 
+ 	 *fall within. Then interpolate the values on this interval: */
+-	if(intime<this->timesteps[0]){
+-		/*get values for the first time: */
+-		input=(Input*)((Input*)this->inputs->GetObjectByOffset(0))->copy();
+-		found=true;
++	found_offset=binary_search(&offset,intime,this->timesteps,this->numtimesteps);
++
++	if (found_offset==0){
++		if(intime<this->timesteps[0]){
++			/*get values for the first time: */
++			input=(Input*)((Input*)this->inputs->GetObjectByOffset(0))->copy();
++			found=true;
++		}
++		else if(intime>this->timesteps[this->numtimesteps-1]){
++			/*get values for the last time: */
++			input=(Input*)((Input*)this->inputs->GetObjectByOffset(numtimesteps-1))->copy();
++			found=true;
++		}
+ 	}
+-	else if(intime>this->timesteps[this->numtimesteps-1]){
+-		/*get values for the last time: */
+-		input=(Input*)((Input*)this->inputs->GetObjectByOffset(numtimesteps-1))->copy();
+-		found=true;
+-	}
+ 	else{
+-		/*Find which interval we fall within: */
+-		for(i=0;i<this->numtimesteps;i++){
+-			if(intime==this->timesteps[i]){
+-				/*We are right on one step time: */
+-				input=(Input*)((Input*)this->inputs->GetObjectByOffset(i))->copy();
+-				found=true;
+-				break; //we are done with the time interpolation.
+-			}
+-			else{
+-				if(this->timesteps[i]<intime && intime<this->timesteps[i+1]){
+-					/*ok, we have the interval ]i:i+1[. Interpolate linearly for now: */
+-					deltat=this->timesteps[i+1]-this->timesteps[i];
+-					alpha2=(intime-this->timesteps[i])/deltat;
+-					alpha1=(1.0-alpha2);
++		if (found_offset==1){
++			/*intime is exactly equal to this->timesteps[offset]: */
++			input=(Input*)((Input*)this->inputs->GetObjectByOffset(offset))->copy();
++			found=true;
++		}
++		else if (found_offset==2){
++			
++			/*ok, we have the interval ]offset:offset+1[. Interpolate linearly for now: */
++			deltat=this->timesteps[offset+1]-this->timesteps[offset];
++			alpha2=(intime-this->timesteps[offset])/deltat;
++			alpha1=(1.0-alpha2);
+ 
+-					input1=(Input*)this->inputs->GetObjectByOffset(i); 
+-					input2=(Input*)this->inputs->GetObjectByOffset(i+1);
++			input1=(Input*)this->inputs->GetObjectByOffset(offset); 
++			input2=(Input*)this->inputs->GetObjectByOffset(offset+1);
+ 
+-					input=(Input*)input1->copy();
+-					input->Scale(alpha1);
+-					input->AXPY(input2,alpha2);
++			input=(Input*)input1->copy();
++			input->Scale(alpha1);
++			input->AXPY(input2,alpha2);
+ 
+-					found=true;
+-					break;
+-				}
+-				else continue; //keep looking on the next interval
+-			}
++			found=true;
+ 		}
++		else _error_("binary_search returned the following value for found: " << found_offset<< "which is not supported yet!");
+ 	}
++
+ 	if(!found)_error_("did not find time interval on which to interpolate forcing values!");
+ 
+ 	/*Assign output pointer*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13569-13570.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13569-13570.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13569-13570.diff	(revision 13980)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/externalpackages/numpy/install-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/numpy/install-linux64.sh	(revision 13569)
++++ ../trunk-jpl/externalpackages/numpy/install-linux64.sh	(revision 13570)
+@@ -9,13 +9,16 @@
+ 
+ #clean up
+ rm -rf numpy
++rm -rf numpy-1.7.0b2
+ 
+ #download numpy first
+-export GIT_SSL_NO_VERIFY=true 
+-git clone https://github.com/numpy/numpy.git
++#export GIT_SSL_NO_VERIFY=true 
++#git clone https://github.com/numpy/numpy.git
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/numpy-1.7.0b2.tar.gz' 'numpy-1.7.0b2.tar.gz'
+ 
+ #install numpy
+-cd numpy
++tar -zxvf numpy-1.7.0b2.tar.gz
++cd numpy-1.7.0b2
+ python setup.py build
+ python setup.py install
+ cd ..
Index: /issm/oecreview/Archive/13393-13976/ISSM-13570-13571.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13570-13571.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13570-13571.diff	(revision 13980)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp	(revision 13570)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp	(revision 13571)
+@@ -58,7 +58,7 @@
+ 			}
+ 			/*Reduce first to bare option value*/
+ 			PetscStrlen(first,&len);
+-			while (len > 0 && (first[len-1] == ' ' || first[len-1] == 'n')) {
++			while (len > 0 && first[len-1] == ' ') {
+ 				len--; first[len] = 0;
+ 			}
+ 			PetscOptionsSetValue(first,second);
+@@ -69,7 +69,7 @@
+ 			if (second[0]=='-'){
+ 				/*Second is another option, ignore it*/
+ 				PetscStrlen(first,&len);
+-				while (len > 0 && (first[len-1] == ' ' || first[len-1] == 'n')) {
++				while (len > 0 && first[len-1] == ' ' ) {
+ 					len--; first[len] = 0;
+ 				}
+ 				PetscOptionsSetValue(first,NULL);
+@@ -80,7 +80,7 @@
+ 			else{
+ 				/*Second is 'first' option's value*/
+ 				PetscStrlen(second,&len);
+-				while (len > 0 && (second[len-1] == ' ' || second[len-1] == 'n')) {
++				while (len > 0 && second[len-1] == ' ') {
+ 					len--; second[len] = 0;
+ 				}
+ 				PetscOptionsSetValue(first,second);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13571-13572.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13571-13572.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13571-13572.diff	(revision 13980)
@@ -0,0 +1,68 @@
+Index: ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 13571)
++++ ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 13572)
+@@ -17,9 +17,9 @@
+ 	int found=0; //found=0 if target is not found, 1 otherwise.
+ 
+ 	/*intermediary: */
+-	int* beg=NULL;
+-	int* end=NULL;
+-	int* mid=NULL;
++	int *beg = NULL;
++	int *end = NULL;
++	int *mid = NULL;
+ 
+ 	// point to beginning and end of the array
+ 	beg=sorted_integers;
+@@ -68,34 +68,34 @@
+ 	/*output: */
+ 	int offset=0;  
+ 	int found=0; /*found=0: not found.   
+-				   found=1: found, and target is == to value at offset 
+-				   found=2: found, and target is > to value at offset  and < to value at offset+1
+-				   */
++						found=1: found, and target is == to value at offset 
++						found=2: found, and target is > to value at offset  and < to value at offset+1
++						*/
+ 
+ 	/*intermediary: */
+-	double* beg=NULL;
+-	double* end=NULL;
+-	double* mid=NULL;
++	double *beg = NULL;
++	double *end = NULL;
++	double *mid = NULL;
+ 
+ 	// point to beginning and end of the array
+-	beg=sorted_doubles;
+-	end=sorted_doubles+num_doubles;
+-	mid=beg+(int)(num_doubles/2.0);
++	beg = sorted_doubles;
++	end = sorted_doubles+num_doubles;
++	mid = beg+(int)(num_doubles/2.0);
+ 
+ 	if (target<*beg){
+-		offset==-1;
+-		found=0;
++		offset = -1;
++		found  = 0;
+ 	}
+ 	if (*beg==target){
+-		found=1;
+-		offset=0;
++		found  = 1;
++		offset = 0;
+ 	}
+ 	else if(*(end-1)==target){
+-		found=1;
+-		offset=num_doubles-1;
++		found  = 1;
++		offset = num_doubles-1;
+ 	}
+ 	else{
+-		while((beg <= end) && !( target>=*mid &&  target<*(mid+1)) ){
++		while((beg <= end) && !( target>=*mid && target<*(mid+1)) ){
+ 			// is the target in lower or upper half?
+ 			if (target < *mid) {
+ 				end = mid - 1;  //new end
Index: /issm/oecreview/Archive/13393-13976/ISSM-13572-13573.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13572-13573.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13572-13573.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/objects/Profiler.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Profiler.cpp	(revision 13572)
++++ ../trunk-jpl/src/c/classes/objects/Profiler.cpp	(revision 13573)
+@@ -23,6 +23,8 @@
+ /*FUNCTION Profiler::~Profiler(){{{*/
+ Profiler::~Profiler(){
+ 	delete time;
++	delete flops;
++	delete memory;
+ }
+ /*}}}*/
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13573-13574.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13573-13574.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13573-13574.diff	(revision 13980)
@@ -0,0 +1,105 @@
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 13573)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 13574)
+@@ -428,9 +428,9 @@
+ 	IssmDouble  deltat;
+ 	IssmDouble  alpha1,alpha2;
+ 	
+-	Input*  input=NULL;
+-	Input*  input1=NULL;
+-	Input*  input2=NULL;
++	Input *input  = NULL;
++	Input *input1 = NULL;
++	Input *input2 = NULL;
+ 	
+ 	bool    found=false;
+ 	int     found_offset=0;
+@@ -439,46 +439,43 @@
+ 	/*Ok, we have the time, go through the timesteps, and figure out which interval we 
+ 	 *fall within. Then interpolate the values on this interval: */
+ 	found_offset=binary_search(&offset,intime,this->timesteps,this->numtimesteps);
++	if (found_offset==0) _error_("Input not found (is TransientInput sorted ?)");
+ 
+-	if (found_offset==0){
+-		if(intime<this->timesteps[0]){
+-			/*get values for the first time: */
+-			input=(Input*)((Input*)this->inputs->GetObjectByOffset(0))->copy();
+-			found=true;
+-		}
+-		else if(intime>this->timesteps[this->numtimesteps-1]){
+-			/*get values for the last time: */
+-			input=(Input*)((Input*)this->inputs->GetObjectByOffset(numtimesteps-1))->copy();
+-			found=true;
+-		}
++	if (found_offset==-1){
++		/*get values for the first time: */
++		_assert_(intime<this->timesteps[0]);
++		input=(Input*)((Input*)this->inputs->GetObjectByOffset(0))->copy();
++		found=true;
+ 	}
++	else if(found_offset==3){
++		/*get values for the last time: */
++		_assert_(intime>=this->timesteps[this->numtimesteps-1]);
++		input=(Input*)((Input*)this->inputs->GetObjectByOffset(this->numtimesteps-1))->copy();
++		found=true;
++	}
++	else if(found_offset==2){
++		/*get values for this time: */
++		_assert_(intime==this->timesteps[offset]);
++		input=(Input*)((Input*)this->inputs->GetObjectByOffset(offset))->copy();
++		found=true;
++	}
+ 	else{
+-		if (found_offset==1){
+-			/*intime is exactly equal to this->timesteps[offset]: */
+-			input=(Input*)((Input*)this->inputs->GetObjectByOffset(offset))->copy();
+-			found=true;
+-		}
+-		else if (found_offset==2){
+-			
+-			/*ok, we have the interval ]offset:offset+1[. Interpolate linearly for now: */
+-			deltat=this->timesteps[offset+1]-this->timesteps[offset];
+-			alpha2=(intime-this->timesteps[offset])/deltat;
+-			alpha1=(1.0-alpha2);
++		/*get values between two times ]offset:offset+1[, Interpolate linearly*/
++		_assert_(intime>this->timesteps[offset] && intime<this->timesteps[offset+1]);
++		deltat=this->timesteps[offset+1]-this->timesteps[offset];
++		alpha2=(intime-this->timesteps[offset])/deltat;
++		alpha1=(1.0-alpha2);
+ 
+-			input1=(Input*)this->inputs->GetObjectByOffset(offset); 
+-			input2=(Input*)this->inputs->GetObjectByOffset(offset+1);
++		input1=(Input*)this->inputs->GetObjectByOffset(offset); 
++		input2=(Input*)this->inputs->GetObjectByOffset(offset+1);
+ 
+-			input=(Input*)input1->copy();
+-			input->Scale(alpha1);
+-			input->AXPY(input2,alpha2);
++		input=(Input*)input1->copy();
++		input->Scale(alpha1);
++		input->AXPY(input2,alpha2);
+ 
+-			found=true;
+-		}
+-		else _error_("binary_search returned the following value for found: " << found_offset<< "which is not supported yet!");
++		found=true;
+ 	}
+ 
+-	if(!found)_error_("did not find time interval on which to interpolate forcing values!");
+-
+ 	/*Assign output pointer*/
+ 	return input;
+ }
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13573)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13574)
+@@ -186,7 +186,6 @@
+ 
+ 	/*Now delete: */
+ 	delete profiler;
+-
+ }
+ /*}}}*/
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13574-13575.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13574-13575.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13574-13575.diff	(revision 13980)
@@ -0,0 +1,98 @@
+Index: ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 13574)
++++ ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 13575)
+@@ -63,62 +63,49 @@
+ 	/*Return result: */
+ 	return found;
+ } /*}}}*/
+-int binary_search(int* poffset,double target,double* sorted_doubles,int num_doubles){ /*{{{*/
++int binary_search(int* poffset,double target,double* list,int num_doubles){ /*{{{*/
+ 
+ 	/*output: */
+-	int offset=0;  
+-	int found=0; /*found=0: not found.   
+-						found=1: found, and target is == to value at offset 
+-						found=2: found, and target is > to value at offset  and < to value at offset+1
+-						*/
++	int offset = 0;
++	int found  = 0; /*found =  0: not found.
++							found = -1: found, and target is < first element
++							found =  1: found, and target is == to value at offset 
++							found =  2: found, and target is > to value at offset  and < to value at offset+1
++							found =  3: found, and target is >= last value */
+ 
+ 	/*intermediary: */
+-	double *beg = NULL;
+-	double *end = NULL;
+-	double *mid = NULL;
++	int n0 = 0;
++	int n1 = int(num_doubles/2);
++	int n2 = num_doubles-1;
+ 
+-	// point to beginning and end of the array
+-	beg = sorted_doubles;
+-	end = sorted_doubles+num_doubles;
+-	mid = beg+(int)(num_doubles/2.0);
+-
+-	if (target<*beg){
++	if(target<list[n0]){
++		found  = -1;
+ 		offset = -1;
+-		found  = 0;
+ 	}
+-	if (*beg==target){
+-		found  = 1;
+-		offset = 0;
++	else if(target>=list[n2]){
++		found  = 3;
++		offset = n2-1;
+ 	}
+-	else if(*(end-1)==target){
+-		found  = 1;
+-		offset = num_doubles-1;
+-	}
+ 	else{
+-		while((beg <= end) && !( target>=*mid && target<*(mid+1)) ){
+-			// is the target in lower or upper half?
+-			if (target < *mid) {
+-				end = mid - 1;  //new end
+-				mid = beg + (end-beg)/2;  //new middle
++		while(!found){
++			/*did we find the target?*/
++			if(list[n1]<=target && list[n1+1]>target){
++				found = 1;
++				offset = n1;
++				break;
+ 			}
+-			else {
+-				beg = mid + 1;  //new beginning
+-				mid = beg + (end-beg)/2;  //new middle
++			if(target < list[n1]){
++				n2 = n1;
++				n1 = n0 + int((n2-n0)/2);
+ 			}
++			else{
++				n0 = n1;
++				n1 = n0 + int((n2-n0)/2);
++			}
+ 		}
+-			  
+-		//did we find the target?
+-		if( target>*mid &&  target<*(mid+1)){
+-			found=2;
+-			offset=mid-sorted_doubles;
+-		}
+-		else if( target==*mid){
+-			found=1;
+-			offset=mid-sorted_doubles;
+-		}
+-		else {
+-			found=0;
+-		}
++
++		//did we find an exact target?
++		if(list[n1]==target) found = 2;
+ 	}
+ 
+ 	/*Assign output pointers:*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13575-13576.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13575-13576.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13575-13576.diff	(revision 13980)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13575)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13576)
+@@ -1299,11 +1299,11 @@
+ 	extern int my_rank;
+ 	extern int num_procs;
+ 
+-	int found=0;
++	int found         = 0;
+ 	int record_enum;
+ 	int record_length;
+-	int record_code; //1 to 7 number
+-	int vector_type; //nodal or elementary
++	int record_code;       //1 to 7 number
++	int vector_type   = 0; //nodal or elementary
+ 
+ 	/*Go find in the binary file, the position of the data we want to fetch: */
+ 	if(my_rank==0){
+@@ -1341,7 +1341,7 @@
+ 	}
+ #ifdef _HAVE_MPI_
+ 	MPI_Bcast(&found,1,MPI_INT,0,MPI_COMM_WORLD); 
+-	if(!found)_error_("could not find data with name" << " " << EnumToStringx(data_enum) << " ");
++	if(!found)_error_("could not find data with name " << EnumToStringx(data_enum) << " in binary file");
+ #endif
+ 
+ 	/*Broadcast code and vector type: */
Index: /issm/oecreview/Archive/13393-13976/ISSM-13576-13577.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13576-13577.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13576-13577.diff	(revision 13980)
@@ -0,0 +1,147 @@
+Index: ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 13576)
++++ ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 13577)
+@@ -63,38 +63,43 @@
+ 	/*Return result: */
+ 	return found;
+ } /*}}}*/
+-int binary_search(int* poffset,double target,double* list,int num_doubles){ /*{{{*/
++int binary_search(int* poffset,double target,double* list,int length){ /*{{{*/
++	/*
++	 *             l[0]  l[1]  l[2]        l[n]  l[n+1]   l[length-1]
++	 *     <-------+-----+-----+-----+ ... +-----+........+-------------->
++	 * offset: -1     0     1     2           n              length -1
++	 *  
++	 *  offset = -1        target < list[0]
++	 *  offset = n         list[n] <= target < list[n+1]
++	 *  offset = length-1  list[length-1] <= target
++	 */
+ 
+ 	/*output: */
+ 	int offset = 0;
+-	int found  = 0; /*found =  0: not found.
+-							found = -1: found, and target is < first element
+-							found =  1: found, and target is == to value at offset 
+-							found =  2: found, and target is > to value at offset  and < to value at offset+1
+-							found =  3: found, and target is >= last value */
++	int found  = 0;
+ 
+ 	/*intermediary: */
+ 	int n0 = 0;
+-	int n1 = int(num_doubles/2);
+-	int n2 = num_doubles-1;
++	int n1 = int(length/2);
++	int n2 = length-1;
+ 
+ 	if(target<list[n0]){
+-		found  = -1;
++		found  = 1;
+ 		offset = -1;
+ 	}
+ 	else if(target>=list[n2]){
+-		found  = 3;
+-		offset = n2-1;
++		found  = 1;
++		offset = length-1;
+ 	}
+ 	else{
+-		while(!found){
++		for(;;){
+ 			/*did we find the target?*/
+ 			if(list[n1]<=target && list[n1+1]>target){
+-				found = 1;
++				found  = 1;
+ 				offset = n1;
+ 				break;
+ 			}
+-			if(target < list[n1]){
++			else if(target < list[n1]){
+ 				n2 = n1;
+ 				n1 = n0 + int((n2-n0)/2);
+ 			}
+@@ -103,14 +108,9 @@
+ 				n1 = n0 + int((n2-n0)/2);
+ 			}
+ 		}
+-
+-		//did we find an exact target?
+-		if(list[n1]==target) found = 2;
+ 	}
+ 
+-	/*Assign output pointers:*/
++	/*Assign output pointer and return*/
+ 	*poffset=offset;
+-	
+-	/*Return result: */
+ 	return found;
+ } /*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 13576)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 13577)
+@@ -425,43 +425,33 @@
+ /*FUNCTION TransientInput::GetTimeInput{{{*/
+ Input* TransientInput::GetTimeInput(IssmDouble intime){
+ 
+-	IssmDouble  deltat;
+-	IssmDouble  alpha1,alpha2;
++	IssmDouble deltat;
++	IssmDouble alpha1,alpha2;
++	int        found;
++	int        offset;
+ 	
+ 	Input *input  = NULL;
+ 	Input *input1 = NULL;
+ 	Input *input2 = NULL;
+ 	
+-	bool    found=false;
+-	int     found_offset=0;
+-	int     offset;
+-
+-	/*Ok, we have the time, go through the timesteps, and figure out which interval we 
++	/*go through the timesteps, and figure out which interval we 
+ 	 *fall within. Then interpolate the values on this interval: */
+-	found_offset=binary_search(&offset,intime,this->timesteps,this->numtimesteps);
+-	if (found_offset==0) _error_("Input not found (is TransientInput sorted ?)");
++	found=binary_search(&offset,intime,this->timesteps,this->numtimesteps);
++	if(!found) _error_("Input not found (is TransientInput sorted ?)");
+ 
+-	if (found_offset==-1){
++	if (offset==-1){
+ 		/*get values for the first time: */
+ 		_assert_(intime<this->timesteps[0]);
+ 		input=(Input*)((Input*)this->inputs->GetObjectByOffset(0))->copy();
+-		found=true;
+ 	}
+-	else if(found_offset==3){
++	else if(offset==(this->numtimesteps-1)){
+ 		/*get values for the last time: */
+-		_assert_(intime>=this->timesteps[this->numtimesteps-1]);
+-		input=(Input*)((Input*)this->inputs->GetObjectByOffset(this->numtimesteps-1))->copy();
+-		found=true;
+-	}
+-	else if(found_offset==2){
+-		/*get values for this time: */
+-		_assert_(intime==this->timesteps[offset]);
++		_assert_(intime>=this->timesteps[offset]);
+ 		input=(Input*)((Input*)this->inputs->GetObjectByOffset(offset))->copy();
+-		found=true;
+ 	}
+ 	else{
+-		/*get values between two times ]offset:offset+1[, Interpolate linearly*/
+-		_assert_(intime>this->timesteps[offset] && intime<this->timesteps[offset+1]);
++		/*get values between two times [offset:offset+1[, Interpolate linearly*/
++		_assert_(intime>=this->timesteps[offset] && intime<this->timesteps[offset+1]);
+ 		deltat=this->timesteps[offset+1]-this->timesteps[offset];
+ 		alpha2=(intime-this->timesteps[offset])/deltat;
+ 		alpha1=(1.0-alpha2);
+@@ -472,8 +462,6 @@
+ 		input=(Input*)input1->copy();
+ 		input->Scale(alpha1);
+ 		input->AXPY(input2,alpha2);
+-
+-		found=true;
+ 	}
+ 
+ 	/*Assign output pointer*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13577-13578.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13577-13578.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13577-13578.diff	(revision 13980)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test111.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test111.py	(revision 13577)
++++ ../trunk-jpl/test/NightlyRun/test111.py	(revision 13578)
+@@ -23,7 +23,7 @@
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3','Volume3']
+ field_tolerances=[\
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,1e-13,\
+-	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,2e-12,\
++	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,2e-11,\
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,1e-11]
+ field_values=[\
+ 	md.results['TransientSolution'][1]['Vx'],\
+Index: ../trunk-jpl/test/NightlyRun/test111.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test111.m	(revision 13577)
++++ ../trunk-jpl/test/NightlyRun/test111.m	(revision 13578)
+@@ -14,7 +14,7 @@
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3','Volume3'};
+ field_tolerances={...
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,1e-13,...
+-	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,2e-12,...
++	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,2e-11,...
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,1e-11};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
Index: /issm/oecreview/Archive/13393-13976/ISSM-13578-13579.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13578-13579.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13578-13579.diff	(revision 13980)
@@ -0,0 +1,121 @@
+Index: ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 13578)
++++ ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 13579)
+@@ -63,54 +63,3 @@
+ 	/*Return result: */
+ 	return found;
+ } /*}}}*/
+-int binary_search(int* poffset,double target,double* list,int length){ /*{{{*/
+-	/*
+-	 *             l[0]  l[1]  l[2]        l[n]  l[n+1]   l[length-1]
+-	 *     <-------+-----+-----+-----+ ... +-----+........+-------------->
+-	 * offset: -1     0     1     2           n              length -1
+-	 *  
+-	 *  offset = -1        target < list[0]
+-	 *  offset = n         list[n] <= target < list[n+1]
+-	 *  offset = length-1  list[length-1] <= target
+-	 */
+-
+-	/*output: */
+-	int offset = 0;
+-	int found  = 0;
+-
+-	/*intermediary: */
+-	int n0 = 0;
+-	int n1 = int(length/2);
+-	int n2 = length-1;
+-
+-	if(target<list[n0]){
+-		found  = 1;
+-		offset = -1;
+-	}
+-	else if(target>=list[n2]){
+-		found  = 1;
+-		offset = length-1;
+-	}
+-	else{
+-		for(;;){
+-			/*did we find the target?*/
+-			if(list[n1]<=target && list[n1+1]>target){
+-				found  = 1;
+-				offset = n1;
+-				break;
+-			}
+-			else if(target < list[n1]){
+-				n2 = n1;
+-				n1 = n0 + int((n2-n0)/2);
+-			}
+-			else{
+-				n0 = n1;
+-				n1 = n0 + int((n2-n0)/2);
+-			}
+-		}
+-	}
+-
+-	/*Assign output pointer and return*/
+-	*poffset=offset;
+-	return found;
+-} /*}}}*/
+Index: ../trunk-jpl/src/c/shared/Sorting/sorting.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sorting/sorting.h	(revision 13578)
++++ ../trunk-jpl/src/c/shared/Sorting/sorting.h	(revision 13579)
+@@ -6,6 +6,56 @@
+ #define  _SORTING_H_
+ 
+ int binary_search(int* poffset,int target,int* sorted_integers,int num_integers);
+-int binary_search(int* poffset,double target,double* sorted_doubles,int num_doubles);
++template <typename doubletype> int binary_search(int* poffset,doubletype target,doubletype* list,int length){ /*{{{*/
++	/*
++	 *             l[0]  l[1]  l[2]        l[n]  l[n+1]   l[length-1]
++	 *     <-------+-----+-----+-----+ ... +-----+........+-------------->
++	 * offset: -1     0     1     2           n              length -1
++	 *  
++	 *  offset = -1        target < list[0]
++	 *  offset = n         list[n] <= target < list[n+1]
++	 *  offset = length-1  list[length-1] <= target
++	 */
+ 
++	/*output: */
++	int offset = 0;
++	int found  = 0;
++
++	/*intermediary: */
++	int n0 = 0;
++	int n1 = int(length/2);
++	int n2 = length-1;
++
++	if(target<list[n0]){
++		found  = 1;
++		offset = -1;
++	}
++	else if(target>=list[n2]){
++		found  = 1;
++		offset = length-1;
++	}
++	else{
++		for(;;){
++			/*did we find the target?*/
++			if(list[n1]<=target && list[n1+1]>target){
++				found  = 1;
++				offset = n1;
++				break;
++			}
++			else if(target < list[n1]){
++				n2 = n1;
++				n1 = n0 + int((n2-n0)/2);
++			}
++			else{
++				n0 = n1;
++				n1 = n0 + int((n2-n0)/2);
++			}
++		}
++	}
++
++	/*Assign output pointer and return*/
++	*poffset=offset;
++	return found;
++} /*}}}*/
++
+ #endif //ifndef _SORTING_H_
Index: /issm/oecreview/Archive/13393-13976/ISSM-13579-13580.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13579-13580.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13579-13580.diff	(revision 13980)
@@ -0,0 +1,686 @@
+Index: ../trunk-jpl/test/NightlyRun/test225.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test225.py	(revision 13580)
+@@ -0,0 +1,60 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',200000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.geometry.bed=md.geometry.bed+50.
++md.geometry.surface=md.geometry.surface+50.
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.prognostic.hydrostatic_adjustment='Incremental'
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++field_tolerances=[\
++	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,\
++	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,\
++	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test223.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test223.m	(revision 13579)
++++ ../trunk-jpl/test/NightlyRun/test223.m	(revision 13580)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+-md.geometry.bed=md.geometry.bed+50; md.geometry.surface=md.geometry.surface+50;
++md.geometry.bed=md.geometry.bed+50.; md.geometry.surface=md.geometry.surface+50.;
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.prognostic.hydrostatic_adjustment='Incremental';
+ md=solve(md,TransientSolutionEnum);
+Index: ../trunk-jpl/test/NightlyRun/test226.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test226.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test226.py	(revision 13580)
+@@ -0,0 +1,44 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_adapt=1.
++md.timestepping.final_time=10.
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test224.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.m	(revision 13579)
++++ ../trunk-jpl/test/NightlyRun/test224.m	(revision 13580)
+@@ -9,8 +9,8 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
+-					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+ field_tolerances={...
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,...
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,...
+Index: ../trunk-jpl/test/NightlyRun/test221.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test221.py	(revision 13580)
+@@ -0,0 +1,28 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',120000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(2,1)
++md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','macayeal')
++md.cluster=generic('name',oshostname(),'np',3)
++md.diagnostic.viscosity_overshoot=0
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-09,1e-09,1e-06,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test225.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.m	(revision 13579)
++++ ../trunk-jpl/test/NightlyRun/test225.m	(revision 13580)
+@@ -1,7 +1,7 @@
+ md=triangle(model,'../Exp/Square.exp',200000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md.geometry.bed=md.geometry.bed+50; md.geometry.surface=md.geometry.surface+50;
++md.geometry.bed=md.geometry.bed+50.; md.geometry.surface=md.geometry.surface+50.;
+ md=extrude(md,3,1);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+@@ -10,8 +10,8 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
+-					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+ field_tolerances={...
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,...
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,...
+Index: ../trunk-jpl/test/NightlyRun/test227.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test227.py	(revision 13580)
+@@ -0,0 +1,59 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',200000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_adapt=1.
++md.timestepping.final_time=10.
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++field_tolerances=[\
++	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,\
++	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,\
++	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test222.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test222.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test222.py	(revision 13580)
+@@ -0,0 +1,43 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.prognostic.hydrostatic_adjustment='Incremental'
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test226.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test226.m	(revision 13579)
++++ ../trunk-jpl/test/NightlyRun/test226.m	(revision 13580)
+@@ -3,8 +3,8 @@
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_adapt=1;
+-md.timestepping.final_time=10;
++md.timestepping.time_adapt=1.;
++md.timestepping.final_time=10.;
+ md=solve(md,TransientSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test228.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test228.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test228.py	(revision 13580)
+@@ -0,0 +1,72 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++
++md.timestepping.time_step=1.
++md.settings.output_frequency=1
++md.timestepping.final_time=4.
++
++#Set up transient
++smb=numpy.ones((md.mesh.numberofvertices,1))*3.6
++smb=numpy.hstack((smb,smb*-1.))
++
++md.surfaceforcings.mass_balance=numpy.vstack((smb,[1.5,3.]))
++md.transient.isthermal=0
++
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names=['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','SurfaceforcingsMassBalance1', \
++	'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','SurfaceforcingsMassBalance2', \
++	'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','SurfaceforcingsMassBalance3', \
++	'Vx4','Vy4','Vel4','Pressure4','Bed4','Surface4','Thickness4','SurfaceforcingsMassBalance4']
++field_tolerances=[1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][4]['Vx'],\
++	md.results['TransientSolution'][4]['Vy'],\
++	md.results['TransientSolution'][4]['Vel'],\
++	md.results['TransientSolution'][4]['Pressure'],\
++	md.results['TransientSolution'][4]['Bed'],\
++	md.results['TransientSolution'][4]['Surface'],\
++	md.results['TransientSolution'][4]['Thickness'],\
++	md.results['TransientSolution'][4]['SurfaceforcingsMassBalance'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test227.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.m	(revision 13579)
++++ ../trunk-jpl/test/NightlyRun/test227.m	(revision 13580)
+@@ -4,14 +4,14 @@
+ md=extrude(md,3,1);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_adapt=1;
+-md.timestepping.final_time=10;
++md.timestepping.time_adapt=1.;
++md.timestepping.final_time=10.;
+ md=solve(md,TransientSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
+-					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+ field_tolerances={...
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,...
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,...
+Index: ../trunk-jpl/test/NightlyRun/test223.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test223.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test223.py	(revision 13580)
+@@ -0,0 +1,45 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.geometry.bed=md.geometry.bed+50.
++md.geometry.surface=md.geometry.surface+50.
++md.cluster=generic('name',oshostname(),'np',1)
++md.prognostic.hydrostatic_adjustment='Incremental'
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test228.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test228.m	(revision 13579)
++++ ../trunk-jpl/test/NightlyRun/test228.m	(revision 13580)
+@@ -4,16 +4,16 @@
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+-md.timestepping.time_step=1;
++md.timestepping.time_step=1.;
+ md.settings.output_frequency=1;
+-md.timestepping.final_time=4;
++md.timestepping.final_time=4.;
+ 
+ %Set up transient
+-smb = ones(md.mesh.numberofvertices,1)*3.6;
+-smb=[ smb smb*-1 ];
++smb=ones(md.mesh.numberofvertices,1)*3.6;
++smb=[ smb smb*-1. ];
+ 
+-md.surfaceforcings.mass_balance= smb;
+-md.surfaceforcings.mass_balance(end+1,:)=[1.5 3];
++md.surfaceforcings.mass_balance=smb;
++md.surfaceforcings.mass_balance(end+1,:)=[1.5 3.];
+ md.transient.isthermal=0;
+ 
+ md=solve(md,TransientSolutionEnum);
+@@ -27,7 +27,6 @@
+ 	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
+ 	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
+ 	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+-
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test229.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test229.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test229.py	(revision 13580)
+@@ -0,0 +1,72 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++
++md.timestepping.time_step=1.
++md.settings.output_frequency=1
++md.timestepping.final_time=4.
++
++#Set up transient
++smb=numpy.ones((md.mesh.numberofvertices,1))*3.6
++smb=numpy.hstack((smb,smb*2.))
++
++md.surfaceforcings.mass_balance=numpy.vstack((smb,[1.5,3.]))
++md.transient.isthermal=0
++
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names=['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','SurfaceforcingsMassBalance1', \
++	'Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','SurfaceforcingsMassBalance2', \
++	'Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','SurfaceforcingsMassBalance3', \
++	'Vx4','Vy4','Vel4','Pressure4','Bed4','Surface4','Thickness4','SurfaceforcingsMassBalance4']
++field_tolerances=[1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][4]['Vx'],\
++	md.results['TransientSolution'][4]['Vy'],\
++	md.results['TransientSolution'][4]['Vel'],\
++	md.results['TransientSolution'][4]['Pressure'],\
++	md.results['TransientSolution'][4]['Bed'],\
++	md.results['TransientSolution'][4]['Surface'],\
++	md.results['TransientSolution'][4]['Thickness'],\
++	md.results['TransientSolution'][4]['SurfaceforcingsMassBalance'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test224.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test224.py	(revision 13580)
+@@ -0,0 +1,58 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',200000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.prognostic.hydrostatic_adjustment='Incremental'
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++field_tolerances=[\
++	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,\
++	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,\
++	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test229.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test229.m	(revision 13579)
++++ ../trunk-jpl/test/NightlyRun/test229.m	(revision 13580)
+@@ -4,16 +4,16 @@
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+-md.timestepping.time_step=1;
++md.timestepping.time_step=1.;
+ md.settings.output_frequency=1;
+-md.timestepping.final_time=4;
++md.timestepping.final_time=4.;
+ 
+ %Set up transient
+-smb = ones(md.mesh.numberofvertices,1)*3.6;
+-smb=[ smb smb*2 ];
++smb=ones(md.mesh.numberofvertices,1)*3.6;
++smb=[ smb smb*2. ];
+ 
+-md.surfaceforcings.mass_balance= smb;
+-md.surfaceforcings.mass_balance(end+1,:)=[1.5 3];
++md.surfaceforcings.mass_balance=smb;
++md.surfaceforcings.mass_balance(end+1,:)=[1.5 3.];
+ md.transient.isthermal=0;
+ 
+ md=solve(md,TransientSolutionEnum);
+@@ -27,7 +27,6 @@
+ 	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
+ 	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
+ 	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+-
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
Index: /issm/oecreview/Archive/13393-13976/ISSM-13580-13581.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13580-13581.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13580-13581.diff	(revision 13980)
@@ -0,0 +1,995 @@
+Index: ../trunk-jpl/test/NightlyRun/test222.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test222.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test222.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.prognostic.hydrostatic_adjustment='Incremental';
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
+Index: ../trunk-jpl/test/NightlyRun/test205.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test205.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test205.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2);
+ md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal','coupling','penalties');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test107.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test107.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test107.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md=extrude(md,5,3);
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test214.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test214.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+@@ -18,7 +18,7 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy'};
+Index: ../trunk-jpl/test/NightlyRun/test116.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test116.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test116.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ %Add boundary conditions on thickness on the border
+@@ -6,7 +6,7 @@
+ md.balancethickness.spcthickness(pos)=md.geometry.thickness(pos);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,BalancethicknessSolutionEnum);
++md=solve(md,BalancethicknessSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test223.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test223.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test223.m	(revision 13581)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+ md.geometry.bed=md.geometry.bed+50.; md.geometry.surface=md.geometry.surface+50.;
+ md.cluster=generic('name',oshostname(),'np',1);
+ md.prognostic.hydrostatic_adjustment='Incremental';
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
+Index: ../trunk-jpl/test/NightlyRun/test206.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test206.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test206.m	(revision 13581)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'macayeal','all');
+ md.timestepping.time_step=0;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,ThermalSolutionEnum);
++md=solve(md,ThermalSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test108.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test108.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test108.m	(revision 13581)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'macayeal','all');
+ md.timestepping.time_step=0;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,ThermalSolutionEnum);
++md=solve(md,ThermalSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test122.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test122.py	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test122.py	(revision 13581)
+@@ -20,8 +20,8 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','Enthalpy1','Waterfraction1',\
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','Enthalpy2','Waterfraction2',\
+-					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','Enthalpy3','Waterfraction3']
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','Enthalpy2','Waterfraction2',\
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','Enthalpy3','Waterfraction3']
+ field_tolerances=[\
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,\
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,\
+Index: ../trunk-jpl/test/NightlyRun/test215.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test215.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+@@ -18,7 +18,7 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy'};
+Index: ../trunk-jpl/test/NightlyRun/test117.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test117.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test117.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,5,1);
+@@ -7,7 +7,7 @@
+ md.balancethickness.spcthickness(pos)=md.geometry.thickness(pos);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,BalancethicknessSolutionEnum);
++md=solve(md,BalancethicknessSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',50000);
++md=triangle(model(),'../Exp/Square.exp',50000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.diagnostic.requested_outputs=StressTensorEnum;
+-md=solve(md,DiagnosticSolutionEnum);
++md.diagnostic.requested_outputs=StressTensorEnum();
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure',...
+Index: ../trunk-jpl/test/NightlyRun/test224.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test224.m	(revision 13581)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.prognostic.hydrostatic_adjustment='Incremental';
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+Index: ../trunk-jpl/test/NightlyRun/test207.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test207.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+@@ -8,7 +8,7 @@
+ md.transient.isprognostic=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature1','BasalforcingsMeltingRate1','Temperature2','BasalforcingsMeltingRate2','Temperature3','BasalforcingsMeltingRate3'};
+Index: ../trunk-jpl/test/NightlyRun/test109.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test109.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test109.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+@@ -8,7 +8,7 @@
+ md.transient.isprognostic=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test110.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test110.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test110.m	(revision 13581)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.requested_outputs=IceVolumeEnum();
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Volume1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Volume2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Volume3'};
+Index: ../trunk-jpl/test/NightlyRun/test209.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.py	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test209.py	(revision 13581)
+@@ -32,8 +32,8 @@
+ # Fields and tolerances to track changes
+ 
+ field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
+-					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
+ field_tolerances=[\
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,\
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,\
+Index: ../trunk-jpl/test/NightlyRun/test216.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test216.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000);
++md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000);
+ md=meshprocessrifts(md,'../Exp/Square.exp');
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+@@ -11,7 +11,7 @@
+ md.diagnostic.rift_penalty_lock=2;
+ md.diagnostic.rift_penalty_threshold=0;
+ md.rifts.riftstruct.fractionincrement=.1;
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test118.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test118.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test118.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=meshconvert(md);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+@@ -6,7 +6,7 @@
+ md.initialization.vy=md.initialization.vy+400;
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,BalancethicknessSolutionEnum);
++md=solve(md,BalancethicknessSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test102.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test102.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test102.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test225.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test225.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md.geometry.bed=md.geometry.bed+50.; md.geometry.surface=md.geometry.surface+50.;
+@@ -6,7 +6,7 @@
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.prognostic.hydrostatic_adjustment='Incremental';
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+Index: ../trunk-jpl/test/NightlyRun/test208.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test208.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test208.m	(revision 13581)
+@@ -1,9 +1,9 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
+Index: ../trunk-jpl/test/NightlyRun/test111.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test111.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test111.m	(revision 13581)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.requested_outputs=IceVolumeEnum();
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names={...
+Index: ../trunk-jpl/test/NightlyRun/test217.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test217.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+@@ -57,7 +57,7 @@
+ diagnostic.icefront=[diagnostic.icefront 1*md.mask.elementonfloatingice(diagnostic.icefront(:,end))];
+ md.diagnostic.icefront=diagnostic.icefront;
+ 
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %create analytical solution: strain rate is constant = ((rho_ice*g*h)/4B)^3 (Paterson, 4th Edition, page 292.
+ %ey_c=(md.materials.rho_ice*md.constants.g*(1-di)*md.geometry.thickness./(4*md.materials.rheology_B)).^3;
+Index: ../trunk-jpl/test/NightlyRun/test119.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test119.m	(revision 13581)
+@@ -1,17 +1,17 @@
+ 
+ %Simple mesh
+-md=bamg(model,'domain','../Exp/Square.exp','hmax',100000.);
++md=bamg(model(),'domain','../Exp/Square.exp','hmax',100000.);
+ x1=md.mesh.x;
+ y1=md.mesh.y;
+ 
+ %hVertices
+-md=bamg(model,'domain','../Exp/Square.exp','hmax',300000.,'hVertices',[10000. 100000. 400000. 100000.]');
++md=bamg(model(),'domain','../Exp/Square.exp','hmax',300000.,'hVertices',[10000. 100000. 400000. 100000.]');
+ x2=md.mesh.x;
+ y2=md.mesh.y;
+ 
+ %big mesh
+ t0=clock;
+-md=bamg(model,'domain','../Exp/Square.exp','hmax',3000.);
++md=bamg(model(),'domain','../Exp/Square.exp','hmax',3000.);
+ nbelements=md.mesh.numberofelements;
+ elapsedtime=etime(clock,t0);
+ 
+Index: ../trunk-jpl/test/NightlyRun/test201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test201.m	(revision 13581)
+@@ -1,9 +1,9 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test120.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test120.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+@@ -6,7 +6,7 @@
+ md.timestepping.time_step=0;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+-md=solve(md,EnthalpySolutionEnum);
++md=solve(md,EnthalpySolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Enthalpy','Waterfraction','Temperature'};
+Index: ../trunk-jpl/test/NightlyRun/test103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test103.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test103.m	(revision 13581)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.diagnostic.requested_outputs=StressTensorEnum;
+-md=solve(md,DiagnosticSolutionEnum);
++md.diagnostic.requested_outputs=StressTensorEnum();
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure',...
+Index: ../trunk-jpl/test/NightlyRun/test226.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test226.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test226.m	(revision 13581)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_adapt=1.;
+ md.timestepping.final_time=10.;
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
+Index: ../trunk-jpl/test/NightlyRun/test209.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test209.m	(revision 13581)
+@@ -1,15 +1,15 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
+-					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+ field_tolerances={...
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,...
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,...
+Index: ../trunk-jpl/test/NightlyRun/test210.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test210.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test210.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+Index: ../trunk-jpl/test/NightlyRun/test112.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test112.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test112.m	(revision 13581)
+@@ -1,9 +1,9 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,SurfaceSlopeSolutionEnum);
++md=solve(md,SurfaceSlopeSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'SurfaceSlopeX','SurfaceSlopeY'};
+Index: ../trunk-jpl/test/NightlyRun/test218.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test218.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test218.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=squaremesh(model,1000000,1000000,5,5);
++md=squaremesh(model(),1000000,1000000,5,5);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+@@ -80,7 +80,7 @@
+ md.qmu.isdakota=1;
+ 
+ %solve
+-md=solve(md,DiagnosticSolutionEnum,'overwrite','y');
++md=solve(md,DiagnosticSolutionEnum(),'overwrite','y');
+ 
+ %Fields and tolerances to track changes
+ md.qmu.results=md.results.dakota;
+Index: ../trunk-jpl/test/NightlyRun/test202.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test202.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test202.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test121.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test121.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+@@ -10,7 +10,7 @@
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md.thermal.isenthalpy=1;
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Enthalpy1','Waterfraction1','Temperature1',...
+Index: ../trunk-jpl/test/NightlyRun/test104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test104.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 13581)
+@@ -0,0 +1,5 @@
++test216    needs TriMeshProcessRifts module in meshprocessrifts.py (skip, per Eric, 10/03/12)
++test218    needs Dakota
++test234    needs Dakota
++test235    needs Dakota
++
+Index: ../trunk-jpl/test/NightlyRun/test227.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test227.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+@@ -6,7 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_adapt=1.;
+ md.timestepping.final_time=10.;
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+Index: ../trunk-jpl/test/NightlyRun/test211.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test211.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test211.m	(revision 13581)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'stokes','all');
+ md.diagnostic.reltol=NaN;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names={...
+Index: ../trunk-jpl/test/NightlyRun/test113.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test113.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test113.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,5,1);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,SurfaceSlopeSolutionEnum);
++md=solve(md,SurfaceSlopeSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'SurfaceSlopeX','SurfaceSlopeY'};
+Index: ../trunk-jpl/test/NightlyRun/test219.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test219.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2);
+ md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test220.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test220.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',120000);
++md=triangle(model(),'../Exp/Square.exp',120000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,2,1);
+ md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','pattyn');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test203.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test203.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test203.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test122.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test122.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test122.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+@@ -7,12 +7,12 @@
+ md.thermal.isenthalpy=1;
+ md.thermal.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','Enthalpy1','Waterfraction1', ...
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','Enthalpy2','Waterfraction2', ...
+-					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','Enthalpy3','Waterfraction3'};
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','Enthalpy2','Waterfraction2', ...
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','Enthalpy3','Waterfraction3'};
+ field_tolerances={...
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,...
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,...
+Index: ../trunk-jpl/test/NightlyRun/test105.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test105.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test105.m	(revision 13581)
+@@ -1,9 +1,9 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test228.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test228.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test228.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+@@ -16,7 +16,7 @@
+ md.surfaceforcings.mass_balance(end+1,:)=[1.5 3.];
+ md.transient.isthermal=0;
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','SurfaceforcingsMassBalance1', ...
+Index: ../trunk-jpl/test/NightlyRun/test212.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test212.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+@@ -17,7 +17,7 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy'};
+Index: ../trunk-jpl/test/NightlyRun/test114.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test114.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test114.m	(revision 13581)
+@@ -1,9 +1,9 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,BedSlopeSolutionEnum);
++md=solve(md,BedSlopeSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'BedSlopeX','BedSlopeY'};
+Index: ../trunk-jpl/test/NightlyRun/test514.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test514.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test514.m	(revision 13581)
+@@ -1,12 +1,12 @@
+ %Simple mesh 1
+ hVertices=10000.*ones(27,1);
+ hVertices(1:5)=1000.;
+-md=bamg(model,'domain','../Exp/Pig.exp','hmax',20000.,'hVertices',hVertices,'gradation',3.,'geometricalmetric',1);
++md=bamg(model(),'domain','../Exp/Pig.exp','hmax',20000.,'hVertices',hVertices,'gradation',3.,'geometricalmetric',1);
+ x1=md.mesh.x;
+ y1=md.mesh.y;
+ 
+ %Simple mesh 2
+-md=bamg(model,'domain','../Exp/Pig.exp','hmax',10000.);
++md=bamg(model(),'domain','../Exp/Pig.exp','hmax',10000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ x2=md.mesh.x;
+Index: ../trunk-jpl/test/NightlyRun/test221.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test221.m	(revision 13581)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Square.exp',120000);
++md=triangle(model(),'../Exp/Square.exp',120000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,2,1);
+ md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','macayeal');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.viscosity_overshoot=0;
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test204.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test106.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test106.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test106.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=meshconvert(md);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+@@ -6,7 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.prognostic.stabilization=3;
+ md.prognostic.spcthickness=md.geometry.thickness;
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test229.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test229.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test229.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+@@ -16,7 +16,7 @@
+ md.surfaceforcings.mass_balance(end+1,:)=[1.5 3.];
+ md.transient.isthermal=0;
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','SurfaceforcingsMassBalance1', ...
+Index: ../trunk-jpl/test/NightlyRun/test213.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test213.m	(revision 13581)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+@@ -18,7 +18,7 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy'};
+Index: ../trunk-jpl/test/NightlyRun/test115.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test115.m	(revision 13580)
++++ ../trunk-jpl/test/NightlyRun/test115.m	(revision 13581)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,5,1);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,BedSlopeSolutionEnum);
++md=solve(md,BedSlopeSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'BedSlopeX','BedSlopeY'};
Index: /issm/oecreview/Archive/13393-13976/ISSM-13581-13582.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13581-13582.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13581-13582.diff	(revision 13980)
@@ -0,0 +1,567 @@
+Index: ../trunk-jpl/test/NightlyRun/test231.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test231.m	(revision 13581)
++++ ../trunk-jpl/test/NightlyRun/test231.m	(revision 13582)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',350000);
++md=triangle(model(),'../Exp/Square.exp',350000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+@@ -10,25 +10,24 @@
+ md.timestepping.final_time=4;
+ 
+ %Set up transient
+-smb = ones(md.mesh.numberofvertices,1)*3.6;
+-smb=[ smb smb*2 ];
++smb=ones(md.mesh.numberofvertices,1)*3.6;
++smb=[ smb smb*2. ];
+ 
+-md.surfaceforcings.mass_balance= smb;
+-md.surfaceforcings.mass_balance(end+1,:)=[1.5 3];
++md.surfaceforcings.mass_balance=smb;
++md.surfaceforcings.mass_balance(end+1,:)=[1.5 3.];
+ md.transient.isthermal=0;
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','SurfaceforcingsMassBalance1', ...
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','SurfaceforcingsMassBalance2', ...
+-	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','SurfaceforcingsMassBalance3',...
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','SurfaceforcingsMassBalance3', ...
+ 	'Vx4','Vy4','Vz4','Vel4','Pressure4','Bed4','Surface4','Thickness4','SurfaceMassbalance4'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+-
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test232.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.m	(revision 13581)
++++ ../trunk-jpl/test/NightlyRun/test232.m	(revision 13582)
+@@ -1,17 +1,17 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.thermal.spctemperature=[md.thermal.spctemperature, md.thermal.spctemperature+5, md.thermal.spctemperature+10, md.thermal.spctemperature+15; 1.5 2.5 3.5 4];
++md.thermal.spctemperature=[md.thermal.spctemperature, md.thermal.spctemperature+5., md.thermal.spctemperature+10., md.thermal.spctemperature+15.; 1.5 2.5 3.5 4.];
+ md.timestepping.time_step=1;
+ md.timestepping.final_time=4;
+ md.transient.isdiagnostic=0;
+ md.transient.isprognostic=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature1','BasalforcingsMeltingRate1','Temperature2','BasalforcingsMeltingRate2','Temperature3','BasalforcingsMeltingRate3','Temperature4','BasalforcingsMeltingRate4'};
+Index: ../trunk-jpl/test/NightlyRun/test233.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test233.m	(revision 13581)
++++ ../trunk-jpl/test/NightlyRun/test233.m	(revision 13582)
+@@ -1,23 +1,23 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.thermal.spctemperature=[md.thermal.spctemperature, md.thermal.spctemperature+5; 1 2];
++md.thermal.spctemperature=[md.thermal.spctemperature, md.thermal.spctemperature+5.; 1. 2.];
+ md.timestepping.time_step=0.5;
+-md.timestepping.final_time=2;
+-md=solve(md,TransientSolutionEnum);
++md.timestepping.final_time=2.;
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
+-					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3', ...
+-					   'Vx4','Vy4','Vz4','Vel4','Pressure4','Bed4','Surface4','Thickness4','Temperature4','BasalforcingsMeltingRate4'};
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3', ...
++	'Vx4','Vy4','Vz4','Vel4','Pressure4','Bed4','Surface4','Thickness4','Temperature4','BasalforcingsMeltingRate4'};
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09, ...
+-						1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-07, ...
+-						1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06, ...
+-						1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06};
++	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-07, ...
++	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06, ...
++	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test230.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test230.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test230.py	(revision 13582)
+@@ -0,0 +1,77 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',350000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++
++md.timestepping.time_step=1.
++md.settings.output_frequency=1
++md.timestepping.final_time=4.
++
++#Set up transient
++smb=numpy.ones((md.mesh.numberofvertices,1))*3.6
++smb=numpy.hstack((smb,smb*-1.))
++
++md.surfaceforcings.mass_balance=numpy.vstack((smb,[1.5,3.]))
++md.transient.isthermal=0
++
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','SurfaceforcingsMassBalance1', \
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','SurfaceforcingsMassBalance2', \
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','SurfaceforcingsMassBalance3', \
++	'Vx4','Vy4','Vz4','Vel4','Pressure4','Bed4','Surface4','Thickness4','SurfaceMassbalance4']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][4]['Vx'],\
++	md.results['TransientSolution'][4]['Vy'],\
++	md.results['TransientSolution'][4]['Vz'],\
++	md.results['TransientSolution'][4]['Vel'],\
++	md.results['TransientSolution'][4]['Pressure'],\
++	md.results['TransientSolution'][4]['Bed'],\
++	md.results['TransientSolution'][4]['Surface'],\
++	md.results['TransientSolution'][4]['Thickness'],\
++	md.results['TransientSolution'][4]['SurfaceforcingsMassBalance'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test234.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test234.m	(revision 13581)
++++ ../trunk-jpl/test/NightlyRun/test234.m	(revision 13582)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+@@ -54,7 +54,7 @@
+ md.transient.requested_outputs=IceVolumeEnum();
+ 
+ %solve
+-md=solve(md,TransientSolutionEnum,'overwrite','y');
++md=solve(md,TransientSolutionEnum(),'overwrite','y');
+ md.qmu.results=md.results.dakota;
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test231.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test231.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test231.py	(revision 13582)
+@@ -0,0 +1,77 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',350000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++
++md.timestepping.time_step=1.
++md.settings.output_frequency=1
++md.timestepping.final_time=4.
++
++#Set up transient
++smb=numpy.ones((md.mesh.numberofvertices,1))*3.6
++smb=numpy.hstack((smb,smb*2.))
++
++md.surfaceforcings.mass_balance=numpy.vstack((smb,[1.5,3.]))
++md.transient.isthermal=0
++
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','SurfaceforcingsMassBalance1', \
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','SurfaceforcingsMassBalance2', \
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','SurfaceforcingsMassBalance3', \
++	'Vx4','Vy4','Vz4','Vel4','Pressure4','Bed4','Surface4','Thickness4','SurfaceMassbalance4']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][4]['Vx'],\
++	md.results['TransientSolution'][4]['Vy'],\
++	md.results['TransientSolution'][4]['Vz'],\
++	md.results['TransientSolution'][4]['Vel'],\
++	md.results['TransientSolution'][4]['Pressure'],\
++	md.results['TransientSolution'][4]['Bed'],\
++	md.results['TransientSolution'][4]['Surface'],\
++	md.results['TransientSolution'][4]['Thickness'],\
++	md.results['TransientSolution'][4]['SurfaceforcingsMassBalance'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test235.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test235.m	(revision 13581)
++++ ../trunk-jpl/test/NightlyRun/test235.m	(revision 13582)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+@@ -54,7 +54,7 @@
+ md.transient.requested_outputs=IceVolumeEnum();
+ 
+ %solve
+-md=solve(md,TransientSolutionEnum,'overwrite','y');
++md=solve(md,TransientSolutionEnum(),'overwrite','y');
+ md.qmu.results=md.results.dakota;
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test236.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test236.m	(revision 13581)
++++ ../trunk-jpl/test/NightlyRun/test236.m	(revision 13582)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ 
+ % Use of ispdd and isdelta18o methods
+@@ -18,10 +18,10 @@
+ % creating Present day and lgm temperatures
+ % Same temperature over the all region :
+ imonth=0:11;
+-tmonth(1:12)=238.15+20;
++tmonth(1:12)=238.15+20.;
+ for imonth=0:11
+     md.surfaceforcings.temperatures_presentday(1:md.mesh.numberofvertices,imonth+1)=tmonth(imonth+1);
+-    md.surfaceforcings.temperatures_lgm(1:md.mesh.numberofvertices,imonth+1)=tmonth(imonth+1)-20;
++    md.surfaceforcings.temperatures_lgm(1:md.mesh.numberofvertices,imonth+1)=tmonth(imonth+1)-20.;
+     % Time for the last line:
+     md.surfaceforcings.temperatures_presentday(md.mesh.numberofvertices+1,imonth+1)=((imonth+1)/12);
+     md.surfaceforcings.temperatures_lgm(md.mesh.numberofvertices+1,imonth+1)=((imonth+1)/12);
+@@ -43,19 +43,18 @@
+ 
+ % time steps and resolution
+ md.timestepping.time_step=20;
+-md.timestepping.final_time= 60;
++md.timestepping.final_time=60;
+ 
+ % 
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+-
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test232.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test232.py	(revision 13582)
+@@ -0,0 +1,38 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.thermal.spctemperature=numpy.vstack((numpy.hstack((md.thermal.spctemperature, md.thermal.spctemperature+5., md.thermal.spctemperature+10., md.thermal.spctemperature+15.)), [1.5,2.5,3.5,4.]))
++md.timestepping.time_step=1.
++md.timestepping.final_time=4.
++md.transient.isdiagnostic=0
++md.transient.isprognostic=0
++md.transient.isthermal=1
++md.transient.isgroundingline=0
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Temperature1','BasalforcingsMeltingRate1','Temperature2','BasalforcingsMeltingRate2','Temperature3','BasalforcingsMeltingRate3','Temperature4','BasalforcingsMeltingRate4']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][4]['Temperature'],\
++	md.results['TransientSolution'][4]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test237.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.m	(revision 13581)
++++ ../trunk-jpl/test/NightlyRun/test237.m	(revision 13582)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',600000);%180000
++md=triangle(model(),'../Exp/Square.exp',600000);%180000
+ md=setmask(md,'all','');
+ 
+ % Use of ispdd and isdelta18o methods
+@@ -18,10 +18,10 @@
+ % creating Present day and lgm temperatures
+ % Same temperature over the all region :
+ imonth=0:11;
+-tmonth(1:12)=238.15+20;
++tmonth(1:12)=238.15+20.;
+ for imonth=0:11
+     md.surfaceforcings.temperatures_presentday(1:md.mesh.numberofvertices,imonth+1)=tmonth(imonth+1);
+-    md.surfaceforcings.temperatures_lgm(1:md.mesh.numberofvertices,imonth+1)=tmonth(imonth+1)-20;
++    md.surfaceforcings.temperatures_lgm(1:md.mesh.numberofvertices,imonth+1)=tmonth(imonth+1)-20.;
+     % Time for the last line:
+     md.surfaceforcings.temperatures_presentday(md.mesh.numberofvertices+1,imonth+1)=((imonth+1)/12);
+     md.surfaceforcings.temperatures_lgm(md.mesh.numberofvertices+1,imonth+1)=((imonth+1)/12);
+@@ -44,23 +44,22 @@
+ % time steps and resolution
+ md.timestepping.time_step=20;
+ md.settings.output_frequency=1;
+-md.timestepping.final_time= 60;
++md.timestepping.final_time=60;
+ 
+ %
+ md=extrude(md,3,1);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
+-					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+ field_tolerances={...
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,...
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,...
+ 	1e-13,1e-13,1e-08,1e-13,1e-13,1e-10,1e-10,1e-10,1e-13,1e-8};
+-
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test233.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test233.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test233.py	(revision 13582)
+@@ -0,0 +1,72 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',200000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.thermal.spctemperature=numpy.vstack((numpy.hstack((md.thermal.spctemperature, md.thermal.spctemperature+5.)), [1.,2.]))
++md.timestepping.time_step=0.5
++md.timestepping.final_time=2.
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3', \
++	'Vx4','Vy4','Vz4','Vel4','Pressure4','Bed4','Surface4','Thickness4','Temperature4','BasalforcingsMeltingRate4']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09, \
++	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-07, \
++	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06, \
++	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][4]['Vx'],\
++	md.results['TransientSolution'][4]['Vy'],\
++	md.results['TransientSolution'][4]['Vz'],\
++	md.results['TransientSolution'][4]['Vel'],\
++	md.results['TransientSolution'][4]['Pressure'],\
++	md.results['TransientSolution'][4]['Bed'],\
++	md.results['TransientSolution'][4]['Surface'],\
++	md.results['TransientSolution'][4]['Thickness'],\
++	md.results['TransientSolution'][4]['Temperature'],\
++	md.results['TransientSolution'][4]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test230.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test230.m	(revision 13581)
++++ ../trunk-jpl/test/NightlyRun/test230.m	(revision 13582)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',350000);
++md=triangle(model(),'../Exp/Square.exp',350000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+@@ -10,25 +10,24 @@
+ md.timestepping.final_time=4;
+ 
+ %Set up transient
+-smb = ones(md.mesh.numberofvertices,1)*3.6;
+-smb=[ smb smb*-1 ];
++smb=ones(md.mesh.numberofvertices,1)*3.6;
++smb=[ smb smb*-1. ];
+ 
+-md.surfaceforcings.mass_balance= smb;
+-md.surfaceforcings.mass_balance(end+1,:)=[1.5 3];
++md.surfaceforcings.mass_balance=smb;
++md.surfaceforcings.mass_balance(end+1,:)=[1.5 3.];
+ md.transient.isthermal=0;
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','SurfaceforcingsMassBalance1', ...
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','SurfaceforcingsMassBalance2', ...
+-	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','SurfaceforcingsMassBalance3',...
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','SurfaceforcingsMassBalance3', ...
+ 	'Vx4','Vy4','Vz4','Vel4','Pressure4','Bed4','Surface4','Thickness4','SurfaceMassbalance4'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+-
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
Index: /issm/oecreview/Archive/13393-13976/ISSM-13584-13585.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13584-13585.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13584-13585.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/externalpackages/readline/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/readline/install.sh	(revision 13584)
++++ ../trunk-jpl/externalpackages/readline/install.sh	(revision 13585)
+@@ -16,6 +16,6 @@
+ mv readline-6.2.2/* src
+ rm -rf readline-6.2.2
+ 
+-$install
++#install
+ cd src
+ python setup.py install
Index: /issm/oecreview/Archive/13393-13976/ISSM-13585-13586.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13585-13586.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13585-13586.diff	(revision 13980)
@@ -0,0 +1,244 @@
+Index: ../trunk-jpl/src/modules/BamgMesher/BamgMesher.h
+===================================================================
+--- ../trunk-jpl/src/modules/BamgMesher/BamgMesher.h	(revision 13585)
++++ ../trunk-jpl/src/modules/BamgMesher/BamgMesher.h	(revision 13586)
+@@ -1,5 +1,5 @@
+ /*
+-	BamgMesherUsage.h
++	BamgMesher.h
+ */
+ 
+ #ifndef _BAMG_MESHER_H_
+Index: ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 13585)
++++ ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 13586)
+@@ -34,20 +34,14 @@
+ 	mwSize     ndim=2;
+ 	mwSize		dimensions[2] = {1,1};
+ 	double* pair=NULL;
+-
+ 	
+ 	/* input: */
+-	double *tindex_in = NULL;
+ 	double *index_in  = NULL;
+ 	int     nel;
+-	double *x_inm = NULL; //matlab vector
+ 	double *x_in  = NULL; //copy of matlab vector
+ 	int     nods;
+-	double *y_inm              = NULL; //matlab vector
+ 	double *y_in               = NULL; //copy of matlab vector
+-	double *tsegments_in       = NULL;
+ 	double *segments_in        = NULL;
+-	double *tsegmentmarkers_in = NULL;
+ 	double *segmentmarkers_in  = NULL;
+ 
+ 	/* state: */
+@@ -58,86 +52,19 @@
+ 	int     riftflag;
+ 	int     numrifts;
+ 
+-	/* verify correct usage: */
+-	if (nlhs==0 && nrhs==0){
+-		/* special case: */
+-		TriMeshProcessRiftsUsage();
+-		return;
+-	}
+-	
+-	if (!(  (nlhs==6) || (nrhs==5))){
+-		mexPrintf("   %s format error.\n", __FUNCT__);
+-		TriMeshProcessRiftsUsage();
+-		_error_("bad usage");
+-	}
++	/*Boot module*/
++	MODULEBOOT();
+ 
+-	/*Fetch index_in: */
+-	if(mxIsDouble(prhs[0])){
+-		nel=mxGetM(prhs[0]);
+-		tindex_in=mxGetPr(prhs[0]);
+-		index_in=xNew<double>(nel*3);
+-		for (i=0;i<nel;i++){
+-			for (j=0;j<3;j++){
+-				*(index_in+3*i+j)=*(tindex_in+nel*j+i);
+-			}
+-		}
+-	}
+-	else{
+-		_error_("first argument should be the element list");
+-	}
++	/*checks on arguments on the matlab side: */
++	CHECKARGUMENTS(NLHS,NRHS,&TriMeshProcessRiftsUsage);
+ 
+-	/*Fetch x_in: */
+-	if(mxIsDouble(prhs[1])){
+-		nods=mxGetM(prhs[1]);
+-		x_inm=mxGetPr(prhs[1]);
+-		x_in=xNew<double>(nods);
+-		for (i=0;i<nods;i++){
+-			x_in[i]=x_inm[i];
+-		}
+-	}
+-	else{
+-		_error_("second argument should be the x corrdinate list");
+-	}
++	/*Fetch data */
++	FetchData(&index_in,&nel,NULL,INDEXIN);
++	FetchData(&x_in,&nods,XIN);
++	FetchData(&y_in,NULL,YIN);
++	FetchData(&segments_in,&num_seg,NULL,SEGMENTSIN);
++	FetchData(&segmentmarkers_in,NULL,SEGMENTMARKERSIN);
+ 
+-	/*Fetch y_in: */
+-	if(mxIsDouble(prhs[2])){
+-		y_inm=mxGetPr(prhs[2]);
+-		y_in=xNew<double>(nods);
+-		for (i=0;i<nods;i++){
+-			y_in[i]=y_inm[i];
+-		}
+-	}
+-	else{
+-		_error_("third argument should be the y corrdinate list");
+-	}	
+-
+-	/*Fetch segments_in: */
+-	if(mxIsDouble(prhs[3])){
+-		num_seg=mxGetM(prhs[3]);
+-		tsegments_in=mxGetPr(prhs[3]);
+-		segments_in=xNew<double>(num_seg*3);
+-		for (i=0;i<num_seg;i++){
+-			for (j=0;j<3;j++){
+-				*(segments_in+3*i+j)=*(tsegments_in+num_seg*j+i);
+-			}
+-		}
+-	}
+-	else{
+-		_error_("fourth argument should be the segments list");
+-	}
+-
+-	/*Fetch segment markers: */
+-	if(mxIsDouble(prhs[4])){
+-		tsegmentmarkers_in=mxGetPr(prhs[4]);
+-		segmentmarkers_in=xNew<double>(num_seg);
+-		for (i=0;i<num_seg;i++){
+-			segmentmarkers_in[i]=tsegmentmarkers_in[i];
+-		}
+-	}
+-	else{
+-		_error_("fourth argument should be the segmentmarkers list");
+-	}
+-
+ 	/*First, do some fixing on the existing mesh: we do not want any element belonging entirely to the segment list (ie: 
+ 	 *all the nodes of this element belong to the segments (tends to happen when there are corners: */
+ 	RemoveCornersFromRifts(&index_in,&nel,&x_in,&y_in,&nods,segments_in,segmentmarkers_in,num_seg);
+@@ -170,11 +97,11 @@
+ 
+ 
+ 	/*Output : */
+-	WriteData(&plhs[0],index_in,nel,3);
+-	WriteData(&plhs[1],x_in,nods,1);
+-	WriteData(&plhs[2],y_in,nods,1);
+-	WriteData(&plhs[3],segments_in,num_seg,3);
+-	WriteData(&plhs[4],segmentmarkers_in,num_seg,1);
++	WriteData(INDEXOUT,index_in,nel,3);
++	WriteData(XOUT,x_in,nods,1);
++	WriteData(YOUT,y_in,nods,1);
++	WriteData(SEGMENTSOUT,segments_in,num_seg,3);
++	WriteData(SEGMENTMARKERSOUT,segmentmarkers_in,num_seg,1);
+ 
+ 	if(riftflag){
+ 		/*Create a structure rifts where if i is a rift number, we have the following fields rifts(i).segments and rifts(i).numsegs: */
+@@ -190,7 +117,6 @@
+ 		fnames[9] = "state";
+ 
+ 		dimensions[0]=out_numrifts;
+-
+ 		pmxa_array=mxCreateStructArray( ndim,dimensions,10,fnames);
+ 		
+ 		for (i=0;i<out_numrifts;i++){
+@@ -248,5 +174,6 @@
+ 	}
+ 	plhs[5]=pmxa_array;
+ 
+-	return;
++	/*end module: */
++	MODULEEND();
+ }
+Index: ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h
+===================================================================
+--- ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 13585)
++++ ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 13586)
+@@ -1,21 +1,66 @@
+-/*!\file:  TriMeshProcessRifts.h
+- * \brief header prototype
++/*
++ * TriMeshProcessRifts.h
+  */ 
+ 
+ #ifndef _TRIMESH_PROCESSRIFTS_H_
+ #define _TRIMESH_PROCESSRIFTS_H_
+ 
+-#include "mex.h"
+-#include "triangle.h"
+-#include "string.h"
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
+ #include "../../c/include/globals.h"
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+ #include "../../c/issm-binding.h"
+-#include "../../c/EnumDefinitions/EnumDefinitions.h"
+ 
+ #undef __FUNCT__ 
+-#define __FUNCT__ "TriMeshProcessRifts"
++#define __FUNCT__  "TriMeshProcessRifts"
+ 
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define INDEXIN          prhs[0]
++#define XIN              prhs[1]
++#define YIN              prhs[2]
++#define SEGMENTSIN       prhs[3]
++#define SEGMENTMARKERSIN prhs[4]
++/* serial output macros: */
++#define INDEXOUT          (mxArray**)&plhs[0]
++#define XOUT              (mxArray**)&plhs[1]
++#define YOUT              (mxArray**)&plhs[2]
++#define SEGMENTSOUT       (mxArray**)&plhs[3]
++#define SEGMENTMARKERSOUT (mxArray**)&plhs[4]
++#define RIFTSTRUCTOUT     (mxArray**)&plhs[5]
+ #endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define INDEXIN          PyTuple_GetItem(args,0)
++#define XIN              PyTuple_GetItem(args,1)
++#define YIN              PyTuple_GetItem(args,2)
++#define SEGMENTSIN       PyTuple_GetItem(args,3)
++#define SEGMENTSMARKERSIN PyTuple_GetItem(args,4)
++/* serial output macros: */
++#define INDEXOUT          output,0
++#define XOUT              output,1
++#define YOUT              output,2
++#define SEGMENTSOUT       output,3
++#define SEGMENTMARKERSOUT output,4
++#define RIFTSTRUCTOUT     output,5
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  6
++#undef NRHS
++#define NRHS  5
++
++#endif
Index: /issm/oecreview/Archive/13393-13976/ISSM-13586-13587.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13586-13587.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13586-13587.diff	(revision 13980)
@@ -0,0 +1,1059 @@
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/.classpath
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/.classpath	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/.classpath	(revision 13587)
+@@ -0,0 +1,8 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<classpath>
++	<classpathentry kind="src" path="src"/>
++	<classpathentry kind="src" path="gen"/>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
++	<classpathentry kind="output" path="bin/classes"/>
++</classpath>
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/project.properties
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/project.properties	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/project.properties	(revision 13587)
+@@ -0,0 +1,14 @@
++# This file is automatically generated by Android Tools.
++# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
++#
++# This file must be checked in Version Control Systems.
++#
++# To customize properties used by the Ant build system edit
++# "ant.properties", and override values to adapt the script to your
++# project structure.
++#
++# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
++#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
++
++# Project target.
++target=android-16
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/.project
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/.project	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/.project	(revision 13587)
+@@ -0,0 +1,33 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<projectDescription>
++	<name>OpenGLES20</name>
++	<comment></comment>
++	<projects>
++	</projects>
++	<buildSpec>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>org.eclipse.jdt.core.javabuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++	</buildSpec>
++	<natures>
++		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
++		<nature>org.eclipse.jdt.core.javanature</nature>
++	</natures>
++</projectDescription>
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/proguard-project.txt
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/proguard-project.txt	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/proguard-project.txt	(revision 13587)
+@@ -0,0 +1,20 @@
++# To enable ProGuard in your project, edit project.properties
++# to define the proguard.config property as described in that file.
++#
++# Add project specific ProGuard rules here.
++# By default, the flags in this file are appended to flags specified
++# in ${sdk.dir}/tools/proguard/proguard-android.txt
++# You can edit the include path and order by changing the ProGuard
++# include property in project.properties.
++#
++# For more details, see
++#   http://developer.android.com/guide/developing/tools/proguard.html
++
++# Add any project specific keep options here:
++
++# If your project uses WebView with JS, uncomment the following
++# and specify the fully qualified class name to the JavaScript interface
++# class:
++#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
++#   public *;
++#}
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/AndroidManifest.xml	(revision 13587)
+@@ -0,0 +1,27 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.opengles20"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="8"
++        android:targetSdkVersion="15" />
++    
++    <uses-feature android:glEsVersion="0x00020000" android:required="true" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".MainActivity"
++            android:label="@string/title_activity_main" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/Square.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/Square.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/Square.java	(revision 13587)
+@@ -0,0 +1,76 @@
++package com.example.opengles20;
++
++import java.nio.ByteBuffer;
++import java.nio.ByteOrder;
++import java.nio.FloatBuffer;
++import java.nio.ShortBuffer;
++
++import android.opengl.GLES20;
++
++class Square {
++
++    private FloatBuffer vertexBuffer;
++    private ShortBuffer drawListBuffer;
++
++    // number of coordinates per vertex in this array
++    static final int COORDS_PER_VERTEX = 3;
++    static float squareCoords[] = { -0.5f,  0.5f, 0.0f,   // top left
++                                    -0.5f, -0.5f, 0.0f,   // bottom left
++                                     0.5f, -0.5f, 0.0f,   // bottom right
++                                     0.5f,  0.5f, 0.0f }; // top right
++    // Set color with red, green, blue and alpha (opacity) values
++    float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 1.0f };
++    private short drawOrder[] = { 0, 1, 2, 0, 2, 3 }; // order to draw vertices
++    private int mProgram; 
++    private int mPositionHandle;
++    private int mColorHandle;
++    private final int vertexCount = squareCoords.length / COORDS_PER_VERTEX;
++    private final int vertexStride = COORDS_PER_VERTEX * 4; // bytes per vertex
++
++    public Square() {
++        // initialize vertex byte buffer for shape coordinates
++        ByteBuffer bb = ByteBuffer.allocateDirect(
++        // (# of coordinate values * 4 bytes per float)
++                squareCoords.length * 4);
++        bb.order(ByteOrder.nativeOrder());
++        vertexBuffer = bb.asFloatBuffer();
++        vertexBuffer.put(squareCoords);
++        vertexBuffer.position(0);
++
++        // initialize byte buffer for the draw list
++        ByteBuffer dlb = ByteBuffer.allocateDirect(
++        // (# of coordinate values * 2 bytes per short)
++                drawOrder.length * 2);
++        dlb.order(ByteOrder.nativeOrder());
++        drawListBuffer = dlb.asShortBuffer();
++        drawListBuffer.put(drawOrder);
++        drawListBuffer.position(0);
++    }
++    public void draw2() {
++        // Add program to OpenGL ES environment
++        GLES20.glUseProgram(mProgram);
++
++        // get handle to vertex shader's vPosition member
++        mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
++
++        // Enable a handle to the triangle vertices
++        GLES20.glEnableVertexAttribArray(mPositionHandle);
++
++        // Prepare the triangle coordinate data
++        GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX,
++                                     GLES20.GL_FLOAT, false,
++                                     vertexStride, vertexBuffer);
++
++        // get handle to fragment shader's vColor member
++        mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor");
++
++        // Set color for drawing the triangle
++        GLES20.glUniform4fv(mColorHandle, 1, color, 0);
++
++        // Draw the triangle
++        GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);
++
++        // Disable vertex array
++        GLES20.glDisableVertexAttribArray(mPositionHandle);
++    }
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/MainActivity.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/MainActivity.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/MainActivity.java	(revision 13587)
+@@ -0,0 +1,57 @@
++package com.example.opengles20;
++
++
++import android.app.Activity;
++import android.content.Context;
++import android.opengl.GLSurfaceView;
++import android.os.Bundle;
++
++public class MainActivity extends Activity {
++
++    private GLSurfaceView mGLView;
++
++    @Override
++    public void onCreate(Bundle savedInstanceState) {
++        super.onCreate(savedInstanceState);
++
++        // Create a GLSurfaceView instance and set it
++        // as the ContentView for this Activity.
++        mGLView = new MyGLSurfaceView(this);
++        setContentView(mGLView);
++    }
++    @Override
++    protected void onPause() {
++        super.onPause();
++        // The following call pauses the rendering thread.
++        // If your OpenGL application is memory intensive,
++        // you should consider de-allocating objects that
++        // consume significant memory here.
++        mGLView.onPause();
++    }
++    
++    @Override
++    protected void onResume() {
++        super.onResume();
++        // The following call resumes a paused rendering thread.
++        // If you de-allocated graphic objects for onPause()
++        // this is a good place to re-allocate them.
++        mGLView.onResume();
++    }
++}
++  
++class MyGLSurfaceView extends GLSurfaceView {
++
++	 public MyGLSurfaceView(Context context) {
++	        super(context);
++
++	        // Create an OpenGL ES 2.0 context.
++	        setEGLContextClientVersion(2);
++
++	        // Set the Renderer for drawing on the GLSurfaceView
++	        setRenderer(new MyGL20Renderer());
++
++	        // Render the view only when there is a change in the drawing data
++	        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
++	    }
++    
++}
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/MyGL20Renderer.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/MyGL20Renderer.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/MyGL20Renderer.java	(revision 13587)
+@@ -0,0 +1,46 @@
++package com.example.opengles20;
++
++
++
++import javax.microedition.khronos.egl.EGLConfig;
++import javax.microedition.khronos.opengles.GL10;
++
++import android.opengl.GLES20;
++import android.opengl.GLSurfaceView;
++
++	public class MyGL20Renderer implements GLSurfaceView.Renderer {
++	private	Triangle mTriangle;
++	//private Square mSquare;
++
++	public void onSurfaceCreated(GL10 unused, EGLConfig config) {
++	        //Set the background frame color
++	        GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
++	        mTriangle = new Triangle();
++	        //mSquare = new Square();
++	    }
++
++	    public void onDrawFrame(GL10 unused) {
++	        // Redraw background color
++	        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
++	        mTriangle.draw1();
++	        //mSquare.draw2();
++	    }
++
++	    public void onSurfaceChanged(GL10 unused, int width, int height) {
++	        GLES20.glViewport(0, 0, width, height);
++	    }
++	    
++		public static int loadShader(int type, String shaderCode){
++
++		    // create a vertex shader type (GLES20.GL_VERTEX_SHADER)
++		    // or a fragment shader type (GLES20.GL_FRAGMENT_SHADER)
++		    int shader = GLES20.glCreateShader(type);
++
++		    // add the source code to the shader and compile it
++		    GLES20.glShaderSource(shader, shaderCode);
++		    GLES20.glCompileShader(shader);
++
++		    return shader;
++		}
++	}
++	
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/Triangle.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/Triangle.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/Triangle.java	(revision 13587)
+@@ -0,0 +1,94 @@
++package com.example.opengles20;
++
++import java.nio.ByteBuffer;
++import java.nio.ByteOrder;
++import java.nio.FloatBuffer;
++
++import android.opengl.GLES20;
++
++class Triangle {
++
++    private FloatBuffer vertexBuffer;
++
++    // number of coordinates per vertex in this array
++    static final int COORDS_PER_VERTEX = 3;
++    static float triangleCoords[] = { // in counterclockwise order:
++         0.0f,  0.622008459f, 0.0f,   // top
++        -0.5f, -0.311004243f, 0.0f,   // bottom left
++         0.5f, -0.311004243f, 0.0f    // bottom right
++    };
++
++    private int mProgram; 
++    private int mPositionHandle;
++    private int mColorHandle;
++    private final int vertexCount = triangleCoords.length / COORDS_PER_VERTEX;
++    private final int vertexStride = COORDS_PER_VERTEX * 4; // bytes per vertex
++
++    // Set color with red, green, blue and alpha (opacity) values
++    float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 1.0f };
++    
++	private final String vertexShaderCode =
++			"attribute vec4 vPosition;" +
++			"void main() {" +
++			"  gl_Position = vPosition;" +
++			"}";
++
++	private final String fragmentShaderCode =
++			"precision mediump float;" +
++			"uniform vec4 vColor;" +
++			"void main() {" +
++			"  gl_FragColor = vColor;" +
++			"}";
++	
++
++    public Triangle() {
++        // initialize vertex byte buffer for shape coordinates
++        ByteBuffer bb = ByteBuffer.allocateDirect(
++                // (number of coordinate values * 4 bytes per float)
++                triangleCoords.length * 4);
++        // use the device hardware's native byte order
++        bb.order(ByteOrder.nativeOrder());
++
++        // create a floating point buffer from the ByteBuffer
++        vertexBuffer = bb.asFloatBuffer();
++        // add the coordinates to the FloatBuffer
++        vertexBuffer.put(triangleCoords);
++        // set the buffer to read the first coordinate
++        vertexBuffer.position(0);
++        int vertexShader = MyGL20Renderer.loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode);
++        int fragmentShader = MyGL20Renderer.loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode);
++
++        mProgram = GLES20.glCreateProgram();             // create empty OpenGL ES Program
++        GLES20.glAttachShader(mProgram, vertexShader);   // add the vertex shader to program
++        GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program
++        GLES20.glLinkProgram(mProgram);                  // creates OpenGL ES program executables
++    }
++    public void draw1() {
++        // Add program to OpenGL ES environment
++        GLES20.glUseProgram(mProgram);
++
++        // get handle to vertex shader's vPosition member
++        mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
++
++        // Enable a handle to the triangle vertices
++        GLES20.glEnableVertexAttribArray(mPositionHandle);
++
++        // Prepare the triangle coordinate data
++        GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX,
++                                     GLES20.GL_FLOAT, false,
++                                     vertexStride, vertexBuffer);
++
++        // get handle to fragment shader's vColor member
++        mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor");
++
++        // Set color for drawing the triangle
++        GLES20.glUniform4fv(mColorHandle, 1, color, 0);
++
++        // Draw the triangle
++        GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);
++
++        // Disable vertex array
++        GLES20.glDisableVertexAttribArray(mPositionHandle);
++    }
++}
++
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/AndroidManifest.xml	(revision 13587)
+@@ -0,0 +1,27 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.opengles20"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="8"
++        android:targetSdkVersion="15" />
++    
++    <uses-feature android:glEsVersion="0x00020000" android:required="true" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".MainActivity"
++            android:label="@string/title_activity_main" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/OpenGLES20.apk
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/OpenGLES20.apk
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/OpenGLES20.apk	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/OpenGLES20.apk	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/OpenGLES20.apk
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/resources.ap_
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/resources.ap_
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/resources.ap_	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/resources.ap_	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/resources.ap_
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-hdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-hdpi/ic_launcher.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-hdpi/ic_launcher.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-hdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-hdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-hdpi/ic_action_search.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-hdpi/ic_action_search.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-hdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-ldpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-ldpi/ic_launcher.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-ldpi/ic_launcher.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-ldpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-mdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-mdpi/ic_launcher.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-mdpi/ic_launcher.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-mdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-mdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-mdpi/ic_action_search.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-mdpi/ic_action_search.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-mdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-xhdpi/ic_launcher.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-xhdpi/ic_launcher.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-xhdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-xhdpi/ic_action_search.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-xhdpi/ic_action_search.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-xhdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes.dex
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes.dex
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes.dex	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes.dex	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes.dex
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MyGLSurfaceView.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MyGLSurfaceView.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MyGLSurfaceView.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MyGLSurfaceView.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MyGLSurfaceView.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$string.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$string.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$string.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$string.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$string.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$attr.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$attr.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$attr.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$attr.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$attr.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/Square.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/Square.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/Square.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/Square.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/Square.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MainActivity.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MainActivity.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MainActivity.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MainActivity.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MainActivity.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MyGL20Renderer.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MyGL20Renderer.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MyGL20Renderer.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MyGL20Renderer.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MyGL20Renderer.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$id.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$id.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$id.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$id.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$id.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$layout.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$layout.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$layout.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$layout.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$layout.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/BuildConfig.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/BuildConfig.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/BuildConfig.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/BuildConfig.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/BuildConfig.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/Triangle.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/Triangle.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/Triangle.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/Triangle.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/Triangle.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$style.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$style.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$style.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$style.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$style.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$drawable.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$drawable.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$drawable.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$drawable.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$drawable.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$menu.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$menu.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$menu.class	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$menu.class	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R$menu.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/gen/com/example/opengles20/R.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/gen/com/example/opengles20/R.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/gen/com/example/opengles20/R.java	(revision 13587)
+@@ -0,0 +1,35 @@
++/* AUTO-GENERATED FILE.  DO NOT MODIFY.
++ *
++ * This class was automatically generated by the
++ * aapt tool from the resource data it found.  It
++ * should not be modified by hand.
++ */
++
++package com.example.opengles20;
++
++public final class R {
++    public static final class attr {
++    }
++    public static final class drawable {
++        public static final int ic_action_search=0x7f020000;
++        public static final int ic_launcher=0x7f020001;
++    }
++    public static final class id {
++        public static final int menu_settings=0x7f070000;
++    }
++    public static final class layout {
++        public static final int activity_main=0x7f030000;
++    }
++    public static final class menu {
++        public static final int activity_main=0x7f060000;
++    }
++    public static final class string {
++        public static final int app_name=0x7f040000;
++        public static final int hello_world=0x7f040001;
++        public static final int menu_settings=0x7f040002;
++        public static final int title_activity_main=0x7f040003;
++    }
++    public static final class style {
++        public static final int AppTheme=0x7f050000;
++    }
++}
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/gen/com/example/opengles20/BuildConfig.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/gen/com/example/opengles20/BuildConfig.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/gen/com/example/opengles20/BuildConfig.java	(revision 13587)
+@@ -0,0 +1,6 @@
++/** Automatically generated file. DO NOT MODIFY */
++package com.example.opengles20;
++
++public final class BuildConfig {
++    public final static boolean DEBUG = true;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/libs/android-support-v4.jar
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/libs/android-support-v4.jar
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/libs/android-support-v4.jar	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/libs/android-support-v4.jar	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/libs/android-support-v4.jar
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/values/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/res/values/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/res/values/styles.xml	(revision 13587)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/values/strings.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/res/values/strings.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/res/values/strings.xml	(revision 13587)
+@@ -0,0 +1,8 @@
++<resources>
++
++    <string name="app_name">OpenGLES20</string>
++    <string name="hello_world">Hello world!</string>
++    <string name="menu_settings">Settings</string>
++    <string name="title_activity_main">MainActivity</string>
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-hdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-hdpi/ic_launcher.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-hdpi/ic_launcher.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-hdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-hdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-hdpi/ic_action_search.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-hdpi/ic_action_search.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-hdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/menu/activity_main.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/res/menu/activity_main.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/res/menu/activity_main.xml	(revision 13587)
+@@ -0,0 +1,6 @@
++<menu xmlns:android="http://schemas.android.com/apk/res/android">
++    <item android:id="@+id/menu_settings"
++        android:title="@string/menu_settings"
++        android:orderInCategory="100"
++        android:showAsAction="never" />
++</menu>
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/values-v11/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/res/values-v11/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/res/values-v11/styles.xml	(revision 13587)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-ldpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-ldpi/ic_launcher.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-ldpi/ic_launcher.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-ldpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/values-v14/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/res/values-v14/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/res/values-v14/styles.xml	(revision 13587)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-mdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-mdpi/ic_launcher.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-mdpi/ic_launcher.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-mdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-mdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-mdpi/ic_action_search.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-mdpi/ic_action_search.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-mdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-xhdpi/ic_launcher.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-xhdpi/ic_launcher.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-xhdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-xhdpi/ic_action_search.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-xhdpi/ic_action_search.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-xhdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/res/layout/activity_main.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/res/layout/activity_main.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/res/layout/activity_main.xml	(revision 13587)
+@@ -0,0 +1,26 @@
++<?xml version="1.0" encoding="utf-8"?>
++<!-- Copyright (C) 2012 The Android Open Source Project
++
++     Licensed under the Apache License, Version 2.0 (the "License");
++     you may not use this file except in compliance with the License.
++     You may obtain a copy of the License at
++  
++          http://www.apache.org/licenses/LICENSE-2.0
++  
++     Unless required by applicable law or agreed to in writing, software
++     distributed under the License is distributed on an "AS IS" BASIS,
++     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++     See the License for the specific language governing permissions and
++     limitations under the License.
++-->
++<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
++    android:layout_width="fill_parent"
++    android:layout_height="fill_parent"
++    android:orientation="vertical" >
++
++    <TextView
++        android:layout_width="fill_parent"
++        android:layout_height="wrap_content"
++        android:text="hello" />
++
++</LinearLayout>
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/ic_launcher-web.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/ic_launcher-web.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/ic_launcher-web.png	(revision 13586)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/ic_launcher-web.png	(revision 13587)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/ic_launcher-web.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13587-13588.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13587-13588.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13587-13588.diff	(revision 13980)
@@ -0,0 +1,338 @@
+Index: ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 13587)
++++ ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 13588)
+@@ -10,48 +10,31 @@
+ 	_printLine_("      where: (index1,x1,y1,segments1,segmentmarkers1) is an initial triangulation.");
+ 	_printLine_("      index2,x2,y2,segments2,segmentmarkers2,rifts2 is the resulting triangulation where rifts have been processed.");
+ }/*}}}*/
++void TriMeshProcessRiftsx(double** pindex, int* pnel,double** px,double** py,int* pnods,double** psegments,double** psegmentmarkers,int *pnum_seg,
++			int  *pnumrifts, int  **priftsnumsegments, double ***priftssegments,
++			int  **priftsnumpairs, double ***priftspairs, double **priftstips,
++			double ***priftspenaltypairs, int  **priftsnumpenaltypairs);
+ WRAPPER(TriMeshProcessRifts){
+ 
+-	/*Matlab arrays: */
+-	mxArray *pmxa_array  = NULL;
+-	mxArray *pmxa_array2 = NULL;
+-	mxArray *pmxa_array3 = NULL;
+-	int i,j,k,counter;
+-	
+ 	/* returned quantities: */
+-	int      out_numrifts;
+-	int     *out_riftsnumsegments     = NULL;
+-	double **out_riftssegments        = NULL;
+-	int     *out_riftsnumpairs        = NULL;
+-	double **out_riftspairs           = NULL;
+-	double  *out_riftstips            = NULL;
+-	double **out_riftspenaltypairs    = NULL;
+-	int     *out_riftsnumpenaltypairs = NULL;
++	int      numrifts;
++	int     *riftsnumsegments     = NULL;
++	double **riftssegments        = NULL;
++	int     *riftsnumpairs        = NULL;
++	double **riftspairs           = NULL;
++	double  *riftstips            = NULL;
++	double **riftspenaltypairs    = NULL;
++	int     *riftsnumpenaltypairs = NULL;
+ 
+-	/*empty rifts structure: */
+-	double* pNaN=NULL;
+-	const	char*	fnames[10];
+-	mwSize     ndim=2;
+-	mwSize		dimensions[2] = {1,1};
+-	double* pair=NULL;
+-	
+ 	/* input: */
+-	double *index_in  = NULL;
+-	int     nel;
+-	double *x_in  = NULL; //copy of matlab vector
+-	int     nods;
+-	double *y_in               = NULL; //copy of matlab vector
+-	double *segments_in        = NULL;
+-	double *segmentmarkers_in  = NULL;
+-
+-	/* state: */
+-	double *state = NULL;
++	int     nel,nods;
++	double *index          = NULL;
++	double *x              = NULL;
++	double *y              = NULL;
++	double *segments       = NULL;
++	double *segmentmarkers = NULL;
+ 	int     num_seg;
+ 
+-	/*rifts: */
+-	int     riftflag;
+-	int     numrifts;
+-
+ 	/*Boot module*/
+ 	MODULEBOOT();
+ 
+@@ -59,121 +42,168 @@
+ 	CHECKARGUMENTS(NLHS,NRHS,&TriMeshProcessRiftsUsage);
+ 
+ 	/*Fetch data */
+-	FetchData(&index_in,&nel,NULL,INDEXIN);
+-	FetchData(&x_in,&nods,XIN);
+-	FetchData(&y_in,NULL,YIN);
+-	FetchData(&segments_in,&num_seg,NULL,SEGMENTSIN);
+-	FetchData(&segmentmarkers_in,NULL,SEGMENTMARKERSIN);
++	FetchData(&index,&nel,NULL,INDEXIN);
++	FetchData(&x,&nods,XIN);
++	FetchData(&y,NULL,YIN);
++	FetchData(&segments,&num_seg,NULL,SEGMENTSIN);
++	FetchData(&segmentmarkers,NULL,SEGMENTMARKERSIN);
+ 
+-	/*First, do some fixing on the existing mesh: we do not want any element belonging entirely to the segment list (ie: 
+-	 *all the nodes of this element belong to the segments (tends to happen when there are corners: */
+-	RemoveCornersFromRifts(&index_in,&nel,&x_in,&y_in,&nods,segments_in,segmentmarkers_in,num_seg);
++	/*call x layer*/
++	TriMeshProcessRiftsx(&index,&nel,&x,&y,&nods,&segments,&segmentmarkers,&num_seg,
++				&numrifts,&riftsnumsegments,&riftssegments,&riftsnumpairs,&riftspairs,&riftstips,&riftspenaltypairs,&riftsnumpenaltypairs);
+ 
+-	/*Figure out if we have rifts, and how many: */
+-	IsRiftPresent(&riftflag,&numrifts,segmentmarkers_in,num_seg);
+-	
+-	if(riftflag){	
+-		SplitMeshForRifts(&nel,&index_in,&nods,&x_in,&y_in,&num_seg,&segments_in,&segmentmarkers_in);
+-	}
++	/*Output : */
++	WriteData(INDEXOUT,index,nel,3);
++	WriteData(XOUT,x,nods,1);
++	WriteData(YOUT,y,nods,1);
++	WriteData(SEGMENTSOUT,segments,num_seg,3);
++	WriteData(SEGMENTMARKERSOUT,segmentmarkers,num_seg,1);
+ 
+-	/*Order segments so that their normals point outside the domain: */
+-	OrderSegments(&segments_in,num_seg, index_in,nel);
+-	
+-	if(riftflag){
+-		
+-		/*We do not want to output segments mixed with rift segments: wring out the rifts from the segments, using the 
+-		 *segmentmarkerlist:*/
+-		SplitRiftSegments(&segments_in,&segmentmarkers_in,&num_seg,&out_numrifts,&out_riftsnumsegments,&out_riftssegments,numrifts,nods,nel);
++	mxArray *pmxa_array  = NULL;
++	mxArray *pmxa_array2 = NULL;
++	mxArray *pmxa_array3 = NULL;
++	const char *fnames[10];
++	mwSize      ndim          = 2;
++	mwSize      dimensions[2] = {1,1};
++	double     *pair          = NULL;
+ 
+-		/*Using rift segments, associate rift faces in pairs, each pair face representing opposite flanks of the rifts facing one another directly: */
+-		PairRiftElements(&out_riftsnumpairs,&out_riftspairs,out_numrifts,out_riftsnumsegments,out_riftssegments,x_in,y_in);
+-		
+-		/*Order rifts so that they start from one tip, go to the other tip, and back: */
+-		OrderRifts(&out_riftstips, out_riftssegments,out_riftspairs,numrifts,out_riftsnumsegments,x_in,y_in,nods,nel);
+ 
+-		/*Create penalty pairs, used by Imp: */
+-		PenaltyPairs(&out_riftspenaltypairs,&out_riftsnumpenaltypairs,numrifts,out_riftssegments,out_riftsnumsegments,out_riftspairs,out_riftstips,x_in,y_in);
+-	}
++	/*Create a structure rifts where if i is a rift number, we have the following fields rifts(i).segments and rifts(i).numsegs: */
++	fnames[0] = "numsegs";
++	fnames[1] = "segments";
++	fnames[2] = "pairs";
++	fnames[3] = "tips";
++	fnames[4] = "penaltypairs";
++	fnames[5] = "fill";
++	fnames[6] = "friction";
++	fnames[7] = "fraction";
++	fnames[8] = "fractionincrement";
++	fnames[9] = "state";
+ 
++	dimensions[0]=numrifts;
++	pmxa_array=mxCreateStructArray( ndim,dimensions,10,fnames);
+ 
+-	/*Output : */
+-	WriteData(INDEXOUT,index_in,nel,3);
+-	WriteData(XOUT,x_in,nods,1);
+-	WriteData(YOUT,y_in,nods,1);
+-	WriteData(SEGMENTSOUT,segments_in,num_seg,3);
+-	WriteData(SEGMENTMARKERSOUT,segmentmarkers_in,num_seg,1);
++	for(int i=0;i<numrifts;i++){
+ 
+-	if(riftflag){
+-		/*Create a structure rifts where if i is a rift number, we have the following fields rifts(i).segments and rifts(i).numsegs: */
+-		fnames[0] = "numsegs";
+-		fnames[1] = "segments";
+-		fnames[2] = "pairs";
+-		fnames[3] = "tips";
+-		fnames[4] = "penaltypairs";
+-		fnames[5] = "fill";
+-		fnames[6] = "friction";
+-		fnames[7] = "fraction";
+-		fnames[8] = "fractionincrement";
+-		fnames[9] = "state";
++		/*Segments: */
++		WriteData(&pmxa_array3,riftssegments[i],riftsnumsegments[i],3);
++		mxSetField(pmxa_array,i,"segments",pmxa_array3);
++		mxSetField(pmxa_array,i,"numsegs",mxCreateDoubleScalar((double)riftsnumsegments[i]));
+ 
+-		dimensions[0]=out_numrifts;
+-		pmxa_array=mxCreateStructArray( ndim,dimensions,10,fnames);
+-		
+-		for (i=0;i<out_numrifts;i++){
++		/*Element pairs: */
++		WriteData(&pmxa_array3,riftspairs[i],riftsnumpairs[i],2);
++		mxSetField(pmxa_array,i,"pairs",pmxa_array3);
+ 
+-			/*Segments: */
+-			WriteData(&pmxa_array3,out_riftssegments[i],out_riftsnumsegments[i],3);
+-			mxSetField(pmxa_array,i,"segments",pmxa_array3);
+-			mxSetField(pmxa_array,i,"numsegs",mxCreateDoubleScalar((double)out_riftsnumsegments[i]));
++		/*Tips: */
++		pmxa_array2= mxCreateDoubleMatrix(0,0,mxREAL);
++		mxSetM(pmxa_array2,1);
++		pair=(double*)mxMalloc(2*sizeof(double));
++		pair[0]=*(riftstips+2*i+0);
++		pair[1]=*(riftstips+2*i+1);
++		mxSetN(pmxa_array2,2);
++		mxSetPr(pmxa_array2,pair);
++		mxSetField(pmxa_array,i,"tips",pmxa_array2);
+ 
+-			/*Element pairs: */
+-			WriteData(&pmxa_array3,out_riftspairs[i],out_riftsnumpairs[i],2);
+-			mxSetField(pmxa_array,i,"pairs",pmxa_array3);
++		/*Penalty pairs: */
++		WriteData(&pmxa_array3,riftspenaltypairs[i],riftsnumpenaltypairs[i],7);
++		mxSetField(pmxa_array,i,"penaltypairs",pmxa_array3);
+ 
+-			/*Tips: */
+-			pmxa_array2= mxCreateDoubleMatrix(0,0,mxREAL);
+-			mxSetM(pmxa_array2,1);
+-			pair=(double*)mxMalloc(2*sizeof(double));
+-			pair[0]=*(out_riftstips+2*i+0);
+-			pair[1]=*(out_riftstips+2*i+1);
+-			mxSetN(pmxa_array2,2);
+-			mxSetPr(pmxa_array2,pair);
+-			mxSetField(pmxa_array,i,"tips",pmxa_array2);
++		/*Friction fraction, fractionincrement  and fill: */
++		mxSetField(pmxa_array,i,"friction",mxCreateDoubleScalar(0));
++		mxSetField(pmxa_array,i,"fill",mxCreateDoubleScalar(IceEnum)); //default is ice
++		mxSetField(pmxa_array,i,"fraction",mxCreateDoubleScalar(0)); //default is ice
++		mxSetField(pmxa_array,i,"fractionincrement",mxCreateDoubleScalar(0.1)); 
+ 
+-			/*Penalty pairs: */
+-			WriteData(&pmxa_array3,out_riftspenaltypairs[i],out_riftsnumpenaltypairs[i],7);
+-			mxSetField(pmxa_array,i,"penaltypairs",pmxa_array3);
++		/*State: */
++		double *state=(double*)mxMalloc(riftsnumpenaltypairs[i]*sizeof(double));
++		for(int j=0;j<riftsnumpenaltypairs[i];j++) state[j]=FreeEnum;
++		pmxa_array2= mxCreateDoubleMatrix(0,0,mxREAL);
++		mxSetM(pmxa_array2,1);
++		mxSetN(pmxa_array2,riftsnumpenaltypairs[i]);
++		mxSetPr(pmxa_array2,state);
++		mexCallMATLAB( 1, &pmxa_array3, 1, &pmxa_array2, "transpose");
+ 
+-			/*Friction fraction, fractionincrement  and fill: */
+-			mxSetField(pmxa_array,i,"friction",mxCreateDoubleScalar(0));
+-			mxSetField(pmxa_array,i,"fill",mxCreateDoubleScalar(IceEnum)); //default is ice
+-			mxSetField(pmxa_array,i,"fraction",mxCreateDoubleScalar(0)); //default is ice
+-			mxSetField(pmxa_array,i,"fractionincrement",mxCreateDoubleScalar(0.1)); 
++		mxSetField(pmxa_array,i,"state",pmxa_array3);
++	}
+ 
+-			/*State: */
+-			state=(double*)mxMalloc(out_riftsnumpenaltypairs[i]*sizeof(double));
+-			for(j=0;j<out_riftsnumpenaltypairs[i];j++)state[j]=FreeEnum;
+-			pmxa_array2= mxCreateDoubleMatrix(0,0,mxREAL);
+-			mxSetM(pmxa_array2,1);
+-			mxSetN(pmxa_array2,out_riftsnumpenaltypairs[i]);
+-			mxSetPr(pmxa_array2,state);
+-			mexCallMATLAB( 1, &pmxa_array3, 1, &pmxa_array2, "transpose");
+-			
+-			mxSetField(pmxa_array,i,"state",pmxa_array3);
+-		}
+-	}
+-	else{
+-		/*output NaN :*/
+-		pNaN=(double*)mxMalloc(sizeof(double));
+-		*pNaN=NAN;
+-		pmxa_array= mxCreateDoubleMatrix(0,0,mxREAL);
+-		mxSetM(pmxa_array,1);
+-		mxSetN(pmxa_array,1);
+-		mxSetPr(pmxa_array,pNaN);
+-		
+-	}
+ 	plhs[5]=pmxa_array;
+ 
+ 	/*end module: */
+ 	MODULEEND();
+ }
++void TriMeshProcessRiftsx(double** pindex, int* pnel,double** px,double** py,int* pnods,double** psegments,double** psegmentmarkers,int *pnum_seg,
++			int  *pnumrifts, int  **priftsnumsegments, double ***priftssegments,
++			int  **priftsnumpairs, double ***priftspairs, double **priftstips,
++			double ***priftspenaltypairs, int  **priftsnumpenaltypairs){
++
++	/*Output*/
++	int      numrifts,numrifts0;
++	int     *riftsnumsegments     = NULL;
++	double **riftssegments        = NULL;
++	int     *riftsnumpairs        = NULL;
++	double **riftspairs           = NULL;
++	double  *riftstips            = NULL;
++	double **riftspenaltypairs    = NULL;
++	int     *riftsnumpenaltypairs = NULL;
++
++	/*Recover initial mesh*/
++	int     nel            = *pnel;
++	double *index          = *pindex;
++	double *x              = *px;
++	double *y              = *py;
++	int     nods           = *pnods;
++	double *segments       = *psegments;
++	double *segmentmarkers = *psegmentmarkers;
++	int     num_seg        = *pnum_seg;
++
++	/*Intermediary*/
++	int     riftflag;
++
++	/*First, do some fixing on the existing mesh: we do not want any element belonging entirely to the segment list (ie: 
++	 *all the nodes of this element belong to the segments (tends to happen when there are corners: */
++	RemoveCornersFromRifts(&index,&nel,&x,&y,&nods,segments,segmentmarkers,num_seg);
++
++	/*Figure out if we have rifts, and how many: */
++	IsRiftPresent(&riftflag,&numrifts0,segmentmarkers,num_seg);
++
++	if(!riftflag) _error_("No rift present in mesh");
++
++	/*Split mesh*/
++	SplitMeshForRifts(&nel,&index,&nods,&x,&y,&num_seg,&segments,&segmentmarkers);
++
++	/*Order segments so that their normals point outside the domain: */
++	OrderSegments(&segments,num_seg, index,nel);
++
++	/*We do not want to output segments mixed with rift segments: wring out the rifts from the segments, using the 
++	 *segmentmarkerlist:*/
++	SplitRiftSegments(&segments,&segmentmarkers,&num_seg,&numrifts,&riftsnumsegments,&riftssegments,numrifts0,nods,nel);
++
++	/*Using rift segments, associate rift faces in pairs, each pair face representing opposite flanks of the rifts facing one another directly: */
++	PairRiftElements(&riftsnumpairs,&riftspairs,numrifts,riftsnumsegments,riftssegments,x,y);
++
++	/*Order rifts so that they start from one tip, go to the other tip, and back: */
++	OrderRifts(&riftstips,riftssegments,riftspairs,numrifts,riftsnumsegments,x,y,nods,nel);
++
++	/*Create penalty pairs, used by Imp: */
++	PenaltyPairs(&riftspenaltypairs,&riftsnumpenaltypairs,numrifts,riftssegments,riftsnumsegments,riftspairs,riftstips,x,y);
++
++	/*Assign output pointers for mesh*/
++	*pnel            = nel;
++	*pindex          = index;
++	*px              = x;
++	*py              = y;
++	*pnods           = nods;
++	*psegments       = segments;
++	*psegmentmarkers = segmentmarkers;
++	*pnum_seg        = num_seg;
++
++	/*Assign output pointers for rifts*/
++	*pnumrifts             = numrifts;
++	*priftsnumsegments     = riftsnumsegments;
++	*priftssegments        = riftssegments;
++	*priftsnumpairs        = riftsnumpairs;
++	*priftspairs           = riftspairs;
++	*priftstips            = riftstips;
++	*priftspenaltypairs    = riftspenaltypairs;
++	*priftsnumpenaltypairs = riftsnumpenaltypairs;
++}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13588-13589.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13588-13589.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13588-13589.diff	(revision 13980)
@@ -0,0 +1,355 @@
+Index: ../trunk-jpl/src/c/solutions/PrintBanner.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/PrintBanner.cpp	(revision 13588)
++++ ../trunk-jpl/src/c/solutions/PrintBanner.cpp	(revision 13589)
+@@ -1,15 +0,0 @@
+-/*!\file: PrintBanner.cpp
+- * \brief: print banner information on ISSM
+- */ 
+-
+-#include "../include/include.h"
+-#include "../shared/shared.h"
+-
+-void PrintBanner(void){
+-
+-	_pprintLine_("");
+-	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
+-	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
+-	_pprintLine_("");
+-}
+-
+Index: ../trunk-jpl/src/c/solutions/solutions.h
+===================================================================
+--- ../trunk-jpl/src/c/solutions/solutions.h	(revision 13588)
++++ ../trunk-jpl/src/c/solutions/solutions.h	(revision 13589)
+@@ -7,6 +7,7 @@
+ 
+ #include "../classes/objects/objects.h"
+ #include "../io/io.h"
++#include "../toolkits/toolkits.h"
+ 
+ struct OptArgs;
+ class FemModel;
+@@ -46,7 +47,7 @@
+ void WriteLockFile(char* filename);
+ void controlrestart(FemModel* femmodel,IssmDouble* J);
+ void ResetBoundaryConditions(FemModel* femmodel, int analysis_type);
+-void EnvironmentInit(int argc,char** argv);
++COMM EnvironmentInit(int argc,char** argv);
+ void EnvironmentFinalize(void);
+ int  DakotaSpawnCore(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, void* femmodel,int counter);
+ void PrintBanner(void);
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13588)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13589)
+@@ -6,17 +6,20 @@
+ 	
+ int main(int argc,char **argv){
+ 
+-	/*Print starting banner:*/
+-	PrintBanner();
++	COMM comm_init;
+ 
+ 	/*Initialize exception trapping: */
+ 	ExceptionTrapBegin();
+ 
+ 	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+-	EnvironmentInit(argc,argv);
+-		
++	comm_init=EnvironmentInit(argc,argv);
++
++	/*Hack for now: */
++	MPI_Comm_rank(comm_init,&my_rank);
++	MPI_Comm_size(comm_init,&num_procs);
++
+ 	/*Initialize femmodel from arguments provided command line: */
+-	FemModel *femmodel = new FemModel(argc,argv);
++	FemModel *femmodel = new FemModel(argc,argv,comm_init);
+ 
+ 	/*Solve: */
+ 	femmodel->Solve();
+Index: ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13588)
++++ ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13589)
+@@ -9,24 +9,21 @@
+ #include "../include/include.h"
+ #include "../toolkits/toolkits.h"
+ 
+-void EnvironmentInit(int argc,char** argv){
+-	
+-	extern int my_rank;
+-	extern int num_procs;
++COMM EnvironmentInit(int argc,char** argv){
+ 
+ 	/*Initialize environments: Petsc, MPI, etc...: */
+ 	#ifdef _HAVE_PETSC_
+ 	int ierr=PetscInitialize(&argc,&argv,(char*)0,"");  
+ 	if(ierr) _error_("Could not initialize Petsc");
++	return MPI_COMM_WORLD;
+ 	#else
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Init(&argc,&argv);
++	return MPI_COMM_WORLD;
++	#else
++	return 1; //return bogus number for comm, which does not exist anyway.
+ 	#endif
+ 	#endif
+ 	
+-	/*Size and rank: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);  
+-	MPI_Comm_size(MPI_COMM_WORLD,&num_procs); 
+-	#endif
++
+ }
+Index: ../trunk-jpl/src/c/include/globals.h
+===================================================================
+--- ../trunk-jpl/src/c/include/globals.h	(revision 13588)
++++ ../trunk-jpl/src/c/include/globals.h	(revision 13589)
+@@ -5,6 +5,11 @@
+ #ifndef GLOBALS_H_
+ #define GLOBALS_H_
+ 
++
++#include "./types.h"
++#include "../classes/IssmComm.h"
++COMM IssmComm::comm;
++
+ int my_rank=0;
+ int num_procs=1;
+ 
+Index: ../trunk-jpl/src/c/include/types.h
+===================================================================
+--- ../trunk-jpl/src/c/include/types.h	(revision 13588)
++++ ../trunk-jpl/src/c/include/types.h	(revision 13589)
+@@ -39,4 +39,12 @@
+ typedef IssmDouble IssmPDouble;
+ #endif
+ 
++/*Define communicator: */
++#ifdef _HAVE_MPI_
++#include "mpi.h"
++typedef MPI_Comm COMM;
++#else
++typedef int COMM;
++#endif
++
+ #endif //ifndef _TYPES_H_
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13588)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13589)
+@@ -67,6 +67,8 @@
+ 					./classes/objects/Vertex.h\
+ 					./classes/objects/Vertex.cpp\
+ 					./classes/objects/AdolcEdf.h\
++					./classes/IssmComm.h\
++					./classes/IssmComm.cpp\
+ 					./classes/Hook.h\
+ 					./classes/Hook.cpp\
+ 					./classes/Patch.h\
+@@ -342,7 +344,6 @@
+ 					./modules/InputToResultx/InputToResultx.h\
+ 					./modules/InputConvergencex/InputConvergencex.cpp\
+ 					./modules/InputConvergencex/InputConvergencex.h\
+-					./solutions/PrintBanner.cpp\
+ 					./solutions/convergence.cpp\
+ 					./solutions/ProcessArguments.cpp\
+ 					./solutions/ResetBoundaryConditions.cpp\
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 13588)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 13589)
+@@ -30,5 +30,6 @@
+ #include "./OptArgs.h"
+ #include "./OptPars.h"
+ #include "./AdolcEdf.h"
++#include "./IssmComm.h"
+ 
+ #endif
+Index: ../trunk-jpl/src/c/classes/IssmComm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IssmComm.cpp	(revision 0)
++++ ../trunk-jpl/src/c/classes/IssmComm.cpp	(revision 13589)
+@@ -0,0 +1,38 @@
++/*! \file IssmComm.cpp
++ * \brief  file containing the methods for IssmComm.h
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./IssmComm.h"
++
++void IssmComm::SetComm(COMM incomm){ /*{{{*/
++	comm=incomm;
++}/*}}}*/
++COMM IssmComm::GetComm(){  /*{{{*/
++	return comm;
++}/*}}}*/
++int IssmComm::GetRank(){  /*{{{*/
++	int my_rank;
++	#ifdef _HAVE_MPI_
++	MPI_Comm_rank(comm,&my_rank);
++	#else
++	my_rank=0;
++	#endif
++	return my_rank;
++
++}/*}}}*/
++int IssmComm::GetSize(){  /*{{{*/
++	int size;
++	#ifdef _HAVE_MPI_
++	MPI_Comm_size(comm,&size);
++	#else
++	size=1;
++	#endif
++	return size;
++
++}/*}}}*/
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13588)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13589)
+@@ -1339,17 +1339,17 @@
+ 			}
+ 		}
+ 	}
+-#ifdef _HAVE_MPI_
++	#ifdef _HAVE_MPI_
+ 	MPI_Bcast(&found,1,MPI_INT,0,MPI_COMM_WORLD); 
+ 	if(!found)_error_("could not find data with name " << EnumToStringx(data_enum) << " in binary file");
+-#endif
++	#endif
+ 
+ 	/*Broadcast code and vector type: */
+-#ifdef _HAVE_MPI_
++	#ifdef _HAVE_MPI_
+ 	MPI_Bcast(&record_code,1,MPI_INT,0,MPI_COMM_WORLD); 
+ 	MPI_Bcast(&vector_type,1,MPI_INT,0,MPI_COMM_WORLD); 
+ 	if(record_code==5) MPI_Bcast(&vector_type,1,MPI_INT,0,MPI_COMM_WORLD); 
+-#endif
++	#endif
+ 
+ 	/*Assign output pointers:*/
+ 	*pcode=record_code;
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13588)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13589)
+@@ -20,7 +20,7 @@
+ 
+ /*Object constructors and destructor*/
+ /*FUNCTION FemModel::FemModel(int argc,char** argv){{{*/
+-FemModel::FemModel(int argc,char** argv){
++FemModel::FemModel(int argc,char** argv,COMM incomm){
+ 
+ 	/*configuration: */
+ 	int* analyses=NULL;
+@@ -34,6 +34,13 @@
+ 	char *petscfilename  = NULL;
+ 	char *rootpath       = NULL;
+ 
++	/*First things first, store the communicator, and set it as a global variable: */
++	this->comm=incomm;
++	this->SetStaticComm();
++
++	/*Print starting banner:*/
++	this->PrintBanner();
++
+ 	/*Start profiler: */
+ 	this->profiler=new Profiler();
+ 	profiler->Tag(Start);
+@@ -263,7 +270,26 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION FemModel::SetStaticComm {{{*/
++void FemModel::SetStaticComm(void){
+ 
++	/*This routine sets the global communicator variable hidden inside the IssmComm 
++	 *class: */
++	IssmComm::SetComm(this->comm);
++
++}
++/*}}}*/
++/*FUNCTION FemModel::PrintBanner {{{*/
++void FemModel::PrintBanner(void){
++
++	_pprintLine_("");
++	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
++	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
++	_pprintLine_("");
++
++}
++/*}}}*/
++
+ /*Numerics: */
+ /*FUNCTION FemModel::SetCurrentConfiguration(int configuration_type,int analysis_type){{{*/
+ void FemModel::SetCurrentConfiguration(int configuration_type,int analysis_type){
+Index: ../trunk-jpl/src/c/classes/IssmComm.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IssmComm.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/IssmComm.h	(revision 13589)
+@@ -0,0 +1,31 @@
++/* \file IssmComm.h
++ * \brief  create a class with a static comm, and static methods to access it
++ * This is a way of protecting access to the communicator.
++ */
++
++#ifndef _ISSM_COMM_H
++#define _ISSM_COMM_H
++
++/*{{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "../include/types.h"
++/*}}}*/
++
++class IssmComm {
++
++	private:
++		static COMM comm;
++
++	public:
++		static void SetComm(COMM incomm);
++		static COMM GetComm();
++		static int GetRank();
++		static int GetSize();
++};
++
++#endif  /* _ISSM_COMM_H */
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13588)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13589)
+@@ -43,9 +43,10 @@
+ 		Materials   *materials;            //one set of materials, for each element
+ 		Parameters  *parameters;           //one set of parameters, independent of the analysis_type
+ 		Results     *results;              //results that cannot be fit into the elements 
++		COMM        comm;                  //communicator for this particular model
+ 
+ 		/*constructors, destructors: */
+-		FemModel(int argc,char** argv);
++		FemModel(int argc,char** argv,COMM comm_init);
+ 		FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
+ 		~FemModel();
+ 		void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
+@@ -54,6 +55,8 @@
+ 		void Echo();
+ 		void Solve(void);
+ 		void OutputResults(void);
++		void SetStaticComm();
++		void PrintBanner(void);
+ 
+ 		/*Fem: */
+ 		void  SetCurrentConfiguration(int configuration_type);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13589-13590.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13589-13590.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13589-13590.diff	(revision 13980)
@@ -0,0 +1,706 @@
+Index: ../trunk-jpl/src/c/modules/ThicknessAbsGradientx/ThicknessAbsGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAbsGradientx/ThicknessAbsGradientx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/ThicknessAbsGradientx/ThicknessAbsGradientx.cpp	(revision 13590)
+@@ -27,8 +27,8 @@
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp	(revision 13590)
+@@ -32,8 +32,8 @@
+ 
+ 	/*Figure out minimum across the cluster: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&minvz,&node_minvz,1,MPI_DOUBLE,MPI_MIN,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&node_minvz,1,MPI_DOUBLE,0,MPI_COMM_WORLD);   
++	MPI_Reduce (&minvz,&node_minvz,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_minvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	minvz=node_minvz;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.cpp	(revision 13590)
+@@ -32,8 +32,8 @@
+ 
+ 	/*Figure out minimum across the cluster: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxvx,&node_maxvx,1,MPI_DOUBLE,MPI_MAX,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&node_maxvx,1,MPI_DOUBLE,0,MPI_COMM_WORLD);   
++	MPI_Reduce (&maxvx,&node_maxvx,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxvx=node_maxvx;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.cpp	(revision 13590)
+@@ -32,8 +32,8 @@
+ 
+ 	/*Figure out minimum across the cluster: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&min_dt,&node_min_dt,1,MPI_DOUBLE,MPI_MIN,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&node_min_dt,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce (&min_dt,&node_min_dt,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_min_dt,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	min_dt=node_min_dt;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 13590)
+@@ -156,7 +156,7 @@
+ 		vec_nodes_on_floatingice->Assemble();
+ 		
+ 		#ifdef _HAVE_MPI_
+-		MPI_Allreduce(&local_nflipped,&nflipped,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD);
++		MPI_Allreduce(&local_nflipped,&nflipped,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+ 		if(VerboseConvergence()) _pprintLine_("   Additional number of vertices allowed to unground: " << nflipped);
+ 		#else
+ 		nflipped=local_nflipped;
+Index: ../trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp	(revision 13590)
+@@ -19,8 +19,8 @@
+ 		local_ice_volume+=element->IceVolume();
+ 	}
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce(&local_ice_volume,&total_ice_volume,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&total_ice_volume,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce(&local_ice_volume,&total_ice_volume,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&total_ice_volume,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	#else
+ 	total_ice_volume=local_ice_volume;
+ 	#endif
+Index: ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.cpp	(revision 13590)
+@@ -32,8 +32,8 @@
+ 
+ 	/*Figure out maximum across the cluster: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxabsvx,&node_maxabsvx,1,MPI_DOUBLE,MPI_MAX,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&node_maxabsvx,1,MPI_DOUBLE,0,MPI_COMM_WORLD);   
++	MPI_Reduce (&maxabsvx,&node_maxabsvx,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxabsvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxabsvx=node_maxabsvx;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp	(revision 13590)
+@@ -33,8 +33,8 @@
+ 
+ 	/*Figure out minimum across the cluster: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&minvel,&node_minvel,1,MPI_DOUBLE,MPI_MIN,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&node_minvel,1,MPI_DOUBLE,0,MPI_COMM_WORLD);   
++	MPI_Reduce (&minvel,&node_minvel,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_minvel,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	minvel=node_minvel;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.cpp	(revision 13590)
+@@ -33,8 +33,8 @@
+ 
+ 	/*Figure out maximum across the cluster: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxvel,&node_maxvel,1,MPI_DOUBLE,MPI_MAX,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&node_maxvel,1,MPI_DOUBLE,0,MPI_COMM_WORLD);   
++	MPI_Reduce (&maxvel,&node_maxvel,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxvel,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxvel=node_maxvel;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.cpp	(revision 13590)
+@@ -32,8 +32,8 @@
+ 
+ 	/*Figure out minimum across the cluster: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxvy,&node_maxvy,1,MPI_DOUBLE,MPI_MAX,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&node_maxvy,1,MPI_DOUBLE,0,MPI_COMM_WORLD);   
++	MPI_Reduce (&maxvy,&node_maxvy,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxvy=node_maxvy;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 13590)
+@@ -31,8 +31,8 @@
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13590)
+@@ -37,7 +37,7 @@
+ 
+ 	/*Broadcast whether we found the element: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( &found,&sumfound,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD);
++	MPI_Allreduce ( &found,&sumfound,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+ 	if(!sumfound)_error_("could not find material with id" << index << " to compute ElementResponse");
+ 	#endif
+ 
+@@ -48,8 +48,8 @@
+ 
+ 	/*Broadcast and plug into response: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( &cpu_found,&cpu_found,1,MPI_INT,MPI_MAX,MPI_COMM_WORLD);
+-	MPI_Bcast(&response,1,MPI_DOUBLE,cpu_found,MPI_COMM_WORLD); 
++	MPI_Allreduce ( &cpu_found,&cpu_found,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
++	MPI_Bcast(&response,1,MPI_DOUBLE,cpu_found,IssmComm::GetComm()); 
+ 	#endif
+ 
+ 	*presponse=response;
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 13590)
+@@ -67,19 +67,19 @@
+ 			}
+ 
+ 			#ifdef _DEBUG_
+-				PetscSynchronizedPrintf(MPI_COMM_WORLD,"Parameter matrix:");
+-				PetscSynchronizedFlush(MPI_COMM_WORLD);
++				PetscSynchronizedPrintf(IssmComm::GetComm(),"Parameter matrix:");
++				PetscSynchronizedFlush(IssmComm::GetComm());
+ 				for(l=0;l<ncols;l++){
+-					PetscSynchronizedPrintf(MPI_COMM_WORLD," time %i\n",l);
+-					PetscSynchronizedFlush(MPI_COMM_WORLD);
++					PetscSynchronizedPrintf(IssmComm::GetComm()," time %i\n",l);
++					PetscSynchronizedFlush(IssmComm::GetComm());
+ 
+ 					for(k=0;k<numberofvertices;k++){
+-						PetscSynchronizedPrintf(MPI_COMM_WORLD," node %i value %g\n",k+1,*(parameter+k*ncols+l));
+-						PetscSynchronizedFlush(MPI_COMM_WORLD);
++						PetscSynchronizedPrintf(IssmComm::GetComm()," node %i value %g\n",k+1,*(parameter+k*ncols+l));
++						PetscSynchronizedFlush(IssmComm::GetComm());
+ 					}
+ 				}
+-				PetscSynchronizedPrintf(MPI_COMM_WORLD," descriptor: %s root %s enum: %i\n",descriptor,root,StringToEnumx(root));
+-				PetscSynchronizedFlush(MPI_COMM_WORLD);
++				PetscSynchronizedPrintf(IssmComm::GetComm()," descriptor: %s root %s enum: %i\n",descriptor,root,StringToEnumx(root));
++				PetscSynchronizedFlush(IssmComm::GetComm());
+ 			#endif
+ 			  
+ 
+Index: ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 13590)
+@@ -28,8 +28,8 @@
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+ 	#ifdef _HAVE_MPI_
+- 	MPI_Reduce (&S,&S_sum,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&S_sum,1,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++ 	MPI_Reduce (&S,&S_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&S_sum,1,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 	S=S_sum;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 13590)
+@@ -63,8 +63,8 @@
+ #ifdef _HAVE_MPI_
+ 		double *sumpredictions =xNew<double>(n_interp);
+ 		double *sumerror       =xNew<double>(n_interp);
+-		MPI_Allreduce(predictions,sumpredictions,n_interp,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD);
+-		MPI_Allreduce(error,sumerror,n_interp,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD);
++		MPI_Allreduce(predictions,sumpredictions,n_interp,MPI_DOUBLE,MPI_SUM,IssmComm::GetComm());
++		MPI_Allreduce(error,sumerror,n_interp,MPI_DOUBLE,MPI_SUM,IssmComm::GetComm());
+ 		xDelete<double>(error); error=sumerror;
+ 		xDelete<double>(predictions); predictions=sumpredictions;
+ #endif
+@@ -80,7 +80,7 @@
+ 
+ #ifdef _HAVE_MPI_
+ 		double *sumpredictions =xNew<double>(n_interp);
+-		MPI_Allreduce(predictions,sumpredictions,n_interp,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD);
++		MPI_Allreduce(predictions,sumpredictions,n_interp,MPI_DOUBLE,MPI_SUM,IssmComm::GetComm());
+ 		xDelete<double>(predictions); predictions=sumpredictions;
+ #endif
+ 	}
+@@ -97,7 +97,7 @@
+ 
+ #ifdef _HAVE_MPI_
+ 		double *sumpredictions =xNew<double>(n_interp);
+-		MPI_Allreduce(predictions,sumpredictions,n_interp,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD);
++		MPI_Allreduce(predictions,sumpredictions,n_interp,MPI_DOUBLE,MPI_SUM,IssmComm::GetComm());
+ 		xDelete<double>(predictions); predictions=sumpredictions;
+ #endif
+ 	}
+Index: ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.cpp	(revision 13590)
+@@ -33,8 +33,8 @@
+ 
+ 	/*Figure out maximum across the cluster: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxabsvy,&node_maxabsvy,1,MPI_DOUBLE,MPI_MAX,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&node_maxabsvy,1,MPI_DOUBLE,0,MPI_COMM_WORLD);   
++	MPI_Reduce (&maxabsvy,&node_maxabsvy,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxabsvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxabsvy=node_maxabsvy;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 13590)
+@@ -36,14 +36,14 @@
+ 
+ 	/*Broadcast whether we found the element: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( &found,&sumfound,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD);
++	MPI_Allreduce ( &found,&sumfound,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+ 	if(!sumfound)_error_("could not find element with vertex with id" << index << " to compute nodal value " << EnumToStringx(natureofdataenum));
+ 	#endif
+ 
+ 	/*Broadcast and plug into response: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( &cpu_found,&cpu_found,1,MPI_INT,MPI_MAX,MPI_COMM_WORLD);
+-	MPI_Bcast(&value,1,MPI_DOUBLE,cpu_found,MPI_COMM_WORLD); 
++	MPI_Allreduce ( &cpu_found,&cpu_found,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
++	MPI_Bcast(&value,1,MPI_DOUBLE,cpu_found,IssmComm::GetComm()); 
+ 	#else
+ 	value=cpu_found;
+ 	#endif
+Index: ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp	(revision 13590)
+@@ -27,8 +27,8 @@
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp	(revision 13590)
+@@ -27,8 +27,8 @@
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp	(revision 13590)
+@@ -32,8 +32,8 @@
+ 
+ 	/*Figure out minimum across the cluster: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&minvx,&node_minvx,1,MPI_DOUBLE,MPI_MIN,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&node_minvx,1,MPI_DOUBLE,0,MPI_COMM_WORLD);   
++	MPI_Reduce (&minvx,&node_minvx,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_minvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	minvx=node_minvx;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 13590)
+@@ -27,8 +27,8 @@
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.cpp	(revision 13590)
+@@ -33,8 +33,8 @@
+ 
+ 	/*Figure out minimum across the cluster: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxvz,&node_maxvz,1,MPI_DOUBLE,MPI_MAX,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&node_maxvz,1,MPI_DOUBLE,0,MPI_COMM_WORLD);   
++	MPI_Reduce (&maxvz,&node_maxvz,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxvz=node_maxvz;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalConstraintsState.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalConstraintsState.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalConstraintsState.cpp	(revision 13590)
+@@ -36,8 +36,8 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,MPI_COMM_WORLD);                
++	MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,IssmComm::GetComm());                
+ 	num_unstable_constraints=sum_num_unstable_constraints;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp	(revision 13590)
+@@ -28,8 +28,8 @@
+ 	}
+ 	
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&mpi_found,1,MPI_INT,0,MPI_COMM_WORLD);                
++	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&mpi_found,1,MPI_INT,0,IssmComm::GetComm());                
+ 	found=mpi_found;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 13590)
+@@ -32,8 +32,8 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&mpi_found,1,MPI_INT,0,MPI_COMM_WORLD);                
++	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&mpi_found,1,MPI_INT,0,IssmComm::GetComm());                
+ 	found=mpi_found;
+ 	#endif
+ 
+@@ -95,8 +95,8 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,MPI_COMM_WORLD);                
++	MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,IssmComm::GetComm());                
+ 	num_unstable_constraints=sum_num_unstable_constraints;
+ 	#endif
+ 	
+@@ -135,8 +135,8 @@
+ 	
+ 	/*Is there just one found? that would mean we have frozen! : */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_MAX,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&mpi_found,1,MPI_INT,0,MPI_COMM_WORLD);                
++	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&mpi_found,1,MPI_INT,0,IssmComm::GetComm());                
+ 	found=mpi_found;
+ 	#endif
+ 
+@@ -195,8 +195,8 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&mpi_found,1,MPI_INT,0,MPI_COMM_WORLD);                
++	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&mpi_found,1,MPI_INT,0,IssmComm::GetComm());                
+ 	found=mpi_found;
+ 	#endif
+ 
+@@ -228,8 +228,8 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&mpi_found,1,MPI_INT,0,MPI_COMM_WORLD);                
++	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&mpi_found,1,MPI_INT,0,IssmComm::GetComm());                
+ 	found=mpi_found;
+ 	#endif
+ 
+@@ -289,8 +289,8 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,MPI_COMM_WORLD);                
++	MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,IssmComm::GetComm());                
+ 	num_unstable_constraints=sum_num_unstable_constraints;
+ 	#endif
+ 	
+@@ -329,8 +329,8 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&max_penetration,&mpi_max_penetration,1,MPI_DOUBLE,MPI_MAX,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&mpi_max_penetration,1,MPI_DOUBLE,0,MPI_COMM_WORLD);                
++	MPI_Reduce (&max_penetration,&mpi_max_penetration,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&mpi_max_penetration,1,MPI_DOUBLE,0,IssmComm::GetComm());                
+ 	max_penetration=mpi_max_penetration;
+ 	#endif
+ 
+@@ -368,8 +368,8 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,MPI_COMM_WORLD);                
++	MPI_Reduce (&num_unstable_constraints,&sum_num_unstable_constraints,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,IssmComm::GetComm());                
+ 	num_unstable_constraints=sum_num_unstable_constraints;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp	(revision 13590)
+@@ -101,7 +101,7 @@
+ 	}
+ 
+ 	/*Prepare solver*/
+-	KSPCreate(MPI_COMM_WORLD,&ksp);
++	KSPCreate(IssmComm::GetComm(),&ksp);
+ 	KSPSetOperators(ksp,Kff,Kff,DIFFERENT_NONZERO_PATTERN);
+ 	KSPSetFromOptions(ksp);
+ 
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 13590)
+@@ -27,8 +27,8 @@
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.cpp	(revision 13590)
+@@ -30,7 +30,7 @@
+ 
+ 	/*In parallel, we need to gather the converged status: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)&num_notconverged,(void*)&total_notconverged,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD);
++	MPI_Allreduce ( (void*)&num_notconverged,(void*)&total_notconverged,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+ 	num_notconverged=total_notconverged;
+ 	#endif
+ 	if(VerboseConvergence()) _pprintLine_("      #elements above convergence criterion = " << num_notconverged);
+Index: ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 13590)
+@@ -27,8 +27,8 @@
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp	(revision 13590)
+@@ -95,12 +95,12 @@
+ 
+ 	/*Ok, broadcast to other cpus: */
+  	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&numanalyses,1,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Bcast(&numanalyses,1,MPI_INT,0,IssmComm::GetComm());
+ 	if(my_rank!=0){
+ 		analyses=xNew<IssmPDouble>(numanalyses);
+ 		strings=xNew<char*>(numanalyses);
+ 	}
+-	MPI_Bcast(analyses,numanalyses,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Bcast(analyses,numanalyses,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	#endif
+ 	for(i=0;i<numanalyses;i++){
+ 		char* string=strings[i];
+@@ -109,9 +109,9 @@
+ 		}
+ 		if(my_rank==0)stringlength=(strlen(string)+1)*sizeof(char);
+ 		#ifdef _HAVE_MPI_
+-		MPI_Bcast(&stringlength,1,MPI_INT,0,MPI_COMM_WORLD);
++		MPI_Bcast(&stringlength,1,MPI_INT,0,IssmComm::GetComm());
+ 		if(my_rank!=0)string=xNew<char>(stringlength);
+-		MPI_Bcast(string,stringlength,MPI_CHAR,0,MPI_COMM_WORLD);
++		MPI_Bcast(string,stringlength,MPI_CHAR,0,IssmComm::GetComm());
+ 		if(my_rank!=0)strings[i]=string;
+ 		#endif
+ 	}
+Index: ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.cpp	(revision 13590)
+@@ -32,8 +32,8 @@
+ 
+ 	/*Figure out minimum across the cluster: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxabsvz,&node_maxabsvz,1,MPI_DOUBLE,MPI_MAX,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&node_maxabsvz,1,MPI_DOUBLE,0,MPI_COMM_WORLD);   
++	MPI_Reduce (&maxabsvz,&node_maxabsvz,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxabsvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	maxabsvz=node_maxabsvz;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 13590)
+@@ -27,8 +27,8 @@
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp	(revision 13590)
+@@ -59,7 +59,7 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)&mass_flux,(void*)&all_mass_flux,1,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD);
++	MPI_Allreduce ( (void*)&mass_flux,(void*)&all_mass_flux,1,MPI_DOUBLE,MPI_SUM,IssmComm::GetComm());
+ 	mass_flux=all_mass_flux;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp	(revision 13590)
+@@ -32,8 +32,8 @@
+ 
+ 	/*Figure out minimum across the cluster: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&minvy,&node_minvy,1,MPI_DOUBLE,MPI_MIN,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&node_minvy,1,MPI_DOUBLE,0,MPI_COMM_WORLD);   
++	MPI_Reduce (&minvy,&node_minvy,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_minvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+ 	minvy=node_minvy;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 13590)
+@@ -27,8 +27,8 @@
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 13590)
+@@ -27,8 +27,8 @@
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp	(revision 13590)
+@@ -27,8 +27,8 @@
+ 
+ 	/*Sum all J from all cpus of the cluster:*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	J=J_sum;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp	(revision 13589)
++++ ../trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp	(revision 13590)
+@@ -19,8 +19,8 @@
+ 		local_smb+=element->TotalSmb();
+ 	}
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce(&local_smb,&total_smb,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&total_smb,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Reduce(&local_smb,&total_smb,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&total_smb,1,MPI_DOUBLE,0,IssmComm::GetComm());
+ 	#else
+ 	total_smb=local_smb;
+ 	#endif
Index: /issm/oecreview/Archive/13393-13976/ISSM-13590-13591.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13590-13591.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13590-13591.diff	(revision 13980)
@@ -0,0 +1,65 @@
+Index: ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13590)
++++ ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13591)
+@@ -59,7 +59,7 @@
+ 
+ 	/*If counter==-1 on cpu0, it means that the dakota runs are done. In which case, bail out and return 0: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&counter,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&counter,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	#endif
+ 	if(counter==-1)return 0;
+ 
+@@ -123,11 +123,11 @@
+ 	numresponses=*pnumresponses;
+ 
+ 	/*numvariables: */
+-	MPI_Bcast(&numvariables,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&numvariables,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	
+ 	/*variables:*/
+ 	if(my_rank!=0)variables=xNew<double>(numvariables);
+-	MPI_Bcast(variables,numvariables,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++	MPI_Bcast(variables,numvariables,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 
+ 	/*variables_descriptors: */
+ 	if(my_rank!=0){
+@@ -138,14 +138,14 @@
+ 			string=variables_descriptors[i];
+ 			string_length=(strlen(string)+1)*sizeof(char);
+ 		}
+-		MPI_Bcast(&string_length,1,MPI_INT,0,MPI_COMM_WORLD); 
++		MPI_Bcast(&string_length,1,MPI_INT,0,IssmComm::GetComm()); 
+ 		if(my_rank!=0)string=xNew<char>(string_length);
+-		MPI_Bcast(string,string_length,MPI_CHAR,0,MPI_COMM_WORLD); 
++		MPI_Bcast(string,string_length,MPI_CHAR,0,IssmComm::GetComm()); 
+ 		if(my_rank!=0)variables_descriptors[i]=string;
+ 	}
+ 
+ 	/*numresponses: */
+-	MPI_Bcast(&numresponses,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&numresponses,1,MPI_INT,0,IssmComm::GetComm()); 
+ 
+ 	/*Assign output pointers:*/
+ 	*pnumvariables=numvariables;
+Index: ../trunk-jpl/src/c/modules/Solverx/DofTypesToIndexSet.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/DofTypesToIndexSet.cpp	(revision 13590)
++++ ../trunk-jpl/src/c/modules/Solverx/DofTypesToIndexSet.cpp	(revision 13591)
+@@ -64,11 +64,11 @@
+ 		
+ 		/*Create indices sets: */
+ 		#if _PETSC_MAJOR_ < 3 || (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 2)
+-		ISCreateGeneral(PETSC_COMM_WORLD,pressure_num,pressure_indices,&isp);
+-		ISCreateGeneral(PETSC_COMM_WORLD,velocity_num,velocity_indices,&isv);
++		ISCreateGeneral(IssmComm::GetComm(),pressure_num,pressure_indices,&isp);
++		ISCreateGeneral(IssmComm::GetComm(),velocity_num,velocity_indices,&isv);
+ 		#else
+-		ISCreateGeneral(PETSC_COMM_WORLD,pressure_num,pressure_indices,PETSC_COPY_VALUES,&isp);
+-		ISCreateGeneral(PETSC_COMM_WORLD,velocity_num,velocity_indices,PETSC_COPY_VALUES,&isv);
++		ISCreateGeneral(IssmComm::GetComm(),pressure_num,pressure_indices,PETSC_COPY_VALUES,&isp);
++		ISCreateGeneral(IssmComm::GetComm(),velocity_num,velocity_indices,PETSC_COPY_VALUES,&isv);
+ 		#endif
+ 	}
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13591-13592.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13591-13592.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13591-13592.diff	(revision 13980)
@@ -0,0 +1,264 @@
+Index: ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13591)
++++ ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13592)
+@@ -12,7 +12,7 @@
+ void ElementResponsex( IssmDouble* presponse, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,int response_enum,bool process_units){
+ 	
+ 
+-	extern int my_rank;
++	int my_rank2;
+ 	int i;
+ 
+ 	int found=0;
+@@ -24,13 +24,14 @@
+ 
+ 	/*retrieve element we are interested in: */
+ 	parameters->FindParam(&index,IndexEnum);
++	my_rank2=IssmComm::GetRank();
+ 
+ 	/*now, go through our elements, and retrieve the one with this id: index: */
+ 	for(i=0;i<elements->Size();i++){
+ 		element=(Element*)elements->GetObjectByOffset(i);
+ 		if (element->Id()==index){
+ 			found=1;
+-			cpu_found=my_rank;
++			cpu_found=my_rank2;
+ 			break;
+ 		}
+ 	}
+@@ -42,7 +43,7 @@
+ 	#endif
+ 
+ 	/*Ok, we found the element, compute responseocity: */
+-	if(my_rank==cpu_found){
++	if(my_rank2==cpu_found){
+ 		element->ElementResponse(&response,response_enum,IuToExtEnum);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 13591)
++++ ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 13592)
+@@ -14,7 +14,7 @@
+ int pKrigingx(double** ppredictions,double **perror,double* obs_x, double* obs_y, double* obs_list, int obs_length,double* x_interp,double* y_interp,int n_interp,Options* options){
+ 
+ 	extern int num_procs;
+-	extern int my_rank;
++	int my_rank2;
+ 
+ 	/*output*/
+ 	double *predictions = NULL;
+@@ -27,6 +27,9 @@
+ 	Variogram    *variogram    = NULL;
+ 	Observations *observations = NULL;
+ 
++	/*Get my_rank2: */
++	my_rank2=IssmComm::GetRank();
++
+ 	/*Get some Options*/
+ 	options->Get(&radius,"searchradius",0.);
+ 	options->Get(&mindata,"mindata",1);
+@@ -54,7 +57,7 @@
+ 		ProcessVariogram(&variogram,options);
+ 
+ 		/*partition loop across threads: */
+-		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
++		for(int idx=my_rank2;idx<n_interp;idx+=num_procs){
+ 			_pprintLine_("      interpolation progress: "<<setw(6)<<setprecision(2)<<double(idx)/double(n_interp)*100<<"%");
+ 			observations->InterpolationKriging(&predictions[idx],&error[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata,variogram);
+ 		}
+@@ -72,7 +75,7 @@
+ 	else if(strcmp(output,"nearestneighbor")==0){
+ 
+ 		/*partition loop across threads: */
+-		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
++		for(int idx=my_rank2;idx<n_interp;idx+=num_procs){
+ 			_pprintLine_("      interpolation progress: "<<setw(6)<<setprecision(2)<<double(idx)/double(n_interp)*100<<"%");
+ 			observations->InterpolationNearestNeighbor(&predictions[idx],x_interp[idx],y_interp[idx],radius);
+ 		}
+@@ -89,7 +92,7 @@
+ 		options->Get(&power,"power",2.);
+ 
+ 		/*partition loop across threads: */
+-		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
++		for(int idx=my_rank2;idx<n_interp;idx+=num_procs){
+ 			_pprintLine_("      interpolation progress: "<<setw(6)<<setprecision(2)<<double(idx)/double(n_interp)*100<<"%");
+ 			observations->InterpolationIDW(&predictions[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata,power);
+ 		}
+Index: ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 13591)
++++ ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 13592)
+@@ -11,7 +11,7 @@
+ 
+ void NodalValuex( IssmDouble* pnodalvalue, int natureofdataenum,Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units){
+ 
+-	extern int my_rank;
++	int my_rank2;
+ 	int i;
+ 	int index;
+ 	Element* element=NULL;
+@@ -20,6 +20,9 @@
+ 	int sumfound;
+ 	int cpu_found;
+ 
++	/*Get my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++
+ 	/*retrieve element we are interested in: */
+ 	parameters->FindParam(&index,IndexEnum);
+ 
+@@ -29,7 +32,7 @@
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		found=element->NodalValue(&value,index,natureofdataenum,process_units);
+ 		if (found){
+-			cpu_found=my_rank;
++			cpu_found=my_rank2;
+ 			break;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 13591)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 13592)
+@@ -21,7 +21,7 @@
+ 
+ 	int i;
+ 
+-	extern int my_rank;
++	int my_rank2;
+ 	extern int num_procs;
+ 	int    numberofelements;
+ 	int    numberofvertices;
+@@ -46,6 +46,9 @@
+ 	IssmDouble* riftinfo=NULL;
+ 	IssmDouble* vertex_pairing=NULL;
+ 
++	/*Get my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+@@ -98,7 +101,7 @@
+ 	for (i=0;i<numberofelements;i++){
+ 
+ 		/*!All elements have been partitioned above, only deal with elements for this cpu: */
+-		if(my_rank==epart[i]){ 
++		if(my_rank2==epart[i]){ 
+ 
+ 			my_elements[i]=true;
+ 			
+Index: ../trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp	(revision 13591)
++++ ../trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp	(revision 13592)
+@@ -22,7 +22,7 @@
+ void ParsePetscOptionsx(Parameters* parameters,FILE* fid){
+ 
+ 	char line [1000];
+-	extern int my_rank;
++	int my_rank2;
+ 	int i;
+ 
+ 	/*intermediary: */
+@@ -34,8 +34,11 @@
+ 	char* catstring=NULL;
+ 	int   stringlength;
+ 
+-	if(my_rank==0){
++	/*Get my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
++	if(my_rank2==0){
++
+ 		/*Now, go through lines and figure out how many analyses we have: */
+ 		numanalyses=0;
+ 		while ( fgets(line, sizeof line, fid) ){
+@@ -96,7 +99,7 @@
+ 	/*Ok, broadcast to other cpus: */
+  	#ifdef _HAVE_MPI_
+ 	MPI_Bcast(&numanalyses,1,MPI_INT,0,IssmComm::GetComm());
+-	if(my_rank!=0){
++	if(my_rank2!=0){
+ 		analyses=xNew<IssmPDouble>(numanalyses);
+ 		strings=xNew<char*>(numanalyses);
+ 	}
+@@ -104,15 +107,15 @@
+ 	#endif
+ 	for(i=0;i<numanalyses;i++){
+ 		char* string=strings[i];
+-		if(my_rank==0){
++		if(my_rank2==0){
+ 			if(string==NULL) _error_("PETSc options for analysis " << EnumToStringx(reCast<int>(analyses[i])) << " have been declared but were not found");
+ 		}
+-		if(my_rank==0)stringlength=(strlen(string)+1)*sizeof(char);
++		if(my_rank2==0)stringlength=(strlen(string)+1)*sizeof(char);
+ 		#ifdef _HAVE_MPI_
+ 		MPI_Bcast(&stringlength,1,MPI_INT,0,IssmComm::GetComm());
+-		if(my_rank!=0)string=xNew<char>(stringlength);
++		if(my_rank2!=0)string=xNew<char>(stringlength);
+ 		MPI_Bcast(string,stringlength,MPI_CHAR,0,IssmComm::GetComm());
+-		if(my_rank!=0)strings[i]=string;
++		if(my_rank2!=0)strings[i]=string;
+ 		#endif
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp	(revision 13591)
++++ ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp	(revision 13592)
+@@ -20,7 +20,7 @@
+ void DakotaResponsesx(double* d_responses,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){
+ 
+ 	int        i,j,k;
+-	extern int my_rank;
++	int        my_rank2;
+ 	bool       process_units = true;
+ 
+ 	/*intermediary: */
+@@ -35,6 +35,7 @@
+ 
+ 	/*retrieve npart: */
+ 	parameters->FindParam(&npart,QmuNumberofpartitionsEnum);
++	my_rank2=IssmComm::GetRank();
+ 
+ 	/*save the d_responses pointer: */
+ 	responses_pointer=d_responses;
+@@ -55,7 +56,7 @@
+ 			AverageOntoPartitionx(&qmu_response,elements,nodes,vertices,loads,materials,parameters,vertex_response);
+ 
+ 			/*Copy onto our dakota responses: */
+-			if(my_rank==0){
++			if(my_rank2==0){
+ 				/*plug response: */
+ 				for(i=0;i<npart;i++)responses_pointer[i]=qmu_response[i];
+ 
+@@ -76,7 +77,7 @@
+ 			//Responsex(responses_pointer,elements,nodes, vertices,loads,materials, parameters,root,process_units);
+ 			Responsex(&femmodel_response,elements,nodes, vertices,loads,materials, parameters,root,process_units,0);//0 is the index for weights
+ 			
+-			if(my_rank==0){
++			if(my_rank2==0){
+ 				/*plug response: */
+ 				responses_pointer[0]=femmodel_response;
+ 
+@@ -95,7 +96,7 @@
+ 			/*perfectly normal response function: */
+ 			Responsex(&femmodel_response,elements,nodes, vertices,loads,materials, parameters,root,process_units,0);//0 is the weight index
+ 
+-			if(my_rank==0){
++			if(my_rank2==0){
+ 				/*plug response: */
+ 				responses_pointer[0]=femmodel_response;
+ 
+@@ -108,7 +109,7 @@
+ 
+ 
+ 	/*Synthesize echo: {{{*/
+-	if(my_rank==0){
++	if(my_rank2==0){
+ 		_printString_("   responses: " << d_numresponses << ": ");
+ 		for(i=0;i<d_numresponses-1;i++)_printString_(d_responses[i] << "|");
+ 		_printString_(d_responses[d_numresponses-1]);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13592-13593.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13592-13593.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13592-13593.diff	(revision 13980)
@@ -0,0 +1,158 @@
+Index: ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13592)
++++ ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13593)
+@@ -44,7 +44,6 @@
+ int DakotaSpawnCore(double* d_responses, int d_numresponses, double* d_variables, char** d_variables_descriptors,int d_numvariables, void* void_femmodel,int counter){
+ 	
+ 	int i;
+-	extern int my_rank;
+ 	
+ 	char   **responses_descriptors     = NULL; //these are our!  there are only numresponsedescriptors of them, not d_numresponses!!!
+ 	int      numresponsedescriptors;
+@@ -103,7 +102,7 @@
+ 	 */ 
+ 
+ 	int i;
+-	extern int my_rank;
++	int my_rank2;
+ 
+ 	/*inputs and outputs: */
+ 	double* variables=NULL;
+@@ -115,6 +114,8 @@
+ 	char* string=NULL;
+ 	int   string_length;
+ 
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	/*recover inputs from pointers: */
+ 	variables=*pvariables;
+@@ -126,22 +127,22 @@
+ 	MPI_Bcast(&numvariables,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	
+ 	/*variables:*/
+-	if(my_rank!=0)variables=xNew<double>(numvariables);
++	if(my_rank2!=0)variables=xNew<double>(numvariables);
+ 	MPI_Bcast(variables,numvariables,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 
+ 	/*variables_descriptors: */
+-	if(my_rank!=0){
++	if(my_rank2!=0){
+ 		variables_descriptors=xNew<char*>(numvariables);
+ 	}
+ 	for(i=0;i<numvariables;i++){
+-		if(my_rank==0){
++		if(my_rank2==0){
+ 			string=variables_descriptors[i];
+ 			string_length=(strlen(string)+1)*sizeof(char);
+ 		}
+ 		MPI_Bcast(&string_length,1,MPI_INT,0,IssmComm::GetComm()); 
+-		if(my_rank!=0)string=xNew<char>(string_length);
++		if(my_rank2!=0)string=xNew<char>(string_length);
+ 		MPI_Bcast(string,string_length,MPI_CHAR,0,IssmComm::GetComm()); 
+-		if(my_rank!=0)variables_descriptors[i]=string;
++		if(my_rank2!=0)variables_descriptors[i]=string;
+ 	}
+ 
+ 	/*numresponses: */
+@@ -158,7 +159,7 @@
+ 	/*\brief DakotaFree: free allocations on other cpus, not done by Dakota.*/
+ 
+ 	int i;
+-	extern int my_rank;
++	int my_rank2;
+ 	
+ 	double  *variables             = NULL;
+ 	char   **variables_descriptors = NULL;
+@@ -170,9 +171,11 @@
+ 	variables_descriptors=*pvariables_descriptors;
+ 	responses_descriptors=*presponses_descriptors;
+ 
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	/*Free variables and variables_descriptors only on cpu !=0*/
+-	if(my_rank!=0){
++	if(my_rank2!=0){
+ 		xDelete<double>(variables);
+ 		for(i=0;i<numvariables;i++){
+ 			string=variables_descriptors[i];
+Index: ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 13592)
++++ ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 13593)
+@@ -13,7 +13,7 @@
+ /*FUNCTION pKrigingx{{{*/
+ int pKrigingx(double** ppredictions,double **perror,double* obs_x, double* obs_y, double* obs_list, int obs_length,double* x_interp,double* y_interp,int n_interp,Options* options){
+ 
+-	extern int num_procs;
++	int num_procs2;
+ 	int my_rank2;
+ 
+ 	/*output*/
+@@ -29,6 +29,7 @@
+ 
+ 	/*Get my_rank2: */
+ 	my_rank2=IssmComm::GetRank();
++	num_procs2=IssmComm::GetSize();
+ 
+ 	/*Get some Options*/
+ 	options->Get(&radius,"searchradius",0.);
+@@ -57,7 +58,7 @@
+ 		ProcessVariogram(&variogram,options);
+ 
+ 		/*partition loop across threads: */
+-		for(int idx=my_rank2;idx<n_interp;idx+=num_procs){
++		for(int idx=my_rank2;idx<n_interp;idx+=num_procs2){
+ 			_pprintLine_("      interpolation progress: "<<setw(6)<<setprecision(2)<<double(idx)/double(n_interp)*100<<"%");
+ 			observations->InterpolationKriging(&predictions[idx],&error[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata,variogram);
+ 		}
+@@ -75,7 +76,7 @@
+ 	else if(strcmp(output,"nearestneighbor")==0){
+ 
+ 		/*partition loop across threads: */
+-		for(int idx=my_rank2;idx<n_interp;idx+=num_procs){
++		for(int idx=my_rank2;idx<n_interp;idx+=num_procs2){
+ 			_pprintLine_("      interpolation progress: "<<setw(6)<<setprecision(2)<<double(idx)/double(n_interp)*100<<"%");
+ 			observations->InterpolationNearestNeighbor(&predictions[idx],x_interp[idx],y_interp[idx],radius);
+ 		}
+@@ -92,7 +93,7 @@
+ 		options->Get(&power,"power",2.);
+ 
+ 		/*partition loop across threads: */
+-		for(int idx=my_rank2;idx<n_interp;idx+=num_procs){
++		for(int idx=my_rank2;idx<n_interp;idx+=num_procs2){
+ 			_pprintLine_("      interpolation progress: "<<setw(6)<<setprecision(2)<<double(idx)/double(n_interp)*100<<"%");
+ 			observations->InterpolationIDW(&predictions[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata,power);
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 13592)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 13593)
+@@ -22,7 +22,7 @@
+ 	int i;
+ 
+ 	int my_rank2;
+-	extern int num_procs;
++	int num_procs2;
+ 	int    numberofelements;
+ 	int    numberofvertices;
+ 	int    numberofelements2d;
+@@ -48,6 +48,7 @@
+ 
+ 	/*Get my_rank2:*/
+ 	my_rank2=IssmComm::GetRank();
++	num_procs2=IssmComm::GetSize();
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&dim,MeshDimensionEnum);
+@@ -75,7 +76,7 @@
+ 		iomodel->FetchData(&elements2d,NULL,NULL,MeshElements2dEnum);
+ 	}
+ 
+-	MeshPartitionx(&epart, &npart,numberofelements,numberofvertices,elements, numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width, dim,num_procs);
++	MeshPartitionx(&epart, &npart,numberofelements,numberofvertices,elements, numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width, dim,num_procs2);
+ 
+ 	/*Free elements and elements2d: */
+ 	iomodel->DeleteData(elements,MeshElementsEnum);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13593-13594.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13593-13594.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13593-13594.diff	(revision 13980)
@@ -0,0 +1,701 @@
+Index: ../trunk-jpl/src/c/Container/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13593)
++++ ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13594)
+@@ -55,8 +55,8 @@
+ /*FUNCTION Nodes::DistributeDofs{{{*/
+ void  Nodes::DistributeDofs(int analysis_type,int setenum){
+ 
+-	extern int num_procs;
+-	extern int my_rank;
++	int num_procs2;
++	int my_rank2;
+ 
+ 	int  i;
+ 	int  dofcount=0;
+@@ -65,6 +65,10 @@
+ 	int* truedofs=NULL;
+ 	int* alltruedofs=NULL;
+ 	int  numnodes=0;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++	num_procs2=IssmComm::GetSize();
+ 
+ 	/*some check: */
+ 	_assert_(setenum==GsetEnum || setenum==FsetEnum || setenum==SsetEnum);
+@@ -83,18 +87,18 @@
+ 	 * 0. This means the dofs between all the cpus are not unique. We now offset the dofs of eache
+ 	 * cpus by the total last dofs of the previus cpu, starting from 0.
+ 	 * First: get number of dofs for each cpu*/
+-	alldofcount=xNew<int>(num_procs);
++	alldofcount=xNew<int>(num_procs2);
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Gather(&dofcount,1,MPI_INT,alldofcount,1,MPI_INT,0,MPI_COMM_WORLD);
+-	MPI_Bcast(alldofcount,num_procs,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Bcast(alldofcount,num_procs2,MPI_INT,0,MPI_COMM_WORLD);
+ 	#else
+ 	alldofcount[0]=dofcount;
+ 	#endif
+ 
+ 	/* Every cpu should start its own dof count at the end of the dofcount from cpu-1*/
+ 	dofcount=0;
+-	if(my_rank!=0){
+-		for(i=0;i<my_rank;i++){
++	if(my_rank2!=0){
++		for(i=0;i<my_rank2;i++){
+ 			dofcount+=alldofcount[i];
+ 		}
+ 	}
+@@ -327,8 +331,11 @@
+ /*FUNCTION Nodes::Ranks{{{*/
+ void   Nodes::Ranks(int* ranks,int analysis_type){
+ 
+-	extern int my_rank;
++	int my_rank2;
+ 	int        sid;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	/*Go through nodes, and for each object, report it cpu: */
+ 	for(int i=0;i<this->Size();i++){
+@@ -339,7 +346,7 @@
+ 		if (node->InAnalysis(analysis_type)){
+ 			/*Plug rank into ranks, according to sid: */
+ 			sid=node->Sid();
+-			ranks[sid]=my_rank; 
++			ranks[sid]=my_rank2; 
+ 		}
+ 	}
+ }
+Index: ../trunk-jpl/src/c/Container/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13593)
++++ ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13594)
+@@ -167,8 +167,8 @@
+ 
+ 	int i;
+ 	
+-	extern int my_rank;
+-	extern int num_procs;
++	int my_rank2;
++	int num_procs2;
+ 
+ 	Patch  *patch        = NULL;
+ 	int    *resultsenums = NULL;
+@@ -183,6 +183,10 @@
+ 	int    numberofresults,vectorsize;
+ 	int    rank;
+ 	int    minrank;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++	num_procs2=IssmComm::GetSize();
+ 
+ 	/*Recover parameters: */
+ 	parameters->FindParam(&io_gather,SettingsIoGatherEnum);
+@@ -195,15 +199,15 @@
+ 
+ 		/*Get rank of first cpu that has results*/
+ 		#ifdef _HAVE_MPI_
+-		if(this->Size()) rank=my_rank;
+-		else rank=num_procs;
++		if(this->Size()) rank=my_rank2;
++		else rank=num_procs2;
+ 		MPI_Allreduce (&rank,&minrank,1,MPI_INT,MPI_MIN,MPI_COMM_WORLD);
+ 		#else
+-		minrank=my_rank;
++		minrank=my_rank2;
+ 		#endif
+ 
+ 		/*see what the first element of this partition has in stock (this is common to all partitions)*/
+-		if(my_rank==minrank){
++		if(my_rank2==minrank){
+ 			if(this->Size()==0) _error_("Cannot write results because there is no element??");
+ 			Element* element=(Element*)this->GetObjectByOffset(0);
+ 			element->ListResultsInfo(&resultsenums,&resultssizes,&resultstimes,&resultssteps,&numberofresults);
+@@ -215,7 +219,7 @@
+ 		/*Get out if there is no results. Otherwise broadcast info*/
+ 		if(!numberofresults) return;
+ 		#ifdef _HAVE_MPI_
+-		if(my_rank!=minrank){
++		if(my_rank2!=minrank){
+ 			resultsenums=xNew<int>(numberofresults);
+ 			resultssizes=xNew<int>(numberofresults);
+ 			resultstimes=xNew<IssmDouble>(numberofresults);
+@@ -244,7 +248,7 @@
+ 
+ 			/*Serialize and add to results*/
+ 			vector_serial=vector->ToMPISerial();
+-			if(my_rank==0){
++			if(my_rank2==0){
+ 				/*No need to add this vector for all cpus*/
+ 				#ifdef _HAVE_ADOLC_
+ 				IssmPDouble* vector_serial_passive=xNew<IssmPDouble>(vectorsize);
+Index: ../trunk-jpl/src/c/Container/Vertices.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13593)
++++ ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13594)
+@@ -40,14 +40,18 @@
+ /*FUNCTION Vertices::DistributePids{{{*/
+ void  Vertices::DistributePids(int numberofobjects){
+ 
+-	extern int num_procs;
+-	extern int my_rank;
++	int num_procs2;
++	int my_rank2;
+ 
+ 	int  i;
+ 	int  pidcount    = 0;
+ 	int *allpidcount = NULL;
+ 	int *truepids    = NULL;
+ 	int *alltruepids = NULL;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++	num_procs2=IssmComm::GetSize();
+ 
+ 	/*Go through objects, and distribute pids locally, from 0 to numberofpidsperobject*/
+ 	for (i=0;i<this->Size();i++){
+@@ -59,18 +63,18 @@
+ 	 * 0. This means the pids between all the cpus are not unique. We now offset the pids of each
+ 	 * cpus by the total last pids of the previus cpu, starting from 0.
+ 	 * First: get number of pids for each cpu*/
+-	allpidcount=xNew<int>(num_procs);
++	allpidcount=xNew<int>(num_procs2);
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Gather(&pidcount,1,MPI_INT,allpidcount,1,MPI_INT,0,MPI_COMM_WORLD);
+-	MPI_Bcast(allpidcount,num_procs,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Bcast(allpidcount,num_procs2,MPI_INT,0,MPI_COMM_WORLD);
+ 	#else
+ 	allpidcount[0]=pidcount;
+ 	#endif
+ 
+ 	/* Every cpu should start its own pid count at the end of the pidcount from cpu-1*/
+ 	pidcount=0;
+-	if(my_rank!=0){
+-		for(i=0;i<my_rank;i++){
++	if(my_rank2!=0){
++		for(i=0;i<my_rank2;i++){
+ 			pidcount+=allpidcount[i];
+ 		}
+ 	}
+@@ -110,16 +114,19 @@
+ void  Vertices::FlagClones(int numberofobjects){
+ 
+ 	int i;
+-	extern int num_procs;
++	int num_procs2;
+ 
+ 	int* ranks=NULL;
+ 	int* minranks=NULL;
++	
++	/*recover num_procs2:*/
++	num_procs2=IssmComm::GetSize();
+ 
+ 	/*Allocate ranks: */
+ 	ranks=xNew<int>(numberofobjects);
+ 	minranks=xNew<int>(numberofobjects);
+ 
+-	for(i=0;i<numberofobjects;i++)ranks[i]=num_procs; //no cpu can have rank num_procs. This is the maximum limit.
++	for(i=0;i<numberofobjects;i++)ranks[i]=num_procs2; //no cpu can have rank num_procs. This is the maximum limit.
+ 
+ 	/*Now go through all our objects and ask them to report to who they belong (which rank): */
+ 	Ranks(ranks);
+@@ -176,15 +183,18 @@
+ /*FUNCTION Vertices::Ranks{{{*/
+ void   Vertices::Ranks(int* ranks){
+ 
+-	extern int my_rank;
++	int my_rank2;
+ 	int        sid;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	/*Go through a dataset, and for each object, report it cpu: */
+ 	for(int i=0;i<this->Size();i++){
+ 		/*Plug rank into ranks, according to id: */
+ 		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
+ 		sid=vertex->Sid();
+-		ranks[sid]=my_rank; 
++		ranks[sid]=my_rank2; 
+ 	}
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 13593)
++++ ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 13594)
+@@ -28,10 +28,15 @@
+ }
+ 
+ ErrorException::~ErrorException() throw(){
+-	extern int num_procs;
++	
++	int num_procs2;
++	
++	/*recover num_procs2:*/
++	num_procs2=IssmComm::GetSize();
++
+ 	/*We want the report only for matlab modules, otherwise we get twice the report
+ 	 * We assume that if num_procs==1, it is a module (FIXME)*/
+-	if(num_procs==1) this->Report();
++	if(num_procs2==1) this->Report();
+ }
+ 
+ const char* ErrorException::what() const throw(){
+@@ -39,20 +44,27 @@
+ }
+ 
+ void ErrorException::Report() const{
+-	extern int my_rank;
+-	extern int num_procs;
++	
++	int my_rank2;
++	int num_procs2;
++	
++	/*recover my_rank2 and num_procs2:*/
++	my_rank2=IssmComm::GetRank();
++	num_procs2=IssmComm::GetSize();
+ 
++
++
+ 	if (function_name=="" || file_line==0){ //WINDOWS
+ 		_printString_("Error message: " << what());
+ 	}
+ 	else{
+-		if(num_procs==1){
++		if(num_procs2==1){
+ 			_printLine_("\n??? Error using ==> " << file_name.c_str() << ":" << file_line);
+ 			_printLine_(function_name.c_str() << " error message: " << what() << "\n");
+ 		}
+ 		else{
+-			_printLine_("\n[" << my_rank << "] ??? Error using ==> " << file_name.c_str() << ":" << file_line);
+-			_printLine_("[" << my_rank << "] " << function_name.c_str() << " error message: " << what() << "\n");
++			_printLine_("\n[" << my_rank2<< "] ??? Error using ==> " << file_name.c_str() << ":" << file_line);
++			_printLine_("[" << my_rank2 << "] " << function_name.c_str() << " error message: " << what() << "\n");
+ 		}
+ 	}
+ 	return;
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13593)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13594)
+@@ -103,14 +103,17 @@
+ /*FUNCTION IoModel::CheckEnumSync{{{*/
+ void  IoModel::CheckEnumSync(void){
+ 
+-	extern int my_rank;
++	int my_rank2;
+ 	int record_enum = 0;
+ 
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++
+ 	/*Check that some fields have been allocated*/
+-	_assert_(this->fid || my_rank);
++	_assert_(this->fid || my_rank2);
+ 
+ 	/*Go find in the binary file, the position of the data we want to fetch: */
+-	if(my_rank==0){ //cpu 0
++	if(my_rank2==0){ //cpu 0
+ 
+ 		/*First set FILE* position to the beginning of the file: */
+ 		fseek(this->fid,0,SEEK_SET);
+@@ -295,8 +298,7 @@
+ /*FUNCTION IoModel::FetchConstants{{{*/
+ void  IoModel::FetchConstants(void){
+ 
+-	extern int my_rank;
+-	extern int num_procs;
++	int my_rank2;
+ 	
+ 	/*record descriptions; */
+ 	int record_enum;
+@@ -311,12 +313,15 @@
+ 	char* string=NULL;
+ 	int   string_size;
+ 
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++
+ 	/*Check that some fields have been allocated*/
+-	_assert_(this->fid || my_rank);
++	_assert_(this->fid || my_rank2);
+ 	_assert_(this->constants);
+ 
+ 	/*Go find in the binary file, the position of the data we want to fetch: */
+-	if(my_rank==0){ //cpu 0{{{
++	if(my_rank2==0){ //cpu 0{{{
+ 	
+ 		/*First set FILE* position to the beginning of the file: */
+ 		fseek(this->fid,0,SEEK_SET);
+@@ -534,21 +539,24 @@
+ /*FUNCTION IoModel::FetchData(bool*     pbool,int data_enum){{{*/
+ void  IoModel::FetchData(bool* pboolean,int data_enum){
+ 
+-	extern int my_rank;
+-	extern int num_procs;
++	int my_rank2;
+ 	
+ 
+ 	/*output: */
+ 	int   booleanint;
+ 	int   code;
+ 	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++
++	
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+ 
+ 	if(code!=1)_error_("expecting a boolean for enum " << EnumToStringx(data_enum));
+ 	
+ 	/*We have to read a boolean from disk. */
+-	if(my_rank==0){  
++	if(my_rank2==0){  
+ 		if(fread(&booleanint,sizeof(int),1,fid)!=1) _error_("could not read boolean ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+@@ -564,20 +572,22 @@
+ /*FUNCTION IoModel::FetchData(int*      pinteger,int data_enum){{{*/
+ void  IoModel::FetchData(int* pinteger,int data_enum){
+ 
+-	extern int my_rank;
+-	extern int num_procs;
++	int my_rank2;
+ 
+ 	/*output: */
+ 	int   integer;
+ 	int   code;
+ 	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++	
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+ 	
+ 	if(code!=2)_error_("expecting an integer for enum " << EnumToStringx(data_enum));
+ 	
+ 	/*We have to read a integer from disk. First read the dimensions of the integer, then the integer: */
+-	if(my_rank==0){  
++	if(my_rank2==0){  
+ 		if(fread(&integer,sizeof(int),1,fid)!=1) _error_("could not read integer ");
+ 	}
+ 
+@@ -593,13 +603,15 @@
+ void  IoModel::FetchData(IssmDouble* pscalar,int data_enum){
+ 
+ 
+-	extern int my_rank;
+-	extern int num_procs;
++	int my_rank2;
+ 	
+ 
+ 	/*output: */
+ 	IssmPDouble   scalar;
+ 	int      code;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+@@ -607,7 +619,7 @@
+ 	if(code!=3)_error_("expecting a IssmDouble for enum " << EnumToStringx(data_enum));
+ 	
+ 	/*We have to read a scalar from disk. First read the dimensions of the scalar, then the scalar: */
+-	if(my_rank==0){
++	if(my_rank2==0){
+ 		if(fread(&scalar,sizeof(IssmPDouble),1,fid)!=1)_error_("could not read scalar ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+@@ -622,14 +634,16 @@
+ /*FUNCTION IoModel::FetchData(char**    pstring,int data_enum){{{*/
+ void  IoModel::FetchData(char** pstring,int data_enum){
+ 
+-	extern int my_rank;
+-	extern int num_procs;
++	int my_rank2;
+ 	
+ 
+ 	/*output: */
+ 	char* string=NULL;
+ 	int   string_size;
+ 	int code=0;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+@@ -639,7 +653,7 @@
+ 	/*Now fetch: */
+ 	
+ 	/*We have to read a string from disk. First read the dimensions of the string, then the string: */
+-	if(my_rank==0){  
++	if(my_rank2==0){  
+ 		if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
+ 	}
+ 
+@@ -653,7 +667,7 @@
+ 		string[string_size]='\0';
+ 
+ 		/*Read string on node 0, then broadcast: */
+-		if(my_rank==0){  
++		if(my_rank2==0){  
+ 			if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_(" could not read string ");
+ 		}
+ 		#ifdef _HAVE_MPI_
+@@ -673,8 +687,7 @@
+ /*FUNCTION IoModel::FetchData(int**     pintegerematrix,int* pM,int* pN,int data_enum){{{*/
+ void  IoModel::FetchData(int** pmatrix,int* pM,int* pN,int data_enum){
+ 
+-	extern int my_rank;
+-	extern int num_procs;
++	int my_rank2;
+ 	int i,j;
+ 
+ 	/*output: */
+@@ -683,8 +696,10 @@
+ 	int*    integer_matrix=NULL;
+ 	int code=0;
+ 	int vector_type=0;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+-
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,&vector_type,data_enum);
+ 
+@@ -694,7 +709,7 @@
+ 
+ 	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+ 	/*numberofelements: */
+-	if(my_rank==0){  
++	if(my_rank2==0){  
+ 		if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+ 	}
+ 
+@@ -702,7 +717,7 @@
+ 	MPI_Bcast(&M,1,MPI_INT,0,MPI_COMM_WORLD); 
+ 	#endif
+ 
+-	if(my_rank==0){  
++	if(my_rank2==0){  
+ 		if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+@@ -714,7 +729,7 @@
+ 		matrix=xNew<IssmPDouble>(M*N);
+ 
+ 		/*Read matrix on node 0, then broadcast: */
+-		if(my_rank==0){  
++		if(my_rank2==0){  
+ 			if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 		}
+ 		
+@@ -748,14 +763,16 @@
+ /*FUNCTION IoModel::FetchData(IssmDouble**  pIssmDoublematrix,int* pM,int* pN,int data_enum){{{*/
+ void  IoModel::FetchData(IssmDouble** pmatrix,int* pM,int* pN,int data_enum){
+ 
+-	extern int my_rank;
+-	extern int num_procs;
++	int my_rank2;
+ 
+ 	/*output: */
+ 	int M,N;
+ 	IssmPDouble* matrix=NULL;
+ 	int code=0;
+ 	int vector_type=0;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,&vector_type,data_enum);
+@@ -765,14 +782,14 @@
+ 
+ 	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+ 	/*numberofelements: */
+-	if(my_rank==0){  
++	if(my_rank2==0){  
+ 		if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Bcast(&M,1,MPI_INT,0,MPI_COMM_WORLD); 
+ 	#endif
+ 
+-	if(my_rank==0){  
++	if(my_rank2==0){  
+ 		if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+@@ -784,7 +801,7 @@
+ 		matrix=xNew<IssmPDouble>(M*N);
+ 
+ 		/*Read matrix on node 0, then broadcast: */
+-		if(my_rank==0){  
++		if(my_rank2==0){  
+ 			if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 		}
+ 		#ifdef _HAVE_MPI_
+@@ -813,8 +830,7 @@
+ /*FUNCTION IoModel::FetchData(char***   pstrings,int* pnumstrings,int data_enum){{{*/
+ void  IoModel::FetchData(char*** pstrings,int* pnumstrings,int data_enum){
+ 
+-	extern int my_rank;
+-	extern int num_procs;
++	int my_rank2;
+ 	
+ 	int i;
+ 
+@@ -827,13 +843,16 @@
+ 	int   string_size;
+ 	int   code;
+ 	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+ 	
+ 	if(code!=9)_error_("expecting a string array for enum " << EnumToStringx(data_enum));
+ 	
+ 	/*We have to read a bunch of strings from disk. First read the number of strings, and allocate: */
+-	if(my_rank==0){  
++	if(my_rank2==0){  
+ 		if(fread(&numstrings,sizeof(int),1,fid)!=1) _error_("could not read length of string array");
+ 	}
+ 	#ifdef _HAVE_MPI_
+@@ -848,7 +867,7 @@
+ 		/*Go through strings, and read: */
+ 		for(i=0;i<numstrings;i++){
+ 			
+-			if(my_rank==0){  
++			if(my_rank2==0){  
+ 				if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
+ 			}
+ 			#ifdef _HAVE_MPI_
+@@ -859,7 +878,7 @@
+ 				string[string_size]='\0';
+ 
+ 				/*Read string on node 0, then broadcast: */
+-				if(my_rank==0){  
++				if(my_rank2==0){  
+ 					if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_(" could not read string ");
+ 				}
+ 				#ifdef _HAVE_MPI_
+@@ -885,8 +904,7 @@
+ 
+ 	int i;
+ 
+-	extern int my_rank;
+-	extern int num_procs;
++	int my_rank2;
+ 
+ 	/*output: */
+ 	IssmDouble** matrices=NULL;
+@@ -899,12 +917,15 @@
+ 	IssmPDouble *matrix = NULL;
+ 	int     code;
+ 	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+ 	if(code!=8)_error_("expecting a IssmDouble mat array for enum " << EnumToStringx(data_enum));
+ 	
+ 	/*Now fetch: */
+-	if(my_rank==0){  
++	if(my_rank2==0){  
+ 		if(fread(&numrecords,sizeof(int),1,fid)!=1) _error_("could not read number of records in matrix array ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+@@ -927,14 +948,14 @@
+ 		/*Loop through records and fetch matrix: */
+ 		for(i=0;i<numrecords;i++){
+ 
+-			if(my_rank==0){  
++			if(my_rank2==0){  
+ 				if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows in " << i << "th matrix of matrix array");
+ 			}
+ 			#ifdef _HAVE_MPI_
+ 			MPI_Bcast(&M,1,MPI_INT,0,MPI_COMM_WORLD); 
+ 			#endif
+ 
+-			if(my_rank==0){  
++			if(my_rank2==0){  
+ 				if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns in " << i << "th matrix of matrix array");
+ 			}
+ 			#ifdef _HAVE_MPI_
+@@ -946,7 +967,7 @@
+ 				matrix=xNew<IssmPDouble>(M*N);
+ 
+ 				/*Read matrix on node 0, then broadcast: */
+-				if(my_rank==0){  
++				if(my_rank2==0){  
+ 					if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 				}
+ 
+@@ -975,13 +996,10 @@
+ /*FUNCTION IoModel::FetchData(Option**  poption,int data_enum){{{*/
+ void  IoModel::FetchData(Option** poption,int index){
+ 
+-	extern int my_rank;
+-	extern int num_procs;
+-
+ 	/*output: */
+ 	int     code;
+ 	char   *name        = NULL;
+-
++	
+ 	/*First get option name*/
+ 	this->FetchData(&name,index);
+ 
+@@ -1260,12 +1278,15 @@
+ /*FUNCTION IoModel::LastIndex{{{*/
+ void IoModel::LastIndex(int *pindex){
+ 
+-	extern int my_rank;
++	int my_rank2;
+ 	int        lastindex,index;
+ 	int        record_length;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	/*Go find in the binary file, the position of the data we want to fetch: */
+-	if(my_rank==0){
++	if(my_rank2==0){
+ 
+ 		/*First set FILE* position to the beginning of the file: */
+ 		fseek(fid,0,SEEK_SET);
+@@ -1296,8 +1317,7 @@
+ /*FUNCTION IoModel::SetFilePointerToData{{{*/
+ FILE* IoModel::SetFilePointerToData(int* pcode,int* pvector_type, int data_enum){
+ 
+-	extern int my_rank;
+-	extern int num_procs;
++	int my_rank2;
+ 
+ 	int found         = 0;
+ 	int record_enum;
+@@ -1305,8 +1325,11 @@
+ 	int record_code;       //1 to 7 number
+ 	int vector_type   = 0; //nodal or elementary
+ 
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++
+ 	/*Go find in the binary file, the position of the data we want to fetch: */
+-	if(my_rank==0){
++	if(my_rank2==0){
+ 
+ 		/*First set FILE* position to the beginning of the file: */
+ 		fseek(fid,0,SEEK_SET);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13594-13595.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13594-13595.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13594-13595.diff	(revision 13980)
@@ -0,0 +1,286 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13594)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13595)
+@@ -16,17 +16,17 @@
+ #include "../../../shared/shared.h"
+ 
+ /*Function prototypes: */
+-int MatMultCompatible(Mat A,Vec x);
++int MatMultCompatible(Mat A,Vec x,COMM comm);
+ void VecRelocalize(Vec* outvector,Vec vector,int m);
+ 
+-void MatMultPatch(Mat A,Vec X, Vec AX){ //same prototype as MatMult in Petsc
++void MatMultPatch(Mat A,Vec X, Vec AX,COMM comm){ //same prototype as MatMult in Petsc
+ 
+ 	int m,n;
+ 	Vec X_rel=NULL;
+ 
+ 	_assert_(A); _assert_(X);
+ 
+-	if (MatMultCompatible(A,X)){
++	if (MatMultCompatible(A,X,comm)){
+ 		MatMult(A,X,AX); 
+ 	}
+ 	else{
+@@ -41,7 +41,7 @@
+ 	}
+ }
+ 
+-int MatMultCompatible(Mat A,Vec x){
++int MatMultCompatible(Mat A,Vec x,COMM comm){
+ 	
+ 	/*error management*/
+ 	
+@@ -57,8 +57,8 @@
+ 	if (local_n!=range)result=0;
+ 	
+ 	/*synchronize result: */
+-	MPI_Reduce (&result,&sumresult,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&sumresult,1,MPI_INT,0,MPI_COMM_WORLD);                
++	MPI_Reduce (&result,&sumresult,1,MPI_INT,MPI_SUM,0,comm );
++	MPI_Bcast(&sumresult,1,MPI_INT,0,comm);                
+ 	if (sumresult!=num_procs){
+ 		result=0;
+ 	}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 13594)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 13595)
+@@ -12,7 +12,7 @@
+ #include "../petscincludes.h"
+ #include "../../../shared/shared.h"
+ 
+-void MatToSerial(double** poutmatrix,Mat matrix){
++void MatToSerial(double** poutmatrix,Mat matrix,COMM comm){
+ 
+ 	int i;
+ 	extern int my_rank;
+@@ -65,12 +65,12 @@
+ 			buffer[0]=my_rank;
+ 			buffer[1]=lower_row;
+ 			buffer[2]=range;
+-			MPI_Send(buffer,3,MPI_INT,0,1,MPI_COMM_WORLD);   
+-			if (range)MPI_Send(local_matrix,N*range,MPI_DOUBLE,0,1,MPI_COMM_WORLD); 
++			MPI_Send(buffer,3,MPI_INT,0,1,comm);   
++			if (range)MPI_Send(local_matrix,N*range,MPI_DOUBLE,0,1,comm); 
+ 		}
+ 		if (my_rank==0){
+-			MPI_Recv(buffer,3,MPI_INT,i,1,MPI_COMM_WORLD,&status); 
+-			if (buffer[2])MPI_Recv(outmatrix+(buffer[1]*N),N*buffer[2],MPI_DOUBLE,i,1,MPI_COMM_WORLD,&status);
++			MPI_Recv(buffer,3,MPI_INT,i,1,comm,&status); 
++			if (buffer[2])MPI_Recv(outmatrix+(buffer[1]*N),N*buffer[2],MPI_DOUBLE,i,1,comm,&status);
+ 		}
+ 	} 
+ 	if (my_rank==0){ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 13594)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 13595)
+@@ -12,7 +12,7 @@
+ #include "../petscincludes.h"
+ #include "../../../shared/shared.h"
+ 
+-int VecToMPISerial(double** pgathered_vector, Vec vector){
++int VecToMPISerial(double** pgathered_vector, Vec vector,COMM comm){
+ 	
+ 	int i;
+ 	extern int num_procs; 
+@@ -65,12 +65,12 @@
+ 			buffer[0]=my_rank;
+ 			buffer[1]=lower_row;
+ 			buffer[2]=range;
+-			MPI_Send(buffer,3,MPI_INT,0,1,MPI_COMM_WORLD);  
+-			if (range)MPI_Send(local_vector,range,MPI_DOUBLE,0,1,MPI_COMM_WORLD); 
++			MPI_Send(buffer,3,MPI_INT,0,1,comm);  
++			if (range)MPI_Send(local_vector,range,MPI_DOUBLE,0,1,comm); 
+ 		}
+ 		if (my_rank==0){
+-			MPI_Recv(buffer,3,MPI_INT,i,1,MPI_COMM_WORLD,&status); 
+-			if (buffer[2])MPI_Recv(gathered_vector+buffer[1],buffer[2],MPI_DOUBLE,i,1,MPI_COMM_WORLD,&status);
++			MPI_Recv(buffer,3,MPI_INT,i,1,comm,&status); 
++			if (buffer[2])MPI_Recv(gathered_vector+buffer[1],buffer[2],MPI_DOUBLE,i,1,comm,&status);
+ 		}
+ 	}
+ 
+@@ -80,7 +80,7 @@
+ 	}
+ 
+ 	/*Now, broadcast gathered_vector from node 0 to other nodes: */
+-	MPI_Bcast(gathered_vector,vector_size,MPI_DOUBLE,0,MPI_COMM_WORLD);
++	MPI_Bcast(gathered_vector,vector_size,MPI_DOUBLE,0,comm);
+ 
+ 	/*Assign output pointers: */
+ 	*pgathered_vector=gathered_vector;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13594)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13595)
+@@ -20,7 +20,7 @@
+ #include "../../mpi/patches/mpipatches.h"
+ 
+ /*NewMat(int M,int N){{{*/
+-Mat NewMat(int M,int N){
++Mat NewMat(int M,int N,COMM comm){
+ 
+ 	/*output:*/
+ 	Mat outmatrix=NULL;
+@@ -39,16 +39,16 @@
+ 	o_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
+ 
+ 	#if _PETSC_MAJOR_ == 3 && _PETSC_MINOR_ > 2
+-	MatCreateAIJ(MPI_COMM_WORLD,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
++	MatCreateAIJ(comm,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
+ 	#else
+-	MatCreateMPIAIJ(MPI_COMM_WORLD,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
++	MatCreateMPIAIJ(comm,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
+ 	#endif
+ 
+ 	return outmatrix;
+ }
+ /*}}}*/
+ /*NewMat(int M,int N,double sparsity){{{*/
+-Mat NewMat(int M,int N,double sparsity){
++Mat NewMat(int M,int N,double sparsity,COMM comm){
+ 
+ 	/*output:*/
+ 	Mat outmatrix=NULL;
+@@ -68,20 +68,20 @@
+ 
+ 	#if _PETSC_MAJOR_ == 3 && _PETSC_MINOR_ > 2
+ 	if(sparsity==1){
+-		MatCreateDense(MPI_COMM_WORLD,m,n,M,N,NULL,&outmatrix); 
++		MatCreateDense(comm,m,n,M,N,NULL,&outmatrix); 
+ 	}
+ 	else{
+-		MatCreateAIJ(MPI_COMM_WORLD,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
++		MatCreateAIJ(comm,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
+ 	}
+ 	#else
+-	MatCreateMPIAIJ(MPI_COMM_WORLD,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
++	MatCreateMPIAIJ(comm,m,n,M,N,d_nz,NULL,o_nz,NULL,&outmatrix); 
+ 	#endif
+ 
+ 	return outmatrix;
+ }
+ /*}}}*/
+ /*NewMat(int M,int N,int connectivity,int numberofdofspernode){{{*/
+-Mat NewMat(int M,int N,int connectivity,int numberofdofspernode){
++Mat NewMat(int M,int N,int connectivity,int numberofdofspernode,COMM comm){
+ 
+ 	/*output:*/
+ 	Mat outmatrix=NULL;
+@@ -105,7 +105,7 @@
+ 	d_nz=(int)connectivity*numberofdofspernode/2;
+ 	o_nz=(int)connectivity*numberofdofspernode/2;
+ 
+-	MatCreate(MPI_COMM_WORLD,&outmatrix);
++	MatCreate(comm,&outmatrix);
+ 	MatSetSizes(outmatrix,m,n,M,N);
+ 	MatSetFromOptions(outmatrix);
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp	(revision 13594)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp	(revision 13595)
+@@ -13,7 +13,7 @@
+ #include <stdio.h>
+ #include "../../../shared/shared.h"
+ 
+-void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range){
++void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm){
+ 
+ 	/*externals :*/
+ 	extern int my_rank;
+@@ -28,7 +28,7 @@
+ 
+ 	/*Gather all range values into allranges, for all nodes*/
+ 	allranges=xNew<int>(num_procs);
+-	MPI_Allgather(&range,1,MPI_INT,allranges,1,MPI_INT,MPI_COMM_WORLD);
++	MPI_Allgather(&range,1,MPI_INT,allranges,1,MPI_INT,comm);
+ 
+ 	/*From all ranges, get lower row and upper row*/
+ 	lower_row=0;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13594)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13595)
+@@ -12,17 +12,18 @@
+ 
+ #include "./SolverEnum.h"
+ #include "../../toolkitsenums.h"
++#include "../../../include/types.h"
+ 
+ class Parameters;
+ 
+ Vec NewVec(int size,bool fromlocalsize=false);
+-Mat NewMat(int M,int N);
+-Mat NewMat(int M,int N,double sparsity);
+-Mat NewMat(int M,int N,int connectivity,int numberofdofspernode);
++Mat NewMat(int M,int N,COMM comm);
++Mat NewMat(int M,int N,double sparsity,COMM comm);
++Mat NewMat(int M,int N,int connectivity,int numberofdofspernode, COMM comm);
+ 
+ int VecTranspose(Vec* tvector,Vec vector);
+-int VecToMPISerial(double** pgathered_vector, Vec vector);
+-void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range);
++int VecToMPISerial(double** pgathered_vector, Vec vector,COMM comm);
++void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm);
+ void MatFree(Mat* pmat);
+ void ISFree(IS* pis);
+ void VecFree(Vec* pvec);
+@@ -34,8 +35,8 @@
+ void PetscOptionsInsertMultipleString(char* options_string);
+ void PetscOptionsDetermineSolverType(int* psolver_type);
+ void VecMerge(Vec A, Vec B, double* row_partition_vector,int row_partition_size);
+-void MatMultPatch(Mat A,Vec X, Vec AX);
+-void MatToSerial(double** poutmatrix,Mat matrix);
++void MatMultPatch(Mat A,Vec X, Vec AX,COMM comm);
++void MatToSerial(double** poutmatrix,Mat matrix,COMM comm);
+ void VecDuplicatePatch(Vec* output, Vec input);
+ Vec  SerialToVec(double* vector,int vector_size);
+ InsertMode ISSMToPetscInsertMode(InsMode mode);
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13594)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13595)
+@@ -30,7 +30,7 @@
+ /*FUNCTION PetscMat::PetscMat(int M,int N){{{*/
+ PetscMat::PetscMat(int M,int N){
+ 
+-	this->matrix=NewMat(M,N);
++	this->matrix=NewMat(M,N,IssmComm::GetComm());
+ }
+ /*}}}*/
+ /*FUNCTION PetscMat::PetscMat(int M,int N, IssmDouble sparsity){{{*/
+@@ -127,7 +127,7 @@
+ 
+ 	_assert_(this->matrix);
+ 	_assert_(X->vector);
+-	MatMultPatch(this->matrix,X->vector,AX->vector);
++	MatMultPatch(this->matrix,X->vector,AX->vector,IssmComm::GetComm());
+ 
+ }
+ /*}}}*/
+@@ -149,7 +149,7 @@
+ 
+ 	 IssmDouble* output=NULL;
+ 
+-	 MatToSerial(&output,this->matrix);
++	 MatToSerial(&output,this->matrix,IssmComm::GetComm());
+ 	 return output;
+ 
+ }
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp	(revision 13594)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp	(revision 13595)
+@@ -166,7 +166,7 @@
+ IssmDouble* PetscVec::ToMPISerial(void){
+ 	
+ 	IssmDouble* vec_serial=NULL;
+-	VecToMPISerial(&vec_serial, this->vector);
++	VecToMPISerial(&vec_serial, this->vector,IssmComm::GetComm());
+ 	return vec_serial;
+ 
+ }
Index: /issm/oecreview/Archive/13393-13976/ISSM-13595-13596.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13595-13596.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13595-13596.diff	(revision 13980)
@@ -0,0 +1,68 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13595)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13596)
+@@ -47,7 +47,7 @@
+ 	return outmatrix;
+ }
+ /*}}}*/
+-/*NewMat(int M,int N,double sparsity){{{*/
++/*NewMat(int M,int N,double sparsity,COMM comm){{{*/
+ Mat NewMat(int M,int N,double sparsity,COMM comm){
+ 
+ 	/*output:*/
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13595)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13596)
+@@ -23,7 +23,6 @@
+ 
+ int VecTranspose(Vec* tvector,Vec vector);
+ int VecToMPISerial(double** pgathered_vector, Vec vector,COMM comm);
+-void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm);
+ void MatFree(Mat* pmat);
+ void ISFree(IS* pis);
+ void VecFree(Vec* pvec);
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13595)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13596)
+@@ -36,7 +36,7 @@
+ /*FUNCTION PetscMat::PetscMat(int M,int N, IssmDouble sparsity){{{*/
+ PetscMat::PetscMat(int M,int N, IssmDouble sparsity){
+ 
+-	this->matrix=NewMat(M,N,sparsity);
++	this->matrix=NewMat(M,N,sparsity,IssmComm::GetComm());
+ }
+ /*}}}*/
+ /*FUNCTION PetscMat(IssmDouble* serial_mat,int M,int N,IssmDouble sparsity){{{*/
+@@ -53,7 +53,7 @@
+ 	for(i=0;i<N;i++)idxn[i]=i;
+ 
+ 
+-	this->matrix=NewMat(M,N,sparsity);
++	this->matrix=NewMat(M,N,sparsity,IssmComm::GetComm());
+ 	MatSetValues(this->matrix,M,idxm,N,idxn,serial_mat,INSERT_VALUES);
+ 	MatAssemblyBegin(this->matrix,MAT_FINAL_ASSEMBLY);
+ 	MatAssemblyEnd(this->matrix,MAT_FINAL_ASSEMBLY);
+@@ -66,7 +66,7 @@
+ /*FUNCTION PetscMat::PetscMat(int M,int N, int connectivity, int numberofdofspernode){{{*/
+ PetscMat::PetscMat(int M,int N, int connectivity,int numberofdofspernode){
+ 	
+-	this->matrix=NewMat(M,N,connectivity,numberofdofspernode);
++	this->matrix=NewMat(M,N,connectivity,numberofdofspernode,IssmComm::GetComm());
+ 
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13595)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13596)
+@@ -770,7 +770,6 @@
+ 					./toolkits/petsc/patches/VecDuplicatePatch.cpp\
+ 					./toolkits/petsc/patches/KSPFree.cpp\
+ 					./toolkits/petsc/patches/MatFree.cpp\
+-					./toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp\
+ 					./toolkits/petsc/patches/VecPartition.cpp\
+ 					./toolkits/petsc/patches/MatInvert.cpp\
+ 					./toolkits/petsc/patches/MatMultPatch.cpp\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13596-13597.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13596-13597.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13596-13597.diff	(revision 13980)
@@ -0,0 +1,102 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatInvert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatInvert.cpp	(revision 13596)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatInvert.cpp	(revision 13597)
+@@ -1,73 +0,0 @@
+-/*!\file:  MatInvert.cpp
+- * \brief  invert petsc matrix using LU factorization, and multiple right hand sides.
+- */ 
+-
+-/*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
+-
+-#include "../../../shared/shared.h"
+-#include "../../../include/include.h"
+-
+-void MatInvert(Mat* pinv, Mat matrix){
+-
+-
+-	/*output: */
+-	Mat inv=NULL;
+-
+-	/*intermediary: */
+-	int M,N;
+-	double sparsity=.001;
+-
+-	Mat factored_matrix=NULL;
+-	Mat identity=NULL;
+-	Vec diagonal=NULL;
+-	KSP ksp=NULL;
+-	PC pc=NULL;
+-
+-	/*Some checks: */
+-	MatGetSize(matrix,&M,&N);
+-	if(M!=N) _error_("trying to invert a non square matrix!");
+-
+-	/*Create identitiy matrix: */
+-	identity=NewMat(M,N,sparsity);
+-	diagonal=NewVec(M);
+-	VecSet(diagonal,1.0);
+-	MatDiagonalSet(identity,diagonal,INSERT_VALUES);
+-	MatAssemblyBegin(identity,MAT_FINAL_ASSEMBLY);
+-	MatAssemblyEnd(identity,MAT_FINAL_ASSEMBLY);
+-	MatConvert(identity, MATMPIDENSE,MAT_REUSE_MATRIX,&identity);
+-	
+-	/*Initialize inverse: */
+-	MatDuplicate(identity,MAT_DO_NOT_COPY_VALUES,&inv);
+-
+-	/* Compute X=inv(A) by MatMatSolve(), from tests in petsc test27 */
+-	KSPCreate(PETSC_COMM_WORLD,&ksp);
+-	KSPSetOperators(ksp,matrix,matrix,DIFFERENT_NONZERO_PATTERN);
+-	KSPGetPC(ksp,&pc);
+-	PCSetType(pc,PCLU);
+-	KSPSetUp(ksp);
+-	//PCGetFactoredMatrix(pc,&factored_matrix); //not found any replacement yet
+-	MatMatSolve(factored_matrix,identity,inv);
+-
+-	/*Assemble inverse: */
+-	MatAssemblyBegin(inv,MAT_FINAL_ASSEMBLY);
+-	MatAssemblyEnd(inv,MAT_FINAL_ASSEMBLY);
+-		
+-	MatConvert(inv, MATMPIAIJ,MAT_REUSE_MATRIX,&inv);
+-	
+-	/*Free ressources:*/
+-	MatFree(&identity);
+-	VecFree(&diagonal);
+-	#if _PETSC_MAJOR_ < 3 || (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 2)
+-	KSPDestroy(ksp);
+-	#else
+-	KSPDestroy(&ksp);
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pinv=inv;
+-
+-}
+-
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13596)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13597)
+@@ -30,7 +30,6 @@
+ void VecPartition(Vec* poutvector,Vec vectorA, double* row_partition_vector, int row_partition_vector_size,bool kffpartitioning);
+ int MatPartition(Mat* poutmatrix,Mat matrixA,double* row_partition_vector,int row_partition_vector_size ,
+ 		double* col_partition_vector,int col_partition_vector_size);
+-void MatInvert(Mat* pInv, Mat Matrix);
+ void PetscOptionsInsertMultipleString(char* options_string);
+ void PetscOptionsDetermineSolverType(int* psolver_type);
+ void VecMerge(Vec A, Vec B, double* row_partition_vector,int row_partition_size);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13596)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13597)
+@@ -771,7 +771,6 @@
+ 					./toolkits/petsc/patches/KSPFree.cpp\
+ 					./toolkits/petsc/patches/MatFree.cpp\
+ 					./toolkits/petsc/patches/VecPartition.cpp\
+-					./toolkits/petsc/patches/MatInvert.cpp\
+ 					./toolkits/petsc/patches/MatMultPatch.cpp\
+ 					./toolkits/petsc/patches/ISSMToPetscMatrixType.cpp\
+ 					./toolkits/petsc/patches/ISSMToPetscInsertMode.cpp\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13597-13598.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13597-13598.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13597-13598.diff	(revision 13980)
@@ -0,0 +1,103 @@
+Index: ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp	(revision 13597)
++++ ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp	(revision 13598)
+@@ -14,7 +14,7 @@
+ 
+ void PlapackInvertMatrixLocalCleanup(PLA_Obj* pa,PLA_Template* ptempl,double** parrayA,int** pidxnA,MPI_Comm* pcomm_2d);
+ 	
+-int PlapackInvertMatrix(Mat* A,Mat* inv_A,int status,int con){ 
++int PlapackInvertMatrix(Mat* A,Mat* inv_A,int status,int con,COMM comm){ 
+ 	/*inv_A does not yet exist, inv_A was just allocated, that's all*/
+ 
+ 	/*Error management*/
+@@ -75,7 +75,7 @@
+ 	/*Verify that plapack is not already initialized: */
+ 	if(PLA_Initialized(NULL)==TRUE)PLA_Finalize();
+ 	/* Create a 2D communicator */
+-	PLA_Comm_1D_to_2D(MPI_COMM_WORLD,nprows,npcols,&comm_2d); 
++	PLA_Comm_1D_to_2D(comm,nprows,npcols,&comm_2d); 
+ 
+ 	/*Initlialize plapack: */
+ 	PLA_Init(comm_2d);
+Index: ../trunk-jpl/src/c/toolkits/plapack/patches/plapackpatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/patches/plapackpatches.h	(revision 13597)
++++ ../trunk-jpl/src/c/toolkits/plapack/patches/plapackpatches.h	(revision 13598)
+@@ -5,8 +5,8 @@
+ #ifndef _PLAPACK_PATCHES_H_
+ #define _PLAPACK_PATCHES_H_
+ 
+-int PlapackInvertMatrix(Mat* A,Mat* inv_A,int status,int con);
+-int PlapackToPetsc(Mat* A,int local_mA,int local_nA,int mA,int nA,MatType type,PLA_Obj a,PLA_Template templ,int nprows,int npcols,int nb);
++int PlapackInvertMatrix(Mat* A,Mat* inv_A,int status,int con,COMM comm);
++int PlapackToPetsc(Mat* A,int local_mA,int local_nA,int mA,int nA,MatType type,PLA_Obj a,PLA_Template templ,int nprows,int npcols,int nb,COMM comm);
+ int CyclicalFactorization(int* pnprows,int* pnpcols,int num_procs);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp	(revision 13597)
++++ ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp	(revision 13598)
+@@ -5,7 +5,7 @@
+ #include "../../petsc/petscincludes.h"
+ #include "../plapackincludes.h"
+ 
+-int PlapackToPetsc(Mat* A,int local_mA,int local_nA,int mA,int nA,MatType type,PLA_Obj a,PLA_Template templ,int nprows,int npcols,int nb){
++int PlapackToPetsc(Mat* A,int local_mA,int local_nA,int mA,int nA,MatType type,PLA_Obj a,PLA_Template templ,int nprows,int npcols,int nb,COMM comm){
+ 
+ 	
+ 	int i;
+@@ -27,10 +27,10 @@
+ 		/*See pretty large here, because we have no idea how many nnz per row*/
+ 		d_nz=nA/2;
+ 		o_nz=nA/2;
+-		MatCreateMPIAIJ(MPI_COMM_WORLD,local_mA,local_nA, mA,nA,d_nz,PETSC_NULL,o_nz,PETSC_NULL,A);
++		MatCreateMPIAIJ(comm,local_mA,local_nA, mA,nA,d_nz,PETSC_NULL,o_nz,PETSC_NULL,A);
+ 	}
+ 	else if(strcasecmp_eq(type,MATMPIDENSE)){
+-		MatCreateMPIDense(MPI_COMM_WORLD,local_mA,local_nA, mA,nA,PETSC_NULL,A); 
++		MatCreateMPIDense(comm,local_mA,local_nA, mA,nA,PETSC_NULL,A); 
+ 	}
+ 	
+ 	MatGetOwnershipRange(*A,&lower_row,&upper_row);
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13597)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13598)
+@@ -17,7 +17,7 @@
+ 
+ /*Function prototypes: */
+ int MatMultCompatible(Mat A,Vec x,COMM comm);
+-void VecRelocalize(Vec* outvector,Vec vector,int m);
++void VecRelocalize(Vec* outvector,Vec vector,int m,COMM comm);
+ 
+ void MatMultPatch(Mat A,Vec X, Vec AX,COMM comm){ //same prototype as MatMult in Petsc
+ 
+@@ -31,7 +31,7 @@
+ 	}
+ 	else{
+ 		MatGetLocalSize(A,&m,&n);;
+-		VecRelocalize(&X_rel,X,n);
++		VecRelocalize(&X_rel,X,n,comm);
+ 		MatMult(A,X_rel,AX); ;
+ 		#if _PETSC_MAJOR_ < 3 || (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 2)
+ 		VecDestroy(X_rel);
+@@ -68,7 +68,7 @@
+ 	return result;
+ }
+ 
+-void VecRelocalize(Vec* poutvector,Vec vector,int m){
++void VecRelocalize(Vec* poutvector,Vec vector,int m,COMM comm){
+ 
+ 	/*vector index and vector values*/
+ 	int* index=NULL;
+@@ -79,7 +79,7 @@
+ 	Vec outvector=NULL;
+ 	
+ 	/*Create outvector with local size m*/
+-	VecCreate(PETSC_COMM_WORLD,&outvector); ; 
++	VecCreate(comm,&outvector); ; 
+ 	VecSetSizes(outvector,m,PETSC_DECIDE); ; 
+ 	VecSetFromOptions(outvector); ; 
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13598-13599.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13598-13599.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13598-13599.diff	(revision 13980)
@@ -0,0 +1,160 @@
+Index: ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp	(revision 13598)
++++ ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp	(revision 13599)
+@@ -27,11 +27,11 @@
+ 
+ 	/*allocate: */
+ 	gsize=nodes->NumberOfDofs(configuration_type,GsetEnum);
+-	smearedvector=NewVec(gsize);
++	smearedvector=NewVec(gsize,IssmComm::GetComm());
+ 	
+-	x=NewVec(gsize);
+-	y=NewVec(gsize);
+-	z=NewVec(gsize);
++	x=NewVec(gsize,IssmComm::GetComm());
++	y=NewVec(gsize,IssmComm::GetComm());
++	z=NewVec(gsize,IssmComm::GetComm());
+ 
+ 	for(i=0;i<nodes->Size();i++){
+ 
+Index: ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.cpp	(revision 13598)
++++ ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.cpp	(revision 13599)
+@@ -16,7 +16,7 @@
+ 	Vec riftproperties=NULL;
+ 
+ 	/*Allocate grad_g: */
+-	riftproperties=NewVec(numrifts);
++	riftproperties=NewVec(numrifts,IssmComm::GetComm());
+ 
+ 	/*Compute rift properties : */
+ 	loads->OutputRifts(riftproperties);
+Index: ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp	(revision 13598)
++++ ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp	(revision 13599)
+@@ -69,7 +69,7 @@
+ 	_assert_(Kff);
+ 	MatGetSize(Kff,&global_m,&global_n); _assert_(global_m==global_m);
+ 	if(!global_n){
+-		*puf=NewVec(0); return;
++		*puf=NewVec(0,IssmComm::GetComm()); return;
+ 	}
+ 
+ 	/*Initial guess */
+@@ -85,7 +85,7 @@
+ 		VecDuplicate(uf0,&uf); VecCopy(uf0,uf);
+ 	}
+ 	else{
+-		MatGetLocalSize(Kff,&local_m,&local_n);uf=NewVec(local_n,fromlocalsize);
++		MatGetLocalSize(Kff,&local_m,&local_n);uf=NewVec(local_n,IssmComm::GetComm(),fromlocalsize);
+ 	}
+ 
+ 	/*Process petsc options to see if we are using special types of external solvers*/
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecPartition.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecPartition.cpp	(revision 13598)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecPartition.cpp	(revision 13599)
+@@ -99,7 +99,7 @@
+ 		 * are running with the special kffpartition schema: */
+ 		if(kffpartition){
+ 			VecFree(&outvector);
+-			outvector=NewVec(row_partition_vector_size);
++			outvector=NewVec(row_partition_vector_size,MPI_COMM_WORLD);
+ 		}
+ 
+ 		if (count){
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecTranspose.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecTranspose.cpp	(revision 13598)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecTranspose.cpp	(revision 13599)
+@@ -24,7 +24,7 @@
+ 	VecGetSize(vector,&size);
+ 	
+ 	/*Create new vector of same size: */
+-	tvector=NewVec(size);
++	tvector=NewVec(size,MPI_COMM_WORLD);
+ 
+ 	/*Extract values locally from input vector: */
+ 	VecGetOwnershipRange(vector,&lower_row,&upper_row);
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/SerialToVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/SerialToVec.cpp	(revision 13598)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/SerialToVec.cpp	(revision 13599)
+@@ -29,7 +29,7 @@
+ 	
+ 		
+ 	/*Create parallel vector: */
+-	outvector=NewVec(vector_size);
++	outvector=NewVec(vector_size,MPI_COMM_WORLD);
+ 
+ 	/*plug values from local vector into new parallel vector: */
+ 	VecGetOwnershipRange(outvector,&lower_row,&upper_row);
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 13598)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 13599)
+@@ -16,7 +16,7 @@
+ #include "./petscpatches.h"
+ #include "../../mpi/patches/mpipatches.h"
+ 
+-Vec NewVec(int size,bool fromlocalsize){
++Vec NewVec(int size,COMM comm,bool fromlocalsize){
+ 
+ 	int ierr;
+ 	int local_size;
+@@ -32,7 +32,7 @@
+ 		local_size=DetermineLocalSize(size);
+ 	}
+ 	
+-	VecCreate(PETSC_COMM_WORLD,&vector); 
++	VecCreate(comm,&vector); 
+ 	
+ 	VecSetSizes(vector,local_size,PETSC_DECIDE); 
+ 	VecSetFromOptions(vector); 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13598)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13599)
+@@ -16,7 +16,7 @@
+ 
+ class Parameters;
+ 
+-Vec NewVec(int size,bool fromlocalsize=false);
++Vec NewVec(int size,COMM comm,bool fromlocalsize=false);
+ Mat NewMat(int M,int N,COMM comm);
+ Mat NewMat(int M,int N,double sparsity,COMM comm);
+ Mat NewMat(int M,int N,int connectivity,int numberofdofspernode, COMM comm);
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp	(revision 13598)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp	(revision 13599)
+@@ -29,7 +29,7 @@
+ /*FUNCTION PetscVec::PetscVec(int M,bool fromlocalsize){{{*/
+ PetscVec::PetscVec(int M,bool fromlocalsize){
+ 	
+-	this->vector=NewVec(M,fromlocalsize);
++	this->vector=NewVec(M,IssmComm::GetComm(),fromlocalsize);
+ 
+ }
+ /*}}}*/
+@@ -37,7 +37,7 @@
+ PetscVec::PetscVec(Vec petsc_vec){
+ 
+ 	if(petsc_vec==NULL){
+-		this->vector=NewVec(0);
++		this->vector=NewVec(0,IssmComm::GetComm());
+ 	}
+ 	else{
+ 		/*copy vector*/
+@@ -54,7 +54,7 @@
+ 	if(M)idxm=xNew<int>(M);
+ 	for(int i=0;i<M;i++) idxm[i]=i;
+ 
+-	this->vector=NewVec(M);
++	this->vector=NewVec(M,IssmComm::GetComm());
+ 	VecSetValues(this->vector,M,idxm,serial_vec,INSERT_VALUES);
+ 	VecAssemblyBegin(this->vector);
+ 	VecAssemblyEnd(this->vector);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13599-13600.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13599-13600.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13599-13600.diff	(revision 13980)
@@ -0,0 +1,304 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecPartition.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecPartition.cpp	(revision 13599)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecPartition.cpp	(revision 13600)
+@@ -1,118 +0,0 @@
+-/*!\file:  VecPartition.cpp
+- * \brief  partition vector according to a node set
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
+-
+-#include "../../../shared/shared.h"
+-
+-void VecPartition(Vec* poutvector,Vec vectorA, double* row_partition_vector, int row_partition_vector_size,bool kffpartition){
+-
+-		
+-	int i;
+-	
+-	/*Petsc matrix*/
+-	int* node_rows=NULL;
+-	double* values=NULL;
+-	int count;
+-	int lower_row,upper_row,range;
+-
+-	/*Input*/
+-	int MA; //Vector dimension
+-
+-	/*output*/
+-	Vec outvector=NULL;
+-
+-	
+-	/*Get size of input vector: */
+-	VecGetSize(vectorA,&MA);
+-	
+-    /*Condense out*/
+-
+-    /*If the partitioning row vector has a 0 dimension, we return a NILL vector*/
+-    if (row_partition_vector_size==0){
+-		VecCreate(PETSC_COMM_WORLD,&outvector);   
+-		VecSetSizes(outvector,PETSC_DECIDE,0);
+-		VecSetFromOptions(outvector);
+-		
+-		VecAssemblyBegin(outvector);
+-		VecAssemblyEnd(outvector);
+-	}
+-	else{
+-		/*Locally get values and build a new vector which is a subvector*/
+-		
+-		VecGetOwnershipRange(vectorA,&lower_row,&upper_row);
+-		upper_row--;
+-		range=upper_row-lower_row+1;
+-
+-		if (range){
+-			node_rows=xNew<int>(range); //this is the maximum number of rows one node can extract.
+-		
+-			count=0;
+-			for (i=0;i<row_partition_vector_size;i++){
+-				if ( ((int)(*(row_partition_vector+i))>=(lower_row+1)) && ((int)(*(row_partition_vector+i))<=(upper_row+1)) ){
+-					*(node_rows+count)=(int)*(row_partition_vector+i)-1;
+-					count++;
+-				}
+-			}
+-		}
+-		else{
+-			count=0;
+-		}
+-					
+-     	if (count){
+-			values=xNew<double>(count); //holder for the values to be extracted from vectorA
+-		}
+-		else{
+-			xDelete<int>(node_rows); //count=0 means no values was condensed out for this node. null node_rows for use in VecGetValues.
+-			values=NULL;
+-		}
+-
+-		if (count){
+-			VecGetValues(vectorA,count,node_rows,values);
+-		}
+-		
+-		/*Ok, each node now have count values corresponding to the node_rows extracted values from vectorA.
+-		 * From count and values, create a new vector*/
+-		VecCreate(PETSC_COMM_WORLD,&outvector);
+-		VecSetSizes(outvector,count,PETSC_DECIDE);
+-		VecSetFromOptions(outvector);
+-		VecGetOwnershipRange(outvector,&lower_row,&upper_row);
+-
+-		/*build new node_rows index.*/
+-		if (count){
+-			for (i=0;i<count;i++){
+-				*(node_rows+i)=lower_row+i;
+-			}
+-		}
+-		
+-		/* outvector should not be partitioned like it was previously, but according to row_partition_vector_size, this in case we 
+-		 * are running with the special kffpartition schema: */
+-		if(kffpartition){
+-			VecFree(&outvector);
+-			outvector=NewVec(row_partition_vector_size,MPI_COMM_WORLD);
+-		}
+-
+-		if (count){
+-			VecSetValues(outvector,count,node_rows,values,INSERT_VALUES);
+-		}
+-		
+-		/*Assemble vector*/
+-		VecAssemblyBegin(outvector);
+-		VecAssemblyEnd(outvector);
+-	}
+-	
+-	/*Assign output pointers:*/
+-	*poutvector=outvector;
+-	xDelete<int>(node_rows);
+-	xDelete<double>(values);
+-}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecTranspose.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecTranspose.cpp	(revision 13599)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecTranspose.cpp	(revision 13600)
+@@ -1,66 +0,0 @@
+-/*! \file VecTranspose.cpp
+- *  \brief: transpose of a petsc vector
+- */
+-
+-#include "./petscpatches.h"
+-#include "../../../shared/shared.h"
+-
+-int VecTranspose(Vec* ptvector,Vec vector){
+-
+-	int i;
+-	int size;
+-	int lower_row,upper_row,range;
+-	
+-	int* idxm=NULL;
+-	double* values=NULL;
+-
+-	int* tidxm=NULL;
+-	double* tvalues=NULL;
+-	
+-	/*output: */
+-	Vec tvector=NULL;
+-
+-	/*Get size of input vector: */
+-	VecGetSize(vector,&size);
+-	
+-	/*Create new vector of same size: */
+-	tvector=NewVec(size,MPI_COMM_WORLD);
+-
+-	/*Extract values locally from input vector: */
+-	VecGetOwnershipRange(vector,&lower_row,&upper_row);
+-	upper_row--;
+-	range=upper_row-lower_row+1;    
+-
+-	if (range){
+-		idxm=xNew<int>(range); 
+-		tidxm=xNew<int>(range); 
+-		for (i=0;i<range;i++){
+-			*(idxm+i)=lower_row+i;
+-		} 
+-		values=xNew<double>(range);
+-		tvalues=xNew<double>(range);
+-		
+-		VecGetValues(vector,range,idxm,values);
+-		
+-		/*Transfer values into tidxm, and idxm into tvalues: */
+-		for (i=0;i<range;i++){
+-			tidxm[i]=(int)values[i];
+-			tvalues[i]=(double)idxm[i];
+-		}
+-		VecSetValues(tvector,range,tidxm,tvalues,INSERT_VALUES);
+-	}
+-
+-	/*Assemble: */
+-	VecAssemblyBegin(tvector);
+-	VecAssemblyEnd(tvector);
+-
+-	/*Free ressources: */
+-	xDelete<int>(idxm);
+-	xDelete<double>(values);
+-	xDelete<int>(tidxm);
+-	xDelete<double>(tvalues);
+-
+-	/*Assign output pointers: */
+-	*ptvector=tvector;
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/SerialToVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/SerialToVec.cpp	(revision 13599)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/SerialToVec.cpp	(revision 13600)
+@@ -1,60 +0,0 @@
+-/* \file SerialToVec.cpp
+- * \brief: convert a serial vector on all cpus into a parallel vector
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
+-
+-#include "../../../shared/shared.h"
+-
+-Vec  SerialToVec(double* vector,int vector_size){
+-
+-	int i;
+-
+-	/*output: */
+-	Vec outvector=NULL;
+-
+-	/*petsc indices: */
+-	int* idxn=NULL;
+-	double* values=NULL;
+-	int lower_row,upper_row,range;
+-	
+-		
+-	/*Create parallel vector: */
+-	outvector=NewVec(vector_size,MPI_COMM_WORLD);
+-
+-	/*plug values from local vector into new parallel vector: */
+-	VecGetOwnershipRange(outvector,&lower_row,&upper_row);
+-	upper_row--;
+-	range=upper_row-lower_row+1;    
+-
+-	if (range){
+-		idxn=xNew<int>(range); 
+-		values=xNew<double>(range);
+-		for (i=0;i<range;i++){
+-			idxn[i]=lower_row+i;
+-			values[i]=vector[idxn[i]];
+-		}
+-
+-		VecSetValues(outvector,range,idxn,values,INSERT_VALUES);
+-	}
+-
+-
+-	/*Assemble vector: */
+-	VecAssemblyBegin(outvector);
+-	VecAssemblyEnd(outvector);
+-
+-	/*Free ressources:*/
+-	xDelete<int>(idxn);
+-	xDelete<double>(values);
+-
+-	return outvector;
+-}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13599)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13600)
+@@ -21,13 +21,11 @@
+ Mat NewMat(int M,int N,double sparsity,COMM comm);
+ Mat NewMat(int M,int N,int connectivity,int numberofdofspernode, COMM comm);
+ 
+-int VecTranspose(Vec* tvector,Vec vector);
+ int VecToMPISerial(double** pgathered_vector, Vec vector,COMM comm);
+ void MatFree(Mat* pmat);
+ void ISFree(IS* pis);
+ void VecFree(Vec* pvec);
+ void KSPFree(KSP* pksp);
+-void VecPartition(Vec* poutvector,Vec vectorA, double* row_partition_vector, int row_partition_vector_size,bool kffpartitioning);
+ int MatPartition(Mat* poutmatrix,Mat matrixA,double* row_partition_vector,int row_partition_vector_size ,
+ 		double* col_partition_vector,int col_partition_vector_size);
+ void PetscOptionsInsertMultipleString(char* options_string);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13599)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13600)
+@@ -755,7 +755,6 @@
+ 					./toolkits/petsc/patches\
+ 					./toolkits/petsc/patches/SolverEnum.h\
+ 					./toolkits/petsc/patches/petscpatches.h\
+-					./toolkits/petsc/patches/VecTranspose.cpp\
+ 					./toolkits/petsc/patches/VecToMPISerial.cpp\
+ 					./toolkits/petsc/patches/MatToSerial.cpp\
+ 					./toolkits/petsc/patches/VecMerge.cpp\
+@@ -763,14 +762,12 @@
+ 					./toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp\
+ 					./toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp\
+ 					./toolkits/petsc/patches/NewMat.cpp\
+-					./toolkits/petsc/patches/SerialToVec.cpp\
+ 					./toolkits/petsc/patches/VecFree.cpp\
+ 					./toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp\
+ 					./toolkits/petsc/patches/PetscVectorToDoubleVector.cpp\
+ 					./toolkits/petsc/patches/VecDuplicatePatch.cpp\
+ 					./toolkits/petsc/patches/KSPFree.cpp\
+ 					./toolkits/petsc/patches/MatFree.cpp\
+-					./toolkits/petsc/patches/VecPartition.cpp\
+ 					./toolkits/petsc/patches/MatMultPatch.cpp\
+ 					./toolkits/petsc/patches/ISSMToPetscMatrixType.cpp\
+ 					./toolkits/petsc/patches/ISSMToPetscInsertMode.cpp\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13600-13601.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13600-13601.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13600-13601.diff	(revision 13980)
@@ -0,0 +1,150 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 13600)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 13601)
+@@ -15,8 +15,8 @@
+ void MatToSerial(double** poutmatrix,Mat matrix,COMM comm){
+ 
+ 	int i;
+-	extern int my_rank;
+-	extern int num_procs;
++	int my_rank2;
++	int num_procs2;
+ 	
+ 	/*Petsc variables*/
+ 	PetscInt lower_row,upper_row; 
+@@ -28,6 +28,10 @@
+ 	double* local_matrix=NULL; /*matrix local to each node used for temporary holding matrix values*/
+ 	int buffer[3];
+ 	
++	/*recover my_rank2 and num_procs2:*/
++	MPI_Comm_size(comm,&num_procs2);
++	MPI_Comm_rank(comm,&my_rank2);
++
+ 	/*Output*/
+ 	double* outmatrix=NULL;
+ 	
+@@ -40,7 +44,7 @@
+ 	range=upper_row-lower_row+1;
+ 	
+ 	/*Local and global allocation*/
+-	if (my_rank==0)outmatrix=xNew<double>(M*N);
++	if (my_rank2==0)outmatrix=xNew<double>(M*N);
+ 	
+ 	if (range){
+ 		local_matrix=xNew<double>(N*range);
+@@ -60,20 +64,20 @@
+ 	/*Now each node holds its local_matrix containing range rows. 
+ 	 * We send these rows to the matrix on node 0*/
+ 	
+-	for (i=1;i<num_procs;i++){
+-		if (my_rank==i){ 
+-			buffer[0]=my_rank;
++	for (i=1;i<num_procs2;i++){
++		if (my_rank2==i){ 
++			buffer[0]=my_rank2;
+ 			buffer[1]=lower_row;
+ 			buffer[2]=range;
+ 			MPI_Send(buffer,3,MPI_INT,0,1,comm);   
+ 			if (range)MPI_Send(local_matrix,N*range,MPI_DOUBLE,0,1,comm); 
+ 		}
+-		if (my_rank==0){
++		if (my_rank2==0){
+ 			MPI_Recv(buffer,3,MPI_INT,i,1,comm,&status); 
+ 			if (buffer[2])MPI_Recv(outmatrix+(buffer[1]*N),N*buffer[2],MPI_DOUBLE,i,1,comm,&status);
+ 		}
+ 	} 
+-	if (my_rank==0){ 
++	if (my_rank2==0){ 
+ 		//Still have the local_matrix on node 0 to take care of.
+ 		memcpy(outmatrix,local_matrix,N*range*sizeof(double));
+ 	} 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 13600)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 13601)
+@@ -15,8 +15,8 @@
+ int VecToMPISerial(double** pgathered_vector, Vec vector,COMM comm){
+ 	
+ 	int i;
+-	extern int num_procs; 
+-	extern int my_rank;
++	int num_procs2; 
++	int my_rank2;
+ 
+ 	/*Petsc*/
+ 	MPI_Status status;
+@@ -33,6 +33,10 @@
+ 	
+ 	/*Output*/
+ 	double* gathered_vector=NULL; //Global vector holding the final assembled vector on all nodes.
++	
++	/*recover my_rank2 and num_procs2*/
++	MPI_Comm_size(comm,&num_procs2);
++	MPI_Comm_rank(comm,&my_rank2);
+ 
+ 	VecGetSize(vector,&vector_size);
+ 	if(vector_size==0){
+@@ -60,21 +64,21 @@
+ 
+ 	/*Now each node holds its local_vector containing range rows. 
+ 	 * We send this local_vector  to the gathered_vector on node 0*/
+-	for (i=1;i<num_procs;i++){
+-		if (my_rank==i){ 
+-			buffer[0]=my_rank;
++	for (i=1;i<num_procs2;i++){
++		if (my_rank2==i){ 
++			buffer[0]=my_rank2;
+ 			buffer[1]=lower_row;
+ 			buffer[2]=range;
+ 			MPI_Send(buffer,3,MPI_INT,0,1,comm);  
+ 			if (range)MPI_Send(local_vector,range,MPI_DOUBLE,0,1,comm); 
+ 		}
+-		if (my_rank==0){
++		if (my_rank2==0){
+ 			MPI_Recv(buffer,3,MPI_INT,i,1,comm,&status); 
+ 			if (buffer[2])MPI_Recv(gathered_vector+buffer[1],buffer[2],MPI_DOUBLE,i,1,comm,&status);
+ 		}
+ 	}
+ 
+-	if (my_rank==0){ 
++	if (my_rank2==0){ 
+ 		//Still have the local_vector on node 0 to take care of.
+ 		if (range)memcpy(gathered_vector+lower_row,local_vector,range*sizeof(double));
+ 	}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp	(revision 13600)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp	(revision 13601)
+@@ -16,9 +16,13 @@
+ void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm){
+ 
+ 	/*externals :*/
+-	extern int my_rank;
+-	extern int num_procs;
++	int my_rank2;
++	int num_procs2;
+ 	
++	/*recover my_rank2 and num_procs2:*/
++	MPI_Comm_size(comm,&num_procs2);
++	MPI_Comm_rank(comm,&my_rank2);
++
+ 	/*output: */
+ 	int lower_row,upper_row;
+ 	
+@@ -27,13 +31,13 @@
+ 	int* allranges=NULL;
+ 
+ 	/*Gather all range values into allranges, for all nodes*/
+-	allranges=xNew<int>(num_procs);
++	allranges=xNew<int>(num_procs2);
+ 	MPI_Allgather(&range,1,MPI_INT,allranges,1,MPI_INT,comm);
+ 
+ 	/*From all ranges, get lower row and upper row*/
+ 	lower_row=0;
+ 	upper_row=lower_row+allranges[0];
+-	for (i=1;i<=my_rank;i++){
++	for (i=1;i<=my_rank2;i++){
+ 		lower_row=lower_row+allranges[i-1];
+ 		upper_row=upper_row+allranges[i];
+ 	}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13601-13602.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13601-13602.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13601-13602.diff	(revision 13980)
@@ -0,0 +1,118 @@
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 13601)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 13602)
+@@ -5,8 +5,9 @@
+ #include <stdio.h>
+ #include <math.h>
+ #include "../../../shared/shared.h"
++#include "../../../include/types.h"
+ 
+-int DetermineLocalSize(int global_size){
++int DetermineLocalSize(int global_size,COMM comm){
+ 
+ 	/*output: */
+ 	int  local_size;
+@@ -17,25 +18,30 @@
+ 	int* num_local_rows=NULL;
+ 
+ 	/*from MPI: */
+-	extern int num_procs;
+-	extern int my_rank;
++	int num_procs2;
++	int my_rank2;
++
++	/*recover my_rank2*/
++	MPI_Comm_rank(comm,&my_rank2);
++	MPI_Comm_size(comm,&num_procs2);
++
+ 	
+ 	/*We are  not bound by any library, just use what seems most logical*/
+-	num_local_rows=xNew<int>(num_procs);    
++	num_local_rows=xNew<int>(num_procs2);    
+ 
+-	for (i=0;i<num_procs;i++){
++	for (i=0;i<num_procs2;i++){
+ 		/*Here, we use floor. We under distribute rows. The rows 
+ 		  left  are then redistributed, therefore resulting in a 
+ 		  more even distribution.*/
+-		num_local_rows[i]=(int)floor((double)global_size/(double)num_procs); 
++		num_local_rows[i]=(int)floor((double)global_size/(double)num_procs2); 
+ 	}
+ 	
+ 	/*There may be some rows left. Distribute evenly.*/ 
+-	row_rest=global_size - num_procs*(int)floor((double)global_size/(double)num_procs);
++	row_rest=global_size - num_procs2*(int)floor((double)global_size/(double)num_procs2);
+ 	for (i=0;i<row_rest;i++){
+ 		num_local_rows[i]++;
+ 	}
+-	local_size=num_local_rows[my_rank];
++	local_size=num_local_rows[my_rank2];
+ 	
+ 	/*free ressources: */
+ 	xDelete<int>(num_local_rows);
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h	(revision 13601)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h	(revision 13602)
+@@ -5,5 +5,9 @@
+ 
+ #ifndef MPI_PATCHES_H_ 
+ #define MPI_PATCHES_H_
+-int DetermineLocalSize(int global_size);
++
++#include "../../../include/types.h"
++
++int DetermineLocalSize(int global_size,COMM comm);
++
+ #endif
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 13601)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 13602)
+@@ -29,7 +29,7 @@
+ 		local_size=size;
+ 	}
+ 	else{
+-		local_size=DetermineLocalSize(size);
++		local_size=DetermineLocalSize(size,comm);
+ 	}
+ 	
+ 	VecCreate(comm,&vector); 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13601)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13602)
+@@ -31,8 +31,8 @@
+ 	int    d_nz,o_nz,nnz;
+ 
+ 	/*Determine local sizes: */
+-	m=DetermineLocalSize(M);
+-	n=DetermineLocalSize(N);
++	m=DetermineLocalSize(M,comm);
++	n=DetermineLocalSize(N,comm);
+ 	
+ 	nnz=(int)((double)M*(double)N*sparsity); //number of non zeros.
+ 	d_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
+@@ -59,8 +59,8 @@
+ 	int    nnz;
+ 
+ 	/*Determine local sizes: */
+-	m=DetermineLocalSize(M);
+-	n=DetermineLocalSize(N);
++	m=DetermineLocalSize(M,comm);
++	n=DetermineLocalSize(N,comm);
+ 	
+ 	nnz=(int)((double)M*(double)N*sparsity); //number of non zeros.
+ 	d_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
+@@ -98,8 +98,8 @@
+ 	#endif
+ 
+ 	/*Determine local sizes: */
+-	m=DetermineLocalSize(M);
+-	n=DetermineLocalSize(N);
++	m=DetermineLocalSize(M,comm);
++	n=DetermineLocalSize(N,comm);
+ 
+ 	/*Figure out number of non zeros per row: */
+ 	d_nz=(int)connectivity*numberofdofspernode/2;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13602-13603.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13602-13603.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13602-13603.diff	(revision 13980)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13602)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13603)
+@@ -49,7 +49,10 @@
+ 	int lower_row,upper_row,range;
+ 	int result=1;
+ 	int sumresult;
+-	extern int num_procs;
++	int num_procs2;
++	
++	/*recover num_procs2:*/
++	MPI_Comm_size(comm,&num_procs2);
+ 
+ 	MatGetLocalSize(A,&local_m,&local_n);;
+ 	VecGetLocalSize(x,&range);;
+@@ -59,7 +62,7 @@
+ 	/*synchronize result: */
+ 	MPI_Reduce (&result,&sumresult,1,MPI_INT,MPI_SUM,0,comm );
+ 	MPI_Bcast(&sumresult,1,MPI_INT,0,comm);                
+-	if (sumresult!=num_procs){
++	if (sumresult!=num_procs2){
+ 		result=0;
+ 	}
+ 	else{
Index: /issm/oecreview/Archive/13393-13976/ISSM-13603-13604.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13603-13604.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13603-13604.diff	(revision 13980)
@@ -0,0 +1,208 @@
+Index: ../trunk-jpl/src/c/Container/Loads.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Loads.cpp	(revision 13603)
++++ ../trunk-jpl/src/c/Container/Loads.cpp	(revision 13604)
+@@ -63,8 +63,8 @@
+ 
+ 	/*figure out total number of loads combining all the cpus (no clones here)*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce(&localloads,&numberofloads,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&numberofloads,1,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Reduce(&localloads,&numberofloads,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&numberofloads,1,MPI_INT,0,IssmComm::GetComm());
+ 	#else
+ 	numberofloads=localloads;
+ 	#endif
+Index: ../trunk-jpl/src/c/Container/Constraints.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Constraints.cpp	(revision 13603)
++++ ../trunk-jpl/src/c/Container/Constraints.cpp	(revision 13604)
+@@ -48,8 +48,8 @@
+ 
+ 	/*figure out total number of constraints combining all the cpus (no clones here)*/
+ 	#ifdef _HAVE_MPI_
+-		MPI_Reduce(&localconstraints,&numberofconstraints,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD );
+-		MPI_Bcast(&numberofconstraints,1,MPI_INT,0,MPI_COMM_WORLD);
++		MPI_Reduce(&localconstraints,&numberofconstraints,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
++		MPI_Bcast(&numberofconstraints,1,MPI_INT,0,IssmComm::GetComm());
+ 	#else
+ 		numberofconstraints=localconstraints;
+ 	#endif
+Index: ../trunk-jpl/src/c/Container/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13603)
++++ ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13604)
+@@ -89,8 +89,8 @@
+ 	 * First: get number of dofs for each cpu*/
+ 	alldofcount=xNew<int>(num_procs2);
+ 	#ifdef _HAVE_MPI_
+-	MPI_Gather(&dofcount,1,MPI_INT,alldofcount,1,MPI_INT,0,MPI_COMM_WORLD);
+-	MPI_Bcast(alldofcount,num_procs2,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Gather(&dofcount,1,MPI_INT,alldofcount,1,MPI_INT,0,IssmComm::GetComm());
++	MPI_Bcast(alldofcount,num_procs2,MPI_INT,0,IssmComm::GetComm());
+ 	#else
+ 	alldofcount[0]=dofcount;
+ 	#endif
+@@ -128,7 +128,7 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce((void*)truedofs,(void*)alltruedofs,numnodes*maxdofspernode,MPI_INT,MPI_MAX,MPI_COMM_WORLD);
++	MPI_Allreduce((void*)truedofs,(void*)alltruedofs,numnodes*maxdofspernode,MPI_INT,MPI_MAX,IssmComm::GetComm());
+ 	#else
+ 	for(i=0;i<numnodes*maxdofspernode;i++)alltruedofs[i]=truedofs[i];
+ 	#endif
+@@ -173,7 +173,7 @@
+ 	 * dealt with by another cpu. We take the minimum because we are going to manage dof assignment in increasing 
+ 	 * order of cpu rank. This is also why we initialized this array to num_procs.*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce((void*)ranks,(void*)minranks,numnodes,MPI_INT,MPI_MIN,MPI_COMM_WORLD);
++	MPI_Allreduce((void*)ranks,(void*)minranks,numnodes,MPI_INT,MPI_MIN,IssmComm::GetComm());
+ 	#else
+ 	for(i=0;i<numnodes;i++)minranks[i]=ranks[i];
+ 	#endif
+@@ -220,7 +220,7 @@
+ 
+ 	/*Grab max of all cpus: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,MPI_COMM_WORLD);
++	MPI_Allreduce ( (void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
+ 	max=allmax;
+ 	#endif
+ 
+@@ -254,7 +254,7 @@
+ 
+ 	/*Gather from all cpus: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)&numdofs,(void*)&allnumdofs,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD);
++	MPI_Allreduce ( (void*)&numdofs,(void*)&allnumdofs,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+ 	#else
+ 	allnumdofs=numdofs;
+ 	#endif
+@@ -281,7 +281,7 @@
+ 
+ 	/*Gather from all cpus: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)&numnodes,(void*)&allnumnodes,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD);
++	MPI_Allreduce ( (void*)&numnodes,(void*)&allnumnodes,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+ 	#else
+ 	allnumnodes=numnodes;
+ 	#endif
+@@ -311,8 +311,8 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&max_sid,&node_max_sid,1,MPI_INT,MPI_MAX,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&node_max_sid,1,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Reduce (&max_sid,&node_max_sid,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_max_sid,1,MPI_INT,0,IssmComm::GetComm());
+ 	max_sid=node_max_sid;
+ 	#endif
+ 
+Index: ../trunk-jpl/src/c/Container/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13603)
++++ ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13604)
+@@ -125,12 +125,12 @@
+ 
+ 	/*Synchronize across cluster, so as to not end up with different sizes for each patch on each cpu: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&numvertices,&max_numvertices,1,MPI_INT,MPI_MAX,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&max_numvertices,1,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Reduce (&numvertices,&max_numvertices,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&max_numvertices,1,MPI_INT,0,IssmComm::GetComm());
+ 	numvertices=max_numvertices;
+ 
+-	MPI_Reduce (&numnodes,&max_numnodes,1,MPI_INT,MPI_MAX,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&max_numnodes,1,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Reduce (&numnodes,&max_numnodes,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&max_numnodes,1,MPI_INT,0,IssmComm::GetComm());
+ 	numnodes=max_numnodes;
+ 	#endif
+ 
+@@ -201,7 +201,7 @@
+ 		#ifdef _HAVE_MPI_
+ 		if(this->Size()) rank=my_rank2;
+ 		else rank=num_procs2;
+-		MPI_Allreduce (&rank,&minrank,1,MPI_INT,MPI_MIN,MPI_COMM_WORLD);
++		MPI_Allreduce (&rank,&minrank,1,MPI_INT,MPI_MIN,IssmComm::GetComm());
+ 		#else
+ 		minrank=my_rank2;
+ 		#endif
+@@ -213,7 +213,7 @@
+ 			element->ListResultsInfo(&resultsenums,&resultssizes,&resultstimes,&resultssteps,&numberofresults);
+ 		}
+ 		#ifdef _HAVE_MPI_
+-		MPI_Bcast(&numberofresults,1,MPI_DOUBLE,minrank,MPI_COMM_WORLD);
++		MPI_Bcast(&numberofresults,1,MPI_DOUBLE,minrank,IssmComm::GetComm());
+ 		#endif
+ 
+ 		/*Get out if there is no results. Otherwise broadcast info*/
+@@ -225,10 +225,10 @@
+ 			resultstimes=xNew<IssmDouble>(numberofresults);
+ 			resultssteps=xNew<int>(numberofresults);
+ 		}
+-		MPI_Bcast(resultsenums,numberofresults,MPI_INT,minrank,MPI_COMM_WORLD);
+-		MPI_Bcast(resultssizes,numberofresults,MPI_INT,minrank,MPI_COMM_WORLD);
+-		MPI_Bcast(resultstimes,numberofresults,MPI_DOUBLE,minrank,MPI_COMM_WORLD);
+-		MPI_Bcast(resultssteps,numberofresults,MPI_INT,minrank,MPI_COMM_WORLD);
++		MPI_Bcast(resultsenums,numberofresults,MPI_INT,minrank,IssmComm::GetComm());
++		MPI_Bcast(resultssizes,numberofresults,MPI_INT,minrank,IssmComm::GetComm());
++		MPI_Bcast(resultstimes,numberofresults,MPI_DOUBLE,minrank,IssmComm::GetComm());
++		MPI_Bcast(resultssteps,numberofresults,MPI_INT,minrank,IssmComm::GetComm());
+ 		#endif
+ 
+ 		/*Loop over all results and get nodal vector*/
+@@ -303,7 +303,7 @@
+ 
+ 	local_nelem=this->Size();
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)&local_nelem,(void*)&numberofelements,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD);
++	MPI_Allreduce ( (void*)&local_nelem,(void*)&numberofelements,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+ 	#else
+ 	numberofelements=local_nelem;
+ 	#endif
+Index: ../trunk-jpl/src/c/Container/Vertices.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13603)
++++ ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13604)
+@@ -65,8 +65,8 @@
+ 	 * First: get number of pids for each cpu*/
+ 	allpidcount=xNew<int>(num_procs2);
+ 	#ifdef _HAVE_MPI_
+-	MPI_Gather(&pidcount,1,MPI_INT,allpidcount,1,MPI_INT,0,MPI_COMM_WORLD);
+-	MPI_Bcast(allpidcount,num_procs2,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Gather(&pidcount,1,MPI_INT,allpidcount,1,MPI_INT,0,IssmComm::GetComm());
++	MPI_Bcast(allpidcount,num_procs2,MPI_INT,0,IssmComm::GetComm());
+ 	#else
+ 	allpidcount[0]=pidcount;
+ 	#endif
+@@ -93,7 +93,7 @@
+ 		vertex->ShowTruePids(truepids);
+ 	}
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce((void*)truepids,(void*)alltruepids,numberofobjects,MPI_INT,MPI_MAX,MPI_COMM_WORLD);
++	MPI_Allreduce((void*)truepids,(void*)alltruepids,numberofobjects,MPI_INT,MPI_MAX,IssmComm::GetComm());
+ 	#else
+ 	for(i=0;i<numberofobjects;i++)alltruepids[i]=truepids[i];
+ 	#endif
+@@ -136,7 +136,7 @@
+ 	 * dealt with by another cpu. We take the minimum because we are going to manage dof assignment in increasing 
+ 	 * order of cpu rank. This is also why we initialized this array to num_procs.*/
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)ranks,(void*)minranks,numberofobjects,MPI_INT,MPI_MIN,MPI_COMM_WORLD);
++	MPI_Allreduce ( (void*)ranks,(void*)minranks,numberofobjects,MPI_INT,MPI_MIN,IssmComm::GetComm());
+ 	#else
+ 	for(i=0;i<numberofobjects;i++)minranks[i]=ranks[i];
+ 	#endif
+@@ -168,8 +168,8 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&max_sid,&vertex_max_sid,1,MPI_INT,MPI_MAX,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&vertex_max_sid,1,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Reduce (&max_sid,&vertex_max_sid,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&vertex_max_sid,1,MPI_INT,0,IssmComm::GetComm());
+ 	max_sid=vertex_max_sid;
+ 	#endif
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13604-13605.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13604-13605.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13604-13605.diff	(revision 13980)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/src/c/Container/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13604)
++++ ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13605)
+@@ -151,19 +151,22 @@
+ void  Nodes::FlagClones(int analysis_type){
+ 
+ 	int i;
+-	extern int num_procs;
++	int num_procs2;
+ 
+ 	int* ranks=NULL;
+ 	int* minranks=NULL;
+ 	int  numnodes;
+ 
++	/*recover num_procs2: */
++	num_procs2=IssmComm::GetSize();
++
+ 	/*Figure out number of nodes for this analysis: */
+ 	numnodes=this->NumberOfNodes(analysis_type);
+ 
+ 	/*Allocate ranks: */
+ 	ranks=xNew<int>(numnodes);
+ 	minranks=xNew<int>(numnodes);
+-	for(i=0;i<numnodes;i++)ranks[i]=num_procs; //no cpu can have rank num_procs. This is the maximum limit.
++	for(i=0;i<numnodes;i++)ranks[i]=num_procs2; //no cpu can have rank num_procs. This is the maximum limit.
+ 
+ 	/*Now go through all our objects and ask them to report to who they belong (which rank): */
+ 	Ranks(ranks,analysis_type);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13605-13606.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13605-13606.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13605-13606.diff	(revision 13980)
@@ -0,0 +1,47 @@
+Index: ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp
+===================================================================
+--- ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp	(revision 13605)
++++ ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp	(revision 13606)
+@@ -8,13 +8,16 @@
+ void WriteLockFile(char* filename){
+ 
+ 	int i;
+-	extern int my_rank;
++	int my_rank2;
++
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 	
+ 	/* output: */
+ 	FILE* fid=NULL;
+ 
+ 	/* Open lock file and write 1 into it: */
+-	if(my_rank==0){
++	if(my_rank2==0){
+ 		fid=fopen(filename,"w");
+ 		if(fid==NULL) _error_("error message: could not open lock file " << filename);
+ 
+Index: ../trunk-jpl/src/c/io/Disk/pfopen.cpp
+===================================================================
+--- ../trunk-jpl/src/c/io/Disk/pfopen.cpp	(revision 13605)
++++ ../trunk-jpl/src/c/io/Disk/pfopen.cpp	(revision 13606)
+@@ -15,7 +15,6 @@
+ FILE* pfopen(char* filename,const char* format){
+ 
+ 	FILE* fid=NULL;
+-	extern int my_rank;
+ 	
+ 	/*Open handle to data on disk: */
+ 	fid=fopen(filename,format);
+Index: ../trunk-jpl/src/c/io/Disk/pfclose.cpp
+===================================================================
+--- ../trunk-jpl/src/c/io/Disk/pfclose.cpp	(revision 13605)
++++ ../trunk-jpl/src/c/io/Disk/pfclose.cpp	(revision 13606)
+@@ -15,7 +15,6 @@
+ void pfclose(FILE* fid,char* filename){
+ 
+ 	/*Close file handle: */
+-	extern int my_rank;
+ 	_assert_(fid);
+ 	if(fclose(fid)!=0)_error_("could not close file " << filename);
+ }
Index: /issm/oecreview/Archive/13393-13976/ISSM-13606-13607.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13606-13607.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13606-13607.diff	(revision 13980)
@@ -0,0 +1,400 @@
+Index: ../trunk-jpl/src/c/classes/Patch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Patch.cpp	(revision 13606)
++++ ../trunk-jpl/src/c/classes/Patch.cpp	(revision 13607)
+@@ -121,8 +121,8 @@
+ 
+ 	/*First, figure out total number of rows combining all the cpus: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Reduce(&this->numrows,&total_numrows,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD );
+-	MPI_Bcast(&total_numrows,1,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Reduce(&this->numrows,&total_numrows,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&total_numrows,1,MPI_INT,0,IssmComm::GetComm());
+ 	#else
+ 	total_numrows=this->numrows;
+ 	#endif
+@@ -144,12 +144,12 @@
+ 	#ifdef _HAVE_MPI_
+ 	for (i=1;i<num_procs;i++){
+ 		if (my_rank==i){ 
+-			MPI_Send(&this->numrows,1,MPI_INT,0,1,MPI_COMM_WORLD);   
+-			if (this->numrows)MPI_Send(this->values,this->numrows*this->numcols,MPI_DOUBLE,0,1,MPI_COMM_WORLD); 
++			MPI_Send(&this->numrows,1,MPI_INT,0,1,IssmComm::GetComm());   
++			if (this->numrows)MPI_Send(this->values,this->numrows*this->numcols,MPI_DOUBLE,0,1,IssmComm::GetComm()); 
+ 		}
+ 		if (my_rank==0){
+-			MPI_Recv(&node_numrows,1,MPI_INT,i,1,MPI_COMM_WORLD,&status); 
+-			if (node_numrows)MPI_Recv(total_values+count,node_numrows*this->numcols,MPI_DOUBLE,i,1,MPI_COMM_WORLD,&status);
++			MPI_Recv(&node_numrows,1,MPI_INT,i,1,IssmComm::GetComm(),&status); 
++			if (node_numrows)MPI_Recv(total_values+count,node_numrows*this->numcols,MPI_DOUBLE,i,1,IssmComm::GetComm(),&status);
+ 			count+=node_numrows*this->numcols;
+ 		}
+ 	}	
+Index: ../trunk-jpl/src/c/classes/objects/Profiler.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Profiler.cpp	(revision 13606)
++++ ../trunk-jpl/src/c/classes/objects/Profiler.cpp	(revision 13607)
+@@ -70,7 +70,7 @@
+ 	 *in the execution: */
+ 	if(!dontmpisync){
+ 		#ifdef _HAVE_MPI_
+-		MPI_Barrier(MPI_COMM_WORLD); 
++		MPI_Barrier(IssmComm::GetComm()); 
+ 		#endif
+ 	}
+ 
+Index: ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp	(revision 13606)
++++ ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp	(revision 13607)
+@@ -116,7 +116,7 @@
+ 		scalar<<=pscalar;
+ 		
+ 		#ifdef _HAVE_MPI_
+-		MPI_Bcast(&scalar,1,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++		MPI_Bcast(&scalar,1,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 		#endif
+ 
+ 
+@@ -150,14 +150,14 @@
+ 			if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+ 		}
+ 		#ifdef _HAVE_MPI_
+-		MPI_Bcast(&M,1,MPI_INT,0,MPI_COMM_WORLD); 
++		MPI_Bcast(&M,1,MPI_INT,0,IssmComm::GetComm()); 
+ 		#endif
+ 
+ 		if(my_rank==0){  
+ 			if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+ 		}
+ 		#ifdef _HAVE_MPI_
+-		MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD); 
++		MPI_Bcast(&N,1,MPI_INT,0,IssmComm::GetComm()); 
+ 		#endif
+ 
+ 		/*Now allocate matrix: */
+@@ -173,7 +173,7 @@
+ 				for (int i=0;i<M*N;++i) matrix[i]<<=buffer[i];  /*we use the <<= ADOLC overloaded operator to declare the independency*/
+ 			}
+ 			#ifdef _HAVE_MPI_
+-			MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++			MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 			#endif
+ 			
+ 			xDelete<IssmPDouble>(buffer);
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13606)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13607)
+@@ -333,7 +333,7 @@
+ 				/*Ok, we have reached the end of the file. break: */
+ 				record_code=0; //0 means bailout
+ 				#ifdef _HAVE_MPI_
+-				MPI_Bcast(&record_code,1,MPI_INT,0,MPI_COMM_WORLD);  /*tell others cpus we are bailing: */
++				MPI_Bcast(&record_code,1,MPI_INT,0,IssmComm::GetComm());  /*tell others cpus we are bailing: */
+ 				#endif
+ 				break;
+ 			}
+@@ -345,11 +345,11 @@
+ 					
+ 				#ifdef _HAVE_MPI_
+ 				/*Tell other cpus what we are doing: */
+-				MPI_Bcast(&record_code,1,MPI_INT,0,MPI_COMM_WORLD);  /*tell other cpus what we are going to do: */
++				MPI_Bcast(&record_code,1,MPI_INT,0,IssmComm::GetComm());  /*tell other cpus what we are going to do: */
+ 
+ 				/*Tell other cpus the name of the data, then branch according to the data type: */
+-				MPI_Bcast(&record_enum,1,MPI_INT,0,MPI_COMM_WORLD);  
+-				MPI_Bcast(&record_length,1,MPI_INT,0,MPI_COMM_WORLD);  
++				MPI_Bcast(&record_enum,1,MPI_INT,0,IssmComm::GetComm());  
++				MPI_Bcast(&record_length,1,MPI_INT,0,IssmComm::GetComm());  
+ 				#endif
+ 				
+ 				switch(record_code){
+@@ -357,7 +357,7 @@
+ 						/*Read the boolean and broadcast it to other cpus:*/
+ 						if(fread(&booleanint,sizeof(int),1,this->fid)!=1) _error_("could not read boolean ");
+ 						#ifdef _HAVE_MPI_
+-						MPI_Bcast(&booleanint,1,MPI_INT,0,MPI_COMM_WORLD); 
++						MPI_Bcast(&booleanint,1,MPI_INT,0,IssmComm::GetComm()); 
+ 						#endif
+ 
+ 						/*create BoolParam: */
+@@ -368,7 +368,7 @@
+ 						/*Read the integer and broadcast it to other cpus:*/
+ 						if(fread(&integer,sizeof(int),1,this->fid)!=1) _error_("could not read integer ");
+ 						#ifdef _HAVE_MPI_
+-						MPI_Bcast(&integer,1,MPI_INT,0,MPI_COMM_WORLD); 
++						MPI_Bcast(&integer,1,MPI_INT,0,IssmComm::GetComm()); 
+ 						#endif
+ 
+ 						/*create IntParam: */
+@@ -385,7 +385,7 @@
+ 						else{
+ 							if(fread(&pscalar,sizeof(IssmPDouble),1,this->fid)!=1) _error_("could not read scalar ");
+ 							#ifdef _HAVE_MPI_
+-							MPI_Bcast(&pscalar,1,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++							MPI_Bcast(&pscalar,1,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 							#endif
+ 							scalar=reCast<IssmDouble>(pscalar);
+ 						}
+@@ -398,7 +398,7 @@
+ 						/*We have to read a string from disk. First read the dimensions of the string, then the string: */
+ 						if(fread(&string_size,sizeof(int),1,this->fid)!=1) _error_("could not read length of string ");
+ 						#ifdef _HAVE_MPI_
+-						MPI_Bcast(&string_size,1,MPI_INT,0,MPI_COMM_WORLD); 
++						MPI_Bcast(&string_size,1,MPI_INT,0,IssmComm::GetComm()); 
+ 						#endif
+ 
+ 						if(string_size){
+@@ -408,7 +408,7 @@
+ 							/*Read string, then broadcast: */
+ 							if(fread(string,string_size*sizeof(char),1,this->fid)!=1)_error_(" could not read string ");
+ 							#ifdef _HAVE_MPI_
+-							MPI_Bcast(string,string_size,MPI_CHAR,0,MPI_COMM_WORLD); 
++							MPI_Bcast(string,string_size,MPI_CHAR,0,IssmComm::GetComm()); 
+ 							#endif
+ 						}
+ 						else{
+@@ -466,17 +466,17 @@
+ 	#ifdef _HAVE_MPI_
+ 	else{ //cpu ~0 {{{
+ 		for(;;){ //wait on cpu 0
+-			MPI_Bcast(&record_code,1,MPI_INT,0,MPI_COMM_WORLD);  /*get from cpu 0 what we are going to do: */
++			MPI_Bcast(&record_code,1,MPI_INT,0,IssmComm::GetComm());  /*get from cpu 0 what we are going to do: */
+ 			if(record_code==0){
+ 				break; //we are done, break from the loop
+ 			}
+ 			else{
+-				MPI_Bcast(&record_enum,1,MPI_INT,0,MPI_COMM_WORLD);   //get from cpu 0 name of the data
+-				MPI_Bcast(&record_length,1,MPI_INT,0,MPI_COMM_WORLD);  
++				MPI_Bcast(&record_enum,1,MPI_INT,0,IssmComm::GetComm());   //get from cpu 0 name of the data
++				MPI_Bcast(&record_length,1,MPI_INT,0,IssmComm::GetComm());  
+ 				switch(record_code){
+ 				case 1: 
+ 					/*boolean. get it from cpu 0 */
+-					MPI_Bcast(&booleanint,1,MPI_INT,0,MPI_COMM_WORLD); 
++					MPI_Bcast(&booleanint,1,MPI_INT,0,IssmComm::GetComm()); 
+ 						
+ 					/*create BoolParam: */
+ 					this->constants->AddObject(new BoolParam(record_enum,(bool)booleanint)); //cast to a boolean
+@@ -484,7 +484,7 @@
+ 
+ 				case 2:
+ 					/*integer. get it from cpu 0 */
+-					MPI_Bcast(&integer,1,MPI_INT,0,MPI_COMM_WORLD); 
++					MPI_Bcast(&integer,1,MPI_INT,0,IssmComm::GetComm()); 
+ 						
+ 					/*create IntParam: */
+ 					this->constants->AddObject(new IntParam(record_enum,integer));
+@@ -492,20 +492,20 @@
+ 					break;
+ 				case 3:
+ 					/*scalar. get it from cpu 0 */
+-					MPI_Bcast(&scalar,1,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++					MPI_Bcast(&scalar,1,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 						
+ 					/*create DoubleParam: */
+ 					this->constants->AddObject(new DoubleParam(record_enum,scalar));
+ 
+ 					break;
+ 				case 4: 
+-					MPI_Bcast(&string_size,1,MPI_INT,0,MPI_COMM_WORLD); 
++					MPI_Bcast(&string_size,1,MPI_INT,0,IssmComm::GetComm()); 
+ 					if(string_size){
+ 						string=xNew<char>((string_size+1));
+ 						string[string_size]='\0';
+ 
+ 						/*Read string from cpu 0: */
+-						MPI_Bcast(string,string_size,MPI_CHAR,0,MPI_COMM_WORLD); 
++						MPI_Bcast(string,string_size,MPI_CHAR,0,IssmComm::GetComm()); 
+ 					}
+ 					else{
+ 						string=xNew<char>(1);
+@@ -560,7 +560,7 @@
+ 		if(fread(&booleanint,sizeof(int),1,fid)!=1) _error_("could not read boolean ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&booleanint,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&booleanint,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	#endif
+ 
+ 	/*cast to bool: */
+@@ -592,7 +592,7 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&integer,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&integer,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	#endif
+ 
+ 	/*Assign output pointers: */
+@@ -623,7 +623,7 @@
+ 		if(fread(&scalar,sizeof(IssmPDouble),1,fid)!=1)_error_("could not read scalar ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&scalar,1,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&scalar,1,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 	#endif
+ 
+ 	/*Assign output pointers: */
+@@ -658,7 +658,7 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&string_size,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&string_size,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	#endif
+ 
+ 	/*Now allocate string: */
+@@ -671,7 +671,7 @@
+ 			if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_(" could not read string ");
+ 		}
+ 		#ifdef _HAVE_MPI_
+-		MPI_Bcast(string,string_size,MPI_CHAR,0,MPI_COMM_WORLD); 
++		MPI_Bcast(string,string_size,MPI_CHAR,0,IssmComm::GetComm()); 
+ 		#endif
+ 	}
+ 	else{
+@@ -714,14 +714,14 @@
+ 	}
+ 
+ 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&M,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&M,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	#endif
+ 
+ 	if(my_rank2==0){  
+ 		if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD);
++	MPI_Bcast(&N,1,MPI_INT,0,IssmComm::GetComm());
+ 	#endif
+ 
+ 	/*Now allocate matrix: */
+@@ -734,7 +734,7 @@
+ 		}
+ 		
+ 		#ifdef _HAVE_MPI_
+-		MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++		MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 		#endif
+ 	}
+ 
+@@ -786,14 +786,14 @@
+ 		if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&M,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&M,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	#endif
+ 
+ 	if(my_rank2==0){  
+ 		if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&N,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	#endif
+ 
+ 	/*Now allocate matrix: */
+@@ -805,7 +805,7 @@
+ 			if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 		}
+ 		#ifdef _HAVE_MPI_
+-		MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++		MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 		#endif
+ 
+ 		_assert_(this->independents);
+@@ -856,7 +856,7 @@
+ 		if(fread(&numstrings,sizeof(int),1,fid)!=1) _error_("could not read length of string array");
+ 	}
+ 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&numstrings,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&numstrings,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	#endif
+ 
+ 	/*Now allocate string array: */
+@@ -871,7 +871,7 @@
+ 				if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
+ 			}
+ 			#ifdef _HAVE_MPI_
+-			MPI_Bcast(&string_size,1,MPI_INT,0,MPI_COMM_WORLD); 
++			MPI_Bcast(&string_size,1,MPI_INT,0,IssmComm::GetComm()); 
+ 			#endif
+ 			if(string_size){
+ 				string=xNew<char>((string_size+1));
+@@ -882,7 +882,7 @@
+ 					if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_(" could not read string ");
+ 				}
+ 				#ifdef _HAVE_MPI_
+-				MPI_Bcast(string,string_size,MPI_CHAR,0,MPI_COMM_WORLD); 
++				MPI_Bcast(string,string_size,MPI_CHAR,0,IssmComm::GetComm()); 
+ 				#endif
+ 			}
+ 			else{
+@@ -929,7 +929,7 @@
+ 		if(fread(&numrecords,sizeof(int),1,fid)!=1) _error_("could not read number of records in matrix array ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&numrecords,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&numrecords,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	#endif
+ 
+ 	if(numrecords){
+@@ -952,14 +952,14 @@
+ 				if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows in " << i << "th matrix of matrix array");
+ 			}
+ 			#ifdef _HAVE_MPI_
+-			MPI_Bcast(&M,1,MPI_INT,0,MPI_COMM_WORLD); 
++			MPI_Bcast(&M,1,MPI_INT,0,IssmComm::GetComm()); 
+ 			#endif
+ 
+ 			if(my_rank2==0){  
+ 				if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns in " << i << "th matrix of matrix array");
+ 			}
+ 			#ifdef _HAVE_MPI_
+-			MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD); 
++			MPI_Bcast(&N,1,MPI_INT,0,IssmComm::GetComm()); 
+ 			#endif
+ 
+ 			/*Now allocate matrix: */
+@@ -972,7 +972,7 @@
+ 				}
+ 
+ 				#ifdef _HAVE_MPI_
+-				MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,MPI_COMM_WORLD); 
++				MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 				#endif
+ 				matrices[i]=xNew<IssmDouble>(M*N);
+ 				for (int j=0;j<M*N;++j) {matrices[i][j]=matrix[j];}
+@@ -1307,7 +1307,7 @@
+ 	}
+ 	/*Broadcast code and vector type: */
+ #ifdef _HAVE_MPI_
+-	MPI_Bcast(&lastindex,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&lastindex,1,MPI_INT,0,IssmComm::GetComm()); 
+ #endif
+ 
+ 	/*Assign output pointers:*/
+@@ -1363,15 +1363,15 @@
+ 		}
+ 	}
+ 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&found,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&found,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	if(!found)_error_("could not find data with name " << EnumToStringx(data_enum) << " in binary file");
+ 	#endif
+ 
+ 	/*Broadcast code and vector type: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Bcast(&record_code,1,MPI_INT,0,MPI_COMM_WORLD); 
+-	MPI_Bcast(&vector_type,1,MPI_INT,0,MPI_COMM_WORLD); 
+-	if(record_code==5) MPI_Bcast(&vector_type,1,MPI_INT,0,MPI_COMM_WORLD); 
++	MPI_Bcast(&record_code,1,MPI_INT,0,IssmComm::GetComm()); 
++	MPI_Bcast(&vector_type,1,MPI_INT,0,IssmComm::GetComm()); 
++	if(record_code==5) MPI_Bcast(&vector_type,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	#endif
+ 
+ 	/*Assign output pointers:*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13607-13608.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13607-13608.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13607-13608.diff	(revision 13980)
@@ -0,0 +1,188 @@
+Index: ../trunk-jpl/src/c/solutions/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13607)
++++ ../trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13608)
+@@ -53,7 +53,7 @@
+ 	maxiter=nsteps*(int)dummy[0]; xDelete<IssmDouble>(dummy);
+ 
+ 	/*Initialize TAO*/
+-	TaoCreate(PETSC_COMM_WORLD,&tao);
++	TaoCreate(IssmComm::GetComm(),&tao);
+ 	if(VerboseControl()) _pprintLine_("   Initializing the Toolkit for Advanced Optimization (TAO)");
+ 	TaoSetFromOptions(tao);
+ 	TaoSetType(tao,"tao_blmvm");
+Index: ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.h	(revision 13607)
++++ ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.h	(revision 13608)
+@@ -35,7 +35,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy();
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp	(revision 13607)
++++ ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp	(revision 13608)
+@@ -56,12 +56,6 @@
+ /*FUNCTION DataSetParam::Id{{{*/
+ int    DataSetParam::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION DataSetParam::MyRank{{{*/
+-int    DataSetParam::MyRank(void){ 
+-	extern int my_rank;
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION DataSetParam::ObjectEnum{{{*/
+ int DataSetParam::ObjectEnum(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/DependentObject.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/DependentObject.h	(revision 13607)
++++ ../trunk-jpl/src/c/classes/objects/DependentObject.h	(revision 13608)
+@@ -34,7 +34,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy(void);
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Vertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 13607)
++++ ../trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 13608)
+@@ -177,9 +177,12 @@
+ /*FUNCTION Vertex::SetClone {{{*/
+ void  Vertex::SetClone(int* minranks){
+ 
+-	extern int my_rank;
++	int my_rank2;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+-	if (minranks[this->sid]==my_rank){
++	if (minranks[this->sid]==my_rank2){
+ 		this->clone=false;
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp	(revision 13607)
++++ ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp	(revision 13608)
+@@ -64,13 +64,6 @@
+ /*FUNCTION IndependentObject::Id{{{*/
+ int    IndependentObject::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION IndependentObject::MyRank{{{*/
+-int    IndependentObject::MyRank(void){ 
+-	extern int my_rank;
+-
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION IndependentObject::ObjectEnum{{{*/
+ int IndependentObject::ObjectEnum(void){
+ 
+@@ -88,8 +81,11 @@
+ /*FUNCTION IndependentObject::FetchIndependent{{{*/
+ void IndependentObject::FetchIndependent(IoModel* iomodel){
+ 
+-	extern int my_rank;
++	int my_rank2;
+ 	FILE* fid=NULL;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	#ifdef _HAVE_ADOLC_ //cannot come here unless you are running AD mode, from DeclaredIndependents:
+ 	
+@@ -108,7 +104,7 @@
+ 		if(code!=3)_error_("expecting a IssmDouble for enum " << EnumToStringx(name));
+ 
+ 		/*We have to read a scalar from disk. First read the dimensions of the scalar, then the scalar: */
+-		if(my_rank==0){
++		if(my_rank2==0){
+ 			if(fread(&pscalar,sizeof(IssmPDouble),1,fid)!=1)_error_("could not read scalar ");
+ 		}
+ 
+@@ -146,14 +142,14 @@
+ 		
+ 		/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+ 		/*numberofelements: */
+-		if(my_rank==0){  
++		if(my_rank2==0){  
+ 			if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+ 		}
+ 		#ifdef _HAVE_MPI_
+ 		MPI_Bcast(&M,1,MPI_INT,0,IssmComm::GetComm()); 
+ 		#endif
+ 
+-		if(my_rank==0){  
++		if(my_rank2==0){  
+ 			if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+ 		}
+ 		#ifdef _HAVE_MPI_
+@@ -166,7 +162,7 @@
+ 			matrix=xNew<IssmDouble>(M*N);
+ 
+ 			/*Read matrix on node 0, then broadcast: */
+-			if(my_rank==0){  
++			if(my_rank2==0){  
+ 				if(fread(buffer,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 				
+ 				/*Now, before we even broadcast this to other nodes, declare the whole matrix as a independent variable!: */
+Index: ../trunk-jpl/src/c/classes/objects/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13607)
++++ ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13608)
+@@ -978,9 +978,12 @@
+ /*FUNCTION Node::SetClone {{{*/
+ void  Node::SetClone(int* minranks){
+ 
+-	extern int my_rank;
++	int my_rank2;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+-	if (minranks[sid]==my_rank){
++	if (minranks[sid]==my_rank2){
+ 		indexing.clone=false;
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/c/classes/objects/IndependentObject.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/IndependentObject.h	(revision 13607)
++++ ../trunk-jpl/src/c/classes/objects/IndependentObject.h	(revision 13608)
+@@ -29,7 +29,6 @@
+ 		void  Echo();
+ 		void  DeepEcho();
+ 		int   Id(); 
+-		int   MyRank();
+ 		int   ObjectEnum();
+ 		Object* copy(void);
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/DependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/DependentObject.cpp	(revision 13607)
++++ ../trunk-jpl/src/c/classes/objects/DependentObject.cpp	(revision 13608)
+@@ -65,13 +65,6 @@
+ /*FUNCTION DependentObject::Id{{{*/
+ int    DependentObject::Id(void){ return -1; }
+ /*}}}*/
+-/*FUNCTION DependentObject::MyRank{{{*/
+-int    DependentObject::MyRank(void){ 
+-	extern int my_rank;
+-
+-	return my_rank; 
+-}
+-/*}}}*/
+ /*FUNCTION DependentObject::ObjectEnum{{{*/
+ int DependentObject::ObjectEnum(void){
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13608-13609.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13608-13609.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13608-13609.diff	(revision 13980)
@@ -0,0 +1,409 @@
+Index: ../trunk-jpl/src/c/solutions/dakota_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/dakota_core.cpp	(revision 13608)
++++ ../trunk-jpl/src/c/solutions/dakota_core.cpp	(revision 13609)
+@@ -56,7 +56,7 @@
+ 
+ 	#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
+ 	
+-	extern int         my_rank;
++	int                my_rank2;
+ 	char*              dakota_input_file  = NULL;
+ 	char*              dakota_output_file = NULL;
+ 	char*              dakota_error_file  = NULL;
+@@ -68,8 +68,11 @@
+ 	femmodel->parameters->FindParam(&dakota_input_file,QmuInNameEnum);
+ 	femmodel->parameters->FindParam(&dakota_output_file,QmuOutNameEnum);
+ 	femmodel->parameters->FindParam(&dakota_error_file,QmuErrNameEnum);
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+-	if(my_rank==0){
++	if(my_rank2==0){
+ 	
+ 		// Instantiate/initialize the parallel library and problem description
+ 		// database objects.
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13608)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13609)
+@@ -15,8 +15,8 @@
+ 	comm_init=EnvironmentInit(argc,argv);
+ 
+ 	/*Hack for now: */
+-	MPI_Comm_rank(comm_init,&my_rank);
+-	MPI_Comm_size(comm_init,&num_procs);
++	//MPI_Comm_rank(comm_init,&my_rank);
++	//MPI_Comm_size(comm_init,&num_procs);
+ 
+ 	/*Initialize femmodel from arguments provided command line: */
+ 	FemModel *femmodel = new FemModel(argc,argv,comm_init);
+Index: ../trunk-jpl/src/c/solutions/kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13608)
++++ ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13609)
+@@ -8,6 +8,9 @@
+ void ProcessArguments2(char** pbinfilename,char** poutbinfilename,char** plockfilename,char** prootpath,int argc,char **argv);
+ void ProcessInputfile(IssmDouble **px,IssmDouble **py,IssmDouble **pdata,int *pnobs,IssmDouble **px_interp,IssmDouble **py_interp,int *pninterp,Options **poptions,FILE* fid);
+ 
++int my_rank;
++int num_procs;
++
+ int main(int argc,char **argv){
+ 
+ 	/*I/O: */
+@@ -21,6 +24,10 @@
+ 	char *outbinfilename = NULL;
+ 	char *rootpath       = NULL;
+ 
++	MPI_Comm comm;
++	extern int my_rank;
++	extern int num_procs;
++
+ 	/*Input*/
+ 	int         ninterp,nobs;
+ 	IssmDouble *x        = NULL;
+@@ -38,8 +45,11 @@
+ 	ExceptionTrapBegin();
+ 
+ 	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+-	EnvironmentInit(argc,argv);
++	comm=EnvironmentInit(argc,argv);
+ 
++	MPI_Comm_size(comm,&num_procs);
++	MPI_Comm_rank(comm,&my_rank);
++
+ 	/*First process inputs*/
+ 	_pprintLine_("");
+ 	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
+Index: ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp	(revision 13608)
++++ ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp	(revision 13609)
+@@ -17,7 +17,10 @@
+ 	char *buffer = NULL;
+ 	int   n,size = 100;
+ 	int         string_size;
+-	extern int  my_rank;
++	int  my_rank2;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	//variable list of arguments
+ 	va_list args;
+@@ -49,7 +52,7 @@
+ 	}
+ 
+ 	/*Ok, if we are running in parallel, get node 0 to print*/
+-	if(my_rank==0)_printString_(buffer);
++	if(my_rank2==0)_printString_(buffer);
+ 
+ 	/*Clean up and return*/
+ 	xDelete<char>(buffer);
+Index: ../trunk-jpl/src/c/include/globals.h
+===================================================================
+--- ../trunk-jpl/src/c/include/globals.h	(revision 13608)
++++ ../trunk-jpl/src/c/include/globals.h	(revision 13609)
+@@ -8,9 +8,10 @@
+ 
+ #include "./types.h"
+ #include "../classes/IssmComm.h"
++
+ COMM IssmComm::comm;
+ 
+-int my_rank=0;
+-int num_procs=1;
++//int my_rank=0;
++//int num_procs=1;
+ 
+ #endif
+Index: ../trunk-jpl/src/c/io/PrintfFunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/io/PrintfFunction.cpp	(revision 13608)
++++ ../trunk-jpl/src/c/io/PrintfFunction.cpp	(revision 13609)
+@@ -14,10 +14,13 @@
+ 	/*string to be printed: */
+ 	char *buffer = NULL;
+ 	int   n,size = 100;
+-	int         string_size;
+-	extern int  my_rank;
++	int   string_size;
++	int   my_rank2;
+ 	//variable list of arguments
+ 	va_list args;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	while(true){
+ 
+@@ -42,22 +45,30 @@
+ 	}
+ 
+ 	/*Ok, if we are running in parallel, get node 0 to print*/
+-	if(my_rank==0)_printString_(buffer);
++	if(my_rank2==0)_printString_(buffer);
+ 
+ 	/*Clean up and return*/
+ 	xDelete<char>(buffer);
+ 	return 1;
+ }
+ int PrintfFunction(const string & message){
+-	extern int  my_rank;
+-	if(my_rank==0){
++	int  my_rank2;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++
++	if(my_rank2==0){
+ 		printf("%s\n",message.c_str());
+ 	}
+ 	return 1;
+ }
+ int PrintfFunction2(const string & message){
+-	extern int  my_rank;
+-	if(my_rank==0){
++	int  my_rank2;
++
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++
++	if(my_rank2==0){
+ 		printf("%s",message.c_str());
+ 	}
+ 	return 1;
+Index: ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 13608)
++++ ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 13609)
+@@ -17,7 +17,7 @@
+ 		
+ void OutputResultsx(Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results* results){
+ 
+-	extern int  my_rank;
++	int         my_rank2;
+ 	FILE       *fid                     = NULL;
+ 	char       *outputfilename          = NULL;
+ 	char        cpu_outputfilename[100];        //easier to convert an integer with sprintf
+@@ -28,6 +28,9 @@
+ 	
+ 	/*retrieve parameters: */
+ 	parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	if(dakota_analysis){
+ 		//no need to output anything, Dakota analysis has different outputs
+@@ -41,7 +44,7 @@
+ 
+ 	/*Results do not include the type of solution being run	. In parallel, we output results to a filename, 
+ 	 *therefore, we need to include the solutiontype into the filename: */
+-	if(my_rank==0){
++	if(my_rank2==0){
+ 		parameters->FindParam(&solutiontype,SolutionTypeEnum);
+ 		EnumToStringx(&solutiontypestring,solutiontype);
+ 		results->AddObject(new GenericExternalResult<char*>(results->Size()+1,SolutionTypeEnum,solutiontypestring,1,0));
+@@ -59,12 +62,12 @@
+ 
+ 		if(io_gather){
+ 			/*Just open the file for output on cpu 0. We are gathering the data on cpu 0 from all other cpus: */
+-			if(my_rank==0) fid=pfopen(outputfilename ,"wb");
++			if(my_rank2==0) fid=pfopen(outputfilename ,"wb");
+ 		}
+ 		else{
+ 			/*We are opening different  files for output on all cpus. Append the  rank to the filename, and open: */
+ 			parameters->FindParam(&fid,OutputFilePointerEnum);
+-			sprintf(cpu_outputfilename,"%s.%i",outputfilename,my_rank);
++			sprintf(cpu_outputfilename,"%s.%i",outputfilename,my_rank2);
+ 			fid=pfopen(cpu_outputfilename ,"wb");
+ 		}
+ 		xDelete<char>(outputfilename);
+@@ -83,7 +86,7 @@
+ 	/*WARNING: issm.cpp is taking care of it for now (quick fix)
+ 	  if((step==1) && (time==0)){
+ 	  if(io_gather){
+-	  if(my_rank==0) pfclose(fid,outputfilename);
++	  if(my_rank2==0) pfclose(fid,outputfilename);
+ 	  }
+ 	  else pfclose(fid,cpu_outputfilename);
+ 	  }
+Index: ../trunk-jpl/src/c/classes/Patch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Patch.cpp	(revision 13608)
++++ ../trunk-jpl/src/c/classes/Patch.cpp	(revision 13609)
+@@ -110,14 +110,18 @@
+ 
+ 	int         i;
+ 	int         count;
+-	extern int  my_rank;
+-	extern int  num_procs;
++	int         my_rank2;
++	int         num_procs2;
+ 	int         total_numrows;
+ 	int         node_numrows;
+ 	IssmDouble     *total_values  = NULL;
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Status  status;
+ 	#endif
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++	num_procs2=IssmComm::GetSize();
+ 
+ 	/*First, figure out total number of rows combining all the cpus: */
+ 	#ifdef _HAVE_MPI_
+@@ -131,10 +135,10 @@
+ 	if(total_numrows==0) return;
+ 
+ 	/*Now, allocate buffer to holds all the values, on node 0: */
+-	if(my_rank==0)total_values=xNew<IssmDouble>(this->numcols*total_numrows);
++	if(my_rank2==0)total_values=xNew<IssmDouble>(this->numcols*total_numrows);
+ 
+ 	/*Start by copying node 0 values onto total_values: */
+-	if(my_rank==0){
++	if(my_rank2==0){
+ 		count=0;
+ 		xMemCpy<IssmDouble>(total_values+count,this->values,this->numcols*this->numrows);
+ 		count+=this->numrows*this->numcols;
+@@ -142,12 +146,12 @@
+ 
+ 	/*Now, ask other nodes to send their values: */
+ 	#ifdef _HAVE_MPI_
+-	for (i=1;i<num_procs;i++){
+-		if (my_rank==i){ 
++	for (i=1;i<num_procs2;i++){
++		if (my_rank2==i){ 
+ 			MPI_Send(&this->numrows,1,MPI_INT,0,1,IssmComm::GetComm());   
+ 			if (this->numrows)MPI_Send(this->values,this->numrows*this->numcols,MPI_DOUBLE,0,1,IssmComm::GetComm()); 
+ 		}
+-		if (my_rank==0){
++		if (my_rank2==0){
+ 			MPI_Recv(&node_numrows,1,MPI_INT,i,1,IssmComm::GetComm(),&status); 
+ 			if (node_numrows)MPI_Recv(total_values+count,node_numrows*this->numcols,MPI_DOUBLE,i,1,IssmComm::GetComm(),&status);
+ 			count+=node_numrows*this->numcols;
+@@ -157,7 +161,7 @@
+ 
+ 	/*Now, node 0 has total_values, of size total_numrows*this->numcols. Update the fields in the patch, to reflect this new 
+ 	 * reality. For other cpus, no point in keeping their data anymore: */
+-	if(my_rank==0){
++	if(my_rank2==0){
+ 		this->numrows=total_numrows;
+ 		xDelete<IssmDouble>(this->values);
+ 		this->values=total_values;
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 13608)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 13609)
+@@ -5,6 +5,7 @@
+ #ifndef ALL_CLASSES_H_
+ #define ALL_CLASSES_H_
+ 
++
+ /*Objects derived classes, which are used in our containers: */
+ #include "./objects/objects.h"
+ 
+Index: ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h	(revision 13608)
++++ ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h	(revision 13609)
+@@ -19,6 +19,7 @@
+ #include "../../../shared/Numerics/recast.h"
+ #include "../../../io/io.h"
+ #include "../../../EnumDefinitions/EnumDefinitions.h"
++#include "../../../classes/IssmComm.h"
+ #include "./ExternalResult.h"
+ /*}}}*/
+ 
+@@ -108,13 +109,16 @@
+ 		/*GenericExternalResult management: */
+ void WriteData(FILE* fid,bool io_gather){ /*{{{*/
+ 			
+-	extern  int my_rank;
++	int     my_rank2;
+ 	int     type;
+ 	int     size;
+ 	IssmPDouble  passiveDouble;
+ 	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
++
+ 	/*return if now on cpu 0: */
+-	if(my_rank)return;
++	if(my_rank2)return;
+ 
+ 	/*use generic part, same for all ResultTypes: */
+ 	this->GenericWriteData(fid);
+@@ -200,12 +204,15 @@
+ } /*}}}*/
+ template <> inline void GenericExternalResult<char*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
+ 
+-	extern  int my_rank;
++	int     my_rank2;
+ 	int     type;
+ 	int     length;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	/*return if now on cpu 0: */
+-	if(my_rank)return;
++	if(my_rank2)return;
+ 
+ 	/*use generic part, same for all ResultTypes: */
+ 	this->GenericWriteData(fid);
+@@ -279,17 +286,19 @@
+ } /*}}}*/
+ template <> inline void GenericExternalResult<IssmPDouble*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
+ 	
+-	extern  int my_rank;
++	int     my_rank2;
+ 	int     length;
+ 	int     type;
+ 	int     rows,cols;
+ 	char   *name    = NULL;
+-	extern  int my_rank;
+ 	IssmPDouble passiveDouble;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	if(io_gather){
+ 		/*we are gathering the data on cpu 0, don't write on other cpus: */
+-		if(my_rank) return;
++		if(my_rank2) return;
+ 	}
+ 
+ 	/*First write enum: */
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13608)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13609)
+@@ -83,10 +83,13 @@
+ 	FILE       *IOMODEL = NULL;
+ 	FILE       *petscoptionsfid = NULL;
+ 	FILE       *output_fid = NULL;
+-	extern int  my_rank;
++	int         my_rank2;
++	
++	/*recover my_rank2:*/
++	my_rank2=IssmComm::GetRank();
+ 
+ 	/*Open input file on cpu 0: */
+-	if(my_rank==0) IOMODEL = pfopen(inputfilename ,"rb");
++	if(my_rank2==0) IOMODEL = pfopen(inputfilename ,"rb");
+ 
+ 	/*Initialize internal data: */
+ 	this->nummodels        = nummodels;
+@@ -126,7 +129,7 @@
+ 	}
+ 	
+ 	/*Close input file descriptors: */
+-	if(my_rank==0) pfclose(IOMODEL,inputfilename);
++	if(my_rank2==0) pfclose(IOMODEL,inputfilename);
+ 
+ 	/*Open output file once for all and add output file name and file descriptor to parameters*/
+ 	output_fid=pfopen(outputfilename,"wb");
Index: /issm/oecreview/Archive/13393-13976/ISSM-13609-13610.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13609-13610.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13609-13610.diff	(revision 13980)
@@ -0,0 +1,49 @@
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13609)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13610)
+@@ -14,10 +14,6 @@
+ 	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+ 	comm_init=EnvironmentInit(argc,argv);
+ 
+-	/*Hack for now: */
+-	//MPI_Comm_rank(comm_init,&my_rank);
+-	//MPI_Comm_size(comm_init,&num_procs);
+-
+ 	/*Initialize femmodel from arguments provided command line: */
+ 	FemModel *femmodel = new FemModel(argc,argv,comm_init);
+ 
+Index: ../trunk-jpl/src/c/include/globals.h
+===================================================================
+--- ../trunk-jpl/src/c/include/globals.h	(revision 13609)
++++ ../trunk-jpl/src/c/include/globals.h	(revision 13610)
+@@ -11,7 +11,4 @@
+ 
+ COMM IssmComm::comm;
+ 
+-//int my_rank=0;
+-//int num_procs=1;
+-
+ #endif
+Index: ../trunk-jpl/src/c/classes/IssmComm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IssmComm.cpp	(revision 13609)
++++ ../trunk-jpl/src/c/classes/IssmComm.cpp	(revision 13610)
+@@ -17,13 +17,13 @@
+ 	return comm;
+ }/*}}}*/
+ int IssmComm::GetRank(){  /*{{{*/
+-	int my_rank;
++	int my_rank2;
+ 	#ifdef _HAVE_MPI_
+-	MPI_Comm_rank(comm,&my_rank);
++	MPI_Comm_rank(comm,&my_rank2);
+ 	#else
+-	my_rank=0;
++	my_rank2=0;
+ 	#endif
+-	return my_rank;
++	return my_rank2;
+ 
+ }/*}}}*/
+ int IssmComm::GetSize(){  /*{{{*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13610-13611.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13610-13611.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13610-13611.diff	(revision 13980)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13610)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13611)
+@@ -6,13 +6,12 @@
+ 	
+ int main(int argc,char **argv){
+ 
+-	COMM comm_init;
+ 
+ 	/*Initialize exception trapping: */
+ 	ExceptionTrapBegin();
+ 
+ 	/*Initialize environment (MPI, PETSC, MUMPS, etc ...)*/
+-	comm_init=EnvironmentInit(argc,argv);
++	COMM comm_init=EnvironmentInit(argc,argv);
+ 
+ 	/*Initialize femmodel from arguments provided command line: */
+ 	FemModel *femmodel = new FemModel(argc,argv,comm_init);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13611-13612.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13611-13612.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13611-13612.diff	(revision 13980)
@@ -0,0 +1,1810 @@
+Index: ../trunk-jpl/src/c/solutions/dakota_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/dakota_core.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/solutions/dakota_core.cpp	(revision 13612)
+@@ -56,7 +56,7 @@
+ 
+ 	#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
+ 	
+-	int                my_rank2;
++	int                my_rank;
+ 	char*              dakota_input_file  = NULL;
+ 	char*              dakota_output_file = NULL;
+ 	char*              dakota_error_file  = NULL;
+@@ -69,10 +69,10 @@
+ 	femmodel->parameters->FindParam(&dakota_output_file,QmuOutNameEnum);
+ 	femmodel->parameters->FindParam(&dakota_error_file,QmuErrNameEnum);
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+-	if(my_rank2==0){
++	if(my_rank==0){
+ 	
+ 		// Instantiate/initialize the parallel library and problem description
+ 		// database objects.
+Index: ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13612)
+@@ -102,7 +102,7 @@
+ 	 */ 
+ 
+ 	int i;
+-	int my_rank2;
++	int my_rank;
+ 
+ 	/*inputs and outputs: */
+ 	double* variables=NULL;
+@@ -114,8 +114,8 @@
+ 	char* string=NULL;
+ 	int   string_length;
+ 
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*recover inputs from pointers: */
+ 	variables=*pvariables;
+@@ -127,22 +127,22 @@
+ 	MPI_Bcast(&numvariables,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	
+ 	/*variables:*/
+-	if(my_rank2!=0)variables=xNew<double>(numvariables);
++	if(my_rank!=0)variables=xNew<double>(numvariables);
+ 	MPI_Bcast(variables,numvariables,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 
+ 	/*variables_descriptors: */
+-	if(my_rank2!=0){
++	if(my_rank!=0){
+ 		variables_descriptors=xNew<char*>(numvariables);
+ 	}
+ 	for(i=0;i<numvariables;i++){
+-		if(my_rank2==0){
++		if(my_rank==0){
+ 			string=variables_descriptors[i];
+ 			string_length=(strlen(string)+1)*sizeof(char);
+ 		}
+ 		MPI_Bcast(&string_length,1,MPI_INT,0,IssmComm::GetComm()); 
+-		if(my_rank2!=0)string=xNew<char>(string_length);
++		if(my_rank!=0)string=xNew<char>(string_length);
+ 		MPI_Bcast(string,string_length,MPI_CHAR,0,IssmComm::GetComm()); 
+-		if(my_rank2!=0)variables_descriptors[i]=string;
++		if(my_rank!=0)variables_descriptors[i]=string;
+ 	}
+ 
+ 	/*numresponses: */
+@@ -159,7 +159,7 @@
+ 	/*\brief DakotaFree: free allocations on other cpus, not done by Dakota.*/
+ 
+ 	int i;
+-	int my_rank2;
++	int my_rank;
+ 	
+ 	double  *variables             = NULL;
+ 	char   **variables_descriptors = NULL;
+@@ -171,11 +171,11 @@
+ 	variables_descriptors=*pvariables_descriptors;
+ 	responses_descriptors=*presponses_descriptors;
+ 
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Free variables and variables_descriptors only on cpu !=0*/
+-	if(my_rank2!=0){
++	if(my_rank!=0){
+ 		xDelete<double>(variables);
+ 		for(i=0;i<numvariables;i++){
+ 			string=variables_descriptors[i];
+Index: ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp	(revision 13612)
+@@ -17,10 +17,10 @@
+ 	char *buffer = NULL;
+ 	int   n,size = 100;
+ 	int         string_size;
+-	int  my_rank2;
++	int  my_rank;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	//variable list of arguments
+ 	va_list args;
+@@ -52,7 +52,7 @@
+ 	}
+ 
+ 	/*Ok, if we are running in parallel, get node 0 to print*/
+-	if(my_rank2==0)_printString_(buffer);
++	if(my_rank==0)_printString_(buffer);
+ 
+ 	/*Clean up and return*/
+ 	xDelete<char>(buffer);
+Index: ../trunk-jpl/src/c/Container/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13612)
+@@ -55,8 +55,8 @@
+ /*FUNCTION Nodes::DistributeDofs{{{*/
+ void  Nodes::DistributeDofs(int analysis_type,int setenum){
+ 
+-	int num_procs2;
+-	int my_rank2;
++	int num_procs;
++	int my_rank;
+ 
+ 	int  i;
+ 	int  dofcount=0;
+@@ -66,9 +66,9 @@
+ 	int* alltruedofs=NULL;
+ 	int  numnodes=0;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
+-	num_procs2=IssmComm::GetSize();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++	num_procs=IssmComm::GetSize();
+ 
+ 	/*some check: */
+ 	_assert_(setenum==GsetEnum || setenum==FsetEnum || setenum==SsetEnum);
+@@ -87,18 +87,18 @@
+ 	 * 0. This means the dofs between all the cpus are not unique. We now offset the dofs of eache
+ 	 * cpus by the total last dofs of the previus cpu, starting from 0.
+ 	 * First: get number of dofs for each cpu*/
+-	alldofcount=xNew<int>(num_procs2);
++	alldofcount=xNew<int>(num_procs);
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Gather(&dofcount,1,MPI_INT,alldofcount,1,MPI_INT,0,IssmComm::GetComm());
+-	MPI_Bcast(alldofcount,num_procs2,MPI_INT,0,IssmComm::GetComm());
++	MPI_Bcast(alldofcount,num_procs,MPI_INT,0,IssmComm::GetComm());
+ 	#else
+ 	alldofcount[0]=dofcount;
+ 	#endif
+ 
+ 	/* Every cpu should start its own dof count at the end of the dofcount from cpu-1*/
+ 	dofcount=0;
+-	if(my_rank2!=0){
+-		for(i=0;i<my_rank2;i++){
++	if(my_rank!=0){
++		for(i=0;i<my_rank;i++){
+ 			dofcount+=alldofcount[i];
+ 		}
+ 	}
+@@ -151,14 +151,14 @@
+ void  Nodes::FlagClones(int analysis_type){
+ 
+ 	int i;
+-	int num_procs2;
++	int num_procs;
+ 
+ 	int* ranks=NULL;
+ 	int* minranks=NULL;
+ 	int  numnodes;
+ 
+-	/*recover num_procs2: */
+-	num_procs2=IssmComm::GetSize();
++	/*recover num_procs: */
++	num_procs=IssmComm::GetSize();
+ 
+ 	/*Figure out number of nodes for this analysis: */
+ 	numnodes=this->NumberOfNodes(analysis_type);
+@@ -166,7 +166,7 @@
+ 	/*Allocate ranks: */
+ 	ranks=xNew<int>(numnodes);
+ 	minranks=xNew<int>(numnodes);
+-	for(i=0;i<numnodes;i++)ranks[i]=num_procs2; //no cpu can have rank num_procs. This is the maximum limit.
++	for(i=0;i<numnodes;i++)ranks[i]=num_procs; //no cpu can have rank num_procs. This is the maximum limit.
+ 
+ 	/*Now go through all our objects and ask them to report to who they belong (which rank): */
+ 	Ranks(ranks,analysis_type);
+@@ -334,11 +334,11 @@
+ /*FUNCTION Nodes::Ranks{{{*/
+ void   Nodes::Ranks(int* ranks,int analysis_type){
+ 
+-	int my_rank2;
++	int my_rank;
+ 	int        sid;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Go through nodes, and for each object, report it cpu: */
+ 	for(int i=0;i<this->Size();i++){
+@@ -349,7 +349,7 @@
+ 		if (node->InAnalysis(analysis_type)){
+ 			/*Plug rank into ranks, according to sid: */
+ 			sid=node->Sid();
+-			ranks[sid]=my_rank2; 
++			ranks[sid]=my_rank; 
+ 		}
+ 	}
+ }
+Index: ../trunk-jpl/src/c/Container/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13612)
+@@ -167,8 +167,8 @@
+ 
+ 	int i;
+ 	
+-	int my_rank2;
+-	int num_procs2;
++	int my_rank;
++	int num_procs;
+ 
+ 	Patch  *patch        = NULL;
+ 	int    *resultsenums = NULL;
+@@ -184,9 +184,9 @@
+ 	int    rank;
+ 	int    minrank;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
+-	num_procs2=IssmComm::GetSize();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++	num_procs=IssmComm::GetSize();
+ 
+ 	/*Recover parameters: */
+ 	parameters->FindParam(&io_gather,SettingsIoGatherEnum);
+@@ -199,15 +199,15 @@
+ 
+ 		/*Get rank of first cpu that has results*/
+ 		#ifdef _HAVE_MPI_
+-		if(this->Size()) rank=my_rank2;
+-		else rank=num_procs2;
++		if(this->Size()) rank=my_rank;
++		else rank=num_procs;
+ 		MPI_Allreduce (&rank,&minrank,1,MPI_INT,MPI_MIN,IssmComm::GetComm());
+ 		#else
+-		minrank=my_rank2;
++		minrank=my_rank;
+ 		#endif
+ 
+ 		/*see what the first element of this partition has in stock (this is common to all partitions)*/
+-		if(my_rank2==minrank){
++		if(my_rank==minrank){
+ 			if(this->Size()==0) _error_("Cannot write results because there is no element??");
+ 			Element* element=(Element*)this->GetObjectByOffset(0);
+ 			element->ListResultsInfo(&resultsenums,&resultssizes,&resultstimes,&resultssteps,&numberofresults);
+@@ -219,7 +219,7 @@
+ 		/*Get out if there is no results. Otherwise broadcast info*/
+ 		if(!numberofresults) return;
+ 		#ifdef _HAVE_MPI_
+-		if(my_rank2!=minrank){
++		if(my_rank!=minrank){
+ 			resultsenums=xNew<int>(numberofresults);
+ 			resultssizes=xNew<int>(numberofresults);
+ 			resultstimes=xNew<IssmDouble>(numberofresults);
+@@ -248,7 +248,7 @@
+ 
+ 			/*Serialize and add to results*/
+ 			vector_serial=vector->ToMPISerial();
+-			if(my_rank2==0){
++			if(my_rank==0){
+ 				/*No need to add this vector for all cpus*/
+ 				#ifdef _HAVE_ADOLC_
+ 				IssmPDouble* vector_serial_passive=xNew<IssmPDouble>(vectorsize);
+Index: ../trunk-jpl/src/c/Container/Vertices.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13612)
+@@ -40,8 +40,8 @@
+ /*FUNCTION Vertices::DistributePids{{{*/
+ void  Vertices::DistributePids(int numberofobjects){
+ 
+-	int num_procs2;
+-	int my_rank2;
++	int num_procs;
++	int my_rank;
+ 
+ 	int  i;
+ 	int  pidcount    = 0;
+@@ -49,9 +49,9 @@
+ 	int *truepids    = NULL;
+ 	int *alltruepids = NULL;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
+-	num_procs2=IssmComm::GetSize();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++	num_procs=IssmComm::GetSize();
+ 
+ 	/*Go through objects, and distribute pids locally, from 0 to numberofpidsperobject*/
+ 	for (i=0;i<this->Size();i++){
+@@ -63,18 +63,18 @@
+ 	 * 0. This means the pids between all the cpus are not unique. We now offset the pids of each
+ 	 * cpus by the total last pids of the previus cpu, starting from 0.
+ 	 * First: get number of pids for each cpu*/
+-	allpidcount=xNew<int>(num_procs2);
++	allpidcount=xNew<int>(num_procs);
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Gather(&pidcount,1,MPI_INT,allpidcount,1,MPI_INT,0,IssmComm::GetComm());
+-	MPI_Bcast(allpidcount,num_procs2,MPI_INT,0,IssmComm::GetComm());
++	MPI_Bcast(allpidcount,num_procs,MPI_INT,0,IssmComm::GetComm());
+ 	#else
+ 	allpidcount[0]=pidcount;
+ 	#endif
+ 
+ 	/* Every cpu should start its own pid count at the end of the pidcount from cpu-1*/
+ 	pidcount=0;
+-	if(my_rank2!=0){
+-		for(i=0;i<my_rank2;i++){
++	if(my_rank!=0){
++		for(i=0;i<my_rank;i++){
+ 			pidcount+=allpidcount[i];
+ 		}
+ 	}
+@@ -114,19 +114,19 @@
+ void  Vertices::FlagClones(int numberofobjects){
+ 
+ 	int i;
+-	int num_procs2;
++	int num_procs;
+ 
+ 	int* ranks=NULL;
+ 	int* minranks=NULL;
+ 	
+-	/*recover num_procs2:*/
+-	num_procs2=IssmComm::GetSize();
++	/*recover num_procs:*/
++	num_procs=IssmComm::GetSize();
+ 
+ 	/*Allocate ranks: */
+ 	ranks=xNew<int>(numberofobjects);
+ 	minranks=xNew<int>(numberofobjects);
+ 
+-	for(i=0;i<numberofobjects;i++)ranks[i]=num_procs2; //no cpu can have rank num_procs. This is the maximum limit.
++	for(i=0;i<numberofobjects;i++)ranks[i]=num_procs; //no cpu can have rank num_procs. This is the maximum limit.
+ 
+ 	/*Now go through all our objects and ask them to report to who they belong (which rank): */
+ 	Ranks(ranks);
+@@ -183,18 +183,18 @@
+ /*FUNCTION Vertices::Ranks{{{*/
+ void   Vertices::Ranks(int* ranks){
+ 
+-	int my_rank2;
++	int my_rank;
+ 	int        sid;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Go through a dataset, and for each object, report it cpu: */
+ 	for(int i=0;i<this->Size();i++){
+ 		/*Plug rank into ranks, according to id: */
+ 		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
+ 		sid=vertex->Sid();
+-		ranks[sid]=my_rank2; 
++		ranks[sid]=my_rank; 
+ 	}
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 13612)
+@@ -29,14 +29,14 @@
+ 
+ ErrorException::~ErrorException() throw(){
+ 	
+-	int num_procs2;
++	int num_procs;
+ 	
+-	/*recover num_procs2:*/
+-	num_procs2=IssmComm::GetSize();
++	/*recover num_procs:*/
++	num_procs=IssmComm::GetSize();
+ 
+ 	/*We want the report only for matlab modules, otherwise we get twice the report
+ 	 * We assume that if num_procs==1, it is a module (FIXME)*/
+-	if(num_procs2==1) this->Report();
++	if(num_procs==1) this->Report();
+ }
+ 
+ const char* ErrorException::what() const throw(){
+@@ -45,12 +45,12 @@
+ 
+ void ErrorException::Report() const{
+ 	
+-	int my_rank2;
+-	int num_procs2;
++	int my_rank;
++	int num_procs;
+ 	
+-	/*recover my_rank2 and num_procs2:*/
+-	my_rank2=IssmComm::GetRank();
+-	num_procs2=IssmComm::GetSize();
++	/*recover my_rank and num_procs:*/
++	my_rank=IssmComm::GetRank();
++	num_procs=IssmComm::GetSize();
+ 
+ 
+ 
+@@ -58,13 +58,13 @@
+ 		_printString_("Error message: " << what());
+ 	}
+ 	else{
+-		if(num_procs2==1){
++		if(num_procs==1){
+ 			_printLine_("\n??? Error using ==> " << file_name.c_str() << ":" << file_line);
+ 			_printLine_(function_name.c_str() << " error message: " << what() << "\n");
+ 		}
+ 		else{
+-			_printLine_("\n[" << my_rank2<< "] ??? Error using ==> " << file_name.c_str() << ":" << file_line);
+-			_printLine_("[" << my_rank2 << "] " << function_name.c_str() << " error message: " << what() << "\n");
++			_printLine_("\n[" << my_rank<< "] ??? Error using ==> " << file_name.c_str() << ":" << file_line);
++			_printLine_("[" << my_rank << "] " << function_name.c_str() << " error message: " << what() << "\n");
+ 		}
+ 	}
+ 	return;
+Index: ../trunk-jpl/src/c/io/PrintfFunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/io/PrintfFunction.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/io/PrintfFunction.cpp	(revision 13612)
+@@ -15,12 +15,12 @@
+ 	char *buffer = NULL;
+ 	int   n,size = 100;
+ 	int   string_size;
+-	int   my_rank2;
++	int   my_rank;
+ 	//variable list of arguments
+ 	va_list args;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	while(true){
+ 
+@@ -45,30 +45,30 @@
+ 	}
+ 
+ 	/*Ok, if we are running in parallel, get node 0 to print*/
+-	if(my_rank2==0)_printString_(buffer);
++	if(my_rank==0)_printString_(buffer);
+ 
+ 	/*Clean up and return*/
+ 	xDelete<char>(buffer);
+ 	return 1;
+ }
+ int PrintfFunction(const string & message){
+-	int  my_rank2;
++	int  my_rank;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+-	if(my_rank2==0){
++	if(my_rank==0){
+ 		printf("%s\n",message.c_str());
+ 	}
+ 	return 1;
+ }
+ int PrintfFunction2(const string & message){
+-	int  my_rank2;
++	int  my_rank;
+ 
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+-	if(my_rank2==0){
++	if(my_rank==0){
+ 		printf("%s",message.c_str());
+ 	}
+ 	return 1;
+Index: ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp
+===================================================================
+--- ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp	(revision 13612)
+@@ -8,16 +8,16 @@
+ void WriteLockFile(char* filename){
+ 
+ 	int i;
+-	int my_rank2;
++	int my_rank;
+ 
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 	
+ 	/* output: */
+ 	FILE* fid=NULL;
+ 
+ 	/* Open lock file and write 1 into it: */
+-	if(my_rank2==0){
++	if(my_rank==0){
+ 		fid=fopen(filename,"w");
+ 		if(fid==NULL) _error_("error message: could not open lock file " << filename);
+ 
+Index: ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13612)
+@@ -12,7 +12,7 @@
+ void ElementResponsex( IssmDouble* presponse, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,int response_enum,bool process_units){
+ 	
+ 
+-	int my_rank2;
++	int my_rank;
+ 	int i;
+ 
+ 	int found=0;
+@@ -24,14 +24,14 @@
+ 
+ 	/*retrieve element we are interested in: */
+ 	parameters->FindParam(&index,IndexEnum);
+-	my_rank2=IssmComm::GetRank();
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*now, go through our elements, and retrieve the one with this id: index: */
+ 	for(i=0;i<elements->Size();i++){
+ 		element=(Element*)elements->GetObjectByOffset(i);
+ 		if (element->Id()==index){
+ 			found=1;
+-			cpu_found=my_rank2;
++			cpu_found=my_rank;
+ 			break;
+ 		}
+ 	}
+@@ -43,7 +43,7 @@
+ 	#endif
+ 
+ 	/*Ok, we found the element, compute responseocity: */
+-	if(my_rank2==cpu_found){
++	if(my_rank==cpu_found){
+ 		element->ElementResponse(&response,response_enum,IuToExtEnum);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 13612)
+@@ -17,7 +17,7 @@
+ 		
+ void OutputResultsx(Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results* results){
+ 
+-	int         my_rank2;
++	int         my_rank;
+ 	FILE       *fid                     = NULL;
+ 	char       *outputfilename          = NULL;
+ 	char        cpu_outputfilename[100];        //easier to convert an integer with sprintf
+@@ -29,8 +29,8 @@
+ 	/*retrieve parameters: */
+ 	parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	if(dakota_analysis){
+ 		//no need to output anything, Dakota analysis has different outputs
+@@ -44,7 +44,7 @@
+ 
+ 	/*Results do not include the type of solution being run	. In parallel, we output results to a filename, 
+ 	 *therefore, we need to include the solutiontype into the filename: */
+-	if(my_rank2==0){
++	if(my_rank==0){
+ 		parameters->FindParam(&solutiontype,SolutionTypeEnum);
+ 		EnumToStringx(&solutiontypestring,solutiontype);
+ 		results->AddObject(new GenericExternalResult<char*>(results->Size()+1,SolutionTypeEnum,solutiontypestring,1,0));
+@@ -62,12 +62,12 @@
+ 
+ 		if(io_gather){
+ 			/*Just open the file for output on cpu 0. We are gathering the data on cpu 0 from all other cpus: */
+-			if(my_rank2==0) fid=pfopen(outputfilename ,"wb");
++			if(my_rank==0) fid=pfopen(outputfilename ,"wb");
+ 		}
+ 		else{
+ 			/*We are opening different  files for output on all cpus. Append the  rank to the filename, and open: */
+ 			parameters->FindParam(&fid,OutputFilePointerEnum);
+-			sprintf(cpu_outputfilename,"%s.%i",outputfilename,my_rank2);
++			sprintf(cpu_outputfilename,"%s.%i",outputfilename,my_rank);
+ 			fid=pfopen(cpu_outputfilename ,"wb");
+ 		}
+ 		xDelete<char>(outputfilename);
+@@ -86,7 +86,7 @@
+ 	/*WARNING: issm.cpp is taking care of it for now (quick fix)
+ 	  if((step==1) && (time==0)){
+ 	  if(io_gather){
+-	  if(my_rank2==0) pfclose(fid,outputfilename);
++	  if(my_rank==0) pfclose(fid,outputfilename);
+ 	  }
+ 	  else pfclose(fid,cpu_outputfilename);
+ 	  }
+Index: ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 13612)
+@@ -13,8 +13,8 @@
+ /*FUNCTION pKrigingx{{{*/
+ int pKrigingx(double** ppredictions,double **perror,double* obs_x, double* obs_y, double* obs_list, int obs_length,double* x_interp,double* y_interp,int n_interp,Options* options){
+ 
+-	int num_procs2;
+-	int my_rank2;
++	int num_procs;
++	int my_rank;
+ 
+ 	/*output*/
+ 	double *predictions = NULL;
+@@ -27,9 +27,9 @@
+ 	Variogram    *variogram    = NULL;
+ 	Observations *observations = NULL;
+ 
+-	/*Get my_rank2: */
+-	my_rank2=IssmComm::GetRank();
+-	num_procs2=IssmComm::GetSize();
++	/*Get my_rank: */
++	my_rank=IssmComm::GetRank();
++	num_procs=IssmComm::GetSize();
+ 
+ 	/*Get some Options*/
+ 	options->Get(&radius,"searchradius",0.);
+@@ -58,7 +58,7 @@
+ 		ProcessVariogram(&variogram,options);
+ 
+ 		/*partition loop across threads: */
+-		for(int idx=my_rank2;idx<n_interp;idx+=num_procs2){
++		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
+ 			_pprintLine_("      interpolation progress: "<<setw(6)<<setprecision(2)<<double(idx)/double(n_interp)*100<<"%");
+ 			observations->InterpolationKriging(&predictions[idx],&error[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata,variogram);
+ 		}
+@@ -76,7 +76,7 @@
+ 	else if(strcmp(output,"nearestneighbor")==0){
+ 
+ 		/*partition loop across threads: */
+-		for(int idx=my_rank2;idx<n_interp;idx+=num_procs2){
++		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
+ 			_pprintLine_("      interpolation progress: "<<setw(6)<<setprecision(2)<<double(idx)/double(n_interp)*100<<"%");
+ 			observations->InterpolationNearestNeighbor(&predictions[idx],x_interp[idx],y_interp[idx],radius);
+ 		}
+@@ -93,7 +93,7 @@
+ 		options->Get(&power,"power",2.);
+ 
+ 		/*partition loop across threads: */
+-		for(int idx=my_rank2;idx<n_interp;idx+=num_procs2){
++		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
+ 			_pprintLine_("      interpolation progress: "<<setw(6)<<setprecision(2)<<double(idx)/double(n_interp)*100<<"%");
+ 			observations->InterpolationIDW(&predictions[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata,power);
+ 		}
+Index: ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 13612)
+@@ -11,7 +11,7 @@
+ 
+ void NodalValuex( IssmDouble* pnodalvalue, int natureofdataenum,Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units){
+ 
+-	int my_rank2;
++	int my_rank;
+ 	int i;
+ 	int index;
+ 	Element* element=NULL;
+@@ -20,8 +20,8 @@
+ 	int sumfound;
+ 	int cpu_found;
+ 
+-	/*Get my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*Get my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*retrieve element we are interested in: */
+ 	parameters->FindParam(&index,IndexEnum);
+@@ -32,7 +32,7 @@
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		found=element->NodalValue(&value,index,natureofdataenum,process_units);
+ 		if (found){
+-			cpu_found=my_rank2;
++			cpu_found=my_rank;
+ 			break;
+ 		}
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 13612)
+@@ -21,8 +21,8 @@
+ 
+ 	int i;
+ 
+-	int my_rank2;
+-	int num_procs2;
++	int my_rank;
++	int num_procs;
+ 	int    numberofelements;
+ 	int    numberofvertices;
+ 	int    numberofelements2d;
+@@ -46,9 +46,9 @@
+ 	IssmDouble* riftinfo=NULL;
+ 	IssmDouble* vertex_pairing=NULL;
+ 
+-	/*Get my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
+-	num_procs2=IssmComm::GetSize();
++	/*Get my_rank:*/
++	my_rank=IssmComm::GetRank();
++	num_procs=IssmComm::GetSize();
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&dim,MeshDimensionEnum);
+@@ -76,7 +76,7 @@
+ 		iomodel->FetchData(&elements2d,NULL,NULL,MeshElements2dEnum);
+ 	}
+ 
+-	MeshPartitionx(&epart, &npart,numberofelements,numberofvertices,elements, numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width, dim,num_procs2);
++	MeshPartitionx(&epart, &npart,numberofelements,numberofvertices,elements, numberofelements2d,numberofvertices2d,elements2d,numlayers,elements_width, dim,num_procs);
+ 
+ 	/*Free elements and elements2d: */
+ 	iomodel->DeleteData(elements,MeshElementsEnum);
+@@ -102,7 +102,7 @@
+ 	for (i=0;i<numberofelements;i++){
+ 
+ 		/*!All elements have been partitioned above, only deal with elements for this cpu: */
+-		if(my_rank2==epart[i]){ 
++		if(my_rank==epart[i]){ 
+ 
+ 			my_elements[i]=true;
+ 			
+Index: ../trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp	(revision 13612)
+@@ -22,7 +22,7 @@
+ void ParsePetscOptionsx(Parameters* parameters,FILE* fid){
+ 
+ 	char line [1000];
+-	int my_rank2;
++	int my_rank;
+ 	int i;
+ 
+ 	/*intermediary: */
+@@ -34,10 +34,10 @@
+ 	char* catstring=NULL;
+ 	int   stringlength;
+ 
+-	/*Get my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*Get my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+-	if(my_rank2==0){
++	if(my_rank==0){
+ 
+ 		/*Now, go through lines and figure out how many analyses we have: */
+ 		numanalyses=0;
+@@ -99,7 +99,7 @@
+ 	/*Ok, broadcast to other cpus: */
+  	#ifdef _HAVE_MPI_
+ 	MPI_Bcast(&numanalyses,1,MPI_INT,0,IssmComm::GetComm());
+-	if(my_rank2!=0){
++	if(my_rank!=0){
+ 		analyses=xNew<IssmPDouble>(numanalyses);
+ 		strings=xNew<char*>(numanalyses);
+ 	}
+@@ -107,15 +107,15 @@
+ 	#endif
+ 	for(i=0;i<numanalyses;i++){
+ 		char* string=strings[i];
+-		if(my_rank2==0){
++		if(my_rank==0){
+ 			if(string==NULL) _error_("PETSc options for analysis " << EnumToStringx(reCast<int>(analyses[i])) << " have been declared but were not found");
+ 		}
+-		if(my_rank2==0)stringlength=(strlen(string)+1)*sizeof(char);
++		if(my_rank==0)stringlength=(strlen(string)+1)*sizeof(char);
+ 		#ifdef _HAVE_MPI_
+ 		MPI_Bcast(&stringlength,1,MPI_INT,0,IssmComm::GetComm());
+-		if(my_rank2!=0)string=xNew<char>(stringlength);
++		if(my_rank!=0)string=xNew<char>(stringlength);
+ 		MPI_Bcast(string,stringlength,MPI_CHAR,0,IssmComm::GetComm());
+-		if(my_rank2!=0)strings[i]=string;
++		if(my_rank!=0)strings[i]=string;
+ 		#endif
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp	(revision 13612)
+@@ -20,7 +20,7 @@
+ void DakotaResponsesx(double* d_responses,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){
+ 
+ 	int        i,j,k;
+-	int        my_rank2;
++	int        my_rank;
+ 	bool       process_units = true;
+ 
+ 	/*intermediary: */
+@@ -35,7 +35,7 @@
+ 
+ 	/*retrieve npart: */
+ 	parameters->FindParam(&npart,QmuNumberofpartitionsEnum);
+-	my_rank2=IssmComm::GetRank();
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*save the d_responses pointer: */
+ 	responses_pointer=d_responses;
+@@ -56,7 +56,7 @@
+ 			AverageOntoPartitionx(&qmu_response,elements,nodes,vertices,loads,materials,parameters,vertex_response);
+ 
+ 			/*Copy onto our dakota responses: */
+-			if(my_rank2==0){
++			if(my_rank==0){
+ 				/*plug response: */
+ 				for(i=0;i<npart;i++)responses_pointer[i]=qmu_response[i];
+ 
+@@ -77,7 +77,7 @@
+ 			//Responsex(responses_pointer,elements,nodes, vertices,loads,materials, parameters,root,process_units);
+ 			Responsex(&femmodel_response,elements,nodes, vertices,loads,materials, parameters,root,process_units,0);//0 is the index for weights
+ 			
+-			if(my_rank2==0){
++			if(my_rank==0){
+ 				/*plug response: */
+ 				responses_pointer[0]=femmodel_response;
+ 
+@@ -96,7 +96,7 @@
+ 			/*perfectly normal response function: */
+ 			Responsex(&femmodel_response,elements,nodes, vertices,loads,materials, parameters,root,process_units,0);//0 is the weight index
+ 
+-			if(my_rank2==0){
++			if(my_rank==0){
+ 				/*plug response: */
+ 				responses_pointer[0]=femmodel_response;
+ 
+@@ -109,7 +109,7 @@
+ 
+ 
+ 	/*Synthesize echo: {{{*/
+-	if(my_rank2==0){
++	if(my_rank==0){
+ 		_printString_("   responses: " << d_numresponses << ": ");
+ 		for(i=0;i<d_numresponses-1;i++)_printString_(d_responses[i] << "|");
+ 		_printString_(d_responses[d_numresponses-1]);
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 13612)
+@@ -18,30 +18,30 @@
+ 	int* num_local_rows=NULL;
+ 
+ 	/*from MPI: */
+-	int num_procs2;
+-	int my_rank2;
++	int num_procs;
++	int my_rank;
+ 
+-	/*recover my_rank2*/
+-	MPI_Comm_rank(comm,&my_rank2);
+-	MPI_Comm_size(comm,&num_procs2);
++	/*recover my_rank*/
++	MPI_Comm_rank(comm,&my_rank);
++	MPI_Comm_size(comm,&num_procs);
+ 
+ 	
+ 	/*We are  not bound by any library, just use what seems most logical*/
+-	num_local_rows=xNew<int>(num_procs2);    
++	num_local_rows=xNew<int>(num_procs);    
+ 
+-	for (i=0;i<num_procs2;i++){
++	for (i=0;i<num_procs;i++){
+ 		/*Here, we use floor. We under distribute rows. The rows 
+ 		  left  are then redistributed, therefore resulting in a 
+ 		  more even distribution.*/
+-		num_local_rows[i]=(int)floor((double)global_size/(double)num_procs2); 
++		num_local_rows[i]=(int)floor((double)global_size/(double)num_procs); 
+ 	}
+ 	
+ 	/*There may be some rows left. Distribute evenly.*/ 
+-	row_rest=global_size - num_procs2*(int)floor((double)global_size/(double)num_procs2);
++	row_rest=global_size - num_procs*(int)floor((double)global_size/(double)num_procs);
+ 	for (i=0;i<row_rest;i++){
+ 		num_local_rows[i]++;
+ 	}
+-	local_size=num_local_rows[my_rank2];
++	local_size=num_local_rows[my_rank];
+ 	
+ 	/*free ressources: */
+ 	xDelete<int>(num_local_rows);
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13612)
+@@ -49,10 +49,10 @@
+ 	int lower_row,upper_row,range;
+ 	int result=1;
+ 	int sumresult;
+-	int num_procs2;
++	int num_procs;
+ 	
+-	/*recover num_procs2:*/
+-	MPI_Comm_size(comm,&num_procs2);
++	/*recover num_procs:*/
++	MPI_Comm_size(comm,&num_procs);
+ 
+ 	MatGetLocalSize(A,&local_m,&local_n);;
+ 	VecGetLocalSize(x,&range);;
+@@ -62,7 +62,7 @@
+ 	/*synchronize result: */
+ 	MPI_Reduce (&result,&sumresult,1,MPI_INT,MPI_SUM,0,comm );
+ 	MPI_Bcast(&sumresult,1,MPI_INT,0,comm);                
+-	if (sumresult!=num_procs2){
++	if (sumresult!=num_procs){
+ 		result=0;
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 13612)
+@@ -15,8 +15,8 @@
+ void MatToSerial(double** poutmatrix,Mat matrix,COMM comm){
+ 
+ 	int i;
+-	int my_rank2;
+-	int num_procs2;
++	int my_rank;
++	int num_procs;
+ 	
+ 	/*Petsc variables*/
+ 	PetscInt lower_row,upper_row; 
+@@ -28,9 +28,9 @@
+ 	double* local_matrix=NULL; /*matrix local to each node used for temporary holding matrix values*/
+ 	int buffer[3];
+ 	
+-	/*recover my_rank2 and num_procs2:*/
+-	MPI_Comm_size(comm,&num_procs2);
+-	MPI_Comm_rank(comm,&my_rank2);
++	/*recover my_rank and num_procs:*/
++	MPI_Comm_size(comm,&num_procs);
++	MPI_Comm_rank(comm,&my_rank);
+ 
+ 	/*Output*/
+ 	double* outmatrix=NULL;
+@@ -44,7 +44,7 @@
+ 	range=upper_row-lower_row+1;
+ 	
+ 	/*Local and global allocation*/
+-	if (my_rank2==0)outmatrix=xNew<double>(M*N);
++	if (my_rank==0)outmatrix=xNew<double>(M*N);
+ 	
+ 	if (range){
+ 		local_matrix=xNew<double>(N*range);
+@@ -64,20 +64,20 @@
+ 	/*Now each node holds its local_matrix containing range rows. 
+ 	 * We send these rows to the matrix on node 0*/
+ 	
+-	for (i=1;i<num_procs2;i++){
+-		if (my_rank2==i){ 
+-			buffer[0]=my_rank2;
++	for (i=1;i<num_procs;i++){
++		if (my_rank==i){ 
++			buffer[0]=my_rank;
+ 			buffer[1]=lower_row;
+ 			buffer[2]=range;
+ 			MPI_Send(buffer,3,MPI_INT,0,1,comm);   
+ 			if (range)MPI_Send(local_matrix,N*range,MPI_DOUBLE,0,1,comm); 
+ 		}
+-		if (my_rank2==0){
++		if (my_rank==0){
+ 			MPI_Recv(buffer,3,MPI_INT,i,1,comm,&status); 
+ 			if (buffer[2])MPI_Recv(outmatrix+(buffer[1]*N),N*buffer[2],MPI_DOUBLE,i,1,comm,&status);
+ 		}
+ 	} 
+-	if (my_rank2==0){ 
++	if (my_rank==0){ 
+ 		//Still have the local_matrix on node 0 to take care of.
+ 		memcpy(outmatrix,local_matrix,N*range*sizeof(double));
+ 	} 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 13612)
+@@ -15,8 +15,8 @@
+ int VecToMPISerial(double** pgathered_vector, Vec vector,COMM comm){
+ 	
+ 	int i;
+-	int num_procs2; 
+-	int my_rank2;
++	int num_procs; 
++	int my_rank;
+ 
+ 	/*Petsc*/
+ 	MPI_Status status;
+@@ -34,9 +34,9 @@
+ 	/*Output*/
+ 	double* gathered_vector=NULL; //Global vector holding the final assembled vector on all nodes.
+ 	
+-	/*recover my_rank2 and num_procs2*/
+-	MPI_Comm_size(comm,&num_procs2);
+-	MPI_Comm_rank(comm,&my_rank2);
++	/*recover my_rank and num_procs*/
++	MPI_Comm_size(comm,&num_procs);
++	MPI_Comm_rank(comm,&my_rank);
+ 
+ 	VecGetSize(vector,&vector_size);
+ 	if(vector_size==0){
+@@ -64,21 +64,21 @@
+ 
+ 	/*Now each node holds its local_vector containing range rows. 
+ 	 * We send this local_vector  to the gathered_vector on node 0*/
+-	for (i=1;i<num_procs2;i++){
+-		if (my_rank2==i){ 
+-			buffer[0]=my_rank2;
++	for (i=1;i<num_procs;i++){
++		if (my_rank==i){ 
++			buffer[0]=my_rank;
+ 			buffer[1]=lower_row;
+ 			buffer[2]=range;
+ 			MPI_Send(buffer,3,MPI_INT,0,1,comm);  
+ 			if (range)MPI_Send(local_vector,range,MPI_DOUBLE,0,1,comm); 
+ 		}
+-		if (my_rank2==0){
++		if (my_rank==0){
+ 			MPI_Recv(buffer,3,MPI_INT,i,1,comm,&status); 
+ 			if (buffer[2])MPI_Recv(gathered_vector+buffer[1],buffer[2],MPI_DOUBLE,i,1,comm,&status);
+ 		}
+ 	}
+ 
+-	if (my_rank2==0){ 
++	if (my_rank==0){ 
+ 		//Still have the local_vector on node 0 to take care of.
+ 		if (range)memcpy(gathered_vector+lower_row,local_vector,range*sizeof(double));
+ 	}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp	(revision 13612)
+@@ -16,12 +16,12 @@
+ void GetOwnershipBoundariesFromRange(int* plower_row,int* pupper_row,int range,COMM comm){
+ 
+ 	/*externals :*/
+-	int my_rank2;
+-	int num_procs2;
++	int my_rank;
++	int num_procs;
+ 	
+-	/*recover my_rank2 and num_procs2:*/
+-	MPI_Comm_size(comm,&num_procs2);
+-	MPI_Comm_rank(comm,&my_rank2);
++	/*recover my_rank and num_procs:*/
++	MPI_Comm_size(comm,&num_procs);
++	MPI_Comm_rank(comm,&my_rank);
+ 
+ 	/*output: */
+ 	int lower_row,upper_row;
+@@ -31,13 +31,13 @@
+ 	int* allranges=NULL;
+ 
+ 	/*Gather all range values into allranges, for all nodes*/
+-	allranges=xNew<int>(num_procs2);
++	allranges=xNew<int>(num_procs);
+ 	MPI_Allgather(&range,1,MPI_INT,allranges,1,MPI_INT,comm);
+ 
+ 	/*From all ranges, get lower row and upper row*/
+ 	lower_row=0;
+ 	upper_row=lower_row+allranges[0];
+-	for (i=1;i<=my_rank2;i++){
++	for (i=1;i<=my_rank;i++){
+ 		lower_row=lower_row+allranges[i-1];
+ 		upper_row=upper_row+allranges[i];
+ 	}
+Index: ../trunk-jpl/src/c/classes/Patch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Patch.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/classes/Patch.cpp	(revision 13612)
+@@ -110,8 +110,8 @@
+ 
+ 	int         i;
+ 	int         count;
+-	int         my_rank2;
+-	int         num_procs2;
++	int         my_rank;
++	int         num_procs;
+ 	int         total_numrows;
+ 	int         node_numrows;
+ 	IssmDouble     *total_values  = NULL;
+@@ -119,9 +119,9 @@
+ 	MPI_Status  status;
+ 	#endif
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
+-	num_procs2=IssmComm::GetSize();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
++	num_procs=IssmComm::GetSize();
+ 
+ 	/*First, figure out total number of rows combining all the cpus: */
+ 	#ifdef _HAVE_MPI_
+@@ -135,10 +135,10 @@
+ 	if(total_numrows==0) return;
+ 
+ 	/*Now, allocate buffer to holds all the values, on node 0: */
+-	if(my_rank2==0)total_values=xNew<IssmDouble>(this->numcols*total_numrows);
++	if(my_rank==0)total_values=xNew<IssmDouble>(this->numcols*total_numrows);
+ 
+ 	/*Start by copying node 0 values onto total_values: */
+-	if(my_rank2==0){
++	if(my_rank==0){
+ 		count=0;
+ 		xMemCpy<IssmDouble>(total_values+count,this->values,this->numcols*this->numrows);
+ 		count+=this->numrows*this->numcols;
+@@ -146,12 +146,12 @@
+ 
+ 	/*Now, ask other nodes to send their values: */
+ 	#ifdef _HAVE_MPI_
+-	for (i=1;i<num_procs2;i++){
+-		if (my_rank2==i){ 
++	for (i=1;i<num_procs;i++){
++		if (my_rank==i){ 
+ 			MPI_Send(&this->numrows,1,MPI_INT,0,1,IssmComm::GetComm());   
+ 			if (this->numrows)MPI_Send(this->values,this->numrows*this->numcols,MPI_DOUBLE,0,1,IssmComm::GetComm()); 
+ 		}
+-		if (my_rank2==0){
++		if (my_rank==0){
+ 			MPI_Recv(&node_numrows,1,MPI_INT,i,1,IssmComm::GetComm(),&status); 
+ 			if (node_numrows)MPI_Recv(total_values+count,node_numrows*this->numcols,MPI_DOUBLE,i,1,IssmComm::GetComm(),&status);
+ 			count+=node_numrows*this->numcols;
+@@ -161,7 +161,7 @@
+ 
+ 	/*Now, node 0 has total_values, of size total_numrows*this->numcols. Update the fields in the patch, to reflect this new 
+ 	 * reality. For other cpus, no point in keeping their data anymore: */
+-	if(my_rank2==0){
++	if(my_rank==0){
+ 		this->numrows=total_numrows;
+ 		xDelete<IssmDouble>(this->values);
+ 		this->values=total_values;
+Index: ../trunk-jpl/src/c/classes/objects/Vertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 13612)
+@@ -177,12 +177,12 @@
+ /*FUNCTION Vertex::SetClone {{{*/
+ void  Vertex::SetClone(int* minranks){
+ 
+-	int my_rank2;
++	int my_rank;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+-	if (minranks[this->sid]==my_rank2){
++	if (minranks[this->sid]==my_rank){
+ 		this->clone=false;
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h	(revision 13611)
++++ ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h	(revision 13612)
+@@ -109,16 +109,16 @@
+ 		/*GenericExternalResult management: */
+ void WriteData(FILE* fid,bool io_gather){ /*{{{*/
+ 			
+-	int     my_rank2;
++	int     my_rank;
+ 	int     type;
+ 	int     size;
+ 	IssmPDouble  passiveDouble;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*return if now on cpu 0: */
+-	if(my_rank2)return;
++	if(my_rank)return;
+ 
+ 	/*use generic part, same for all ResultTypes: */
+ 	this->GenericWriteData(fid);
+@@ -204,15 +204,15 @@
+ } /*}}}*/
+ template <> inline void GenericExternalResult<char*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
+ 
+-	int     my_rank2;
++	int     my_rank;
+ 	int     type;
+ 	int     length;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*return if now on cpu 0: */
+-	if(my_rank2)return;
++	if(my_rank)return;
+ 
+ 	/*use generic part, same for all ResultTypes: */
+ 	this->GenericWriteData(fid);
+@@ -286,19 +286,19 @@
+ } /*}}}*/
+ template <> inline void GenericExternalResult<IssmPDouble*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
+ 	
+-	int     my_rank2;
++	int     my_rank;
+ 	int     length;
+ 	int     type;
+ 	int     rows,cols;
+ 	char   *name    = NULL;
+ 	IssmPDouble passiveDouble;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	if(io_gather){
+ 		/*we are gathering the data on cpu 0, don't write on other cpus: */
+-		if(my_rank2) return;
++		if(my_rank) return;
+ 	}
+ 
+ 	/*First write enum: */
+Index: ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp	(revision 13612)
+@@ -81,11 +81,11 @@
+ /*FUNCTION IndependentObject::FetchIndependent{{{*/
+ void IndependentObject::FetchIndependent(IoModel* iomodel){
+ 
+-	int my_rank2;
++	int my_rank;
+ 	FILE* fid=NULL;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	#ifdef _HAVE_ADOLC_ //cannot come here unless you are running AD mode, from DeclaredIndependents:
+ 	
+@@ -104,7 +104,7 @@
+ 		if(code!=3)_error_("expecting a IssmDouble for enum " << EnumToStringx(name));
+ 
+ 		/*We have to read a scalar from disk. First read the dimensions of the scalar, then the scalar: */
+-		if(my_rank2==0){
++		if(my_rank==0){
+ 			if(fread(&pscalar,sizeof(IssmPDouble),1,fid)!=1)_error_("could not read scalar ");
+ 		}
+ 
+@@ -142,14 +142,14 @@
+ 		
+ 		/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+ 		/*numberofelements: */
+-		if(my_rank2==0){  
++		if(my_rank==0){  
+ 			if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+ 		}
+ 		#ifdef _HAVE_MPI_
+ 		MPI_Bcast(&M,1,MPI_INT,0,IssmComm::GetComm()); 
+ 		#endif
+ 
+-		if(my_rank2==0){  
++		if(my_rank==0){  
+ 			if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+ 		}
+ 		#ifdef _HAVE_MPI_
+@@ -162,7 +162,7 @@
+ 			matrix=xNew<IssmDouble>(M*N);
+ 
+ 			/*Read matrix on node 0, then broadcast: */
+-			if(my_rank2==0){  
++			if(my_rank==0){  
+ 				if(fread(buffer,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 				
+ 				/*Now, before we even broadcast this to other nodes, declare the whole matrix as a independent variable!: */
+Index: ../trunk-jpl/src/c/classes/objects/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13612)
+@@ -978,12 +978,12 @@
+ /*FUNCTION Node::SetClone {{{*/
+ void  Node::SetClone(int* minranks){
+ 
+-	int my_rank2;
++	int my_rank;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+-	if (minranks[sid]==my_rank2){
++	if (minranks[sid]==my_rank){
+ 		indexing.clone=false;
+ 	}
+ 	else{
+Index: ../trunk-jpl/src/c/classes/IssmComm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IssmComm.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/classes/IssmComm.cpp	(revision 13612)
+@@ -17,13 +17,13 @@
+ 	return comm;
+ }/*}}}*/
+ int IssmComm::GetRank(){  /*{{{*/
+-	int my_rank2;
++	int my_rank;
+ 	#ifdef _HAVE_MPI_
+-	MPI_Comm_rank(comm,&my_rank2);
++	MPI_Comm_rank(comm,&my_rank);
+ 	#else
+-	my_rank2=0;
++	my_rank=0;
+ 	#endif
+-	return my_rank2;
++	return my_rank;
+ 
+ }/*}}}*/
+ int IssmComm::GetSize(){  /*{{{*/
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13612)
+@@ -103,17 +103,17 @@
+ /*FUNCTION IoModel::CheckEnumSync{{{*/
+ void  IoModel::CheckEnumSync(void){
+ 
+-	int my_rank2;
++	int my_rank;
+ 	int record_enum = 0;
+ 
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Check that some fields have been allocated*/
+-	_assert_(this->fid || my_rank2);
++	_assert_(this->fid || my_rank);
+ 
+ 	/*Go find in the binary file, the position of the data we want to fetch: */
+-	if(my_rank2==0){ //cpu 0
++	if(my_rank==0){ //cpu 0
+ 
+ 		/*First set FILE* position to the beginning of the file: */
+ 		fseek(this->fid,0,SEEK_SET);
+@@ -298,7 +298,7 @@
+ /*FUNCTION IoModel::FetchConstants{{{*/
+ void  IoModel::FetchConstants(void){
+ 
+-	int my_rank2;
++	int my_rank;
+ 	
+ 	/*record descriptions; */
+ 	int record_enum;
+@@ -313,15 +313,15 @@
+ 	char* string=NULL;
+ 	int   string_size;
+ 
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Check that some fields have been allocated*/
+-	_assert_(this->fid || my_rank2);
++	_assert_(this->fid || my_rank);
+ 	_assert_(this->constants);
+ 
+ 	/*Go find in the binary file, the position of the data we want to fetch: */
+-	if(my_rank2==0){ //cpu 0{{{
++	if(my_rank==0){ //cpu 0{{{
+ 	
+ 		/*First set FILE* position to the beginning of the file: */
+ 		fseek(this->fid,0,SEEK_SET);
+@@ -539,15 +539,15 @@
+ /*FUNCTION IoModel::FetchData(bool*     pbool,int data_enum){{{*/
+ void  IoModel::FetchData(bool* pboolean,int data_enum){
+ 
+-	int my_rank2;
++	int my_rank;
+ 	
+ 
+ 	/*output: */
+ 	int   booleanint;
+ 	int   code;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	
+ 	/*Set file pointer to beginning of the data: */
+@@ -556,7 +556,7 @@
+ 	if(code!=1)_error_("expecting a boolean for enum " << EnumToStringx(data_enum));
+ 	
+ 	/*We have to read a boolean from disk. */
+-	if(my_rank2==0){  
++	if(my_rank==0){  
+ 		if(fread(&booleanint,sizeof(int),1,fid)!=1) _error_("could not read boolean ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+@@ -572,14 +572,14 @@
+ /*FUNCTION IoModel::FetchData(int*      pinteger,int data_enum){{{*/
+ void  IoModel::FetchData(int* pinteger,int data_enum){
+ 
+-	int my_rank2;
++	int my_rank;
+ 
+ 	/*output: */
+ 	int   integer;
+ 	int   code;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 	
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+@@ -587,7 +587,7 @@
+ 	if(code!=2)_error_("expecting an integer for enum " << EnumToStringx(data_enum));
+ 	
+ 	/*We have to read a integer from disk. First read the dimensions of the integer, then the integer: */
+-	if(my_rank2==0){  
++	if(my_rank==0){  
+ 		if(fread(&integer,sizeof(int),1,fid)!=1) _error_("could not read integer ");
+ 	}
+ 
+@@ -603,15 +603,15 @@
+ void  IoModel::FetchData(IssmDouble* pscalar,int data_enum){
+ 
+ 
+-	int my_rank2;
++	int my_rank;
+ 	
+ 
+ 	/*output: */
+ 	IssmPDouble   scalar;
+ 	int      code;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+@@ -619,7 +619,7 @@
+ 	if(code!=3)_error_("expecting a IssmDouble for enum " << EnumToStringx(data_enum));
+ 	
+ 	/*We have to read a scalar from disk. First read the dimensions of the scalar, then the scalar: */
+-	if(my_rank2==0){
++	if(my_rank==0){
+ 		if(fread(&scalar,sizeof(IssmPDouble),1,fid)!=1)_error_("could not read scalar ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+@@ -634,7 +634,7 @@
+ /*FUNCTION IoModel::FetchData(char**    pstring,int data_enum){{{*/
+ void  IoModel::FetchData(char** pstring,int data_enum){
+ 
+-	int my_rank2;
++	int my_rank;
+ 	
+ 
+ 	/*output: */
+@@ -642,8 +642,8 @@
+ 	int   string_size;
+ 	int code=0;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+@@ -653,7 +653,7 @@
+ 	/*Now fetch: */
+ 	
+ 	/*We have to read a string from disk. First read the dimensions of the string, then the string: */
+-	if(my_rank2==0){  
++	if(my_rank==0){  
+ 		if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
+ 	}
+ 
+@@ -667,7 +667,7 @@
+ 		string[string_size]='\0';
+ 
+ 		/*Read string on node 0, then broadcast: */
+-		if(my_rank2==0){  
++		if(my_rank==0){  
+ 			if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_(" could not read string ");
+ 		}
+ 		#ifdef _HAVE_MPI_
+@@ -687,7 +687,7 @@
+ /*FUNCTION IoModel::FetchData(int**     pintegerematrix,int* pM,int* pN,int data_enum){{{*/
+ void  IoModel::FetchData(int** pmatrix,int* pM,int* pN,int data_enum){
+ 
+-	int my_rank2;
++	int my_rank;
+ 	int i,j;
+ 
+ 	/*output: */
+@@ -697,8 +697,8 @@
+ 	int code=0;
+ 	int vector_type=0;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,&vector_type,data_enum);
+@@ -709,7 +709,7 @@
+ 
+ 	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+ 	/*numberofelements: */
+-	if(my_rank2==0){  
++	if(my_rank==0){  
+ 		if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+ 	}
+ 
+@@ -717,7 +717,7 @@
+ 	MPI_Bcast(&M,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	#endif
+ 
+-	if(my_rank2==0){  
++	if(my_rank==0){  
+ 		if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+@@ -729,7 +729,7 @@
+ 		matrix=xNew<IssmPDouble>(M*N);
+ 
+ 		/*Read matrix on node 0, then broadcast: */
+-		if(my_rank2==0){  
++		if(my_rank==0){  
+ 			if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 		}
+ 		
+@@ -763,7 +763,7 @@
+ /*FUNCTION IoModel::FetchData(IssmDouble**  pIssmDoublematrix,int* pM,int* pN,int data_enum){{{*/
+ void  IoModel::FetchData(IssmDouble** pmatrix,int* pM,int* pN,int data_enum){
+ 
+-	int my_rank2;
++	int my_rank;
+ 
+ 	/*output: */
+ 	int M,N;
+@@ -771,8 +771,8 @@
+ 	int code=0;
+ 	int vector_type=0;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,&vector_type,data_enum);
+@@ -782,14 +782,14 @@
+ 
+ 	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+ 	/*numberofelements: */
+-	if(my_rank2==0){  
++	if(my_rank==0){  
+ 		if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows for matrix ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Bcast(&M,1,MPI_INT,0,IssmComm::GetComm()); 
+ 	#endif
+ 
+-	if(my_rank2==0){  
++	if(my_rank==0){  
+ 		if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns for matrix ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+@@ -801,7 +801,7 @@
+ 		matrix=xNew<IssmPDouble>(M*N);
+ 
+ 		/*Read matrix on node 0, then broadcast: */
+-		if(my_rank2==0){  
++		if(my_rank==0){  
+ 			if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 		}
+ 		#ifdef _HAVE_MPI_
+@@ -830,7 +830,7 @@
+ /*FUNCTION IoModel::FetchData(char***   pstrings,int* pnumstrings,int data_enum){{{*/
+ void  IoModel::FetchData(char*** pstrings,int* pnumstrings,int data_enum){
+ 
+-	int my_rank2;
++	int my_rank;
+ 	
+ 	int i;
+ 
+@@ -843,8 +843,8 @@
+ 	int   string_size;
+ 	int   code;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+@@ -852,7 +852,7 @@
+ 	if(code!=9)_error_("expecting a string array for enum " << EnumToStringx(data_enum));
+ 	
+ 	/*We have to read a bunch of strings from disk. First read the number of strings, and allocate: */
+-	if(my_rank2==0){  
++	if(my_rank==0){  
+ 		if(fread(&numstrings,sizeof(int),1,fid)!=1) _error_("could not read length of string array");
+ 	}
+ 	#ifdef _HAVE_MPI_
+@@ -867,7 +867,7 @@
+ 		/*Go through strings, and read: */
+ 		for(i=0;i<numstrings;i++){
+ 			
+-			if(my_rank2==0){  
++			if(my_rank==0){  
+ 				if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
+ 			}
+ 			#ifdef _HAVE_MPI_
+@@ -878,7 +878,7 @@
+ 				string[string_size]='\0';
+ 
+ 				/*Read string on node 0, then broadcast: */
+-				if(my_rank2==0){  
++				if(my_rank==0){  
+ 					if(fread(string,string_size*sizeof(char),1,fid)!=1)_error_(" could not read string ");
+ 				}
+ 				#ifdef _HAVE_MPI_
+@@ -904,7 +904,7 @@
+ 
+ 	int i;
+ 
+-	int my_rank2;
++	int my_rank;
+ 
+ 	/*output: */
+ 	IssmDouble** matrices=NULL;
+@@ -917,15 +917,15 @@
+ 	IssmPDouble *matrix = NULL;
+ 	int     code;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+ 	if(code!=8)_error_("expecting a IssmDouble mat array for enum " << EnumToStringx(data_enum));
+ 	
+ 	/*Now fetch: */
+-	if(my_rank2==0){  
++	if(my_rank==0){  
+ 		if(fread(&numrecords,sizeof(int),1,fid)!=1) _error_("could not read number of records in matrix array ");
+ 	}
+ 	#ifdef _HAVE_MPI_
+@@ -948,14 +948,14 @@
+ 		/*Loop through records and fetch matrix: */
+ 		for(i=0;i<numrecords;i++){
+ 
+-			if(my_rank2==0){  
++			if(my_rank==0){  
+ 				if(fread(&M,sizeof(int),1,fid)!=1) _error_("could not read number of rows in " << i << "th matrix of matrix array");
+ 			}
+ 			#ifdef _HAVE_MPI_
+ 			MPI_Bcast(&M,1,MPI_INT,0,IssmComm::GetComm()); 
+ 			#endif
+ 
+-			if(my_rank2==0){  
++			if(my_rank==0){  
+ 				if(fread(&N,sizeof(int),1,fid)!=1) _error_("could not read number of columns in " << i << "th matrix of matrix array");
+ 			}
+ 			#ifdef _HAVE_MPI_
+@@ -967,7 +967,7 @@
+ 				matrix=xNew<IssmPDouble>(M*N);
+ 
+ 				/*Read matrix on node 0, then broadcast: */
+-				if(my_rank2==0){  
++				if(my_rank==0){  
+ 					if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 				}
+ 
+@@ -1278,15 +1278,15 @@
+ /*FUNCTION IoModel::LastIndex{{{*/
+ void IoModel::LastIndex(int *pindex){
+ 
+-	int my_rank2;
++	int my_rank;
+ 	int        lastindex,index;
+ 	int        record_length;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Go find in the binary file, the position of the data we want to fetch: */
+-	if(my_rank2==0){
++	if(my_rank==0){
+ 
+ 		/*First set FILE* position to the beginning of the file: */
+ 		fseek(fid,0,SEEK_SET);
+@@ -1317,7 +1317,7 @@
+ /*FUNCTION IoModel::SetFilePointerToData{{{*/
+ FILE* IoModel::SetFilePointerToData(int* pcode,int* pvector_type, int data_enum){
+ 
+-	int my_rank2;
++	int my_rank;
+ 
+ 	int found         = 0;
+ 	int record_enum;
+@@ -1325,11 +1325,11 @@
+ 	int record_code;       //1 to 7 number
+ 	int vector_type   = 0; //nodal or elementary
+ 
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Go find in the binary file, the position of the data we want to fetch: */
+-	if(my_rank2==0){
++	if(my_rank==0){
+ 
+ 		/*First set FILE* position to the beginning of the file: */
+ 		fseek(fid,0,SEEK_SET);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13611)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13612)
+@@ -83,13 +83,13 @@
+ 	FILE       *IOMODEL = NULL;
+ 	FILE       *petscoptionsfid = NULL;
+ 	FILE       *output_fid = NULL;
+-	int         my_rank2;
++	int         my_rank;
+ 	
+-	/*recover my_rank2:*/
+-	my_rank2=IssmComm::GetRank();
++	/*recover my_rank:*/
++	my_rank=IssmComm::GetRank();
+ 
+ 	/*Open input file on cpu 0: */
+-	if(my_rank2==0) IOMODEL = pfopen(inputfilename ,"rb");
++	if(my_rank==0) IOMODEL = pfopen(inputfilename ,"rb");
+ 
+ 	/*Initialize internal data: */
+ 	this->nummodels        = nummodels;
+@@ -129,7 +129,7 @@
+ 	}
+ 	
+ 	/*Close input file descriptors: */
+-	if(my_rank2==0) pfclose(IOMODEL,inputfilename);
++	if(my_rank==0) pfclose(IOMODEL,inputfilename);
+ 
+ 	/*Open output file once for all and add output file name and file descriptor to parameters*/
+ 	output_fid=pfopen(outputfilename,"wb");
Index: /issm/oecreview/Archive/13393-13976/ISSM-13612-13613.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13612-13613.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13612-13613.diff	(revision 13980)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/c/include/types.h
+===================================================================
+--- ../trunk-jpl/src/c/include/types.h	(revision 13612)
++++ ../trunk-jpl/src/c/include/types.h	(revision 13613)
+@@ -5,7 +5,6 @@
+ #ifndef _TYPES_H_
+ #define  _TYPES_H_
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+Index: ../trunk-jpl/src/c/classes/IssmComm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IssmComm.cpp	(revision 13612)
++++ ../trunk-jpl/src/c/classes/IssmComm.cpp	(revision 13613)
+@@ -9,6 +9,7 @@
+ #endif
+ 
+ #include "./IssmComm.h"
++#include "../include/types.h"
+ 
+ void IssmComm::SetComm(COMM incomm){ /*{{{*/
+ 	comm=incomm;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13613-13614.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13613-13614.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13613-13614.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/modules/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/modules/matlab/Makefile.am	(revision 13613)
++++ ../trunk-jpl/src/modules/matlab/Makefile.am	(revision 13614)
+@@ -220,7 +220,7 @@
+ 
+ Scotch_la_SOURCES = ../Scotch/Scotch.cpp\
+ 						  ../Scotch/Scotch.h
+-Scotch_la_LIBADD = ${deps} $(SCOTCHLIB)
++Scotch_la_LIBADD = ${deps} $(SCOTCHLIB) $(MPILIB)
+ 
+ Shp2Kml_la_SOURCES = ../Shp2Kml/Shp2Kml.cpp\
+ 							../Shp2Kml/Shp2Kml.h
Index: /issm/oecreview/Archive/13393-13976/ISSM-13614-13615.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13614-13615.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13614-13615.diff	(revision 13980)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/externalpackages/esmf/esmf_4_0_0rp2_src.tar.gz
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13615-13616.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13615-13616.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13615-13616.diff	(revision 13980)
@@ -0,0 +1,257 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13615)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13616)
+@@ -74,9 +74,75 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION FemModel::~FemModel{{{*/
++FemModel::~FemModel(){
++
++	/*Intermediary*/
++	FILE *output_fid;
++	char *outbinfilename = NULL;
++	char *lockfilename   = NULL;
++	bool  waitonlock     = false;
++
++	/*Close output file: */
++	this->parameters->FindParam(&output_fid,OutputFilePointerEnum); 
++	this->parameters->FindParam(&outbinfilename,OutputFileNameEnum); 
++	pfclose(output_fid,outbinfilename);
++	
++	/*Write lock file if requested: */
++	this->parameters->FindParam(&waitonlock,SettingsWaitonlockEnum);
++	this->parameters->FindParam(&lockfilename,LockFileNameEnum);
++	if (waitonlock>0){
++		_pprintLine_("write lock file:");
++		WriteLockFile(lockfilename);
++	}
++
++	/*Delete all the datasets: */
++	xDelete<int>(analysis_type_list);
++	xDelete<char>(outbinfilename);
++	xDelete<char>(lockfilename);
++	delete elements;
++	delete nodes;
++	delete vertices;
++	delete constraints;
++	delete loads;
++	delete materials;
++	delete parameters;
++	delete results;
++
++	/*Before we delete the profiler, report statistics for this run: */
++	profiler->Tag(Finish);  //final tagging
++	_pprintLine_("");
++	_pprintLine_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(StartInit,FinishInit));
++	_pprintLine_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(StartCore,FinishCore));
++	_pprintLine_("");
++	_pprintLine_("   Total elapsed time:"
++			<<profiler->DeltaTimeModHour(Start,Finish)<<" hrs "
++			<<profiler->DeltaTimeModMin(Start,Finish)<<" min "
++			<<profiler->DeltaTimeModSec(Start,Finish)<<" sec"
++			);
++	_pprintLine_("");
++
++	/*Now delete: */
++	delete profiler;
++}
++/*}}}*/
++
++/*Object management*/
++/*FUNCTION FemModel::Echo {{{*/
++void FemModel::Echo(void){
++
++	_printLine_("FemModel echo: ");
++	_printLine_("   number of fem models: " << nummodels);
++	_printLine_("   analysis_type_list: ");
++	for(int i=0;i<nummodels;i++)_printLine_("     " << i << ": " << EnumToStringx(analysis_type_list[i]));
++	_printLine_("   current analysis_type: ");
++	_printLine_("     " << analysis_counter << ": " << EnumToStringx(analysis_type_list[analysis_counter]));
++
++}
++/*}}}*/
+ /*FUNCTION FemModel::InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int in_solution_type,const int* analyses,const int nummodels){{{*/
+ void FemModel::InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int in_solution_type,const int* analyses,const int nummodels){
+-	
++
+ 	/*intermediary*/
+ 	int         i;
+ 	int         analysis_type;
+@@ -84,7 +150,7 @@
+ 	FILE       *petscoptionsfid = NULL;
+ 	FILE       *output_fid = NULL;
+ 	int         my_rank;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+@@ -96,7 +162,7 @@
+ 	this->solution_type    = in_solution_type;
+ 	this->analysis_counter = nummodels-1;   //point to last analysis_type carried out.
+ 	this->results          = new Results(); //not initialized by CreateDataSets
+-	
++
+ 	/*Dynamically allocate whatever is a list of length nummodels: */
+ 	analysis_type_list=xNew<int>(nummodels);
+ 
+@@ -112,7 +178,7 @@
+ 		if(VerboseMProcessor()) _pprintLine_("   Processing finite element model of analysis " << EnumToStringx(analysis_type_list[i]) << ":");
+ 		analysis_type=analysis_type_list[i];
+ 		this->SetCurrentConfiguration(analysis_type);
+-	
++
+ 		if(i==0){
+ 			if(VerboseMProcessor()) _pprintLine_("      creating vertex degrees of freedom");
+ 			VerticesDofx(vertices,parameters); //only call once, we only have one set of vertices
+@@ -123,11 +189,11 @@
+ 
+ 		if(VerboseMProcessor()) _pprintLine_("      creating nodal degrees of freedom");
+ 		NodesDofx(nodes,parameters,analysis_type);
+-	
++
+ 		if(VerboseMProcessor()) _pprintLine_("      configuring element and loads");
+ 		ConfigureObjectsx(elements, loads, nodes, vertices, materials,parameters);
+ 	}
+-	
++
+ 	/*Close input file descriptors: */
+ 	if(my_rank==0) pfclose(IOMODEL,inputfilename);
+ 
+@@ -135,7 +201,7 @@
+ 	output_fid=pfopen(outputfilename,"wb");
+ 	this->parameters->AddObject(new StringParam(OutputFileNameEnum,outputfilename));
+ 	this->parameters->SetParam(output_fid,OutputFilePointerEnum);
+-	
++
+ 	/*Save lock file name for later: */
+ 	this->parameters->AddObject(new StringParam(LockFileNameEnum,lockfilename));
+ 
+@@ -145,69 +211,33 @@
+ 	pfclose(petscoptionsfid,petscfilename);
+ }
+ /*}}}*/
+-/*FUNCTION FemModel::destructor {{{*/
+-FemModel::~FemModel(){
++/*FUNCTION FemModel::OutputResults {{{*/
++void FemModel::OutputResults(void){
++	
++	_pprintLine_("write results to disk:");
+ 
+-	/*Intermediary*/
+-	int i;
+-	FILE* output_fid;
+-	char* outbinfilename=NULL;
+-	char* lockfilename=NULL;
+-	bool   waitonlock=false;
++	/*Just call the OutputResultsx module: */
++	OutputResultsx(this->elements, this->nodes, this->vertices, this->loads, this->materials, this->parameters,this->results);
+ 
+-	/*Close output file: */
+-	this->parameters->FindParam(&output_fid,OutputFilePointerEnum); 
+-	this->parameters->FindParam(&outbinfilename,OutputFileNameEnum); 
+-	pfclose(output_fid,outbinfilename);
+-	
+-	/*Write lock file if requested: */
+-	this->parameters->FindParam(&waitonlock,SettingsWaitonlockEnum);
+-	this->parameters->FindParam(&lockfilename,LockFileNameEnum);
+-	if (waitonlock>0){
+-		_pprintLine_("write lock file:");
+-		WriteLockFile(lockfilename);
+-	}
++}
++/*}}}*/
++/*FUNCTION FemModel::PrintBanner {{{*/
++void FemModel::PrintBanner(void){
+ 
+-	/*Delete all the datasets: */
+-	xDelete<int>(analysis_type_list);
+-	xDelete<char>(outbinfilename);
+-	xDelete<char>(lockfilename);
+-	delete elements;
+-	delete nodes;
+-	delete vertices;
+-	delete constraints;
+-	delete loads;
+-	delete materials;
+-	delete parameters;
+-	delete results;
+-
+-	/*Before we delete the profiler, report statistics for this run: */
+-	profiler->Tag(Finish);  //final tagging
+ 	_pprintLine_("");
+-	_pprintLine_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(StartInit,FinishInit));
+-	_pprintLine_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(StartCore,FinishCore));
++	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
++	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
+ 	_pprintLine_("");
+-	_pprintLine_("   Total elapsed time:"
+-			<<profiler->DeltaTimeModHour(Start,Finish)<<" hrs "
+-			<<profiler->DeltaTimeModMin(Start,Finish)<<" min "
+-			<<profiler->DeltaTimeModSec(Start,Finish)<<" sec"
+-			);
+-	_pprintLine_("");
+ 
+-	/*Now delete: */
+-	delete profiler;
+ }
+ /*}}}*/
++/*FUNCTION FemModel::SetStaticComm {{{*/
++void FemModel::SetStaticComm(void){
+ 
+-/*Object management*/
+-/*FUNCTION FemModel::OutputResults {{{*/
+-void FemModel::OutputResults(void){
+-	
+-	_pprintLine_("write results to disk:");
++	/*This routine sets the global communicator variable hidden inside the IssmComm 
++	 *class: */
++	IssmComm::SetComm(this->comm);
+ 
+-	/*Just call the OutputResultsx module: */
+-	OutputResultsx(this->elements, this->nodes, this->vertices, this->loads, this->materials, this->parameters,this->results);
+-
+ }
+ /*}}}*/
+ /*FUNCTION FemModel::Solve {{{*/
+@@ -261,38 +291,7 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION FemModel::Echo {{{*/
+-void FemModel::Echo(void){
+ 
+-	_printLine_("FemModel echo: ");
+-	_printLine_("   number of fem models: " << nummodels);
+-	_printLine_("   analysis_type_list: ");
+-	for(int i=0;i<nummodels;i++)_printLine_("     " << i << ": " << EnumToStringx(analysis_type_list[i]));
+-	_printLine_("   current analysis_type: ");
+-	_printLine_("     " << analysis_counter << ": " << EnumToStringx(analysis_type_list[analysis_counter]));
+-
+-}
+-/*}}}*/
+-/*FUNCTION FemModel::SetStaticComm {{{*/
+-void FemModel::SetStaticComm(void){
+-
+-	/*This routine sets the global communicator variable hidden inside the IssmComm 
+-	 *class: */
+-	IssmComm::SetComm(this->comm);
+-
+-}
+-/*}}}*/
+-/*FUNCTION FemModel::PrintBanner {{{*/
+-void FemModel::PrintBanner(void){
+-
+-	_pprintLine_("");
+-	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
+-	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
+-	_pprintLine_("");
+-
+-}
+-/*}}}*/
+-
+ /*Numerics: */
+ /*FUNCTION FemModel::SetCurrentConfiguration(int configuration_type,int analysis_type){{{*/
+ void FemModel::SetCurrentConfiguration(int configuration_type,int analysis_type){
Index: /issm/oecreview/Archive/13393-13976/ISSM-13616-13617.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13616-13617.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13616-13617.diff	(revision 13980)
@@ -0,0 +1,274 @@
+Index: ../trunk-jpl/test/NightlyRun/test236.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test236.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test236.py	(revision 13617)
+@@ -0,0 +1,96 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++
++# Use of ispdd and isdelta18o methods
++md.surfaceforcings.ispdd=1
++md.surfaceforcings.isdelta18o=1
++
++md=parameterize(md,'../Par/SquareShelf.py')
++
++# Add temperature, precipitation and delta18o needed to measure the surface mass balance
++# creating delta18o
++delta18o=numpy.loadtxt('../Data/delta18o.data')
++md.surfaceforcings.delta18o=delta18o
++# creating delta18oSurface
++md.surfaceforcings.delta18o_surface = numpy.zeros((2,numpy.size(delta18o,axis=1)))
++md.surfaceforcings.delta18o_surface[1,:] = delta18o[1,:]
++
++# creating Present day and lgm temperatures
++# Same temperature over the all region:
++tmonth=numpy.ones(12)*(238.15+20.)
++md.surfaceforcings.temperatures_presentday=numpy.zeros((md.mesh.numberofvertices+1,12))
++md.surfaceforcings.temperatures_lgm=numpy.zeros((md.mesh.numberofvertices+1,12))
++for imonth in xrange(0,12):
++    md.surfaceforcings.temperatures_presentday[0:md.mesh.numberofvertices,imonth]=tmonth[imonth]
++    md.surfaceforcings.temperatures_lgm[0:md.mesh.numberofvertices,imonth]=tmonth[imonth]-20.
++    # Time for the last line:
++    md.surfaceforcings.temperatures_presentday[md.mesh.numberofvertices,imonth]=((float(imonth)+1.)/12.)
++    md.surfaceforcings.temperatures_lgm[md.mesh.numberofvertices,imonth]=((float(imonth)+1.)/12.)
++
++# creating initialization and spc temperatures initialization and spc
++md.thermal.spctemperature=numpy.mean(md.surfaceforcings.temperatures_lgm[0:md.mesh.numberofvertices,:],axis=1).reshape(-1,1)    #-10*ones(md.mesh.numberofvertices,1)
++md.thermal.spctemperature=numpy.tile(md.thermal.spctemperature,(1,md.timestepping.final_time/md.timestepping.time_step))
++itemp=numpy.arange(0,md.timestepping.final_time,md.timestepping.time_step)
++md.thermal.spctemperature=numpy.vstack((md.thermal.spctemperature,itemp.reshape(1,-1)))
++
++md.initialization.temperature=md.surfaceforcings.temperatures_lgm[0:md.mesh.numberofvertices,0]    #*ones(md.mesh.numberofvertices,1)
++
++# creating precipitation
++md.surfaceforcings.precipitations_presentday=numpy.zeros((md.mesh.numberofvertices+1,12))
++for imonth in xrange(0,12):
++    md.surfaceforcings.precipitations_presentday[0:md.mesh.numberofvertices,imonth]=-0.4*10**(-6)*md.mesh.y+0.5
++    md.surfaceforcings.precipitations_presentday[md.mesh.numberofvertices,imonth]=((float(imonth)+1.)/12.)
++
++# time steps and resolution
++md.timestepping.time_step=20.
++md.timestepping.final_time=60.
++
++# 
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['SurfaceforcingsMonthlytemperatures'],\
++	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['SurfaceforcingsMonthlytemperatures'],\
++	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['SurfaceforcingsMonthlytemperatures'],\
++	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test237.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test237.py	(revision 13617)
+@@ -0,0 +1,110 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',600000)    #180000
++md=setmask(md,'all','')
++
++# Use of ispdd and isdelta18o methods
++md.surfaceforcings.ispdd=1
++md.surfaceforcings.isdelta18o=1
++
++md=parameterize(md,'../Par/SquareShelf.py')
++
++# Add temperature, precipitation and delta18o needed to measure the surface mass balance
++# creating delta18o
++delta18o=numpy.loadtxt('../Data/delta18o.data')
++md.surfaceforcings.delta18o=delta18o
++# creating delta18oSurface
++md.surfaceforcings.delta18o_surface = numpy.zeros((2,numpy.size(delta18o,axis=1)))
++md.surfaceforcings.delta18o_surface[1,:] = delta18o[1,:]
++
++# creating Present day and lgm temperatures
++# Same temperature over the all region:
++tmonth=numpy.ones(12)*(238.15+20.)
++md.surfaceforcings.temperatures_presentday=numpy.zeros((md.mesh.numberofvertices+1,12))
++md.surfaceforcings.temperatures_lgm=numpy.zeros((md.mesh.numberofvertices+1,12))
++for imonth in xrange(0,12):
++    md.surfaceforcings.temperatures_presentday[0:md.mesh.numberofvertices,imonth]=tmonth[imonth]
++    md.surfaceforcings.temperatures_lgm[0:md.mesh.numberofvertices,imonth]=tmonth[imonth]-20.
++    # Time for the last line:
++    md.surfaceforcings.temperatures_presentday[md.mesh.numberofvertices,imonth]=((float(imonth)+1.)/12.)
++    md.surfaceforcings.temperatures_lgm[md.mesh.numberofvertices,imonth]=((float(imonth)+1.)/12.)
++
++# creating initialization and spc temperatures initialization and spc
++md.thermal.spctemperature=numpy.mean(md.surfaceforcings.temperatures_lgm[0:md.mesh.numberofvertices,:],axis=1).reshape(-1,1)    #-10*ones(md.mesh.numberofvertices,1)
++md.thermal.spctemperature=numpy.tile(md.thermal.spctemperature,(1,md.timestepping.final_time/md.timestepping.time_step))
++itemp=numpy.arange(0,md.timestepping.final_time,md.timestepping.time_step)
++md.thermal.spctemperature=numpy.vstack((md.thermal.spctemperature,itemp.reshape(1,-1)))
++
++md.initialization.temperature=md.surfaceforcings.temperatures_lgm[0:md.mesh.numberofvertices,0]    #*ones(md.mesh.numberofvertices,1)
++
++# creating precipitation
++md.surfaceforcings.precipitations_presentday=numpy.zeros((md.mesh.numberofvertices+1,12))
++for imonth in xrange(0,12):
++    md.surfaceforcings.precipitations_presentday[0:md.mesh.numberofvertices,imonth]=-0.4*10**(-6)*md.mesh.y+0.5
++    md.surfaceforcings.precipitations_presentday[md.mesh.numberofvertices,imonth]=((float(imonth)+1.)/12.)
++
++# time steps and resolution
++md.timestepping.time_step=20.
++md.settings.output_frequency=1
++md.timestepping.final_time=60.
++
++#
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++field_tolerances=[\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,\
++	1e-13,1e-13,1e-08,1e-13,1e-13,1e-10,1e-10,1e-10,1e-13,1e-8]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][1]['SurfaceforcingsMonthlytemperatures'],\
++	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['SurfaceforcingsMonthlytemperatures'],\
++	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][3]['SurfaceforcingsMonthlytemperatures'],\
++	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test236.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test236.m	(revision 13616)
++++ ../trunk-jpl/test/NightlyRun/test236.m	(revision 13617)
+@@ -11,13 +11,12 @@
+ % creating delta18o
+ load '../Data/delta18o.data'
+ md.surfaceforcings.delta18o=delta18o;
+-%  creating delta18oSurface
++% creating delta18oSurface
+ md.surfaceforcings.delta18o_surface(1,1:(length(delta18o))) = 0;
+ md.surfaceforcings.delta18o_surface(2,:) = delta18o(2,:);
+ 
+ % creating Present day and lgm temperatures
+-% Same temperature over the all region :
+-imonth=0:11;
++% Same temperature over the all region:
+ tmonth(1:12)=238.15+20.;
+ for imonth=0:11
+     md.surfaceforcings.temperatures_presentday(1:md.mesh.numberofvertices,imonth+1)=tmonth(imonth+1);
+@@ -30,7 +29,7 @@
+ % creating initialization and spc temperatures initialization and spc
+ md.thermal.spctemperature=mean(md.surfaceforcings.temperatures_lgm(1:md.mesh.numberofvertices,1:12),2); %-10*ones(md.mesh.numberofvertices,1);
+ md.thermal.spctemperature=repmat(md.thermal.spctemperature,1,md.timestepping.final_time/md.timestepping.time_step);
+-itemp = 0:md.timestepping.time_step:md.timestepping.final_time-md.timestepping.time_step;
++itemp=0:md.timestepping.time_step:md.timestepping.final_time-md.timestepping.time_step;
+ md.thermal.spctemperature(md.mesh.numberofvertices+1,:)=itemp;
+ 
+ md.initialization.temperature=md.surfaceforcings.temperatures_lgm(1:md.mesh.numberofvertices,1); %*ones(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/NightlyRun/test237.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.m	(revision 13616)
++++ ../trunk-jpl/test/NightlyRun/test237.m	(revision 13617)
+@@ -11,13 +11,12 @@
+ % creating delta18o
+ load '../Data/delta18o.data'
+ md.surfaceforcings.delta18o=delta18o;
+-%  creating delta18oSurface
++% creating delta18oSurface
+ md.surfaceforcings.delta18o_surface(1,1:(length(delta18o))) = 0;
+ md.surfaceforcings.delta18o_surface(2,:) = delta18o(2,:);
+ 
+ % creating Present day and lgm temperatures
+-% Same temperature over the all region :
+-imonth=0:11;
++% Same temperature over the all region:
+ tmonth(1:12)=238.15+20.;
+ for imonth=0:11
+     md.surfaceforcings.temperatures_presentday(1:md.mesh.numberofvertices,imonth+1)=tmonth(imonth+1);
+@@ -30,7 +29,7 @@
+ % creating initialization and spc temperatures initialization and spc
+ md.thermal.spctemperature=mean(md.surfaceforcings.temperatures_lgm(1:md.mesh.numberofvertices,1:12),2); %-10*ones(md.mesh.numberofvertices,1);
+ md.thermal.spctemperature=repmat(md.thermal.spctemperature,1,md.timestepping.final_time/md.timestepping.time_step);
+-itemp = 0:md.timestepping.time_step:md.timestepping.final_time-md.timestepping.time_step;
++itemp=0:md.timestepping.time_step:md.timestepping.final_time-md.timestepping.time_step;
+ md.thermal.spctemperature(md.mesh.numberofvertices+1,:)=itemp;
+ 
+ md.initialization.temperature=md.surfaceforcings.temperatures_lgm(1:md.mesh.numberofvertices,1); %*ones(md.mesh.numberofvertices,1);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13617-13618.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13617-13618.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13617-13618.diff	(revision 13980)
@@ -0,0 +1,9 @@
+Index: ../trunk-jpl/src/m/interp/plugvelocities.m
+===================================================================
+--- ../trunk-jpl/src/m/interp/plugvelocities.m	(revision 13617)
++++ ../trunk-jpl/src/m/interp/plugvelocities.m	(revision 13618)
+@@ -164,3 +164,4 @@
+ else
+ 	Names.interp='node';
+ end
++end
Index: /issm/oecreview/Archive/13393-13976/ISSM-13618-13619.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13618-13619.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13618-13619.diff	(revision 13980)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/src/c/solutions/ProcessArguments.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/ProcessArguments.cpp	(revision 13618)
++++ ../trunk-jpl/src/c/solutions/ProcessArguments.cpp	(revision 13619)
+@@ -18,11 +18,14 @@
+ 	char *rootpath       = NULL;
+ 	char *rootpatharg    = NULL;
+ 
+-	*solution_type=StringToEnumx(argv[1]);
++	/*Check input arguments*/
+ 	if(argc<2)_error_("Usage error: no solution requested");
+ 	if(argc<3)_error_("Usage error: missing execution directory");
+ 	if(argc<4)_error_("Usage error: missing model name");
+ 
++	/*Get requested solution*/
++	*solution_type=StringToEnumx(argv[1]);
++
+ 	rootpatharg=argv[2];
+ 	if(strcmp(strstr(rootpatharg,"/"),"/")!=0){ 
+ 		rootpath       = xNew<char>(strlen(rootpatharg)+2); sprintf(rootpath,"%s/",rootpatharg);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13619-13620.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13619-13620.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13619-13620.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp	(revision 13619)
++++ ../trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp	(revision 13620)
+@@ -17,7 +17,7 @@
+ 	PetscFinalize(); 
+ 	#else
+ 	#ifdef _HAVE_MPI_
+-	_pprintLine_("closing MPI and Petsc");
++	_pprintLine_("closing MPI");
+ 	MPI_Finalize();
+ 	#endif
+ 	#endif
Index: /issm/oecreview/Archive/13393-13976/ISSM-13620-13621.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13620-13621.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13620-13621.diff	(revision 13980)
@@ -0,0 +1,785 @@
+Index: ../trunk-jpl/src/c/solutions/prognostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/prognostic_core.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/prognostic_core.cpp	(revision 13621)
+@@ -22,7 +22,7 @@
+ 
+ 	/*activate formulation: */
+ 	femmodel->SetCurrentConfiguration(PrognosticAnalysisEnum);
+-	
++
+ 	/*recover parameters: */
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 	femmodel->parameters->FindParam(&issmbgradients,SurfaceforcingsIssmbgradientsEnum);
+@@ -46,15 +46,15 @@
+ 	}
+ 	if(VerboseSolution()) _pprintLine_("   call computational core");
+ 	solver_linear(femmodel);
+-	
++
+ 	if(save_results){
+ 		if(VerboseSolution()) _pprintLine_("   saving results");
+ 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum);
+ 		RequestedOutputsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs);
+ 	}
+-	
++
+ 	if(solution_type==PrognosticSolutionEnum)RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-	
++
+ 	/*Free ressources:*/
+ 	xDelete<int>(requested_outputs);
+ }
+Index: ../trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 13621)
+@@ -26,7 +26,7 @@
+ 	bool control_analysis=false;
+ 	bool tao_analysis=false;
+ 	bool dakota_analysis=false;
+-	
++
+ 	/* retrieve some parameters that tell us whether wrappers are allowed, or whether we return 
+ 	 * a pure core. Wrappers can be dakota_core (which samples many solution_cores) or control_core (which 
+ 	 * carries out adjoint based inversion on a certain core: */
+Index: ../trunk-jpl/src/c/solutions/surfaceslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/surfaceslope_core.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/surfaceslope_core.cpp	(revision 13621)
+@@ -25,7 +25,7 @@
+ 	solver_linear(femmodel);
+ 	femmodel->SetCurrentConfiguration(SurfaceSlopeAnalysisEnum,SurfaceSlopeYAnalysisEnum);
+ 	solver_linear(femmodel);
+-	
++
+ 	if(save_results){
+ 		if(VerboseSolution()) _pprintLine_("saving results:");
+ 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceSlopeXEnum);
+Index: ../trunk-jpl/src/c/solutions/AdjointCorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/AdjointCorePointerFromSolutionEnum.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/AdjointCorePointerFromSolutionEnum.cpp	(revision 13621)
+@@ -23,7 +23,7 @@
+ 	void (*adjointcore)(FemModel*)=NULL;
+ 
+ 	switch(solutiontype){
+-	
++
+ 		case DiagnosticSolutionEnum:
+ 			adjointcore=&adjointdiagnostic_core;
+ 			break;
+@@ -37,7 +37,7 @@
+ 			_error_("No adjoint has been implemented for solution " << EnumToStringx(solutiontype) << " yet");
+ 			break;
+ 	}
+-	
++
+ 	/*Assign output pointer:*/
+ 	_assert_(padjointcore);
+ 	*padjointcore=adjointcore;
+Index: ../trunk-jpl/src/c/solutions/balancethickness_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/balancethickness_core.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/balancethickness_core.cpp	(revision 13621)
+@@ -19,7 +19,7 @@
+ 
+ 	/*activate formulation: */
+ 	femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
+-	
++
+ 	/*recover parameters: */
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 
+Index: ../trunk-jpl/src/c/solutions/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/transient_core.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/transient_core.cpp	(revision 13621)
+@@ -30,7 +30,7 @@
+ 	int    dim,groundingline_migration;
+ 	int    numoutputs         = 0;
+ 	int    *requested_outputs = NULL;
+-	
++
+ 	/*intermediary: */
+ 	int    step;
+ 	IssmDouble time;
+@@ -106,7 +106,7 @@
+ 			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+ 			#endif
+ 		}
+-		
++
+ 		if(isdiagnostic){
+ 			if(VerboseSolution()) _pprintLine_("   computing new velocity");
+ 			#ifdef _HAVE_DIAGNOSTIC_
+@@ -152,7 +152,7 @@
+ 	}
+ 
+ 	RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+-	
++
+ 	/*Free ressources:*/
+ 	xDelete<int>(requested_outputs);
+ }
+Index: ../trunk-jpl/src/c/solutions/objectivefunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/objectivefunction.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/objectivefunction.cpp	(revision 13621)
+@@ -22,10 +22,10 @@
+ IssmDouble objectivefunction(IssmDouble search_scalar,OptArgs* optargs){
+ 
+ 	int i;  
+-	
++
+ 	/*output: */
+ 	IssmDouble J;
+-	
++
+ 	/*parameters: */
+ 	int        solution_type,analysis_type;
+ 	bool       isstokes       = false;
+Index: ../trunk-jpl/src/c/solutions/ResetBoundaryConditions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/ResetBoundaryConditions.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/ResetBoundaryConditions.cpp	(revision 13621)
+@@ -8,14 +8,14 @@
+ #include "../EnumDefinitions/EnumDefinitions.h"
+ 
+ void ResetBoundaryConditions(FemModel* femmodel, int analysis_type){
+-	
++
+ 	/*variables: */
+ 	Vector<IssmDouble>*    yg    = NULL;
+ 	Nodes *nodes = NULL;
+ 	int    i;
+ 
+ 	if(VerboseSolution()) _pprintLine_("   updating boundary conditions...");
+-			
++
+ 	/*set current analysis: */
+ 	femmodel->SetCurrentConfiguration(analysis_type);
+ 
+Index: ../trunk-jpl/src/c/solutions/hydrology_core_step.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/hydrology_core_step.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/hydrology_core_step.cpp	(revision 13621)
+@@ -13,7 +13,7 @@
+ #include "../solvers/solvers.h"
+ 
+ void hydrology_core_step(FemModel* femmodel,int step, IssmDouble time){
+-	
++
+ 	bool modify_loads=true;
+ 
+ 	if(VerboseSolution()) _pprintLine_("   computing water column");
+Index: ../trunk-jpl/src/c/solutions/hydrology_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/hydrology_core.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/hydrology_core.cpp	(revision 13621)
+@@ -43,7 +43,7 @@
+ 
+ 	/*Loop through time: */
+ 	for(i=0;i<nsteps;i++){
+-		
++
+ 		if(nsteps)if(VerboseSolution()) _pprintLine_("time step:" << i+1 << "/" << nsteps);
+ 		time+=dt;
+ 		femmodel->parameters->SetParam(time,TimeEnum);
+@@ -56,11 +56,10 @@
+ 			//InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WatercolumnEnum,i+1,time);
+ 			//InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,HydrologyWaterVxEnum,i+1,time);
+ 			//InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,HydrologyWaterVyEnum,i+1,time);
+-			
++
+ 			/*unload results*/
+ 			if(VerboseSolution()) _pprintLine_("   saving temporary results");
+ 			OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
+ 		}
+ 	}
+ }
+-
+Index: ../trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp	(revision 13621)
+@@ -23,7 +23,7 @@
+ 	void (*solutioncore)(FemModel*)=NULL;
+ 
+ 	switch(solutiontype){
+-	
++
+ 		case DiagnosticSolutionEnum:
+ 			#ifdef _HAVE_DIAGNOSTIC_
+ 			solutioncore=&diagnostic_core;
+@@ -98,7 +98,7 @@
+ 			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
+ 			break;
+ 	}
+-	
++
+ 	/*Assign output pointer:*/
+ 	_assert_(psolutioncore);
+ 	*psolutioncore=solutioncore;
+Index: ../trunk-jpl/src/c/solutions/ad_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/ad_core.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/ad_core.cpp	(revision 13621)
+@@ -9,7 +9,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ #include <set>
+ #include "../toolkits/toolkits.h"
+ #include "../classes/objects/objects.h"
+@@ -23,7 +22,7 @@
+ /*}}}*/
+ 
+ void ad_core(FemModel* femmodel){
+-	
++
+ 	/*diverse: */
+ 	int     i;
+ 	int     dummy;
+@@ -44,7 +43,6 @@
+ 
+ 		#ifdef _HAVE_ADOLC_
+ 
+-		
+ 			/*First, stop tracing: */
+ 			trace_off();
+ 
+@@ -52,9 +50,9 @@
+ 			femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+ 			femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
+ 			if(!(num_dependents*num_independents)) return;
+-			
++
+ 			if(VerboseAutodiff())_pprintLine_("   start ad core");
+-			
++
+ 			/*retrieve state variable: */
+ 			femmodel->parameters->FindParam(&axp,&dummy,AutodiffXpEnum);
+ 
+@@ -75,23 +73,23 @@
+ 			anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
+ 
+ 			if (strcmp(driver,"fos_forward")==0){
+-				
++
+ 				int     anIndepIndex;
+ 				double *tangentDir         = NULL;
+ 				double *jacTimesTangentDir = NULL;
+ 				double *theOutput          = NULL;
+-				
++
+ 				/*retrieve direction index: */
+ 				femmodel->parameters->FindParam(&anIndepIndex,AutodiffFosForwardIndexEnum);
+-				
++
+ 				if (anIndepIndex<0 || anIndepIndex>=num_independents) _error_("index value for AutodiffFosForwardIndexEnum should be in [0,num_independents-1]");
+ 
+ 				tangentDir=xNewZeroInit<double>(num_independents);
+ 				tangentDir[anIndepIndex]=1.0;
+-			
++
+ 				jacTimesTangentDir=xNew<double>(num_dependents);
+ 				theOutput=xNew<double>(num_dependents);
+-				
++
+ 				/*set the forward method function pointer: */
+ 				anEDF_for_solverx_p->fos_forward=EDF_fos_forward_for_solverx;
+ 
+@@ -104,14 +102,14 @@
+ 
+ 				/*add to results*/
+ 				femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,jacTimesTangentDir,num_dependents,1,1,0.0));
+-				
++
+ 				/*free resources :*/
+ 				xDelete(theOutput);
+ 				xDelete(jacTimesTangentDir);
+ 				xDelete(tangentDir);
+ 			}
+ 			else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward_all")==0)){
+-				
++
+ 				int      tangentDirNum;
+ 				int      dummy;
+ 				int     *indepIndices  = NULL;
+@@ -119,8 +117,7 @@
+ 				double **seed          = NULL;
+ 				double  *theOutput     = NULL;
+ 				std::set<unsigned int> anIndexSet;
+-					
+-					
++
+ 				/*retrieve directions:*/
+ 				if (strcmp(driver,"fov_forward_all")==0){
+ 					tangentDirNum=num_independents;
+@@ -136,7 +133,7 @@
+ 
+ 				/* full Jacobian or Jacobian projection:*/
+ 				jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
+-				
++
+ 				/*set the forward method function pointers: */
+ 				anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
+ 				// anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
+@@ -222,7 +219,6 @@
+ 				double **weights=NULL;
+ 				std::set<unsigned int> anIndexSet;
+ 
+-
+ 				/*retrieve directions:*/
+ 				if (strcmp(driver,"fov_reverse_all")==0){
+ 					weightNum=num_dependents;
+@@ -277,7 +273,6 @@
+ 			}
+ 			else _error_("driver: " << driver << " not yet supported!");
+ 
+-
+ 			/* delete the allocated space for the parameters:*/
+ 			xDelete(anEDF_for_solverx_p->dp_x);
+ 			xDelete(anEDF_for_solverx_p->dp_X);
+@@ -289,7 +284,7 @@
+ 			xDelete(anEDF_for_solverx_p->dpp_U);
+ 			xDelete(anEDF_for_solverx_p->dp_Z);
+ 			xDelete(anEDF_for_solverx_p->dpp_Z);
+-	
++
+ 			/*Print statistics:*/
+ 			tapestats(1,tape_stats); //reading of tape statistics
+ 			if(VerboseAutodiff()){
+@@ -302,7 +297,7 @@
+ 				_pprintLine_("   "<<setw(45)<<left<<"Total number of operations recorded: " <<tape_stats[5]);
+ 			}
+ 			if(VerboseAutodiff())_pprintLine_("   end AD core");
+-			
++
+ 			/*Free resources: */
+ 			xDelete(xp);
+ 			xDelete(axp); 
+Index: ../trunk-jpl/src/c/solutions/steadystate_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/steadystate_core.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/steadystate_core.cpp	(revision 13621)
+@@ -28,7 +28,7 @@
+ 	int  maxiter;
+ 	int  numoutputs         = 0;
+ 	int  *requested_outputs = NULL;
+-	
++
+ 	/* recover parameters:*/
+ 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
+ 	femmodel->parameters->FindParam(&maxiter,SteadystateMaxiterEnum);
+@@ -41,7 +41,7 @@
+ 	step=1;
+ 
+ 	for(;;){
+-	
++
+ 		if(VerboseSolution()) _pprintLine_("   computing temperature and velocity for step: " << step);
+ 		#ifdef _HAVE_THERMAL_
+ 		if(isenthalpy==0){
+@@ -65,18 +65,18 @@
+ 			if(VerboseSolution()) _pprintLine_("   maximum number steadystate iterations " << maxiter << " reached");
+ 			break;
+ 		}
+-		
++
+ 		if(VerboseSolution()) _pprintLine_("   saving velocity, temperature and pressure to check for convergence at next step");
+ 		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum,VxPicardEnum);
+ 		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum,VyPicardEnum);
+ 		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VzEnum,VzPicardEnum);
+ 		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,PressureEnum,PressurePicardEnum);
+ 		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum,TemperatureOldEnum);
+-		
++
+ 		//increase counter
+ 		step++;
+ 	}
+-	
++
+ 	if(save_results){
+ 		if(VerboseSolution()) _pprintLine_("   saving results");
+ 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum);
+Index: ../trunk-jpl/src/c/solutions/bedslope_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/bedslope_core.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/bedslope_core.cpp	(revision 13621)
+@@ -25,7 +25,7 @@
+ 	solver_linear(femmodel);
+ 	femmodel->SetCurrentConfiguration(BedSlopeAnalysisEnum,BedSlopeYAnalysisEnum);
+ 	solver_linear(femmodel);
+-	
++
+ 	if(save_results){
+ 		if(VerboseSolution()) _pprintLine_("   saving results");
+ 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedSlopeXEnum);
+Index: ../trunk-jpl/src/c/solutions/adjointdiagnostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/adjointdiagnostic_core.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/adjointdiagnostic_core.cpp	(revision 13621)
+@@ -13,7 +13,7 @@
+ #include "../solvers/solvers.h"
+ 
+ void adjointdiagnostic_core(FemModel* femmodel){
+-	
++
+ 	/*parameters: */
+ 	bool isstokes;
+ 	bool save_results;
+@@ -35,7 +35,7 @@
+ 	if(VerboseSolution()) _pprintLine_("   computing adjoint");
+ 	femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum,AdjointHorizAnalysisEnum);
+ 	solver_adjoint_linear(femmodel);
+-	
++
+ 	/*Save results*/
+ 	if(save_results){
+ 		if(VerboseSolution()) _pprintLine_("   saving results");
+Index: ../trunk-jpl/src/c/solutions/steadystateconvergence.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/steadystateconvergence.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/steadystateconvergence.cpp	(revision 13621)
+@@ -17,7 +17,7 @@
+ #include "./solutions.h"
+ 
+ bool steadystateconvergence(FemModel* femmodel){
+-	
++
+ 	/*output: */
+ 	bool converged=false;
+ 	bool velocity_converged=false;
+@@ -31,7 +31,7 @@
+ 
+ 	/*retrieve parameters: */
+ 	femmodel->parameters->FindParam(&convergencecriterionvalue[0],SteadystateReltolEnum);
+-	
++
+ 	/*figure out convergence at the input level, because we don't have the solution vectors!: */
+ 	velocity_converged=InputConvergencex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,&velocityenums[0],8,&convergencecriterion[0],&convergencecriterionvalue[0],1);
+ 	temperature_converged=InputConvergencex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,&temperatureenums[0],2,&convergencecriterion[0],&convergencecriterionvalue[0],1);
+Index: ../trunk-jpl/src/c/solutions/AnalysisConfiguration.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/AnalysisConfiguration.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/AnalysisConfiguration.cpp	(revision 13621)
+@@ -25,7 +25,7 @@
+ 
+ 	/*Analyses lists*/
+ 	switch(solutiontype){
+-	
++
+ 		case DiagnosticSolutionEnum:
+ 			numanalyses=5;
+ 			analyses=xNew<int>(numanalyses);
+@@ -55,13 +55,13 @@
+ 			analyses[0]=ThermalAnalysisEnum;
+ 			analyses[1]=MeltingAnalysisEnum;
+ 			break;
+-		
++
+ 		case EnthalpySolutionEnum:
+ 			numanalyses=1;
+ 			analyses=xNew<int>(numanalyses);
+ 			analyses[0]=EnthalpyAnalysisEnum;
+ 			break;
+-		
++
+ 		case HydrologySolutionEnum:
+ 			numanalyses=3;
+ 			analyses=xNew<int>(numanalyses);
+@@ -107,7 +107,7 @@
+ 			analyses[7]=EnthalpyAnalysisEnum;
+ 			analyses[8]=PrognosticAnalysisEnum;
+ 			break;
+-		
++
+ 		default:
+ 			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
+ 			break;
+Index: ../trunk-jpl/src/c/solutions/dakota_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/dakota_core.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/dakota_core.cpp	(revision 13621)
+@@ -53,9 +53,8 @@
+ 
+ void dakota_core(FemModel* femmodel){ 
+ 
++	#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
+ 
+-	#ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
+-	
+ 	int                my_rank;
+ 	char*              dakota_input_file  = NULL;
+ 	char*              dakota_output_file = NULL;
+@@ -68,12 +67,12 @@
+ 	femmodel->parameters->FindParam(&dakota_input_file,QmuInNameEnum);
+ 	femmodel->parameters->FindParam(&dakota_output_file,QmuOutNameEnum);
+ 	femmodel->parameters->FindParam(&dakota_error_file,QmuErrNameEnum);
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+ 	if(my_rank==0){
+-	
++
+ 		// Instantiate/initialize the parallel library and problem description
+ 		// database objects.
+ 		Dakota::ParallelLibrary parallel_lib("serial"); //use our own ISSM Dakota library mode constructor, which only fires up Dakota on CPU 0. 
+@@ -104,11 +103,11 @@
+ 			// Serial case: plug in derived Interface object without an analysisComm
+ 			interface.assign_rep(new SIM::DakotaPlugin(problem_db,(void*)femmodel), false);
+ 		}
+-	
++
+ 		// Execute the strategy
+ 		problem_db.lock(); // prevent run-time DB queries
+ 		selected_strategy.run_strategy();
+-		
++
+ 		//Warn other cpus that we are done running the dakota iterator, by setting the counter to -1:
+ 		DakotaSpawnCore(NULL,0, NULL,NULL,0,femmodel,-1);
+ 
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13621)
+@@ -3,10 +3,9 @@
+  */ 
+ 
+ #include "../issm.h"
+-	
++
+ int main(int argc,char **argv){
+ 
+-
+ 	/*Initialize exception trapping: */
+ 	ExceptionTrapBegin();
+ 
+@@ -21,7 +20,7 @@
+ 
+ 	/*Output results: */
+ 	femmodel->OutputResults();
+-	
++
+ 	/*Wrap up: */
+ 	delete femmodel;
+ 
+Index: ../trunk-jpl/src/c/solutions/adjointbalancethickness_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/adjointbalancethickness_core.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/adjointbalancethickness_core.cpp	(revision 13621)
+@@ -13,7 +13,7 @@
+ #include "../solvers/solvers.h"
+ 
+ void adjointbalancethickness_core(FemModel* femmodel){
+-	
++
+ 	/*parameters: */
+ 	bool save_results;
+ 
+@@ -32,7 +32,7 @@
+ 	if(VerboseSolution()) _pprintLine_("   computing adjoint");
+ 	femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum,AdjointBalancethicknessAnalysisEnum);
+ 	solver_adjoint_linear(femmodel);
+-	
++
+ 	/*Save results*/
+ 	if(save_results){
+ 		if(VerboseSolution()) _pprintLine_("   saving results");
+Index: ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13621)
+@@ -1,5 +1,5 @@
+ /*!\file:  DakotaSpawnCore.cpp
+- 
++
+  * \brief: run core ISSM solution using Dakota inputs coming from CPU 0.
+  * \sa qmu.cpp DakotaPlugin.cpp
+  *
+@@ -26,7 +26,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ #include "../classes/objects/objects.h"
+ #include "../io/io.h"
+ #include "../EnumDefinitions/EnumDefinitions.h"
+@@ -42,9 +41,9 @@
+ 
+ /*Notice the d_, which prefixes anything that is being provided to us by the Dakota pluggin. Careful. some things are ours, some are dakotas!: */
+ int DakotaSpawnCore(double* d_responses, int d_numresponses, double* d_variables, char** d_variables_descriptors,int d_numvariables, void* void_femmodel,int counter){
+-	
++
+ 	int i;
+-	
++
+ 	char   **responses_descriptors     = NULL; //these are our!  there are only numresponsedescriptors of them, not d_numresponses!!!
+ 	int      numresponsedescriptors;
+ 	char    *string                    = NULL;
+@@ -55,7 +54,6 @@
+ 	FemModel* femmodel                 = NULL;
+ 	bool      nodakotacore             = true;
+ 
+-
+ 	/*If counter==-1 on cpu0, it means that the dakota runs are done. In which case, bail out and return 0: */
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Bcast(&counter,1,MPI_INT,0,IssmComm::GetComm()); 
+@@ -69,7 +67,7 @@
+ 	femmodel->parameters->FindParam(&responses_descriptors,&numresponsedescriptors,QmuResponsedescriptorsEnum);
+ 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
+-	
++
+ 	if(VerboseQmu()) _pprintLine_("qmu iteration: " << counter);
+ 
+ 	/* only cpu 0, running dakota is providing us with variables and variables_descriptors and numresponses: broadcast onto other cpus: */
+@@ -88,7 +86,7 @@
+ 	/*compute responses: */
+ 	if(VerboseQmu()) _pprintLine_("compute dakota responses:");
+ 	DakotaResponsesx(d_responses,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,responses_descriptors,numresponsedescriptors,d_numresponses);
+-	
++
+ 	/*Free ressources:*/
+ 	DakotaFree(&d_variables,&d_variables_descriptors,&responses_descriptors, d_numvariables, numresponsedescriptors);
+ 
+@@ -125,7 +123,7 @@
+ 
+ 	/*numvariables: */
+ 	MPI_Bcast(&numvariables,1,MPI_INT,0,IssmComm::GetComm()); 
+-	
++
+ 	/*variables:*/
+ 	if(my_rank!=0)variables=xNew<double>(numvariables);
+ 	MPI_Bcast(variables,numvariables,MPI_DOUBLE,0,IssmComm::GetComm()); 
+@@ -155,12 +153,12 @@
+ 	*pnumresponses=numresponses;
+ } /*}}}*/
+ void DakotaFree(double** pvariables,char*** pvariables_descriptors,char*** presponses_descriptors,int numvariables,int numresponses){ /*{{{*/
+- 
++
+ 	/*\brief DakotaFree: free allocations on other cpus, not done by Dakota.*/
+ 
+ 	int i;
+ 	int my_rank;
+-	
++
+ 	double  *variables             = NULL;
+ 	char   **variables_descriptors = NULL;
+ 	char   **responses_descriptors = NULL;
+@@ -183,7 +181,7 @@
+ 		}
+ 		xDelete<char*>(variables_descriptors);
+ 	}
+-	
++
+ 	//responses descriptors on every cpu
+ 	for(i=0;i<numresponses;i++){
+ 		string=responses_descriptors[i];
+Index: ../trunk-jpl/src/c/solutions/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/control_core.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/control_core.cpp	(revision 13621)
+@@ -15,7 +15,7 @@
+ void control_core(FemModel* femmodel){
+ 
+ 	int     i,n;
+-	
++
+ 	/*parameters: */
+ 	int     num_controls,num_responses;
+ 	int     nsteps;
+@@ -31,7 +31,7 @@
+ 	int*    step_responses=NULL;
+ 	IssmDouble* maxiter=NULL;
+ 	IssmDouble* cm_jump=NULL;
+-		
++
+ 	/*intermediary: */
+ 	IssmDouble  search_scalar=1;
+ 	OptArgs optargs;
+@@ -71,11 +71,11 @@
+ 	/*Initialize responses: */
+ 	J=xNew<IssmDouble>(nsteps);
+ 	step_responses=xNew<int>(num_responses);
+-		
++
+ 	/*Initialize some of the BrentSearch arguments: */
+ 	optargs.femmodel=femmodel;
+ 	optpars.xmin=0; optpars.xmax=1;
+-	
++
+ 	/*Start looping: */
+ 	for(n=0;n<nsteps;n++){
+ 
+@@ -83,7 +83,7 @@
+ 		if(VerboseControl()) _pprintLine_("\n" << "   control method step " << n+1 << "/" << nsteps);
+ 		for(i=0;i<num_responses;i++) step_responses[i]=reCast<int,IssmDouble>(responses[n*num_responses+i]);
+ 		femmodel->parameters->SetParam(step_responses,1,num_responses,StepResponsesEnum);
+-		
++
+ 		/*In steady state inversion, compute new temperature field now*/
+ 		if(solution_type==SteadystateSolutionEnum) solutioncore(femmodel);
+ 
+@@ -103,7 +103,7 @@
+ 
+ 		if(VerboseControl()) _pprintLine_("   updating parameter using optimized search scalar"); //true means update save controls
+ 		InputControlUpdatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,search_scalar,true);
+-		
++
+ 		if(controlconvergence(J[n],tol_cm)) break;
+ 	}
+ 
+Index: ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13621)
+@@ -24,6 +24,5 @@
+ 	return 1; //return bogus number for comm, which does not exist anyway.
+ 	#endif
+ 	#endif
+-	
+ 
+ }
+Index: ../trunk-jpl/src/c/solutions/diagnostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/diagnostic_core.cpp	(revision 13620)
++++ ../trunk-jpl/src/c/solutions/diagnostic_core.cpp	(revision 13621)
+@@ -59,7 +59,7 @@
+ 	}
+ 
+ 	if(ishutter){
+-			
++
+ 		if(VerboseSolution()) _pprintLine_("   computing hutter velocities");
+ 
+ 		//Take the last velocity into account so that the velocity on the MacAyeal domain is not zero
+@@ -67,12 +67,12 @@
+ 
+ 		femmodel->SetCurrentConfiguration(DiagnosticHutterAnalysisEnum);
+ 		solver_linear(femmodel);
+-		
++
+ 		if (ismacayealpattyn) ResetBoundaryConditions(femmodel,DiagnosticHorizAnalysisEnum);
+ 	}
+ 
+ 	if ((ismacayealpattyn || isl1l2) ^ isstokes){ // ^ = xor
+-		
++
+ 		if(VerboseSolution()) _pprintLine_("   computing velocities");
+ 		femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
+ 		if(isnewton)
+@@ -104,7 +104,7 @@
+ 		if(dim==3) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VzEnum);
+ 		RequestedOutputsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs);
+ 	}
+-	
++
+ 	if(solution_type==DiagnosticSolutionEnum)RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ 
+ 	/*Free ressources:*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13621-13622.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13621-13622.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13621-13622.diff	(revision 13980)
@@ -0,0 +1,9695 @@
+Index: ../trunk-jpl/src/c/solutions/diagnostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/diagnostic_core.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/solutions/diagnostic_core.cpp	(revision 13622)
+@@ -94,7 +94,6 @@
+ 		solver_linear(femmodel);
+ 	}
+ 
+-
+ 	if(save_results){
+ 		if(VerboseSolution()) _pprintLine_("   saving results");
+ 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum);
+Index: ../trunk-jpl/src/c/matlab/io/CheckNumMatlabArguments.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/CheckNumMatlabArguments.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/matlab/io/CheckNumMatlabArguments.cpp	(revision 13622)
+@@ -8,13 +8,12 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ #include "../../shared/Exceptions/exceptions.h"
+ #include "../../include/include.h"
+ #include "mex.h"
+ 
+ int CheckNumMatlabArguments(int nlhs,int NLHS, int nrhs,int NRHS, const char* __FUNCT__, void (*function)( void )){
+-	
++
+ 	/*checks on arguments on the matlab side: */
+ 	if (nrhs==0 && nlhs==0) {
+ 		/*unless NLHS=0 and NRHS=0, we are just asking for documentation: */
+Index: ../trunk-jpl/src/c/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/FetchMatlabData.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/matlab/io/FetchMatlabData.cpp	(revision 13622)
+@@ -49,7 +49,7 @@
+ 		/*This is an error: we don't have the correct input!: */
+ 		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+ 	}
+-			
++
+ 	/*Assign output pointers:*/
+ 	*pmatrix=outmatrix;
+ 	if (pM)*pM=outmatrix_rows;
+@@ -96,7 +96,7 @@
+ 		/*This is an error: we don't have the correct input!: */
+ 		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+ 	}
+-			
++
+ 	/*Assign output pointers:*/
+ 	*pmatrix=outmatrix;
+ 	if (pnumel)*pnumel=outmatrix_numel;
+@@ -251,7 +251,7 @@
+ 		/*This is an error: we don't have the correct input!: */
+ 		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+ 	}
+-			
++
+ 	/*Assign output pointers:*/
+ 	*pmatrix=outmatrix;
+ 	if (pnumel)*pnumel=outmatrix_numel;
+@@ -389,7 +389,6 @@
+ 
+ 	char* outstring=NULL;
+ 
+-
+ 	/*Ok, the string should be coming directly from the matlab workspace: */
+ 	if (!mxIsClass(dataref,"char")){
+ 		_error_("input data_type is not a string!");
+@@ -397,7 +396,7 @@
+ 	else{
+ 		/*Recover the string:*/
+ 		int stringlen;
+-		
++
+ 		stringlen = mxGetM(dataref)*mxGetN(dataref)+1;
+ 		outstring =xNew<char>(stringlen);
+ 		mxGetString(dataref,outstring,stringlen);
+@@ -429,7 +428,7 @@
+ 		/*This is an error: we don't have the correct input!: */
+ 		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+ 	}
+-			
++
+ 	/*Assign output pointers:*/
+ 	*pmatrix=outmatrix;
+ 	if (pnumel)*pnumel=outmatrix_numel;
+Index: ../trunk-jpl/src/c/matlab/io/MatlabVectorToDoubleVector.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabVectorToDoubleVector.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/matlab/io/MatlabVectorToDoubleVector.cpp	(revision 13622)
+@@ -2,14 +2,12 @@
+  * \brief: convert a sparse or dense matlab vector to a serial vector:
+  */
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ #include <string.h>
+ 
+ /*Matlab includes: */
+@@ -43,7 +41,7 @@
+ 		rows=mxGetM(mxvector);
+ 		cols=mxGetN(mxvector);
+ 		nnz=mxGetNzmax(mxvector);
+-		
++
+ 		/*Check that input is actualy a vector*/
+ 		if (cols!=1) _error_("input vector of size " << rows << "x" << cols << " should have only one column");
+ 
+Index: ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp	(revision 13622)
+@@ -19,7 +19,7 @@
+ 
+ 	mxArray *dataref  = NULL;
+ 	double  *tmatrix  = NULL;
+-		
++
+ 	if(matrix){
+ 		/*create the matlab matrixwith Matlab's memory manager */   
+ 		tmatrix=(double*)mxMalloc(M*N*sizeof(double));
+@@ -66,7 +66,7 @@
+ /*}}}*/
+ /*FUNCTION WriteData(mxArray** pdataref,double* vector, int M){{{*/
+ void WriteData(mxArray** pdataref,double* vector, int M){
+-	
++
+ 	mxArray* dataref       = NULL;
+ 	double*  vector_matlab = NULL;
+ 
+@@ -224,15 +224,15 @@
+ /*}}}*/
+ /*FUNCTION WriteData(mxArray** pdataref,SeqMat<double>* matrix){{{*/
+ void WriteData(mxArray** pdataref,SeqMat<double>* matrix){
+-		
++
+ 	int      i,j;
+ 	int      rows,cols;
+ 	mxArray *dataref     = NULL;
+ 	double  *matrix_ptr  = NULL;
+ 	double  *tmatrix_ptr = NULL;
+-	
++
+ 	if(matrix){
+-		
++
+ 		matrix_ptr=matrix->ToSerial();
+ 		matrix->GetSize(&rows,&cols);
+ 
+@@ -243,7 +243,7 @@
+ 				tmatrix_ptr[j*rows+i]=matrix_ptr[i*cols+j];
+ 			}
+ 		}
+-		
++
+ 		/*create matlab matrix: */
+ 		dataref=mxCreateDoubleMatrix(0,0,mxREAL);
+ 		mxSetM(dataref,rows); 
+@@ -262,17 +262,17 @@
+ /*}}}*/
+ /*FUNCTION WriteData(mxArray** pdataref,SeqVec<double>* vector){{{*/
+ void WriteData(mxArray** pdataref,SeqVec<double>* vector){
+-	
++
+ 	mxArray* dataref=NULL;
+ 	double*  vector_ptr=NULL;
+ 	double*  vector_matlab=NULL;
+ 	int      rows;
+-	
++
+ 	if(vector){
+ 		/*call toolkit routine: */
+ 		vector_ptr=vector->ToMPISerial();
+ 		vector->GetSize(&rows);
+-		
++
+ 		/*now create the matlab vector with Matlab's memory manager */
+ 		vector_matlab=(double*)mxMalloc(rows*sizeof(double));
+ 		for(int i=0;i<rows;i++) vector_matlab[i]=vector_ptr[i];
+@@ -298,7 +298,6 @@
+ 
+ 	mxArray* field = NULL;
+ 
+-
+ 	/*Convert field*/
+ 	WriteData(&field,fieldpointer,M,N);
+ 
+Index: ../trunk-jpl/src/c/matlab/io/mxGetAssignedField.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/mxGetAssignedField.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/matlab/io/mxGetAssignedField.cpp	(revision 13622)
+@@ -19,7 +19,7 @@
+ 
+ 	//output
+ 	mxArray* mxfield=NULL;
+-	
++
+ 	//input
+ 	mxArray    *inputs[2];
+ 	mxArray    *pindex      = NULL;
+Index: ../trunk-jpl/src/c/matlab/io/MatlabMatrixToDoubleMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabMatrixToDoubleMatrix.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/matlab/io/MatlabMatrixToDoubleMatrix.cpp	(revision 13622)
+@@ -30,7 +30,7 @@
+ 		double* pmxmatrix=(double*)mxGetPr(mxmatrix);
+ 		rows=mxGetM(mxmatrix);
+ 		cols=mxGetN(mxmatrix);
+-		
++
+ 		if(rows*cols){
+ 			matrix=xNewZeroInit<double>(rows*cols);
+ 
+@@ -54,7 +54,7 @@
+ 		double* pmxmatrix=(double*)mxGetPr(mxmatrix);
+ 		rows=mxGetM(mxmatrix);
+ 		cols=mxGetN(mxmatrix);
+-		
++
+ 		/*Create serial matrix: */
+ 		if(rows*cols){
+ 			matrix=xNewZeroInit<double>(rows*cols);
+Index: ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp	(revision 13622)
+@@ -18,7 +18,7 @@
+ 	int   n,size = 100;
+ 	int         string_size;
+ 	int  my_rank;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+Index: ../trunk-jpl/src/c/matlab/io/MatlabVectorToVector.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabVectorToVector.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/matlab/io/MatlabVectorToVector.cpp	(revision 13622)
+@@ -18,7 +18,7 @@
+ #include "../../Container/Container.h"
+ #include "../../include/include.h"
+ #include "../../toolkits/toolkits.h"
+-	
++
+ /*}}}*/
+ 
+ Vector<double>* MatlabVectorToVector(const mxArray* mxvector){
+@@ -34,6 +34,6 @@
+ 	#else
+ 	vector->svector=MatlabVectorToSeqVec(mxvector);
+ 	#endif
+-	
++
+ 	return vector;
+ }
+Index: ../trunk-jpl/src/c/matlab/io/MatlabMatrixToMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabMatrixToMatrix.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/matlab/io/MatlabMatrixToMatrix.cpp	(revision 13622)
+@@ -18,7 +18,7 @@
+ #include "../../Container/Container.h"
+ #include "../../include/include.h"
+ #include "../../toolkits/toolkits.h"
+-	
++
+ /*}}}*/
+ 
+ Matrix<double>* MatlabMatrixToMatrix(const mxArray* mxmatrix){
+@@ -34,6 +34,6 @@
+ 	#else
+ 	matrix->smatrix=MatlabMatrixToSeqMat(mxmatrix);
+ 	#endif
+-	
++
+ 	return matrix;
+ }
+Index: ../trunk-jpl/src/c/matlab/io/MatlabVectorToPetscVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabVectorToPetscVec.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/matlab/io/MatlabVectorToPetscVec.cpp	(revision 13622)
+@@ -2,7 +2,6 @@
+  * \brief: convert a sparse or dense matlab vector to a serial Petsc vector:
+  */
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -24,7 +23,7 @@
+ 
+ 	int dummy;
+ 	PetscVec* vector=new PetscVec();
+-	
++
+ 	MatlabVectorToPetscVec(&vector->vector,&dummy, mxvector);
+ 
+ 	return vector;
+@@ -50,7 +49,7 @@
+ 
+ 	/*petsc indices: */
+ 	int* idxm=NULL;
+-	
++
+ 	/*Ok, first check if we are dealing with a sparse or full vector: */
+ 	if (mxIsSparse(mxvector)){
+ 
+Index: ../trunk-jpl/src/c/matlab/io/MatlabMatrixToPetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabMatrixToPetscMat.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/matlab/io/MatlabMatrixToPetscMat.cpp	(revision 13622)
+@@ -2,7 +2,6 @@
+  * \brief: convert a sparse or dense matlab matrix to a serial Petsc matrix:
+  */
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -50,7 +49,7 @@
+ 	/*petsc indices: */
+ 	int *idxm = NULL;
+ 	int *idxn = NULL;
+-	
++
+ 	/*Ok, first check if we are dealing with a sparse or full matrix: */
+ 	if (mxIsSparse(mxmatrix)){
+ 
+Index: ../trunk-jpl/src/c/matlab/io/MatlabNArrayToNArray.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabNArrayToNArray.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/matlab/io/MatlabNArrayToNArray.cpp	(revision 13622)
+@@ -2,7 +2,6 @@
+  * \brief: convert a sparse or dense matlab n-dimensional array to cpp n-dimensional array
+  */
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -67,7 +66,7 @@
+ 
+ 		/*Dealing with dense matrix: recover pointer and size: */
+ 		mxmatrix_ptr=(double*)mxGetPr(mxmatrix);
+-		
++
+ 		/*Create serial matrix: */
+ 		matrix=xNewZeroInit<double>(numel);
+ 
+@@ -140,7 +139,7 @@
+ 
+ 		/*Dealing with dense matrix: recover pointer and size: */
+ 		mxmatrix_ptr=(bool*)mxGetData(mxmatrix);
+-		
++
+ 		/*Create serial matrix: */
+ 		matrix=xNew<bool>(numel);
+ 		dims=xNew<int>(ndims);
+@@ -211,7 +210,7 @@
+ 	else{
+ 		/*Dealing with dense matrix: recover pointer and size: */
+ 		mxmatrix_ptr=mxGetChars(mxmatrix);
+-		
++
+ 		/*Create serial matrix: */
+ 		matrix=xNew<char>(numel+1);
+ 		matrix[numel]='\0';
+Index: ../trunk-jpl/src/c/python/io/CheckNumPythonArguments.cpp
+===================================================================
+--- ../trunk-jpl/src/c/python/io/CheckNumPythonArguments.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/python/io/CheckNumPythonArguments.cpp	(revision 13622)
+@@ -8,7 +8,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ #define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+ #define NO_IMPORT
+ 
+@@ -22,7 +21,7 @@
+ 
+ 	/*figure out size of tuple in input: */
+ 	size=PyTuple_Size(inputs);
+-	
++
+ 	/*check on requested size: */
+ 	if (size==0){
+ 		function();
+Index: ../trunk-jpl/src/c/python/io/FetchPythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/python/io/FetchPythonData.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/python/io/FetchPythonData.cpp	(revision 13622)
+@@ -46,7 +46,7 @@
+ void FetchData(bool* pboolean,PyObject* py_boolean){
+ 
+ 	bool boolean;
+-	
++
+ 	/*check this is indeed a subtype of long type: */
+ 	if(!PyBool_Check(py_boolean))_error_("expecting a boolean in input!");
+ 
+@@ -55,7 +55,7 @@
+ 
+ 	/*simple copy: */
+ 	*pboolean=boolean;
+-	
++
+ }
+ /*}}}*/
+ /*FUNCTION FetchData(double** pmatrix,int* pM, int* pN, PyObject* py_matrix){{{*/
+@@ -73,7 +73,7 @@
+ 	if(ndim!=2)_error_("expecting an MxN matrix in input!");
+ 	dims=PyArray_DIMS((PyArrayObject*)py_matrix);
+ 	M=dims[0]; N=dims[1];
+-	
++
+ 	if (M && N) {
+ 		/*retrieve internal value: */
+ 		dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
+@@ -109,7 +109,7 @@
+ 	if(ndim!=2)_error_("expecting an MxN matrix in input!");
+ 	dims=PyArray_DIMS((PyArrayObject*)py_matrix);
+ 	M=dims[0]; N=dims[1];
+-	
++
+ 	if (M && N) {
+ 		/*retrieve internal value: */
+ 		dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
+@@ -142,7 +142,7 @@
+ 	if(ndim!=1)_error_("expecting an Mx1 vector in input!");
+ 	dims=PyArray_DIMS((PyArrayObject*)py_vector);
+ 	M=dims[0]; 
+-	
++
+ 	if (M) {
+ 		/*retrieve internal value: */
+ 		dvector=(double*)PyArray_DATA((PyArrayObject*)py_vector);
+@@ -335,7 +335,7 @@
+ 
+ 	/*convert from bytes to string: */
+ 	string=PyBytes_AS_STRING(py_bytes);
+-	
++
+ 	*pstring=string;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/python/io/WritePythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13622)
+@@ -23,13 +23,13 @@
+ /*Primitive data types*/
+ /*FUNCTION WriteData(PyObject* py_tuple,int index,int integer){{{*/
+ void WriteData(PyObject* py_tuple, int index, int integer){
+-	
++
+ 	PyTuple_SetItem(py_tuple, index, PyInt_FromSsize_t(integer));
+ 
+ }/*}}}*/
+ /*FUNCTION WriteData(PyObject* py_tuple,int index,char* string){{{*/
+ void WriteData(PyObject* py_tuple, int index, char* string){
+-	
++
+ 	PyTuple_SetItem(py_tuple, index, PyUnicode_FromString(string));
+ 
+ }/*}}}*/
+@@ -47,7 +47,7 @@
+ }/*}}}*/
+ /*FUNCTION WriteData(PyObject* py_tuple,int index){{{*/
+ void WriteData(PyObject* py_tuple, int index){
+-	
++
+ 	PyTuple_SetItem(py_tuple, index, Py_None);
+ 
+ }/*}}}*/
+@@ -117,34 +117,34 @@
+ /*}}}*/
+ /*FUNCTION WriteData(PyObject* py_tuple,int index,SeqMat<double>* matrix){{{*/
+ void WriteData(PyObject* py_tuple,int index,SeqMat<double>* matrix){
+-	
++
+ 	int M,N;
+ 	double* buffer=NULL;
+ 	npy_intp dims[2]={0,0};
+ 	PyObject* array=NULL;
+-	
++
+ 	buffer=matrix->ToSerial();
+ 	matrix->GetSize(&M,&N);
+ 	dims[0]=(npy_intp)M;
+ 	dims[1]=(npy_intp)N;
+ 	array=PyArray_SimpleNewFromData(2,dims,NPY_DOUBLE,buffer);
+-	
++
+ 	PyTuple_SetItem(py_tuple, index, array);
+ 
+ }/*}}}*/
+ /*FUNCTION WriteData(PyObject* py_tuple,int index,SeqVec<double>* vector){{{*/
+ void WriteData(PyObject* py_tuple,int index,SeqVec<double>* vector){
+-	
++
+ 	int M;
+ 	double* buffer=NULL;
+ 	npy_intp dim=10;
+ 	PyObject* array=NULL;
+-	
++
+ 	buffer=vector->ToMPISerial();
+ 	vector->GetSize(&M);
+ 	dim=(npy_intp)M;
+ 	array=PyArray_SimpleNewFromData(1,&dim,NPY_DOUBLE,buffer);
+-	
++
+ 	PyTuple_SetItem(py_tuple, index, array);
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/Container/Results.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Results.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/Container/Results.cpp	(revision 13622)
+@@ -65,7 +65,7 @@
+ /*}}}*/
+ /*FUNCTION Results::Write{{{*/
+ void Results::Write(Parameters* parameters){
+-	
++
+ 	int         i;
+ 	FILE       *fid          = NULL;
+ 	bool        io_gather=true;
+Index: ../trunk-jpl/src/c/Container/Loads.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Loads.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/Container/Loads.cpp	(revision 13622)
+@@ -69,7 +69,6 @@
+ 	numberofloads=localloads;
+ 	#endif
+ 
+-
+ 	return numberofloads;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/Container/Parameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Parameters.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/Container/Parameters.cpp	(revision 13622)
+@@ -52,7 +52,7 @@
+ /*}}}*/
+ /*FUNCTION Parameters::FindParam(bool* pbool,int enum_type){{{*/
+ void Parameters::FindParam(bool* pbool,int enum_type){ _assert_(this);
+-	
++
+ 	vector<Object*>::iterator object;
+ 	Param* param=NULL;
+ 
+@@ -69,7 +69,7 @@
+ /*}}}*/
+ /*FUNCTION Parameters::FindParam(int* pinteger,int enum_type){{{*/
+ void Parameters::FindParam(int* pinteger,int enum_type){ _assert_(this);
+-	
++
+ 	vector<Object*>::iterator object;
+ 	Param* param=NULL;
+ 
+@@ -86,7 +86,7 @@
+ /*}}}*/
+ /*FUNCTION Parameters::FindParam(IssmDouble* pscalar, int enum_type){{{*/
+ void Parameters::FindParam(IssmDouble* pscalar, int enum_type){ _assert_(this);
+-	
++
+ 	vector<Object*>::iterator object;
+ 	Param* param=NULL;
+ 
+@@ -120,7 +120,7 @@
+ /*}}}*/
+ /*FUNCTION Parameters::FindParam(char** pstring,int enum_type){{{*/
+ void Parameters::FindParam(char** pstring,int enum_type){ _assert_(this);
+-	
++
+ 	vector<Object*>::iterator object;
+ 	Param* param=NULL;
+ 
+@@ -138,7 +138,7 @@
+ /*}}}*/
+ /*FUNCTION Parameters::FindParam(char*** pstringarray,int* pM,int enum_type){{{*/
+ void Parameters::FindParam(char*** pstringarray,int* pM,int enum_type){ _assert_(this);
+-	
++
+ 	vector<Object*>::iterator object;
+ 	Param* param=NULL;
+ 
+@@ -228,7 +228,7 @@
+ /*}}}*/
+ /*FUNCTION Parameters::FindParam(IssmDouble*** parray,int* pM,int** pmdims_array,int** pndims_array,int enum_type){{{*/
+ void Parameters::FindParam(IssmDouble*** parray,int* pM,int** pmdims_array,int** pndims_array,int enum_type){ _assert_(this);
+-	
++
+ 	vector<Object*>::iterator object;
+ 	Param* param=NULL;
+ 
+@@ -245,7 +245,7 @@
+ /*}}}*/
+ /*FUNCTION Parameters::FindParam(Vector<IssmDouble>** pvec,int enum_type){{{*/
+ void Parameters::FindParam(Vector<IssmDouble>** pvec,int enum_type){ _assert_(this);
+-	
++
+ 	vector<Object*>::iterator object;
+ 	Param* param=NULL;
+ 
+@@ -263,7 +263,7 @@
+ /*}}}*/
+ /*FUNCTION Parameters::FindParam(Matrix<IssmDouble>** pmat,int enum_type){{{*/
+ void Parameters::FindParam(Matrix<IssmDouble>** pmat,int enum_type){ _assert_(this);
+-	
++
+ 	vector<Object*>::iterator object;
+ 	Param* param=NULL;
+ 
+@@ -319,7 +319,7 @@
+ void   Parameters::SetParam(bool boolean,int enum_type){
+ 
+ 	Param* param=NULL;
+-	
++
+ 	/*first, figure out if the param has already been created: */
+ 	param=(Param*)this->FindParamObject(enum_type);
+ 
+@@ -331,7 +331,7 @@
+ void   Parameters::SetParam(int integer,int enum_type){
+ 
+ 	Param* param=NULL;
+-	
++
+ 	/*first, figure out if the param has already been created: */
+ 	param=(Param*)this->FindParamObject(enum_type);
+ 
+@@ -343,7 +343,7 @@
+ void   Parameters::SetParam(IssmDouble scalar,int enum_type){
+ 
+ 	Param* param=NULL;
+-	
++
+ 	/*first, figure out if the param has already been created: */
+ 	param=(Param*)this->FindParamObject(enum_type);
+ 
+@@ -355,7 +355,7 @@
+ void   Parameters::SetParam(char* string,int enum_type){
+ 
+ 	Param* param=NULL;
+-	
++
+ 	/*first, figure out if the param has already been created: */
+ 	param=(Param*)this->FindParamObject(enum_type);
+ 
+@@ -367,7 +367,7 @@
+ void   Parameters::SetParam(char** stringarray,int M, int enum_type){
+ 
+ 	Param* param=NULL;
+-	
++
+ 	/*first, figure out if the param has already been created: */
+ 	param=(Param*)this->FindParamObject(enum_type);
+ 
+@@ -379,7 +379,7 @@
+ void   Parameters::SetParam(IssmDouble* IssmDoublearray,int M, int enum_type){
+ 
+ 	Param* param=NULL;
+-	
++
+ 	/*first, figure out if the param has already been created: */
+ 	param=(Param*)this->FindParamObject(enum_type);
+ 
+@@ -391,7 +391,7 @@
+ void   Parameters::SetParam(IssmDouble* IssmDoublearray,int M, int N, int enum_type){
+ 
+ 	Param* param=NULL;
+-	
++
+ 	/*first, figure out if the param has already been created: */
+ 	param=(Param*)this->FindParamObject(enum_type);
+ 
+@@ -427,7 +427,7 @@
+ void   Parameters::SetParam(Vector<IssmDouble>* vector,int enum_type){
+ 
+ 	Param* param=NULL;
+-	
++
+ 	/*first, figure out if the param has already been created: */
+ 	param=(Param*)this->FindParamObject(enum_type);
+ 
+@@ -439,7 +439,7 @@
+ void   Parameters::SetParam(Matrix<IssmDouble>* matrix,int enum_type){
+ 
+ 	Param* param=NULL;
+-	
++
+ 	/*first, figure out if the param has already been created: */
+ 	param=(Param*)this->FindParamObject(enum_type);
+ 
+Index: ../trunk-jpl/src/c/Container/Constraints.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Constraints.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/Container/Constraints.cpp	(revision 13622)
+@@ -53,7 +53,6 @@
+ 	#else
+ 		numberofconstraints=localconstraints;
+ 	#endif
+-	
+ 
+ 	return numberofconstraints;
+ }
+Index: ../trunk-jpl/src/c/Container/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13622)
+@@ -65,7 +65,7 @@
+ 	int* truedofs=NULL;
+ 	int* alltruedofs=NULL;
+ 	int  numnodes=0;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 	num_procs=IssmComm::GetSize();
+@@ -234,7 +234,7 @@
+ int   Nodes::NumberOfDofs(int analysis_type,int setenum){
+ 
+ 	int i;
+-	
++
+ 	int   numdofs=0;
+ 	int   allnumdofs;
+ 
+@@ -270,7 +270,7 @@
+ 	/*Careful! only use once all clones have been setup for all nodes!: */
+ 
+ 	int i;
+-	
++
+ 	int   numnodes=0;
+ 	int   allnumnodes=0;
+ 
+@@ -325,7 +325,7 @@
+ 	else{
+ 		/*sid starts at 0*/
+ 		max_sid++;
+-	
++
+ 		/*return*/
+ 		return max_sid;
+ 	}
+@@ -336,7 +336,7 @@
+ 
+ 	int my_rank;
+ 	int        sid;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+Index: ../trunk-jpl/src/c/Container/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13622)
+@@ -64,7 +64,7 @@
+ /*}}}*/
+ /*FUNCTION Elements::DeleteResults{{{*/
+ void Elements::DeleteResults(void){
+-	
++
+ 	for (int i=0;i<this->Size();i++){
+ 		Element* element=(Element*)this->GetObjectByOffset(i);
+ 		element->DeleteResults();
+@@ -107,7 +107,7 @@
+ 	 *
+ 	 * We will use the Patch object, which will store all of the information needed, and will be able 
+ 	 * to output itself to disk on its own. See object/Patch.h for format of this object.*/
+-	
++
+ 	/*First, determine maximum number of vertices, nodes, and number of results: */
+ 	numrows=0;
+ 	numvertices=0;
+@@ -166,7 +166,7 @@
+ void Elements::ToResults(Results* results,Parameters* parameters){
+ 
+ 	int i;
+-	
++
+ 	int my_rank;
+ 	int num_procs;
+ 
+@@ -183,7 +183,7 @@
+ 	int    numberofresults,vectorsize;
+ 	int    rank;
+ 	int    minrank;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 	num_procs=IssmComm::GetSize();
+Index: ../trunk-jpl/src/c/Container/Inputs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Inputs.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/Container/Inputs.cpp	(revision 13622)
+@@ -206,7 +206,7 @@
+ /*}}}*/
+ /*FUNCTION Inputs::ConstrainMin{{{*/
+ void  Inputs::ConstrainMin(int constrain_enum, IssmDouble minimum){
+-	   
++
+ 	Input* constrain_input=NULL; 
+ 	/*Find x and y inputs: */
+ 	constrain_input=(Input*)this->GetInput(constrain_enum);
+@@ -406,7 +406,7 @@
+ /*}}}*/
+ /*FUNCTION Inputs::AXPY{{{*/
+ void  Inputs::AXPY(int MeshYEnum, IssmDouble scalar, int MeshXEnum){
+-	   
++
+ 	Input* xinput=NULL;
+ 	Input* yinput=NULL;
+ 
+Index: ../trunk-jpl/src/c/Container/Vertices.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13622)
+@@ -48,7 +48,7 @@
+ 	int *allpidcount = NULL;
+ 	int *truepids    = NULL;
+ 	int *alltruepids = NULL;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 	num_procs=IssmComm::GetSize();
+@@ -118,7 +118,7 @@
+ 
+ 	int* ranks=NULL;
+ 	int* minranks=NULL;
+-	
++
+ 	/*recover num_procs:*/
+ 	num_procs=IssmComm::GetSize();
+ 
+@@ -185,7 +185,7 @@
+ 
+ 	int my_rank;
+ 	int        sid;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+Index: ../trunk-jpl/src/c/Container/DataSet.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/DataSet.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/Container/DataSet.cpp	(revision 13622)
+@@ -29,7 +29,7 @@
+ /*Constructors/Destructors*/
+ /*FUNCTION DataSet::DataSet(){{{*/
+ DataSet::DataSet(){
+-	
++
+ 	sorted=0;
+ 	sorted_ids=NULL;
+ 	id_offsets=NULL;
+@@ -39,7 +39,7 @@
+ /*FUNCTION DataSet::DataSet(int dataset_enum){{{*/
+ DataSet::DataSet(int dataset_enum){
+ 	enum_type=dataset_enum;
+-	
++
+ 	sorted=0;
+ 	sorted_ids=NULL;
+ 	id_offsets=NULL;
+@@ -129,7 +129,6 @@
+ /*FUNCTION DataSet::DeepEcho{{{*/
+ void DataSet::DeepEcho(){
+ 
+-
+ 	vector<Object*>::iterator object;
+ 
+ 	if(this==NULL)_error_("trying to echo a NULL dataset");
+Index: ../trunk-jpl/src/c/Container/Options.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Options.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/Container/Options.cpp	(revision 13622)
+@@ -41,7 +41,7 @@
+ int  Options::AddOption(Option* in_option){
+ 
+ 	char* name=NULL;
+-	
++
+ 	vector<Object*>::iterator object;
+ 	Option* option=NULL;
+ 
+Index: ../trunk-jpl/src/c/shared/Wrapper/ModuleBoot.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Wrapper/ModuleBoot.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Wrapper/ModuleBoot.cpp	(revision 13622)
+@@ -12,7 +12,7 @@
+ #endif
+ 
+ int ModuleBoot(void){
+-	
++
+ 	/*Some test for MPI_Init crash with mpich2 1.4 on larsen, just ignore*/
+ 	#ifdef _HAVE_PETSC_
+ 		#if _PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 1
+Index: ../trunk-jpl/src/c/shared/Exceptions/exprintf.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/exprintf.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Exceptions/exprintf.cpp	(revision 13622)
+@@ -5,7 +5,6 @@
+  * ErrorException(exprintf("%s%i\n","test failed for id:",id));
+  */ 
+ 
+-
+ #include <stdarg.h>
+ #include <stdio.h>
+ #include "../Alloc/xNewDelete.h"
+Index: ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 13622)
+@@ -28,9 +28,9 @@
+ }
+ 
+ ErrorException::~ErrorException() throw(){
+-	
++
+ 	int num_procs;
+-	
++
+ 	/*recover num_procs:*/
+ 	num_procs=IssmComm::GetSize();
+ 
+@@ -44,16 +44,14 @@
+ }
+ 
+ void ErrorException::Report() const{
+-	
++
+ 	int my_rank;
+ 	int num_procs;
+-	
++
+ 	/*recover my_rank and num_procs:*/
+ 	my_rank=IssmComm::GetRank();
+ 	num_procs=IssmComm::GetSize();
+ 
+-
+-
+ 	if (function_name=="" || file_line==0){ //WINDOWS
+ 		_printString_("Error message: " << what());
+ 	}
+Index: ../trunk-jpl/src/c/shared/Numerics/BrentSearch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/BrentSearch.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Numerics/BrentSearch.cpp	(revision 13622)
+@@ -39,7 +39,7 @@
+ 	xmax=optpars->xmax;
+ 	maxiter=optpars->maxiter;
+ 	cm_jump=optpars->cm_jump;
+-	
++
+ 	/*initialize counter and get response at the boundaries*/
+ 	iter=0;
+ 	fxmin = (*f)(xmin,optargs);
+Index: ../trunk-jpl/src/c/shared/Numerics/OptionsFromAnalysis.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/OptionsFromAnalysis.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Numerics/OptionsFromAnalysis.cpp	(revision 13622)
+@@ -15,7 +15,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ char* OptionsFromAnalysis(Parameters* parameters,int analysis_type){
+-	
++
+ 	/*output: */
+ 	char*   outstring=NULL;
+ 
+Index: ../trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp	(revision 13622)
+@@ -39,11 +39,10 @@
+ 	return value;
+ }
+ 
+-
+ IssmDouble UnitConversionScaleFactor(int type_enum){
+ 
+ 	IssmDouble yts=365.0*24.0*3600.0;
+-	
++
+ 	IssmDouble scale;
+ 	switch(type_enum){
+ 		case TimesteppingStartTimeEnum:              scale=1.0/yts;break; //yr
+Index: ../trunk-jpl/src/c/shared/Numerics/IsInputConverged.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/IsInputConverged.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Numerics/IsInputConverged.cpp	(revision 13622)
+@@ -19,7 +19,7 @@
+ 
+ 	/*output: */
+ 	IssmDouble eps;
+-	
++
+ 	/*intermediary: */
+ 	IssmDouble *newvalues     = NULL;
+ 	IssmDouble *oldvalues     = NULL;
+Index: ../trunk-jpl/src/c/shared/Numerics/cross.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/cross.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Numerics/cross.cpp	(revision 13622)
+@@ -19,4 +19,3 @@
+ 	result[2]=vector1[0]*vector2[1]-vector1[1]*vector2[0];
+ 
+ }
+-
+Index: ../trunk-jpl/src/c/shared/Numerics/OptimalSearch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/OptimalSearch.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Numerics/OptimalSearch.cpp	(revision 13622)
+@@ -37,7 +37,7 @@
+ 	x1       =optpars->xmin;
+ 	x2       =optpars->xmax;
+ 	maxiter  =optpars->maxiter;
+-	
++
+ 	//get the value of the function at the first boundary
+ 	fx1= (*f)(x1,optargs);
+ 	if (xIsNan<IssmDouble>(fx1)) _error_("Function evaluation returned NaN");
+Index: ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Sorting/binary_search.cpp	(revision 13622)
+@@ -46,7 +46,7 @@
+ 				mid = beg + (end-beg)/2;  //new middle
+ 			}
+ 		}
+-			  
++
+ 		//did we find the target?
+ 		if (*mid == target) {
+ 			found=1;
+@@ -59,7 +59,7 @@
+ 
+ 	/*Assign output pointers:*/
+ 	*poffset=offset;
+-	
++
+ 	/*Return result: */
+ 	return found;
+ } /*}}}*/
+Index: ../trunk-jpl/src/c/shared/String/DescriptorIndex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/String/DescriptorIndex.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/String/DescriptorIndex.cpp	(revision 13622)
+@@ -17,7 +17,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ int  DescriptorIndex(char* root, int* pindex,char* descriptor){ //We assume root has already been allocated, and we just have to copy into it.
+-	
++
+ 	char * pch=NULL;
+ 
+ 	/*retrieve first token, separated by underscore: */
+Index: ../trunk-jpl/src/c/shared/Alloc/alloc.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Alloc/alloc.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Alloc/alloc.cpp	(revision 13622)
+@@ -11,7 +11,6 @@
+  * the allocation routines described here do not work.
+  */
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -27,7 +26,7 @@
+ #include "../../classes/objects/objects.h"
+ 
+ void xdelete(Matrix<IssmDouble>** pv){
+-	
++
+ 	if (pv && *pv){
+ 		/*There is no mxDelete in the Matlab API -> using delete trips up Matlab. So we 
+ 		 * don't actually free memory in Matlab, we let the memory manager do that. We only
+Index: ../trunk-jpl/src/c/shared/Threads/LaunchThread.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Threads/LaunchThread.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Threads/LaunchThread.cpp	(revision 13622)
+@@ -30,7 +30,7 @@
+ 	int            *status  = NULL;
+ 	pthread_t      *threads = NULL;
+ 	pthread_handle *handles = NULL;
+-	
++
+ 	/*dynamically allocate: */
+ 	threads=xNew<pthread_t>(num_threads);
+ 	handles=xNew<pthread_handle>(num_threads);
+@@ -51,7 +51,7 @@
+ 			_error_("pthread_join error");
+ 		}
+ 	}
+-	
++
+ 	/*Free ressources:*/
+ 	xDelete<pthread_t>(threads);
+ 	xDelete<pthread_handle>(handles);
+@@ -61,7 +61,7 @@
+ 	handle.gate=gate;
+ 	handle.id=0;
+ 	handle.num=1;
+-	
++
+ 	function((void*)&handle);
+ 	#endif
+ }
+Index: ../trunk-jpl/src/c/shared/Threads/PartitionRange.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Threads/PartitionRange.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Threads/PartitionRange.cpp	(revision 13622)
+@@ -15,11 +15,10 @@
+ 	/*output: */
+ 	int i0=-1;
+ 	int i1=-1;
+-	
++
+ 	int step;
+ 	int i;
+ 
+-
+ 	/*distribute elements across threads :*/
+ 	step=(int)floor((double)num_el/(double)num_threads);
+ 	for(i=0;i<(my_thread+1);i++){
+@@ -28,7 +27,6 @@
+ 		else i1=i0+step;
+ 	}
+ 
+-
+ 	/*Assign output pointers:*/
+ 	*pi0=i0;
+ 	*pi1=i1;
+Index: ../trunk-jpl/src/c/shared/TriMesh/OrderSegments.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/OrderSegments.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/TriMesh/OrderSegments.cpp	(revision 13622)
+@@ -5,7 +5,7 @@
+ #include "./trimesh.h"
+ 
+ int OrderSegments(double** psegments,int nseg, double* index,int nel){
+-	
++
+ 	/*Error management: */
+ 	int i;
+ 	int noerr=1;
+@@ -18,7 +18,6 @@
+ 	/*element indices: */
+ 	int el;
+ 
+-
+ 	/*Recover segments: */
+ 	segments=*psegments;
+ 
+Index: ../trunk-jpl/src/c/shared/TriMesh/SplitMeshForRifts.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/SplitMeshForRifts.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/TriMesh/SplitMeshForRifts.cpp	(revision 13622)
+@@ -11,10 +11,10 @@
+ 	index  of size nelx3
+ 	x and y of size nodsx1
+ 	segments of size nsegsx3*/
+-	
++
+ 	/*Error management: */
+ 	int noerr=1;
+-	
++
+ 	int i,j,k,l;
+ 	int node;
+ 	int el;
+@@ -22,7 +22,7 @@
+ 	int  nriftsegs;
+ 	int* riftsegments=NULL; 
+ 	int* flags=NULL;
+-	
++
+ 	int  NumGridElementListOnOneSideOfRift;
+ 	int* GridElementListOnOneSideOfRift=NULL;
+ 
+@@ -54,7 +54,7 @@
+ 	flags=xNewZeroInit<int>(nods); //to make sure we don't split the same nodes twice!
+ 	for (i=0;i<nriftsegs;i++){
+ 		for (j=0;j<2;j++){
+-	
++
+ 			node=riftsegments[4*i+j+2];
+ 			if(flags[node-1]){
+ 				/*This node was already split, skip:*/
+@@ -65,9 +65,9 @@
+ 			}
+ 
+ 			if(IsGridOnRift(riftsegments,nriftsegs,node)){
+-			
++
+ 				DetermineGridElementListOnOneSideOfRift(&NumGridElementListOnOneSideOfRift,&GridElementListOnOneSideOfRift,i,nriftsegs,riftsegments,node,index,nel);
+-			
++
+ 				/*Summary: we have for node, a list of elements
+ 				 * (GridElementListOnOneSideOfRift, of size
+ 				 * NumGridElementListOnOneSideOfRift) that all contain node 
+Index: ../trunk-jpl/src/c/shared/TriMesh/AssociateSegmentToElement.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/AssociateSegmentToElement.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/TriMesh/AssociateSegmentToElement.cpp	(revision 13622)
+@@ -5,7 +5,7 @@
+ #include "./trimesh.h"
+ 
+ int AssociateSegmentToElement(double** psegments,int nseg, double* index,int nel){
+-	
++
+ 	/*Error management: */
+ 	int i;
+ 	int noerr=1;
+@@ -29,5 +29,3 @@
+ 	*psegments=segments;
+ 	return noerr;
+ }
+-
+-
+Index: ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 13622)
+@@ -16,7 +16,7 @@
+ 
+ 	/*Does this node belong to 4 elements, or just 2? If it belongs to 4 elements, it is inside a rift, 
+ 	 *if it belongs to 2 elements, it is on the tip of a rift, or it has already been split across the rift (see below).*/
+-	
++
+ 	int i;
+ 	int j;
+ 	int count;
+@@ -118,10 +118,10 @@
+ }/*}}}*/
+ /*FUNCTION RiftSegmentsFromSegments{{{*/
+ void RiftSegmentsFromSegments(int* pnriftsegs, int** priftsegments, int nel, double* index, int nsegs,double* segments){
+-	
++
+ 	int i,counter;
+ 	int el,el2;
+-	
++
+ 	int  nriftsegs;
+ 	int* riftsegments=NULL;
+ 	int* riftsegments_uncompressed=NULL; 
+@@ -178,7 +178,7 @@
+ 	}
+ 
+ 	xDelete<int>(riftsegments_uncompressed);
+-	
++
+ 	/*Assign output pointers: */
+ 	*priftsegments=riftsegments;
+ 	*pnriftsegs=nriftsegs;
+@@ -343,7 +343,7 @@
+ 	*psegments=segments;
+ 	*psegmentmarkerlist=segmentmarkerlist;
+ 	*pnsegs=nsegs;
+-	
++
+ 	return noerr;
+ }/*}}}*/
+ /*FUNCTION pnpoly{{{*/
+@@ -383,7 +383,7 @@
+ 	double *segments          = NULL;
+ 	double *segmentmarkerlist = NULL;
+ 	int numsegs;
+-	
++
+ 	/*output: */
+ 	int      new_numsegs;
+ 	int     *riftsnumsegs       = NULL;
+@@ -460,7 +460,6 @@
+ /*FUNCTION PairRiftElements{{{*/
+ int PairRiftElements(int** priftsnumpairs, double*** priftspairs,int numrifts,int* riftsnumsegments, double** riftssegments,double* x,double* y){
+ 
+-
+ 	int noerr=1;
+ 	int i,j,k;
+ 
+@@ -692,7 +691,7 @@
+ 
+ 	int i;
+ 	int noerr=1;
+-	
++
+ 	/*output: */
+ 	int riftflag=0;
+ 	int numrifts=0;
+@@ -716,7 +715,7 @@
+ }/*}}}*/
+ /*FUNCTION OrderRifts{{{*/
+ int OrderRifts(double** priftstips, double** riftssegments,double** riftspairs,int numrifts,int* riftsnumsegments,double* x,double* y,int nods,int nels){
+-	
++
+ 	int noerr=1;
+ 	int i,j,k,counter;
+ 
+@@ -746,7 +745,7 @@
+ 		riftsegments=riftssegments[i];
+ 		riftpairs=riftspairs[i];
+ 		numsegs=riftsnumsegments[i];
+-	
++
+ 		/*Allocate copy of riftsegments and riftpairs, 
+ 		 *as well as ordering vector: */
+ 		riftsegments_copy=xNew<double>(numsegs*3);
+@@ -792,7 +791,7 @@
+ 					break;
+ 				}
+ 			}
+-		
++
+ 			if (node4==node2){
+ 				/*node2 is a tip*/
+ 				if (tip1==-1){
+@@ -817,7 +816,7 @@
+ 			for (j=0;j<numsegs;j++){
+ 				node1=(int)*(riftsegments+3*j+0);
+ 				node2=(int)*(riftsegments+3*j+1);
+-				
++
+ 				if ((node1==node) || (node2==node)){
+ 					/*Ok, this segment is connected to node, plug its index into order, unless we already plugged it before: */
+ 					already_ordered=0;
+@@ -850,7 +849,7 @@
+ 			*(riftpairs_copy+2*j+0)=*(riftpairs+2*order[j]+0);
+ 			*(riftpairs_copy+2*j+1)=*(riftpairs+2*order[j]+1);
+ 		}
+-		
++
+ 		for (j=0;j<numsegs;j++){
+ 			*(riftsegments+3*j+0)=*(riftsegments_copy+3*j+0);
+ 			*(riftsegments+3*j+1)=*(riftsegments_copy+3*j+1);
+@@ -872,7 +871,6 @@
+ /*FUNCTION PenaltyPairs{{{*/
+ int PenaltyPairs(double*** priftspenaltypairs,int** priftsnumpenaltypairs,int numrifts,double** riftssegments,
+ 		int* riftsnumsegs,double** riftspairs,double* riftstips,double* x,double* y){
+-		
+ 
+ 	int noerr=1;
+ 	int i,j,k,k0;
+@@ -905,7 +903,7 @@
+ 
+ 		/*allocate riftpenaltypairs, and riftnumpenaltypairs: */
+ 		if((numsegs/2-1)!=0)riftpenaltypairs=xNewZeroInit<double>((numsegs/2-1)*RIFTPENALTYPAIRSWIDTH);
+-		
++
+ 		/*Go through only one flank of the rifts, not counting the tips: */
+ 		counter=0;
+ 		for(j=0;j<(numsegs/2);j++){
+@@ -996,7 +994,7 @@
+ 			*(riftpenaltypairs+j*7+4)=*(riftpenaltypairs+j*7+4)/magnitude;
+ 			*(riftpenaltypairs+j*7+5)=*(riftpenaltypairs+j*7+5)/magnitude;
+ 		}
+-		
++
+ 		riftspenaltypairs[i]=riftpenaltypairs;
+ 		riftsnumpenaltypairs[i]=(numsegs/2-1);
+ 	}
+@@ -1035,7 +1033,6 @@
+ 	y=*py;
+ 	nods=*pnods;
+ 
+-
+ 	for (i=0;i<num_seg;i++){
+ 		node1=*(segments+3*i+0);
+ 		node2=*(segments+3*i+1);
+Index: ../trunk-jpl/src/c/shared/Elements/GetLocalDofList.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/GetLocalDofList.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Elements/GetLocalDofList.cpp	(revision 13622)
+@@ -15,7 +15,6 @@
+ 		ndof_list=xNew<int>(numnodes);
+ 		ngdof_list_cumulative=xNew<int>(numnodes);
+ 
+-
+ 		/*Get number of dofs per node, and total for this given set*/
+ 		numdof=0;
+ 		numgdof=0;
+Index: ../trunk-jpl/src/c/shared/Elements/GetGlobalDofList.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/GetGlobalDofList.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Elements/GetGlobalDofList.cpp	(revision 13622)
+@@ -9,7 +9,6 @@
+ 	int* ndof_list=NULL;
+ 	int *doflist = NULL;
+ 
+-
+ 	if(numnodes){
+ 
+ 		/*Allocate:*/
+Index: ../trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp	(revision 13622)
+@@ -10,7 +10,7 @@
+   IssmDouble B;    // surface mass balance, melt+accumulation
+ 
+   int    iqj,imonth, j;
+-  
++
+   IssmDouble saccu;     // yearly surface accumulation
+   IssmDouble smelt;     // yearly melt
+   IssmDouble precrunoff;      // yearly runoff
+@@ -18,7 +18,7 @@
+   IssmDouble water; //water=rain + snowmelt 
+   IssmDouble runoff; //meltwater only, does not include rain 
+   IssmDouble sconv; //rhow_rain/rhoi / 12 months
+-  
++
+   IssmDouble density;
+   IssmDouble lapser=6.5/1000., sealev=0.;    // lapse rate. degrees per meter. 7.5 lev's 99 paper, 9 Marshall 99 paper
+   IssmDouble desfac = 0.5;                 // desert elevation factor
+@@ -26,7 +26,7 @@
+   IssmDouble s0t=0.;         // should be set to elevation from temperature source
+   IssmDouble st;             // elevation between altitude of the temp record and current altitude
+   IssmDouble sp;             // elevation between altitude of the prec record and current altitude
+-  
++
+   // PDD and PD constants and variables
+   IssmDouble siglim;          // sigma limit for the integration which is equal to 2.5 sigmanorm
+   IssmDouble signormc = signorm - 0.5;     // sigma of the temperature distribution for cloudy day
+@@ -34,31 +34,30 @@
+   IssmDouble PDup, pddsig, PDCUT = 2.0; // PDcut: rain/snow cutoff temperature (C)
+   IssmDouble DT = 0.02;
+   IssmDouble pddt, pd; // pd: snow/precip fraction, precipitation falling as snow
+-  
++
+   IssmDouble q, qmpt; // q is desert/elev. fact, hnpfac is huybrect fact, and pd is normal dist.
+   IssmDouble qm = 0.;        // snow part of the precipitation 
+   IssmDouble qmt = 0.;       // precipitation without desertification effect adjustment
+   IssmDouble qmp = 0.;       // desertification taken into account
+   IssmDouble pdd = 0.;     
+   IssmDouble frzndd = 0.;  
+-  
++
+   IssmDouble tstar;          // monthly mean surface temp
+   IssmDouble Tsum= 0.;       // average summer (JJA) temperature
+   IssmDouble Tsurf = 0.;     // average annual temperature    
+-  
+ 
+   IssmDouble deltm=1./12.;
+   int    ismon[12]={11,0,1,2,3,4,5,6,7,8,9,10};
+-  
++
+   IssmDouble snwm;  // snow that could have been melted in a year.
+   IssmDouble snwmf; //  ablation factor for snow per positive degree day.
+   IssmDouble smf;   //  ablation factor for ice per pdd (Braithwaite 1995 from tarasov 2002).
+-  
++
+   IssmDouble dfrz=1.5, CovrLm=2009./3.35e+5, dCovrLm=dfrz*CovrLm; //m*J kg^-1 C^-1 /(J kg^-1)=m/C yr
+   IssmDouble supice,supcap,diffndd;
+   IssmDouble fsupT=0.5,  fsupndd=0.5;  // Tsurf mode factors for supice
+   IssmDouble pddtj, hmx2;
+-  
++
+   sconv=(rho_water/rho_ice)/12.; //rhow_rain/rhoi / 12 months
+ 
+   /*PDD constant*/
+@@ -67,32 +66,32 @@
+   siglim0 = siglim/DT + 0.5;
+   siglim0c = siglimc/DT + 0.5;
+   PDup = siglimc+PDCUT;
+-  
++
+   // seasonal loop
+     for (iqj = 0; iqj < 12; iqj++){
+       imonth =  ismon[iqj];
+-  
++
+       st=(s-s0t)/1000.;
+       tstar = monthlytemperatures[imonth] - lapser *max(st,sealev);
+       Tsurf = tstar*deltm+Tsurf;        
+-      
++
+       /*********compute PD ****************/
+       if (tstar < PDup){
+ 	pd = 1.;
+ 	if (tstar >= -siglimc){ pd = pds[reCast<int,IssmDouble>(tstar/DT + siglim0c)];}}
+       else { 
+ 	pd = 0.;}
+-      
++
+       /******exp des/elev precip reduction*******/
+       sp=(s-s0p)/1000.; // deselev effect is wrt chng in topo
+       if (sp>0.0){q = exp(-desfac*sp);}
+       else {q = 1.0;}
+-      
++
+       qmt= qmt + monthlyprec[imonth]*sconv;  //*sconv to convert in m of ice equivalent per month
+       qmpt= q*monthlyprec[imonth]*sconv;           
+       qmp= qmp + qmpt;
+       qm= qm + qmpt*pd;
+-      
++
+       /*********compute PDD************/
+       // ndd(month)=-(tstar-pdd(month)) since ndd+pdd gives expectation of
+       // gaussian=T_m, so ndd=-(Tsurf-pdd)
+@@ -104,12 +103,12 @@
+ 	frzndd = frzndd - (tstar-pddsig)*deltm;}
+       else{frzndd = frzndd - tstar*deltm; }
+   } // end of seasonal loop 
+-  
++
+   //******************************************************************
+     saccu = qm;
+     prect = qmp;     // total precipitation during 1 year taking into account des. ef.
+     Tsum=Tsum/3;
+-    
++
+     /***** determine PDD factors *****/
+     if(Tsum< -1.) {
+       snwmf=2.65*0.001;   //  ablation factor for snow per positive degree day.*0.001 to go from mm to m/ppd
+@@ -125,12 +124,12 @@
+     }
+     snwmf=0.95*snwmf;
+     smf=0.95*smf;
+-    
++
+     /*****  compute PDD ablation and refreezing *****/
+     pddt = pdd *365;
+     snwm = snwmf*pddt;       // snow that could have been melted in a year
+     hmx2 = min(h,dfrz);   // refreeze active layer max depth: dfrz
+-    
++
+     if(snwm < saccu) {
+       water=prect-saccu + snwm; //water=rain + snowmelt
+       //     l 2.2= capillary factor
+@@ -146,9 +145,9 @@
+       //     going to
+       //     hold the meltwater around for refreezing? And melt-time will have
+       //     low seasonal frzndd
+-      
++
+       //      Superimposed ice :  Pfeffer et al. 1991, Tarasov 2002
+-      
++
+       supice= min(hmx2*CovrLm*frzndd+2.2*(saccu-snwm), water); // superimposed ice
+       supcap=min(2.2*(saccu-snwm),water);
+       runoff=snwm - supice;  //meltwater only, does not include rain
+@@ -171,7 +170,7 @@
+     //     1 dm supice should not raise Tsurf by 1/dCovrLm = 16.675C
+     //     does supice make sense when H< 0.1m? then d=thermoactive ice layer ////
+     //     < 0.1 
+-    
++
+     //     make more sense to just use residual pdd-ndd except that pdd
+     //     residual not clear yet
+     //     frzndd should not be used up by refreezing in snow, so stick in
+@@ -196,10 +195,10 @@
+     //yet from site plots, can be ice free with Tsurf=-5.5C
+     if(Tsurf<0) {
+       Tsurf= min(Tsurf+fsupT*diffndd , 0.);}
+-    
++
+     B = -smelt+saccu;
+     B = B/yts;
+     pddtj=pddt;
+-  
++
+   return B;
+ }
+Index: ../trunk-jpl/src/c/shared/Elements/Paterson.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/Paterson.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Elements/Paterson.cpp	(revision 13622)
+@@ -9,7 +9,7 @@
+ #include "../../include/include.h"
+ 
+ IssmDouble Paterson(IssmDouble temperature){
+-	
++
+ 	/*output: */
+ 	IssmDouble B;
+ 	IssmDouble T;
+@@ -29,7 +29,6 @@
+ //	% fittedmodel=fit(Temp,B,'cubicspline');
+ //	% B=fittedmodel(temperature);
+ 
+-
+ 	if(T<=-45.0){
+ 		B=pow((IssmPDouble)10,(IssmPDouble)8)*(-0.000292866376675*pow(T+50,3)+ 0.011672640664130*pow(T+50,2)  -0.325004442485481*(T+50)+  6.524779401948101);
+ 	}
+@@ -69,6 +68,3 @@
+ 
+ 	return B;
+ }
+-
+-
+-
+Index: ../trunk-jpl/src/c/shared/Exp/DomainOutlineWrite.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exp/DomainOutlineWrite.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Exp/DomainOutlineWrite.cpp	(revision 13622)
+@@ -11,7 +11,7 @@
+ #include "../Exceptions/exceptions.h"
+ 
+ int DomainOutlineWrite(int nprof,int* profnvertices,double** pprofx,double** pprofy,bool* closed,char* domainname){
+-	
++
+ 	/*Error management: */
+ 	int noerr=1;
+ 	int i,counter;
+@@ -32,10 +32,10 @@
+ 		fprintf(fid,"%s %s\n","##","Name:");
+ 		fprintf(fid,"%s %s\n","##","Icon:0");
+ 		fprintf(fid,"%s %s %s %s\n","#","Points","Count","Value");
+-		
++
+ 		/*Write number of profile vertices: */
+ 		fprintf(fid,"%u %s\n",profnvertices[counter]  ,"1.");
+-	
++
+ 		/*Write next line: */
+ 		fprintf(fid,"%s %s %s %s %s\n","#","X","pos","Y","pos");
+ 
+Index: ../trunk-jpl/src/c/shared/Exp/IsInPoly.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exp/IsInPoly.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Exp/IsInPoly.cpp	(revision 13622)
+@@ -17,7 +17,7 @@
+ int pnpoly(int npol, double *xp, double *yp, double x, double y, int edgevalue) {
+ 	int i, j, c = 0;
+ 	double n1, n2, normp, scalar;
+-	
++
+ 	/*first test, are they colinear? if yes, is the point in the middle of the segment*/
+ 	if (edgevalue != 2 ){
+ 		for (i = 0, j = npol-1; i < npol; j = i++) {
+Index: ../trunk-jpl/src/c/shared/Exp/IsInPolySerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exp/IsInPolySerial.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/shared/Exp/IsInPolySerial.cpp	(revision 13622)
+@@ -4,10 +4,8 @@
+ 
+ #include <math.h>
+ 
+-
+ #include "./exp.h"
+ 
+-
+ int IsInPolySerial(double* in,double* xc,double* yc,int numvertices,double* x,double* y,int nods, int edgevalue){
+ 
+ 	int i,j;
+Index: ../trunk-jpl/src/c/io/PrintfFunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/io/PrintfFunction.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/io/PrintfFunction.cpp	(revision 13622)
+@@ -18,7 +18,7 @@
+ 	int   my_rank;
+ 	//variable list of arguments
+ 	va_list args;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+@@ -53,7 +53,7 @@
+ }
+ int PrintfFunction(const string & message){
+ 	int  my_rank;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+Index: ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp
+===================================================================
+--- ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp	(revision 13622)
+@@ -12,7 +12,7 @@
+ 
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+-	
++
+ 	/* output: */
+ 	FILE* fid=NULL;
+ 
+Index: ../trunk-jpl/src/c/io/Disk/pfopen.cpp
+===================================================================
+--- ../trunk-jpl/src/c/io/Disk/pfopen.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/io/Disk/pfopen.cpp	(revision 13622)
+@@ -15,11 +15,10 @@
+ FILE* pfopen(char* filename,const char* format){
+ 
+ 	FILE* fid=NULL;
+-	
++
+ 	/*Open handle to data on disk: */
+ 	fid=fopen(filename,format);
+ 	if(fid==NULL) _error_("could not open file " << filename << " for binary reading or writing"); 
+ 
+ 	return fid;
+ }
+-
+Index: ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp	(revision 13622)
+@@ -13,7 +13,7 @@
+ 			double* index_data, double* x_data, double* y_data, int nods_data,int nels_data, double* data, int data_length,
+ 			double* x_prime, double* y_prime, int nods_prime,
+ 			double* default_values,int num_default_values,Contour<IssmPDouble>** contours,int numcontours){
+-	
++
+ 	/*Output*/
+ 	SeqVec<IssmPDouble>* data_prime=NULL;
+ 
+Index: ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp	(revision 13622)
+@@ -17,7 +17,7 @@
+ 	InterpFromMesh2dxThreadStruct *gate        = (InterpFromMesh2dxThreadStruct*)handle->gate;
+ 	int                            my_thread   = handle->id;
+ 	int                            num_threads = handle->num;
+-	
++
+ 	/*recover parameters :*/
+ 	int     interpolation_type      = gate->interpolation_type;
+ 	bool    debug                   = gate->debug;
+Index: ../trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp	(revision 13622)
+@@ -9,7 +9,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void MinVzx( IssmDouble* pminvz, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-	
++
+ 	int i;
+ 	IssmDouble minvz;
+ 	IssmDouble node_minvz;
+@@ -19,7 +19,7 @@
+ 	for(i=0;i<elements->Size();i++){
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		element->MinVz(&element_minvz,process_units); //go pick up the minimum velocity in the inputs
+-	
++
+ 		if(i==0)minvz=element_minvz; //initialize minvz
+ 		else{
+ 			if(element_minvz<minvz)minvz=element_minvz;
+Index: ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.cpp	(revision 13622)
+@@ -9,7 +9,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void MaxVxx( IssmDouble* pmaxvx, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-	
++
+ 	int i;
+ 	IssmDouble maxvx;
+ 	IssmDouble node_maxvx;
+@@ -19,7 +19,7 @@
+ 	for(i=0;i<elements->Size();i++){
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		element->MaxVx(&element_maxvx,process_units); //go pick up the minimum velocity in the inputs
+-	
++
+ 		if(i==0)maxvx=element_maxvx; //initialize maxvx
+ 		else{
+ 			if(element_maxvx>maxvx)maxvx=element_maxvx;
+Index: ../trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp	(revision 13622)
+@@ -17,7 +17,6 @@
+ #include "../../toolkits/toolkits.h"
+ #include "../modules.h"
+ 
+-			
+ void AverageOntoPartitionx(double** paverage, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,double* vertex_response){
+ 
+ 	int     i,j,k;
+Index: ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.cpp	(revision 13622)
+@@ -23,7 +23,7 @@
+ 
+ 	/*Go through elements, and figure out the minimum of the time steps for each element (using CFL criterion): */
+ 	element=(Element*)elements->GetObjectByOffset(0); min_dt=element->TimeAdapt();
+-	
++
+ 	for (i=1;i<elements->Size();i++){
+ 		element=(Element*)elements->GetObjectByOffset(i);
+ 		dt=element->TimeAdapt();
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 13622)
+@@ -14,7 +14,7 @@
+ 
+ int InterpFromMeshToMesh2dx(double** pdata_interp,int* index_data,double* x_data,double* y_data,int nods_data,int nels_data,
+ 			double* data,int M_data,int N_data,double* x_interp,double* y_interp,int N_interp,Options* options){
+-	
++
+ 	/*Output*/
+ 	double* data_interp=NULL;
+ 
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp	(revision 13622)
+@@ -20,7 +20,6 @@
+ 	xDelete<IssmDouble>(serial_vector);
+ }
+ 
+-	
+ void InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble* vector, int name, int type){
+ 
+ 	int i;
+@@ -45,7 +44,7 @@
+ }
+ 
+ void InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int* vector, int name, int type){
+-	
++
+ 	int i;
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+Index: ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 13622)
+@@ -4,7 +4,7 @@
+  */
+ 
+ #include "./Reducevectorgtofx.h"
+- 
++
+ void Reducevectorgtofx(Vector<IssmDouble>** puf, Vector<IssmDouble>* ug, Nodes* nodes,Parameters* parameters){
+ 
+ 	/*output: */
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 13622)
+@@ -68,7 +68,7 @@
+ 			griddata[i*ncols+j]=default_value;
+ 		}
+ 	}
+-	
++
+ 	/*Get extreme coordinates of the grid*/
+ 	if (xflip){
+ 		x_grid_min=x_grid[ncols-1]; x_grid_max=x_grid[0];
+Index: ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp	(revision 13622)
+@@ -10,8 +10,6 @@
+ 
+ void RequestedDependentsx(Results* results,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters){
+ 
+-
+-
+ 	int         i;
+ 	bool        isautodiff      = false;
+ 	IssmDouble  output_value;
+Index: ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp	(revision 13622)
+@@ -10,7 +10,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void SmearFunctionx(Vec* psmearedvector,double (*WeightFunction)(double distance,double radius), int SmearedFieldEnum, double radius,Elements* elements,Nodes* nodes, Parameters* parameters){
+-	
++
+ 	Element *element = NULL;
+ 	Vec x=NULL;
+ 	Vec y=NULL;
+@@ -28,7 +28,7 @@
+ 	/*allocate: */
+ 	gsize=nodes->NumberOfDofs(configuration_type,GsetEnum);
+ 	smearedvector=NewVec(gsize,IssmComm::GetComm());
+-	
++
+ 	x=NewVec(gsize,IssmComm::GetComm());
+ 	y=NewVec(gsize,IssmComm::GetComm());
+ 	z=NewVec(gsize,IssmComm::GetComm());
+@@ -37,20 +37,16 @@
+ 
+ 	}
+ 
+-
+-
+ 	/*Fill smearedvector vector: */
+ 	for (i=0;i<elements->Size();i++){
+ 		element=(Element*)elements->GetObjectByOffset(i);
+ 		element->SmearFunction(smearedvector,WeightFunction,SmearedFieldEnum,radius);
+ 	}
+ 
+-
+ 	VecAssemblyBegin(smearedvector);
+ 	VecAssemblyEnd(smearedvector);
+-	
++
+ 	/*Assign output pointers: */
+ 	*psmearedvector=smearedvector;
+ 
+ }
+-
+Index: ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 13622)
+@@ -18,9 +18,9 @@
+ 	IssmDouble*  old_floatingice                  = NULL;
+ 	Vector<IssmDouble>*      vec_old_floatingice              = NULL;
+ 	Element* element                          = NULL;
+-	
++
+ 	if(VerboseModule()) _pprintLine_("   Migrating grounding line");
+-	
++
+ 	/*retrieve parameters: */
+ 	parameters->FindParam(&migration_style,GroundinglineMigrationEnum);
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+@@ -120,7 +120,6 @@
+ 	Node*    node                                  = NULL;
+ 	Element* element                               = NULL;
+ 
+-
+ 	/*recover parameters: */
+ 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	numberofvertices=vertices->NumberOfVertices();
+@@ -131,7 +130,7 @@
+ 
+ 	nflipped=1; //bootstrap
+ 	while(nflipped){
+-		
++
+ 		/*Vector of size number of elements*/
+ 		vec_elements_neighboring_floatingice=new Vector<IssmDouble>(elements->NumberOfElements(),true);
+ 
+@@ -154,7 +153,7 @@
+ 			}
+ 		}
+ 		vec_nodes_on_floatingice->Assemble();
+-		
++
+ 		#ifdef _HAVE_MPI_
+ 		MPI_Allreduce(&local_nflipped,&nflipped,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+ 		if(VerboseConvergence()) _pprintLine_("   Additional number of vertices allowed to unground: " << nflipped);
+Index: ../trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.cpp	(revision 13622)
+@@ -17,9 +17,9 @@
+ //    OUTPUT: mass-balance (m/yr ice): agd(NA)
+ 
+   int    i;
+-  
++
+   Element* element = NULL;
+-  
++
+   for(i=0;i<elements->Size();i++){
+     element=(Element*)elements->GetObjectByOffset(i);
+     element->SmbGradients();
+Index: ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.cpp	(revision 13622)
+@@ -9,7 +9,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void MaxAbsVxx( IssmDouble* pmaxabsvx, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-	
++
+ 	int i;
+ 	IssmDouble maxabsvx;
+ 	IssmDouble node_maxabsvx;
+@@ -19,7 +19,7 @@
+ 	for(i=0;i<elements->Size();i++){
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		element->MaxAbsVx(&element_maxabsvx,process_units); //go pick up the maximum velocity in the inputs
+-	
++
+ 		if(i==0)maxabsvx=element_maxabsvx; //initialize maxabsvx
+ 		else{
+ 			if(element_maxabsvx>maxabsvx)maxabsvx=element_maxabsvx;
+Index: ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 13622)
+@@ -9,7 +9,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void InputDuplicatex(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int original_enum, int new_enum){
+-	
++
+ 	/*Go through elemnets, and ask to reinitialie the input: */
+ 	int      i;
+ 	for(i=0;i<elements->Size();i++){
+Index: ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp	(revision 13622)
+@@ -36,10 +36,10 @@
+ }
+ 
+ void GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){
+-	
++
+ 	/*output: */
+ 	IssmDouble* vector=NULL;
+-	
++
+ 	/*intermediary: */
+ 	Vector<IssmDouble>* vec_vector=NULL;
+ 
+Index: ../trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp	(revision 13622)
+@@ -10,7 +10,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void MinVelx( IssmDouble* pminvel, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-	
++
+ 	int i;
+ 	IssmDouble minvel;
+ 	IssmDouble node_minvel;
+@@ -20,7 +20,7 @@
+ 	for(i=0;i<elements->Size();i++){
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		element->MinVel(&element_minvel,process_units); //go pick up the minimum velocity in the inputs
+-	
++
+ 		if(i==0)minvel=element_minvel; //initialize minvel
+ 		else{
+ 			if(element_minvel<minvel)minvel=element_minvel;
+Index: ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.cpp	(revision 13622)
+@@ -10,7 +10,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void MaxVelx( IssmDouble* pmaxvel, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-	
++
+ 	int i;
+ 	IssmDouble maxvel;
+ 	IssmDouble node_maxvel;
+@@ -20,7 +20,7 @@
+ 	for(i=0;i<elements->Size();i++){
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		element->MaxVel(&element_maxvel,process_units); //go pick up the maximum velocity in the inputs
+-	
++
+ 		if(i==0)maxvel=element_maxvel; //initialize maxvel
+ 		else{
+ 			if(element_maxvel>maxvel)maxvel=element_maxvel;
+Index: ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 13622)
+@@ -26,10 +26,10 @@
+ 	/*Get size of vector: */
+ 	gsize=nodes->NumberOfDofs(configuration_type,GsetEnum);
+ 	if (gsize==0) _error_("Allocating a Vec of size 0 as gsize=0 for configuration: " << EnumToStringx(configuration_type));
+-	
++
+ 	/*Initialize solution: */
+ 	solution=new Vector<IssmDouble>(gsize);
+-	
++
+ 	/*Go through elements and plug solution: */
+ 	for (i=0;i<elements->Size();i++){
+ 		element=(Element*)elements->GetObjectByOffset(i);
+Index: ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.cpp	(revision 13622)
+@@ -19,7 +19,7 @@
+ 	for(i=0;i<elements->Size();i++){
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		element->MaxVy(&element_maxvy,process_units); //go pick up the minimum velocity in the inputs
+-	
++
+ 		if(i==0)maxvy=element_maxvy; //initialize maxvy
+ 		else{
+ 			if(element_maxvy>maxvy)maxvy=element_maxvy;
+Index: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/SegmentIntersect.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/SegmentIntersect.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/SegmentIntersect.cpp	(revision 13622)
+@@ -10,7 +10,7 @@
+ 	/*output: */
+ 	double alpha=-1;
+ 	double beta=-1;
+-	
++
+ 	double xA,xB,xC,xD,yA,yB,yC,yD;
+ 	double O2A[2],O2B[2],O1C[2],O1D[2];
+ 	double n1[2],n2[2];
+@@ -29,7 +29,6 @@
+ 	O1C[0]=xC -(xA/2+xB/2); O1C[1]=yC -(yA/2+yB/2);
+ 	O1D[0]=xD -(xA/2+xB/2); O1D[1]=yD -(yA/2+yB/2);
+ 
+-
+ 	n1[0]=yA-yB; n1[1]=xB-xA;  //normal vector to segA
+ 	n2[0]=yC-yD; n2[1]=xD-xC;  //normal vector to segB
+ 
+Index: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/ElementSegmentsIntersection.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/ElementSegmentsIntersection.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/ElementSegmentsIntersection.cpp	(revision 13622)
+@@ -2,7 +2,7 @@
+  */
+ 
+ #include "./MeshProfileIntersectionx.h"
+-		
++
+ void ElementSegmentsIntersection(DataSet* segments_dataset,int el, double* xnodes,double* ynodes,double* xc,double* yc,int numnodes){
+ 
+ 	int i;
+Index: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/NodeInElement.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/NodeInElement.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/NodeInElement.cpp	(revision 13622)
+@@ -18,10 +18,9 @@
+ 	y2=ynodes[1];
+ 	y3=ynodes[2];
+ 
+-
+ 	/*compute determinant: */
+ 	det=x1*y2-x1*y3-x3*y2-x2*y1+x2*y3+x3*y1;
+-	
++
+ 	/*area coordinates: */
+ 	lambda1=((y2-y3)*(x-x3)+(x3-x2)*(y-y3))/det;
+ 	lambda2=((y3-y1)*(x-x3)+(x1-x3)*(y-y3))/det;
+Index: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshSegmentsIntersection.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshSegmentsIntersection.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshSegmentsIntersection.cpp	(revision 13622)
+@@ -11,7 +11,7 @@
+ 	double*  segments=NULL;
+ 	Segment<double>* segment=NULL;
+ 	int     numsegs;
+-	
++
+ 	/*intermediary: */
+ 	DataSet* segments_dataset=NULL;
+ 	double   xnodes[3];
+@@ -34,7 +34,7 @@
+ 	segments=xNew<double>(5*numsegs);
+ 	for(i=0;i<numsegs;i++){
+ 		Segment<double>* segment=(Segment<double>*)segments_dataset->GetObjectByOffset(i);
+-		
++
+ 		/*x1,y1,x2,y2 then element_id: */
+ 		*(segments+5*i+0)=segment->x1;
+ 		*(segments+5*i+1)=segment->y1;
+Index: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/ElementSegment.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/ElementSegment.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/ElementSegment.cpp	(revision 13622)
+@@ -2,7 +2,7 @@
+  */
+ 
+ #include "./MeshProfileIntersectionx.h"
+-		
++
+ void ElementSegment(DataSet* segments_dataset,int el,double* xnodes,double* ynodes,double* xsegment,double* ysegment){
+ 
+ 	/*We have a tria element (xnodes,ynodes) and a segment (xsegment,ysegment). Find whether they intersect. 
+@@ -13,14 +13,13 @@
+ 	double alpha1,alpha2;
+ 	double beta1,beta2;
+ 	double gamma1,gamma2;
+-	
++
+ 	int    edge1,edge2,edge3;
+ 
+ 	double xel[2],yel[2];
+ 	double coord1,coord2;
+ 	double xfinal[2],yfinal[2];
+ 
+-	
+ 	/*edge 1: */
+ 	xel[0]=xnodes[0];  yel[0]=ynodes[0]; xel[1]=xnodes[1];  yel[1]=ynodes[1];
+ 	edge1=SegmentIntersect(&alpha1,&alpha2, xel,yel,xsegment,ysegment); //alpha1: segment coordinate of intersection. alpha2: same thing for second interesection if it exists (colinear edges)
+@@ -40,7 +39,7 @@
+ 		_error_("error: a line cannot go through 3 different vertices!");
+ 	}
+ 	else if(    ((edge1==IntersectEnum) && (edge2==IntersectEnum)) || ((edge2==IntersectEnum) && (edge3==IntersectEnum)) || ((edge3==IntersectEnum) && (edge1==IntersectEnum))   ){
+-	
++
+ 		/*segment interscts 2 opposite edges of our triangle, at 2 segment coordinates, pick up the lowest (coord1) and highest (coord2): */
+ 		if((edge1==IntersectEnum) && (edge2==IntersectEnum)) {coord1=min(alpha1,beta1); coord2=max(alpha1,beta1);}
+ 		if((edge2==IntersectEnum) && (edge3==IntersectEnum)) {coord1=min(beta1,gamma1); coord2=max(beta1,gamma1);}
+@@ -76,7 +75,7 @@
+ 			if(edge3==IntersectEnum){coord1=gamma1;}
+ 			coord2=1.0;
+ 		}
+-		
++
+ 		xfinal[0]=xsegment[0]+coord1*(xsegment[1]-xsegment[0]);
+ 		xfinal[1]=xsegment[0]+coord2*(xsegment[1]-xsegment[0]);
+ 		yfinal[0]=ysegment[0]+coord1*(ysegment[1]-ysegment[0]);
+Index: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp	(revision 13622)
+@@ -31,7 +31,7 @@
+ 
+ 	/*Loop through all contours: */
+ 	for (i=0;i<numcontours;i++){
+-		
++
+ 		/*retrieve contour info: */
+ 		contouri=*(contours+i);
+ 		numnodes=contouri->nods;
+@@ -40,7 +40,7 @@
+ 
+ 		/*determine segmentsi and numsegsi for this contour and the mesh intersection: */
+ 		MeshSegmentsIntersection(&segmentsi,&numsegsi,index,x,y,nel,nods,xc,yc,numnodes);
+-		
++
+ 		/*save segmentsi: */
+ 		allsegments[i]=segmentsi;
+ 		allnumsegs[i]=numsegsi;
+Index: ../trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp	(revision 13622)
+@@ -48,7 +48,6 @@
+ 		pf->AXPY(Kfsy_s,-1.);
+ 	}
+ 
+-
+ 	/*Free ressources and return*/
+ 	xdelete(&y_s0);
+ 	xdelete(&Kfsy_s);
+Index: ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13622)
+@@ -10,7 +10,6 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void ElementResponsex( IssmDouble* presponse, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,int response_enum,bool process_units){
+-	
+ 
+ 	int my_rank;
+ 	int i;
+Index: ../trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp	(revision 13622)
+@@ -37,5 +37,5 @@
+ 
+ 	/*Assign output pointers: */
+ 	*peps=eps;
+-	
++
+ }
+Index: ../trunk-jpl/src/c/modules/UpdateConstraintsx/UpdateConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/UpdateConstraintsx/UpdateConstraintsx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/UpdateConstraintsx/UpdateConstraintsx.cpp	(revision 13622)
+@@ -22,7 +22,7 @@
+ 
+ 	/*start module: */
+ 	if(VerboseModule()) _pprintLine_("   Updating constraints for time: " << time);
+-	
++
+ 	/*First, update dof constraints in nodes, using constraints: */
+ 	SpcNodesx(nodes,constraints,parameters,analysis_type); 
+ 
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 13622)
+@@ -13,7 +13,7 @@
+ 
+ 	int     i,j,k,l;
+ 	int     dummy;
+-	
++
+ 	int     numberofvertices;
+ 	int     nrows;
+ 	int     ncols;
+@@ -34,20 +34,19 @@
+ 	 * for each descriptor, take the variable value and plug it into the inputs: */
+ 
+ 	for(i=0;i<numvariables;i++){
+-	
++
+ 		descriptor=variables_descriptors[i];
+ 
+ 		/*From descriptor, figure out if the variable is scaled, indexed, nodal, or just a simple variable: */
+ 		if (strncmp(descriptor,"scaled_",7)==0){
+-			
++
+ 			/*Variable is scaled. Determine root name of variable (ex: scaled_DragCoefficient_1 -> DragCoefficient). Allocate distributed_values and fill the 
+ 			 * distributed_values with the next npart variables: */
+-			
++
+ 			//strcpy(root,strstr(descriptor,"_")+1); *strstr(root,"_")='\0';
+ 			memcpy(root,strstr(descriptor,"_")+1,(strlen(strstr(descriptor,"_")+1)+1)*sizeof(char));
+ 			*strstr(root,"_")='\0';
+ 
+-
+ 			distributed_values=xNew<double>(npart);
+ 			for(j=0;j<npart;j++){
+ 				distributed_values[j]=variables[i+j];
+@@ -81,7 +80,6 @@
+ 				PetscSynchronizedPrintf(IssmComm::GetComm()," descriptor: %s root %s enum: %i\n",descriptor,root,StringToEnumx(root));
+ 				PetscSynchronizedFlush(IssmComm::GetComm());
+ 			#endif
+-			  
+ 
+ 			/*Update inputs using the parameter matrix: */
+ 			InputUpdateFromMatrixDakotax( elements,nodes, vertices,loads, materials,  parameters, parameter, nrows,ncols,StringToEnumx(root), VertexEnum);
+Index: ../trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp	(revision 13622)
+@@ -34,14 +34,14 @@
+   IssmDouble pddt, pd ; // pd : snow/precip fraction, precipitation falling as snow
+   IssmDouble PDup, PDCUT = 2.0;    // PDcut: rain/snow cutoff temperature (C)
+   IssmDouble tstar; // monthly mean surface temp
+-  
++
+   IssmDouble* pdds=NULL; 
+   IssmDouble* pds=NULL; 
+   Element* element = NULL;
+-  
++
+   pdds=xNew<IssmDouble>(NPDMAX+1); 
+   pds=xNew<IssmDouble>(NPDCMAX+1); 
+-  
++
+   // initialize PDD (creation of a lookup table)
+   tstep = 0.1;
+   tsint = tstep*0.5;
+@@ -54,7 +54,7 @@
+   PDup = siglimc+PDCUT;
+ 
+   itm = reCast<int,IssmDouble>((2*siglim/DT + 1.5));
+-  
++
+   if (itm >= NPDMAX){
+     _printLine_("increase NPDMAX in massBalance.cpp");
+     exit (1);
+@@ -72,7 +72,7 @@
+     pdds[it] = pddt*snormfac;
+   }
+   pdds[itm+1] = siglim + DT;
+-  
++
+   //*********compute PD(T) : snow/precip fraction. precipitation falling as snow
+   tstepc = 0.1;
+   tsint = PDCUT-tstepc*0.5;
+@@ -99,7 +99,7 @@
+   }
+   pds[itm+1] = 0.;
+   //     *******END initialize PDD
+-  
++
+   for(i=0;i<elements->Size();i++){
+     element=(Element*)elements->GetObjectByOffset(i);
+     element->PositiveDegreeDay(pdds,pds,signorm);
+@@ -107,5 +107,5 @@
+   /*free ressouces: */
+   xDelete<IssmDouble>(pdds);
+   xDelete<IssmDouble>(pds);
+-  
++
+ }
+Index: ../trunk-jpl/src/c/modules/Chacox/user_params.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Chacox/user_params.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Chacox/user_params.cpp	(revision 13622)
+@@ -13,7 +13,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ #ifdef _HAVE_CHACO_ //only works if dakota library has been compiled in.
+ 
+ #include "params.h"
+@@ -21,7 +20,6 @@
+ #define  TRUE  1
+ #define  FALSE 0
+ 
+-
+ /* Input and ouput control parameters */
+ 
+ int       CHECK_INPUT = TRUE;	 /* Check input for consistency? (TRUE/FALSE) */
+@@ -34,7 +32,6 @@
+ int       PROMPT = FALSE;	 /* Prompt for input? (TRUE/FALSE) */
+ int       PRINT_HEADERS = FALSE; /* Print pretty output headers (TRUE/FALSE) */
+ 
+-
+ /* Eigenvector calculation parameters */
+ 
+ int       LANCZOS_TYPE = 3;	/* type of Lanczos to use */
+@@ -56,7 +53,6 @@
+ int       LANCZOS_TIME = FALSE;	/* Detailed Lanczos times? (TRUE/FALSE) */
+ int       TIME_KERNELS = FALSE;	/* Time numerical kernels? (TRUE/FALSE) */
+ 
+-
+ /* Other parameters for spectral methods */
+ 
+ int       MAKE_CONNECTED = TRUE;/* Connect graph if using spectral method? */
+@@ -68,7 +64,6 @@
+ int       COARSE_NLEVEL_RQI = 2;/* # levels between RQI calls in uncoarsening */
+ int       OPT3D_NTRIES = 5;	/* # local opts to look for global min in opt3d */
+ 
+-
+ /* Kernighan--Lin/Fiduccia--Mattheyses parameters */
+ 
+ int       KL_METRIC = 2;	/* KL interset cost: 1=>cuts, 2=>hops */
+@@ -78,7 +73,6 @@
+ int       KL_UNDO_LIST = TRUE;	/* Only resort changed vtxs? (TRUE/FALSE) */
+ double    KL_IMBALANCE = 0.0;	/* Fractional imbalance allowed by KL */
+ 
+-
+ /* Coarsening parameters */
+ 
+ double    COARSEN_RATIO_MIN = .7;  /* Min vtx reduction each coarsen stage */
+@@ -90,14 +84,12 @@
+ int       COARSEN_EWGTS = TRUE;	   /* Sum edge weights in coarsening? (TRUE/FALSE) */
+ int       KL_ONLY_BNDY = TRUE;	   /* Start moving vtxs on boundary? (TRUE/FALSE) */
+ 
+-
+ /* Parameters for post-processing options */
+ 
+ int       REFINE_PARTITION = FALSE;	/* Postprocess to improve cuts? */
+ int       INTERNAL_VERTICES = FALSE;	/* ... to up internal vtxs? (TRUE/FALSE) */
+ int       REFINE_MAP = FALSE;		/* ... to reduce hops? (TRUE/FALSE) */
+ 
+-
+ /* Architecture and simulator parameters */
+ 
+ int       ARCHITECTURE = 0;	/* 0=> hypercube, d=> d-dimensional mesh (0..3)*/
+@@ -128,7 +120,6 @@
+ int       FREE_GRAPH = FALSE;	/* Free input graph data? (TRUE/FALSE) */
+ char     *PARAMS_FILENAME = "User_Params";	/* File of parameter changes */
+ 
+-
+ /* Parameters that control debugging output */
+ 
+ int       DEBUG_EVECS = 0;	/* Debug flag for eigenvector generation (0..5) */
+@@ -150,5 +141,4 @@
+ int       DEBUG_TRACE = 0;	/* Trace main execution path (0..2) */
+ int       DEBUG_MACH_PARAMS = 0;/* Print computed machine params? (0..1) */
+ 
+-
+ #endif //ifdef _HAVE_CHACO_ 
+Index: ../trunk-jpl/src/c/modules/Chacox/Chacox.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Chacox/Chacox.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Chacox/Chacox.cpp	(revision 13622)
+@@ -20,8 +20,7 @@
+ )
+ {
+ 	#ifdef _HAVE_CHACO_ //only works if Chaco library has been compiled in.
+-	
+-	
++
+ 	extern int Using_Main;	/* is main routine being called? */
+ 	extern char *PARAMS_FILENAME;	/* name of file with parameter updates */
+ 	extern double EIGEN_TOLERANCE;	/* tolerance for eigen calculations */
+@@ -62,8 +61,6 @@
+ 	int i,tvwgt;
+ 	double tgoal;
+ 
+-
+-
+ 	if (DEBUG_TRACE > 0) {
+ 		_printLine_("<Entering main>");
+ 	}
+@@ -186,10 +183,9 @@
+ 	if (DEBUG_TRACE > 1) {
+ 		_printLine_("<Leaving main>");
+ 	}
+-	
++
+ 	return(0);
+ 
+-
+ 	#else //ifdef _HAVE_CHACO_
+ 	return (0);
+ 	#endif
+Index: ../trunk-jpl/src/c/modules/Chacox/input_parse.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Chacox/input_parse.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Chacox/input_parse.cpp	(revision 13622)
+@@ -4,7 +4,6 @@
+ 
+ #include "./Chacox.h"
+ 
+-
+ #undef __FUNCT__ 
+ #define __FUNCT__  "input_parse"
+ 
+Index: ../trunk-jpl/src/c/modules/Chacox/chaco_seconds.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Chacox/chaco_seconds.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Chacox/chaco_seconds.cpp	(revision 13622)
+@@ -7,10 +7,8 @@
+ #include   <sys/resource.h>
+ #endif
+ 
++double chaco_seconds(void){
+ 
+-
+-double chaco_seconds(void){
+-    
+ 	double    curtime;
+ 
+ #ifdef RUSAGE_SELF
+@@ -21,7 +19,7 @@
+ 	 *as it clobbers the prototype int getrusag(int target,rusage* results) which 
+ 	 *is defined in the <sys/time.h> and <sys/resource.h> header files. Leaving it 
+ 	 *for reference in case we have a problem here in the future*/
+- 
++
+     getrusage(RUSAGE_SELF, &rusage);
+     curtime = ((rusage.ru_utime.tv_sec + rusage.ru_stime.tv_sec) +
+ 	    1.0e-6 * (rusage.ru_utime.tv_usec + rusage.ru_stime.tv_usec));
+Index: ../trunk-jpl/src/c/modules/SpcNodesx/SpcNodesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SpcNodesx/SpcNodesx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/SpcNodesx/SpcNodesx.cpp	(revision 13622)
+@@ -12,7 +12,7 @@
+ void SpcNodesx(Nodes* nodes,Constraints* constraints,Parameters* parameters, int analysis_type){
+ 
+ 	for(int i=0;i<constraints->Size();i++){
+-	
++
+ 		Constraint* constraint=(Constraint*)constraints->GetObjectByOffset(i);
+ 
+ 		/*Check this constraint belongs to this analysis: */
+Index: ../trunk-jpl/src/c/modules/AverageFilterx/AverageFilterx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AverageFilterx/AverageFilterx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/AverageFilterx/AverageFilterx.cpp	(revision 13622)
+@@ -10,7 +10,7 @@
+ #include "../../shared/shared.h"
+ 
+ int AverageFilterx(double** pimageout,double* image, int lines,int samps,int smooth){
+-	
++
+ 	double      temp;
+ 	int         numvalues;
+ 	long			i, j;
+Index: ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 13622)
+@@ -11,7 +11,7 @@
+ #include "../InputUpdateFromConstantx/InputUpdateFromConstantx.h"
+ 
+ void SurfaceAreax( IssmDouble* pS, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
+-	
++
+ 	/*Intermediary*/
+ 	Element* element=NULL;
+ 	int i;
+@@ -19,7 +19,7 @@
+ 	/*output: */
+ 	IssmDouble S=0;
+ 	IssmDouble S_sum;
+-	
++
+ 	/*Compute gradients: */
+ 	for (i=0;i<elements->Size();i++){
+ 		element=(Element*)elements->GetObjectByOffset(i);
+Index: ../trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.cpp	(revision 13622)
+@@ -15,7 +15,6 @@
+ 	RecursivePropagation(pool, connectivity,index, flags);
+ }
+ 
+-
+ void RecursivePropagation(double* pool, double* connectivity, int index, double* flags){
+ 
+ 	int i;
+Index: ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 13622)
+@@ -14,7 +14,7 @@
+ #include "../../Container/Container.h"
+ #include "../../io/io.h"
+ #include "../../classes/objects/objects.h"
+-		
++
+ void OutputResultsx(Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Results* results){
+ 
+ 	int         my_rank;
+@@ -25,10 +25,10 @@
+ 	int         solutiontype;
+ 	char*       solutiontypestring      = NULL;
+ 	bool        dakota_analysis         = false;
+-	
++
+ 	/*retrieve parameters: */
+ 	parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+@@ -53,7 +53,7 @@
+ 
+ 	/*Now, open file for writing, if not already done: */
+ 	if(!parameters->Exist(OutputFilePointerEnum)){
+-		
++
+ 		/*We don't have a file pointer. Retrieve the output file name and open it for writing:*/
+ 		parameters->FindParam(&outputfilename,OutputfilenameEnum);
+ 
+@@ -71,7 +71,7 @@
+ 			fid=pfopen(cpu_outputfilename ,"wb");
+ 		}
+ 		xDelete<char>(outputfilename);
+-		
++
+ 		/*Add file pointer in parameters for further calls to OutputResultsx: */
+ 		parameters->SetParam(fid,OutputFilePointerEnum);
+ 	}
+Index: ../trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp	(revision 13622)
+@@ -294,4 +294,3 @@
+ 
+ 	return(iret);
+ }
+-
+Index: ../trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp	(revision 13622)
+@@ -68,4 +68,3 @@
+ 
+ 	return(iret);
+ }
+-
+Index: ../trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp	(revision 13622)
+@@ -37,5 +37,5 @@
+ 
+ 	/*Assign output pointers: */
+ 	*psigma=sigma;
+-	
++
+ }
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp	(revision 13622)
+@@ -22,7 +22,6 @@
+ 	xDelete<IssmDouble>(serial_solution);
+ }
+ 
+-
+ void InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble* solution){
+ 
+ 	/*Intermediary*/
+Index: ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp	(revision 13622)
+@@ -9,7 +9,7 @@
+ #include "../../shared/shared.h"
+ 
+ int HoleFillerx(double** pimageout,double* image, int lines,int samps,int smooth){
+-	
++
+ 	FILE 			*fp1;
+ 	unsigned long	filesize;
+ 	long			infinit;
+@@ -28,7 +28,7 @@
+ 	float			nne, ene, ese, sse;
+ 	float			ssw, wsw, wnw, nnw;	
+ 	float			sum;
+-	
++
+ 	time_t			t1, t2;
+ 
+ 	/*output: */
+@@ -44,7 +44,7 @@
+ 	 /*^^^^^^^^^^^^^  Remove pixels close to the holes ^^^^^^^^^^^^^*/
+ 	image2 = xNew<double>(lines*samps);
+ 	memcpy(image2,image,lines*samps*sizeof(double));
+-	
++
+   	for ( i = 0; i < lines; i++ ){
+   		for ( j = 0; j < samps; j++ ){
+  			if ( *(image+i*samps+j) == 0 ){ 
+@@ -83,7 +83,7 @@
+ 	goto afterfirst2;
+ 
+ 	again2:	
+-	
++
+ 	#ifdef _DEBUG2_
+ 		counter=0;
+ 		for ( i = 0; i < lines; i++ ) {
+@@ -98,7 +98,7 @@
+ 		_printString_("Number of zeroes remaining: " << lines*samps-counter);
+ 		fflush( stdout );
+ 	#endif
+-	
++
+ 	afterfirst2:
+ 
+ /***************** FIRST RUN *********************/
+@@ -127,7 +127,7 @@
+ 			} 
+ 
+ 			/* For void edge pixels: */			
+-			
++
+ 			nsteps = 0.0; ssteps = 0.0; esteps = 0.0; wsteps = 0.0;
+ 			nwsteps = 0.0; nesteps = 0.0; swsteps = 0.0; sesteps = 0.0;
+ 			north = 0.0; south = 0.0; east = 0.0; west = 0.0;
+@@ -138,7 +138,6 @@
+ 			nne = 0.0; ene = 0.0; ese = 0.0; sse = 0.0;
+ 			ssw = 0.0; wsw = 0.0; wnw = 0.0; nnw = 0.0;
+ 
+-
+ /** NSEW **/
+ 			for ( ii = i - 1; ii >= 0; ii-- ){   /* North */
+ 				if ( ii <= 0 ) { north = 0; nsteps = 0; break;}
+@@ -149,18 +148,17 @@
+ 				if ( ii >= lines-1 ){ south = 0; ssteps = 0; break;}
+ 				if ( *(image2+ii*samps+j) != 0 ){ south = *(image2+ii*samps+j); ssteps = ii - i; break;}
+ 			}
+-				
++
+ 			for ( jj = j - 1; jj >= 0; jj-- ){   /* West */
+ 				if ( jj <= 0 ) { west = 0; wsteps = 0; break;}
+ 				if ( *(image2+i*samps+jj) != 0 ){ west = *(image2+i*samps+jj); wsteps = j - jj; break;}
+ 			}
+-				
++
+ 			for ( jj = j + 1; jj < samps; jj++ ){ /* East */
+ 				if ( jj >= samps-1 ){ east = 0; esteps = 0; break;}
+ 				if ( *(image2+i*samps+jj) != 0 ){ east = *(image2+i*samps+jj); esteps = jj - j; break;}
+ 			}
+ 
+-				
+ /** Diagonals  **/						
+ 			/* Southeast */
+ 			for ( k = 1; k < infinit; k++ ){
+@@ -168,21 +166,21 @@
+ 				if (( ii == lines ) || ( jj == samps )){ se = 0; sesteps = 0; break;}
+ 				if ( *(image2+ii*samps+jj) != 0 ){ se = *(image2+ii*samps+jj); sesteps = 1.4142 * k; break;}
+ 			}
+-			
++
+ 			/* Northeast */
+ 			for ( k = 1; k < infinit; k++ ){
+ 				ii = i - k; jj = j + k;
+ 				if (( ii == -1 ) || ( jj == samps )){ ne = 0; nesteps = 0; break;}
+ 				if ( *(image2+ii*samps+jj) != 0 ){ ne = *(image2+ii*samps+jj); nesteps = 1.4142 * k; break;}
+ 			}
+-			
++
+ 			/* Northwest */
+ 			for ( k = 1; k < infinit; k++ ){
+ 				ii = i - k; jj = j - k;
+ 				if (( ii == -1 ) || ( jj == -1 )){ nw = 0; nwsteps = 0; break;}
+ 				if ( *(image2+ii*samps+jj) != 0 ){ nw = *(image2+ii*samps+jj); nwsteps = 1.4142 * k; break;}
+ 			}
+-			
++
+ 			/* Southwest */
+ 			for ( k = 1; k < infinit; k++ ){
+ 				ii = i + k; jj = j - k;
+@@ -197,21 +195,21 @@
+ 				if (( ii <= -1 ) || ( jj >= samps )){ nne = 0; nnesteps = 0; break;}
+ 				if ( *(image2+ii*samps+jj) != 0 ){ nne = *(image2+ii*samps+jj); nnesteps = 2.2361 * k; break;}
+ 			}
+-			
++
+ 			/* ENE */
+ 			for ( k = 1; k < infinit; k++ ){
+ 				ii = i - k; jj = j + (k*2);
+ 				if (( ii <= -1 ) || ( jj >= samps )){ ene = 0; enesteps = 0; break;}
+ 				if ( *(image2+ii*samps+jj) != 0 ){ ene = *(image2+ii*samps+jj); enesteps = 2.2361 * k; break;}
+ 			}
+-			
++
+ 			/* ESE */
+ 			for ( k = 1; k < infinit; k++ ){
+ 				ii = i + k; jj = j + (k*2);
+ 				if (( ii >= lines ) || ( jj >= samps )){ ese = 0; esesteps = 0; break;}
+ 				if ( *(image2+ii*samps+jj) != 0 ){ ese = *(image2+ii*samps+jj); esesteps = 2.2361 * k; break;}
+ 			}
+-			
++
+ 			/* SSE */
+ 			for ( k = 1; k < infinit; k++ ){
+ 				ii = i + (k*2); jj = j + k;
+@@ -225,28 +223,28 @@
+ 				if (( ii >= lines ) || ( jj <= -1 )){ ssw = 0; sswsteps = 0; break;}
+ 				if ( *(image2+ii*samps+jj) != 0 ){ ssw = *(image2+ii*samps+jj); sswsteps = 2.2361 * k; break;}
+ 			}
+-			
++
+ 			/* WSW */
+ 			for ( k = 1; k < infinit; k++ ){
+ 				ii = i + k; jj = j - (k*2);
+ 				if (( ii >= lines ) || ( jj <= -1 )){ wsw = 0; wswsteps = 0; break;}
+ 				if ( *(image2+ii*samps+jj) != 0 ){ wsw = *(image2+ii*samps+jj); wswsteps = 2.2361 * k; break;}
+ 			}
+-			
++
+ 			/* WNW */
+ 			for ( k = 1; k < infinit; k++ ){
+ 				ii = i - k; jj = j - (k*2);
+ 				if (( ii <= -1 ) || ( jj <= -1 )){ wnw = 0; wnwsteps = 0; break;}
+ 				if ( *(image2+ii*samps+jj) != 0 ){ wnw = *(image2+ii*samps+jj); wnwsteps = 2.2361 * k; break;}
+ 			}
+-			
++
+ 			/* NNW */
+ 			for ( k = 1; k < infinit; k++ ){
+ 				ii = i - (k*2); jj = j - k;
+ 				if (( ii <= -1 ) || ( jj <= -1 )){ nnw = 0; nnwsteps = 0; break;}
+ 				if ( *(image2+ii*samps+jj) != 0 ){ nnw = *(image2+ii*samps+jj); nnwsteps = 2.2361 * k; break;}
+ 			}
+-			
++
+ 			elev = 0; range = 0;
+ /*NSEW*/			
+ 			if ( nsteps > 0.5 ){ elev += north /  nsteps; range +=  1.00 /  nsteps;}
+@@ -258,7 +256,7 @@
+ 			if ( nesteps > 0.5 ){ elev +=    ne / nesteps; range +=  1.00 / nesteps;}
+ 			if ( swsteps > 0.5 ){ elev +=    sw / swsteps; range +=  1.00 / swsteps;}
+ 			if ( sesteps > 0.5 ){ elev +=    se / sesteps; range +=  1.00 / sesteps;}
+-			
++
+ /*Other 8*/
+ 			if ( nnesteps > 0.5 ){ elev += nne / nnesteps; range +=  1.00 / nnesteps;}
+ 			if ( enesteps > 0.5 ){ elev += ene / enesteps; range +=  1.00 / enesteps;}
+@@ -268,13 +266,13 @@
+ 			if ( wswsteps > 0.5 ){ elev += wsw / wswsteps; range +=  1.00 / wswsteps;}
+ 			if ( wnwsteps > 0.5 ){ elev += wnw / wnwsteps; range +=  1.00 / wnwsteps;}
+ 			if ( nnwsteps > 0.5 ){ elev += nnw / nnwsteps; range +=  1.00 / nnwsteps;}
+-									
++
+ 			//temp = ( elev / range ) + 0.5 ;
+ 			temp = ( elev / range );
+ 			//+ 0.5 ;
+ 			//if ( temp > 10000 ) temp = 10000;
+ 			//if ( temp <     0 ) temp =     0;
+-			
++
+ 			#ifdef _DEBUG2_
+ 				//_printLine_(temp << " " << elev << " " << range << " ");
+ 			#endif
+@@ -283,35 +281,29 @@
+ 		}
+ 	}
+ 
+-
+-
+ 	for ( i = 0; i < lines; i++ ){
+ 		for ( j = 0; j < samps; j++ ){
+ 			*(image2+samps*i+j)= *(image3+samps*i+j);
+ 		}
+ 	}
+ 
+-
+ 	for ( i = 0; i < lines; i++ ){
+ 		for ( j = 0; j < samps; j++ ){
+ 			if ( *(image2+samps*i+j) == 0 ) goto again2;
+ 		}
+ 	}
+-	
++
+ 	if ( smooth == 0 ) goto there2;		
+-		
+-		
++
+ /************************ SMOOTH THE RESULT ***********************/		
+-		
++
+ 	image4 = xNew<double>(lines*samps);
+ 	memcpy(image4,image3,lines*samps*sizeof(double));
+ 
+-
+ 	for ( i = 0; i < lines; i++ ) {
+ 		for ( j = 0; j < samps; j++ ) {
+ 			if ( *(image4+i*samps+j) != 0 ) { *(image3+i*samps+j) = *(image2+i*samps+j) ; continue; }
+ 
+-
+ 			for ( k = 1; k < infinit; k++ ) { /* Find the smallest box size with data */ 
+ 				for ( ii = i-k; ii <= i+k; ii++ ){
+ 					if ( ii <      0 ) continue;
+@@ -323,7 +315,7 @@
+ 					}
+ 				}
+ 			}
+-		
++
+ 			k_nowset:
+ 			k = k / 4; if ( k < 1 ) k = 1; /* Errrrr.  Make it fourth size */
+ 			sum = 0;
+@@ -342,22 +334,20 @@
+ 
+ 	}
+ 
+-		
+ there2:		
+ 
+-
+ 	/*Allocate output image: */
+ 	imageout=xNew<double>(samps*lines);
+ 	memcpy(imageout,image3,lines*samps*sizeof(double));
+ 
+ 	time(&t2);	
+-	
++
+ 	#ifdef _DEBUG2_
+ 		_printString_( "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b" );
+ 		_printLine_("Number of zeroes remaining:          0\n");
+ 		printf ( "\n");
+ 	#endif
+-	
++
+ 	end:
+ 
+ 	/*Assign output pointers: */
+Index: ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp	(revision 13622)
+@@ -33,7 +33,7 @@
+ 
+ 	/*Assign output pointers: */
+ 	*pflags=flags;
+-	
++
+ 	return 1;
+ }
+ 
+Index: ../trunk-jpl/src/c/modules/KMLOverlayx/KMLOverlayx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/KMLOverlayx/KMLOverlayx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/KMLOverlayx/KMLOverlayx.cpp	(revision 13622)
+@@ -78,7 +78,6 @@
+ 	(kfile->kmlobj    )->AddObject((Object*)kdoc);
+ 	kdoc=NULL;
+ 
+-
+ /*  write kml file  */
+ 
+ 	_pprintLine_("Writing kml document to file.");
+@@ -94,4 +93,3 @@
+ 
+ 	return;
+ }
+-
+Index: ../trunk-jpl/src/c/modules/ElementConnectivityx/ElementConnectivityx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ElementConnectivityx/ElementConnectivityx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ElementConnectivityx/ElementConnectivityx.cpp	(revision 13622)
+@@ -40,13 +40,13 @@
+ 	/*Go through all elements, and for each element, go through its nodes, to get the neighbouring elements. 
+ 	 * Once we get the neighbouring elements, figure out if they share a segment with the current element. If so, 
+ 	 * plug them in the connectivity, unless they are already there.: */
+-	
++
+ 	for(n=0;n<nel;n++){
+ 
+ 		element=(double)(n+1); //matlab indexing
+ 
+ 		for(i=0;i<3;i++){
+-		
++
+ 			node=(int)*(elements+n*3+i); //already matlab indexed, elements comes directly from the workspace.
+ 			index=node-1;
+ 
+@@ -57,7 +57,7 @@
+ 				/*for each element connected to node, figure out if it has a commond edge with element: */
+ 				connectedelement=*(nodeconnectivity+width*index+j);
+ 				connectedelementindex=(int)(connectedelement-1); //go from matlab indexing to c indexing.
+-				
++
+ 				if(hascommondedge(elements+n*3+0,elements+connectedelementindex*3+0)){
+ 					/*Ok, this connected element has a commond edge  with element, plug it into elementconnectivity, unless 
+ 					 *it is already there: */
+@@ -79,7 +79,6 @@
+ 	/*Assign output pointers: */
+ 	*pelementconnectivity=elementconnectivity;
+ }
+-				
+ 
+ int hascommondedge(double* element1,double* element2){
+ 
+Index: ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 13622)
+@@ -41,10 +41,10 @@
+ }
+ 
+ void GetVectorFromInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, int name, int type){
+-	
++
+ 	/*output: */
+ 	IssmDouble* vector=NULL;
+-	
++
+ 	/*intermediary: */
+ 	Vector<IssmDouble>* vec_vector=NULL;
+ 
+Index: ../trunk-jpl/src/c/modules/AddExternalResultx/AddExternalResultx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AddExternalResultx/AddExternalResultx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/AddExternalResultx/AddExternalResultx.cpp	(revision 13622)
+@@ -7,7 +7,7 @@
+ #include "../../Container/Container.h"
+ #include "../../io/io.h"
+ #include "../../classes/objects/objects.h"
+-		
++
+ void AddExternalResultx( DataSet* results, int enumtype, IssmDouble value){
+ 	/* Add new result in into results*/
+ 	results->AddObject(new GenericExternalResult<double>(results->Size()+1,enumtype,reCast<IssmPDouble>(value),1,0));
+Index: ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.cpp	(revision 13622)
+@@ -9,18 +9,17 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void MaxAbsVyx( IssmDouble* pmaxabsvy, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-	
++
+ 	int i;
+ 	IssmDouble maxabsvy;
+ 	IssmDouble node_maxabsvy;
+ 	IssmDouble element_maxabsvy;
+ 
+-
+ 	/*Go through elements, and request velocity: */
+ 	for(i=0;i<elements->Size();i++){
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		element->MaxAbsVy(&element_maxabsvy,process_units); //go pick up the maximum velocity in the inputs
+-	
++
+ 		if(i==0)maxabsvy=element_maxabsvy; //initialize maxabsvy
+ 		else{
+ 			if(element_maxabsvy>maxabsvy)maxabsvy=element_maxabsvy;
+Index: ../trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 13622)
+@@ -23,7 +23,7 @@
+ 
+ 	/*Get analysis type: */
+ 	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	
++
+ 	if(VerboseMProcessor()) _pprintLine_("      Configuring elements...");
+ 	for (i=0;i<elements->Size();i++){
+ 		element=(Element*)elements->GetObjectByOffset(i);
+@@ -43,7 +43,7 @@
+ 			node->Configure(nodes,vertices);
+ 		}
+ 	}
+-	
++
+ 	if(VerboseMProcessor()) _pprintLine_("      Configuring materials...");
+ 	for (i=0;i<materials->Size();i++){
+ 		material=(Material*)materials->GetObjectByOffset(i);
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 13622)
+@@ -20,7 +20,6 @@
+ 	xDelete<double>(serial_vector);
+ }
+ 
+-	
+ void InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,double* vector, int name, int type){
+ 
+ 	int i;
+@@ -45,7 +44,7 @@
+ }
+ 
+ void InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int* vector, int name, int type){
+-	
++
+ 	int i;
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp	(revision 13622)
+@@ -16,7 +16,7 @@
+ void	UpdateElementsHydrology(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+ 
+ 	int    numberofelements;
+-	
++
+ 	/*Fetch data needed: */
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->FetchData(1,MeshElementsEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp	(revision 13622)
+@@ -22,7 +22,7 @@
+ 	/*Create constraints if they do not exist yet*/
+ 	if(!constraints) constraints = new Constraints();
+ 	IoModelToConstraintsx(constraints,iomodel,HydrologySpcwatercolumnEnum,HydrologyAnalysisEnum);
+-	
++
+ 	/*Assign output pointer: */
+ 	*pconstraints=constraints;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp	(revision 13622)
+@@ -24,7 +24,7 @@
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-	
++
+ 	/*Recover pointer: */
+ 	nodes=*pnodes;
+ 
+@@ -45,7 +45,7 @@
+ 		}
+ 	}
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	
++
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 13622)
+@@ -24,7 +24,6 @@
+ 	int    num_control_type;
+ 	bool   control_analysis;
+ 
+-	
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+@@ -64,7 +63,7 @@
+ 			counter++;
+ 		}
+ 	}
+-	
++
+ 	/*Free data: */
+ 	iomodel->DeleteData(1+4+6,MeshElementsEnum,InversionControlParametersEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum,BalancethicknessThickeningRateEnum,VxEnum,VyEnum,FrictionCoefficientEnum,MaterialsRheologyBEnum,MaterialsRheologyZEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 13622)
+@@ -12,7 +12,7 @@
+ #include "../ModelProcessorx.h"
+ 
+ void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+-	
++
+ 	int         i;
+ 	Parameters *parameters       = NULL;
+ 	bool        control_analysis;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 13622)
+@@ -18,7 +18,6 @@
+ 	int    numberofelements;
+ 	bool   ishutter;
+ 
+-	
+ 	/*Fetch data needed: */
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
+@@ -37,10 +36,10 @@
+ 			counter++;
+ 		}
+ 	}
+-	
++
+ 	iomodel->FetchDataToInput(elements,ThicknessEnum);
+ 	iomodel->FetchDataToInput(elements,GeometryHydrostaticRatioEnum);
+-	
++
+ 	/*Free data: */
+ 	iomodel->DeleteData(2,MeshElementsEnum,FlowequationElementEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 13622)
+@@ -20,7 +20,7 @@
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+-	
++
+ 	/*Assign output pointer: */
+ 	*ploads=loads;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 13622)
+@@ -74,7 +74,7 @@
+ 
+ 	/*Free data: */
+ 	iomodel->DeleteData(3,DiagnosticSpcvxEnum,DiagnosticSpcvyEnum,FlowequationVertexEquationEnum);
+-	
++
+ 	/*Assign output pointer: */
+ 	*pconstraints=constraints;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp	(revision 13622)
+@@ -21,7 +21,7 @@
+ void  ContinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel);
+ 
+ void  NodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel, bool continuous){
+-	
++
+ 	/*First thing, this is a new partition for a new analysis_type, therefore, to avoid a leak, erase the nodes partition that might come through pmy_nodes: */
+ 	xDelete<bool>(*pmy_nodes);
+ 
+@@ -50,7 +50,6 @@
+ 	*pmy_nodes=my_nodes;
+ }
+ 
+-
+ void  DiscontinuousGalerkinNodesPartitioning(bool** pmy_nodes,bool* my_elements, int* my_vertices, IoModel* iomodel){
+ 
+ 	int    numberofelements;
+@@ -61,7 +60,7 @@
+ 	/*each element has it own nodes (as many as vertices) + additional nodes from neighbouring elements for each edge. This yields to a very different partition for 
+ 	 * the nodes and the vertices. The vertices are similar to continuous galerkin, but the nodes partitioning involves edges, which mess up sorting of 
+ 	 * ids. */
+-	
++
+ 	int i,j;
+ 	int    dim;
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 13622)
+@@ -22,7 +22,7 @@
+ 	bool   spcpresent=false;
+ 	IssmDouble heatcapacity;
+ 	IssmDouble referencetemperature;
+-	
++
+ 	/*Output*/
+ 	IssmDouble *spcvector  = NULL;
+ 	IssmDouble* times=NULL;
+@@ -84,7 +84,7 @@
+ 
+ 		/*Create constraints from x,y,z: */
+ 		for (i=0;i<numberofvertices;i++){
+-			
++
+ 			/*keep only this partition's nodes:*/
+ 			if((iomodel->my_vertices[i])){
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 13622)
+@@ -24,7 +24,7 @@
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+-	
++
+ 	/*Recover pointer: */
+ 	nodes=*pnodes;
+ 
+@@ -39,7 +39,7 @@
+ 
+ 	for (i=0;i<numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+-			
++
+ 			/*Add node to nodes dataset: */
+ 			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,EnthalpyAnalysisEnum));
+ 
+@@ -48,7 +48,7 @@
+ 
+ 	/*Clean fetched data: */
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	
++
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 13622)
+@@ -58,7 +58,7 @@
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 	iomodel->FetchDataToInput(elements,VzEnum);
+-	
++
+ 	/*Free data: */
+ 	iomodel->DeleteData(4,MeshElementsEnum,TemperatureEnum,WaterfractionEnum,PressureEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp	(revision 13622)
+@@ -21,7 +21,6 @@
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+ 
+-
+ 	/*Assign output pointer: */
+ 	*ploads=loads;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 13622)
+@@ -41,7 +41,7 @@
+ 
+ 	/*Continuous Galerkin partition of nodes: */
+ 	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-	
++
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+@@ -56,7 +56,7 @@
+ 
+ 	/*Clean fetched data: */
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	
++
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp	(revision 13622)
+@@ -53,5 +53,5 @@
+ 
+ 	/*Free data: */
+ 	iomodel->DeleteData(1,MeshElementsEnum);
+-	
++
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp	(revision 13622)
+@@ -25,13 +25,12 @@
+ 	loads=*ploads;
+ 	constraints=*pconstraints;
+ 
+-
+ 	if(nodes) iomodel->nodecounter=nodes->NumberOfNodes();
+ 	else iomodel->nodecounter=0;
+ 
+ 	if(loads)iomodel->loadcounter=loads->NumberOfLoads();
+ 	else iomodel->loadcounter=0;
+-	
++
+ 	if(constraints)iomodel->constraintcounter=constraints->NumberOfConstraints();
+ 	else iomodel->constraintcounter=0;
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 13622)
+@@ -24,7 +24,7 @@
+ 
+ 	/*DataSet*/
+ 	Loads*    loads    = NULL;
+-	
++
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 13622)
+@@ -10,7 +10,7 @@
+ void	CreateConstraintsPrognostic(Constraints** pconstraints, IoModel* iomodel){
+ 
+ 	int stabilization;
+-	
++
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 13622)
+@@ -14,7 +14,7 @@
+ 
+ 	/*Output*/
+ 	Constraints* constraints = NULL;
+-	
++
+ 	/*Recover pointer: */
+ 	constraints=*pconstraints;
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 13622)
+@@ -30,17 +30,17 @@
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+-	
++
+ 	/*Continuous Galerkin partition of nodes: */
+ 	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-	
++
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+ 	for (i=0;i<numberofvertices;i++){
+ 
+ 		if(iomodel->my_vertices[i]){
+-			
++
+ 			/*Add node to nodes dataset: */
+ 			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,SurfaceSlopeAnalysisEnum));
+ 
+@@ -49,7 +49,7 @@
+ 
+ 	/*Clean fetched data: */
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	
++
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp	(revision 13622)
+@@ -36,12 +36,12 @@
+ 	iomodel->FetchDataToInput(elements,SurfaceEnum);
+ 	iomodel->FetchDataToInput(elements,BedEnum);
+ 	iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
+-	
++
+ 	if (dim==3){
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+-	
++
+ 	/*Free data: */
+ 	iomodel->DeleteData(1,MeshElementsEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 13622)
+@@ -5,7 +5,7 @@
+ #include "../../shared/shared.h"
+ #include "../../include/include.h"
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+-	
++
+ void DistributeNumDofs(DofIndexing* index,int analysis_type,IssmDouble* vertices_type){
+ 
+ 	/*For now, we distribute by analysis_type, later, we will distribute using the analysis_type,
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 13622)
+@@ -39,7 +39,7 @@
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+ 
+ 	for (i=0;i<numberofvertices;i++){
+-	
++
+ 		/*keep only this partition's nodes:*/
+ 		if((iomodel->my_vertices[i]==1)){
+ 			if (xIsNan<IssmDouble>(iomodel->Data(ThermalSpctemperatureEnum)[i])){ //No penalty applied on spc nodes!
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 13622)
+@@ -17,7 +17,7 @@
+ 	int i;
+ 	int count;
+ 	int    dim;
+-	
++
+ 	/*Output*/
+ 	Constraints* constraints = NULL;
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 13622)
+@@ -48,7 +48,7 @@
+ 
+ 	/*Clean fetched data: */
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	
++
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 13622)
+@@ -59,7 +59,7 @@
+ 	iomodel->FetchDataToInput(elements,VxEnum);
+ 	iomodel->FetchDataToInput(elements,VyEnum);
+ 	iomodel->FetchDataToInput(elements,VzEnum);
+-	
++
+ 	if(dakota_analysis){
+ 		elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
+ 		elements->InputDuplicate(BasalforcingsMeltingRateEnum,QmuMeltingEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 13622)
+@@ -14,7 +14,7 @@
+ 
+ 	/*Output*/
+ 	Constraints* constraints = NULL;
+-	
++
+ 	/*Recover pointer: */
+ 	constraints=*pconstraints;
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 13622)
+@@ -30,16 +30,16 @@
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+-	
++
+ 	/*Continuous Galerkin partition of nodes: */
+ 	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements,iomodel->my_vertices,iomodel,continuous_galerkin);
+-	
++
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+ 	for (i=0;i<numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+-			
++
+ 			/*Add node to nodes dataset: */
+ 			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,BedSlopeAnalysisEnum));
+ 
+@@ -48,7 +48,7 @@
+ 
+ 	/*Clean fetched data: */
+ 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+-	
++
+ 	/*Assign output pointer: */
+ 	*pnodes=nodes;
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp	(revision 13622)
+@@ -41,7 +41,7 @@
+ 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
+ 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+ 	}
+-	
++
+ 	/*Free data: */
+ 	iomodel->DeleteData(1,MeshElementsEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 13622)
+@@ -54,7 +54,7 @@
+ 	iomodel->FetchDataToInput(elements,MaterialsRheologyNEnum);
+ 	iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
+ 	iomodel->FetchDataToInput(elements,PressureEnum);
+-	
++
+ 	/*Free data: */
+ 	iomodel->DeleteData(1,MeshElementsEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 13622)
+@@ -15,7 +15,7 @@
+ 	/*Intermediary*/
+ 	int i;
+ 	int count;
+-	
++
+ 	/*Intermediary*/
+ 	Constraints* constraints = NULL;
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 13622)
+@@ -21,7 +21,7 @@
+ 
+ 	/*DataSets: */
+ 	Nodes*    nodes = NULL;
+-	
++
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+@@ -39,7 +39,7 @@
+ 	for (i=0;i<numberofvertices;i++){
+ 
+ 		if(iomodel->my_vertices[i]){
+-			
++
+ 			/*Add node to nodes dataset: */
+ 			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,MeltingAnalysisEnum));
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 13622)
+@@ -84,17 +84,17 @@
+ 	elements->InputDuplicate(VxEnum,VxPicardEnum);
+ 	elements->InputDuplicate(VxEnum,InversionVxObsEnum);
+ 	if(dakota_analysis)elements->InputDuplicate(VxEnum,QmuVxEnum);
+-	
++
+ 	elements->InputDuplicate(VyEnum,VyPicardEnum);
+ 	elements->InputDuplicate(VyEnum,InversionVyObsEnum);
+ 	if(dakota_analysis)elements->InputDuplicate(VyEnum,QmuVyEnum);
+-	
++
+ 	if(dim==3){
+ 		elements->InputDuplicate(VzEnum,VzPicardEnum);
+ 		elements->InputDuplicate(VzEnum,InversionVzObsEnum);
+ 		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
+ 	}
+-	
++
+ 	/*Free data: */
+ 	iomodel->DeleteData(2,MeshElementsEnum,FlowequationElementEquationEnum);
+ }
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 13622)
+@@ -57,7 +57,7 @@
+ 		*ploads=loads;
+ 		return;
+ 	}
+-	
++
+ 	/*Create pressure loads as boundary conditions. Pay attention to the partitioning if we are running in parallel (the nodes
+ 	 * referenced by a certain load must belong to the cluster node): */
+ 	iomodel->FetchData(3,DiagnosticIcefrontEnum,ThicknessEnum,BedEnum);
+@@ -69,7 +69,7 @@
+ 
+ 	/*First load data:*/
+ 	for (i=0;i<numberofpressureloads;i++){
+-		
++
+ 		/*Retrieve element to which this icefront belongs: */
+ 		if (dim==2) segment_width=4; 
+ 		else segment_width=6;
+@@ -77,7 +77,7 @@
+ 
+ 		/*Now, if this element is not in the partition, pass: */
+ 		if(!iomodel->my_elements[element]) continue;
+-		
++
+ 		/*Do not create ice front if Hutter or Stokes elements*/
+ 		if (reCast<int,IssmDouble>(*(elements_type+element))==HutterApproximationEnum) continue;
+ 
+@@ -131,10 +131,9 @@
+ 	iomodel->DeleteData(elements_type,FlowequationElementEquationEnum);
+ 	iomodel->DeleteData(pressureload,DiagnosticIcefrontEnum);
+ 
+-
+ 	/*Create Penpair for penalties: */
+ 	iomodel->FetchData(&penalties,&numpenalties,NULL,DiagnosticVertexPairingEnum);
+-	
++
+ 	for(i=0;i<numpenalties;i++){
+ 
+ 		if(iomodel->my_vertices[reCast<int,IssmDouble>(penalties[2*i+0]-1)]){
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 13622)
+@@ -63,13 +63,13 @@
+ 
+ 	/*Create constraints if they do not exist yet*/
+ 	if(!constraints) constraints = new Constraints();
+-	
++
+ 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+ 	if(!ismacayealpattyn & !isstokes & !isl1l2){
+ 		*pconstraints=constraints;
+ 		return;
+ 	}
+-	
++
+ 	/*Constraints: fetch data: */
+ 	iomodel->FetchData(&spcvx,&Mx,&Nx,DiagnosticSpcvxEnum);
+ 	iomodel->FetchData(&spcvy,&My,&Ny,DiagnosticSpcvyEnum);
+@@ -323,7 +323,7 @@
+ 			}
+ 		}
+ 	}
+-	  
++
+ 	/*Free data: */
+ 	iomodel->DeleteData(spcvx,DiagnosticSpcvxEnum);
+ 	iomodel->DeleteData(spcvy,DiagnosticSpcvyEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 13622)
+@@ -34,7 +34,7 @@
+ 
+ 	/*First create nodes*/
+ 	if(!nodes) nodes = new Nodes();
+-	
++
+ 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+ 	if(!ismacayealpattyn & !isstokes & !isl1l2){
+ 		*pnodes=nodes;
+@@ -47,11 +47,11 @@
+ 	/*Create nodes: */
+ 	iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBordermacayealEnum,FlowequationBorderstokesEnum,
+ 				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
+-	
++
+ 	for (i=0;i<numberofvertices;i++){
+ 
+ 		if(iomodel->my_vertices[i]){
+-			
++
+ 			/*Add node to nodes dataset: */
+ 			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,DiagnosticHorizAnalysisEnum));
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 13622)
+@@ -30,7 +30,7 @@
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+-	
++
+ 	/*Loads only in DG*/
+ 	if (stabilization==3){
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 13622)
+@@ -10,7 +10,7 @@
+ void	CreateConstraintsBalancethickness(Constraints** pconstraints, IoModel* iomodel){
+ 
+ 	int    stabilization;	
+-	
++
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp	(revision 13622)
+@@ -13,7 +13,7 @@
+ #include "../ModelProcessorx.h"
+ 
+ void CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+-	
++
+ 	int         i;
+ 	Parameters *parameters       = NULL;
+ 	bool        autodiff_analysis;
+@@ -25,29 +25,29 @@
+ 	char*       autodiff_driver=NULL;
+ 	int*        indices=NULL;
+ 	int         num_indices;
+-	
++
+ 	IssmDouble* xp=NULL;
+ 	IssmDouble* xp_backup=NULL;
+ 	int         num_ind,local_num_ind;
+ 	DataSet*    dependent_objects=NULL;
+-	
++
+ 	/*Get parameters: */
+ 	parameters=*pparameters;
+ 
+ 	/*retrieve some parameters: */
+ 	iomodel->Constant(&autodiff_analysis,AutodiffIsautodiffEnum);
+-	
++
+ 	if(autodiff_analysis){
+ 
+ 		#ifdef _HAVE_ADOLC_
+-	
++
+ 		/*Copy some parameters from IoModel to parameters dataset: */
+ 		parameters->AddObject(iomodel->CopyConstantObject(AutodiffKeepEnum));
+ 
+ 		/*retrieve driver: {{{*/
+ 		iomodel->Constant(&autodiff_driver,AutodiffDriverEnum);
+ 		parameters->AddObject(iomodel->CopyConstantObject(AutodiffDriverEnum));
+-		
++
+ 		if(strcmp(autodiff_driver,"fos_forward")==0){
+ 			parameters->AddObject(iomodel->CopyConstantObject(AutodiffFosForwardIndexEnum));
+ 		}
+@@ -65,7 +65,7 @@
+ 		iomodel->Constant(&num_dependent_objects,AutodiffNumDependentObjectsEnum);
+ 		dependent_objects=new DataSet();
+ 		num_dep=0;
+-		
++
+ 		if(num_dependent_objects){
+ 			iomodel->FetchData(&names,&dummy,&dummy,AutodiffDependentObjectNamesEnum);
+ 			iomodel->FetchData(&types,&dummy,&dummy,AutodiffDependentObjectTypesEnum);
+@@ -113,7 +113,7 @@
+ 
+ 		#endif
+ 	}
+-		
++
+ 	#ifdef _HAVE_ADOLC_
+ 		/*initialize a placeholder to store solver pointers: {{{*/
+ 		GenericParam<Adolc_edf> *theAdolcEDF_p=new GenericParam<Adolc_edf>(AdolcParamEnum);
+@@ -128,7 +128,7 @@
+ 		parameters->AddObject(theAdolcEDF_p);
+ 		/*}}}*/
+ 	#endif
+-	
++
+ 	/*Assign output pointer: */
+ 	*pparameters=parameters;
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp	(revision 13622)
+@@ -14,7 +14,6 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ #include "./ModelProcessorx.h"
+ 
+-
+ void SortDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Loads** ploads, Materials** pmaterials, Constraints** pconstraints, Parameters** pparameters){
+ 
+ 	Elements* elements=NULL;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 13622)
+@@ -16,10 +16,10 @@
+ 
+ 	/*variable declarations: {{{*/
+ 	int i,j,k;
+-	
++
+ 	Parameters* parameters = NULL;
+ 	int      second_count;
+-	
++
+ 	int*     part=NULL;
+ 	double*  dpart=NULL;
+ 
+@@ -34,11 +34,10 @@
+ 	char* qmuinname=NULL;
+ 	char* qmuerrname=NULL;
+ 	char* qmuoutname=NULL;
+-	
++
+ 	//descriptors:
+ 	char tag[50];
+-	
+-			
++
+ 	int      M;
+ 	int      m,n;
+ 	bool     dakota_analysis=false;
+@@ -49,7 +48,7 @@
+ 	int      ncols;
+ 
+ 	/*}}}*/
+-	
++
+ 	/*recover parameters : */
+ 	parameters=*pparameters;
+ 
+@@ -91,7 +90,7 @@
+ 		/*}}}*/
+ 		/*Deal with partitioning: {{{*/
+ 		/*partition vertices in iomodel->qmu_npart parts, unless a partition is already present: */
+-		
++
+ 		parameters->AddObject(iomodel->CopyConstantObject(QmuNumberofpartitionsEnum));
+ 		iomodel->FetchData(&dpart,NULL,NULL,QmuPartitionEnum);
+ 
+@@ -106,13 +105,13 @@
+ 		parameters->AddObject(new DoubleVecParam(QmuPartitionEnum,dpart,numberofvertices));
+ 		/*}}}*/
+ 		/*Deal with data needed because of qmu variables: {{{*/
+-		
++
+ 		for(i=0;i<numvariabledescriptors;i++){
+ 
+ 			if (strncmp(variabledescriptors[i],"scaled_",7)==0){
+ 				/*Ok, we are dealing with a variable that is distributed over nodes. Recover the name of the variable (ex: scaled_Thickness): */
+ 				sscanf(variabledescriptors[i],"scaled_%s",tag);
+-				
++
+ 				/*Recover data: */
+ 				iomodel->FetchData(&dakota_parameter,&nrows,&ncols,StringToEnumx(tag));
+ 
+@@ -123,7 +122,7 @@
+ 				else{
+ 					parameters->AddObject(new DoubleTransientMatParam(StringToEnumx(tag),dakota_parameter,nrows,ncols));
+ 				}
+-				
++
+ 				/*Free ressources:*/
+ 				xDelete<double>(dakota_parameter);
+ 			}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 13622)
+@@ -8,7 +8,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ #include "../../Container/Container.h"
+ #include "../../toolkits/toolkits.h"
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+@@ -19,7 +18,7 @@
+ #include "./ModelProcessorx.h"
+ 
+ void CreateParameters(Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,int analysis_type,int analysis_counter){
+-	
++
+ 	int         i,j,m,k;
+ 	int         numoutputs;
+ 	Parameters *parameters       = NULL;
+@@ -44,7 +43,7 @@
+ 
+ 	/*Initialize dataset: */
+ 	parameters = new Parameters();
+-		
++
+ 	/*Copy some constants from iomodel */
+ 	parameters->AddObject(iomodel->CopyConstantObject(MeshDimensionEnum));
+ 	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIshutterEnum));
+@@ -150,13 +149,12 @@
+ 	parameters->AddObject(new IntParam(SteadystateNumRequestedOutputsEnum,numoutputs));
+ 	if(numoutputs)parameters->AddObject(new IntVecParam(SteadystateRequestedOutputsEnum,requestedoutputs,numoutputs));
+ 	iomodel->DeleteData(requestedoutputs,SteadystateRequestedOutputsEnum);
+-	
++
+ 	iomodel->FetchData(&requestedoutputs,&numoutputs,NULL,PrognosticRequestedOutputsEnum);
+ 	parameters->AddObject(new IntParam(PrognosticNumRequestedOutputsEnum,numoutputs));
+ 	if(numoutputs)parameters->AddObject(new IntVecParam(PrognosticRequestedOutputsEnum,requestedoutputs,numoutputs));
+ 	iomodel->DeleteData(requestedoutputs,PrognosticRequestedOutputsEnum);
+-		
+-	
++
+ 	/*Deal with mass flux segments: {{{*/
+ 	iomodel->FetchData(&qmu_mass_flux_present,QmuMassFluxSegmentsPresentEnum);
+ 	iomodel->FetchData(&autodiff_mass_flux_present,AutodiffMassFluxSegmentsPresentEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 13622)
+@@ -20,7 +20,7 @@
+ 
+ 	int   i,analysis_type,dim,verbose;
+ 	bool  isthermal,isprognostic,isdiagnostic,isgroundingline,isenthalpy;
+-	
++
+ 	/*output: */
+ 	Elements    *elements    = NULL;
+ 	Nodes       *nodes       = NULL;
+@@ -30,7 +30,6 @@
+ 	Loads       *loads       = NULL;
+ 	Parameters  *parameters  = NULL;
+ 
+-	
+ 	/*Initialize IoModel from input file*/
+ 	IoModel* iomodel = new IoModel(IOMODEL);
+ 
+@@ -66,7 +65,7 @@
+ 		if(solution_type==SteadystateSolutionEnum && analysis_type==ThermalAnalysisEnum && isenthalpy==true) continue;
+ 		if(solution_type==SteadystateSolutionEnum && analysis_type==MeltingAnalysisEnum && isenthalpy==true) continue;
+ 		if(solution_type==SteadystateSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isenthalpy==false) continue;
+-	
++
+ 		if(VerboseMProcessor()) _pprintLine_("   creating datasets for analysis " << EnumToStringx(analysis_type));
+ 		CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,&parameters,iomodel,rootpath,solution_type,analysis_type,nummodels,i);
+ 	}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 13622)
+@@ -40,16 +40,16 @@
+ 	elements  = new Elements();
+ 	vertices  = new Vertices();
+ 	materials = new Materials();
+-	
++
+ 	/*First, partition elements and vertices. Nodes will partitioned on a per analysis_type basis. If partitining already done, ignore: */
+ 	ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel);
+-	
++
+ 	iomodel->FetchData(2,MeshElementsEnum,MeshElementconnectivityEnum);
+ 	#ifdef _HAVE_3D_
+ 	if(dim==3)iomodel->FetchData(2,MeshUpperelementsEnum,MeshLowerelementsEnum);
+ 	#endif
+ 	if(control_analysis)iomodel->FetchData(3,InversionControlParametersEnum,InversionMinParametersEnum,InversionMaxParametersEnum);
+-	
++
+ 	/*Create elements*/
+ 	for (i=0;i<numberofelements;i++){
+ 		if(iomodel->my_elements[i]){
+@@ -61,7 +61,7 @@
+ 	        #endif
+ 		}
+ 	}
+-	
++
+ 	/*Create materials*/
+ 	switch(materials_type){
+ 		case MaticeEnum:
+@@ -83,18 +83,18 @@
+ 
+ 	/*Add new constant material property to materials, at the end: */
+ 	materials->AddObject(new Matpar(numberofelements+1,iomodel));//put it at the end of the materials
+-	
++
+ 	/*Create vertices: */
+ 
+ 	/*Fetch data:*/
+ 	iomodel->FetchData(6,MeshElementsEnum,MeshXEnum,MeshYEnum,MeshZEnum,BedEnum,ThicknessEnum);
+ 	CreateNumberNodeToElementConnectivity(iomodel);
+-	
++
+ 	for (i=0;i<numberofvertices;i++){
+ 
+ 		/*vertices and nodes (same number, as we are running continuous galerkin formulation): */
+ 		if(iomodel->my_vertices[i]){
+-			
++
+ 			/*Add vertex to vertices dataset: */
+ 			vertices->AddObject(new Vertex(i+1,i,i,iomodel));
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp	(revision 13622)
+@@ -105,7 +105,7 @@
+ 		if(my_rank==epart[i]){ 
+ 
+ 			my_elements[i]=true;
+-			
++
+ 			/*Now that we are here, we can also start building the list of vertices belonging to this cpu partition: we use 
+ 			 *the  element index to do this. For each element n, we know index[n][0:2] holds the indices (matlab indexing) 
+ 			 into the vertices coordinates. If we start plugging 1 into my_vertices for each index[n][i] (i=0:2), then my_vertices 
+@@ -113,7 +113,7 @@
+ 			my_vertices[reCast<int>(*(elements+elements_width*i+0))-1]=1;
+ 			my_vertices[reCast<int>(*(elements+elements_width*i+1))-1]=1;
+ 			my_vertices[reCast<int>(*(elements+elements_width*i+2))-1]=1;
+-			
++
+ 			if(elements_width==6){
+ 				my_vertices[reCast<int>(*(elements+elements_width*i+3))-1]=1;
+ 				my_vertices[reCast<int>(*(elements+elements_width*i+4))-1]=1;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 13622)
+@@ -14,14 +14,13 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ #include "./ModelProcessorx.h"
+ 
+-
+ void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,char* rootpath,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){
+ 
+ 	bool        continuous = true;
+ 	Elements   *elements   = NULL;
+ 	Materials  *materials  = NULL;
+ 	Parameters *parameters = NULL;
+-			
++
+ 	/*Create elements, vertices and materials, independent of analysis_type: */
+ 	CreateElementsVerticesAndMaterials(pelements, pvertices, pmaterials, iomodel,nummodels);
+ 
+@@ -39,14 +38,14 @@
+ 			CreateLoadsDiagnosticHoriz(ploads,iomodel);
+ 			UpdateElementsDiagnosticHoriz(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
+-		
++
+ 		case DiagnosticVertAnalysisEnum:
+ 			CreateNodesDiagnosticVert(pnodes, iomodel);
+ 			CreateConstraintsDiagnosticVert(pconstraints,iomodel);
+ 			CreateLoadsDiagnosticVert(ploads,iomodel);
+ 			UpdateElementsDiagnosticVert(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
+-	
++
+ 		case DiagnosticHutterAnalysisEnum:
+ 			CreateNodesDiagnosticHutter(pnodes, iomodel);
+ 			CreateConstraintsDiagnosticHutter(pconstraints,iomodel);
+@@ -54,7 +53,7 @@
+ 			UpdateElementsDiagnosticHutter(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
+ 		#endif
+-		
++
+ 		#ifdef _HAVE_HYDROLOGY_
+ 		case HydrologyAnalysisEnum:
+ 			CreateNodesHydrology(pnodes, iomodel);
+@@ -71,14 +70,14 @@
+ 			CreateLoadsThermal(ploads,iomodel);
+ 			UpdateElementsThermal(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
+-	
++
+ 		case EnthalpyAnalysisEnum:
+ 			CreateNodesEnthalpy(pnodes, iomodel);
+ 			CreateConstraintsEnthalpy(pconstraints,iomodel);
+ 			CreateLoadsEnthalpy(ploads,iomodel);
+ 			UpdateElementsEnthalpy(elements,iomodel,analysis_counter,analysis_type);
+ 			break;
+-		
++
+ 		case MeltingAnalysisEnum:
+ 			CreateNodesMelting(pnodes, iomodel);
+ 			CreateConstraintsMelting(pconstraints,iomodel);
+@@ -121,7 +120,6 @@
+ 			break;
+ 		#endif
+ 
+-
+ 		default:
+ 			_error_("analysis_type: " << EnumToStringx(analysis_type) << " not supported yet!");
+ 	}
+Index: ../trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp	(revision 13622)
+@@ -9,7 +9,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void MinVxx( IssmDouble* pminvx, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-	
++
+ 	int i;
+ 	IssmDouble minvx;
+ 	IssmDouble node_minvx;
+@@ -19,7 +19,7 @@
+ 	for(i=0;i<elements->Size();i++){
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		element->MinVx(&element_minvx,process_units); //go pick up the minimum velocity in the inputs
+-	
++
+ 		if(i==0)minvx=element_minvx; //initialize minvx
+ 		else{
+ 			if(element_minvx<minvx)minvx=element_minvx;
+Index: ../trunk-jpl/src/c/modules/NodesDofx/NodesDofx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodesDofx/NodesDofx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/NodesDofx/NodesDofx.cpp	(revision 13622)
+@@ -14,7 +14,7 @@
+ 	int noerr=1;
+ 	int found=0;
+ 	int i;
+-	
++
+ 	/*Do we have any nodes for this analysis type? :*/
+ 	if(nodes->NumberOfNodes(configuration_type)){ 
+ 
+Index: ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.cpp	(revision 13622)
+@@ -10,7 +10,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void MaxVzx( IssmDouble* pmaxvz, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-	
++
+ 	int i;
+ 	IssmDouble maxvz;
+ 	IssmDouble node_maxvz;
+@@ -20,7 +20,7 @@
+ 	for(i=0;i<elements->Size();i++){
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		element->MaxVz(&element_maxvz,process_units); //go pick up the minimum velocity in the inputs
+-	
++
+ 		if(i==0)maxvz=element_maxvz; //initialize maxvz
+ 		else{
+ 			if(element_maxvz>maxvz)maxvz=element_maxvz;
+Index: ../trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp	(revision 13622)
+@@ -28,7 +28,7 @@
+ }
+ 
+ void SetControlInputsFromVectorx(Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,Vector<IssmDouble>* vector){
+-	
++
+ 	IssmDouble* serial_vector=NULL;
+ 
+ 	serial_vector=vector->ToMPISerial();
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 13622)
+@@ -40,7 +40,7 @@
+ 		num_unstable_constraints=0;
+ 		converged=1;
+ 	}
+-		
++
+ 	/*Assign output pointers: */
+ 	*pconverged=converged;
+ 	*pnum_unstable_constraints=num_unstable_constraints;
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp	(revision 13622)
+@@ -26,7 +26,7 @@
+ 			}
+ 		}
+ 	}
+-	
++
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
+ 	MPI_Bcast(&mpi_found,1,MPI_INT,0,IssmComm::GetComm());                
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 13622)
+@@ -14,9 +14,8 @@
+ /*RiftIsPresent(Loads* loads,int configuration_type){{{*/
+ int RiftIsPresent(Loads* loads,int configuration_type){
+ 
++	int i;
+ 
+-	int i;
+-	
+ 	int found=0;
+ 	int mpi_found=0;
+ 
+@@ -49,7 +48,7 @@
+ 
+ 	RiftConstrain(&num_unstable_constraints,loads,configuration_type);
+ 	if(num_unstable_constraints==0)converged=1;
+-	
++
+ 	if(RiftIsFrozen(loads,configuration_type)){
+ 		converged=1;
+ 		num_unstable_constraints=0;
+@@ -68,7 +67,7 @@
+ void RiftConstrain(int* pnum_unstable_constraints,Loads* loads,int configuration_type){
+ 
+ 	int			i;
+-	
++
+ 	/* generic object pointer: */
+ 	Riftfront* riftfront=NULL;
+ 	Load*      load=NULL;
+@@ -76,7 +75,7 @@
+ 	int unstable;
+ 	int sum_num_unstable_constraints;
+ 	int num_unstable_constraints=0;	
+-		
++
+ 	/*Enforce constraints: */
+ 	for (i=0;i<loads->Size();i++){
+ 
+@@ -99,7 +98,7 @@
+ 	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,IssmComm::GetComm());                
+ 	num_unstable_constraints=sum_num_unstable_constraints;
+ 	#endif
+-	
++
+ 	/*Assign output pointers: */
+ 	*pnum_unstable_constraints=num_unstable_constraints;
+ 
+@@ -109,7 +108,7 @@
+ int RiftIsFrozen(Loads* loads,int configuration_type){
+ 
+ 	int			i;
+-	
++
+ 	/* generic object pointer: */
+ 	Load*      load=NULL;
+ 	Riftfront* riftfront=NULL;
+@@ -120,7 +119,7 @@
+ 	for (i=0;i<loads->Size();i++){
+ 
+ 		if (RiftfrontEnum==loads->GetEnum(i)){
+-			
++
+ 			load=(Load*)loads->GetObjectByOffset(i);
+ 			if(load->InAnalysis(configuration_type)){
+ 
+@@ -132,7 +131,7 @@
+ 			}
+ 		}
+ 	}
+-	
++
+ 	/*Is there just one found? that would mean we have frozen! : */
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Reduce (&found,&mpi_found,1,MPI_INT,MPI_MAX,0,IssmComm::GetComm() );
+@@ -147,7 +146,7 @@
+ void RiftFreezeConstraints(Loads* loads,int configuration_type){
+ 
+ 	int			i;
+-	
++
+ 	/* generic object pointer: */
+ 	Load*      load=NULL;
+ 	Riftfront* riftfront=NULL;
+@@ -159,7 +158,7 @@
+ 
+ 			load=(Load*)loads->GetObjectByOffset(i);
+ 			if(load->InAnalysis(configuration_type)){
+-				
++
+ 				riftfront=(Riftfront*)load;
+ 				riftfront->FreezeConstraints();
+ 			}
+@@ -175,7 +174,7 @@
+ int RiftIsMaterialStable(Loads* loads){
+ 
+ 	int i;
+-	
++
+ 	Riftfront* riftfront=NULL;
+ 	int found=0;
+ 	int mpi_found=0;
+@@ -206,9 +205,8 @@
+ /*RiftIsPreStable(Loads* loads){{{*/
+ int RiftIsPreStable(Loads* loads){
+ 
++	int i;
+ 
+-	int i;
+-	
+ 	Riftfront* riftfront=NULL;
+ 	int found=0;
+ 	int mpi_found=0;
+@@ -245,9 +243,8 @@
+ /*RiftSetPreStable(Loads* loads){{{*/
+ void RiftSetPreStable(Loads* loads){
+ 
++	int i;
+ 
+-	int i;
+-	
+ 	Riftfront* riftfront=NULL;
+ 	int found=0;
+ 	int mpi_found=0;
+@@ -267,14 +264,14 @@
+ void RiftPreConstrain(int* pnum_unstable_constraints,Loads* loads){
+ 
+ 	int			i;
+-	
++
+ 	/* generic object pointer: */
+ 	Riftfront* riftfront=NULL;
+ 
+ 	int unstable;
+ 	int sum_num_unstable_constraints;
+ 	int num_unstable_constraints=0;	
+-		
++
+ 	/*Enforce constraints: */
+ 	for (i=0;i<loads->Size();i++){
+ 
+@@ -293,7 +290,7 @@
+ 	MPI_Bcast(&sum_num_unstable_constraints,1,MPI_INT,0,IssmComm::GetComm());                
+ 	num_unstable_constraints=sum_num_unstable_constraints;
+ 	#endif
+-	
++
+ 	/*Assign output pointers: */
+ 	*pnum_unstable_constraints=num_unstable_constraints;
+ 
+@@ -303,7 +300,7 @@
+ void RiftMaxPenetrationInInputs(Loads* loads){
+ 
+ 	int			i;
+-	
++
+ 	/* generic object pointer: */
+ 	Riftfront* riftfront=NULL;
+ 
+@@ -345,7 +342,7 @@
+ int RiftPotentialUnstableConstraints(Loads* loads){
+ 
+ 	int			i;
+-	
++
+ 	/* generic object pointer: */
+ 	Riftfront* riftfront=NULL;
+ 
+Index: ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp	(revision 13622)
+@@ -19,7 +19,7 @@
+ 
+ 	Vec uf0_vector = NULL;
+ 	Vec df_vector  = NULL;
+-	
++
+ 	if(uf0) uf0_vector = uf0->vector;
+ 	if(df)  df_vector  = df->vector;
+ 
+@@ -147,14 +147,14 @@
+ 	/*Solve: */
+ 	if(VerboseSolver())KSPView(ksp,PETSC_VIEWER_STDOUT_WORLD);
+ 	KSPSolve(ksp,pf,uf);
+-	
++
+ 	/*Check convergence*/
+ 	KSPGetIterationNumber(ksp,&iteration_number);
+ 	if (iteration_number<0) _error_("Solver diverged at iteration number: " << -iteration_number);
+ 
+ 	/*Free resources:*/
+ 	KSPFree(&ksp);
+-		
++
+ 	/*Assign output pointers:*/
+ 	*puf=uf;
+ }
+Index: ../trunk-jpl/src/c/modules/Solverx/DofTypesToIndexSet.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/DofTypesToIndexSet.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Solverx/DofTypesToIndexSet.cpp	(revision 13622)
+@@ -11,7 +11,7 @@
+ #else
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+-        
++
+ void DofTypesToIndexSet(IS* pisv, IS* pisp, Vec df,int typeenum){
+ 
+ 	/*output: */
+@@ -61,7 +61,7 @@
+ 			}
+ 		}
+ 		VecRestoreArray(df,&df_local);
+-		
++
+ 		/*Create indices sets: */
+ 		#if _PETSC_MAJOR_ < 3 || (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 2)
+ 		ISCreateGeneral(IssmComm::GetComm(),pressure_num,pressure_indices,&isp);
+Index: ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 13622)
+@@ -20,7 +20,7 @@
+ 
+ 	/*output: */
+ 	SeqVec<IssmPDouble>* data_mesh=NULL;
+-	
++
+ 	/*Intermediary*/
+ 	double* x=NULL;
+ 	double* y=NULL;
+@@ -311,7 +311,7 @@
+ 	/*Checks*/
+ 	_assert_(x2>x1 && y2>y1);
+ 	_assert_(x<=x2 && x>=x1 && y<=y2 && y>=y1);
+-	
++
+ 	double xm=(x2-x1)/2;
+ 	double ym=(y2-y1)/2;
+ 
+Index: ../trunk-jpl/src/c/modules/Orthx/Orthx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Orthx/Orthx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Orthx/Orthx.cpp	(revision 13622)
+@@ -5,7 +5,7 @@
+ #include "./Orthx.h"
+ 
+ void	Orthx( Vector<IssmDouble>** pnewgradj, Vector<IssmDouble>* gradj, Vector<IssmDouble>* oldgradj){
+-	
++
+ 	/*output: */
+ 	Vector<IssmDouble>* newgradj=NULL;
+ 
+Index: ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 13622)
+@@ -10,7 +10,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void SystemMatricesx(Matrix<IssmDouble>** pKff, Matrix<IssmDouble>** pKfs, Vector<IssmDouble>** ppf, Vector<IssmDouble>** pdf, IssmDouble* pkmax,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,bool kflag,bool pflag,bool penalty_kflag,bool penalty_pflag){
+-	
++
+ 	/*intermediary: */
+ 	int      i,j;
+ 	int      fsize,ssize;
+@@ -18,7 +18,7 @@
+ 	int      analysis_type, configuration_type;
+ 	Element *element = NULL;
+ 	Load    *load    = NULL;
+-	
++
+ 	/*output: */
+ 	Matrix<IssmDouble>*    Kff  = NULL;
+ 	Matrix<IssmDouble>*    Kfs  = NULL;
+@@ -69,7 +69,7 @@
+ 		Kfs->Assemble();
+ 		df->Assemble();
+ 	}
+-	
++
+ 	if(pflag){
+ 
+ 		pf=new Vector<IssmDouble>(fsize);
+@@ -105,7 +105,6 @@
+ 		Kfs->Assemble();
+ 	}
+ 
+-	
+ 	if(penalty_pflag){
+ 
+ 		/*Fill right hand side vector, from loads: */
+Index: ../trunk-jpl/src/c/modules/CostFunctionx/CostFunctionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/CostFunctionx/CostFunctionx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/CostFunctionx/CostFunctionx.cpp	(revision 13622)
+@@ -20,7 +20,7 @@
+ 
+ 	/*output: */
+ 	IssmDouble J,Jplus;
+-	
++
+ 	/*Recover parameters*/
+ 	parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+ 	parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
+Index: ../trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.cpp	(revision 13622)
+@@ -64,4 +64,3 @@
+ 
+ 	return(kfil);
+ }
+-
+Index: ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp	(revision 13622)
+@@ -10,7 +10,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void CreateJacobianMatrixx(Matrix<IssmDouble>** pJff,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,IssmDouble kmax){
+-	
++
+ 	int      i,connectivity;
+ 	int      numberofdofspernode;
+ 	int      fsize,configuration_type;
+@@ -29,7 +29,7 @@
+ 
+ 	/*Initialize Jacobian Matrix*/
+ 	Jff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
+-	
++
+ 	/*Create and assemble matrix*/
+ 	for(i=0;i<elements->Size();i++){
+ 		element=(Element*)elements->GetObjectByOffset(i);
+Index: ../trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp	(revision 13622)
+@@ -14,7 +14,7 @@
+   /*Intermediary*/
+   int    i;
+   Element* element = NULL;
+- 
++
+   /*Compute temperature and precipitation fields: */
+   for(i=0;i<elements->Size();i++){
+     element=(Element*)elements->GetObjectByOffset(i);
+Index: ../trunk-jpl/src/c/modules/NodeConnectivityx/NodeConnectivityx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodeConnectivityx/NodeConnectivityx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/NodeConnectivityx/NodeConnectivityx.cpp	(revision 13622)
+@@ -33,8 +33,6 @@
+ 	/*output: */
+ 	double* connectivity=NULL;
+ 
+-
+-
+ 	/*Allocate connectivity: */
+ 	connectivity=xNewZeroInit<double>(nods*width);
+ 
+@@ -45,12 +43,12 @@
+ 		element=(double)(n+1); //matlab indexing
+ 
+ 		for(i=0;i<3;i++){
+-		
++
+ 			node=(int)*(elements+n*3+i); //already matlab indexed, elements comes directly from the workspace.
+ 			index=node-1;
+ 
+ 			num_elements=(int)*(connectivity+width*index+maxels); //retrieve number of elements already  plugged into the connectivity of this node.
+-			
++
+ 			already_plugged=0;
+ 			for(j=0;j<num_elements;j++){
+ 				if (element==*(connectivity+width*index+j)){
+@@ -63,7 +61,7 @@
+ 			/*this elements is not yet plugged  into the connectivity for this node, do it, and increase counter: */
+ 			*(connectivity+width*index+num_elements)=element;
+ 			*(connectivity+width*index+maxels)=(double)(num_elements+1);
+-			
++
+ 		}
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp	(revision 13622)
+@@ -58,13 +58,13 @@
+ 		fseek(fid,0,SEEK_SET);
+ 		numanalyses=0;
+ 		while ( fgets(line, sizeof line, fid) ){
+-		
++
+ 			/*skip comments and empty lines: */
+ 			if ((line[0]=='%') || (line[0]=='\n') || (line[0]==' ') || (line[0]=='\t') || (line[0]=='\r'))continue;
+-		
++
+ 			/*Get rid of end of line: */
+ 			line[strlen(line)-1]='\0';
+-		
++
+ 			if (line[0]=='+'){ /*this is the analysis line: */
+ 				analyses[numanalyses]=StringToEnumx(&line[1]);  //skip the '+'
+ 				numanalyses++;
+Index: ../trunk-jpl/src/c/modules/TriaSearchx/TriaSearchx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriaSearchx/TriaSearchx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/TriaSearchx/TriaSearchx.cpp	(revision 13622)
+@@ -39,7 +39,7 @@
+ 
+ 		//Get current point coordinates
+ 		r.x=x0[i]; r.y=y0[i];
+-		
++
+ 		I=Th.R2ToI2(r);
+ 
+ 		//Find triangle holding r/I
+Index: ../trunk-jpl/src/c/modules/Gradjx/Gradjx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Gradjx/Gradjx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Gradjx/Gradjx.cpp	(revision 13622)
+@@ -18,7 +18,7 @@
+ 	int     *control_type  = NULL;
+ 	Vector<IssmDouble>  *gradient      = NULL;
+ 	Vector<IssmDouble> **gradient_list = NULL;
+-	
++
+ 	/*retrieve some parameters: */
+ 	parameters->FindParam(&num_controls,InversionNumControlParametersEnum);   _assert_(num_controls);
+ 	parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
+Index: ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.cpp	(revision 13622)
+@@ -9,7 +9,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void MaxAbsVzx( IssmDouble* pmaxabsvz, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-	
++
+ 	int i;
+ 	IssmDouble maxabsvz;
+ 	IssmDouble node_maxabsvz;
+@@ -19,7 +19,7 @@
+ 	for(i=0;i<elements->Size();i++){
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		element->MaxAbsVz(&element_maxabsvz,process_units); //go pick up the minimum velocity in the inputs
+-	
++
+ 		if(i==0)maxabsvz=element_maxabsvz; //initialize maxabsvz
+ 		else{
+ 			if(element_maxabsvz>maxabsvz)maxabsvz=element_maxabsvz;
+Index: ../trunk-jpl/src/c/modules/VecMergex/VecMergex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/VecMergex/VecMergex.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/VecMergex/VecMergex.cpp	(revision 13622)
+@@ -17,11 +17,10 @@
+ 
+ 	/*retrieve parameters: */
+ 	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	
++
+ 	/*serialize uf: */
+ 	uf_serial=uf->ToMPISerial();
+ 
+-
+ 	/*Do we have any nodes for this configuration? :*/
+ 	if(nodes->NumberOfNodes(configuration_type)){ 
+ 
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 13622)
+@@ -22,14 +22,14 @@
+ 		Load* load=(Load*)loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromConstant(constant,name);
+ 	}
+-	
++
+ 	for(i=0;i<materials->Size();i++){
+ 		Material* material=(Material*)materials->GetObjectByOffset(i);
+ 		material->InputUpdateFromConstant(constant,name);
+ 	}
+ }
+ void InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int    constant, int name){
+-	
++
+ 	int i;
+ 
+ 	/*Elements and loads drive the update: */
+@@ -42,7 +42,7 @@
+ 		Load* load=(Load*)loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromConstant(constant,name);
+ 	}
+-	
++
+ 	for(i=0;i<materials->Size();i++){
+ 		Material* material=(Material*)materials->GetObjectByOffset(i);
+ 		material->InputUpdateFromConstant(constant,name);
+@@ -62,7 +62,7 @@
+ 		Load* load=(Load*)loads->GetObjectByOffset(i);
+ 		load->InputUpdateFromConstant(constant,name);
+ 	}
+-	
++
+ 	for(i=0;i<materials->Size();i++){
+ 		Material* material=(Material*)materials->GetObjectByOffset(i);
+ 		material->InputUpdateFromConstant(constant,name);
+Index: ../trunk-jpl/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp	(revision 13622)
+@@ -39,7 +39,7 @@
+ 	if(fsize){
+ 		VecMergex(ug,uf,nodes,parameters,FsetEnum);
+ 	}
+-	
++
+ 	/*Merge s set back into g set: */
+ 	if(ssize){
+ 		VecMergex(ug,ys,nodes,parameters,SsetEnum);
+Index: ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp	(revision 13622)
+@@ -15,7 +15,7 @@
+ 	Element *element    = NULL;
+ 	int      element_id;
+ 	bool     ispresent=false;
+-	
++
+ 	/*output: */
+ 	IssmDouble mass_flux=0;
+ 	IssmDouble all_mass_flux=0;
+@@ -43,7 +43,7 @@
+ 	/*retrieve segments from array: */
+ 	segments=array[counter-1]; //matlab to "C" indexing
+ 	num_segments=mdims_array[counter-1];
+-	
++
+ 	/*Go through segments, and then elements, and figure out which elements belong to a segment. 
+ 	 * When we find one, use the element to compute the mass flux on the segment: */
+ 	for(i=0;i<num_segments;i++){
+@@ -71,7 +71,7 @@
+ 	xDelete<int>(mdims_array);
+ 	xDelete<int>(ndims_array);
+ 	xDelete<IssmDouble*>(array);
+-	
++
+ 	/*Assign output pointers: */
+ 	*pmass_flux=mass_flux;
+ }
+Index: ../trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp	(revision 13622)
+@@ -9,7 +9,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void MinVyx( IssmDouble* pminvy, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-	
++
+ 	int i;
+ 	IssmDouble minvy;
+ 	IssmDouble node_minvy;
+@@ -19,7 +19,7 @@
+ 	for(i=0;i<elements->Size();i++){
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		element->MinVy(&element_minvy,process_units); //go pick up the minimum velocity in the inputs
+-	
++
+ 		if(i==0)minvy=element_minvy; //initialize minvy
+ 		else{
+ 			if(element_minvy<minvy)minvy=element_minvy;
+Index: ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp	(revision 13622)
+@@ -16,7 +16,6 @@
+ #include "../../toolkits/toolkits.h"
+ #include "../modules.h"
+ 
+-
+ void DakotaResponsesx(double* d_responses,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){
+ 
+ 	int        i,j,k;
+@@ -42,9 +41,9 @@
+ 
+ 	//watch out, we have more d_numresponses than numresponsedescriptors, because the responses have been expanded if they were scaled. 
+ 	//because we don't know the d_responses descriptors (the scaled ones) we can't key off them, so we will key off the responses_descriptors: */
+-		
++
+ 	for(i=0;i<numresponsedescriptors;i++){
+-		
++
+ 		flag=DescriptorIndex(root,&index,responses_descriptors[i]);
+ 
+ 		if(flag==ScaledEnum){
+@@ -76,7 +75,7 @@
+ 
+ 			//Responsex(responses_pointer,elements,nodes, vertices,loads,materials, parameters,root,process_units);
+ 			Responsex(&femmodel_response,elements,nodes, vertices,loads,materials, parameters,root,process_units,0);//0 is the index for weights
+-			
++
+ 			if(my_rank==0){
+ 				/*plug response: */
+ 				responses_pointer[0]=femmodel_response;
+@@ -92,7 +91,7 @@
+ 			responses_pointer++;
+ 		}
+ 		else if (flag==RegularEnum){
+-			
++
+ 			/*perfectly normal response function: */
+ 			Responsex(&femmodel_response,elements,nodes, vertices,loads,materials, parameters,root,process_units,0);//0 is the weight index
+ 
+@@ -107,7 +106,6 @@
+ 		else _error_("flag type " << flag << " not supported yet for response analysis");
+ 	}
+ 
+-
+ 	/*Synthesize echo: {{{*/
+ 	if(my_rank==0){
+ 		_printString_("   responses: " << d_numresponses << ": ");
+Index: ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.cpp	(revision 13622)
+@@ -7,7 +7,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ #include "./ContourToMeshx.h"
+ 
+ int ContourToMeshx(SeqVec<double>** pin_nod,SeqVec<double>** pin_elem, double* index, double* x, double* y,DataSet* contours,char* interptype,int nel,int nods, int edgevalue) {
+@@ -27,7 +26,6 @@
+ 	num=_NUMTHREADS_;
+ 	#endif
+ 
+-
+ 	/*output: */
+ 	SeqVec<double>* in_nod=NULL;
+ 	SeqVec<double>* in_elem=NULL;
+Index: ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshxt.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshxt.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshxt.cpp	(revision 13622)
+@@ -11,7 +11,7 @@
+ #include "./ContourToMeshx.h"
+ 
+ void* ContourToMeshxt(void* vpthread_handle){
+-	
++
+ 	int noerr=1;
+ 
+ 	/*gate variables :*/
+Index: ../trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp	(revision 13622)
+@@ -12,7 +12,7 @@
+ void CreateNodalConstraintsx( Vector<IssmDouble>** pys, Nodes* nodes,int configuration_type){
+ 
+ 	int i;
+-	
++
+ 	/*intermediary: */
+ 	int  numberofdofs;
+ 
+Index: ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.cpp	(revision 13622)
+@@ -75,11 +75,11 @@
+ 			counter++;
+ 		}
+ 	}
+-	
++
+ 	/*fill in the point attribute list: */
+ 	in.pointattributelist = xNew<REAL>(in.numberofpoints*in.numberofpointattributes);
+ 	for (i=0;i<in.numberofpoints;i++) in.pointattributelist[i] = 0.0;
+-	
++
+ 	/*fill in the point marker list: */
+ 	in.pointmarkerlist = xNew<int>(in.numberofpoints);
+ 	for(i=0;i<in.numberofpoints;i++) in.pointmarkerlist[i] = 0;
+@@ -95,7 +95,7 @@
+ 		/*for rifts, we have one less segment as we have vertices*/
+ 		in.numberofsegments+=contour->nods-1;
+ 	}
+-	
++
+ 	in.segmentlist = xNew<int>(in.numberofsegments*2);
+ 	in.segmentmarkerlist = xNewZeroInit<int>(in.numberofsegments);
+ 	counter=0;
+@@ -127,7 +127,7 @@
+ 		}
+ 		counter++;
+ 	}
+-	
++
+ 	/*Build regions: */
+ 	in.numberofregions = 0;
+ 
+@@ -193,7 +193,7 @@
+ 	/*Output : */
+ 	index_matrix=new SeqMat<IssmPDouble>(index,out.numberoftriangles,3,1.0);
+ 	*pindex=index_matrix;
+-	
++
+ 	segments_matrix=new SeqMat<IssmPDouble>(segments,out.numberofsegments,3,1.0);
+ 	*psegments=segments_matrix;
+ 
+Index: ../trunk-jpl/src/c/modules/UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.cpp	(revision 13622)
+@@ -10,7 +10,7 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void UpdateDynamicConstraintsx(Constraints* constraints,Nodes* nodes,Parameters* parameters,Vector<IssmDouble>* yg){
+-	
++
+ 	int configuration_type;
+ 	IssmDouble* yg_serial=NULL;
+ 
+Index: ../trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp	(revision 13622)
+@@ -14,7 +14,7 @@
+ 			 int sgn){
+ 
+ 	#ifdef _HAVE_SHAPELIB_ //only works if Shapelib library has been compiled in.
+-	
++
+ 	double  cm,sp;
+ 
+ 	if (sgn)
+@@ -32,7 +32,7 @@
+ 			 int sgn,double cm,double sp){
+ 
+ 	#ifdef _HAVE_SHAPELIB_ //only works if Shapelib library has been compiled in.
+-	
++
+ 	int     i,j,k,iret=0;
+ 	int     lwidth=1;
+ 	double  popac=0.50;
+@@ -610,4 +610,3 @@
+ 	return 0;
+ 	#endif
+ }
+-
+Index: ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp	(revision 13622)
+@@ -23,7 +23,7 @@
+ 	gate=(PointCloudFindNeighborsThreadStruct*)handle->gate;
+ 	my_thread=handle->id;
+ 	num_threads=handle->num;
+-	
++
+ 	/*recover parameters :*/
+ 	x=gate->x;
+ 	y=gate->y;
+@@ -56,7 +56,7 @@
+ 			/*skip himself: */
+ 			if (j==i)continue;
+ 			distance=sqrt(pow(x[i]-x[j],2)+ pow(y[i]-y[j],2));
+-			
++
+ 			if(distance<=mindistance){
+ 
+ 				/*insert value and go to the next point*/
+@@ -73,6 +73,6 @@
+ 
+ 	/*Free ressources:*/
+ 	xDelete<bool>(already);
+-	
++
+ 	return NULL;
+ }
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 13622)
+@@ -10,7 +10,6 @@
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+ void IoModelToConstraintsx(Constraints* constraints,IoModel* iomodel,int vector_enum,int analysis_type){
+-	
+ 
+ 	/*intermediary: */
+ 	int     i,j;
+@@ -47,10 +46,10 @@
+ 	if(M==numberofvertices){
+ 		/*static: just create Constraints objects*/
+ 		count=0;
+-	
++
+ 		/*Create Constraints from x,y,z: */
+ 		for (i=0;i<numberofvertices;i++){
+-			
++
+ 			/*keep only this partition's nodes:*/
+ 			if((iomodel->my_vertices[i])){
+ 
+@@ -77,7 +76,7 @@
+ 
+ 		/*Create constraints from x,y,z: */
+ 		for (i=0;i<numberofvertices;i++){
+-			
++
+ 			/*keep only this partition's nodes:*/
+ 			if((iomodel->my_vertices[i])){
+ 
+Index: ../trunk-jpl/src/c/modules/ControlInputScaleGradientx/ControlInputScaleGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ControlInputScaleGradientx/ControlInputScaleGradientx.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/modules/ControlInputScaleGradientx/ControlInputScaleGradientx.cpp	(revision 13622)
+@@ -16,7 +16,6 @@
+ 	IssmDouble *scalar_list = NULL;
+ 	IssmDouble  scalar;
+ 
+-
+ 	/*Retrieve some parameters*/
+ 	parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
+ 	parameters->FindParam(&control_type,NULL,InversionControlParametersEnum);
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp	(revision 13622)
+@@ -25,7 +25,6 @@
+ 	MPI_Comm_rank(comm,&my_rank);
+ 	MPI_Comm_size(comm,&num_procs);
+ 
+-	
+ 	/*We are  not bound by any library, just use what seems most logical*/
+ 	num_local_rows=xNew<int>(num_procs);    
+ 
+@@ -35,14 +34,14 @@
+ 		  more even distribution.*/
+ 		num_local_rows[i]=(int)floor((double)global_size/(double)num_procs); 
+ 	}
+-	
++
+ 	/*There may be some rows left. Distribute evenly.*/ 
+ 	row_rest=global_size - num_procs*(int)floor((double)global_size/(double)num_procs);
+ 	for (i=0;i<row_rest;i++){
+ 		num_local_rows[i]++;
+ 	}
+ 	local_size=num_local_rows[my_rank];
+-	
++
+ 	/*free ressources: */
+ 	xDelete<int>(num_local_rows);
+ 
+Index: ../trunk-jpl/src/c/toolkits/plapack/patches/CyclicalFactorization.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/patches/CyclicalFactorization.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/plapack/patches/CyclicalFactorization.cpp	(revision 13622)
+@@ -3,13 +3,12 @@
+ */
+ #include <math.h>
+ 
+-
+ #include "../../../shared/shared.h"
+ 
+ int SmallestPrimeFactor(int* output,int input);
+ 
+ int CyclicalFactorization(int* pnprows,int* pnpcols,int num_procs){
+-	
++
+ 	int nprows,npcols;
+ 	int last_diff;
+ 	int i;
+@@ -64,7 +63,7 @@
+ 	of integer input
+ */
+ int SmallestPrimeFactor(int* output,int input){
+-	
++
+ 	int found=0;
+ 	int i;
+ 
+Index: ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp	(revision 13622)
+@@ -13,7 +13,7 @@
+ #include "../../scalapack/FortranMapping.h"
+ 
+ void PlapackInvertMatrixLocalCleanup(PLA_Obj* pa,PLA_Template* ptempl,double** parrayA,int** pidxnA,MPI_Comm* pcomm_2d);
+-	
++
+ int PlapackInvertMatrix(Mat* A,Mat* inv_A,int status,int con,COMM comm){ 
+ 	/*inv_A does not yet exist, inv_A was just allocated, that's all*/
+ 
+@@ -25,7 +25,7 @@
+ 	int local_mA,local_nA;
+ 	int lower_row,upper_row,range,this_range,this_lower_row;
+ 	MatType type;
+-	
++
+ 	/*Plapack: */
+ 	MPI_Datatype   datatype;
+ 	MPI_Comm       comm_2d;
+@@ -41,7 +41,7 @@
+ 	double    *arrayA=NULL;
+ 	int* idxnA=NULL;
+ 	int d_nz,o_nz;
+-	
++
+ 	/*Feedback to client*/
+ 	int computation_status;  
+ 
+@@ -91,7 +91,7 @@
+ 
+ 	/* Set the datatype */
+ 	datatype = MPI_DOUBLE;
+-	
++
+ 	/* Copy A into a*/
+ 	PLA_Matrix_create(datatype,mA,nA,templ,PLA_ALIGN_FIRST,PLA_ALIGN_FIRST,&a);  
+ 	PLA_Obj_set_to_zero(a);
+@@ -126,7 +126,7 @@
+ 	PLA_Temp_free(&templ);
+ 	xDelete<double>(arrayA);
+ 	xDelete<int>(idxnA);
+-	
++
+ 	/*Finalize PLAPACK*/
+ 	PLA_Finalize();
+ 	MPI_Comm_free(&comm_2d);
+Index: ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp	(revision 13622)
+@@ -7,7 +7,6 @@
+ 
+ int PlapackToPetsc(Mat* A,int local_mA,int local_nA,int mA,int nA,MatType type,PLA_Obj a,PLA_Template templ,int nprows,int npcols,int nb,COMM comm){
+ 
+-	
+ 	int i;
+ 
+ 	int lower_row,upper_row,range;
+@@ -21,7 +20,6 @@
+ 	int i0,i1;
+ 	double* local_buffer=NULL;
+ 
+-
+ 	/*Create matrix A (right now, we just have an allocated pointer A*/
+ 	if (strcasecmp_eq(type,MATMPIAIJ)){
+ 		/*See pretty large here, because we have no idea how many nnz per row*/
+@@ -32,17 +30,17 @@
+ 	else if(strcasecmp_eq(type,MATMPIDENSE)){
+ 		MatCreateMPIDense(comm,local_mA,local_nA, mA,nA,PETSC_NULL,A); 
+ 	}
+-	
++
+ 	MatGetOwnershipRange(*A,&lower_row,&upper_row);
+ 	upper_row--;
+ 	range=upper_row-lower_row+1;
+-	
++
+ 	/*Build the Plapack row and column indices corresponding to the local_buffer stored in a. 
+ 	  We need those indices to directly plug local_buffer into the Petsc matrix A. We do not 
+ 	  use PLA_axpy_global_to_matrix to extract a local matrix, because this routine hangs when the 
+ 	  problem size becomes big. We rely therefore on MatAssembly from Petsc to gather the plapack 
+ 	  matrix into a Petsc Matrix.*/
+-	
++
+ 	/*Vector physically based block cyclic distribution: */
+ 	row_nodes=xNew<int>(mA);
+ 	col_nodes=xNew<int>(nA);
+@@ -81,7 +79,7 @@
+ 
+ 	/*Get local buffer: */
+ 	PLA_Obj_local_buffer(a,(void**)&local_buffer);
+-	
++
+ 	/*Insert into invA matrix. Use col oriented insertion, for Plapack is column oriented*/
+ 	MatSetOption(*A,MAT_COLUMN_ORIENTED);
+ 	MatSetValues(*A,idxm_count,idxm,idxn_count,idxn,local_buffer,INSERT_VALUES);
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/KSPFree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/KSPFree.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/KSPFree.cpp	(revision 13622)
+@@ -8,7 +8,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ /*Petsc includes: */
+ #include "petscmat.h"
+ #include "petscvec.h"
+@@ -25,4 +24,3 @@
+ 	#endif
+ 
+ }
+-
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13622)
+@@ -42,23 +42,23 @@
+ }
+ 
+ int MatMultCompatible(Mat A,Vec x,COMM comm){
+-	
++
+ 	/*error management*/
+-	
++
+ 	int local_m,local_n;
+ 	int lower_row,upper_row,range;
+ 	int result=1;
+ 	int sumresult;
+ 	int num_procs;
+-	
++
+ 	/*recover num_procs:*/
+ 	MPI_Comm_size(comm,&num_procs);
+ 
+ 	MatGetLocalSize(A,&local_m,&local_n);;
+ 	VecGetLocalSize(x,&range);;
+-	
++
+ 	if (local_n!=range)result=0;
+-	
++
+ 	/*synchronize result: */
+ 	MPI_Reduce (&result,&sumresult,1,MPI_INT,MPI_SUM,0,comm );
+ 	MPI_Bcast(&sumresult,1,MPI_INT,0,comm);                
+@@ -80,7 +80,7 @@
+ 
+ 	/*output: */
+ 	Vec outvector=NULL;
+-	
++
+ 	/*Create outvector with local size m*/
+ 	VecCreate(comm,&outvector); ; 
+ 	VecSetSizes(outvector,m,PETSC_DECIDE); ; 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscMatrixType.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscMatrixType.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscMatrixType.cpp	(revision 13622)
+@@ -2,7 +2,6 @@
+  * \brief: convert MatrixType from ISSM to Petsc
+  */
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -18,7 +17,6 @@
+ #include "../../toolkitsenums.h"
+ #include "../../../shared/shared.h"
+ 
+-
+ MatType ISSMToPetscMatrixType(MatrixType type){
+ 
+ 	switch(type){
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscInsertMode.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscInsertMode.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscInsertMode.cpp	(revision 13622)
+@@ -2,7 +2,6 @@
+  * \brief: convert InsertMode from ISSM to Petsc
+  */
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -18,7 +17,6 @@
+ #include "../../toolkitsenums.h"
+ #include "../../../shared/shared.h"
+ 
+-
+ InsertMode ISSMToPetscInsertMode(InsMode mode){
+ 
+ 	switch(mode){
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscNormMode.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscNormMode.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscNormMode.cpp	(revision 13622)
+@@ -2,7 +2,6 @@
+  * \brief: convert NormMode from ISSM to Petsc
+  */
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -18,7 +17,6 @@
+ #include "../../toolkitsenums.h"
+ #include "../../../shared/shared.h"
+ 
+-
+ NormType ISSMToPetscNormMode(NormMode mode){
+ 
+ 	switch(mode){
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecFree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecFree.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecFree.cpp	(revision 13622)
+@@ -8,7 +8,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ /*Petsc includes: */
+ #include "petscmat.h"
+ #include "petscvec.h"
+@@ -24,4 +23,3 @@
+ 	*pvec=NULL;
+ 
+ }
+-
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp	(revision 13622)
+@@ -20,7 +20,6 @@
+ 
+ void PetscOptionsInsertMultipleString(char* options_string){
+ 
+-
+ 	/*The list of options is going to be pairs of the type "-option option_value"*/
+ 	#if _PETSC_MAJOR_ == 2
+ 		PetscToken *token=NULL ;
+@@ -34,17 +33,15 @@
+ 	int ignore_second;
+ 	int first_token=1;
+ 
+-
+ 	PetscTokenCreate(options_string,' ',&token);
+ 	for (;;){
+-		
+ 
+ 		/*Read next tokens*/
+ 		if(first_token){
+ 			PetscTokenFind(token,&first);
+ 		}
+ 		PetscTokenFind(token,&second);
+-		
++
+ 		if (!first){
+ 			/*We are at the end of options*/
+ 			break;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatFree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatFree.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatFree.cpp	(revision 13622)
+@@ -8,7 +8,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ /*Petsc includes: */
+ #include "petscmat.h"
+ #include "petscmat.h"
+@@ -25,4 +24,3 @@
+ 	#endif
+ 
+ }
+-
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp	(revision 13622)
+@@ -8,7 +8,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ #include "../petscincludes.h"
+ #include "../../../shared/shared.h"
+ 
+@@ -17,7 +16,7 @@
+ 	int i;
+ 	int my_rank;
+ 	int num_procs;
+-	
++
+ 	/*Petsc variables*/
+ 	PetscInt lower_row,upper_row; 
+ 	int range;
+@@ -27,14 +26,14 @@
+ 	int* idxn=NULL; 
+ 	double* local_matrix=NULL; /*matrix local to each node used for temporary holding matrix values*/
+ 	int buffer[3];
+-	
++
+ 	/*recover my_rank and num_procs:*/
+ 	MPI_Comm_size(comm,&num_procs);
+ 	MPI_Comm_rank(comm,&my_rank);
+ 
+ 	/*Output*/
+ 	double* outmatrix=NULL;
+-	
++
+ 	/*get matrix size: */
+ 	MatGetSize(matrix,&M,&N);
+ 
+@@ -42,28 +41,28 @@
+ 	MatGetOwnershipRange(matrix,&lower_row,&upper_row);    
+ 	upper_row--; 
+ 	range=upper_row-lower_row+1;
+-	
++
+ 	/*Local and global allocation*/
+ 	if (my_rank==0)outmatrix=xNew<double>(M*N);
+-	
++
+ 	if (range){
+ 		local_matrix=xNew<double>(N*range);
+ 		idxm=xNew<int>(range);  
+ 		idxn=xNew<int>(N);  
+-	 
++
+ 		for (i=0;i<N;i++){
+ 			*(idxn+i)=i;
+ 		}
+ 		for (i=0;i<range;i++){
+ 			*(idxm+i)=lower_row+i;
+ 		}
+-	
++
+ 		MatGetValues(matrix,range,idxm,N,idxn,local_matrix);     
+ 	}
+ 
+ 	/*Now each node holds its local_matrix containing range rows. 
+ 	 * We send these rows to the matrix on node 0*/
+-	
++
+ 	for (i=1;i<num_procs;i++){
+ 		if (my_rank==i){ 
+ 			buffer[0]=my_rank;
+@@ -81,7 +80,7 @@
+ 		//Still have the local_matrix on node 0 to take care of.
+ 		memcpy(outmatrix,local_matrix,N*range*sizeof(double));
+ 	} 
+-	
++
+ 	/*Assign output pointer: */
+ 	*poutmatrix=outmatrix;
+ 	xDelete<int>(idxm);
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp	(revision 13622)
+@@ -52,7 +52,6 @@
+ 		solver_type=SUPERLUDISTPACKAGE;
+ 	}
+ 
+-
+ 	#if _PETSC_MAJOR_ >= 3 
+ 	PetscOptionsGetString(PETSC_NULL,"-pc_factor_mat_solver_package",&option[0],100,&flag);
+ 	if (strcmp(option,"mumps")==0){
+@@ -60,7 +59,6 @@
+ 	}
+ 	#endif
+ 
+-	
+ 	PetscOptionsGetString(PETSC_NULL,"-issm_option_solver",&option[0],100,&flag);
+ 	if (strcmp(option,"stokes")==0){
+ 		solver_type=StokesSolverEnum;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp	(revision 13622)
+@@ -8,12 +8,11 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ #include "../petscincludes.h"
+ #include "../../../shared/shared.h"
+ 
+ int VecToMPISerial(double** pgathered_vector, Vec vector,COMM comm){
+-	
++
+ 	int i;
+ 	int num_procs; 
+ 	int my_rank;
+@@ -24,16 +23,16 @@
+ 	int range;
+ 	int * idxn=NULL; 
+ 	int buffer[3];
+-	
++
+ 	/*intermediary results*/
+ 	double* local_vector=NULL;
+ 
+ 	/*input*/
+ 	int vector_size;
+-	
++
+ 	/*Output*/
+ 	double* gathered_vector=NULL; //Global vector holding the final assembled vector on all nodes.
+-	
++
+ 	/*recover my_rank and num_procs*/
+ 	MPI_Comm_size(comm,&num_procs);
+ 	MPI_Comm_rank(comm,&my_rank);
+@@ -46,7 +45,7 @@
+ 
+ 	/*Allocate gathered vector on all nodes .*/
+ 	gathered_vector=xNew<double>(vector_size);
+-	
++
+ 	/*Allocate local vectors*/
+ 	VecGetOwnershipRange(vector,&lower_row,&upper_row);
+ 	upper_row--;
+@@ -88,10 +87,10 @@
+ 
+ 	/*Assign output pointers: */
+ 	*pgathered_vector=gathered_vector;
+-	
++
+ 	/*free ressources: */
+ 	xDelete<int>(idxn);
+ 	xDelete<double>(local_vector);
+-	
++
+ 	return 1;
+ }
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp	(revision 13622)
+@@ -2,7 +2,6 @@
+  * \brief: convert a sparse or dense Petsc matrix into a matlab matrix
+  */
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -19,7 +18,6 @@
+ /*Petsc includes: */
+ #include "../../../shared/shared.h"
+ 
+-
+ void PetscMatrixToDoubleMatrix(double** pmatrix, int* prows, int* pcols,Mat petsc_matrix){
+ 
+ 	int i,j,k;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 13622)
+@@ -31,9 +31,9 @@
+ 	else{
+ 		local_size=DetermineLocalSize(size,comm);
+ 	}
+-	
++
+ 	VecCreate(comm,&vector); 
+-	
++
+ 	VecSetSizes(vector,local_size,PETSC_DECIDE); 
+ 	VecSetFromOptions(vector); 
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecDuplicatePatch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecDuplicatePatch.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecDuplicatePatch.cpp	(revision 13622)
+@@ -8,7 +8,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ /*Petsc includes: */
+ #include "petscmat.h"
+ #include "petscvec.h"
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13622)
+@@ -33,7 +33,7 @@
+ 	/*Determine local sizes: */
+ 	m=DetermineLocalSize(M,comm);
+ 	n=DetermineLocalSize(N,comm);
+-	
++
+ 	nnz=(int)((double)M*(double)N*sparsity); //number of non zeros.
+ 	d_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
+ 	o_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
+@@ -61,7 +61,7 @@
+ 	/*Determine local sizes: */
+ 	m=DetermineLocalSize(M,comm);
+ 	n=DetermineLocalSize(N,comm);
+-	
++
+ 	nnz=(int)((double)M*(double)N*sparsity); //number of non zeros.
+ 	d_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
+ 	o_nz=(int)((double)nnz/(double)M/2.0); //number of non zeros per row/2
+@@ -111,7 +111,7 @@
+ 
+ 	/*preallocation  according to type: */
+ 	MatGetType(outmatrix,&type);
+-	
++
+ 	#if _PETSC_MAJOR_ == 2 
+ 	if((strcmp(type,"mpiaij")==0) || (strcmp(type,"aijmumps")==0)){
+ 		MatMPIAIJSetPreallocation(outmatrix,d_nz,NULL,o_nz,NULL);
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp	(revision 13622)
+@@ -3,7 +3,6 @@
+  *  lower row and upper row from a matrix a cpu owns.
+  */
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -18,14 +17,14 @@
+ 	/*externals :*/
+ 	int my_rank;
+ 	int num_procs;
+-	
++
+ 	/*recover my_rank and num_procs:*/
+ 	MPI_Comm_size(comm,&num_procs);
+ 	MPI_Comm_rank(comm,&my_rank);
+ 
+ 	/*output: */
+ 	int lower_row,upper_row;
+-	
++
+ 	/*intermediary :*/
+ 	int i;
+ 	int* allranges=NULL;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp	(revision 13622)
+@@ -21,7 +21,7 @@
+ void VecMerge(Vec A, Vec B, double* row_partition_vector,int row_partition_size){
+ 
+ 	int i;
+-	
++
+ 	/*Petsc matrix*/
+ 	int lower_row,upper_row,range;
+ 	int* idxm=NULL;
+@@ -56,7 +56,7 @@
+ 		}
+ 		VecSetValues(A,range,idxm,values,INSERT_VALUES);
+ 	}
+-	
++
+ 	/*Assemble vector*/
+ 	VecAssemblyBegin(A);
+ 	VecAssemblyEnd(A);
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13622)
+@@ -45,14 +45,13 @@
+ 	int     i;
+ 	int* idxm=NULL;
+ 	int* idxn=NULL;
+-	
++
+ 	if(M)idxm=xNew<int>(M);
+ 	if(N)idxn=xNew<int>(N);
+ 
+ 	for(i=0;i<M;i++)idxm[i]=i;
+ 	for(i=0;i<N;i++)idxn[i]=i;
+ 
+-
+ 	this->matrix=NewMat(M,N,sparsity,IssmComm::GetComm());
+ 	MatSetValues(this->matrix,M,idxm,N,idxn,serial_mat,INSERT_VALUES);
+ 	MatAssemblyBegin(this->matrix,MAT_FINAL_ASSEMBLY);
+@@ -65,7 +64,7 @@
+ /*}}}*/
+ /*FUNCTION PetscMat::PetscMat(int M,int N, int connectivity, int numberofdofspernode){{{*/
+ PetscMat::PetscMat(int M,int N, int connectivity,int numberofdofspernode){
+-	
++
+ 	this->matrix=NewMat(M,N,connectivity,numberofdofspernode,IssmComm::GetComm());
+ 
+ }
+@@ -98,11 +97,10 @@
+ /*FUNCTION PetscMat::Norm{{{*/
+ IssmDouble PetscMat::Norm(NormMode mode){
+ 
+-
+ 	IssmDouble norm=0;
+ 	_assert_(this->matrix);
+ 	MatNorm(this->matrix,ISSMToPetscNormMode(mode),&norm);
+-	
++
+ 	return norm;
+ 
+ }
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp	(revision 13622)
+@@ -28,7 +28,7 @@
+ /*}}}*/
+ /*FUNCTION PetscVec::PetscVec(int M,bool fromlocalsize){{{*/
+ PetscVec::PetscVec(int M,bool fromlocalsize){
+-	
++
+ 	this->vector=NewVec(M,IssmComm::GetComm(),fromlocalsize);
+ 
+ }
+@@ -78,7 +78,7 @@
+ /*}}}*/
+ /*FUNCTION PetscVec::Assemble{{{*/
+ void PetscVec::Assemble(void){
+-		
++
+ 	_assert_(this->vector);
+ 	VecAssemblyBegin(this->vector); 
+ 	VecAssemblyEnd(this->vector);
+@@ -87,7 +87,7 @@
+ /*}}}*/
+ /*FUNCTION PetscVec::SetValues{{{*/
+ void PetscVec::SetValues(int ssize, int* list, IssmDouble* values, InsMode mode){
+-	
++
+ 	_assert_(this->vector);
+ 	VecSetValues(this->vector,ssize,list,values,ISSMToPetscInsertMode(mode));
+ 
+@@ -127,7 +127,7 @@
+ /*}}}*/
+ /*FUNCTION PetscVec::Duplicate{{{*/
+ PetscVec* PetscVec::Duplicate(void){
+-	
++
+ 	PetscVec* output=NULL;
+ 	_assert_(this->vector);
+ 	Vec vec_output=NULL;
+@@ -164,7 +164,7 @@
+ /*}}}*/
+ /*FUNCTION PetscVec::ToMPISerial{{{*/
+ IssmDouble* PetscVec::ToMPISerial(void){
+-	
++
+ 	IssmDouble* vec_serial=NULL;
+ 	VecToMPISerial(&vec_serial, this->vector,IssmComm::GetComm());
+ 	return vec_serial;
+Index: ../trunk-jpl/src/c/classes/DofIndexing.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 13622)
+@@ -163,7 +163,7 @@
+ 	_printLine_("   fsize: " << fsize);
+ 	_printLine_("   ssize: " << ssize);
+ 	_printLine_("   clone: " << clone);
+-	
++
+ 	_printLine_("   set membership: f,s sets ");
+ 	for(i=0;i<gsize;i++){
+ 		_printLine_("      dof " << i << ": " <<(f_set[i]?"true":"false")<< " " <<(s_set[i]?"true":"false"));
+Index: ../trunk-jpl/src/c/classes/Patch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Patch.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/Patch.cpp	(revision 13622)
+@@ -118,7 +118,7 @@
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Status  status;
+ 	#endif
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 	num_procs=IssmComm::GetSize();
+Index: ../trunk-jpl/src/c/classes/Hook.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Hook.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/Hook.cpp	(revision 13622)
+@@ -125,7 +125,7 @@
+ 		output->ids     = xNew<int>(output->num);
+ 		output->offsets = xNew<int>(output->num);
+ 	}
+-	
++
+ 	for(int i=0;i<output->num;i++){
+ 		output->objects[i] = this->objects[i];
+ 		output->offsets[i] = this->offsets[i];
+@@ -181,7 +181,7 @@
+ /*}}}*/
+ /*FUNCTION Hook::delivers{{{*/
+ Object* Hook::delivers(void){
+-	
++
+ 	/*first, check that we only have one T object in our object list: */
+ 	if (this->num!=1) _error_("trying to delivery a single hook object when hook holds " << this->num << " objects" << "\n");
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp	(revision 13622)
+@@ -14,7 +14,7 @@
+ #include "../../../EnumDefinitions/EnumDefinitions.h"
+ #include "../../../shared/shared.h"
+ #include "../../../include/include.h"
+-		
++
+ /*Matdamageice constructors and destructor*/
+ /*FUNCTION Matdamageice::Matdamageice(){{{*/
+ Matdamageice::Matdamageice(){
+@@ -298,7 +298,7 @@
+ 	 * If epsilon is NULL, it means this is the first time Emg is being run, and we 
+ 	 * return g, initial viscosity.
+ 	 */
+-	
++
+ 	/*output: */
+ 	IssmDouble viscosity3d;
+ 
+@@ -340,7 +340,7 @@
+ 			}
+ 			else{
+ 				e=(n-1)/2/n;
+-			
++
+ 				viscosity3d=B/(2*pow(A,e));
+ 			}
+ 		}
+@@ -369,7 +369,7 @@
+ 	 * If epsilon is NULL, it means this is the first time Emg is being run, and we 
+ 	 * return g, initial viscosity.
+ 	 */
+-	
++
+ 	/*output: */
+ 	IssmDouble viscosity3d;
+ 
+@@ -386,7 +386,7 @@
+ 	n=GetN();
+ 	Z=GetZ();
+ 	B=Z*GetB();
+-	
++
+ 	if (n==1){
+ 		/*Viscous behaviour! viscosity3d=B: */
+ 		viscosity3d=B/2;
+@@ -439,7 +439,7 @@
+ 	 * If epsilon is NULL, it means this is the first time Gradjb is being run, and we 
+ 	 * return mu20, initial viscosity.
+ 	 */
+-	
++
+ 	/*output: */
+ 	IssmDouble viscosity_complement;
+ 
+@@ -467,7 +467,7 @@
+ 		}
+ 		else{
+ 			e=(n-1)/(2*n);
+-		
++
+ 			viscosity_complement=1/(2*pow(A,e));
+ 		}
+ 	}
+@@ -479,7 +479,7 @@
+ 	_assert_(B>0);
+ 	_assert_(n>0);
+ 	_assert_(viscosity_complement>0);
+-		
++
+ 	/*Return: */
+ 	*pviscosity_complement=viscosity_complement;
+ }
+@@ -495,7 +495,7 @@
+ 	 * If epsilon is NULL, it means this is the first time Gradjb is being run, and we 
+ 	 * return mu20, initial viscosity.
+ 	 */
+-	
++
+ 	/*output: */
+ 	IssmDouble viscosity_complement;
+ 
+@@ -523,7 +523,7 @@
+ 		}
+ 		else{
+ 			e=(n-1)/(2*n);
+-		
++
+ 			viscosity_complement=B/(2*pow(A,e));
+ 		}
+ 	}
+@@ -535,7 +535,7 @@
+ 	_assert_(B>0);
+ 	_assert_(n>0);
+ 	_assert_(viscosity_complement>0);
+-		
++
+ 	/*Return: */
+ 	*pviscosity_complement=viscosity_complement;
+ }
+@@ -700,8 +700,6 @@
+ 		default: _error_("type " << type << " (" << EnumToStringx(type) << ") not implemented yet");
+ 	}
+ 
+-
+-
+ }
+ /*}}}*/
+ /*FUNCTION Matdamageice::InputUpdateFromMatrixDakota(int* vector, int name, int type) {{{*/
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Matice.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Matice.cpp	(revision 13622)
+@@ -14,7 +14,7 @@
+ #include "../../../EnumDefinitions/EnumDefinitions.h"
+ #include "../../../shared/shared.h"
+ #include "../../../include/include.h"
+-		
++
+ /*Matice constructors and destructor*/
+ /*FUNCTION Matice::Matice(){{{*/
+ Matice::Matice(){
+@@ -276,7 +276,7 @@
+ 	 * If epsilon is NULL, it means this is the first time Emg is being run, and we 
+ 	 * return g, initial viscosity.
+ 	 */
+-	
++
+ 	/*output: */
+ 	IssmDouble viscosity3d;
+ 
+@@ -317,7 +317,7 @@
+ 			}
+ 			else{
+ 				e=(n-1)/2/n;
+-			
++
+ 				viscosity3d=B/(2*pow(A,e));
+ 			}
+ 		}
+@@ -346,7 +346,7 @@
+ 	 * If epsilon is NULL, it means this is the first time Emg is being run, and we 
+ 	 * return g, initial viscosity.
+ 	 */
+-	
++
+ 	/*output: */
+ 	IssmDouble viscosity3d;
+ 
+@@ -362,7 +362,7 @@
+ 	eps0=pow((IssmDouble)10,(IssmDouble)-27);
+ 	B=GetB();
+ 	n=GetN();
+-	
++
+ 	if (n==1){
+ 		/*Viscous behaviour! viscosity3d=B: */
+ 		viscosity3d=B/2;
+@@ -415,7 +415,7 @@
+ 	 * If epsilon is NULL, it means this is the first time Gradjb is being run, and we 
+ 	 * return mu20, initial viscosity.
+ 	 */
+-	
++
+ 	/*output: */
+ 	IssmDouble viscosity_complement;
+ 
+@@ -443,7 +443,7 @@
+ 		}
+ 		else{
+ 			e=(n-1)/(2*n);
+-		
++
+ 			viscosity_complement=1/(2*pow(A,e));
+ 		}
+ 	}
+@@ -455,7 +455,7 @@
+ 	_assert_(B>0);
+ 	_assert_(n>0);
+ 	_assert_(viscosity_complement>0);
+-		
++
+ 	/*Return: */
+ 	*pviscosity_complement=viscosity_complement;
+ }
+@@ -620,8 +620,6 @@
+ 		default: _error_("type " << type << " (" << EnumToStringx(type) << ") not implemented yet");
+ 	}
+ 
+-
+-
+ }
+ /*}}}*/
+ /*FUNCTION Matice::InputUpdateFromMatrixDakota(int* vector, int name, int type) {{{*/
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Matpar.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Matpar.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Matpar.cpp	(revision 13622)
+@@ -14,7 +14,7 @@
+ #include "../../../shared/shared.h"
+ #include "../../../include/include.h"
+ #include "../../../EnumDefinitions/EnumDefinitions.h"
+-		
++
+ /*Matpar constructors and destructor*/
+ /*FUNCTION Matpar::Matpar() {{{*/
+ Matpar::Matpar(){
+@@ -38,7 +38,7 @@
+ 	iomodel->Constant(&this->mixed_layer_capacity,MaterialsMixedLayerCapacityEnum);
+ 	iomodel->Constant(&this->thermal_exchange_velocity,MaterialsThermalExchangeVelocityEnum);
+ 	iomodel->Constant(&this->g,ConstantsGEnum);
+-	
++
+ 	iomodel->Constant(&this->hydro_CR,HydrologyCREnum);
+ 	iomodel->Constant(&this->kn,HydrologyKnEnum);
+ 	iomodel->Constant(&this->hydro_n,HydrologyNEnum);
+@@ -243,7 +243,7 @@
+ /*}}}*/
+ /*FUNCTION Matpar::GetRhoIce {{{*/
+ IssmDouble Matpar::GetRhoIce(){
+-	
++
+ 	return rho_ice;
+ }
+ /*}}}*/
+@@ -322,7 +322,7 @@
+ 
+ 	/*Ouput*/
+ 	IssmDouble temperature,waterfraction;
+-	
++
+ 	if(enthalpy<PureIceEnthalpy(pressure)){
+ 		temperature=referencetemperature+enthalpy/heatcapacity;
+ 		waterfraction=0;
+@@ -342,7 +342,7 @@
+ 
+ 	/*Ouput*/
+ 	IssmDouble enthalpy;
+-	
++
+ 	if(temperature<TMeltingPoint(pressure)){
+ 		enthalpy=heatcapacity*(temperature-referencetemperature);
+ 	}
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp	(revision 13622)
+@@ -92,7 +92,7 @@
+ /*}}}*/
+ /*FUNCTION ControlInput::copy{{{*/
+ Object* ControlInput::copy() {
+-	
++
+ 	ControlInput* output=NULL;
+ 
+ 	output = new ControlInput();
+@@ -108,7 +108,7 @@
+ 	return output;
+ }
+ /*}}}*/
+-	
++
+ /*ControlInput management*/
+ /*FUNCTION ControlInput::InstanceEnum{{{*/
+ int ControlInput::InstanceEnum(void){
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp	(revision 13622)
+@@ -63,7 +63,7 @@
+ /*}}}*/
+ /*FUNCTION DatasetInput::copy{{{*/
+ Object* DatasetInput::copy() {
+-	
++
+ 	DatasetInput* output=NULL;
+ 
+ 	output = new DatasetInput();
+@@ -88,7 +88,7 @@
+ 	return outinput;
+ }
+ /*}}}*/
+-	
++
+ /*DatasetInput management*/
+ /*FUNCTION DatasetInput::InstanceEnum{{{*/
+ int DatasetInput::InstanceEnum(void){
+@@ -110,7 +110,7 @@
+ 	/*Get requested input within dataset*/
+ 	if(index<0 || index > inputs->Size()-1) _error_("index requested (" << index << ") exceeds dataset size (" << inputs->Size() << ")");
+ 	Input* input=(Input*)this->inputs->GetObjectByOffset(index);
+-	
++
+ 	input->GetInputValue(pvalue,gauss);
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/IntInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/IntInput.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/IntInput.cpp	(revision 13622)
+@@ -56,7 +56,7 @@
+ /*}}}*/
+ /*FUNCTION IntInput::copy{{{*/
+ Object* IntInput::copy() {
+-	
++
+ 	return new IntInput(this->enum_type,this->value);
+ 
+ }
+@@ -91,7 +91,7 @@
+ /*}}}*/
+ /*FUNCTION IntInput::SpawnResult{{{*/
+ ElementResult* IntInput::SpawnResult(int step, IssmDouble time){
+-	
++
+ 	_error_("not supported yet!");
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/BoolInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/BoolInput.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/BoolInput.cpp	(revision 13622)
+@@ -61,12 +61,12 @@
+ /*}}}*/
+ /*FUNCTION BoolInput::copy{{{*/
+ Object* BoolInput::copy() {
+-	
++
+ 	return new BoolInput(this->enum_type,this->value);
+ 
+ }
+ /*}}}*/
+-	
++
+ /*BoolInput management*/
+ /*FUNCTION BoolInput::InstanceEnum{{{*/
+ int BoolInput::InstanceEnum(void){
+@@ -92,7 +92,7 @@
+ /*}}}*/
+ /*FUNCTION BoolInput::SpawnResult{{{*/
+ ElementResult* BoolInput::SpawnResult(int step, IssmDouble time){
+-	
++
+ 	return new BoolElementResult(this->enum_type,this->value,step,time);
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp	(revision 13622)
+@@ -72,12 +72,12 @@
+ /*}}}*/
+ /*FUNCTION TriaP1Input::copy{{{*/
+ Object* TriaP1Input::copy() {
+-	
++
+ 	return new TriaP1Input(this->enum_type,this->values);
+ 
+ }
+ /*}}}*/
+-	
++
+ /*TriaP1Input management*/
+ /*FUNCTION TriaP1Input::InstanceEnum{{{*/
+ int TriaP1Input::InstanceEnum(void){
+@@ -207,7 +207,7 @@
+ /*}}}*/
+ /*FUNCTION TriaP1Input::ContrainMin{{{*/
+ void TriaP1Input::ConstrainMin(IssmDouble minimum){
+-	
++
+ 	int i;
+ 	const int numnodes=3;
+ 
+@@ -275,7 +275,7 @@
+ /*}}}*/
+ /*FUNCTION TriaP1Input::Scale{{{*/
+ void TriaP1Input::Scale(IssmDouble scale_factor){
+-	
++
+ 	int i;
+ 	const int numnodes=3;
+ 
+@@ -326,7 +326,7 @@
+ 
+ 	int i;
+ 	const int numnodes=3;
+-		
++
+ 	if(!xIsNan<IssmDouble>(cm_min)) for(i=0;i<numnodes;i++)if (this->values[i]<cm_min)this->values[i]=cm_min;
+ 	if(!xIsNan<IssmDouble>(cm_max)) for(i=0;i<numnodes;i++)if (this->values[i]>cm_max)this->values[i]=cm_max;
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp	(revision 13622)
+@@ -102,7 +102,7 @@
+ 
+ }
+ /*}}}*/
+-	
++
+ /*TransientInput management*/
+ /*FUNCTION TransientInput::InstanceEnum{{{*/
+ int TransientInput::InstanceEnum(void){
+@@ -215,7 +215,7 @@
+ 
+ 	/*Retrieve interpolated values for this time step: */
+ 	Input* input=GetTimeInput(time);
+-		   
++
+ 	/*Call input function*/
+ 	input->GetInputDerivativeValue(p,xyz_list,gauss);
+ 
+@@ -230,7 +230,7 @@
+ /*}}}*/
+ /*FUNCTION TransientInput::GetInputAverage{{{*/
+ void TransientInput::GetInputAverage(IssmDouble* pvalue){
+-	
++
+ 	IssmDouble time;
+ 
+ 	/*First, recover current time from parameters: */
+@@ -241,7 +241,7 @@
+ 
+ 	/*Call input function*/
+ 	input->GetInputAverage(pvalue);
+-			   
++
+ 	delete input;
+ 
+ }
+@@ -295,10 +295,10 @@
+ 
+    /*Retrieve interpolated values for this time step: */
+ 	Input* input=GetTimeInput(time);
+-		   
++
+ 	/*Call input function*/
+ 	input->SquareMin(psquaremin,process_units,parameters);
+-			   
++
+ 	delete input;
+ 
+ }
+@@ -317,7 +317,7 @@
+ 
+ 	/*Call input function*/
+ 	infnorm=input->InfinityNorm();
+-			   
++
+ 	/*Clean-up and return*/
+ 	delete input;
+ 	return infnorm;
+@@ -334,10 +334,10 @@
+ 
+    /*Retrieve interpolated values for this time step: */
+ 	Input* input=GetTimeInput(time);
+-		   
++
+ 	/*Call input function*/
+ 	max=input->Max();
+-			   
++
+ 	delete input;
+ 
+ 	return max;
+@@ -399,7 +399,7 @@
+ 
+ 	/*Call input function*/
+ 	minabs=input->MinAbs();
+-			   
++
+ 	/*Clean-up and return*/
+ 	delete input;
+ 	return minabs;
+@@ -415,10 +415,10 @@
+ 
+ 	/*Retrieve interpolated values for this time step: */
+ 	Input* input=GetTimeInput(time);
+-		   
++
+ 	/*Call input function*/
+ 	input->GetVectorFromInputs(vector,doflist);
+-			   
++
+ 	delete input;
+ 
+ } /*}}}*/
+@@ -429,11 +429,11 @@
+ 	IssmDouble alpha1,alpha2;
+ 	int        found;
+ 	int        offset;
+-	
++
+ 	Input *input  = NULL;
+ 	Input *input1 = NULL;
+ 	Input *input2 = NULL;
+-	
++
+ 	/*go through the timesteps, and figure out which interval we 
+ 	 *fall within. Then interpolate the values on this interval: */
+ 	found=binary_search(&offset,intime,this->timesteps,this->numtimesteps);
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp	(revision 13622)
+@@ -70,11 +70,11 @@
+ 
+ }
+ /*}}}*/
+-	
++
+ /*PentaP1Input management*/
+ /*FUNCTION PentaP1Input::copy{{{*/
+ Object* PentaP1Input::copy() {
+-	
++
+ 	return new PentaP1Input(this->enum_type,this->values);
+ 
+ }
+@@ -356,7 +356,7 @@
+ /*}}}*/
+ /*FUNCTION PentaP1Input::ConstrainMin{{{*/
+ void PentaP1Input::ConstrainMin(IssmDouble minimum){
+-	
++
+ 	int i;
+ 	const int numnodes=6;
+ 
+@@ -424,7 +424,7 @@
+ /*}}}*/
+ /*FUNCTION PentaP1Input::Scale{{{*/
+ void PentaP1Input::Scale(IssmDouble scale_factor){
+-	
++
+ 	int i;
+ 	const int numnodes=6;
+ 
+@@ -463,7 +463,7 @@
+ 
+ 	int i;
+ 	const int numnodes=6;
+-		
++
+ 	if(!xIsNan<IssmDouble>(cm_min)) for(i=0;i<numnodes;i++)if (this->values[i]<cm_min)this->values[i]=cm_min;
+ 	if(!xIsNan<IssmDouble>(cm_max)) for(i=0;i<numnodes;i++)if (this->values[i]>cm_max)this->values[i]=cm_max;
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.cpp	(revision 13622)
+@@ -61,12 +61,12 @@
+ /*}}}*/
+ /*FUNCTION DoubleInput::copy{{{*/
+ Object* DoubleInput::copy() {
+-	
++
+ 	return new DoubleInput(this->enum_type,this->value);
+ 
+ }
+ /*}}}*/
+-	
++
+ /*DoubleInput management*/
+ /*FUNCTION DoubleInput::InstanceEnum{{{*/
+ int DoubleInput::InstanceEnum(void){
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.cpp	(revision 13622)
+@@ -72,7 +72,7 @@
+ void IntVecParam::DeepEcho(void){
+ 
+ 	int i;
+-	
++
+ 	_printLine_("IntVecParam:");
+ 	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+ 	_printLine_("   vector size: " << this->M);
+@@ -93,7 +93,7 @@
+ /*}}}*/
+ /*FUNCTION IntVecParam::copy{{{*/
+ Object* IntVecParam::copy() {
+-	
++
+ 	return new IntVecParam(this->enum_type,this->values,this->M);
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Params/BoolParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/BoolParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/BoolParam.cpp	(revision 13622)
+@@ -64,7 +64,7 @@
+ /*}}}*/
+ /*FUNCTION BoolParam::copy{{{*/
+ Object* BoolParam::copy() {
+-	
++
+ 	return new BoolParam(this->enum_type,this->value);
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.cpp	(revision 13622)
+@@ -57,7 +57,7 @@
+ void IntMatParam::DeepEcho(void){
+ 
+ 	int i,j;
+-	
++
+ 	_printLine_("IntMatParam:");
+ 	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+ 	_printLine_("   matrix size: " << this->M << "x" << this->N);
+@@ -80,7 +80,7 @@
+ /*}}}*/
+ /*FUNCTION IntMatParam::copy{{{*/
+ Object* IntMatParam::copy() {
+-	
++
+ 	return new IntMatParam(this->enum_type,this->value,this->M,this->N);
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Params/StringParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/StringParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/StringParam.cpp	(revision 13622)
+@@ -32,7 +32,6 @@
+ 	value=xNew<char>(strlen(in_value)+1);
+ 	xMemCpy<char>(value,in_value,(strlen(in_value)+1));
+ 
+-	
+ }
+ /*}}}*/
+ /*FUNCTION StringParam::~StringParam(){{{*/
+@@ -66,7 +65,7 @@
+ /*}}}*/
+ /*FUNCTION StringParam::copy{{{*/
+ Object* StringParam::copy() {
+-	
++
+ 	return new StringParam(this->enum_type,this->value);
+ 
+ }
+@@ -75,7 +74,7 @@
+ /*StringParam virtual functions definitions: */
+ /*FUNCTION StringParam::GetParameterValue{{{*/
+ void  StringParam::GetParameterValue(char** pstring){
+-	
++
+ 	char* outstring=NULL;
+ 	int   stringsize;
+ 
+@@ -95,9 +94,9 @@
+ /*}}}*/
+ /*FUNCTION StringParam::SetValue{{{*/
+ void  StringParam::SetValue(char* string){
+-	
++
+ 	int   stringsize;
+-	
++
+ 	/*avoid leak: */
+ 	xDelete<char>(this->value);
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.cpp	(revision 13622)
+@@ -56,7 +56,7 @@
+ void DoubleVecParam::DeepEcho(void){
+ 
+ 	int i;
+-	
++
+ 	_printLine_("DoubleVecParam:");
+ 	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+ 	_printLine_("   vector size: " << this->M);
+@@ -77,7 +77,7 @@
+ /*}}}*/
+ /*FUNCTION DoubleVecParam::copy{{{*/
+ Object* DoubleVecParam::copy() {
+-	
++
+ 	return new DoubleVecParam(this->enum_type,this->values,this->M);
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.cpp	(revision 13622)
+@@ -57,7 +57,7 @@
+ void DoubleMatParam::DeepEcho(void){
+ 
+ 	int i,j;
+-	
++
+ 	_printLine_("DoubleMatParam:");
+ 	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+ 	_printLine_("   matrix size: " << this->M << "x" << this->N);
+@@ -80,7 +80,7 @@
+ /*}}}*/
+ /*FUNCTION DoubleMatParam::copy{{{*/
+ Object* DoubleMatParam::copy() {
+-	
++
+ 	return new DoubleMatParam(this->enum_type,this->value,this->M,this->N);
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Params/FileParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/FileParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/FileParam.cpp	(revision 13622)
+@@ -64,7 +64,7 @@
+ /*}}}*/
+ /*FUNCTION FileParam::copy{{{*/
+ Object* FileParam::copy() {
+-	
++
+ 	return new FileParam(this->enum_type,this->value);
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp	(revision 13622)
+@@ -65,7 +65,7 @@
+ /*}}}*/
+ /*FUNCTION DataSetParam::copy{{{*/
+ Object* DataSetParam::copy() {
+-	
++
+ 	return new DataSetParam(this->enum_type,this->value);
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntParam.cpp	(revision 13622)
+@@ -64,7 +64,7 @@
+ /*}}}*/
+ /*FUNCTION IntParam::copy{{{*/
+ Object* IntParam::copy() {
+-	
++
+ 	return new IntParam(this->enum_type,this->value);
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp	(revision 13622)
+@@ -74,7 +74,7 @@
+ /*}}}*/
+ /*FUNCTION VectorParam::copy{{{*/
+ Object* VectorParam::copy() {
+-	
++
+ 	return new VectorParam(this->enum_type,this->value);
+ 
+ }
+@@ -102,7 +102,7 @@
+ 
+ 	/*avoid leak: */
+ 	xdelete(&value);
+-	
++
+ 	/*copy: */
+ 	value=vector->Duplicate();
+ 	vector->Copy(value);
+Index: ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp	(revision 13622)
+@@ -72,7 +72,7 @@
+ /*}}}*/
+ /*FUNCTION MatrixParam::copy{{{*/
+ Object* MatrixParam::copy() {
+-	
++
+ 	return new MatrixParam(this->enum_type,this->value);
+ 
+ }
+@@ -96,10 +96,10 @@
+ /*}}}*/
+ /*FUNCTION MatrixParam::SetValue{{{*/
+ void  MatrixParam::SetValue(Matrix<IssmDouble>* matrix){
+-	
++
+ 	/*avoid leak: */
+ 	xdelete(&value);
+-	
++
+ 	/*copy: */
+ 	value=matrix->Duplicate();
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.cpp	(revision 13622)
+@@ -45,14 +45,14 @@
+ 		}
+ 	}
+ 	else value=NULL;
+-	
++
+ }
+ /*}}}*/
+ /*FUNCTION StringArrayParam::~StringArrayParam(){{{*/
+ StringArrayParam::~StringArrayParam(){
+-		
++
+ 	int i;
+-	
++
+ 	char* string=NULL;
+ 	for(i=0;i<this->numstrings;i++){
+ 		string=value[i];
+@@ -94,7 +94,7 @@
+ /*}}}*/
+ /*FUNCTION StringArrayParam::copy{{{*/
+ Object* StringArrayParam::copy() {
+-	
++
+ 	return new StringArrayParam(this->enum_type,this->value,this->numstrings);
+ 
+ }
+@@ -103,7 +103,7 @@
+ /*StringArrayParam virtual functions definitions: */
+ /*FUNCTION StringArrayParam::GetParameterValue{{{*/
+ void  StringArrayParam::GetParameterValue(char*** pstringarray,int* pM){
+-	
++
+ 	int   i;
+ 	char** outstrings=NULL;
+ 	int   M;
+@@ -139,7 +139,7 @@
+ /*}}}*/
+ /*FUNCTION StringArrayParam::SetValue{{{*/
+ void  StringArrayParam::SetValue(char** stringarray,int M){
+-	
++
+ 	int   i;
+ 	char *string     = NULL;
+ 	char *string2    = NULL;
+Index: ../trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp	(revision 13622)
+@@ -61,7 +61,7 @@
+ void TransientParam::DeepEcho(void){
+ 
+ 	int i,j;
+-	
++
+ 	_printLine_("TransientParam:");
+ 	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+ 	_printLine_("   size: " << this->N);
+@@ -82,7 +82,7 @@
+ /*}}}*/
+ /*FUNCTION TransientParam::copy{{{*/
+ Object* TransientParam::copy() {
+-	
++
+ 	return new TransientParam(this->enum_type,this->values,this->timesteps,this->N);
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.cpp	(revision 13622)
+@@ -61,7 +61,7 @@
+ /*}}}*/
+ /*FUNCTION DoubleParam::copy{{{*/
+ Object* DoubleParam::copy() {
+-	
++
+ 	return new DoubleParam(this->enum_type,this->value);
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.cpp	(revision 13622)
+@@ -76,7 +76,7 @@
+ 		matrix=array[i];
+ 		xDelete<IssmDouble>(matrix);
+ 	}
+-	
++
+ 	xDelete<IssmDouble*>(array);
+ 	return;
+ }
+@@ -99,7 +99,7 @@
+ 	int i,j,k;
+ 	int m,n;
+ 	IssmDouble* matrix=NULL;
+-	
++
+ 	_printLine_("DoubleMatArrayParam:");
+ 	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+ 	_printLine_("   array size: " << this->M);
+@@ -129,7 +129,7 @@
+ /*}}}*/
+ /*FUNCTION DoubleMatArrayParam::copy{{{*/
+ Object* DoubleMatArrayParam::copy() {
+-	
++
+ 	return new DoubleMatArrayParam(this->enum_type,this->array, this->M, this->mdim_array,this->ndim_array);
+ 
+ }
+@@ -149,7 +149,6 @@
+ 	int*     out_mdim_array=NULL;
+ 	int*     out_ndim_array=NULL;
+ 
+-
+ 	out_M=this->M;
+ 	if(out_M){
+ 		out_array=xNew<IssmDouble*>(M);
+@@ -180,7 +179,6 @@
+ 		out_ndim_array=NULL;
+ 	}
+ 
+-
+ 	/*Assign output pointers:*/
+ 	if(pout_M) *pout_M=out_M;
+ 	if(pout_mdim_array) *pout_mdim_array=out_mdim_array;
+@@ -215,7 +213,7 @@
+ 	this->array=xNew<IssmDouble*>(M);
+ 	this->mdim_array=xNew<int>(M);
+ 	this->ndim_array=xNew<int>(M);
+-	
++
+ 	xMemCpy<int>(this->mdim_array,in_mdim_array,M);
+ 	xMemCpy<int>(this->ndim_array,in_ndim_array,M);
+ 
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Unknown.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Unknown.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Unknown.cpp	(revision 13622)
+@@ -78,10 +78,10 @@
+ 	if (value     ) {
+ 		valuei=xNew<char>(strlen(value)+1);
+ 		memcpy(valuei,value,(strlen(value)+1)*sizeof(char)); 
+-        
++
+ 		vtoken=strtok(valuei,nl);
+ 		if(flag) _pprintString_(indent << "         value: \"" << vtoken);
+-    
++
+ 		while (vtoken=strtok(NULL,nl))
+ 			if(flag) _pprintString_("\n" << indent << "                 " << vtoken);
+ 		if(flag) _pprintLine_("\"");
+@@ -109,10 +109,10 @@
+ 	if (value     ) {
+ 		valuei=xNew<char>(strlen(value)+1);
+ 		memcpy(valuei,value,(strlen(value)+1)*sizeof(char)); 
+-        
++
+ 		vtoken=strtok(valuei,nl);
+ 		fprintf(filout,"%s  %s\n",indent,vtoken);
+-    
++
+ 		while (vtoken=strtok(NULL,nl))
+ 			fprintf(filout,"%s  %s\n",indent,vtoken);
+ 
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Document.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Document.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Document.cpp	(revision 13622)
+@@ -124,4 +124,3 @@
+ 	return;
+ }
+ /*}}}*/
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_StyleSelector.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_StyleSelector.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_StyleSelector.cpp	(revision 13622)
+@@ -92,4 +92,3 @@
+ 	return;
+ }
+ /*}}}*/
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_LatLonBox.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_LatLonBox.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_LatLonBox.cpp	(revision 13622)
+@@ -43,7 +43,6 @@
+ /*FUNCTION KML_LatLonBox::Echo {{{*/
+ void  KML_LatLonBox::Echo(){
+ 
+-
+ 	_printLine_("KML_LatLonBox:");
+ 	KML_Object::Echo();
+ 
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_SubStyle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_SubStyle.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_SubStyle.cpp	(revision 13622)
+@@ -92,4 +92,3 @@
+ 	return;
+ }
+ /*}}}*/
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Polygon.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Polygon.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Polygon.cpp	(revision 13622)
+@@ -249,7 +249,6 @@
+ 				xDelete<char>(kstrj);
+ 			}
+ 
+-
+ 		else if (!strncmp(kstri,"<",1))
+ 			KML_Geometry::Read(fid,kstri);
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Vertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Vertex.cpp	(revision 13622)
+@@ -131,7 +131,7 @@
+ 
+ 	/*retrieve current pid*/
+ 	int pidcount=*ppidcount;
+-	
++
+ 	/*This vertex is a clone! Don't distribute pids, it will get them from another cpu!*/
+ 	if(this->clone) return;
+ 
+@@ -145,7 +145,7 @@
+ /*}}}*/
+ /*FUNCTION Vertex::OffsetPids{{{*/
+ void  Vertex::OffsetPids(int pidcount){
+-	
++
+ 	/*This vertex is a clone, don't offset the pids*/
+ 	if(this->clone) return;
+ 
+@@ -178,7 +178,7 @@
+ void  Vertex::SetClone(int* minranks){
+ 
+ 	int my_rank;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+@@ -193,4 +193,3 @@
+ 
+ }
+ /*}}}*/
+-
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 13622)
+@@ -174,7 +174,7 @@
+ 	 _printLine_("      NULL");
+ 	_printLine_("   inputs");
+ 	inputs->DeepEcho();
+-	
++
+ }		
+ /*}}}*/
+ /*FUNCTION Numericalflux::Id {{{*/
+@@ -191,7 +191,7 @@
+ /*}}}*/
+ /*FUNCTION Numericalflux::copy {{{*/
+ Object* Numericalflux::copy() {
+-	
++
+ 	Numericalflux* numericalflux=NULL;
+ 
+ 	numericalflux=new Numericalflux();
+@@ -403,7 +403,7 @@
+ 		for(i=0;i<numdof;i++) for(j=0;j<numdof;j++) Ke->values[i*numdof+j]+=Ke_g1[i][j];
+ 		for(i=0;i<numdof;i++) for(j=0;j<numdof;j++) Ke->values[i*numdof+j]+=Ke_g2[i][j];
+ 	}
+-	
++
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	return Ke;
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp	(revision 13622)
+@@ -33,13 +33,13 @@
+ /*}}}*/
+ /*FUNCTION Penpair::creation {{{*/
+ Penpair::Penpair(int penpair_id, int* penpair_node_ids,int in_analysis_type){
+-	
++
+ 	this->id=penpair_id;
+ 	this->analysis_type=in_analysis_type;
+ 	this->hnodes=new Hook(penpair_node_ids,2);
+ 	this->parameters=NULL;
+ 	this->nodes=NULL;
+-	
++
+ 	return;
+ }
+ /*}}}*/
+@@ -60,7 +60,7 @@
+ 	_printLine_("   id: " << id);
+ 	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+ 	hnodes->Echo();
+-	
++
+ 	return;
+ }
+ /*}}}*/
+@@ -86,7 +86,7 @@
+ /*}}}*/
+ /*FUNCTION Penpair::copy {{{*/
+ Object* Penpair::copy() {
+-	
++
+ 	Penpair* penpair=NULL;
+ 
+ 	penpair=new Penpair();
+@@ -106,7 +106,7 @@
+ 
+ }
+ /*}}}*/
+-		
++
+ /*Load virtual functions definitions:*/
+ /*FUNCTION Penpair::Configure {{{*/
+ void  Penpair::Configure(Elements* elementsin,Loads* loadsin,Nodes* nodesin,Vertices* verticesin,Materials* materialsin,Parameters* parametersin){
+@@ -263,7 +263,7 @@
+ /*}}}*/
+ /*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticMacAyealPattyn {{{*/
+ ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticMacAyealPattyn(IssmDouble kmax){
+-	
++
+ 	const int numdof=NUMVERTICES*NDOF2;
+ 	IssmDouble penalty_offset;
+ 
+@@ -290,7 +290,7 @@
+ /*}}}*/
+ /*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticStokes {{{*/
+ ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticStokes(IssmDouble kmax){
+-	
++
+ 	const int numdof=NUMVERTICES*NDOF4;
+ 	IssmDouble penalty_offset;
+ 
+@@ -310,7 +310,7 @@
+ 	Ke->values[1*numdof+5]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+ 	Ke->values[5*numdof+1]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+ 	Ke->values[5*numdof+5]=+kmax*pow((IssmDouble)10.0,penalty_offset);
+-	
++
+ 	Ke->values[2*numdof+2]=+kmax*pow((IssmDouble)10.0,penalty_offset);
+ 	Ke->values[2*numdof+6]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+ 	Ke->values[6*numdof+2]=-kmax*pow((IssmDouble)10.0,penalty_offset);
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp	(revision 13622)
+@@ -18,7 +18,7 @@
+ #include "../../../shared/shared.h"
+ #include "../../../Container/Container.h"
+ /*}}}*/
+-	
++
+ /*Element macros*/
+ #define NUMVERTICES   1
+ 
+@@ -33,7 +33,7 @@
+ 	this->element=NULL;
+ 	this->hmatpar=NULL;
+ 	this->matpar=NULL;
+-	
++
+ 	/*not active, not zigzagging: */
+ 	active=0;
+ 	zigzag_counter=0;
+@@ -63,7 +63,7 @@
+ 	/*id: */
+ 	this->id=id;
+ 	this->analysis_type=in_analysis_type;
+-	
++
+ 	/*hooks: */
+ 	pengrid_node_id=iomodel->nodecounter+index+1;
+ 	pengrid_element_id=iomodel->singlenodetoelementconnectivity[index];
+@@ -98,7 +98,7 @@
+ 	return;
+ }
+ /*}}}*/
+-			
++
+ /*Object virtual functions definitions:*/
+ /*FUNCTION Pengrid::Echo {{{*/
+ void Pengrid::Echo(void){
+@@ -133,7 +133,7 @@
+ /*}}}*/
+ /*FUNCTION Icefront::copy {{{*/
+ Object* Pengrid::copy() {
+-	
++
+ 	Pengrid* pengrid=NULL;
+ 
+ 	pengrid=new Pengrid();
+@@ -394,7 +394,7 @@
+ 
+ 	/*recover pointers: */
+ 	Penta* penta=(Penta*)element;
+-	
++
+ 	/*check that pengrid is not a clone (penalty to be added only once)*/
+ 	if (node->IsClone()){
+ 		unstable=0;
+@@ -408,7 +408,7 @@
+ 
+ 	//Recover our data:
+ 	parameters->FindParam(&penalty_lock,ThermalPenaltyLockEnum);
+-	
++
+ 	//Compute pressure melting point
+ 	t_pmp=matpar->TMeltingPoint(pressure);
+ 
+@@ -421,7 +421,6 @@
+ 		new_active=0;
+ 	}
+ 
+-
+ 	//Figure out stability of this penalty
+ 	if (active==new_active){
+ 		unstable=0;
+@@ -449,7 +448,7 @@
+ #ifdef _HAVE_DIAGNOSTIC_
+ /*FUNCTION Pengrid::PenaltyCreateKMatrixDiagnosticStokes {{{*/
+ ElementMatrix* Pengrid::PenaltyCreateKMatrixDiagnosticStokes(IssmDouble kmax){
+-	
++
+ 	const int numdof = NUMVERTICES *NDOF4;
+ 	IssmDouble    slope[2];
+ 	IssmDouble    penalty_offset;
+@@ -498,7 +497,7 @@
+ 	penta->GetInputValue(&pressure,node,PressureEnum);
+ 	penta->GetInputValue(&temperature,node,TemperatureEnum);
+ 	parameters->FindParam(&penalty_factor,ThermalPenaltyFactorEnum);
+-	
++
+ 	/*Compute pressure melting point*/
+ 	t_pmp=matpar->GetMeltingPoint()-matpar->GetBeta()*pressure;
+ 
+@@ -532,7 +531,7 @@
+ /*}}}*/
+ /*FUNCTION Pengrid::PenaltyCreatePVectorMelting {{{*/
+ ElementVector* Pengrid::PenaltyCreatePVectorMelting(IssmDouble kmax){
+-	
++
+ 	const int numdof=NUMVERTICES*NDOF1;
+ 	IssmDouble pressure;
+ 	IssmDouble temperature;
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 13622)
+@@ -51,7 +51,7 @@
+ 	int  icefront_mparid;
+ 	int  icefront_node_ids[NUMVERTICESQUA]; //initialize with largest size
+ 	int  icefront_fill;
+-	
++
+ 	/*find parameters: */
+ 	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+@@ -89,7 +89,7 @@
+ 
+ 	/*Fill*/
+ 	icefront_fill=reCast<int>(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-1]);
+-	
++
+ 	/*Ok, we have everything to build the object: */
+ 	this->id=icefront_id;
+ 	this->analysis_type=in_analysis_type;
+@@ -103,7 +103,7 @@
+ 	this->inputs=new Inputs();
+ 	this->inputs->AddInput(new IntInput(FillEnum,icefront_fill));
+ 	this->inputs->AddInput(new IntInput(TypeEnum,in_icefront_type));
+-	
++
+ 	//parameters and hooked fields: we still can't point to them, they may not even exist. Configure will handle this.
+ 	this->parameters=NULL;
+ 	this->nodes= NULL;
+@@ -111,7 +111,6 @@
+ 	this->matpar= NULL;
+ }
+ 
+-
+ /*}}}*/
+ /*FUNCTION Icefront::~Icefront() {{{*/
+ Icefront::~Icefront(){
+@@ -165,7 +164,7 @@
+ /*}}}*/
+ /*FUNCTION Icefront::copy {{{*/
+ Object* Icefront::copy() {
+-	
++
+ 	Icefront* icefront=NULL;
+ 
+ 	icefront=new Icefront();
+@@ -665,19 +664,18 @@
+ 	/*output: */
+ 	int* doflist=NULL;
+ 
+-	
+ 	/*recover type: */
+ 	inputs->GetInputValue(&type,TypeEnum);
+ 
+ 	/*Some checks for debugging*/
+ 	_assert_(nodes);
+-		
++
+ 	/*How many nodes? :*/
+ 	if(type==MacAyeal2dIceFrontEnum || type==MacAyeal3dIceFrontEnum)
+ 	 numberofnodes=2;
+ 	else 
+ 	 numberofnodes=4;
+-	
++
+ 	/*Figure out size of doflist: */
+ 	for(i=0;i<numberofnodes;i++){
+ 		numberofdofs+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum);
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp	(revision 13622)
+@@ -96,7 +96,7 @@
+ 
+ 	//intialize inputs, and add as many inputs per element as requested: 
+ 	this->inputs=new Inputs();
+-		
++
+ 	riftfront_type=SegmentRiftfrontEnum;
+ 	riftfront_fill = reCast<int,IssmDouble>(*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+7));
+ 	riftfront_friction=*(iomodel->Data(RiftsRiftstructEnum)+RIFTINFOSIZE*i+8);
+@@ -108,13 +108,13 @@
+ 	this->inputs->AddInput(new DoubleInput(FrictionEnum,riftfront_friction));
+ 	this->inputs->AddInput(new DoubleInput(FractionIncrementEnum,riftfront_fractionincrement));
+ 	this->inputs->AddInput(new BoolInput(SegmentOnIceShelfEnum,riftfront_shelf));
+-	
++
+ 	//parameters and hooked fields: we still can't point to them, they may not even exist. Configure will handle this.
+ 	this->parameters=NULL;
+ 	this->nodes= NULL;
+ 	this->elements= NULL;
+ 	this->matpar= NULL;
+-		
++
+ }
+ /*}}}*/
+ /*FUNCTION Riftfront::~Riftfront(){{{*/
+@@ -136,7 +136,6 @@
+ 	int fill;
+ 	IssmDouble friction,fractionincrement;
+ 
+-	
+ 	/*recover some inputs first: */
+ 	input=(Input*)this->inputs->GetInput(FillEnum); input->GetInputValue(&fill);
+ 	input=(Input*)this->inputs->GetInput(FrictionEnum); input->GetInputValue(&friction);
+@@ -164,7 +163,7 @@
+ 	_printLine_("   fractionincrement: " << fractionincrement);
+ 	_printLine_("   state: " << state);
+ 	_printLine_("   frozen: " << (frozen ? "true":"false"));
+-		
++
+ }
+ /*}}}*/
+ /*FUNCTION Riftfront::DeepEcho{{{*/
+@@ -194,7 +193,7 @@
+ /*}}}*/
+ /*FUNCTION Riftfront::copy {{{*/
+ Object* Riftfront::copy() {
+-	
++
+ 	Riftfront* riftfront=NULL;
+ 
+ 	riftfront=new Riftfront();
+@@ -233,12 +232,12 @@
+ 	riftfront->normal[1]=this->normal[1];
+ 	riftfront->length=this->length;
+ 	riftfront->fraction=this->fraction;
+-	
++
+ 	return riftfront;
+ 
+ }
+ /*}}}*/
+-		
++
+ /*Update virtual functions definitions:*/
+ /*FUNCTION Riftfront::InputUpdateFromConstant(bool constant,int name) {{{*/
+ void  Riftfront::InputUpdateFromConstant(bool constant,int name){
+@@ -275,7 +274,6 @@
+ }
+ /*}}}*/
+ 
+-
+ /*Load virtual functions definitions:*/
+ /*FUNCTION Riftfront::Configure {{{*/
+ void  Riftfront::Configure(Elements* elementsin,Loads* loadsin,Nodes* nodesin,Vertices* verticesin,Materials* materialsin,Parameters* parametersin){
+@@ -595,13 +593,12 @@
+ 
+ 		if(this->state==OpenEnum)this->active=0;
+ 		if(this->state==ClosedEnum)this->active=1;
+-		
++
+ 		/*this segment is like frozen, no instability here: */
+ 		*punstable=0;
+ 		return 1;
+ 	}
+ 
+-
+ 	/*recover parameters: */
+ 	this->inputs->GetInputValue(&fractionincrement,FractionIncrementEnum);
+ 
+@@ -722,7 +719,7 @@
+ 
+ 	/*If we are zigzag locked, same thing: */
+ 	if(this->counter>this->penalty_lock)penetration=-1;
+-	
++
+ 	/*assign output pointer: */
+ 	*ppenetration=penetration;
+ 	return 1;
+@@ -761,7 +758,7 @@
+ 
+ 	/*Now, we return penetration only if we are active!: */
+ 	if(this->active==0)penetration=0;
+-	
++
+ 	/*assign output pointer: */
+ 	*ppenetration=penetration;
+ 	return 1;
+@@ -770,7 +767,6 @@
+ /*FUNCTION Riftfront::PotentialUnstableConstraint {{{*/
+ int   Riftfront::PotentialUnstableConstraint(int* punstable){
+ 
+-
+ 	const int   numnodes        = 2;
+ 	IssmDouble      max_penetration;
+ 	IssmDouble      penetration;
+Index: ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/IndependentObject.cpp	(revision 13622)
+@@ -76,19 +76,18 @@
+ 	return new IndependentObject(name,type,numberofvertices);
+ } /*}}}*/
+ 
+-
+ /*IndependentObject methods: */
+ /*FUNCTION IndependentObject::FetchIndependent{{{*/
+ void IndependentObject::FetchIndependent(IoModel* iomodel){
+ 
+ 	int my_rank;
+ 	FILE* fid=NULL;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+ 	#ifdef _HAVE_ADOLC_ //cannot come here unless you are running AD mode, from DeclaredIndependents:
+-	
++
+ 	/*Branch according to the type of variable: */
+ 	if(type==0){ /*scalar: {{{*/
+ 
+@@ -110,36 +109,34 @@
+ 
+ 		/*Now, before we even broadcast this to other nodes, declare the scalar  as an independent variable!: */
+ 		scalar<<=pscalar;
+-		
++
+ 		#ifdef _HAVE_MPI_
+ 		MPI_Bcast(&scalar,1,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 		#endif
+ 
+-
+ 		/*Ok, we are almost done. scalar is now an independent variable. We don't want this variable to be fetched again in the 
+ 		 *future, which would effectively write over the independency in the ADOLC tape! So we are going to keep track of this 
+ 		 independent variable inthe iomodel->data[name] data slot. Because this data slot holds double*, we allocate a sizeof(double)
+ 		 space for it: */
+ 		scalar_slot=xNew<IssmDouble>(1); *scalar_slot=scalar;
+-		
++
+ 		iomodel->data[name]=scalar_slot;
+ 		iomodel->independents[name]=true;
+ 
+-
+ 	} /*}}}*/
+ 	else if(type==1){ /* vector: {{{*/
+-		
++
+ 		FILE* fid=NULL;
+ 		int M,N;
+ 		IssmPDouble* buffer=NULL; //a buffer to read the data from disk
+ 		IssmDouble* matrix=NULL; //our independent variable
+ 		int code=0;
+ 		int vector_type=0;
+-		
++
+ 		/*Set file pointer to beginning of the data: */
+ 		fid=iomodel->SetFilePointerToData(&code,&vector_type,name);
+ 		if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(name));
+-		
++
+ 		/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+ 		/*numberofelements: */
+ 		if(my_rank==0){  
+@@ -164,14 +161,14 @@
+ 			/*Read matrix on node 0, then broadcast: */
+ 			if(my_rank==0){  
+ 				if(fread(buffer,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+-				
++
+ 				/*Now, before we even broadcast this to other nodes, declare the whole matrix as a independent variable!: */
+ 				for (int i=0;i<M*N;++i) matrix[i]<<=buffer[i];  /*we use the <<= ADOLC overloaded operator to declare the independency*/
+ 			}
+ 			#ifdef _HAVE_MPI_
+ 			MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 			#endif
+-			
++
+ 			xDelete<IssmPDouble>(buffer);
+ 		}
+ 		else _error_("cannot declare the independent variable " << EnumToStringx(name) <<  "if it's empty!");
+@@ -204,7 +201,7 @@
+ void IndependentObject::FillIndependents(IssmDouble** data, IssmDouble* xp){
+ 
+ 	int i;
+-	
++
+ 	/*Branch according to the type of variable: */
+ 	if(type==0){ /*scalar:*/
+ 		xp[0]=*(data[name]);
+Index: ../trunk-jpl/src/c/classes/objects/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13622)
+@@ -166,7 +166,6 @@
+ 	_printLine_("   hvertex:     not displayed");
+ 	_printLine_("   inputs:      " << inputs);
+ 
+-
+ }
+ /*}}}*/
+ /*FUNCTION Node::DeepEcho{{{*/
+@@ -181,7 +180,6 @@
+ 	hvertex->DeepEcho();
+ 	_printLine_("   inputs");
+ 
+-
+ }
+ /*}}}*/
+ /*FUNCTION Node::Id{{{*/
+@@ -231,7 +229,7 @@
+ 	int i;
+ 	int count=0;
+ 	int count2=0;
+-		
++
+ 	if(approximation_enum==NoneApproximationEnum){
+ 		if(setenum==GsetEnum)for(i=0;i<this->indexing.gsize;i++) outdoflist[i]=indexing.gdoflist[i];
+ 		if(setenum==FsetEnum)for(i=0;i<this->indexing.fsize;i++) outdoflist[i]=indexing.fdoflist[i];
+@@ -293,7 +291,7 @@
+ 	int i;
+ 	int count=0;
+ 	int count2=0;
+-		
++
+ 	if(approximation_enum==NoneApproximationEnum){
+ 		if(setenum==GsetEnum)for(i=0;i<this->indexing.gsize;i++) outdoflist[i]=i;
+ 		else if(setenum==FsetEnum){
+@@ -467,7 +465,7 @@
+ 
+ 		/*g set: */
+ 		pv_g->SetValue(indexing.gdoflist[i],gvalue,INS_VAL);
+-		
++
+ 		/*f set: */
+ 		value=(IssmDouble)this->indexing.f_set[i];
+ 		pv_f->SetValue(indexing.gdoflist[i],value,INS_VAL);
+@@ -478,7 +476,6 @@
+ 
+ 	}
+ 
+-
+ }
+ /*}}}*/
+ /*FUNCTION Node::CreateNodalConstraints{{{*/
+@@ -499,7 +496,7 @@
+ 				count++;
+ 			}
+ 		}
+-		
++
+ 		/*Add values into constraint vector: */
+ 		ys->SetValues(this->indexing.ssize,this->indexing.sdoflist,values,INS_VAL);
+ 	}
+@@ -507,7 +504,6 @@
+ 	/*Free ressources:*/
+ 	xDelete<IssmDouble>(values);
+ 
+-
+ }
+ /*}}}*/
+ /*FUNCTION Node::DofInSSet {{{*/
+@@ -532,7 +528,7 @@
+ /*}}}*/
+ /*FUNCTION Node::FreezeDof{{{*/
+ void  Node::FreezeDof(int dof){
+-	
++
+ 	DofInSSet(dof-1); //with 0 displacement for this dof.
+ 
+ }
+@@ -561,7 +557,7 @@
+ 
+ 	/*Get number of degrees of freedom in a node, for a certain set (g,f or s-set)
+ 	 *and for a certain approximation type: */
+-	
++
+ 	int i;
+ 	int numdofs=0;
+ 
+@@ -638,7 +634,7 @@
+ /*}}}*/
+ /*FUNCTION Node::IsClone {{{*/
+ int   Node::IsClone(){
+-	
++
+ 	return indexing.clone;
+ 
+ }
+@@ -667,7 +663,7 @@
+ /*}}}*/
+ /*FUNCTION Node::IsFloating {{{*/
+ int   Node::IsFloating(){
+-	
++
+ 	bool onshelf;
+ 
+ 	/*recover parameters: */
+@@ -871,7 +867,7 @@
+ 	/*Initialize: */
+ 	if(setenum==FsetEnum) this->indexing.InitSet(setenum);
+ 	if(setenum==SsetEnum) this->indexing.InitSet(setenum);
+-	
++
+ 	/*For clone nodfs, don't distribute dofs, we will get them from another cpu in UpdateCloneDofs!*/
+ 	if(indexing.clone){
+ 		return;
+@@ -904,9 +900,9 @@
+ /*}}}*/
+ /*FUNCTION Node::OffsetDofs{{{*/
+ void  Node::OffsetDofs(int dofcount,int setenum){
+-	
++
+ 	int i;
+-	
++
+ 	if(indexing.clone){
+ 		/*This node is a clone, don't off_set the dofs!: */
+ 		return;
+@@ -979,7 +975,7 @@
+ void  Node::SetClone(int* minranks){
+ 
+ 	int my_rank;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.cpp	(revision 13622)
+@@ -40,7 +40,7 @@
+ 	return;
+ }
+ /*}}}*/
+-		
++
+ /*Object virtual functions definitions:*/
+ /*FUNCTION SpcDynamic::Echo {{{*/
+ void SpcDynamic::Echo(void){
+@@ -110,7 +110,7 @@
+ /*}}}*/
+ /*FUNCTION SpcDynamic::GetNodeId {{{*/
+ int   SpcDynamic::GetNodeId(){
+-	
++
+ 	return nodeid;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.cpp	(revision 13622)
+@@ -39,7 +39,7 @@
+ 	return;
+ }
+ /*}}}*/
+-		
++
+ /*Object virtual functions definitions:*/
+ /*FUNCTION SpcStatic::Echo {{{*/
+ void SpcStatic::Echo(void){
+@@ -111,7 +111,7 @@
+ /*}}}*/
+ /*FUNCTION SpcStatic::GetNodeId {{{*/
+ int   SpcStatic::GetNodeId(){
+-	
++
+ 	return nodeid;
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.cpp	(revision 13622)
+@@ -53,7 +53,7 @@
+ 	return;
+ }
+ /*}}}*/
+-		
++
+ /*Object virtual functions definitions:*/
+ /*FUNCTION SpcTransient::Echo {{{*/
+ void SpcTransient::Echo(void){
+@@ -96,7 +96,7 @@
+ /*Constraint virtual functions definitions:*/
+ /*FUNCTION SpcTransient::InAnalysis{{{*/
+ bool SpcTransient::InAnalysis(int in_analysis_type){
+-	
++
+ 	if (in_analysis_type==this->analysis_type) return true;
+ 	else return false;
+ }
+@@ -113,7 +113,7 @@
+ 
+ 	/*Chase through nodes and find the node to which this SpcTransient applys: */
+ 	node=(Node*)nodes->GetObjectById(NULL,nodeid);
+-	
++
+ 	if(node){ //in case the spc is dealing with a node on another cpu
+ 
+ 		/*Retrieve time in parameters: */
+@@ -158,7 +158,7 @@
+ /*}}}*/
+ /*FUNCTION SpcTransient::GetNodeId {{{*/
+ int   SpcTransient::GetNodeId(){
+-	
++
+ 	return nodeid;
+ }
+ /*}}}*/
+@@ -167,4 +167,3 @@
+ 	return values[0];
+ }
+ /*}}}*/
+-
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.cpp	(revision 13622)
+@@ -69,7 +69,7 @@
+ /*}}}*/
+ /*FUNCTION PentaP1ElementResult::copy{{{*/
+ Object* PentaP1ElementResult::copy() {
+-	
++
+ 	return new PentaP1ElementResult(this->enum_type,this->values,this->step,this->time);
+ 
+ }
+@@ -110,7 +110,7 @@
+ /*}}}*/
+ /*FUNCTION PentaP1ElementResult::ProcessUnits{{{*/
+ void PentaP1ElementResult::ProcessUnits(Parameters* parameters){
+-	
++
+ 	UnitConversion(this->values,6,IuToExtEnum,this->enum_type);
+ 
+ }
+@@ -122,7 +122,7 @@
+ /*}}}*/
+ /*FUNCTION PentaP1ElementResult::PatchFill{{{*/
+ void PentaP1ElementResult::PatchFill(int row, Patch* patch){
+-	
++
+ 	 /*Here, we fill the result information into the patch object. First, let's remember what is in a row 
+ 	  * of the patch object: enum_type step time element_id interpolation vertices_ids nodal_values
+ 	  * Here, we will supply the enum_type, step, time, interpolation and nodal_values: */
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.cpp	(revision 13622)
+@@ -99,7 +99,7 @@
+ /*}}}*/
+ /*FUNCTION DoubleElementResult::ProcessUnits{{{*/
+ void DoubleElementResult::ProcessUnits(Parameters* parameters){
+-	
++
+ 	this->value=UnitConversion(this->value,IuToExtEnum,this->enum_type);
+ 
+ }
+@@ -111,7 +111,7 @@
+ /*}}}*/
+ /*FUNCTION DoubleElementResult::PatchFill{{{*/
+ void DoubleElementResult::PatchFill(int row, Patch* patch){
+-	
++
+ 	 /*Here, we fill the result information into the patch object. First, let's remember what is in a row 
+ 	  * of the patch object: enum_type step time element_id interpolation vertices_ids nodal_values
+ 	  * Here, we will supply the enum_type, step, time, interpolation and nodal_values: */
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.cpp	(revision 13622)
+@@ -109,7 +109,7 @@
+ /*}}}*/
+ /*FUNCTION BoolElementResult::PatchFill{{{*/
+ void BoolElementResult::PatchFill(int row, Patch* patch){
+-	
++
+ 	 /*Here, we fill the result information into the patch object. First, let's remember what is in a row 
+ 	  * of the patch object: enum_type step time element_id interpolation vertices_ids nodal_values
+ 	  * Here, we will supply the enum_type, step, time, interpolation and nodal_values: */
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.cpp	(revision 13622)
+@@ -48,7 +48,7 @@
+ /*}}}*/
+ /*FUNCTION TriaP1ElementResult::DeepEcho{{{*/
+ void TriaP1ElementResult::DeepEcho(void){
+-		
++
+ 	_printLine_("TriaP1ElementResult:");
+ 	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+ 	_printLine_("   values: [" << this->values[0] << " " << this->values[1] << " " << this->values[2] << "]");
+@@ -68,7 +68,7 @@
+ /*}}}*/
+ /*FUNCTION TriaP1ElementResult::copy{{{*/
+ Object* TriaP1ElementResult::copy() {
+-	
++
+ 	return new TriaP1ElementResult(this->enum_type,this->values,this->step,this->time);
+ 
+ }
+@@ -98,7 +98,7 @@
+ /*}}}*/
+ /*FUNCTION TriaP1ElementResult::ProcessUnits{{{*/
+ void TriaP1ElementResult::ProcessUnits(Parameters* parameters){
+-	
++
+ 	UnitConversion(this->values,3,IuToExtEnum,this->enum_type);
+ 
+ }
+@@ -110,7 +110,7 @@
+ /*}}}*/
+ /*FUNCTION TriaP1ElementResult::PatchFill{{{*/
+ void TriaP1ElementResult::PatchFill(int row, Patch* patch){
+-	
++
+ 	 /*Here, we fill the result information into the patch object. First, let's remember what is in a row 
+ 	  * of the patch object: enum_type step time element_id interpolation vertices_ids nodal_values
+ 	  * Here, we will supply the enum_type, step, time, interpolation and nodal_values: */
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13622)
+@@ -41,7 +41,7 @@
+ Tria::Tria(int tria_id, int tria_sid, int index, IoModel* iomodel,int nummodels)
+ 	:TriaRef(nummodels)
+ 	,TriaHook(nummodels,index+1,iomodel){
+-		
++
+ 		int i;
+ 		/*id: */
+ 		this->id=tria_id;
+@@ -174,7 +174,7 @@
+ 	/*Checks in debugging mode{{{*/
+ 	_assert_(this->nodes && this->material && this->matpar && this->parameters && this->inputs);
+ 	/*}}}*/
+-	
++
+ 	/*Skip if water element*/
+ 	if(IsOnWater()) return;
+ 
+@@ -498,7 +498,7 @@
+ 	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+-		
++
+ 		GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss);
+ 		D=gauss->weight*Jdet;
+ 
+@@ -527,7 +527,7 @@
+ 	/*if debugging mode, check that all pointers exist*/
+ 	_assert_(this->nodes && this->material && this->matpar && this->parameters && this->inputs);
+ 	/*}}}*/
+-	
++
+ 	/*Skip if water element*/
+ 	if(IsOnWater()) return;
+ 
+@@ -690,7 +690,7 @@
+ 
+ 	/*Constants*/
+ 	const int    numdof=NDOF1*NUMVERTICES;
+-	
++
+ 	/*Intermediaries */
+ 	int        i,j,ig;
+ 	int        analysis_type;
+@@ -713,7 +713,7 @@
+ 	if ( (analysis_type==BedSlopeXAnalysisEnum) || (analysis_type==BedSlopeYAnalysisEnum)){
+ 		slope_input=inputs->GetInput(BedEnum);     _assert_(slope_input);
+ 	}
+-		
++
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+ 	for(ig=gauss->begin();ig<gauss->end();ig++){
+@@ -819,7 +819,7 @@
+ 		sigma_yy[iv]=2*viscosity*epsilon[1]-pressure;
+ 		sigma_xy[iv]=2*viscosity*epsilon[2];
+ 	}
+-	
++
+ 	/*Add Stress tensor components into inputs*/
+ 	this->inputs->AddInput(new TriaP1Input(StressTensorxxEnum,&sigma_xx[0]));
+ 	this->inputs->AddInput(new TriaP1Input(StressTensorxyEnum,&sigma_xy[0]));
+@@ -834,7 +834,7 @@
+ /*}}}*/
+ /*FUNCTION Tria::Configure {{{*/
+ void  Tria::Configure(Elements* elementsin, Loads* loadsin, DataSet* nodesin, Materials* materialsin, Parameters* parametersin){
+-	
++
+ 	/*go into parameters and get the analysis_counter: */
+ 	int analysis_counter;
+ 	parametersin->FindParam(&analysis_counter,AnalysisCounterEnum);
+@@ -893,7 +893,7 @@
+ 
+ 	_printLine_("neighboor sids: ");
+ 	_printLine_(" " << horizontalneighborsids[0] << " " << horizontalneighborsids[1] << " " << horizontalneighborsids[2]);
+-	
++
+ 	return;
+ }
+ /*}}}*/
+@@ -945,7 +945,7 @@
+ 	this->parameters->FindParam(&Delta18oSurfacePresent,SurfaceforcingsDelta18oSurfaceEnum,finaltime);
+ 	this->parameters->FindParam(&Delta18oSurfaceLgm,SurfaceforcingsDelta18oSurfaceEnum,(finaltime-(21000*yts)));
+ 	this->parameters->FindParam(&Delta18oSurfaceTime,SurfaceforcingsDelta18oSurfaceEnum,time);
+-	
++
+ 	/*Compute the temperature and precipitation*/
+ 	for(int iv=0;iv<NUMVERTICES;iv++){
+ 		ComputeDelta18oTemperaturePrecipitation(Delta18oSurfacePresent, Delta18oSurfaceLgm, Delta18oSurfaceTime, 
+@@ -1026,7 +1026,7 @@
+ 	x1=xyz_list[0][0]; y1=xyz_list[0][1];
+ 	x2=xyz_list[1][0]; y2=xyz_list[1][1];
+ 	x3=xyz_list[2][0]; y3=xyz_list[2][1];
+- 
++
+ 	_assert_(x2*y3 - y2*x3 + x1*y2 - y1*x2 + x3*y1 - y3*x1>0);
+ 	return (x2*y3 - y2*x3 + x1*y2 - y1*x2 + x3*y1 - y3*x1)/2;
+ }
+@@ -1283,14 +1283,14 @@
+ /*}}}*/
+ /*FUNCTION Tria::Id {{{*/
+ int    Tria::Id(){
+-	
++
+ 	return id;
+ 
+ }
+ /*}}}*/
+ /*FUNCTION Tria::Sid {{{*/
+ int    Tria::Sid(){
+-	
++
+ 	return sid;
+ 
+ }
+@@ -1403,7 +1403,7 @@
+ 	/*If we don't find it, no big deal, just don't do the transfer. Otherwise, build a new Result 
+ 	 * object out of the input, with the additional step and time information: */
+ 	this->results->AddObject((Object*)input->SpawnResult(step,time));
+-	
++
+ 	#ifdef _HAVE_CONTROL_
+ 	if(input->ObjectEnum()==ControlInputEnum){
+ 		if(((ControlInput*)input)->gradient!=NULL) this->results->AddObject((Object*)((ControlInput*)input)->SpawnGradient(step,time));
+@@ -1451,7 +1451,7 @@
+ 	int        num_control_type;
+ 	IssmDouble yts;
+ 	int        num_cm_responses;
+-   
++
+ 	/*Get parameters: */
+ 	iomodel->Constant(&yts,ConstantsYtsEnum); 
+ 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
+@@ -1718,7 +1718,7 @@
+ 
+ 	/*Check that name is an element input*/
+ 	if (!IsInput(name)) return;
+-	
++
+ 	if ((code==5) || (code==1)){ //boolean
+ 		this->inputs->AddInput(new BoolInput(name,reCast<bool>(scalar)));
+ 	}
+@@ -1746,7 +1746,6 @@
+ 	int    numberofelements;
+ 	IssmDouble yts;
+ 
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+@@ -1860,7 +1859,7 @@
+ /*}}}*/
+ /*FUNCTION Tria::IsOnBed {{{*/
+ bool Tria::IsOnBed(){
+-	
++
+ 	bool onbed;
+ 	inputs->GetInputValue(&onbed,MeshElementonbedEnum);
+ 	return onbed;
+@@ -1983,7 +1982,7 @@
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice=matpar->GetRhoIce();
+ 	density=rho_ice/rho_water;
+-	
++
+ 	/*go through vertices, and update inputs, considering them to be TriaVertex type: */
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		/*Ice shelf: if bed below bathymetry, impose it at the bathymetry and update surface, elso do nothing */
+@@ -2024,7 +2023,7 @@
+ 			break;
+ 		}
+ 	}
+-	
++
+    /*Add basal melting rate if element just ungrounded*/
+ 	if(!this->IsFloating() && elementonshelf==true){
+ 		for(i=0;i<NUMVERTICES;i++)melting[i]=gl_melting_rate/yts;
+@@ -2080,7 +2079,7 @@
+ 
+ 	/*recover pointer: */
+ 	row=*prow;
+-		
++
+ 	for(i=0;i<3;i++) vertices_ids[i]=nodes[i]->GetVertexId(); //vertices id start at column 3 of the patch.
+ 
+ 	for(i=0;i<this->results->Size();i++){
+@@ -2282,7 +2281,7 @@
+ 	GetInputListOnVertices(&b_pos[0],SurfaceforcingsBPosEnum);
+ 	GetInputListOnVertices(&a_neg[0],SurfaceforcingsANegEnum);
+ 	GetInputListOnVertices(&b_neg[0],SurfaceforcingsBNegEnum);
+-	
++
+    /*Recover surface elevatio at vertices: */
+ 	GetInputListOnVertices(&h[0],ThicknessEnum);
+ 	GetInputListOnVertices(&s[0],SurfaceEnum);
+@@ -2290,7 +2289,7 @@
+    /*Get material parameters :*/
+    rho_ice=matpar->GetRhoIce();
+    rho_water=matpar->GetRhoFreshwater();
+-			
++
+    // loop over all vertices
+    for(i=0;i<NUMVERTICES;i++){
+      if(s[i]>Hc[i]){
+@@ -2318,7 +2317,7 @@
+ /*}}}*/
+ /*FUNCTION Tria::SetCurrentConfiguration {{{*/
+ void  Tria::SetCurrentConfiguration(Elements* elementsin, Loads* loadsin, DataSet* nodesin, Materials* materialsin, Parameters* parametersin){
+-	
++
+ 	/*go into parameters and get the analysis_counter: */
+ 	int analysis_counter;
+ 	parametersin->FindParam(&analysis_counter,AnalysisCounterEnum);
+@@ -2539,7 +2538,7 @@
+ 	for(i=0;i<3;i++){
+ 		if (reCast<bool>(vertices_potentially_ungrounding[nodes[i]->Sid()])){
+ 			vec_nodes_on_iceshelf->SetValue(nodes[i]->Sid(),1,INS_VAL);
+-		
++
+ 			/*If node was not on ice shelf, we flipped*/
+ 			if(nodes_on_iceshelf[nodes[i]->Sid()]==0){
+ 				nflipped++;
+@@ -2848,10 +2847,10 @@
+ 	Input* smb_input = inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(smb_input);
+ 	smb_input->GetInputAverage(&smb);																								// average smb on element in m ice s-1
+    Total_Smb=rho_ice*base*smb;																											// smb on element in kg s-1
+-	
++
+ 	/*Process units: */
+ 	Total_Smb=UnitConversion(Total_Smb,IuToExtEnum,TotalSmbEnum);																// smb on element in GigaTon yr-1
+-	
++
+ 	/*Return: */
+ 	return Total_Smb;
+ }
+@@ -2866,7 +2865,7 @@
+ 	ElementMatrix* Ke1=CreateKMatrixDiagnosticMacAyealViscous();
+ 	ElementMatrix* Ke2=CreateKMatrixDiagnosticMacAyealFriction();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+-	
++
+ 	/*clean-up and return*/
+ 	delete Ke1;
+ 	delete Ke2;
+@@ -2990,7 +2989,7 @@
+ 		GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss);
+ 		DL_scalar=alpha2*gauss->weight*Jdet;
+ 		for (i=0;i<2;i++) DL[i][i]=DL_scalar;
+-		
++
+ 		TripleMultiply( &L[0][0],2,numdof,1,
+ 					&DL[0][0],2,2,0,
+ 					&L[0][0],2,numdof,0,
+@@ -3277,7 +3276,7 @@
+ /*}}}*/
+ /*FUNCTION Tria::InputUpdateFromSolutionDiagnosticHoriz {{{*/
+ void  Tria::InputUpdateFromSolutionDiagnosticHoriz(IssmDouble* solution){
+-	
++
+ 	const int numdof=NDOF2*NUMVERTICES;
+ 
+ 	int       i;
+@@ -3290,7 +3289,7 @@
+ 	IssmDouble    vel[NUMVERTICES];
+ 	IssmDouble    pressure[NUMVERTICES];
+ 	IssmDouble    thickness[NUMVERTICES];
+-	
++
+ 	/*Get dof list: */
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+ 
+@@ -3340,9 +3339,9 @@
+ /*}}}*/
+ /*FUNCTION Tria::InputUpdateFromSolutionDiagnosticHutter {{{*/
+ void  Tria::InputUpdateFromSolutionDiagnosticHutter(IssmDouble* solution){
+-	
++
+ 	const int numdof=NDOF2*NUMVERTICES;
+-	
++
+ 	int       i;
+ 	int*      doflist=NULL;
+ 	IssmDouble    rho_ice,g;
+@@ -3353,7 +3352,7 @@
+ 	IssmDouble    vel[NUMVERTICES];
+ 	IssmDouble    pressure[NUMVERTICES];
+ 	IssmDouble    thickness[NUMVERTICES];
+-	
++
+ 	/*Get dof list: */
+ 	GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
+ 
+@@ -3799,7 +3798,7 @@
+ 
+ 		/*Build alpha_complement_list: */
+ 		friction->GetAlphaComplement(&alpha_complement, gauss,VxEnum,VyEnum,VzEnum);
+-	
++
+ 		dragcoefficient_input->GetInputValue(&drag, gauss);
+ 		adjointx_input->GetInputValue(&lambda, gauss);
+ 		adjointy_input->GetInputValue(&mu, gauss);
+@@ -3811,7 +3810,7 @@
+ 		for (i=0;i<NUMVERTICES;i++){
+ 			grade_g_gaussian[i]=-2*drag*alpha_complement*((lambda*vx+mu*vy))*Jdet*gauss->weight*basis[i];
+ 		}
+-		
++
+ 		/*Add gradje_g_gaussian vector to gradje_g: */
+ 		for(i=0;i<NUMVERTICES;i++){
+ 			_assert_(!xIsNan<IssmDouble>(grade_g[i]));
+@@ -3929,7 +3928,7 @@
+ 
+ 		GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss);
+ 		GetNodalFunctions(basis, gauss);
+-		
++
+ 		adjoint_input->GetInputDerivativeValue(&Dlambda[0],&xyz_list[0][0],gauss);
+ 		thickness_input->GetInputValue(&thickness, gauss);
+ 		thickness_input->GetInputDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
+@@ -4196,7 +4195,7 @@
+ 	Input* vy_input     =inputs->GetInput(VyEnum);        _assert_(vy_input);
+ 	Input* vxobs_input  =inputs->GetInput(InversionVxObsEnum);     _assert_(vxobs_input);
+ 	Input* vyobs_input  =inputs->GetInput(InversionVyObsEnum);     _assert_(vyobs_input);
+-	
++
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(4);
+ 	for (ig=gauss->begin();ig<gauss->end();ig++){
+@@ -5302,7 +5301,7 @@
+ 
+ 	/* compute VelocityFactor */
+ 	VelocityFactor= n_man*CR*CR*rho_water*g/mu_water;
+-	
++
+ 	gauss=new GaussTria();
+ 	for (int iv=0;iv<NUMVERTICES;iv++){
+ 		gauss->GaussVertex(iv);
+@@ -5475,7 +5474,7 @@
+ 		if(reCast<int,IssmDouble>(dt))for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(old_watercolumn_g+dt*basal_melting_g)*basis[i];
+ 		else  for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*basal_melting_g*basis[i];
+ 	}
+-		
++
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	return pe;
+@@ -5547,7 +5546,7 @@
+ #ifdef _HAVE_DAKOTA_
+ /*FUNCTION Tria::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type);{{{*/
+ void  Tria::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){
+-	
++
+ 	int i,j;
+ 
+ 	/*Check that name is an element input*/
+@@ -5573,7 +5572,7 @@
+ 					IssmDouble  hydrostatic_ratio[3];
+ 					IssmDouble  surface[3];
+ 					IssmDouble  bed[3];
+-					
++
+ 					/*retrieve inputs: */
+ 					GetInputListOnVertices(&thickness_init[0],ThicknessEnum);
+ 					GetInputListOnVertices(&hydrostatic_ratio[0],GeometryHydrostaticRatioEnum);
+@@ -5646,7 +5645,7 @@
+ /*}}}*/
+ /*FUNCTION Tria::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type);{{{*/
+ void  Tria::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type){
+-	
++
+ 	int i,j,t;
+ 	TransientInput* transientinput=NULL;
+ 	IssmDouble values[3];
+@@ -5660,9 +5659,9 @@
+ 	switch(type){
+ 
+ 		case VertexEnum:
+-			
++
+ 			/*Create transient input: */
+-						
++
+ 			parameters->FindParam(&yts,ConstantsYtsEnum);
+ 			for(t=0;t<ncols;t++){ //ncols is the number of times
+ 
+@@ -5888,7 +5887,7 @@
+ 
+ 	/*Constants*/
+ 	const int    numdof=NDOF1*NUMVERTICES;
+-	
++
+ 	/*Intermediaries */
+ 	int        i,j,ig;
+ 	IssmDouble     xyz_list[NUMVERTICES][3];
+@@ -5904,7 +5903,7 @@
+ 	Input* surface_mass_balance_input=inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(surface_mass_balance_input);
+ 	Input* basal_melting_input=inputs->GetInput(BasalforcingsMeltingRateEnum);          _assert_(basal_melting_input);
+ 	Input* dhdt_input=inputs->GetInput(BalancethicknessThickeningRateEnum);             _assert_(dhdt_input);
+-	
++
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+ 	for(ig=gauss->begin();ig<gauss->end();ig++){
+Index: ../trunk-jpl/src/c/classes/objects/Elements/TriaHook.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/TriaHook.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Elements/TriaHook.cpp	(revision 13622)
+@@ -49,7 +49,7 @@
+ 
+ 	/*retrieve parameters: */
+ 	iomodel->Constant(&matpar_id,MeshNumberofelementsEnum); matpar_id++;
+-	
++
+ 	this->numanalyses=in_numanalyses;
+ 	this->hnodes= new Hook*[in_numanalyses];
+ 	this->hmaterial=new Hook(&material_id,1);
+Index: ../trunk-jpl/src/c/classes/objects/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/PentaRef.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Elements/PentaRef.cpp	(revision 13622)
+@@ -698,7 +698,6 @@
+ 
+ 	IssmDouble l1l2l3[NUMNODESP1_2d];
+ 
+-
+ 	/*Get l1l2l3 in actual coordinate system: */
+ 	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+ 	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+@@ -811,7 +810,6 @@
+ 
+ 	IssmDouble l1l2l3[NUMNODESP1_2d];
+ 
+-
+ 	/*Get l1l2l3 in actual coordinate system: */
+ 	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+ 	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13622)
+@@ -81,7 +81,7 @@
+ 	/*intialize inputs and results: */
+ 	this->inputs=new Inputs();
+ 	this->results=new Results();
+-	
++
+ 	/*initialize pointers:*/
+ 	this->nodes=NULL;
+ 	this->material=NULL;
+@@ -185,7 +185,6 @@
+ 	Friction*  friction=NULL;
+ 	GaussPenta* gauss=NULL;
+ 
+-
+ 	/* Basal friction can only be found at the base of an ice sheet: */
+ 	if (!IsOnBed() || IsFloating()){
+ 		//empty friction: 
+@@ -198,7 +197,6 @@
+ 	Input* vy_input=inputs->GetInput(VyEnum);                         _assert_(vy_input);
+ 	Input* vz_input=inputs->GetInput(VzEnum);                         _assert_(vz_input);
+ 
+-
+ 	/*Build friction element, needed later: */
+ 	friction=new Friction("3d",inputs,matpar,DiagnosticHorizAnalysisEnum);
+ 
+@@ -215,7 +213,7 @@
+ 		basalfriction[count]=alpha2*(pow(vx,2.0)+pow(vy,2.0));
+ 		count++;
+ 	}
+-	
++
+ 	/*Create PentaVertex input, which will hold the basal friction:*/
+ 	this->inputs->AddInput(new PentaP1Input(BasalFrictionEnum,&basalfriction[0]));
+ 
+@@ -256,7 +254,7 @@
+ 
+ 	/*retrieve some parameters: */
+ 	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+-	
++
+ 	if(!IsOnBed()){
+ 		//put zero
+ 		sigma_b->SetValue(id-1,0.0,INS_VAL);
+@@ -363,7 +361,7 @@
+ 		sigma_xz[iv]=2*viscosity*epsilon[4];
+ 		sigma_yz[iv]=2*viscosity*epsilon[5];
+ 	}
+-	
++
+ 	/*Add Stress tensor components into inputs*/
+ 	this->inputs->AddInput(new PentaP1Input(StressTensorxxEnum,&sigma_xx[0]));
+ 	this->inputs->AddInput(new PentaP1Input(StressTensorxyEnum,&sigma_xy[0]));
+@@ -380,7 +378,7 @@
+ void  Penta::Configure(Elements* elementsin, Loads* loadsin, DataSet* nodesin, Materials* materialsin, Parameters* parametersin){
+ 
+ 	int analysis_counter;
+-	
++
+ 	/*go into parameters and get the analysis_counter: */
+ 	parametersin->FindParam(&analysis_counter,AnalysisCounterEnum);
+ 
+@@ -420,7 +418,7 @@
+ 	/*Checks in debugging {{{*/
+ 	_assert_(this->nodes && this->material && this->matpar && this->verticalneighbors && this->parameters && this->inputs);
+ 	/*}}}*/
+-	
++
+ 	/*Skip if water element*/
+ 	if(IsOnWater()) return;
+ 
+@@ -651,7 +649,7 @@
+ void Penta::DeepEcho(void){
+ 
+ 	int i;
+-	
++
+ 	_printLine_("Penta:");
+ 	_printLine_("   id: " << id);
+ 	nodes[0]->DeepEcho();
+@@ -1190,7 +1188,7 @@
+ /*}}}*/
+ /*FUNCTION Penta::Sid {{{*/
+ int    Penta::Sid(){
+-	
++
+ 	return sid;
+ 
+ }
+@@ -1250,7 +1248,7 @@
+ 
+ 	/*Check that name is an element input*/
+ 	if (!IsInput(name)) return;
+-	
++
+ 	if ((code==5) || (code==1)){ //boolean
+ 		this->inputs->AddInput(new BoolInput(name,reCast<bool,IssmDouble>(scalar)));
+ 	}
+@@ -1872,7 +1870,7 @@
+ 		/* get upper Penta*/
+ 		penta=penta->GetUpperElement(); _assert_(penta->Id()!=this->id);
+ 	}
+-	
++
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflist);
+ }
+@@ -1896,7 +1894,7 @@
+ 
+ 	/*Add input to the element: */
+ 	this->inputs->AddInput(new PentaP1Input(enum_type,values));
+-	
++
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflist);
+ }
+@@ -1936,7 +1934,7 @@
+ 		/* get upper Penta*/
+ 		penta=penta->GetUpperElement(); _assert_(penta->Id()!=this->id);
+ 	}
+-	
++
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflist);
+ }
+@@ -2169,7 +2167,7 @@
+ 	rho_water=matpar->GetRhoWater();
+ 	rho_ice=matpar->GetRhoIce();
+ 	density=rho_ice/rho_water;
+-	
++
+ 	/*go through vertices, and update inputs, considering them to be PentaVertex type: */
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		/*Ice shelf: if bed below bathymetry, impose it at the bathymetry and update surface, elso do nothing */
+@@ -2210,7 +2208,7 @@
+ 			break;
+ 		}
+ 	}
+-	
++
+    /*Add basal melting rate if element just ungrounded*/
+ 	if(!this->IsFloating() && elementonshelf==true){
+ 		for(i=0;i<NUMVERTICES;i++)melting[i]=gl_melting_rate/yts;
+@@ -2292,7 +2290,7 @@
+ 
+ 	/*recover pointer: */
+ 	count=*pcount;
+-		
++
+ 	/*will be needed later: */
+ 	for(i=0;i<6;i++) vertices_ids[i]=nodes[i]->GetVertexId(); //vertices id start at column 3 of the patch.
+ 
+@@ -2501,7 +2499,7 @@
+ /*}}}*/
+ /*FUNCTION Penta::RequestedOutput{{{*/
+ void Penta::RequestedOutput(int output_enum,int step,IssmDouble time){
+-			
++
+ 	if(IsInput(output_enum)){
+ 		/*just transfer this input to results, and we are done: */
+ 		InputToResult(output_enum,step,time);
+@@ -2676,7 +2674,7 @@
+ 	GetInputListOnVertices(&b_pos[0],SurfaceforcingsBPosEnum);
+ 	GetInputListOnVertices(&a_neg[0],SurfaceforcingsANegEnum);
+ 	GetInputListOnVertices(&b_neg[0],SurfaceforcingsBNegEnum);
+-	
++
+    /*Recover surface elevatio at vertices: */
+ 	GetInputListOnVertices(&h[0],ThicknessEnum);
+ 	GetInputListOnVertices(&s[0],SurfaceEnum);
+@@ -2684,7 +2682,7 @@
+    /*Get material parameters :*/
+    rho_ice=matpar->GetRhoIce();
+    rho_water=matpar->GetRhoFreshwater();
+-			
++
+    // loop over all vertices
+  for(i=0;i<NUMVERTICES;i++){
+      if(s[i]>Hc[i]){
+@@ -2790,7 +2788,7 @@
+ 	maxy=xyz_list[0][1];
+ 	minz=xyz_list[0][2];
+ 	maxz=xyz_list[0][2];
+-	
++
+ 	for(i=1;i<NUMVERTICES;i++){
+ 		if (xyz_list[i][0]<minx)minx=xyz_list[i][0];
+ 		if (xyz_list[i][0]>maxx)maxx=xyz_list[i][0];
+@@ -2972,7 +2970,7 @@
+ 	for(i=0;i<NUMVERTICES;i++){
+ 		if (reCast<bool,IssmDouble>(vertices_potentially_ungrounding[nodes[i]->Sid()])){
+ 			vec_nodes_on_iceshelf->SetValue(nodes[i]->Sid(),1,INS_VAL);
+-		
++
+ 			/*If node was not on ice shelf, we flipped*/
+ 			if(nodes_on_iceshelf[nodes[i]->Sid()]==0){
+ 				nflipped++;
+@@ -3012,13 +3010,12 @@
+ 	gauss=new GaussPenta();
+ 	for (int iv=0;iv<NUMVERTICES;iv++){
+ 		gauss->GaussVertex(iv);
+-		
++
+ 		thickness_input->GetInputValue(&thickness,gauss);
+ 
+ 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
+ 		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+ 		GetPhi(&phi, &epsilon[0], viscosity);
+-		
+ 
+ 		viscousheating[iv]=phi*thickness;
+ 	}
+@@ -3273,7 +3270,7 @@
+ 	rho_ice=matpar->GetRhoIce();
+ 
+ 	if(IsOnWater() || !IsOnSurface()) return 0.;
+-	
++
+ 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
+ 
+ 	/*First calculate the area of the base (cross section triangle)
+@@ -3285,10 +3282,10 @@
+ 	Input* smb_input = inputs->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(smb_input);
+ 	smb_input->GetInputAverage(&smb);
+ 	Total_Smb=rho_ice*base*smb;// smb on element in kg s-1
+-	
++
+ 	/*Process units: */
+ 	Total_Smb=UnitConversion(Total_Smb,IuToExtEnum,TotalSmbEnum);// smb on element in GigaTon yr-1
+-	
++
+ 	/*Return: */
+ 	return Total_Smb;
+ }
+@@ -3298,12 +3295,12 @@
+ #ifdef _HAVE_THERMAL_
+ /*FUNCTION Penta::CreateKMatrixEnthalpy {{{*/
+ ElementMatrix* Penta::CreateKMatrixEnthalpy(void){
+-	
++
+ 	/*compute all stiffness matrices for this element*/
+ 	ElementMatrix* Ke1=CreateKMatrixEnthalpyVolume();
+ 	ElementMatrix* Ke2=CreateKMatrixEnthalpyShelf();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+-	
++
+ 	/*clean-up and return*/
+ 	delete Ke1;
+ 	delete Ke2;
+@@ -3503,10 +3500,10 @@
+ 	for (ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+-		
++
+ 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss);
+ 		GetNodalFunctionsP1(&basis[0], gauss);
+-				
++
+ 		D_scalar=gauss->weight*Jdet2d*rho_water*mixed_layer_capacity*thermal_exchange_velocity/(rho_ice*heatcapacity);
+ 		if(reCast<bool,IssmDouble>(dt)) D_scalar=dt*D_scalar;
+ 
+@@ -3515,7 +3512,7 @@
+ 					&basis[0],1,numdof,0,
+ 					&Ke->values[0],1);
+ 	}
+-	
++
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	return Ke;
+@@ -3535,12 +3532,12 @@
+ /*}}}*/
+ /*FUNCTION Penta::CreateKMatrixThermal {{{*/
+ ElementMatrix* Penta::CreateKMatrixThermal(void){
+-	
++
+ 	/*compute all stiffness matrices for this element*/
+ 	ElementMatrix* Ke1=CreateKMatrixThermalVolume();
+ 	ElementMatrix* Ke2=CreateKMatrixThermalShelf();
+ 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
+-	
++
+ 	/*clean-up and return*/
+ 	delete Ke1;
+ 	delete Ke2;
+@@ -3702,7 +3699,6 @@
+ /*FUNCTION Penta::CreateKMatrixThermalShelf {{{*/
+ ElementMatrix* Penta::CreateKMatrixThermalShelf(void){
+ 
+-
+ 	/*Constants*/
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+@@ -3736,10 +3732,10 @@
+ 	for (ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+-		
++
+ 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0], gauss);
+ 		GetNodalFunctionsP1(&basis[0], gauss);
+-				
++
+ 		D_scalar=gauss->weight*Jdet2d*rho_water*mixed_layer_capacity*thermal_exchange_velocity/(heatcapacity*rho_ice);
+ 		if(reCast<bool,IssmDouble>(dt)) D_scalar=dt*D_scalar;
+ 
+@@ -3748,7 +3744,7 @@
+ 					&basis[0],1,numdof,0,
+ 					&Ke->values[0],1);
+ 	}
+-	
++
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	return Ke;
+@@ -4408,7 +4404,7 @@
+ 	GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
+ 	GetInputListOnVertices(&pressure[0],PressureEnum);
+ 	Input* surface_input=inputs->GetInput(SurfaceEnum); _assert_(surface_input);
+-	
++
+ 	this->inputs->GetInputValue(&converged,ConvergedEnum);
+ 	if(converged){
+ 		/*Convert enthalpy into temperature and water fraction*/
+@@ -4417,7 +4413,7 @@
+ 			if(waterfraction[i]<0) _error_("Negative water fraction found in solution vector");
+ 			//if(waterfraction[i]>1) _error_("Water fraction >1 found in solution vector");
+ 		}
+-			
++
+ 		this->inputs->AddInput(new PentaP1Input(EnthalpyEnum,values));
+ 		this->inputs->AddInput(new PentaP1Input(WaterfractionEnum,waterfraction));
+ 		this->inputs->AddInput(new PentaP1Input(TemperatureEnum,temperatures));
+@@ -4472,7 +4468,7 @@
+ 		if(!IsOnBed()) return;
+ 		input=(Input*)material->inputs->GetInput(MaterialsRheologyZEnum);
+ 	}
+-		
++
+ 	else{
+ 		input=inputs->GetInput(enum_type);
+ 	}
+@@ -5532,7 +5528,6 @@
+ 	}
+ 	new_input = new PentaP1Input(control_enum,values);
+ 
+-
+ 	if(control_enum==MaterialsRheologyBbarEnum){
+ 		input=(Input*)material->inputs->GetInput(control_enum); _assert_(input);
+ 	}
+@@ -5552,7 +5547,7 @@
+ #ifdef _HAVE_DAKOTA_
+ /*FUNCTION Penta::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type);{{{*/
+ void  Penta::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){
+-	
++
+ 	int i,j;
+ 
+ 	/*Check that name is an element input*/
+@@ -5579,7 +5574,7 @@
+ 					IssmDouble  hydrostatic_ratio[6];
+ 					IssmDouble  surface[6];
+ 					IssmDouble  bed[6];
+-					
++
+ 					/*retrieve inputs: */
+ 					GetInputListOnVertices(&thickness_init[0],ThicknessEnum);
+ 					GetInputListOnVertices(&hydrostatic_ratio[0],GeometryHydrostaticRatioEnum);
+@@ -5664,7 +5659,7 @@
+ /*}}}*/
+ /*FUNCTION Penta::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type);{{{*/
+ void  Penta::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type){
+-	
++
+ 	int i,j,t;
+ 	TransientInput* transientinput=NULL;
+ 	IssmDouble values[6];
+@@ -5678,9 +5673,9 @@
+ 	switch(type){
+ 
+ 		case VertexEnum:
+-			
++
+ 			/*Create transient input: */
+-						
++
+ 			parameters->FindParam(&yts,ConstantsYtsEnum);
+ 
+ 			for(t=0;t<ncols;t++){ //ncols is the number of times
+@@ -5751,12 +5746,12 @@
+ /*}}}*/
+ /*FUNCTION Penta::CreateKMatrixCouplingMacAyealPattyn{{{*/
+ ElementMatrix* Penta::CreateKMatrixCouplingMacAyealPattyn(void){
+-	
++
+ 	/*compute all stiffness matrices for this element*/
+ 	ElementMatrix* Ke1=CreateKMatrixCouplingMacAyealPattynViscous();
+ 	ElementMatrix* Ke2=CreateKMatrixCouplingMacAyealPattynFriction();
+ 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
+-	
++
+ 	/*clean-up and return*/
+ 	delete Ke1;
+ 	delete Ke2;
+@@ -5863,7 +5858,7 @@
+ 	const int numnodes    = 2 *NUMVERTICES;
+ 	const int numdof      = NDOF2 *NUMVERTICES;
+ 	const int numdoftotal = NDOF4 *NUMVERTICES;
+-	
++
+ 	/*Intermediaries */
+ 	int       i,j,ig,analysis_type;
+ 	IssmDouble    Jdet2d,slope_magnitude,alpha2;
+@@ -5932,7 +5927,7 @@
+ 
+ 		DL_scalar=alpha2*gauss->weight*Jdet2d;
+ 		for (i=0;i<2;i++) DL[i][i]=DL_scalar; 
+-		
++
+ 		/*  Do the triple producte tL*D*L: */
+ 		TripleMultiply( &L[0][0],2,numdof,1,
+ 					&DL[0][0],2,2,0,
+@@ -6164,7 +6159,7 @@
+ 		DLStokesMacAyeal[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
+ 		DLStokesMacAyeal[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
+ 		DLStokesMacAyeal[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
+-		
++
+ 		TripleMultiply( &LMacAyealStokes[0][0],8,numdof2dm,1,
+ 					&DLMacAyealStokes[0][0],8,8,0,
+ 					&LprimeMacAyealStokes[0][0],8,numdof2d,0,
+@@ -6699,7 +6694,7 @@
+ 
+ 	/*Constants*/
+ 	const int numdof   = NDOF2*NUMVERTICES;
+-	
++
+ 	/*Intermediaries */
+ 	int       i,j,ig;
+ 	int       analysis_type;
+@@ -6750,10 +6745,10 @@
+ 		if (slope_magnitude>MAXSLOPE){
+ 			alpha2=pow((IssmDouble)10,MOUNTAINKEXPONENT);
+ 		}
+-		
++
+ 		DL_scalar=alpha2*gauss->weight*Jdet;
+ 		for (i=0;i<2;i++) DL[i][i]=DL_scalar;
+-		
++
+ 		TripleMultiply( &L[0][0],2,numdof,1,
+ 					&DL[0][0],2,2,0,
+ 					&L[0][0],2,numdof,0,
+@@ -6925,7 +6920,7 @@
+ 
+ 	/*DO NOT Transform Coordinate System: this stiffness matrix is already expressed in tangential coordinates*/
+ 	//TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
+-	
++
+ 	/*Clean up and return*/
+ 	delete gauss;
+ 	delete friction;
+@@ -6934,7 +6929,7 @@
+ /*}}}*/
+ /*FUNCTION Penta::CreateKMatrixDiagnosticVert {{{*/
+ ElementMatrix* Penta::CreateKMatrixDiagnosticVert(void){
+-	
++
+ 	/*compute all stiffness matrices for this element*/
+ 	ElementMatrix* Ke1=CreateKMatrixDiagnosticVertVolume();
+ 	ElementMatrix* Ke2=CreateKMatrixDiagnosticVertSurface();
+@@ -7815,7 +7810,6 @@
+ /*FUNCTION Penta::CreatePVectorDiagnosticVertBase {{{*/
+ ElementVector* Penta::CreatePVectorDiagnosticVertBase(void){
+ 
+-
+ 	/*Constants*/
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+@@ -8414,7 +8408,7 @@
+ 		/* get upper Penta*/
+ 		penta=penta->GetUpperElement(); _assert_(penta->Id()!=this->id);
+ 	}
+-	
++
+ 	/*Free ressources:*/
+ 	xDelete<int>(doflist);
+ }
+@@ -8686,7 +8680,7 @@
+ /*}}}*/
+ /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticPattyn {{{*/
+ void  Penta::InputUpdateFromSolutionDiagnosticPattyn(IssmDouble* solution){
+-	
++
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+ 	int    i;
+@@ -8854,7 +8848,7 @@
+ /*}}}*/
+ /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticHutter {{{*/
+ void  Penta::InputUpdateFromSolutionDiagnosticHutter(IssmDouble* solution){
+-	
++
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+ 	int     i;
+@@ -8919,7 +8913,7 @@
+ void  Penta::InputUpdateFromSolutionDiagnosticVert(IssmDouble* solution){
+ 
+ 	const int numdof=NDOF1*NUMVERTICES;
+-	
++
+ 	int      i;
+ 	int      approximation;
+ 	IssmDouble   rho_ice,g;
+@@ -8936,7 +8930,6 @@
+ 	IssmDouble   xyz_list[NUMVERTICES][3];
+ 	int*     doflist      = NULL;
+ 
+-
+ 	/*Get the approximation and do nothing if the element in Stokes or None*/
+ 	inputs->GetInputValue(&approximation,ApproximationEnum);
+ 	if(approximation==StokesApproximationEnum || approximation==NoneApproximationEnum){
+@@ -9021,7 +9014,7 @@
+ /*}}}*/
+ /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticStokes {{{*/
+ void  Penta::InputUpdateFromSolutionDiagnosticStokes(IssmDouble* solution){
+-	
++
+ 	const int numdof=NDOF4*NUMVERTICES;
+ 
+ 	int     i;
+@@ -9061,7 +9054,7 @@
+ 	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+ 	for(i=0;i<NUMVERTICES;i++) pressure[i]=pressure[i]*stokesreconditioning;
+ 	for(i=0;i<NUMVERTICES;i++) vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
+-	
++
+ 	/*Now, we have to move the previous inputs  to old 
+ 	 * status, otherwise, we'll wipe them off: */
+ 	this->inputs->ChangeEnum(VxEnum,VxPicardEnum);
+@@ -9131,4 +9124,3 @@
+ }
+ /*}}}*/
+ #endif
+-
+Index: ../trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp	(revision 13622)
+@@ -48,7 +48,7 @@
+ 
+ 	/*intermediary: */
+ 	int matpar_id;
+-	
++
+ 	/*retrieve parameters: */
+ 	iomodel->Constant(&matpar_id,MeshNumberofelementsEnum); matpar_id++;
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/TriaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/TriaRef.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/Elements/TriaRef.cpp	(revision 13622)
+@@ -318,7 +318,6 @@
+ 	x3=*(xyz_list+NUMNODES*2+0);
+ 	y3=*(xyz_list+NUMNODES*2+1);
+ 
+-
+ 	*(J+NDOF2*0+0)=0.5*(x2-x1);
+ 	*(J+NDOF2*1+0)=SQRT3/6.0*(2*x3-x1-x2);
+ 	*(J+NDOF2*0+1)=0.5*(y2-y1);
+Index: ../trunk-jpl/src/c/classes/objects/DependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/DependentObject.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/objects/DependentObject.cpp	(revision 13622)
+@@ -41,7 +41,6 @@
+ }
+ /*}}}*/
+ 
+-
+ /*Object virtual functions definitions:*/
+ /*FUNCTION DependentObject::Echo{{{*/
+ void DependentObject::Echo(void){
+@@ -99,7 +98,7 @@
+ 		/*to identify the mass flux that will be computed, we need the index of the profile: */
+ 		parameters->SetParam(this->index,IndexEnum);
+ 	}
+-	
++
+ 	::Responsex(poutput_value,elements,nodes,vertices,loads,materials,parameters,this->name,false,0);
+ 
+ }
+Index: ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp	(revision 13622)
+@@ -14,7 +14,6 @@
+  * the entire computations. 
+  */ 
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -76,7 +75,6 @@
+ 		variable_descriptor=xNew<char>(strlen(label.c_str())+1);
+ 		memcpy(variable_descriptor,label.c_str(),(strlen(label.c_str())+1)*sizeof(char));
+ 
+-		
+ 		variable_descriptors[i]=variable_descriptor;
+ 	}
+ 
+@@ -108,5 +106,4 @@
+ 
+ } // namespace SIM
+ 
+-
+ #endif //only works if dakota library has been compiled in.
+Index: ../trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 13622)
+@@ -229,7 +229,7 @@
+ /*}}}*/
+ /*FUNCTION ElementMatrix::~ElementMatrix(){{{*/
+ ElementMatrix::~ElementMatrix(){
+-	
++
+ 	xDelete<IssmDouble>(this->values);
+ 	xDelete<int>(this->gglobaldoflist);
+ 	xDelete<int>(this->row_flocaldoflist);
+@@ -277,7 +277,6 @@
+ 			xDelete<IssmDouble>(localvalues);
+ 		}
+ 
+-
+ 		if((this->row_ssize!=0) && (this->row_fsize!=0)){
+ 			/*first, retrieve values that are in the f and s-set from the g-set values matrix: */
+ 			localvalues=xNew<IssmDouble>(this->row_fsize*this->row_ssize);
+Index: ../trunk-jpl/src/c/classes/matrix/ElementVector.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/ElementVector.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/matrix/ElementVector.cpp	(revision 13622)
+@@ -138,7 +138,7 @@
+ 
+ 	/*fill values with 0: */
+ 	this->values=xNewZeroInit<IssmDouble>(this->nrows);
+-	
++
+ 	/*g list*/
+ 	this->gglobaldoflist=GetGlobalDofList(nodes,numnodes,GsetEnum,approximation);
+ 
+@@ -150,7 +150,7 @@
+ /*}}}*/
+ /*FUNCTION ElementVector::~ElementVector(){{{*/
+ ElementVector::~ElementVector(){
+-	
++
+ 	xDelete<IssmDouble>(this->values);
+ 	xDelete<int>(this->gglobaldoflist);
+ 	xDelete<int>(this->flocaldoflist);
+@@ -180,7 +180,7 @@
+ 		/*Free ressources:*/
+ 		xDelete<IssmDouble>(localvalues);
+ 	}
+-	
++
+ }
+ /*}}}*/
+ /*FUNCTION ElementVector::InsertIntoGlobal(Vector<IssmDouble>* pf){{{*/
+Index: ../trunk-jpl/src/c/classes/bamg/ListofIntersectionTriangles.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/ListofIntersectionTriangles.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/bamg/ListofIntersectionTriangles.cpp	(revision 13622)
+@@ -319,8 +319,6 @@
+ 				ilast=NewItem(t,ba[0],ba[1],ba[2]); }
+ 		}  //  outside departure
+ 
+-
+-
+ 		// recherche the intersection of [a,b] with Bh Mesh.
+ 		// we know  a triangle ta contening the vertex a
+ 		// we have 2 case for intersection [a,b] with a edge [A,B] of Bh
+@@ -391,7 +389,6 @@
+ 
+ 				Icoor2 detbij = bamg::det((*t)[i],(*t)[j],b);
+ 
+-
+ 				if (detbij >= 0) { //we find the triangle contening b
+ 					dt[0]=bamg::det((*t)[1],(*t)[2],b);
+ 					dt[1]=bamg::det((*t)[2],(*t)[0],b);
+Index: ../trunk-jpl/src/c/classes/bamg/Triangle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Triangle.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/bamg/Triangle.cpp	(revision 13622)
+@@ -424,7 +424,6 @@
+ 									 sinb12 = double(det2),
+ 									 sinba2 = double(t2->det);
+ 
+-
+ 						 // angle b12 > angle ba2 => cotg(angle b12) < cotg(angle ba2)
+ 						 OnSwap =  ((double) cosb12 * (double)  sinba2) <  ((double) cosba2 * (double) sinb12);
+ 						 break;
+Index: ../trunk-jpl/src/c/classes/bamg/VertexOnVertex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/VertexOnVertex.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/bamg/VertexOnVertex.cpp	(revision 13622)
+@@ -16,7 +16,7 @@
+ 	};/*}}}*/
+ 	/*FUNCTION VertexOnVertex::VertexOnVertex(BamgVertex * w,BamgVertex *bw){{{*/
+ 	VertexOnVertex::VertexOnVertex(BamgVertex * w,BamgVertex *bw) :v(w),bv(bw){
+-	
++
+ 	}/*}}}*/
+ 
+ 	/*Methods*/
+Index: ../trunk-jpl/src/c/classes/bamg/Metric.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Metric.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/bamg/Metric.cpp	(revision 13622)
+@@ -15,11 +15,11 @@
+ 	/*Constructor/Destructor*/
+ 	/*FUNCTION Metric::Metric(double a){{{*/
+ 	Metric::Metric(double a): a11(1/(a*a)),a21(0),a22(1/(a*a)){
+-	
++
+ 	}/*}}}*/
+ 	/*FUNCTION Metric::Metric(double a,double b,double c){{{*/
+ 	Metric::Metric(double a,double b,double c) :a11(a),a21(b),a22(c){
+-	
++
+ 	}/*}}}*/
+ 	/*FUNCTION Metric::Metric(const double  a[3],const  Metric& m0, const  Metric& m1,const  Metric&  m2 ){{{*/ 
+ 	Metric::Metric(const double  a[3],const  Metric& m0, const  Metric& m1,const  Metric& m2 ){
+Index: ../trunk-jpl/src/c/classes/bamg/Geometry.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Geometry.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/bamg/Geometry.cpp	(revision 13622)
+@@ -172,7 +172,7 @@
+ 				 vertices[i].m=Metric(Hmin);
+ 			}
+ 			delete [] verticeslength;
+-			
++
+ 		}
+ 		else{
+ 			_error_("No edges provided");
+@@ -904,7 +904,6 @@
+ 			_assert_(tge>=0 && tge<=mxe);
+ 		}
+ 
+-
+ 		if ((*eg0)(direction0)==(GeomVertex*)vg0)
+ 		 vg0=VertexOnGeom(*(BamgVertex*) vg0,*eg0,direction0); //vg0 = absisce
+ 
+Index: ../trunk-jpl/src/c/classes/bamg/AdjacentTriangle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/AdjacentTriangle.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/bamg/AdjacentTriangle.cpp	(revision 13622)
+@@ -8,7 +8,6 @@
+ 
+ namespace bamg {
+ 
+-
+ 	/*Constructors/Destructors*/
+ 	//See header file
+ 
+Index: ../trunk-jpl/src/c/classes/bamg/BamgQuadtree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/BamgQuadtree.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/bamg/BamgQuadtree.cpp	(revision 13622)
+@@ -427,7 +427,6 @@
+ 			hb = hb2; 
+ 		  }
+ 
+-
+ 		if ( n0 > 0) 
+ 		  {  
+ 			for(register int k=0;k<n0;k++)
+Index: ../trunk-jpl/src/c/classes/bamg/EigenMetric.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/EigenMetric.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/bamg/EigenMetric.cpp	(revision 13622)
+@@ -29,7 +29,6 @@
+ 		b=-a11-a22;
+ 		delta=b*b - 4*(a11*a22-a21*a21);
+ 
+-
+ 		/*Compute norm of M to avoid round off errors*/
+ 		normM=a11*a11 + a22*a22 + a21*a21;
+ 
+Index: ../trunk-jpl/src/c/classes/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Mesh.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/bamg/Mesh.cpp	(revision 13622)
+@@ -200,7 +200,6 @@
+ 			  VertexOnBThEdge=0;
+ 			 }
+ 
+-
+ 		  if(nbe)
+ 			edges = new Edge[nbe];
+ 		  if(nbsubdomains)
+@@ -1244,7 +1243,6 @@
+ 		tt[1]->SetSingleVertexToTriangleConnectivity();
+ 		tt[2]->SetSingleVertexToTriangleConnectivity();
+ 
+-
+ 		// swap if the point s is on a edge
+ 		if(izerodet>=0) {
+ 			int rswap=tt[izerodet]->swap(iedge);
+@@ -1573,7 +1571,7 @@
+ 
+ 		//initialize subdomains[isd].head as 0
+ 		for (isd=0;isd<nbsubdomains;isd++) subdomains[isd].head =0;
+-		  
++
+ 		k=0;
+ 		for (it=0;it<nbt;it++){
+ 			for (int j=0;j<3;j++){
+@@ -2539,7 +2537,6 @@
+ 			delete [] HeapArete;
+ 			delete [] HeapTriangle;
+ 
+-
+ 			if (OutSide|| !Gh.subdomains || !Gh.nbsubdomains ) 
+ 			  { // No geom sub domain
+ 				long i;
+@@ -2694,7 +2691,6 @@
+ 					if (verbose>5) _printLine_("WARNING: " << nbsubdomains-inew << " SubDomains are being removed");
+ 					nbsubdomains=inew;}
+ 
+-
+ 					for (it=0;it<nbt;it++)
+ 					 if ( mark[it] ==-1 ) 
+ 					  nbtout++,triangles[it].link =0;
+@@ -3075,7 +3071,6 @@
+ 			if (verbose>5) _printLine_("   do nothing: costheta > 1");
+ 		}
+ 
+-
+ 			long nbqq = (nbt*3)/2;
+ 			DoubleAndInt *qq = new DoubleAndInt[nbqq];
+ 
+@@ -4273,7 +4268,6 @@
+ 			newedges[ie].adj[1]=newedges + ie +1;
+ 			R2 A = edges[i][0],B = edges[i][1];
+ 
+-
+ 			kk += (i == edge4->SortAndAdd(GetId(edges[i][0]),GetId(edges[i][1])));
+ 			if (ong) // a geometrical edges 
+ 			  { 
+@@ -4342,7 +4336,6 @@
+ 
+ 		nbv = k;
+ 
+-
+ 		kedge = new long[3*nbt+1];
+ 		ksplitarray = new long[nbt+1];
+ 		ksplit = ksplitarray +1; // because ksplit[-1] == ksplitarray[0]
+@@ -4411,7 +4404,6 @@
+ 				const AdjacentTriangle ta = t.Adj(j);
+ 				const Triangle & tt = ta;
+ 
+-
+ 				const BamgVertex & v0 = t[VerticesOfTriangularEdge[j][0]];
+ 				const BamgVertex & v1 = t[VerticesOfTriangularEdge[j][1]];
+ 				if ( kedge[3*i+j] < 0) 
+@@ -4647,7 +4639,6 @@
+ 		 for (i=0;i<BTh.nbv;i++)
+ 		  BTh.vertices[i].m =  BTh.vertices[i].m*2.;
+ 
+-
+ 		ret = 2;
+ 		if (nbt>= maxnbt) goto Error; // bug 
+ 		if (nbv>= maxnbv) goto Error; // bug 
+@@ -5000,7 +4991,7 @@
+ 				//Add the vertex
+ 				_assert_(nbv<maxnbv);
+ 				vertices[nbv]=Gh[i];
+-				
++
+ 				//Add pointer from geometry (Gh) to vertex from mesh (Th)
+ 				Gh[i].MeshVertexHook=vertices+nbv;
+ 
+@@ -5195,7 +5186,7 @@
+ 										nbe++;
+ 										va = vb;
+ 									}
+-									
++
+ 									/*We just added one edge to the curve: Go to the next one*/
+ 									lcurve = lcurveb;
+ 									e->SetMark();
+@@ -5370,7 +5361,7 @@
+ 
+ 					/*Get curve number*/
+ 					int nc=ei.GeomEdgeHook->CurveNumber;
+-					
++
+ 					//_printLine_("Dealing with curve number " << nc);
+ 					//_printLine_("edge on geometry is same as GhCurve? " << (ei.GeomEdgeHook==Gh.curves[nc].FirstEdge || ei.GeomEdgeHook==Gh.curves[nc].LastEdge)?"yes":"no");
+ 					//if(ei.GeomEdgeHook==Gh.curves[nc].FirstEdge || ei.GeomEdgeHook==Gh.curves[nc].LastEdge){
+@@ -5418,7 +5409,7 @@
+ 
+ 				/*Get edge of Bth with index iedge*/
+ 				Edge &ei = BTh.edges[iedge];
+-			
++
+ 				/*Initialize variables*/
+ 				double Lstep=0,Lcurve=0;    // step between two points   (phase==1) 
+ 				long NbCreatePointOnCurve=0;// Nb of new points on curve (phase==1) 
+@@ -5536,7 +5527,6 @@
+ 						}// for(;;) end of the curve
+ 					}
+ 
+-
+ 					if (phase){ // construction of the last edge
+ 						Edge* e=edges + nbe++;
+ 						e->GeomEdgeHook  = ongequi;
+@@ -5786,7 +5776,6 @@
+ 		BamgVertex & s1= (*t1)[OppositeVertex[a1]];
+ 		BamgVertex & s2= (*t2)[OppositeVertex[a2]];
+ 
+-
+ 		Icoor2 dets2 = det(*pva,*pvb,s2);
+ 		Icoor2 det1=t1->det , det2=t2->det ;
+ 		Icoor2 detT = det1+det2;
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13622)
+@@ -27,13 +27,13 @@
+ 	this->data=NULL;
+ 	this->independents=NULL;
+ 	this->constants=NULL;
+-	
++
+ 	this->my_elements=NULL;
+ 	this->my_nodes=NULL;
+ 	this->my_vertices=NULL;
+ 	this->singlenodetoelementconnectivity=NULL;
+ 	this->numbernodetoelementconnectivity=NULL;
+-	
++
+ 	this->nodecounter=0;
+ 	this->loadcounter=0;
+ 	this->constraintcounter=0;
+@@ -67,7 +67,7 @@
+ 	this->my_vertices=NULL;
+ 	this->singlenodetoelementconnectivity=NULL;
+ 	this->numbernodetoelementconnectivity=NULL;
+-	
++
+ 	this->nodecounter=0;
+ 	this->loadcounter=0;
+ 	this->constraintcounter=0;
+@@ -204,7 +204,6 @@
+ /*FUNCTION IoModel::DeclareIndependents{{{*/
+ void IoModel::DeclareIndependents(void){
+ 
+-
+ 	int         i;
+ 	bool        autodiff                = false;
+ 	int         num_independent_objects;
+@@ -216,7 +215,6 @@
+ 	int         dummy;
+ 	bool        keep=false;
+ 
+-
+ 	/*Initialize array detecting whether data[i] is an independent AD mode variable: */
+ 	this->independents=xNew<bool>(MaximumNumberOfEnums);
+ 	for(i=0;i<MaximumNumberOfEnums;i++) this->independents[i]=false;
+@@ -225,7 +223,7 @@
+ 	if(autodiff){
+ 
+ 		this->FetchData(&numberofvertices,MeshNumberofverticesEnum);
+-		
++
+ 		#ifdef _HAVE_ADOLC_
+ 
+ 		/*Start trace: {{{*/
+@@ -265,7 +263,6 @@
+ 	}
+ 	else this->independent_objects=NULL;
+ 
+-
+ }
+ /*}}}*/
+ /*FUNCTION IoModel::DeleteData(int num,...){{{*/
+@@ -282,7 +279,7 @@
+ 	for(i = 0; i <num; i++){
+ 		dataenum=va_arg(ap, int);
+ 		_assert_(dataenum<MaximumNumberOfEnums);
+-		
++
+ 		/*do not erase independent variables for the AD mode computations!: */
+ 		if (!this->independents[dataenum]) xDelete<IssmDouble>(this->data[dataenum]);
+ 	}
+@@ -299,7 +296,7 @@
+ void  IoModel::FetchConstants(void){
+ 
+ 	int my_rank;
+-	
++
+ 	/*record descriptions; */
+ 	int record_enum;
+ 	int record_length;
+@@ -322,7 +319,7 @@
+ 
+ 	/*Go find in the binary file, the position of the data we want to fetch: */
+ 	if(my_rank==0){ //cpu 0{{{
+-	
++
+ 		/*First set FILE* position to the beginning of the file: */
+ 		fseek(this->fid,0,SEEK_SET);
+ 
+@@ -338,11 +335,11 @@
+ 				break;
+ 			}
+ 			else{
+-			
++
+ 				/* Read the record length and the data type code: */
+ 				fread(&record_length,sizeof(int),1,this->fid);
+ 				fread(&record_code,sizeof(int),1,this->fid);
+-					
++
+ 				#ifdef _HAVE_MPI_
+ 				/*Tell other cpus what we are doing: */
+ 				MPI_Bcast(&record_code,1,MPI_INT,0,IssmComm::GetComm());  /*tell other cpus what we are going to do: */
+@@ -351,7 +348,7 @@
+ 				MPI_Bcast(&record_enum,1,MPI_INT,0,IssmComm::GetComm());  
+ 				MPI_Bcast(&record_length,1,MPI_INT,0,IssmComm::GetComm());  
+ 				#endif
+-				
++
+ 				switch(record_code){
+ 					case 1: 
+ 						/*Read the boolean and broadcast it to other cpus:*/
+@@ -415,7 +412,7 @@
+ 							string=xNew<char>(1);
+ 							string[0]='\0';
+ 						}
+-						
++
+ 						/*Add string to parameters: */
+ 						this->constants->AddObject(new StringParam(record_enum,string));
+ 
+@@ -477,7 +474,7 @@
+ 				case 1: 
+ 					/*boolean. get it from cpu 0 */
+ 					MPI_Bcast(&booleanint,1,MPI_INT,0,IssmComm::GetComm()); 
+-						
++
+ 					/*create BoolParam: */
+ 					this->constants->AddObject(new BoolParam(record_enum,(bool)booleanint)); //cast to a boolean
+ 					break;
+@@ -485,7 +482,7 @@
+ 				case 2:
+ 					/*integer. get it from cpu 0 */
+ 					MPI_Bcast(&integer,1,MPI_INT,0,IssmComm::GetComm()); 
+-						
++
+ 					/*create IntParam: */
+ 					this->constants->AddObject(new IntParam(record_enum,integer));
+ 
+@@ -493,7 +490,7 @@
+ 				case 3:
+ 					/*scalar. get it from cpu 0 */
+ 					MPI_Bcast(&scalar,1,MPI_DOUBLE,0,IssmComm::GetComm()); 
+-						
++
+ 					/*create DoubleParam: */
+ 					this->constants->AddObject(new DoubleParam(record_enum,scalar));
+ 
+@@ -529,7 +526,6 @@
+ 					break;;
+ 				}
+ 
+-
+ 			}
+ 		}
+ 	} //}}}
+@@ -540,21 +536,19 @@
+ void  IoModel::FetchData(bool* pboolean,int data_enum){
+ 
+ 	int my_rank;
+-	
+ 
+ 	/*output: */
+ 	int   booleanint;
+ 	int   code;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+-	
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+ 
+ 	if(code!=1)_error_("expecting a boolean for enum " << EnumToStringx(data_enum));
+-	
++
+ 	/*We have to read a boolean from disk. */
+ 	if(my_rank==0){  
+ 		if(fread(&booleanint,sizeof(int),1,fid)!=1) _error_("could not read boolean ");
+@@ -577,15 +571,15 @@
+ 	/*output: */
+ 	int   integer;
+ 	int   code;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+-	
++
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+-	
++
+ 	if(code!=2)_error_("expecting an integer for enum " << EnumToStringx(data_enum));
+-	
++
+ 	/*We have to read a integer from disk. First read the dimensions of the integer, then the integer: */
+ 	if(my_rank==0){  
+ 		if(fread(&integer,sizeof(int),1,fid)!=1) _error_("could not read integer ");
+@@ -602,22 +596,20 @@
+ /*FUNCTION IoModel::FetchData(IssmDouble*   pscalar,int data_enum){{{*/
+ void  IoModel::FetchData(IssmDouble* pscalar,int data_enum){
+ 
+-
+ 	int my_rank;
+-	
+ 
+ 	/*output: */
+ 	IssmPDouble   scalar;
+ 	int      code;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+-	
++
+ 	if(code!=3)_error_("expecting a IssmDouble for enum " << EnumToStringx(data_enum));
+-	
++
+ 	/*We have to read a scalar from disk. First read the dimensions of the scalar, then the scalar: */
+ 	if(my_rank==0){
+ 		if(fread(&scalar,sizeof(IssmPDouble),1,fid)!=1)_error_("could not read scalar ");
+@@ -628,30 +620,29 @@
+ 
+ 	/*Assign output pointers: */
+ 	*pscalar=scalar;
+-		 
++
+ }
+ /*}}}*/
+ /*FUNCTION IoModel::FetchData(char**    pstring,int data_enum){{{*/
+ void  IoModel::FetchData(char** pstring,int data_enum){
+ 
+ 	int my_rank;
+-	
+ 
+ 	/*output: */
+ 	char* string=NULL;
+ 	int   string_size;
+ 	int code=0;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+-	
++
+ 	if(code!=4)_error_("expecting a string for enum " << EnumToStringx(data_enum));
+-	
++
+ 	/*Now fetch: */
+-	
++
+ 	/*We have to read a string from disk. First read the dimensions of the string, then the string: */
+ 	if(my_rank==0){  
+ 		if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
+@@ -679,7 +670,6 @@
+ 		string[0]='\0';
+ 	}
+ 
+-
+ 	/*Assign output pointers: */
+ 	*pstring=string;
+ }
+@@ -696,7 +686,7 @@
+ 	int*    integer_matrix=NULL;
+ 	int code=0;
+ 	int vector_type=0;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+@@ -704,7 +694,7 @@
+ 	fid=this->SetFilePointerToData(&code,&vector_type,data_enum);
+ 
+ 	if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
+-	
++
+ 	/*Now fetch: */
+ 
+ 	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+@@ -732,7 +722,7 @@
+ 		if(my_rank==0){  
+ 			if(fread(matrix,M*N*sizeof(IssmPDouble),1,fid)!=1) _error_("could not read matrix ");
+ 		}
+-		
++
+ 		#ifdef _HAVE_MPI_
+ 		MPI_Bcast(matrix,M*N,MPI_DOUBLE,0,IssmComm::GetComm()); 
+ 		#endif
+@@ -770,14 +760,14 @@
+ 	IssmPDouble* matrix=NULL;
+ 	int code=0;
+ 	int vector_type=0;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,&vector_type,data_enum);
+ 	if((code!=5) && (code!=6) && (code!=7))_error_("expecting a IssmDouble, integer or boolean matrix for enum " << EnumToStringx(data_enum));
+-	
++
+ 	/*Now fetch: */
+ 
+ 	/*We have to read a matrix from disk. First read the dimensions of the matrix, then the whole matrix: */
+@@ -831,26 +821,26 @@
+ void  IoModel::FetchData(char*** pstrings,int* pnumstrings,int data_enum){
+ 
+ 	int my_rank;
+-	
++
+ 	int i;
+ 
+ 	/*output: */
+ 	int   numstrings=0;
+ 	char** strings=NULL;
+-	
++
+ 	/*intermediary: */
+ 	char* string=NULL;
+ 	int   string_size;
+ 	int   code;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+-	
++
+ 	if(code!=9)_error_("expecting a string array for enum " << EnumToStringx(data_enum));
+-	
++
+ 	/*We have to read a bunch of strings from disk. First read the number of strings, and allocate: */
+ 	if(my_rank==0){  
+ 		if(fread(&numstrings,sizeof(int),1,fid)!=1) _error_("could not read length of string array");
+@@ -866,7 +856,7 @@
+ 
+ 		/*Go through strings, and read: */
+ 		for(i=0;i<numstrings;i++){
+-			
++
+ 			if(my_rank==0){  
+ 				if(fread(&string_size,sizeof(int),1,fid)!=1) _error_("could not read length of string ");
+ 			}
+@@ -916,14 +906,14 @@
+ 	int     M, N;
+ 	IssmPDouble *matrix = NULL;
+ 	int     code;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+ 	/*Set file pointer to beginning of the data: */
+ 	fid=this->SetFilePointerToData(&code,NULL,data_enum);
+ 	if(code!=8)_error_("expecting a IssmDouble mat array for enum " << EnumToStringx(data_enum));
+-	
++
+ 	/*Now fetch: */
+ 	if(my_rank==0){  
+ 		if(fread(&numrecords,sizeof(int),1,fid)!=1) _error_("could not read number of records in matrix array ");
+@@ -999,7 +989,7 @@
+ 	/*output: */
+ 	int     code;
+ 	char   *name        = NULL;
+-	
++
+ 	/*First get option name*/
+ 	this->FetchData(&name,index);
+ 
+@@ -1050,12 +1040,12 @@
+ 
+ 	/*Go through the entire list of enums and fetch the corresponding data. Add it to the iomodel->data dataset. Everything
+ 	 *we fetch is a IssmDouble* : */
+-	
++
+ 	va_start(ap,num);
+ 	for(i=0; i<num; i++){
+-		
++
+ 		dataenum=va_arg(ap, int);
+-		
++
+ 		if (this->independents[dataenum]){
+ 			/*this data has already been checked out! Continue: */
+ 			continue;
+@@ -1095,7 +1085,6 @@
+ 	int     nel;
+ 	int     numberofelements;
+ 
+-
+ 	/*variables being fetched: */
+ 	bool    boolean;
+ 	int     integer;
+@@ -1281,7 +1270,7 @@
+ 	int my_rank;
+ 	int        lastindex,index;
+ 	int        record_length;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13622)
+@@ -87,7 +87,7 @@
+ 	this->parameters->FindParam(&output_fid,OutputFilePointerEnum); 
+ 	this->parameters->FindParam(&outbinfilename,OutputFileNameEnum); 
+ 	pfclose(output_fid,outbinfilename);
+-	
++
+ 	/*Write lock file if requested: */
+ 	this->parameters->FindParam(&waitonlock,SettingsWaitonlockEnum);
+ 	this->parameters->FindParam(&lockfilename,LockFileNameEnum);
+@@ -213,7 +213,7 @@
+ /*}}}*/
+ /*FUNCTION FemModel::OutputResults {{{*/
+ void FemModel::OutputResults(void){
+-	
++
+ 	_pprintLine_("write results to disk:");
+ 
+ 	/*Just call the OutputResultsx module: */
+@@ -252,7 +252,7 @@
+ 	/*solution: */
+ 	int solution_type;
+ 	void (*solutioncore)(FemModel*)=NULL; //core solution function pointer
+-	
++
+ 	_pprintLine_("call computational core:");
+ 
+ 	/*Retrieve solution_type from parameters: */
+Index: ../trunk-jpl/src/c/solvers/solver_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_nonlinear.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/solvers/solver_nonlinear.cpp	(revision 13622)
+@@ -22,7 +22,7 @@
+ 	Vector<IssmDouble>* pf  = NULL;
+ 	Vector<IssmDouble>* df  = NULL;
+ 	Vector<IssmDouble>* ys  = NULL;
+-	
++
+ 	Loads* loads=NULL;
+ 	bool converged;
+ 	int constraints_converged;
+Index: ../trunk-jpl/src/c/solvers/solver_stokescoupling_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_stokescoupling_nonlinear.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/solvers/solver_stokescoupling_nonlinear.cpp	(revision 13622)
+@@ -41,7 +41,7 @@
+ 	femmodel->parameters->FindParam(&min_mechanical_constraints,DiagnosticRiftPenaltyThresholdEnum);
+ 	femmodel->parameters->FindParam(&max_nonlinear_iterations,DiagnosticMaxiterEnum);
+ 	UpdateConstraintsx(femmodel->nodes,femmodel->constraints,femmodel->parameters);
+-	
++
+ 	count=1;
+ 	converged=false;
+ 
+@@ -55,7 +55,7 @@
+ 		/*First diagnostic horiz:*/
+ 		femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
+ 		femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	
++
+ 		//Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate)
+ 		InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_horiz);
+ 		xdelete(&ug_horiz);
+@@ -76,7 +76,7 @@
+ 		/*Second compute vertical velocity: */
+ 		femmodel->SetCurrentConfiguration(DiagnosticVertAnalysisEnum);
+ 		femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-		
++
+ 		/*solve: */
+ 		SystemMatricesx(&Kff_vert, &Kfs_vert, &pf_vert,  &df_vert,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+Index: ../trunk-jpl/src/c/solvers/solver_thermal_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_thermal_nonlinear.cpp	(revision 13621)
++++ ../trunk-jpl/src/c/solvers/solver_thermal_nonlinear.cpp	(revision 13622)
+@@ -35,7 +35,6 @@
+ 	bool lowmem=0;
+ 	int  configuration_type;
+ 
+-
+ 	/*Recover parameters: */
+ 	kflag=1; pflag=1;
+ 	femmodel->parameters->FindParam(&lowmem,SettingsLowmemEnum);
+@@ -75,7 +74,7 @@
+ 		count++;
+ 
+ 		InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);
+-		
++
+ 		if(converged)break;
+ 	}
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13622-13623.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13622-13623.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13622-13623.diff	(revision 13980)
@@ -0,0 +1,2614 @@
+Index: ../trunk-jpl/src/c/python/include/python_macros.h
+===================================================================
+--- ../trunk-jpl/src/c/python/include/python_macros.h	(revision 13622)
++++ ../trunk-jpl/src/c/python/include/python_macros.h	(revision 13623)
+@@ -44,13 +44,13 @@
+ #if _PYTHON_MAJOR_ >=3
+ /* WRAPPER 3.2 {{{*/
+ #define WRAPPER(modulename,...)  \
+-\
++
+ static PyObject* modulename(PyObject* self,PyObject* args);\
+ static PyMethodDef modulename##_funcs[] = {\
+ 	{#modulename, (PyCFunction)modulename, METH_VARARGS, ""},\
+ 	{NULL,NULL,0,NULL}\
+ };\
+-\
++
+ static struct PyModuleDef modulename##module= {\
+ 	PyModuleDef_HEAD_INIT,\
+ 	#modulename,   /* name of module */\
+@@ -59,31 +59,31 @@
+ 				 or -1 if the module keeps state in global variables. */\
+ 	modulename##_funcs\
+ };\
+-\
++
+ PyMODINIT_FUNC PyInit_##modulename(void){\
+-\
++
+ 	import_array();\
+ 	return PyModule_Create(&modulename##module);\
+ }\
+-\
++
+ static PyObject* modulename(PyObject* self,PyObject* args)
+ /*}}}*/
+ #else
+ /* WRAPPER 2.7 {{{*/
+ #define WRAPPER(modulename,...)  \
+-\
++
+ static PyObject* modulename(PyObject* self,PyObject* args);\
+ static PyMethodDef modulename##_funcs[] = {\
+ 	{#modulename, (PyCFunction)modulename, METH_VARARGS, ""},\
+ 	{NULL,NULL,0,NULL}\
+ };\
+-\
++
+ PyMODINIT_FUNC init##modulename(void){\
+-\
++
+ 	import_array();\
+ 	(void) Py_InitModule(#modulename, modulename##_funcs);\
+ }\
+-\
++
+ static PyObject* modulename(PyObject* self,PyObject* args)
+ /*}}}*/
+ #endif
+Index: ../trunk-jpl/src/c/Container/Options.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Options.h	(revision 13622)
++++ ../trunk-jpl/src/c/Container/Options.h	(revision 13623)
+@@ -21,8 +21,7 @@
+ 		/*numerics*/
+ 		int  AddOption(Option* in_oobject);
+ 		Option* GetOption(const char* name);
+-		
+-		
++
+ 		template <class OptionType> void Get(OptionType* pvalue,const char* name){ /*{{{*/
+ 
+ 			vector<Object*>::iterator object;
+Index: ../trunk-jpl/src/c/Container/Results.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Results.h	(revision 13622)
++++ ../trunk-jpl/src/c/Container/Results.h	(revision 13623)
+@@ -29,4 +29,3 @@
+ 		/*}}}*/
+ };
+ #endif //ifndef _RESULTS_H_
+-
+Index: ../trunk-jpl/src/c/Container/Parameters.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Parameters.h	(revision 13622)
++++ ../trunk-jpl/src/c/Container/Parameters.h	(revision 13623)
+@@ -44,7 +44,7 @@
+ 		void  FindParam(Matrix<IssmDouble>** pmat,int enum_type);
+ 		void  FindParam(FILE** pfid,int enum_type);
+ 		void  FindParam(DataSet** pdataset, int enum_type);
+-		
++
+ 		void  SetParam(bool boolean,int enum_type);
+ 		void  SetParam(int integer,int enum_type);
+ 		void  SetParam(IssmDouble scalar, int enum_type);
+Index: ../trunk-jpl/src/c/Container/Constraints.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Constraints.h	(revision 13622)
++++ ../trunk-jpl/src/c/Container/Constraints.h	(revision 13623)
+@@ -15,7 +15,6 @@
+ class DataSet;
+ class Inputs;
+ 
+-
+ class Constraints: public DataSet{
+ 
+ 	public:
+@@ -30,6 +29,4 @@
+ 
+ };
+ 
+-
+ #endif //ifndef _CONSTRAINTS_H_
+-
+Index: ../trunk-jpl/src/c/Container/Observations.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Observations.h	(revision 13622)
++++ ../trunk-jpl/src/c/Container/Observations.h	(revision 13623)
+@@ -36,4 +36,3 @@
+ 
+ };
+ #endif //ifndef _OBSERVATIONS_H_
+-
+Index: ../trunk-jpl/src/c/Container/Inputs.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Inputs.h	(revision 13622)
++++ ../trunk-jpl/src/c/Container/Inputs.h	(revision 13623)
+@@ -41,7 +41,7 @@
+ 		IssmDouble  MaxAbs(int enumtype);
+ 		IssmDouble  Min(int enumtype);
+ 		IssmDouble  MinAbs(int enumtype);
+-		
++
+ 		void GetInputAverage(IssmDouble* pvalue, int enum_type);
+ 		void GetInputValue(bool* pvalue,int enum_type);
+ 		void GetInputValue(int* pvalue,int enum_type);
+Index: ../trunk-jpl/src/c/Container/DataSet.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/DataSet.h	(revision 13622)
++++ ../trunk-jpl/src/c/Container/DataSet.h	(revision 13623)
+@@ -22,15 +22,15 @@
+ class Patch;
+ 
+ class DataSet{
+-	
++
+ 	public: 
+-		
++
+ 		/*internals: */
+ 		std::vector<Object*> objects;
+-		
++
+ 		/*type of dataset: */
+ 		int             enum_type;
+-		
++
+ 		/*sorting: */
+ 		int             sorted;
+ 		int             presorted;
+Index: ../trunk-jpl/src/c/include/globals.h
+===================================================================
+--- ../trunk-jpl/src/c/include/globals.h	(revision 13622)
++++ ../trunk-jpl/src/c/include/globals.h	(revision 13623)
+@@ -5,7 +5,6 @@
+ #ifndef GLOBALS_H_
+ #define GLOBALS_H_
+ 
+-
+ #include "./types.h"
+ #include "../classes/IssmComm.h"
+ 
+Index: ../trunk-jpl/src/c/include/typedefs.h
+===================================================================
+--- ../trunk-jpl/src/c/include/typedefs.h	(revision 13622)
++++ ../trunk-jpl/src/c/include/typedefs.h	(revision 13623)
+@@ -35,7 +35,7 @@
+ //Most generic way it would seem:
+ #define INFINITY (DBL_MAX+DBL_MAX)
+ #define NAN (INFINITY-INFINITY)
+-	
++
+ #endif
+ 
+ #endif //ifndef _ISSMTYPEDEFS_H_
+Index: ../trunk-jpl/src/c/shared/MemOps/xMemCpy.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/MemOps/xMemCpy.h	(revision 13622)
++++ ../trunk-jpl/src/c/shared/MemOps/xMemCpy.h	(revision 13623)
+@@ -16,4 +16,3 @@
+ };
+ 
+ #endif
+-
+Index: ../trunk-jpl/src/c/shared/Exceptions/exceptions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 13622)
++++ ../trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 13623)
+@@ -15,7 +15,7 @@
+ 
+ /*We derive our classes from the c++ exception class: */
+ class ErrorException: public exception {
+-	
++
+ 	string   what_str;
+ 	string   function_name;
+ 	string   file_name;
+Index: ../trunk-jpl/src/c/shared/Bamg/shared.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Bamg/shared.h	(revision 13622)
++++ ../trunk-jpl/src/c/shared/Bamg/shared.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  * \brief: header file for all shared  routines.
+  */
+ 
+-
+ #ifndef _SHAREDBamg_H_
+ #define _SHAREDBamg_H_
+ 
+Index: ../trunk-jpl/src/c/shared/String/sharedstring.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/String/sharedstring.h	(revision 13622)
++++ ../trunk-jpl/src/c/shared/String/sharedstring.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ #endif
+ 
+ #endif //ifndef _SHAREDSTRING_H_
+-
+Index: ../trunk-jpl/src/c/shared/Alloc/xNewDelete.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Alloc/xNewDelete.h	(revision 13622)
++++ ../trunk-jpl/src/c/shared/Alloc/xNewDelete.h	(revision 13623)
+@@ -7,7 +7,6 @@
+ 
+ #include <cassert>
+ 
+-
+ // memory management of types 
+ // T with non-trivial constructors require 
+ // C++ style memory management
+@@ -153,4 +152,3 @@
+ }
+ 
+ #endif
+-
+Index: ../trunk-jpl/src/c/shared/Threads/issm_threads.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Threads/issm_threads.h	(revision 13622)
++++ ../trunk-jpl/src/c/shared/Threads/issm_threads.h	(revision 13623)
+@@ -13,7 +13,6 @@
+ 	int   num;
+ } pthread_handle;
+ 
+-
+ /*routine that launches "function" in a multi-threaded way if requested, 
+  * or just serially if not requested: */
+ void LaunchThread(void* function(void*), void* gate,int num_threads);
+Index: ../trunk-jpl/src/c/shared/Exp/exp.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exp/exp.h	(revision 13622)
++++ ../trunk-jpl/src/c/shared/Exp/exp.h	(revision 13623)
+@@ -59,7 +59,7 @@
+ /*DomainOutlineRead{{{*/
+ template <class doubletype>
+ int DomainOutlineRead(int* pnprof,int** pprofnvertices,doubletype*** ppprofx,doubletype*** ppprofy,bool** pclosed,char* domainname){
+-	
++
+ 	/*indexing: */
+ 	int i,counter;
+ 
+@@ -99,7 +99,7 @@
+ 		if (feof(fid)) break;
+ 		nprof++;
+ 	}
+-	
++
+ 	/*Allocate and initialize all the profiles: */
+ 	profnvertices = xNew<int>(nprof);
+ 	pprofx        = xNew<doubletype*>(nprof);
+@@ -120,17 +120,17 @@
+ 		fscanf(fid,"%256s %256s\n",chardummy,chardummy);
+ 		fscanf(fid,"%256s %256s\n",chardummy,chardummy);
+ 		fscanf(fid,"%256s %256s %256s %256s\n",chardummy,chardummy,chardummy,chardummy);
+-		
++
+ 		/*Get number of profile vertices: */
+ 		fscanf(fid,"%20u %256s\n",&n,chardummy);
+-	
++
+ 		/*Skip next line: */
+ 		fscanf(fid,"%256s %256s %256s %256s %256s\n",chardummy,chardummy,chardummy,chardummy,chardummy);
+ 
+ 		/*Allocate vertices: */
+ 		x=xNew<doubletype>(n);
+ 		y=xNew<doubletype>(n);
+-		
++
+ 		/*Read vertices: */
+ 		for (i=0;i<n;i++){
+ 			fscanf(fid,"%20lf %20lf\n",&x[i],&y[i]);
+Index: ../trunk-jpl/src/c/modules/UpdateVertexPositionsx/UpdateVertexPositionsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/UpdateVertexPositionsx/UpdateVertexPositionsx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/UpdateVertexPositionsx/UpdateVertexPositionsx.h	(revision 13623)
+@@ -11,4 +11,3 @@
+ int UpdateVertexPositionsx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters);
+ 
+ #endif  /* _UPDATEVERTEXPOSITIONSXX_H */
+-
+Index: ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.h	(revision 13623)
+@@ -28,7 +28,6 @@
+ 	int                 num_default_values;
+ 	double              *incontour;
+ 
+-
+ } InterpFromMesh2dxThreadStruct;
+ 
+ int InterpFromMesh2dx(SeqVec<IssmPDouble>** pdata_prime,double* index_data, double* x_data, double* y_data, int nods_data,int nels_data, double* data, int data_length, double* x_prime, double* y_prime, int nods_prime,
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void InputUpdateFromMatrixDakotax( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,double* matrix,int nrows,int ncols, int name, int type);
+ 
+ #endif  /* _UPDATEINPUTSFROMMATRIXDAKOTAXX_H */
+-
+Index: ../trunk-jpl/src/c/modules/MinVzx/MinVzx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVzx/MinVzx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MinVzx/MinVzx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void MinVzx( IssmDouble* pminvz, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+ 
+ #endif  /* _MINVZX_H */
+-
+Index: ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.h	(revision 13623)
+@@ -11,4 +11,3 @@
+ void MaxVxx( IssmDouble* pmaxvx, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+ 
+ #endif  /* _MAXVXX_H */
+-
+Index: ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.h	(revision 13623)
+@@ -11,4 +11,3 @@
+ void TimeAdaptx(IssmDouble* pdt, Elements* elements, Nodes* nodes,Vertices* vertices,Loads* loads, Materials* materials, Parameters* parameters);
+ 
+ #endif  /* _TIMEADAPTX_H */
+-
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h	(revision 13623)
+@@ -15,4 +15,3 @@
+ void	InputUpdateFromVectorx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,bool* vector, int name,int type);
+ 
+ #endif  /* _UPDATEINPUTSFROMVECTORXX_H */
+-
+Index: ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void Reducevectorgtofx(Vector<IssmDouble>** puf, Vector<IssmDouble>* ug, Nodes* nodes,Parameters* parameters);
+ 
+ #endif  /* _REDUCEVECTORGTOFX_H */
+-
+Index: ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.h	(revision 13623)
+@@ -11,4 +11,3 @@
+ void RequestedDependentsx(Results* results,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters);
+ 
+ #endif  /* _INPUTTORESULTX_H */
+-
+Index: ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void MaxAbsVxx( IssmDouble* pmaxabsvx, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+ 
+ #endif  /* _MAXABSVXX_H */
+-
+Index: ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.h	(revision 13623)
+@@ -11,4 +11,3 @@
+ void InputDuplicatex(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int reinitialized_enum, int original_enum);
+ 
+ #endif  /* _INPUTDUPLICATEX_H */
+-
+Index: ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void	GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,const char* data="value");
+ 
+ #endif  /* _GETVECTORFROMCONTROLINPUTSXX_H */
+-
+Index: ../trunk-jpl/src/c/modules/MinVelx/MinVelx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVelx/MinVelx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MinVelx/MinVelx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void MinVelx( IssmDouble* pminvel, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+ 
+ #endif  /* _MINVELX_H */
+-
+Index: ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void MaxVelx( IssmDouble* pmaxvel, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+ 
+ #endif  /* _MAXVELX_H */
+-
+Index: ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void GetSolutionFromInputsx( Vector<IssmDouble>** psolution, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters);
+ 
+ #endif  /* _GETSOLUTIONFROMINPUTSXX_H */
+-
+Index: ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void MaxVyx( IssmDouble* pmaxvy, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+ 
+ #endif  /* _MAXVYX_H */
+-
+Index: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.h	(revision 13623)
+@@ -2,7 +2,6 @@
+ 	MeshProfileIntersectionx.h
+ */
+ 
+-
+ #ifndef _MESHPROFILEINTERSECTIONX_H
+ #define _MESHPROFILEINTERSECTIONX_H
+ 
+@@ -18,4 +17,3 @@
+ bool NodeInElement(double* xnodes, double* ynodes, double x, double y);
+ 
+ #endif /* _MESHPROFILEINTERSECTIONX_H */
+-
+Index: ../trunk-jpl/src/c/modules/InputScalex/InputScalex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputScalex/InputScalex.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/InputScalex/InputScalex.h	(revision 13623)
+@@ -11,4 +11,3 @@
+ void InputScalex(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int enum_type, IssmDouble scale_factor);
+ 
+ #endif  /* _SCALEINPUTX_H */
+-
+Index: ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.h	(revision 13623)
+@@ -11,4 +11,3 @@
+ void OutputRiftsx( Vec* priftproperties, Loads* loads, int numrifts);
+ 
+ #endif  /* _OUTPUTRIFTSX_H */
+-
+Index: ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void ElementResponsex( IssmDouble* presponse, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int response_enum,bool process_units);
+ 
+ #endif  /* _ELEMENTRESPONSEX_H */
+-
+Index: ../trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void	ComputeStrainRatex(Vector<IssmDouble>** eps_g,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters);
+ 
+ #endif  /* _COMPUTESTRAINRATEX_H */
+-
+Index: ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h	(revision 13623)
+@@ -13,4 +13,3 @@
+ void ResetConstraintsx(Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads,Materials* materials,  Parameters* parameters); 
+ 
+ #endif  /* _RESETCONSTRAINTSX_H */
+-
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h	(revision 13623)
+@@ -11,4 +11,3 @@
+ void  InputUpdateFromDakotax(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials*  materials,Parameters* parameters,double* variables,char* *variables_descriptors,int numvariables);
+ 
+ #endif  /* _INPUTUPDATEFROMDAKOTAXX_H */
+-
+Index: ../trunk-jpl/src/c/modules/Chacox/Chacox.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Chacox/Chacox.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/Chacox/Chacox.h	(revision 13623)
+@@ -43,5 +43,4 @@
+ #undef __FUNCT__ 
+ #define __FUNCT__  "Chacox"
+ 
+-
+ #endif  /* _CHACOX_H */
+Index: ../trunk-jpl/src/c/modules/AverageFilterx/AverageFilterx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/AverageFilterx/AverageFilterx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/AverageFilterx/AverageFilterx.h	(revision 13623)
+@@ -10,6 +10,5 @@
+ 
+ /* local prototypes: */
+ int AverageFilterx(double** pimageout,double* imagein, int lines,int samp,int smooth);
+-	
++
+ #endif /* AVERAGEFILTERX_H */
+-
+Index: ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void SurfaceAreax( IssmDouble* pS, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+ 
+ #endif  /* _SURFACEAREAX_H */
+-
+Index: ../trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.h	(revision 13623)
+@@ -10,4 +10,3 @@
+ void PropagateFlagsFromConnectivityx( double* pool, double* connectivity,int index, double* flags);
+ 
+ #endif  /* _PROPAGATEFLAGSFROMCONNECTIVITYX_H */
+-
+Index: ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.h	(revision 13623)
+@@ -16,4 +16,3 @@
+ void OutputResultsx(Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads,  Materials* materials, Parameters* parameters, Results* results);
+ 
+ #endif  /* _OUTPUTRESULTS_H */
+-
+Index: ../trunk-jpl/src/c/modules/Scotchx/Scotchx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Scotchx/Scotchx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/Scotchx/Scotchx.h	(revision 13623)
+@@ -5,7 +5,6 @@
+ #ifndef _SCOTCHX_H
+ #define _SCOTCHX_H
+ 
+-
+ #undef __FUNCT__ 
+ #define __FUNCT__  "Scotchx"
+ 
+Index: ../trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void	ComputeBasalStressx( Vector<IssmDouble>** pp_g,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters);
+ 
+ #endif  /* _COMPUTEBASALSTRESSX_H */
+-
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h	(revision 13623)
+@@ -17,4 +17,3 @@
+ void        InputUpdateFromSolutionx( Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,IssmDouble* solution, int timestep);
+ 
+ #endif  /* _UPDATEINPUTSFROMSOLUTIONXX_H */
+-
+Index: ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.h	(revision 13623)
+@@ -2,7 +2,6 @@
+ 	HoleFillerx.h
+ */
+ 
+-
+ #ifndef HOLEFILLERX_H
+ #define HOLEFILLERX_H
+ 
+@@ -11,6 +10,5 @@
+ 
+ /* local prototypes: */
+ int HoleFillerx(double** pimageout,double* imagein, int lines,int samp,int smooth);
+-	
++
+ #endif /* HOLEFILLERX_H */
+-
+Index: ../trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h	(revision 13623)
+@@ -8,7 +8,6 @@
+ #include "../../include/include.h"
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ 
+-
+ /* local prototypes: */
+ template <class doubletype> 
+ int MeshPartitionx(int** pepart, int** pnpart, int numberofelements,int numberofnodes,doubletype* elements,
+@@ -88,7 +87,7 @@
+ 
+ 		/*Extrude epart2d to epart, using numlayers: */
+ 		epart=xNew<int>(numberofelements);
+-		
++
+ 		count=0;
+ 		for(i=0;i<(numlayers-1);i++){
+ 			for(j=0;j<numberofelements2d;j++){
+@@ -99,7 +98,7 @@
+ 
+ 		/*Extrude npart2d to npart, using numlayers: */
+ 		npart=xNew<int>(numberofnodes);
+-		
++
+ 		count=0;
+ 		for(i=0;i<(numlayers);i++){
+ 			for(j=0;j<numberofnodes2d;j++){
+@@ -108,7 +107,7 @@
+ 			}
+ 		}
+ 	}
+-	
++
+ 	/*Assign output pointer:*/
+ 	*pepart=epart;
+ 	*pnpart=npart;
+Index: ../trunk-jpl/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void Reducevectorgtosx(Vector<IssmDouble>** pys, Vector<IssmDouble>* yg, Nodes* nodes,Parameters* parameters);
+ 
+ #endif  /* _REDUCEVECTORGTOSX_H */
+-
+Index: ../trunk-jpl/src/c/modules/ElementConnectivityx/ElementConnectivityx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ElementConnectivityx/ElementConnectivityx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/ElementConnectivityx/ElementConnectivityx.h	(revision 13623)
+@@ -9,4 +9,3 @@
+ void	ElementConnectivityx( double** pelementconnectivity, double* elements, int nel, double* nodeconnectivity, int nods, int width);
+ 
+ #endif  /* _ELEMENTCONNECTIVITYX_H */
+-
+Index: ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void	GetVectorFromInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,int name,int type);
+ 
+ #endif  /* _GETVECTORFROMINPUTSXX_H */
+-
+Index: ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void MaxAbsVyx( IssmDouble* pmaxabsvy, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+ 
+ #endif  /* _MAXABSVYX_H */
+-
+Index: ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void NodalValuex( IssmDouble* pnodalvalue, int natureofdataenum,Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+ 
+ #endif  /* _NODALVALUEX_H */
+-
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h	(revision 13623)
+@@ -15,4 +15,3 @@
+ void	InputUpdateFromVectorDakotax( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters,bool* vector, int name,int type);
+ 
+ #endif  /* _UPDATEINPUTSFROMVECTORDAKOTAXX_H */
+-
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 13623)
+@@ -108,7 +108,6 @@
+ void  SortDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Loads** ploads, Materials** pmaterials, Constraints** pconstraints, Parameters** pparameters);
+ void  UpdateCounters(IoModel* iomodel,Nodes** pnodes,Loads** ploads, Constraints** pconstraints);
+ 
+-
+ /*Distribution of dofs: */
+ void DistributeNumDofs(DofIndexing* index,int analysis_type,IssmDouble* vertices_type);
+ 
+Index: ../trunk-jpl/src/c/modules/MinVxx/MinVxx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVxx/MinVxx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MinVxx/MinVxx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void MinVxx( IssmDouble* pminvx, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+ 
+ #endif  /* _MINVX_H */
+-
+Index: ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void MaxVzx( IssmDouble* pmaxvz, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+ 
+ #endif  /* _MAXVZX_H */
+-
+Index: ../trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.h	(revision 13623)
+@@ -11,4 +11,3 @@
+ void RequestedOutputsx(Results* results,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters, int* requested_outputs, int numoutputs);
+ 
+ #endif  /* _INPUTTORESULTX_H */
+-
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h	(revision 13623)
+@@ -14,4 +14,3 @@
+ void ConstraintsStatex(int* pconverged, int* pnum_unstable_constraints, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads,Materials* materials,  Parameters* parameters); 
+ 
+ #endif  /* _CONSTRAINTSSTATEX_H */
+-
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h	(revision 13623)
+@@ -26,4 +26,3 @@
+ int    RiftIsMaterialStable(Loads* loads);
+ 
+ #endif  /* _CONSTRAINTSSTATEX_H */
+-
+Index: ../trunk-jpl/src/c/modules/Solverx/Solverx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/Solverx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/Solverx/Solverx.h	(revision 13623)
+@@ -37,4 +37,3 @@
+ #endif
+ 
+ #endif  /* _SOLVERX_H */
+-
+Index: ../trunk-jpl/src/c/modules/Orthx/Orthx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Orthx/Orthx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/Orthx/Orthx.h	(revision 13623)
+@@ -13,4 +13,3 @@
+ void	Orthx( Vector<IssmDouble>** pnewgradj, Vector<IssmDouble>* gradj, Vector<IssmDouble>* oldgradj);
+ 
+ #endif  /* _ORTHX_H */
+-
+Index: ../trunk-jpl/src/c/modules/VerticesDofx/VerticesDofx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/VerticesDofx/VerticesDofx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/VerticesDofx/VerticesDofx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void VerticesDofx( Vertices* vertices, Parameters* parameters);
+ 
+ #endif  /* _VERTICESDOFX_H */
+-
+Index: ../trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.h	(revision 13623)
+@@ -10,4 +10,3 @@
+ bool InputConvergencex(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int* enums, int num_enums, int* criterionenums, IssmDouble* criterionvalues,int num_criterionenums);
+ 
+ #endif  /* _INPUTCONVERGENCEX_H */
+-
+Index: ../trunk-jpl/src/c/modules/NodeConnectivityx/NodeConnectivityx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodeConnectivityx/NodeConnectivityx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/NodeConnectivityx/NodeConnectivityx.h	(revision 13623)
+@@ -9,4 +9,3 @@
+ void	NodeConnectivityx( double** pconnectivity, int* pwidth,double* elements, int nel, int nods);
+ 
+ #endif  /* _NODECONNECTIVITYX_H */
+-
+Index: ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void MaxAbsVzx( IssmDouble* pmaxabsvz, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+ 
+ #endif  /* _MAXABSVZX_H */
+-
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 13623)
+@@ -14,4 +14,3 @@
+ void		InputUpdateFromConstantx( Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials,  Parameters* parameters, IssmDouble constant, int name);
+ 
+ #endif  /* _UPDATEINPUTSFROMCONSTANTXX_H */
+-
+Index: ../trunk-jpl/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.h	(revision 13623)
+@@ -11,4 +11,3 @@
+ void	Mergesolutionfromftogx( Vector<IssmDouble>** pug, Vector<IssmDouble>* uf, Vector<IssmDouble>* ys, Nodes* nodes, Parameters* parameters, bool flag_ys0=false);
+ 
+ #endif  /* _MERGESOLUTIONFROMFTOGX_H */
+-
+Index: ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.h	(revision 13623)
+@@ -11,6 +11,4 @@
+ /* local prototypes: */
+ void MassFluxx(IssmDouble* pmass_flux, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,bool process_units);
+ 
+-
+ #endif  /* _MASSFLUXX_H */
+-
+Index: ../trunk-jpl/src/c/modules/MinVyx/MinVyx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVyx/MinVyx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/MinVyx/MinVyx.h	(revision 13623)
+@@ -12,4 +12,3 @@
+ void MinVyx( IssmDouble* pminvy, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+ 
+ #endif  /* _MINVYX_H */
+-
+Index: ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.h	(revision 13623)
+@@ -2,7 +2,6 @@
+ 	ContourToMeshx.h
+ */
+ 
+-
+ #ifndef _CONTOURTOMESHX_H
+ #define _CONTOURTOMESHX_H
+ 
+@@ -21,7 +20,6 @@
+ 
+ } ContourToMeshxThreadStruct;
+ 
+-
+ /* local prototypes: */
+ int ContourToMeshx(SeqVec<double>** pin_nods,SeqVec<double>** pin_elem, double* index, double* x, double* y,DataSet* contours,char* interptype,int nel,int nods, int edgevalue);
+ 
+Index: ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.h	(revision 13622)
++++ ../trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.h	(revision 13623)
+@@ -2,7 +2,6 @@
+ 	PointCloudFindNeighborsx.h
+ */
+ 
+-
+ #ifndef _POINTCLOUDFLAGNEIGHBORSX_H
+ #define _POINTCLOUDFLAGNEIGHBORSX_H
+ 
+@@ -25,6 +24,4 @@
+ 
+ void* PointCloudFindNeighborsxt(void* vPointCloudFindNeighborsThreadStruct);
+ 
+-
+ #endif /* _POINTCLOUDFLAGNEIGHBORSX_H */
+-
+Index: ../trunk-jpl/src/c/toolkits/python/pythonincludes.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/python/pythonincludes.h	(revision 13622)
++++ ../trunk-jpl/src/c/toolkits/python/pythonincludes.h	(revision 13623)
+@@ -5,7 +5,6 @@
+ #ifndef _PYTHON_INCLUDES_H_
+ #define _PYTHON_INCLUDES_H_
+ 
+-
+ #ifdef HAVE_CONFIG_H
+ 	#include <config.h>
+ #else
+@@ -31,5 +30,4 @@
+ typedef boost::python::numeric::array pyArray;
+ #endif
+ 
+-
+ #endif
+Index: ../trunk-jpl/src/c/toolkits/scalapack/FortranMapping.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/scalapack/FortranMapping.h	(revision 13622)
++++ ../trunk-jpl/src/c/toolkits/scalapack/FortranMapping.h	(revision 13623)
+@@ -5,7 +5,6 @@
+  *     Description:  Fortran to C define to use Scalapack in a C program
+  */
+ 
+-
+ /*We transform every call to Fortran functions into their real symbolic name in the Scalapack, Blacs, Lapack and Blas libraries. 
+  * We had to look for these exact symbols in these libraries using nm | grep FORTRAN_NAME. In fact, the symbol naming is not well defined: see for example 
+  * numroc_ and blacs_gridinit__ (one underscore, then two). */
+@@ -22,7 +21,6 @@
+ #define PDGETRF(...) pdgetrf_(__VA_ARGS__)
+ #define PDGETRI(...) pdgetri_(__VA_ARGS__)
+ 
+-
+ /*Here, we clobber the fortran definition of these routines. Remember, every variable in fortran is passed by a pointer, and the 
+  * ordering of matrices is column oriented*/
+ 
+Index: ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h	(revision 13622)
++++ ../trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: prototype header for all ISSM add-ons to MPI
+  */
+ 
+-
+ #ifndef MPI_PATCHES_H_ 
+ #define MPI_PATCHES_H_
+ 
+Index: ../trunk-jpl/src/c/toolkits/triangle/triangleincludes.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/triangle/triangleincludes.h	(revision 13622)
++++ ../trunk-jpl/src/c/toolkits/triangle/triangleincludes.h	(revision 13623)
+@@ -10,5 +10,4 @@
+ #include "triangle.h"
+ #endif //#ifdef _C_
+ 
+-
+ #endif
+Index: ../trunk-jpl/src/c/toolkits/issm/SeqMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/SeqMat.h	(revision 13622)
++++ ../trunk-jpl/src/c/toolkits/issm/SeqMat.h	(revision 13623)
+@@ -29,7 +29,7 @@
+ class SeqMat{
+ 
+ 	public:
+-	
++
+ 		int M,N; 
+ 		doubletype* matrix;  /*here, doubletype is either IssmDouble or IssmPDouble*/
+ 
+Index: ../trunk-jpl/src/c/toolkits/issm/SeqVec.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/SeqVec.h	(revision 13622)
++++ ../trunk-jpl/src/c/toolkits/issm/SeqVec.h	(revision 13623)
+@@ -28,7 +28,7 @@
+ class SeqVec{
+ 
+ 	public:
+-	
++
+ 		doubletype* vector;
+ 		int M;
+ 
+Index: ../trunk-jpl/src/c/toolkits/plapack/plapackincludes.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/plapackincludes.h	(revision 13622)
++++ ../trunk-jpl/src/c/toolkits/plapack/plapackincludes.h	(revision 13623)
+@@ -11,7 +11,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ #include "PLA.h"
+ 
+ /* missing Plapack prototypes: */
+@@ -22,6 +21,4 @@
+ #include "patches/petscpatches.h"
+ #endif
+ 
+-
+ #endif
+-
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/SolverEnum.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/SolverEnum.h	(revision 13622)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/SolverEnum.h	(revision 13623)
+@@ -14,6 +14,4 @@
+ 	SUPERLUDISTPACKAGE,
+ } EXTERNALPACKAGES; 
+ 
+-
+ #endif //ifndef _SOLVERENUM_H_
+-
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.h	(revision 13622)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.h	(revision 13623)
+@@ -18,7 +18,6 @@
+ #include "../petscincludes.h"
+ #include "../../../include/include.h"
+ 
+-
+ /*}}}*/
+ 
+ class PetscVec{
+@@ -30,7 +29,6 @@
+ 		IssmDouble* avector;
+ 		#endif
+ 
+-
+ 		/*PetscVec constructors, destructors {{{*/
+ 		PetscVec();
+ 		PetscVec(int M,bool fromlocalsize=false);
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.h	(revision 13622)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.h	(revision 13623)
+@@ -52,5 +52,5 @@
+ 		/*}}}*/
+ 
+ };
+-		
++
+ #endif //#ifndef _PETSCMAT_H_
+Index: ../trunk-jpl/src/c/classes/gauss/GaussPenta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussPenta.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/gauss/GaussPenta.h	(revision 13623)
+@@ -27,7 +27,7 @@
+ 		double coord2;
+ 		double coord3;
+ 		double coord4;
+-		
++
+ 	public:
+ 
+ 		/*GaussPenta constructors, destructors*/
+Index: ../trunk-jpl/src/c/classes/gauss/GaussTria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/gauss/GaussTria.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/gauss/GaussTria.h	(revision 13623)
+@@ -24,7 +24,7 @@
+ 		IssmDouble coord1;
+ 		IssmDouble coord2;
+ 		IssmDouble coord3;
+-		
++
+ 	public:
+ 
+ 		/*GaussTria constructors, destructors*/
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 13623)
+@@ -5,7 +5,6 @@
+ #ifndef ALL_CLASSES_H_
+ #define ALL_CLASSES_H_
+ 
+-
+ /*Objects derived classes, which are used in our containers: */
+ #include "./objects/objects.h"
+ 
+Index: ../trunk-jpl/src/c/classes/DofIndexing.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/DofIndexing.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/DofIndexing.h	(revision 13623)
+@@ -8,7 +8,7 @@
+ #include "../include/include.h"
+ 
+ class DofIndexing{
+-	
++
+ 	public:
+ 
+ 		/*sizes: */
+@@ -26,7 +26,7 @@
+ 
+ 		/*types of dofs: */
+ 		int        *doftype;   //approximation type of the dofs (used only for coupling), size g_size
+-		
++
+ 		/*list of degrees of freedom: */
+ 		int *gdoflist;   //dof list in g_set
+ 		int *fdoflist;   //dof list in f_set
+Index: ../trunk-jpl/src/c/classes/Patch.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Patch.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/Patch.h	(revision 13623)
+@@ -3,7 +3,7 @@
+  */ 
+ 
+ /*A Patch object is used to store all results held in elements, in a serial way, and to dump them to disk. 
+-	
++
+ 	Each row of the Patch object is made of the following information: 
+ 	- the result enum_type, 
+ 	- the step and time, 
+@@ -11,7 +11,7 @@
+ 	- the interpolation type, 
+ 	- the vertices ids, 
+ 	- and the values at the nodes (could be different from the vertices).
+-	
++
+ 	For ex: 
+ 	1. on a Beam element, Vx, at step 1, time .5, element id 1, interpolation type P0 (constant), vertices ids 1 and 2, one constant value 4.5
+ 	   VxEnum 1  .5  1 P0  1 2       4.5 NaN  NaN
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Material.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Material.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Material.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  * \brief abstract class for Material object
+  */ 
+ 
+-
+ #ifndef _MATERIAL_H_
+ #define _MATERIAL_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _DOUBLEINPUT_H_
+ #define _DOUBLEINPUT_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/Input.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/Input.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  * \brief abstract class for Input object
+  */ 
+ 
+-
+ #ifndef _INPUT_H_
+ #define _INPUT_H_
+ 
+@@ -18,7 +17,7 @@
+ class Input: public Object{
+ 
+ 	public: 
+-		
++
+ 		virtual        ~Input(){};
+ 
+ 		virtual int  InstanceEnum()=0; 
+@@ -59,7 +58,7 @@
+ 		virtual void   Extrude()=0;
+ 		virtual void   GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist)=0;
+ 		virtual void   GetValuesPtr(IssmDouble** pvalues,int* pnum_values)=0;
+-		
++
+ 		virtual Input* SpawnTriaInput(int* indices)=0;
+ 		virtual Input* PointwiseDivide(Input* inputB)=0;
+ 		virtual Input* PointwiseMax(Input* inputmax)=0;
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _CONTROLINPUT_H_
+ #define _CONTROLINPUT_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for datasetinput object
+  */
+ 
+-
+ #ifndef _DATASETINPUT_H_
+ #define _DATASETINPUT_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/IntInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/IntInput.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/IntInput.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _INTINPUT_H_
+ #define _INTINPUT_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/BoolInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/BoolInput.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/BoolInput.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _BOOLINPUT_H_
+ #define _BOOLINPUT_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for TriaP1Input object
+  */
+ 
+-
+ #ifndef _TRIAP1INPUT_H_
+ #define _TRIAP1INPUT_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/TransientInput.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for transientinput object
+  */
+ 
+-
+ #ifndef _TRANSIENTINPUT_H_
+ #define _TRANSIENTINPUT_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for PentaP1Input object
+  */
+ 
+-
+ #ifndef _PENTAP1INPUT_H_
+ #define _PENTAP1INPUT_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _DOUBLEVECPARAM_H_
+ #define _DOUBLEVECPARAM_H_
+ 
+@@ -71,7 +70,7 @@
+ 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+ 		void  UnitConversion(int direction_enum);
+-		
++
+ 		void GetParameterName(char**pname);
+ 		/*}}}*/
+ };
+Index: ../trunk-jpl/src/c/classes/objects/Params/GenericParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/GenericParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/GenericParam.h	(revision 13623)
+@@ -98,5 +98,4 @@
+                 /*}}}*/
+ };
+ 
+-
+ #endif /* GENERICPARAM_H_ */
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _DOUBLEMATPARAM_H_
+ #define _DOUBLEMATPARAM_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/Param.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/Param.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/Param.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  * \brief abstract class for Param object
+  */ 
+ 
+-
+ #ifndef _PARAM_H_
+ #define _PARAM_H_
+ 
+@@ -41,7 +40,7 @@
+ 		virtual void  GetParameterValue(Matrix<IssmDouble>** pmat)=0;
+ 		virtual void  GetParameterValue(FILE** pfid)=0;
+ 		virtual void  GetParameterValue(DataSet** pdataset)=0;
+-		
++
+ 		virtual void  SetValue(bool boolean)=0;
+ 		virtual void  SetValue(int integer)=0;
+ 		virtual void  SetValue(IssmDouble scalar)=0;
+Index: ../trunk-jpl/src/c/classes/objects/Params/FileParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/FileParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/FileParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _FILEPARAM_H_
+ #define _FILEPARAM_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/DataSetParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _DATASETPARAM_H_
+ #define _DATASETPARAM_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _INTPARAM_H_
+ #define _INTPARAM_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/VectorParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/VectorParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/VectorParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _VECTORPARAM_H_
+ #define _VECTORPARAM_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for MatrixParam object
+  */
+ 
+-
+ #ifndef _MATRIXPARAM_H_
+ #define _MATRIXPARAM_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/StringArrayParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _STRINGARRAYPARAM_H_
+ #define _STRINGARRAYPARAM_H_
+ 
+@@ -27,7 +26,6 @@
+ 		char**   value;
+ 		int      numstrings;
+ 
+-
+ 	public:
+ 		/*StringArrayParam constructors, destructors: {{{*/
+ 		StringArrayParam();
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _DOUBLEPARAM_H_
+ #define _DOUBLEPARAM_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for object holding an array of serial matrices
+  */
+ 
+-
+ #ifndef _DOUBLEMATARRAYPARAM_H_
+ #define _DOUBLEMATARRAYPARAM_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntVecParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _INTVECPARAM_H_
+ #define _INTVECPARAM_H_
+ 
+@@ -72,7 +71,7 @@
+ 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+ 		void  UnitConversion(int direction_enum);
+-		
++
+ 		void GetParameterName(char**pname);
+ 		/*}}}*/
+ };
+Index: ../trunk-jpl/src/c/classes/objects/Params/BoolParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/BoolParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/BoolParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _BOOLPARAM_H_
+ #define _BOOLPARAM_H_
+ 
+@@ -70,7 +69,7 @@
+ 		void  SetValue(FILE* fid){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold a FILE");}
+ 		void  SetValue(IssmDouble** array, int M, int* mdim_array, int* ndim_array){_error_("Param "<< EnumToStringx(enum_type) << " cannot hold an array of matrices");}
+ 		void  UnitConversion(int direction_enum);
+-		
++
+ 		void GetParameterName(char**pname);
+ 		/*}}}*/
+ };
+Index: ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/IntMatParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _INTMATPARAM_H_
+ #define _INTMATPARAM_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/DoubleTransientMatParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/DoubleTransientMatParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/DoubleTransientMatParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for DoubleTransientMatParam object
+  */
+ 
+-
+ #ifndef _DOUBLETRANSIENTMATPARAM_H_
+ #define _DOUBLETRANSIENTMATPARAM_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/StringParam.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/StringParam.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Params/StringParam.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for triavertexinput object
+  */
+ 
+-
+ #ifndef _STRINGPARAM_H_
+ #define _STRINGPARAM_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/DependentObject.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/DependentObject.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/DependentObject.h	(revision 13623)
+@@ -9,7 +9,7 @@
+ #include "./Object.h"
+ #include "../../shared/shared.h"
+ /*}}}*/
+-		
++
+ class Elements;
+ class Nodes;
+ class Vertices;
+@@ -18,13 +18,13 @@
+ class Parameters;
+ 
+ class DependentObject: public Object{
+-	
++
+ 	public:
+ 
+ 		int name;
+ 		int type;  /*0: scalar, 1: vertex*/
+ 		int index;  /*0: scalar, 1: vertex*/
+-		
++
+ 		/*DependentObject constructors, destructors {{{*/
+ 		DependentObject();
+ 		DependentObject(int name, int type,int index);
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Icon.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Icon.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Icon.h	(revision 13623)
+@@ -50,4 +50,3 @@
+ 
+ };
+ #endif  /* _KML_ICON_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Point.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Point.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Point.h	(revision 13623)
+@@ -42,4 +42,3 @@
+ 
+ };
+ #endif  /* _KML_POINT_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_LinearRing.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_LinearRing.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_LinearRing.h	(revision 13623)
+@@ -44,4 +44,3 @@
+ 
+ };
+ #endif  /* _KML_LINEARRING_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Feature.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Feature.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Feature.h	(revision 13623)
+@@ -50,4 +50,3 @@
+ 
+ };
+ #endif  /* _KML_FEATURE_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.h	(revision 13623)
+@@ -54,4 +54,3 @@
+ 				   FILE* fid);
+ 
+ #endif  /* _KMLFILEREADUTILS_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_StyleSelector.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_StyleSelector.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_StyleSelector.h	(revision 13623)
+@@ -35,4 +35,3 @@
+ 
+ };
+ #endif  /* _KML_STYLESELECTOR_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_LatLonBox.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_LatLonBox.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_LatLonBox.h	(revision 13623)
+@@ -41,4 +41,3 @@
+ 
+ };
+ #endif  /* _KML_LATLONBOX_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Attribute.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Attribute.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Attribute.h	(revision 13623)
+@@ -43,4 +43,3 @@
+ 
+ };
+ #endif  /* _KML_ATTRIBUTE_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_PolyStyle.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_PolyStyle.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_PolyStyle.h	(revision 13623)
+@@ -38,4 +38,3 @@
+ 
+ };
+ #endif  /* _KML_POLYSTYLE_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Object.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Object.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Object.h	(revision 13623)
+@@ -49,4 +49,3 @@
+ 
+ };
+ #endif  /* _KML_OBJECT_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_SubStyle.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_SubStyle.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_SubStyle.h	(revision 13623)
+@@ -35,4 +35,3 @@
+ 
+ };
+ #endif  /* _KML_SUBSTYLE_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_LineString.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_LineString.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_LineString.h	(revision 13623)
+@@ -44,4 +44,3 @@
+ 
+ };
+ #endif  /* _KML_LINESTRING_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Overlay.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Overlay.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Overlay.h	(revision 13623)
+@@ -42,4 +42,3 @@
+ 
+ };
+ #endif  /* _KML_OVERLAY_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Container.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Container.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Container.h	(revision 13623)
+@@ -39,4 +39,3 @@
+ 
+ };
+ #endif  /* _KML_CONTAINER_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Polygon.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Polygon.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Polygon.h	(revision 13623)
+@@ -46,4 +46,3 @@
+ 
+ };
+ #endif  /* _KML_POLYGON_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Geometry.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Geometry.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Geometry.h	(revision 13623)
+@@ -35,4 +35,3 @@
+ 
+ };
+ #endif  /* _KML_GEOMETRY_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_ColorStyle.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_ColorStyle.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_ColorStyle.h	(revision 13623)
+@@ -42,4 +42,3 @@
+ 
+ };
+ #endif  /* _KML_COLORSTYLE_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Placemark.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Placemark.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Placemark.h	(revision 13623)
+@@ -40,4 +40,3 @@
+ 
+ };
+ #endif  /* _KML_PLACEMARK_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Unknown.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Unknown.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Unknown.h	(revision 13623)
+@@ -38,4 +38,3 @@
+ 
+ };
+ #endif  /* _KML_UNKNOWN_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_GroundOverlay.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_GroundOverlay.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_GroundOverlay.h	(revision 13623)
+@@ -42,4 +42,3 @@
+ 
+ };
+ #endif  /* _KML_GROUNDOVERLAY_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Style.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Style.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Style.h	(revision 13623)
+@@ -44,4 +44,3 @@
+ 
+ };
+ #endif  /* _KML_STYLE_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Comment.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Comment.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Comment.h	(revision 13623)
+@@ -43,4 +43,3 @@
+ 
+ };
+ #endif  /* _KML_COMMENT_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_MultiGeometry.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_MultiGeometry.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_MultiGeometry.h	(revision 13623)
+@@ -40,4 +40,3 @@
+ 
+ };
+ #endif  /* _KML_MULTIGEOMETRY_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_LineStyle.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_LineStyle.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_LineStyle.h	(revision 13623)
+@@ -37,4 +37,3 @@
+ 
+ };
+ #endif  /* _KML_LINESTYLE_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Folder.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Folder.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Folder.h	(revision 13623)
+@@ -36,4 +36,3 @@
+ 
+ };
+ #endif  /* _KML_FOLDER_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_Document.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_Document.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_Document.h	(revision 13623)
+@@ -36,4 +36,3 @@
+ 
+ };
+ #endif  /* _KML_DOCUMENT_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_File.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_File.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_File.h	(revision 13623)
+@@ -37,4 +37,3 @@
+ 
+ };
+ #endif  /* _KML_FILE_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/Options/OptionUtilities.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Options/OptionUtilities.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Options/OptionUtilities.h	(revision 13623)
+@@ -21,4 +21,3 @@
+ int StringFromSize(char* cstr, int* size, int ndims);
+ 
+ #endif  /* _OPTIONUTILITIES_H */
+-
+Index: ../trunk-jpl/src/c/classes/objects/Options/GenericOption.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Options/GenericOption.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Options/GenericOption.h	(revision 13623)
+@@ -43,7 +43,6 @@
+ 			ndims =0;
+ 			size  =NULL;
+ 
+-
+ 		} /*}}}*/
+ 		~GenericOption(){ /*{{{*/
+ 
+@@ -82,7 +81,7 @@
+ 		int   Id(){_error_("Not implemented yet");};
+ 		int   ObjectEnum(){return GenericOptionEnum;};
+ 		Object* copy(){_error_("Not implemented yet");};
+-		
++
+ 		/*GenericOption functions: */
+ 		char* Name(){return name;};
+ 		int   NumEl(){return numel;};
+Index: ../trunk-jpl/src/c/classes/objects/Options/Option.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Options/Option.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Options/Option.h	(revision 13623)
+@@ -16,7 +16,7 @@
+ class Option: public Object {
+ 
+ 	public:
+-		
++
+ 		/*Option constructors, destructors*/
+ 		Option(){};
+ 		~Option(){};
+Index: ../trunk-jpl/src/c/classes/objects/Object.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Object.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Object.h	(revision 13623)
+@@ -7,7 +7,6 @@
+  * DataSet.
+  */
+ 
+-
+ #ifndef _OBJECT_H_
+ #define _OBJECT_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Friction.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Friction.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Friction.h	(revision 13623)
+@@ -24,7 +24,7 @@
+ 		Friction();
+ 		Friction(const char* element_type, Inputs* inputs,Matpar* matpar, int analysis_type);
+ 		~Friction();
+-	
++
+ 		void  Echo(void);
+ 		void  GetAlpha2(IssmDouble* palpha2, GaussTria* gauss,int vxenum,int vyenum,int vzenum);
+ 		void  GetAlpha2(IssmDouble* palpha2, GaussPenta* gauss,int vxenum,int vyenum,int vzenum);
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.h	(revision 13623)
+@@ -24,7 +24,7 @@
+ 		Hook* hnodes;
+ 		Hook* helements;
+ 		Hook* hmatpar;
+-		
++
+ 		/*Corresponding fields*/
+ 		Matpar   *matpar;
+ 		Node    **nodes;
+@@ -45,7 +45,6 @@
+ 		Parameters *parameters;           //pointer to solution parameters
+ 		Inputs     *inputs;
+ 
+-
+ 		/*Riftfrontconstructors,destructors: {{{*/
+ 		Riftfront();
+ 		Riftfront(int riftfront_id,int i, IoModel* iomodel,int analysis_type);
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Penpair.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Penpair.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Penpair.h	(revision 13623)
+@@ -70,5 +70,3 @@
+ };
+ 
+ #endif  /* _PENPAIR_H_ */
+-
+-
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.h	(revision 13623)
+@@ -19,7 +19,7 @@
+ 
+ 		int		id;
+ 		int analysis_type;
+-		
++
+ 		/*Hooks*/
+ 		Hook* hnode;  //hook to 1 node
+ 		Hook* helement;  //hook to 1 element
+@@ -32,7 +32,7 @@
+ 
+ 		Parameters* parameters; //pointer to solution parameters
+ 		Inputs*  inputs;
+-	
++
+ 		/*internals: */
+ 		int active;
+ 		int zigzag_counter;
+@@ -95,5 +95,3 @@
+ };
+ 
+ #endif  /* _PENGRID_H_ */
+-
+-
+Index: ../trunk-jpl/src/c/classes/objects/Vertex.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Vertex.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Vertex.h	(revision 13623)
+@@ -17,7 +17,6 @@
+ 
+ /*}}}*/
+ 
+-
+ class Vertex: public Object{
+ 
+ 	public: 
+Index: ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h	(revision 13623)
+@@ -34,7 +34,7 @@
+ 		int N;
+ 		int step;
+ 		IssmDouble time;
+-	
++
+ 	public:
+ 		/*Diverse: must be in front, as it is used in what follows*/
+ 		void GenericEcho(void){/*{{{*/
+@@ -108,12 +108,12 @@
+ 
+ 		/*GenericExternalResult management: */
+ void WriteData(FILE* fid,bool io_gather){ /*{{{*/
+-			
++
+ 	int     my_rank;
+ 	int     type;
+ 	int     size;
+ 	IssmPDouble  passiveDouble;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+@@ -207,7 +207,7 @@
+ 	int     my_rank;
+ 	int     type;
+ 	int     length;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+@@ -237,7 +237,7 @@
+ 	enum_type=in_enum_type;
+ 	M=in_M;
+ 	N=in_N;
+-	
++
+ 	step=in_step;
+ 	time=in_time;
+ 
+@@ -256,7 +256,7 @@
+ 	xDelete<IssmPDouble>(value);
+ } /*}}}*/
+ template <> inline void GenericExternalResult<IssmPDouble*>::Echo(void){ /*{{{*/
+-	
++
+ 	int i,j;
+ 
+ 	_printLine_("GenericExternalResult<IssmPDouble*>:");
+@@ -265,12 +265,12 @@
+ 
+ } /*}}}*/
+ template <> inline void GenericExternalResult<IssmPDouble*>::DeepEcho(void){ /*{{{*/
+-	
++
+ 	int i,j;
+ 
+ 	_printLine_("GenericExternalResult<IssmPDouble*>:");
+ 	this->GenericEcho();
+-	
++
+ 	_printLine_("   matrix size: " << this->M << "-" << this->N);
+ 	for (i=0;i<this->M;i++){  
+ 		_printString_("   [ ");
+@@ -285,14 +285,14 @@
+ 	return new GenericExternalResult<IssmPDouble*>(this->id,this->enum_type,this->value,this->M,this->N,this->step,this->time);
+ } /*}}}*/
+ template <> inline void GenericExternalResult<IssmPDouble*>::WriteData(FILE* fid,bool io_gather){ /*{{{*/
+-	
++
+ 	int     my_rank;
+ 	int     length;
+ 	int     type;
+ 	int     rows,cols;
+ 	char   *name    = NULL;
+ 	IssmPDouble passiveDouble;
+-	
++
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+ 
+Index: ../trunk-jpl/src/c/classes/objects/ExternalResults/ExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ExternalResults/ExternalResult.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/ExternalResults/ExternalResult.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  * \brief abstract class for ExternalResult object
+  */ 
+ 
+-
+ #ifndef _EXTERNALRESULT_H_
+ #define _EXTERNALRESULT_H_
+ 
+@@ -22,7 +21,7 @@
+ class ExternalResult: public Object{
+ 
+ 	public: 
+-		
++
+ 		virtual        ~ExternalResult(){};
+ 		/*Virtual functions:{{{*/
+ 		virtual int   InstanceEnum()=0;
+Index: ../trunk-jpl/src/c/classes/objects/Constraints/Constraint.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Constraints/Constraint.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Constraints/Constraint.h	(revision 13623)
+@@ -17,7 +17,7 @@
+ class Constraint: public Object{
+ 
+ 	public: 
+-		
++
+ 		virtual      ~Constraint(){};
+ 		virtual void ConstrainNode(Nodes* nodes,Parameters* parameters)=0;
+ 		virtual bool InAnalysis(int analysis_type)=0;
+Index: ../trunk-jpl/src/c/classes/objects/Profiler.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Profiler.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Profiler.h	(revision 13623)
+@@ -25,7 +25,6 @@
+ 	Finish
+ };
+ 
+-
+ class Profiler: public Object{
+ 
+ 	public: 
+Index: ../trunk-jpl/src/c/classes/objects/IndependentObject.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/IndependentObject.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/IndependentObject.h	(revision 13623)
+@@ -5,7 +5,6 @@
+ #ifndef _INDEPENDENTOBJECT_H_
+ #define  _INDEPENDENTOBJECT_H_
+ 
+-
+ /*{{{*/
+ #include "./Object.h"
+ #include "../../shared/shared.h"
+@@ -13,13 +12,13 @@
+ class IoModel;
+ 
+ class IndependentObject: public Object{
+-	
++
+ 	public:
+ 
+ 		int name;
+ 		int type;  /*0: scalar, 1: vertex*/
+ 		int numberofvertices;
+-		
++
+ 		/*IndependentObject constructors, destructors {{{*/
+ 		IndependentObject();
+ 		IndependentObject(int name, int type, int numberofvertices);
+Index: ../trunk-jpl/src/c/classes/objects/Node.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Node.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Node.h	(revision 13623)
+@@ -26,7 +26,7 @@
+ 
+ 		int id;    //unique arbitrary id.
+ 		int sid;   //"serial" id (rank of this node if the dataset was serial on 1 cpu)
+-				
++
+ 		DofIndexing  indexing;
+ 		Hook        *hvertex;
+ 		Inputs      *inputs;               //properties of this node
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.h	(revision 13623)
+@@ -2,7 +2,6 @@
+  *  \brief: header file for TriaP1ElementResult object
+  */
+ 
+-
+ #ifndef _TRIAP1ELEMENTRESULT_H_
+ #define _TRIAP1ELEMENTRESULT_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.h	(revision 13623)
+@@ -3,7 +3,6 @@
+  *  this object is just a PentaP1Input with additional time and step info.
+  */
+ 
+-
+ #ifndef _PENTAP1ELEMENTRESULT_H_
+ #define _PENTAP1ELEMENTRESULT_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.h	(revision 13623)
+@@ -3,7 +3,6 @@
+  *  A IssmDouble result object is just derived from a DoubleInput object, with additional time and step information.
+  */
+ 
+-
+ #ifndef _DOUBLEELEMENTRESULT_H_
+ #define _DOUBLEELEMENTRESULT_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.h	(revision 13623)
+@@ -3,7 +3,6 @@
+  *  A boll result object is just derived from a BoolInput object, with additional time and step information.
+  */
+ 
+-
+ #ifndef _BOOLELEMENTRESULT_H_
+ #define _BOOLELEMENTRESULT_H_
+ 
+Index: ../trunk-jpl/src/c/classes/objects/ElementResults/ElementResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ElementResults/ElementResult.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/ElementResults/ElementResult.h	(revision 13623)
+@@ -13,7 +13,7 @@
+ class ElementResult:public Object{
+ 
+ 	public: 
+-		
++
+ 		virtual        ~ElementResult(){};
+ 		virtual         ElementResult* SpawnTriaElementResult(int* indices)=0;
+ 		virtual IssmDouble  GetTime(void)=0;
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 13623)
+@@ -4,7 +4,6 @@
+  * It is derived from Element, so DataSets can contain them.
+  */ 
+ 
+-
+ #ifndef _ELEMENT_H_
+ #define _ELEMENT_H_
+ 
+@@ -24,9 +23,9 @@
+ class Element: public Object,public Update{
+ 
+ 	public: 
+-		
++
+ 		virtual        ~Element(){};
+-	
++
+ 		virtual void   Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters)=0;
+ 		virtual void   SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters)=0;
+ 		virtual void   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>*  Kfs,Vector<IssmDouble>* df)=0;
+@@ -42,7 +41,7 @@
+ 		virtual void   GetInputListOnVertices(IssmDouble* pvalue,int enumtype)=0;
+ 		virtual void   GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue)=0;
+ 		virtual void   GetInputValue(IssmDouble* pvalue,Node* node,int enumtype)=0;
+-		
++
+ 		virtual IssmDouble SurfaceArea(void)=0;
+ 		virtual void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum)=0;
+ 		virtual void   ComputeBasalStress(Vector<IssmDouble>* sigma_b)=0;
+@@ -58,7 +57,7 @@
+ 		virtual void   InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code)=0;
+ 		virtual void   ProcessResultsUnits(void)=0;
+ 		virtual void   RequestedOutput(int output_enum,int step,IssmDouble time)=0;
+-		
++
+ 		virtual int    NodalValue(IssmDouble* pvalue, int index, int natureofdataenum,bool process_units)=0;
+ 		virtual void   InputScale(int enum_type,IssmDouble scale_factor)=0;
+ 		virtual void   GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum)=0;
+Index: ../trunk-jpl/src/c/classes/objects/Elements/TriaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/TriaRef.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Elements/TriaRef.h	(revision 13623)
+@@ -3,19 +3,17 @@
+  * strain rate generation, etc ...
+  */ 
+ 
+-
+ #ifndef _TRIAREF_H_
+ #define _TRIAREF_H_
+ 
+ class GaussTria;
+ 
+ class TriaRef{
+-	
+ 
+ 	public: 
+ 		int* element_type_list; //P1CG, P1DG, MINI, P2...
+ 		int  element_type;
+-		
++
+ 		TriaRef();
+ 		TriaRef(const int nummodels);
+ 		~TriaRef();
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13623)
+@@ -135,7 +135,6 @@
+ 		void   MaxVz(IssmDouble* pmaxvz, bool process_units);
+ 		#endif
+ 
+-
+ 		#ifdef _HAVE_CONTROL_
+ 		IssmDouble DragCoefficientAbsGradient(bool process_units,int weight_index);
+ 		void   GradientIndexing(int* indexing,int control_index);
+@@ -201,7 +200,7 @@
+ 		bool	         IsInput(int name);
+ 		void	         SetClone(int* minranks);
+ 		void	         SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]);
+-		
++
+ 		#ifdef _HAVE_DIAGNOSTIC_
+ 		ElementMatrix* CreateKMatrixDiagnosticMacAyeal(void);
+ 		ElementMatrix* CreateKMatrixDiagnosticMacAyealViscous(void);
+Index: ../trunk-jpl/src/c/classes/objects/Elements/TriaHook.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/TriaHook.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Elements/TriaHook.h	(revision 13623)
+@@ -16,7 +16,6 @@
+ 		Hook*  hmaterial; // 1 ice material
+ 		Hook*  hmatpar; // 1 material parameter
+ 
+-
+ 		/*FUNCTION constructors, destructors {{{*/
+ 		TriaHook();
+ 		TriaHook(int in_numanalyses,int material_id, IoModel* iomodel);
+@@ -26,6 +25,4 @@
+ 
+ };
+ 
+-
+ #endif //ifndef _TRIAHOOK_H_
+-
+Index: ../trunk-jpl/src/c/classes/objects/Elements/PentaRef.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/PentaRef.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Elements/PentaRef.h	(revision 13623)
+@@ -3,17 +3,15 @@
+  * strain rate generation, etc ...
+  */ 
+ 
+-
+ #ifndef _PENTAREF_H_
+ #define _PENTAREF_H_
+ 
+ class PentaRef{
+-	
+ 
+ 	public: 
+ 		int* element_type_list; //P1CG, P1DG, MINI, P2...
+ 		int  element_type;
+-		
++
+ 		PentaRef();
+ 		PentaRef(const int nummodels);
+ 		~PentaRef();
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13623)
+@@ -89,7 +89,7 @@
+ 		IssmDouble GetZcoord(GaussPenta* gauss);
+ 		void   GetVectorFromInputs(Vector<IssmDouble>* vector,int name_enum);
+ 		void   GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int name_enum,int interp);
+-		
++
+ 		int    Sid();
+ 		void   InputArtificialNoise(int enum_type,IssmDouble min, IssmDouble max);
+ 		bool   InputConvergence(IssmDouble* eps, int* enums,int num_enums,int* criterionenums,IssmDouble* criterionvalues,int num_criterionenums);
+@@ -98,7 +98,7 @@
+ 		void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum);
+ 		void   InputDuplicate(int original_enum,int new_enum);
+ 		void   InputScale(int enum_type,IssmDouble scale_factor);
+-		
++
+ 		void   InputToResult(int enum_type,int step,IssmDouble time);
+ 		void   MigrateGroundingLine(IssmDouble* old_floating_ice,IssmDouble* sheet_ungrounding);
+ 		void   PotentialSheetUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding);
+Index: ../trunk-jpl/src/c/classes/objects/Elements/PentaHook.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/PentaHook.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/objects/Elements/PentaHook.h	(revision 13623)
+@@ -28,6 +28,4 @@
+ 		/*}}}*/
+ };
+ 
+-
+ #endif //ifndef _PENTAHOOK_H_
+-
+Index: ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.h	(revision 13623)
+@@ -4,7 +4,6 @@
+ #ifndef _DAKOTAPLUGIN_H
+ #define _DAKOTAPLUGIN_H
+ 
+-
+ #ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
+ 
+ /*Headers:*/
+@@ -48,5 +47,4 @@
+ 
+ #endif //only works if dakota library has been compiled in.
+ 
+-
+ #endif
+Index: ../trunk-jpl/src/c/classes/matrix/ElementVector.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/ElementVector.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/matrix/ElementVector.h	(revision 13623)
+@@ -21,10 +21,10 @@
+ class ElementVector{
+ 
+ 	public:
+-	
++
+ 		int      nrows;
+ 		IssmDouble*  values;
+-		
++
+ 		//gset
+ 		int*     gglobaldoflist;
+ 
+@@ -32,7 +32,7 @@
+ 		int      fsize;
+ 		int*     flocaldoflist;
+ 		int*     fglobaldoflist;
+-		
++
+ 		/*ElementVector constructors, destructors {{{*/
+ 		ElementVector();
+ 		ElementVector(ElementVector* pe1,ElementVector* pe2);
+@@ -50,4 +50,3 @@
+ 		/*}}}*/
+ };
+ #endif //#ifndef _ELEMENT_VECTOR_H_
+-
+Index: ../trunk-jpl/src/c/classes/matrix/ElementMatrix.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/ElementMatrix.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/matrix/ElementMatrix.h	(revision 13623)
+@@ -21,7 +21,7 @@
+ class ElementMatrix{
+ 
+ 	public:
+-	
++
+ 		int      nrows;
+ 		int      ncols;
+ 		bool     dofsymmetrical;
+Index: ../trunk-jpl/src/c/classes/matrix/matrixobjects.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/matrixobjects.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/matrix/matrixobjects.h	(revision 13623)
+@@ -5,12 +5,10 @@
+ #ifndef ALL_MATRIX_OBJECTS_H_
+ #define ALL_MATRIX_OBJECTS_H_
+ 
+-
+ /*Numerics:*/
+ #include "./ElementMatrix.h"
+ #include "./ElementVector.h"
+ #include "./Vector.h"
+ #include "./Matrix.h"
+ 
+-
+ #endif
+Index: ../trunk-jpl/src/c/classes/matrix/Vector.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/Vector.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/matrix/Vector.h	(revision 13623)
+@@ -60,7 +60,6 @@
+ 			svector=NULL;
+ 			type=in_type;
+ 
+-
+ 			if(type==PetscVecType){
+ 			#ifdef _HAVE_PETSC_
+ 				this->pvector=new PetscVec(M,fromlocalsize);
+@@ -170,7 +169,6 @@
+ 		/*FUNCTION SetValues{{{*/
+ 		void SetValues(int ssize, int* list, doubletype* values, InsMode mode){
+ 
+-
+ 			if(type==PetscVecType){
+ 				#ifdef _HAVE_PETSC_
+ 				this->pvector->SetValues(ssize,list,values,mode);
+@@ -183,8 +181,6 @@
+ 			}
+ 			else _error_("Vector type: " << type << " not supported yet!");
+ 
+-
+-
+ 		}
+ 		/*}}}*/
+ 		/*FUNCTION SetValue{{{*/
+@@ -207,7 +203,6 @@
+ 		/*FUNCTION GetValue{{{*/
+ 		void GetValue(doubletype* pvalue,int dof){
+ 
+-
+ 			if(type==PetscVecType){
+ 				#ifdef _HAVE_PETSC_
+ 				this->pvector->GetValue(pvalue,dof);
+@@ -255,7 +250,6 @@
+ 		/*FUNCTION GetLocalSize{{{*/
+ 		void GetLocalSize(int* pM){
+ 
+-
+ 			if(type==PetscVecType){
+ 				#ifdef _HAVE_PETSC_
+ 				this->pvector->GetLocalSize(pM);
+@@ -275,7 +269,6 @@
+ 
+ 			Vector* output=NULL;
+ 
+-
+ 			if(type==PetscVecType){
+ 				#ifdef _HAVE_PETSC_
+ 				output=new Vector();
+@@ -297,7 +290,6 @@
+ 		/*FUNCTION Set{{{*/
+ 		void Set(doubletype value){
+ 
+-
+ 			if(type==PetscVecType){
+ 				#ifdef _HAVE_PETSC_
+ 				this->pvector->Set(value);
+@@ -315,7 +307,6 @@
+ 		/*FUNCTION AXPY{{{*/
+ 		void AXPY(Vector* X, doubletype a){
+ 
+-
+ 			if(type==PetscVecType){
+ 				#ifdef _HAVE_PETSC_
+ 				this->pvector->AXPY(X->pvector,a);
+@@ -333,7 +324,6 @@
+ 		/*FUNCTION AYPX{{{*/
+ 		void AYPX(Vector* X, doubletype a){
+ 
+-
+ 			if(type==PetscVecType){
+ 				#ifdef _HAVE_PETSC_
+ 				this->pvector->AYPX(X->pvector,a);
+@@ -346,7 +336,6 @@
+ 			}
+ 			else _error_("Vector type: " << type << " not supported yet!");
+ 
+-
+ 		}
+ 		/*}}}*/
+ 		/*FUNCTION ToMPISerial{{{*/
+@@ -373,7 +362,6 @@
+ 		/*FUNCTION Copy{{{*/
+ 		void Copy(Vector* to){
+ 
+-
+ 			if(type==PetscVecType){
+ 				#ifdef _HAVE_PETSC_
+ 				this->pvector->Copy(to->pvector);
+@@ -386,7 +374,6 @@
+ 			}
+ 			else _error_("Vector type: " << type << " not supported yet!");
+ 
+-
+ 		}
+ 		/*}}}*/
+ 		/*FUNCTION Norm{{{*/
+@@ -412,7 +399,6 @@
+ 		/*FUNCTION Scale{{{*/
+ 		void Scale(doubletype scale_factor){
+ 
+-
+ 			if(type==PetscVecType){
+ 				#ifdef _HAVE_PETSC_
+ 				this->pvector->Scale(scale_factor);
+@@ -450,7 +436,6 @@
+ 		/*FUNCTION PointwiseDivide{{{*/
+ 		void PointwiseDivide(Vector* x,Vector* y){
+ 
+-
+ 			if(type==PetscVecType){
+ 				#ifdef _HAVE_PETSC_
+ 				this->pvector->PointwiseDivide(x->pvector,y->pvector);
+Index: ../trunk-jpl/src/c/classes/matrix/Matrix.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/Matrix.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/matrix/Matrix.h	(revision 13623)
+@@ -305,7 +305,6 @@
+ 			}
+ 			else _error_("Matrix type: " << type << " not supported yet!");
+ 
+-
+ 			return output;
+ 		}
+ 		/*}}}*/
+Index: ../trunk-jpl/src/c/classes/bamg/Geometry.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Geometry.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/bamg/Geometry.h	(revision 13623)
+@@ -63,6 +63,6 @@
+ 			GeomEdge *Containing(const R2 P, GeomEdge *start) const;
+ 			void             WriteGeometry(BamgGeom *bamggeom, BamgOpts*bamgopts);
+ 	};
+-	
++
+ }
+ #endif
+Index: ../trunk-jpl/src/c/classes/bamg/AdjacentTriangle.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/AdjacentTriangle.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/bamg/AdjacentTriangle.h	(revision 13623)
+@@ -43,4 +43,3 @@
+ 	};
+ }
+ #endif
+-
+Index: ../trunk-jpl/src/c/classes/bamg/Edge.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Edge.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/bamg/Edge.h	(revision 13623)
+@@ -11,7 +11,7 @@
+ 
+ 	//classes
+ 	class Mesh;
+-	
++
+ 	class Edge {
+ 
+ 		public:
+@@ -35,4 +35,3 @@
+ 	};
+ }
+ #endif
+-
+Index: ../trunk-jpl/src/c/classes/bamg/Direction.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Direction.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/bamg/Direction.h	(revision 13623)
+@@ -18,4 +18,3 @@
+ 	};
+ }
+ #endif
+-
+Index: ../trunk-jpl/src/c/classes/IoModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/IoModel.h	(revision 13623)
+@@ -19,10 +19,10 @@
+ 
+ 	private: 
+ 		Parameters *constants;   //this dataset holds all IssmDouble, int, bool and char from input
+-	
++
+ 	public:
+ 		IssmDouble **data;   //this dataset holds temporary data, memory intensive.
+-		
++
+ 		/*This data needs to stay memory resident at all time, even if it's memory intensive: */
+ 		FILE *fid;                               //pointer to input file
+ 		bool *my_elements;
+@@ -35,7 +35,7 @@
+ 		int nodecounter;         //keep track of how many nodes are being created in each analysis type
+ 		int loadcounter;         //keep track of how many loads are being created in each analysis type
+ 		int constraintcounter;   //keep track of how many constraints are being created in each analysis type
+-		
++
+ 		/*for AD mode: to keep track of our independent variables we fetch:*/
+ 		bool* independents;
+ 		DataSet* independent_objects;
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13622)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13623)
+@@ -21,7 +21,6 @@
+ class Profiler;
+ /*}}}*/
+ 
+-
+ class FemModel {
+ 
+ 	/*no private members, as we need access to these datasets quite often!:*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13623-13624.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13623-13624.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13623-13624.diff	(revision 13980)
@@ -0,0 +1,151 @@
+Index: ../trunk-jpl/src/m/classes/matdamageice.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/matdamageice.py	(revision 0)
++++ ../trunk-jpl/src/m/classes/matdamageice.py	(revision 13624)
+@@ -0,0 +1,133 @@
++#module imports
++from fielddisplay import fielddisplay
++from EnumDefinitions import *
++from StringToEnum import StringToEnum
++from checkfield import *
++from WriteData import *
++
++class matdamageice(object):
++	"""
++	MATDAMAGEICE class definition
++
++	   Usage:
++	      matdamageice=matdamageice();
++	"""
++
++	def __init__(self,*args):    # {{{
++		self.rho_ice                    = 0.
++		self.rho_water                  = 0.
++		self.rho_freshwater             = 0.
++		self.mu_water                   = 0.
++		self.heatcapacity               = 0.
++		self.latentheat                 = 0.
++		self.thermalconductivity        = 0.
++		self.meltingpoint               = 0.
++		self.beta                       = 0.
++		self.mixed_layer_capacity       = 0.
++		self.thermal_exchange_velocity  = 0.
++		self.rheology_B   = float('NaN')
++		self.rheology_n   = float('NaN')
++		self.rheology_Z   = float('NaN')
++		self.rheology_law = ''
++
++		if not len(args):
++			self.setdefaultparameters()
++		else:
++			raise RuntimeError("constructor not supported")
++
++	# }}}
++
++	def setdefaultparameters(self):    # {{{
++
++		#ice density (kg/m^3)
++		self.rho_ice=917.
++
++		#ocean water density (kg/m^3)
++		self.rho_water=1023.
++
++		#fresh water density (kg/m^3)
++		self.rho_freshwater=1000.
++
++		#water viscosity (N.s/m^2)
++		self.mu_water=0.001787  
++
++		#ice heat capacity cp (J/kg/K)
++		self.heatcapacity=2093.
++
++		#ice latent heat of fusion L (J/kg)
++		self.latentheat=3.34*10**5
++
++		#ice thermal conductivity (W/m/K)
++		self.thermalconductivity=2.4
++
++		#the melting point of ice at 1 atmosphere of pressure in K
++		self.meltingpoint=273.15
++
++		#rate of change of melting point with pressure (K/Pa)
++		self.beta=9.8*10**-8
++
++		#mixed layer (ice-water interface) heat capacity (J/kg/K)
++		self.mixed_layer_capacity=3974.
++
++		#thermal exchange velocity (ice-water interface) (m/s)
++		self.thermal_exchange_velocity=1.00*10**-4
++
++		#Rheology law: what is the temperature dependence of B with T
++		#available: none, paterson and arrhenius
++		self.rheology_law='Paterson'
++	# }}}
++
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		md = checkfield(md,'materials.rho_ice','>',0)
++		md = checkfield(md,'materials.rho_water','>',0)
++		md = checkfield(md,'materials.rho_freshwater','>',0)
++		md = checkfield(md,'materials.mu_water','>',0)
++		md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices,1])
++		md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements,1])
++		md = checkfield(md,'materials.rheology_Z','>',0,'size',[md.mesh.numberofvertices,1])
++		md = checkfield(md,'materials.rheology_law','values',['None','Paterson','Arrhenius'])
++
++		return md
++	# }}}
++
++	def __repr__(self):    # {{{
++		s ='   Materials:\n'
++
++		s+="%s\n" % fielddisplay(self,"rho_ice","ice density [kg/m^3]")
++		s+="%s\n" % fielddisplay(self,"rho_water","ocean water density [kg/m^3]")
++		s+="%s\n" % fielddisplay(self,"rho_freshwater","fresh water density [kg/m^3]")
++		s+="%s\n" % fielddisplay(self,"mu_water","water viscosity [N s/m^2]")
++		s+="%s\n" % fielddisplay(self,"heatcapacity","heat capacity [J/kg/K]")
++		s+="%s\n" % fielddisplay(self,"thermalconductivity","ice thermal conductivity [W/m/K]")
++		s+="%s\n" % fielddisplay(self,"meltingpoint","melting point of ice at 1atm in K")
++		s+="%s\n" % fielddisplay(self,"latentheat","latent heat of fusion [J/m^3]")
++		s+="%s\n" % fielddisplay(self,"beta","rate of change of melting point with pressure [K/Pa]")
++		s+="%s\n" % fielddisplay(self,"mixed_layer_capacity","mixed layer capacity [W/kg/K]")
++		s+="%s\n" % fielddisplay(self,"thermal_exchange_velocity","thermal exchange velocity [m/s]")
++		s+="%s\n" % fielddisplay(self,"rheology_B","flow law parameter [Pa/s^(1/n)]")
++		s+="%s\n" % fielddisplay(self,"rheology_n","Glen's flow law exponent")
++		s+="%s\n" % fielddisplay(self,"rheology_Z","rheology multiplier")
++		s+="%s\n" % fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: 'None', 'Paterson' or 'Arrhenius'")
++
++		return s
++	# }}}
++
++	def marshall(self,fid):    # {{{
++		WriteData(fid,'enum',MaterialsEnum(),'data',MatdamageiceEnum(),'format','Integer')
++		WriteData(fid,'object',self,'class','materials','fieldname','rho_ice','format','Double')
++		WriteData(fid,'object',self,'class','materials','fieldname','rho_water','format','Double')
++		WriteData(fid,'object',self,'class','materials','fieldname','rho_freshwater','format','Double')
++		WriteData(fid,'object',self,'class','materials','fieldname','mu_water','format','Double')
++		WriteData(fid,'object',self,'class','materials','fieldname','heatcapacity','format','Double')
++		WriteData(fid,'object',self,'class','materials','fieldname','latentheat','format','Double')
++		WriteData(fid,'object',self,'class','materials','fieldname','thermalconductivity','format','Double')
++		WriteData(fid,'object',self,'class','materials','fieldname','meltingpoint','format','Double')
++		WriteData(fid,'object',self,'class','materials','fieldname','beta','format','Double')
++		WriteData(fid,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double')
++		WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double')
++		WriteData(fid,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1)
++		WriteData(fid,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2)
++		WriteData(fid,'object',self,'class','materials','fieldname','rheology_Z','format','DoubleMat','mattype',1)
++		WriteData(fid,'data',StringToEnum(self.rheology_law)[0],'enum',MaterialsRheologyLawEnum(),'format','Integer')
++	# }}}
++
+Index: ../trunk-jpl/src/m/classes/inversion.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.py	(revision 13623)
++++ ../trunk-jpl/src/m/classes/inversion.py	(revision 13624)
+@@ -128,7 +128,7 @@
+ 		md = checkfield(md,'inversion.iscontrol','values',[0,1])
+ 		md = checkfield(md,'inversion.tao','values',[0,1])
+ 		md = checkfield(md,'inversion.incomplete_adjoint','values',[0,1])
+-		md = checkfield(md,'inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','Vx','Vy'])
++		md = checkfield(md,'inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','MaterialsRheologyZbar','Vx','Vy'])
+ 		md = checkfield(md,'inversion.nsteps','numel',[1],'>=',1)
+ 		md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps],'>=',0)
+ 		md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps])
Index: /issm/oecreview/Archive/13393-13976/ISSM-13624-13625.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13624-13625.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13624-13625.diff	(revision 13980)
@@ -0,0 +1,180 @@
+Index: ../trunk-jpl/test/NightlyRun/test274.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.m	(revision 13624)
++++ ../trunk-jpl/test/NightlyRun/test274.m	(revision 13625)
+@@ -1,15 +1,15 @@
+-md=triangle(model,'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000);
++md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000);
+ md=meshprocessrifts(md,'../Exp/Square.exp');
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md.materials=matdamageice();
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+-md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ md.materials.rheology_Z=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'macayeal','all');
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test270.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test270.py	(revision 13625)
+@@ -0,0 +1,32 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from matdamageice import *
++from paterson import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.materials=matdamageice()
++md.materials.rheology_B=paterson(md.initialization.temperature)
++md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
++md.materials.rheology_Z=0.5*numpy.ones((md.mesh.numberofvertices,1))
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test270.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.m	(revision 13624)
++++ ../trunk-jpl/test/NightlyRun/test270.m	(revision 13625)
+@@ -1,13 +1,13 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md.materials=matdamageice();
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+-md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ md.materials.rheology_Z=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test272.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test272.py	(revision 13625)
+@@ -0,0 +1,50 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from matdamageice import *
++from paterson import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.materials=matdamageice()
++md.materials.rheology_B=paterson(md.initialization.temperature)
++md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
++md.materials.rheology_Z=0.5*numpy.ones((md.mesh.numberofvertices,1))
++md=setflowequation(md,'macayeal','all')
++
++#control parameters
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['MaterialsRheologyZbar']
++md.inversion.min_parameters=10**-13*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=101.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.gradient_scaling=0.9*numpy.ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=0.99*numpy.ones((md.inversion.nsteps,1))
++md.inversion.vx_obs=md.initialization.vx 
++md.inversion.vy_obs=md.initialization.vy
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Gradient','Misfits','MaterialsRheologyZbar','Pressure','Vel','Vx','Vy']
++field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
++field_values=[\
++   md.results['DiagnosticSolution'][1]['Gradient1'],\
++   md.results['DiagnosticSolution'][1]['J'],\
++   md.results['DiagnosticSolution'][1]['MaterialsRheologyZbar'],\
++   md.results['DiagnosticSolution'][1]['Pressure'],\
++   md.results['DiagnosticSolution'][1]['Vel'],\
++   md.results['DiagnosticSolution'][1]['Vx'],\
++   md.results['DiagnosticSolution'][1]['Vy'],\
++]
+Index: ../trunk-jpl/test/NightlyRun/test272.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.m	(revision 13624)
++++ ../trunk-jpl/test/NightlyRun/test272.m	(revision 13625)
+@@ -1,9 +1,9 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md.materials=matdamageice();
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+-md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ md.materials.rheology_Z=0.5*ones(md.mesh.numberofvertices,1);
+ md=setflowequation(md,'macayeal','all');
+ 
+@@ -13,23 +13,23 @@
+ md.inversion.min_parameters=10^-13*ones(md.mesh.numberofvertices,1);
+ md.inversion.max_parameters=ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+-md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions=101.*ones(md.inversion.nsteps,1);
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+ md.inversion.gradient_scaling=0.9*ones(md.inversion.nsteps,1);
+-md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
++md.inversion.maxiter_per_step=2.*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+ md.inversion.vx_obs=md.initialization.vx; 
+ md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient' 'Misfits' 'MaterialsRheologyZbar' 'Pressure' 'Vel' 'Vx' 'Vy'};
+ field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+    (md.results.DiagnosticSolution.Gradient1),...
+-   md.results.DiagnosticSolution.J,...
++   (md.results.DiagnosticSolution.J),...
+    (md.results.DiagnosticSolution.MaterialsRheologyZbar),...
+    (md.results.DiagnosticSolution.Pressure),...
+    (md.results.DiagnosticSolution.Vel),...
Index: /issm/oecreview/Archive/13393-13976/ISSM-13625-13626.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13625-13626.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13625-13626.diff	(revision 13980)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/m/classes/initialization.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/initialization.py	(revision 13625)
++++ ../trunk-jpl/src/m/classes/initialization.py	(revision 13626)
+@@ -23,6 +23,8 @@
+ 		self.vel           = float('NaN')
+ 		self.pressure      = float('NaN')
+ 		self.temperature   = float('NaN')
++		self.surfacetemp   = float('NaN')
++		self.basaltemp     = float('NaN')
+ 		self.watercolumn   = float('NaN')
+ 		self.waterfraction = float('NaN')
+ 
+@@ -40,6 +42,8 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'vel','velocity norm'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'pressure','pressure field'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'temperature','temperature in Kelvins'))
++		string="%s\n%s"%(string,fielddisplay(self,'surfacetemp','surface temperature in Kelvins'))
++		string="%s\n%s"%(string,fielddisplay(self,'basaltemp','basal temperature in Kelvins'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'watercolumn','thickness of subglacial water'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'waterfraction','fraction of water in the ice'))
+ 
+@@ -85,6 +89,8 @@
+ 		WriteData(fid,'data',self.vz,'format','DoubleMat','mattype',1,'enum',VzEnum())
+ 		WriteData(fid,'data',self.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum())
+ 		WriteData(fid,'data',self.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum())
++		WriteData(fid,'data',self.surfacetemp,'format','DoubleMat','mattype',1,'enum',TemperatureSurfaceEnum()) 
++		WriteData(fid,'data',self.basaltemp,'format','DoubleMat','mattype',1,'enum',TemperatureBasalEnum())
+ 		WriteData(fid,'data',self.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum())
+ 		WriteData(fid,'data',self.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum())
+ 	# }}}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13626-13627.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13626-13627.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13626-13627.diff	(revision 13980)
@@ -0,0 +1,59 @@
+Index: ../trunk-jpl/src/c/python/include/python_macros.h
+===================================================================
+--- ../trunk-jpl/src/c/python/include/python_macros.h	(revision 13626)
++++ ../trunk-jpl/src/c/python/include/python_macros.h	(revision 13627)
+@@ -44,13 +44,13 @@
+ #if _PYTHON_MAJOR_ >=3
+ /* WRAPPER 3.2 {{{*/
+ #define WRAPPER(modulename,...)  \
+-
++\
+ static PyObject* modulename(PyObject* self,PyObject* args);\
+ static PyMethodDef modulename##_funcs[] = {\
+ 	{#modulename, (PyCFunction)modulename, METH_VARARGS, ""},\
+ 	{NULL,NULL,0,NULL}\
+ };\
+-
++\
+ static struct PyModuleDef modulename##module= {\
+ 	PyModuleDef_HEAD_INIT,\
+ 	#modulename,   /* name of module */\
+@@ -59,31 +59,31 @@
+ 				 or -1 if the module keeps state in global variables. */\
+ 	modulename##_funcs\
+ };\
+-
++\
+ PyMODINIT_FUNC PyInit_##modulename(void){\
+-
++\
+ 	import_array();\
+ 	return PyModule_Create(&modulename##module);\
+ }\
+-
++\
+ static PyObject* modulename(PyObject* self,PyObject* args)
+ /*}}}*/
+ #else
+ /* WRAPPER 2.7 {{{*/
+ #define WRAPPER(modulename,...)  \
+-
++\
+ static PyObject* modulename(PyObject* self,PyObject* args);\
+ static PyMethodDef modulename##_funcs[] = {\
+ 	{#modulename, (PyCFunction)modulename, METH_VARARGS, ""},\
+ 	{NULL,NULL,0,NULL}\
+ };\
+-
++\
+ PyMODINIT_FUNC init##modulename(void){\
+-
++\
+ 	import_array();\
+ 	(void) Py_InitModule(#modulename, modulename##_funcs);\
+ }\
+-
++\
+ static PyObject* modulename(PyObject* self,PyObject* args)
+ /*}}}*/
+ #endif
Index: /issm/oecreview/Archive/13393-13976/ISSM-13627-13628.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13627-13628.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13627-13628.diff	(revision 13980)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/externalpackages/starcluster/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/starcluster/install.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/starcluster/install.sh	(revision 13628)
+@@ -0,0 +1,7 @@
++#/bin/bash
++
++git clone git://github.com/jtriley/StarCluster.git
++
++cd StarCluster
++sudo python distribute_setup.py
++sudo python setup.py install
+
+Property changes on: ../trunk-jpl/externalpackages/starcluster/install.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13628-13629.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13628-13629.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13628-13629.diff	(revision 13980)
@@ -0,0 +1,140 @@
+Index: ../trunk-jpl/src/m/os/issmstscpin.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmstscpin.m	(revision 0)
++++ ../trunk-jpl/src/m/os/issmstscpin.m	(revision 13629)
+@@ -0,0 +1,40 @@
++function issmstscpin(host, login,path, packages)
++%ISSMSCPIN get packages from host, using scp on unix, and pscp on windows
++%
++%   usage: issmstscpin(host,long, path, packages)
++%
++%
++
++%first get hostname
++hostname=oshostname();
++
++%get initial warning mode
++state=warning('query', 'all');
++%remove warnings in case the files do not exist
++warning off
++for i=1:numel(packages),
++	delete(packages{i});
++end
++%back to initial warning state
++warning(state);
++
++%use starcluster to scp 
++%string to copy multiple files using scp: 
++if numel(packages)==1,
++	string=packages{1};
++else
++	string='\{';
++	for i=1:numel(packages)-1,
++		string=[string packages{i} ','];
++	end
++	string=[string packages{end} '\}'];
++end
++
++eval(['!starcluster get ' host ' --user ' login ' ' path '/' string  ' ./']);
++
++%check starcluster get  worked
++for i=1:numel(packages),
++	if ~exist(['./' packages{i}]),
++		error('issmstscpin error message: could not call scp on *nix system');
++	end
++end
+Index: ../trunk-jpl/src/m/classes/clusters/cloud.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/cloud.m	(revision 0)
++++ ../trunk-jpl/src/m/classes/clusters/cloud.m	(revision 13629)
+@@ -0,0 +1,90 @@
++%CLOUD cluster class definition
++%
++%   Usage:
++%      cluster=cloud('name','astrid','np',3);
++%      cluster=cloud('name',oshostname(),'np',3,'login','username');
++
++classdef cloud
++	properties (SetAccess=public) 
++		% {{{
++		name='';
++		login='';
++		np=1;
++		codepath='';
++		executionpath='';
++		interactive=0;
++		%}}}
++	end
++	methods
++		function cluster=cloud(varargin) % {{{
++
++			%use provided options to change fields
++			options=pairoptions(varargin{:});
++
++			%initialize cluster using user settings if provided
++			if (exist([cluster.name '_settings'])==2), eval([cluster.name '_settings']); end
++
++			%OK get other 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('    np: %i',cluster.np));
++			disp(sprintf('    codepath: %s',cluster.codepath));
++			disp(sprintf('    executionpath: %s',cluster.executionpath));
++			disp(sprintf('    interactive: %i',cluster.interactive));
++		end
++		%}}}
++		function md = checkconsistency(cluster,md,solution,analyses) % {{{
++			if cluster.np<1
++				md = checkmessage(md,['number of processors should be at least 1']);
++			end
++			if isnan(cluster.np),
++				md = checkmessage(md,'number of processors should not be NaN!');
++			end
++		end
++		%}}}
++		function BuildQueueScript(cluster,dirname,modelname,solution,io_gather,isvalgrind,isgprof) % {{{
++
++			%write queuing script 
++			fid=fopen([modelname '.queue'],'w');
++			fprintf(fid,'#!/bin/bash\n');
++			if cluster.interactive
++				fprintf(fid,'mpiexec -np %i -f /home/mpich2.hosts %s/issm.exe %s %s %s ',cluster.np,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname);
++			else
++				fprintf(fid,'mpiexec -np %i -f /home/mpich2.hosts %s/issm.exe %s %s %s 2> %s.errlog >%s.outlog ',cluster.np,cluster.codepath,EnumToString(solution),[cluster.executionpath '/' dirname],modelname,modelname,modelname);
++			end
++		end
++		%}}}
++		function LaunchQueueJob(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');
++			issmstscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
++
++			disp('launching solution sequence on remote cluster');
++			launchcommand=['source ' codepath '/etc/environment.sh && cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
++				' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && source  ' modelname '.queue '];
++			issmstssh(cluster.name,cluster.login,cluster.port,launchcommand);
++		end %}}}
++		function Download(cluster,dirname,filelist)% {{{
++
++			%copy files from cluster to current directory
++			directory=[cluster.executionpath '/' dirname '/'];
++			issmstscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
++		end %}}}
++	end
++end
Index: /issm/oecreview/Archive/13393-13976/ISSM-13629-13630.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13629-13630.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13629-13630.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/externalpackages/starcluster/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/starcluster/install.sh	(revision 13629)
++++ ../trunk-jpl/externalpackages/starcluster/install.sh	(revision 13630)
+@@ -3,5 +3,5 @@
+ git clone git://github.com/jtriley/StarCluster.git
+ 
+ cd StarCluster
+-sudo python distribute_setup.py
+-sudo python setup.py install
++python distribute_setup.py
++python setup.py install
+Index: ../trunk-jpl/externalpackages/starcluster
+===================================================================
+--- ../trunk-jpl/externalpackages/starcluster	(revision 13629)
++++ ../trunk-jpl/externalpackages/starcluster	(revision 13630)
+
+Property changes on: ../trunk-jpl/externalpackages/starcluster
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++StarCluster
Index: /issm/oecreview/Archive/13393-13976/ISSM-13630-13631.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13630-13631.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13630-13631.diff	(revision 13980)
@@ -0,0 +1,139 @@
+Index: ../trunk-jpl/src/m/os/issmstssh.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmstssh.m	(revision 0)
++++ ../trunk-jpl/src/m/os/issmstssh.m	(revision 13631)
+@@ -0,0 +1,9 @@
++function issmstssh(host,login,command)
++%ISSMSSH - wrapper for OS independent ssh command.
++%
++%   usage: 
++%      issmstssh(host,command)
++
++
++%just use starcluster command to pipe an ssh command through
++system([starcluster() ' sshmaster ' host ' ''' command '''']);
+Index: ../trunk-jpl/src/m/os/starcluster.m
+===================================================================
+--- ../trunk-jpl/src/m/os/starcluster.m	(revision 0)
++++ ../trunk-jpl/src/m/os/starcluster.m	(revision 13631)
+@@ -0,0 +1,7 @@
++function STARCLUSTER=starcluster()
++%STARCLUSTER - Get path to STARCLUSTER command
++%
++%   Usage:
++%      STARCLUSTER=STARCLUSTER()
++
++STARCLUSTER=[issmdir() '/externalpackages/python/install/bin/starcluster -c ' jplsvn '/projects/CloudComputing/starcluster.config'];
+Index: ../trunk-jpl/src/m/os/issmstscpin.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmstscpin.m	(revision 13630)
++++ ../trunk-jpl/src/m/os/issmstscpin.m	(revision 13631)
+@@ -5,9 +5,6 @@
+ %
+ %
+ 
+-%first get hostname
+-hostname=oshostname();
+-
+ %get initial warning mode
+ state=warning('query', 'all');
+ %remove warnings in case the files do not exist
+@@ -23,14 +20,14 @@
+ if numel(packages)==1,
+ 	string=packages{1};
+ else
+-	string='\{';
++	string='';
+ 	for i=1:numel(packages)-1,
+-		string=[string packages{i} ','];
++		string=[string ' ' path packages{i} ' '];
+ 	end
+-	string=[string packages{end} '\}'];
++	string=[string path packages{end}];
+ end
+ 
+-eval(['!starcluster get ' host ' --user ' login ' ' path '/' string  ' ./']);
++system([starcluster() ' get ' host ' --user ' login ' ' string  ' ./']);
+ 
+ %check starcluster get  worked
+ for i=1:numel(packages),
+Index: ../trunk-jpl/src/m/os/issmstscpout.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmstscpout.m	(revision 0)
++++ ../trunk-jpl/src/m/os/issmstscpout.m	(revision 13631)
+@@ -0,0 +1,18 @@
++function issmstscpout(host,path,login,packages)
++%ISSMSTSCPOUT send packages to a host, using starcluster put on unix
++%
++%   usage: issmstscpout(host,path,login,packages)
++%
++%
++
++%use starcluster put technologiy
++STARCLUSTER=[issmdir() '/externalpackages/python/install/bin/starcluster -c ' jplsvn '/projects/CloudComputing/starcluster.config'];
++
++%create string of packages being sent
++string='';
++for i=1:numel(packages),
++	string=[string ' ' packages{i}];
++end
++string=[string ' '];
++
++system([ STARCLUSTER ' put ' host ' --user ' login ' ' string ' ' path]);
+Index: ../trunk-jpl/src/m/solve/waitonlock.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/waitonlock.m	(revision 13630)
++++ ../trunk-jpl/src/m/solve/waitonlock.m	(revision 13631)
+@@ -11,7 +11,9 @@
+ executionpath=md.cluster.executionpath;
+ cluster=md.cluster.name;
+ login=md.cluster.login;
+-port=md.cluster.port;
++if any(strcmp(properties(md.cluster), 'port')) 
++	port=md.cluster.port;
++end
+ timelimit=md.settings.waitonlock;
+ filename=[executionpath '/' md.private.runtimename '/' md.miscellaneous.name '.lock'];
+ 
+Index: ../trunk-jpl/src/m/classes/clusters/cloud.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/cloud.m	(revision 13630)
++++ ../trunk-jpl/src/m/classes/clusters/cloud.m	(revision 13631)
+@@ -18,11 +18,10 @@
+ 	methods
+ 		function cluster=cloud(varargin) % {{{
+ 
+-			%use provided options to change fields
+-			options=pairoptions(varargin{:});
+-
+ 			%initialize cluster using user settings if provided
+-			if (exist([cluster.name '_settings'])==2), eval([cluster.name '_settings']); end
++			if (exist('cloud_settings')==2), 
++				eval('cloud_settings'); 
++			end
+ 
+ 			%OK get other fields
+ 			cluster=AssignObjectFields(pairoptions(varargin{:}),cluster);
+@@ -73,18 +72,18 @@
+ 			system(compressstring);
+ 
+ 			disp('uploading input file and queueing script');
+-			issmstscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
++			issmstscpout(cluster.name,cluster.executionpath,cluster.login,{[dirname '.tar.gz']});
+ 
+ 			disp('launching solution sequence on remote cluster');
+-			launchcommand=['source ' codepath '/etc/environment.sh && cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
++			launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+ 				' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && source  ' modelname '.queue '];
+-			issmstssh(cluster.name,cluster.login,cluster.port,launchcommand);
++			issmstssh(cluster.name,cluster.login,launchcommand);
+ 		end %}}}
+ 		function Download(cluster,dirname,filelist)% {{{
+ 
+ 			%copy files from cluster to current directory
+ 			directory=[cluster.executionpath '/' dirname '/'];
+-			issmstscpin(cluster.name,cluster.login,cluster.port,directory,filelist);
++			issmstscpin(cluster.name,cluster.login,directory,filelist);
+ 		end %}}}
+ 	end
+ end
Index: /issm/oecreview/Archive/13393-13976/ISSM-13631-13632.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13631-13632.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13631-13632.diff	(revision 13980)
@@ -0,0 +1,33 @@
+Index: ../trunk-jpl/src/m/os/issmstscpin.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmstscpin.m	(revision 13631)
++++ ../trunk-jpl/src/m/os/issmstscpin.m	(revision 13632)
+@@ -27,7 +27,7 @@
+ 	string=[string path packages{end}];
+ end
+ 
+-system([starcluster() ' get ' host ' --user ' login ' ' string  ' ./']);
++system([starcluster() ' get ' host ' -u ' login ' ' string  ' ./']);
+ 
+ %check starcluster get  worked
+ for i=1:numel(packages),
+Index: ../trunk-jpl/src/m/os/issmstscpout.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmstscpout.m	(revision 13631)
++++ ../trunk-jpl/src/m/os/issmstscpout.m	(revision 13632)
+@@ -5,9 +5,6 @@
+ %
+ %
+ 
+-%use starcluster put technologiy
+-STARCLUSTER=[issmdir() '/externalpackages/python/install/bin/starcluster -c ' jplsvn '/projects/CloudComputing/starcluster.config'];
+-
+ %create string of packages being sent
+ string='';
+ for i=1:numel(packages),
+@@ -15,4 +12,4 @@
+ end
+ string=[string ' '];
+ 
+-system([ STARCLUSTER ' put ' host ' --user ' login ' ' string ' ' path]);
++system([ starcluster() ' put ' host ' -u ' login ' ' string ' ' path]);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13632-13633.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13632-13633.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13632-13633.diff	(revision 13980)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/src/m/os/issmstssh.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmstssh.m	(revision 13632)
++++ ../trunk-jpl/src/m/os/issmstssh.m	(revision 13633)
+@@ -6,4 +6,4 @@
+ 
+ 
+ %just use starcluster command to pipe an ssh command through
+-system([starcluster() ' sshmaster ' host ' ''' command '''']);
++system([starcluster() ' sshmaster ' host ' --user ' login ' ''' command '''']);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13633-13634.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13633-13634.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13633-13634.diff	(revision 13980)
@@ -0,0 +1,585 @@
+Index: ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 13633)
++++ ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 13634)
+@@ -265,7 +265,7 @@
+ 
+ 	/*Reallocate segments: */
+ 	segments         =xReNew<double>(segments,         nsegs*3,(nsegs+nriftsegs)*3);
+-	segmentmarkerlist=xReNew<double>(segmentmarkerlist,nsegs*3,(nsegs+nriftsegs)*3);
++	segmentmarkerlist=xReNew<double>(segmentmarkerlist,nsegs,(nsegs+nriftsegs));
+ 
+ 	/*First, update the existing segments to the new nodes :*/
+ 	for (i=0;i<nriftsegs;i++){
+Index: ../trunk-jpl/src/c/shared/shared.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/shared.h	(revision 13633)
++++ ../trunk-jpl/src/c/shared/shared.h	(revision 13634)
+@@ -5,19 +5,19 @@
+ #ifndef _SHARED_H_
+ #define _SHARED_H_
+ 
+-#include "Alloc/alloc.h"
+-#include "Alloc/xNewDelete.h"
+-#include "Bamg/shared.h"
+-#include "Elements/elements.h"
+-#include "Exceptions/exceptions.h"
+-#include "Exp/exp.h"
+-#include "Matrix/matrix.h"
+-#include "MemOps/xMemCpy.h"
+-#include "Numerics/numerics.h"
+-#include "Sorting/sorting.h"
+-#include "String/sharedstring.h"
+-#include "Threads/issm_threads.h"
+-#include "TriMesh/trimesh.h"
+-#include "Wrapper/wrappershared.h"
++#include "./Alloc/alloc.h"
++#include "./Alloc/xNewDelete.h"
++#include "./Bamg/shared.h"
++#include "./Elements/elements.h"
++#include "./Exceptions/exceptions.h"
++#include "./Exp/exp.h"
++#include "./Matrix/matrix.h"
++#include "./MemOps/xMemCpy.h"
++#include "./Numerics/numerics.h"
++#include "./Sorting/sorting.h"
++#include "./String/sharedstring.h"
++#include "./Threads/issm_threads.h"
++#include "./TriMesh/trimesh.h"
++#include "./Wrapper/wrappershared.h"
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13633)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13634)
+@@ -116,6 +116,7 @@
+ #include "./TimeAdaptx/TimeAdaptx.h"
+ #include "./TriaSearchx/TriaSearchx.h"
+ #include "./TriMeshx/TriMeshx.h"
++#include "./TriMeshProcessRiftsx/TriMeshProcessRiftsx.h"
+ #include "./ThicknessAbsMisfitx/ThicknessAbsMisfitx.h"
+ #include "./ThicknessAbsGradientx/ThicknessAbsGradientx.h"
+ #include "./ThicknessAlongGradientx/ThicknessAlongGradientx.h"
+Index: ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.h	(revision 0)
++++ ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.h	(revision 13634)
+@@ -0,0 +1,12 @@
++/*!\file:  TriMeshProcessRiftsx.h
++ * \brief header file for TriMeshProcessRifts module
++ */ 
++
++#ifndef _TRIMESHPROCESSRIFTX_H
++#define _TRIMESHPROCESSRIFTX_H
++
++class RiftStruct;
++
++void TriMeshProcessRiftsx(double** pindex, int* pnel,double** px,double** py,int* pnods,double** psegments,double** psegmentmarkers,int *pnum_seg,RiftStruct **priftstruct);
++
++#endif  /* _TRIMESHPROCESSRIFTX_H*/
+Index: ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.cpp	(revision 0)
++++ ../trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.cpp	(revision 13634)
+@@ -0,0 +1,79 @@
++/*!\file:  TriMeshProcessRifts.cpp
++ * \brief split a mesh where a rift (or fault) is present
++ */ 
++
++#include "./TriMeshProcessRiftsx.h"
++#include "../../classes/RiftStruct.h"
++#include "../../shared/shared.h"
++#include "../../include/include.h"
++#include "../../toolkits/toolkits.h"
++
++void TriMeshProcessRiftsx(double** pindex, int* pnel,double** px,double** py,int* pnods,double** psegments,double** psegmentmarkers,int *pnum_seg,RiftStruct **priftstruct){
++
++	/*Output*/
++	int      numrifts,numrifts0;
++	int     *riftsnumsegments     = NULL;
++	double **riftssegments        = NULL;
++	int     *riftsnumpairs        = NULL;
++	double **riftspairs           = NULL;
++	double  *riftstips            = NULL;
++	double **riftspenaltypairs    = NULL;
++	int     *riftsnumpenaltypairs = NULL;
++
++	/*Recover initial mesh*/
++	int     nel            = *pnel;
++	double *index          = *pindex;
++	double *x              = *px;
++	double *y              = *py;
++	int     nods           = *pnods;
++	double *segments       = *psegments;
++	double *segmentmarkers = *psegmentmarkers;
++	int     num_seg        = *pnum_seg;
++
++	/*Intermediary*/
++	int     riftflag;
++
++	/*First, do some fixing on the existing mesh: we do not want any element belonging entirely to the segment list (ie: 
++	 *all the nodes of this element belong to the segments (tends to happen when there are corners: */
++	RemoveCornersFromRifts(&index,&nel,&x,&y,&nods,segments,segmentmarkers,num_seg);
++
++	/*Figure out if we have rifts, and how many: */
++	IsRiftPresent(&riftflag,&numrifts0,segmentmarkers,num_seg);
++
++	if(!riftflag) _error_("No rift present in mesh");
++
++	/*Split mesh*/
++	SplitMeshForRifts(&nel,&index,&nods,&x,&y,&num_seg,&segments,&segmentmarkers);
++
++	/*Order segments so that their normals point outside the domain: */
++	OrderSegments(&segments,num_seg, index,nel);
++
++	/*We do not want to output segments mixed with rift segments: wring out the rifts from the segments, using the 
++	 *segmentmarkerlist:*/
++	SplitRiftSegments(&segments,&segmentmarkers,&num_seg,&numrifts,&riftsnumsegments,&riftssegments,numrifts0,nods,nel);
++
++	/*Using rift segments, associate rift faces in pairs, each pair face representing opposite flanks of the rifts facing one another directly: */
++	PairRiftElements(&riftsnumpairs,&riftspairs,numrifts,riftsnumsegments,riftssegments,x,y);
++
++	/*Order rifts so that they start from one tip, go to the other tip, and back: */
++	OrderRifts(&riftstips,riftssegments,riftspairs,numrifts,riftsnumsegments,x,y,nods,nel);
++
++	/*Create penalty pairs, used by Imp: */
++	PenaltyPairs(&riftspenaltypairs,&riftsnumpenaltypairs,numrifts,riftssegments,riftsnumsegments,riftspairs,riftstips,x,y);
++
++	/*Create Riftstruct*/
++	RiftStruct* riftstruct = new RiftStruct(numrifts,riftsnumsegments,riftssegments,riftsnumpairs,riftspairs,riftsnumpenaltypairs,riftspenaltypairs,riftstips);
++
++	/*Assign output pointers for mesh*/
++	*pnel            = nel;
++	*pindex          = index;
++	*px              = x;
++	*py              = y;
++	*pnods           = nods;
++	*psegments       = segments;
++	*psegmentmarkers = segmentmarkers;
++	*pnum_seg        = num_seg;
++
++	/*Assign output pointers for rifts*/
++	*priftstruct = riftstruct;
++}
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13633)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13634)
+@@ -359,8 +359,9 @@
+ 					./classes/objects/Options/Option.h\
+ 					./classes/objects/Options/GenericOption.h\
+ 					./classes/objects/Options/OptionUtilities.cpp\
+-					./classes/objects/Options/OptionUtilities.h
+-
++					./classes/objects/Options/OptionUtilities.h\
++					./classes/RiftStruct.cpp\
++					./classes/RiftStruct.h
+ #}}}
+ #DAKOTA sources  {{{
+ dakota_sources = ./classes/dakota/DakotaPlugin.h\
+@@ -847,6 +848,8 @@
+ 			./modules/TriaSearchx/TriaSearchx.cpp\
+ 			./modules/TriMeshx/TriMeshx.h\
+ 			./modules/TriMeshx/TriMeshx.cpp\
++			./modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.h\
++			./modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.cpp\
+ 			./modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.h\
+ 			./modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.cpp\
+ 			./modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp\
+Index: ../trunk-jpl/src/c/classes/DofIndexing.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 13633)
++++ ../trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 13634)
+@@ -9,8 +9,8 @@
+ #endif
+ 
+ #include <stdio.h>
++#include <string.h>
+ #include "./classes.h"
+-#include <string.h>
+ #include "../EnumDefinitions/EnumDefinitions.h"
+ #include "../shared/shared.h"
+ #include "../Container/Container.h"
+Index: ../trunk-jpl/src/c/classes/classes.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/classes.h	(revision 13633)
++++ ../trunk-jpl/src/c/classes/classes.h	(revision 13634)
+@@ -31,5 +31,6 @@
+ #include "./OptPars.h"
+ #include "./AdolcEdf.h"
+ #include "./IssmComm.h"
++#include "./RiftStruct.h"
+ 
+ #endif
+Index: ../trunk-jpl/src/c/classes/objects/Vertex.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Vertex.h	(revision 13633)
++++ ../trunk-jpl/src/c/classes/objects/Vertex.h	(revision 13634)
+@@ -8,13 +8,12 @@
+ /*Headers:*/
+ /*{{{*/
+ #include "../classes.h"
+-class IoModel;
+-template <class doubletype> class Vector;
+-class Parameters;
+ #include "../../shared/Exceptions/exceptions.h"
+ #include "../../toolkits/toolkits.h"
+ #include "../../include/include.h"
+-
++template <class doubletype> class Vector;
++class Parameters;
++class IoModel;
+ /*}}}*/
+ 
+ class Vertex: public Object{
+Index: ../trunk-jpl/src/c/classes/RiftStruct.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/RiftStruct.cpp	(revision 0)
++++ ../trunk-jpl/src/c/classes/RiftStruct.cpp	(revision 13634)
+@@ -0,0 +1,95 @@
++/*!\file RiftStruct.c
++ * \brief: implementation of the RiftStruct object
++ */
++
++#include "./classes.h"
++#include "../EnumDefinitions/EnumDefinitions.h"
++#include "../shared/shared.h"
++#include "../include/include.h"
++
++/*RiftStruct constructors and destructor*/
++RiftStruct::RiftStruct(void){/*{{{*/
++
++	this->numrifts             = 0;
++	this->riftsnumsegments     = NULL;
++	this->riftssegments        = NULL;
++	this->riftsnumpairs        = NULL;
++	this->riftspairs           = NULL;
++	this->riftsnumpenaltypairs = NULL;
++	this->riftspenaltypairs    = NULL;
++	this->riftstips            = NULL;
++	this->state                = NULL;
++
++}/*}}}*/
++RiftStruct::RiftStruct(int numrifts_in,int *riftsnumsegments_in,double **riftssegments_in,int *riftsnumpairs_in,double **riftspairs_in,int *riftsnumpenaltypairs_in,double **riftspenaltypairs_in,double* riftstips_in){/*{{{*/
++
++	int i;
++
++	/*numrifts*/
++	this->numrifts = numrifts_in;
++	if(!numrifts_in) return;
++
++	/*riftsnumsegments*/
++	_assert_(riftsnumsegments_in);
++	this->riftsnumsegments=xNew<int>(numrifts_in);
++	xMemCpy<int>(this->riftsnumsegments,riftsnumsegments_in,numrifts_in);
++
++	/*riftssegments*/
++	_assert_(riftssegments_in);
++	this->riftssegments=xNew<double*>(numrifts_in);
++	for(i=0;i<numrifts_in;i++){
++		this->riftssegments[i]=xNew<double>(riftsnumsegments_in[i]*3);
++		xMemCpy<double>(this->riftssegments[i],riftssegments_in[i],riftsnumsegments_in[i]*3);
++	}
++
++	/*riftsnumpairs*/
++	_assert_(riftsnumpairs_in);
++	this->riftsnumpairs=xNew<int>(numrifts_in);
++	xMemCpy<int>(this->riftsnumpairs,riftsnumpairs_in,numrifts_in);
++
++	/*riftspairs*/
++	_assert_(riftspairs_in);
++	this->riftspairs=xNew<double*>(numrifts_in);
++	for(i=0;i<numrifts_in;i++){
++		this->riftspairs[i]=xNew<double>(riftsnumpairs_in[i]*2);
++		xMemCpy<double>(this->riftspairs[i],riftspairs_in[i],riftsnumpairs_in[i]*2);
++	}
++
++	/*riftsnumpenaltypairs*/
++	_assert_(riftsnumpenaltypairs_in);
++	this->riftsnumpenaltypairs=xNew<int>(numrifts_in);
++	xMemCpy<int>(this->riftsnumpenaltypairs,riftsnumpenaltypairs_in,numrifts_in);
++
++	/*riftspenaltypairs*/
++	_assert_(riftspenaltypairs_in);
++	this->riftspenaltypairs=xNew<double*>(numrifts_in);
++	for(i=0;i<numrifts_in;i++){
++		this->riftspenaltypairs[i]=xNew<double>(riftsnumpenaltypairs_in[i]*7);
++		xMemCpy<double>(this->riftspenaltypairs[i],riftspenaltypairs_in[i],riftsnumpenaltypairs_in[i]*7);
++	}
++
++	/*riftstips*/
++	_assert_(riftstips_in);
++	this->riftstips=xNew<double>(2*numrifts_in);
++	xMemCpy<double>(this->riftstips,riftstips_in,2*numrifts_in);
++
++	/*state*/
++	this->state=xNew<double*>(numrifts_in);
++	for(i=0;i<numrifts_in;i++){
++		this->state[i]=xNew<double>(riftsnumpenaltypairs_in[i]);
++		for(int j=0;j<riftsnumpenaltypairs_in[i];j++) (this->state[i])[j]=FreeEnum;
++	}
++
++}/*}}}*/
++RiftStruct::~RiftStruct(void){/*{{{*/
++
++	xDelete<int>(this->riftsnumsegments);
++	xDelete<double*>(this->riftssegments);
++	xDelete<int>(this->riftsnumpairs);
++	xDelete<double*>(this->riftspairs);
++	xDelete<int>(this->riftsnumpenaltypairs);
++	xDelete<double*>(this->riftspenaltypairs);
++	xDelete<double>(this->riftstips);
++	xDelete<double*>(this->state);
++
++}/*}}}*/
+Index: ../trunk-jpl/src/c/classes/RiftStruct.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/RiftStruct.h	(revision 0)
++++ ../trunk-jpl/src/c/classes/RiftStruct.h	(revision 13634)
+@@ -0,0 +1,26 @@
++/*!\file:  RiftStruct.h
++ * \brief place holder for Rift Structure in mex module
++ */ 
++
++#ifndef _RIFTSTRUCT_H_
++#define _RIFTSTRUCT_H_
++
++class RiftStruct{
++
++	public:
++		int      numrifts;
++		double **riftssegments;
++		int     *riftsnumsegments;
++		double **riftspairs;
++		int     *riftsnumpairs;
++		double **riftspenaltypairs;
++		int     *riftsnumpenaltypairs;
++		double  *riftstips;
++		double **state;
++
++		RiftStruct();
++		RiftStruct(int numrifts_in,int *riftsnumsegments_in,double **riftssegments_in,int *riftsnumpairs_in,double **riftspairs_in,int *riftsnumpenaltypairs_in,double **riftspenaltypairs_in,double* riftstips_in);
++		~RiftStruct();
++};
++
++#endif
+Index: ../trunk-jpl/src/c/classes/Update.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/Update.h	(revision 13633)
++++ ../trunk-jpl/src/c/classes/Update.h	(revision 13634)
+@@ -6,9 +6,8 @@
+ #define  _UPDATE_H_
+ 
+ /*Headers:*/
+-/*{{{*/
+ #include "../shared/shared.h"
+-/*}}}*/
++class IoModel;
+ 
+ class Update{
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13633)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13634)
+@@ -19,6 +19,7 @@
+ class Loads;
+ class Materials;
+ class Profiler;
++class Elements;
+ /*}}}*/
+ 
+ class FemModel {
+Index: ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 13633)
++++ ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 13634)
+@@ -10,21 +10,10 @@
+ 	_printLine_("      where: (index1,x1,y1,segments1,segmentmarkers1) is an initial triangulation.");
+ 	_printLine_("      index2,x2,y2,segments2,segmentmarkers2,rifts2 is the resulting triangulation where rifts have been processed.");
+ }/*}}}*/
+-void TriMeshProcessRiftsx(double** pindex, int* pnel,double** px,double** py,int* pnods,double** psegments,double** psegmentmarkers,int *pnum_seg,
+-			int  *pnumrifts, int  **priftsnumsegments, double ***priftssegments,
+-			int  **priftsnumpairs, double ***priftspairs, double **priftstips,
+-			double ***priftspenaltypairs, int  **priftsnumpenaltypairs);
+ WRAPPER(TriMeshProcessRifts){
+ 
+ 	/* returned quantities: */
+-	int      numrifts;
+-	int     *riftsnumsegments     = NULL;
+-	double **riftssegments        = NULL;
+-	int     *riftsnumpairs        = NULL;
+-	double **riftspairs           = NULL;
+-	double  *riftstips            = NULL;
+-	double **riftspenaltypairs    = NULL;
+-	int     *riftsnumpenaltypairs = NULL;
++	RiftStruct *riftstruct = NULL;
+ 
+ 	/* input: */
+ 	int     nel,nods;
+@@ -50,7 +39,7 @@
+ 
+ 	/*call x layer*/
+ 	TriMeshProcessRiftsx(&index,&nel,&x,&y,&nods,&segments,&segmentmarkers,&num_seg,
+-				&numrifts,&riftsnumsegments,&riftssegments,&riftsnumpairs,&riftspairs,&riftstips,&riftspenaltypairs,&riftsnumpenaltypairs);
++				&riftstruct);
+ 
+ 	/*Output : */
+ 	WriteData(INDEXOUT,index,nel,3);
+@@ -59,15 +48,14 @@
+ 	WriteData(SEGMENTSOUT,segments,num_seg,3);
+ 	WriteData(SEGMENTMARKERSOUT,segmentmarkers,num_seg,1);
+ 
+-	mxArray *pmxa_array  = NULL;
+-	mxArray *pmxa_array2 = NULL;
+-	mxArray *pmxa_array3 = NULL;
++	mxArray    *pmxa_array    = NULL;
++	mxArray    *pmxa_array2   = NULL;
++	mxArray    *pmxa_array3   = NULL;
+ 	const char *fnames[10];
+ 	mwSize      ndim          = 2;
+ 	mwSize      dimensions[2] = {1,1};
+ 	double     *pair          = NULL;
+ 
+-
+ 	/*Create a structure rifts where if i is a rift number, we have the following fields rifts(i).segments and rifts(i).numsegs: */
+ 	fnames[0] = "numsegs";
+ 	fnames[1] = "segments";
+@@ -80,32 +68,32 @@
+ 	fnames[8] = "fractionincrement";
+ 	fnames[9] = "state";
+ 
+-	dimensions[0]=numrifts;
+-	pmxa_array=mxCreateStructArray( ndim,dimensions,10,fnames);
++	dimensions[0]=riftstruct->numrifts;
++	pmxa_array=mxCreateStructArray(ndim,dimensions,10,fnames);
+ 
+-	for(int i=0;i<numrifts;i++){
++	for(int i=0;i<riftstruct->numrifts;i++){
+ 
+ 		/*Segments: */
+-		WriteData(&pmxa_array3,riftssegments[i],riftsnumsegments[i],3);
++		WriteData(&pmxa_array3,riftstruct->riftssegments[i],riftstruct->riftsnumsegments[i],3);
+ 		mxSetField(pmxa_array,i,"segments",pmxa_array3);
+-		mxSetField(pmxa_array,i,"numsegs",mxCreateDoubleScalar((double)riftsnumsegments[i]));
++		mxSetField(pmxa_array,i,"numsegs",mxCreateDoubleScalar((double)riftstruct->riftsnumsegments[i]));
+ 
+ 		/*Element pairs: */
+-		WriteData(&pmxa_array3,riftspairs[i],riftsnumpairs[i],2);
++		WriteData(&pmxa_array3,riftstruct->riftspairs[i],riftstruct->riftsnumpairs[i],2);
+ 		mxSetField(pmxa_array,i,"pairs",pmxa_array3);
+ 
+ 		/*Tips: */
+ 		pmxa_array2= mxCreateDoubleMatrix(0,0,mxREAL);
+ 		mxSetM(pmxa_array2,1);
+ 		pair=(double*)mxMalloc(2*sizeof(double));
+-		pair[0]=*(riftstips+2*i+0);
+-		pair[1]=*(riftstips+2*i+1);
++		pair[0]=*(riftstruct->riftstips+2*i+0);
++		pair[1]=*(riftstruct->riftstips+2*i+1);
+ 		mxSetN(pmxa_array2,2);
+ 		mxSetPr(pmxa_array2,pair);
+ 		mxSetField(pmxa_array,i,"tips",pmxa_array2);
+ 
+ 		/*Penalty pairs: */
+-		WriteData(&pmxa_array3,riftspenaltypairs[i],riftsnumpenaltypairs[i],7);
++		WriteData(&pmxa_array3,riftstruct->riftspenaltypairs[i],riftstruct->riftsnumpenaltypairs[i],7);
+ 		mxSetField(pmxa_array,i,"penaltypairs",pmxa_array3);
+ 
+ 		/*Friction fraction, fractionincrement  and fill: */
+@@ -115,12 +103,10 @@
+ 		mxSetField(pmxa_array,i,"fractionincrement",mxCreateDoubleScalar(0.1)); 
+ 
+ 		/*State: */
+-		double *state=(double*)mxMalloc(riftsnumpenaltypairs[i]*sizeof(double));
+-		for(int j=0;j<riftsnumpenaltypairs[i];j++) state[j]=FreeEnum;
+ 		pmxa_array2= mxCreateDoubleMatrix(0,0,mxREAL);
+ 		mxSetM(pmxa_array2,1);
+-		mxSetN(pmxa_array2,riftsnumpenaltypairs[i]);
+-		mxSetPr(pmxa_array2,state);
++		mxSetN(pmxa_array2,riftstruct->riftsnumpenaltypairs[i]);
++		mxSetPr(pmxa_array2,riftstruct->state[i]);
+ 		mexCallMATLAB( 1, &pmxa_array3, 1, &pmxa_array2, "transpose");
+ 
+ 		mxSetField(pmxa_array,i,"state",pmxa_array3);
+@@ -131,79 +117,3 @@
+ 	/*end module: */
+ 	MODULEEND();
+ }
+-void TriMeshProcessRiftsx(double** pindex, int* pnel,double** px,double** py,int* pnods,double** psegments,double** psegmentmarkers,int *pnum_seg,
+-			int  *pnumrifts, int  **priftsnumsegments, double ***priftssegments,
+-			int  **priftsnumpairs, double ***priftspairs, double **priftstips,
+-			double ***priftspenaltypairs, int  **priftsnumpenaltypairs){
+-
+-	/*Output*/
+-	int      numrifts,numrifts0;
+-	int     *riftsnumsegments     = NULL;
+-	double **riftssegments        = NULL;
+-	int     *riftsnumpairs        = NULL;
+-	double **riftspairs           = NULL;
+-	double  *riftstips            = NULL;
+-	double **riftspenaltypairs    = NULL;
+-	int     *riftsnumpenaltypairs = NULL;
+-
+-	/*Recover initial mesh*/
+-	int     nel            = *pnel;
+-	double *index          = *pindex;
+-	double *x              = *px;
+-	double *y              = *py;
+-	int     nods           = *pnods;
+-	double *segments       = *psegments;
+-	double *segmentmarkers = *psegmentmarkers;
+-	int     num_seg        = *pnum_seg;
+-
+-	/*Intermediary*/
+-	int     riftflag;
+-
+-	/*First, do some fixing on the existing mesh: we do not want any element belonging entirely to the segment list (ie: 
+-	 *all the nodes of this element belong to the segments (tends to happen when there are corners: */
+-	RemoveCornersFromRifts(&index,&nel,&x,&y,&nods,segments,segmentmarkers,num_seg);
+-
+-	/*Figure out if we have rifts, and how many: */
+-	IsRiftPresent(&riftflag,&numrifts0,segmentmarkers,num_seg);
+-
+-	if(!riftflag) _error_("No rift present in mesh");
+-
+-	/*Split mesh*/
+-	SplitMeshForRifts(&nel,&index,&nods,&x,&y,&num_seg,&segments,&segmentmarkers);
+-
+-	/*Order segments so that their normals point outside the domain: */
+-	OrderSegments(&segments,num_seg, index,nel);
+-
+-	/*We do not want to output segments mixed with rift segments: wring out the rifts from the segments, using the 
+-	 *segmentmarkerlist:*/
+-	SplitRiftSegments(&segments,&segmentmarkers,&num_seg,&numrifts,&riftsnumsegments,&riftssegments,numrifts0,nods,nel);
+-
+-	/*Using rift segments, associate rift faces in pairs, each pair face representing opposite flanks of the rifts facing one another directly: */
+-	PairRiftElements(&riftsnumpairs,&riftspairs,numrifts,riftsnumsegments,riftssegments,x,y);
+-
+-	/*Order rifts so that they start from one tip, go to the other tip, and back: */
+-	OrderRifts(&riftstips,riftssegments,riftspairs,numrifts,riftsnumsegments,x,y,nods,nel);
+-
+-	/*Create penalty pairs, used by Imp: */
+-	PenaltyPairs(&riftspenaltypairs,&riftsnumpenaltypairs,numrifts,riftssegments,riftsnumsegments,riftspairs,riftstips,x,y);
+-
+-	/*Assign output pointers for mesh*/
+-	*pnel            = nel;
+-	*pindex          = index;
+-	*px              = x;
+-	*py              = y;
+-	*pnods           = nods;
+-	*psegments       = segments;
+-	*psegmentmarkers = segmentmarkers;
+-	*pnum_seg        = num_seg;
+-
+-	/*Assign output pointers for rifts*/
+-	*pnumrifts             = numrifts;
+-	*priftsnumsegments     = riftsnumsegments;
+-	*priftssegments        = riftssegments;
+-	*priftsnumpairs        = riftsnumpairs;
+-	*priftspairs           = riftspairs;
+-	*priftstips            = riftstips;
+-	*priftspenaltypairs    = riftspenaltypairs;
+-	*priftsnumpenaltypairs = riftsnumpenaltypairs;
+-}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13634-13635.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13634-13635.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13634-13635.diff	(revision 13980)
@@ -0,0 +1,85 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 0)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py	(revision 13635)
+@@ -0,0 +1,67 @@
++import os
++import numpy
++from ContourToMesh import *
++
++def SetIceSheetBC(md):
++	"""
++	SETICESHEETBC - Create the boundary conditions for diagnostic and thermal models for an IceSheet with no Ice Front
++
++	   Usage:
++	      md=SetIceSheetBC(md)
++
++	   See also: SETICESHELFBC, SETMARINEICESHEETBC
++	"""
++
++	#node on Dirichlet
++	pos=numpy.nonzero(md.mesh.vertexonboundary)
++	md.diagnostic.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.diagnostic.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.diagnostic.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.diagnostic.spcvx[pos]=0
++	md.diagnostic.spcvy[pos]=0
++	md.diagnostic.spcvz[pos]=0
++	md.diagnostic.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
++
++	#Dirichlet Values
++	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
++		print "      boundary conditions for diagnostic model: spc set as observed velocities"
++		md.diagnostic.spcvx[pos]=md.inversion.vx_obs[pos]
++		md.diagnostic.spcvy[pos]=md.inversion.vy_obs[pos]
++	else:
++		print "      boundary conditions for diagnostic model: spc set as zero"
++
++	#segment on neumann (Ice Front) -> none
++	if md.mesh.dimension==2:
++		md.diagnostic.icefront=numpy.zeros((0,4))
++	else:
++		md.diagnostic.icefront=numpy.zeros((0,6))
++
++	#Create zeros basal melting rate and surface mass balance if not specified
++	if numpy.all(numpy.isnan(md.surfaceforcings.precipitation)) and (md.surfaceforcings.ispdd==1):
++		md.surfaceforcings.precipitation=numpy.zeros((md.mesh.numberofvertices,1))
++		print "      no surfaceforcings.precipitation specified: values set as zero"
++	if numpy.all(numpy.isnan(md.surfaceforcings.mass_balance)) and (md.surfaceforcings.ispdd==0):
++		md.surfaceforcings.mass_balance=numpy.zeros((md.mesh.numberofvertices,1))
++		print "      no surfaceforcings.mass_balance specified: values set as zero"
++	if numpy.all(numpy.isnan(md.basalforcings.melting_rate)):
++		md.basalforcings.melting_rate=numpy.zeros((md.mesh.numberofvertices,1))
++		print "      no basalforcings.melting_rate specified: values set as zero"
++	if numpy.all(numpy.isnan(md.balancethickness.thickening_rate)):
++		md.balancethickness.thickening_rate=numpy.zeros((md.mesh.numberofvertices,1))
++		print "      no balancethickness.thickening_rate specified: values set as zero"
++
++	md.prognostic.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++	md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++
++	if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
++		md.thermal.spctemperature=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++#		pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
++		pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
++		md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
++		if not isinstance(md.basalforcings.geothermalflux,numpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux)==md.mesh.numberofvertices:
++			md.basalforcings.geothermalflux=50.*10**-3*numpy.ones((md.mesh.numberofvertices,1))    #50 mW/m^2
++	else:
++		print "      no thermal boundary conditions created: no observed temperature found"
++
++	return md
++
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 13634)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m	(revision 13635)
+@@ -57,7 +57,7 @@
+ 	md.thermal.spctemperature=NaN*ones(md.mesh.numberofvertices,1);
+ 	pos=find(md.mesh.vertexonsurface); md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
+ 	if (length(md.basalforcings.geothermalflux)~=md.mesh.numberofvertices),
+-		md.basalforcings.geothermalflux=50*10^-3*ones(md.mesh.numberofvertices,1); %50 mW/m^2
++		md.basalforcings.geothermalflux=50.*10^-3*ones(md.mesh.numberofvertices,1); %50 mW/m^2
+ 	end
+ else
+ 	disp('      no thermal boundary conditions created: no observed temperature found');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13635-13636.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13635-13636.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13635-13636.diff	(revision 13980)
@@ -0,0 +1,242 @@
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 13635)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 13636)
+@@ -1,7 +1,7 @@
+ import os.path
++import netCDF4
++import numpy
+ import inspect
+-import netCDF4
+-from numpy import *
+ from verbose import *
+ from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
+ from paterson import *
+@@ -9,14 +9,14 @@
+ 
+ #Start defining model parameters here
+ #Geometry
+-hmin = 300.
+-hmax = 1000.
+-ymin = min(md.mesh.y)
+-ymax = max(md.mesh.y)
++hmin=300.
++hmax=1000.
++ymin=numpy.min(md.mesh.y)
++ymax=numpy.max(md.mesh.y)
+ 
+-md.geometry.thickness = hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+-md.geometry.surface = md.geometry.bed+md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
+ 
+ #Initial velocity 
+ f = netCDF4.Dataset('../Data/SquareShelfConstrained.nc','r')
+@@ -28,37 +28,43 @@
+ index=f.variables['index'][:]
+ f.close()
+ 
+-[md.initialization.vx] = InterpFromMeshToMesh2d(index, x, y, vx, md.mesh.x, md.mesh.y)
+-[md.initialization.vy] = InterpFromMeshToMesh2d(index, x, y, vy, md.mesh.x, md.mesh.y)
+-md.initialization.vz = zeros((md.mesh.numberofvertices,1))
+-md.initialization.pressure = zeros((md.mesh.numberofvertices,1))
++[md.initialization.vx]=InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y)
++[md.initialization.vy]=InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y)
++md.initialization.vz=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.pressure=numpy.zeros((md.mesh.numberofvertices,1))
++
+ #Materials
+-md.initialization.temperature = (273.-20.)*ones((md.mesh.numberofvertices,1))
+-md.materials.rheology_B = paterson(md.initialization.temperature)
+-md.materials.rheology_n = 3.*ones((md.mesh.numberofelements,1))
++md.initialization.temperature=(273.-20.)*numpy.ones((md.mesh.numberofvertices,1))
++md.materials.rheology_B=paterson(md.initialization.temperature)
++md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
++
+ #Surface mass balance and basal melting
+-md.surfaceforcings.mass_balance = 10.*ones((md.mesh.numberofvertices,1))
+-md.basalforcings.melting_rate = 5.*ones((md.mesh.numberofvertices,1))
++md.surfaceforcings.mass_balance=10.*numpy.ones((md.mesh.numberofvertices,1))
++md.basalforcings.melting_rate=5.*numpy.ones((md.mesh.numberofvertices,1))
++
+ #Friction
+-pos = nonzero(md.mask.elementonfloatingice)
+-md.friction.coefficient = 20.*ones((md.mesh.numberofvertices,1))
+-md.friction.coefficient[md.mesh.elements[pos,:].astype(int)-1] =0.
+-md.friction.p = ones((md.mesh.numberofelements,1))
+-md.friction.q = ones((md.mesh.numberofelements,1))
++pos=numpy.nonzero(md.mask.elementonfloatingice)
++md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1))
++md.friction.coefficient[md.mesh.elements[pos,:].astype(int)-1]=0.
++md.friction.p=numpy.ones((md.mesh.numberofelements,1))
++md.friction.q=numpy.ones((md.mesh.numberofelements,1))
++
+ #Numerical parameters
+-md.diagnostic.viscosity_overshoot = 0.0
+-md.prognostic.stabilization = 1.
+-md.thermal.stabilization = 1.
+-md.verbose = verbose()
+-md.settings.waitonlock = 30.
+-md.diagnostic.restol = 0.05
+-md.diagnostic.reltol = 0.05
+-md.steadystate.reltol = 0.05
+-md.diagnostic.abstol = float('nan')
+-md.timestepping.time_step = 1.
+-md.timestepping.final_time = 3.
++md.diagnostic.viscosity_overshoot=0.0
++md.prognostic.stabilization=1.
++md.thermal.stabilization=1.
++md.verbose = verbose(0)
++md.settings.waitonlock=30.
++md.diagnostic.restol=0.05
++md.diagnostic.reltol=0.05
++md.steadystate.reltol=0.05
++md.diagnostic.abstol=float('nan')
++md.timestepping.time_step=1.
++md.timestepping.final_time=3.
++
+ #Deal with boundary conditions:
+ md = SetIceShelfBC(md)
++
+ #Change name so that no tests have the same name
+ if len(inspect.stack()) > 2:
+ 	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 13635)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.par	(revision 13636)
+@@ -5,8 +5,9 @@
+ hmax=1000;
+ ymin=min(md.mesh.y);
+ ymax=max(md.mesh.y);
++
+ md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin);
+-md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness+20;
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness+20.;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ 
+ %Initial velocity 
+@@ -15,6 +16,7 @@
+ vx    = transpose(ncread('../Data/SquareSheetConstrained.nc','vx'));
+ vy    = transpose(ncread('../Data/SquareSheetConstrained.nc','vy'));
+ index = transpose(ncread('../Data/SquareSheetConstrained.nc','index'));
++
+ md.initialization.vx=InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y);
+ md.initialization.vy=InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y);
+ clear vx vy x y index;
+@@ -22,29 +24,29 @@
+ md.initialization.pressure=zeros(md.mesh.numberofvertices,1);
+ 
+ %Materials
+-md.initialization.temperature=(273-20)*ones(md.mesh.numberofvertices,1);
++md.initialization.temperature=(273.-20.)*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+-md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
+ %Friction
+ pos=find(md.mask.elementonfloatingice);
+-md.friction.coefficient=20*ones(md.mesh.numberofvertices,1);
++md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
+ md.friction.coefficient(md.mesh.elements(pos,:))=0;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.0;
+-md.prognostic.stabilization=1;
+-md.thermal.stabilization=1;
++md.prognostic.stabilization=1.;
++md.thermal.stabilization=1.;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+ md.diagnostic.restol=0.05;
+ md.steadystate.reltol=0.05;
+ md.diagnostic.reltol=0.05;
+ md.diagnostic.abstol=NaN;
+-md.timestepping.time_step=1;
+-md.timestepping.final_time=3;
++md.timestepping.time_step=1.;
++md.timestepping.final_time=3.;
+ 
+ %Boundary conditions:
+ md=SetIceSheetBC(md);
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 0)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 13636)
+@@ -0,0 +1,67 @@
++import os.path
++import netCDF4
++import numpy
++import inspect
++from verbose import *
++from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
++from paterson import *
++from SetIceSheetBC import *
++
++#Start defining model parameters here
++
++#Geometry
++hmin=300
++hmax=1000
++ymin=numpy.min(md.mesh.y)
++ymax=numpy.max(md.mesh.y)
++
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness+20.
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++
++#Initial velocity 
++f = netCDF4.Dataset('../Data/SquareSheetConstrained.nc','r')
++x     = numpy.reshape(f.variables['x'][:],(-1))
++y     = numpy.reshape(f.variables['y'][:],(-1))
++vx    = f.variables['vx'][:]
++vy    = f.variables['vy'][:]
++index = f.variables['index'][:]
++f.close()
++
++[md.initialization.vx]=InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y)
++[md.initialization.vy]=InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y)
++md.initialization.vz=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.pressure=numpy.zeros((md.mesh.numberofvertices,1))
++
++#Materials
++md.initialization.temperature=(273.-20.)*numpy.ones((md.mesh.numberofvertices,1))
++md.materials.rheology_B=paterson(md.initialization.temperature)
++md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
++
++#Friction
++pos=numpy.nonzero(md.mask.elementonfloatingice)
++md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1))
++md.friction.coefficient[md.mesh.elements[pos,:].astype(int)-1]=0.
++md.friction.p=numpy.ones((md.mesh.numberofelements,1))
++md.friction.q=numpy.ones((md.mesh.numberofelements,1))
++
++#Numerical parameters
++md.diagnostic.viscosity_overshoot=0.0
++md.prognostic.stabilization=1.
++md.thermal.stabilization=1.
++md.verbose=verbose(0)
++md.settings.waitonlock=30.
++md.diagnostic.restol=0.05
++md.steadystate.reltol=0.05
++md.diagnostic.reltol=0.05
++md.diagnostic.abstol=float('NaN')
++md.timestepping.time_step=1.
++md.timestepping.final_time=3.
++
++#Boundary conditions:
++md=SetIceSheetBC(md)
++
++#Change name so that no test have the same name
++if len(inspect.stack()) > 2:
++	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
++
+
+Property changes on: ../trunk-jpl/test/Par/SquareSheetConstrained.py
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13636-13637.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13636-13637.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13636-13637.diff	(revision 13980)
@@ -0,0 +1,426 @@
+Index: ../trunk-jpl/test/NightlyRun/test303.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test303.m	(revision 13636)
++++ ../trunk-jpl/test/NightlyRun/test303.m	(revision 13637)
+@@ -1,9 +1,9 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'hutter','../Exp/SquareHalfRight.exp','fill','macayeal');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test306.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test306.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test306.py	(revision 13637)
+@@ -0,0 +1,27 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(4,2)
++md=setflowequation(md,'hutter','../Exp/SquareHalfRight.exp','fill','macayeal')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test301.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test301.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test301.py	(revision 13637)
+@@ -0,0 +1,25 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test304.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test304.m	(revision 13636)
++++ ../trunk-jpl/test/NightlyRun/test304.m	(revision 13637)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,2);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test307.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test307.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test307.py	(revision 13637)
+@@ -0,0 +1,27 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-09,1e-09,2e-10,2e-10,1e-10]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test305.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test305.m	(revision 13636)
++++ ../trunk-jpl/test/NightlyRun/test305.m	(revision 13637)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,5,2);
+ md=setflowequation(md,'hutter','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test302.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test302.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test302.py	(revision 13637)
+@@ -0,0 +1,25 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md=setflowequation(md,'hutter','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test306.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test306.m	(revision 13636)
++++ ../trunk-jpl/test/NightlyRun/test306.m	(revision 13637)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,4,2);
+ md=setflowequation(md,'hutter','../Exp/SquareHalfRight.exp','fill','macayeal');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test308.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test308.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test308.py	(revision 13637)
+@@ -0,0 +1,27 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'stokes','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test303.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test303.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test303.py	(revision 13637)
+@@ -0,0 +1,25 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md=setflowequation(md,'hutter','../Exp/SquareHalfRight.exp','fill','macayeal')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test307.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test307.m	(revision 13636)
++++ ../trunk-jpl/test/NightlyRun/test307.m	(revision 13637)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test309.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test309.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test309.py	(revision 13637)
+@@ -0,0 +1,22 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,PrognosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['PrognosticSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test308.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test308.m	(revision 13636)
++++ ../trunk-jpl/test/NightlyRun/test308.m	(revision 13637)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test304.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test304.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test304.py	(revision 13637)
+@@ -0,0 +1,27 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,2)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test301.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test301.m	(revision 13636)
++++ ../trunk-jpl/test/NightlyRun/test301.m	(revision 13637)
+@@ -1,9 +1,9 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test309.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test309.m	(revision 13636)
++++ ../trunk-jpl/test/NightlyRun/test309.m	(revision 13637)
+@@ -1,9 +1,9 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test305.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test305.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test305.py	(revision 13637)
+@@ -0,0 +1,27 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(5,2)
++md=setflowequation(md,'hutter','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test302.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test302.m	(revision 13636)
++++ ../trunk-jpl/test/NightlyRun/test302.m	(revision 13637)
+@@ -1,9 +1,9 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'hutter','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
Index: /issm/oecreview/Archive/13393-13976/ISSM-13637-13638.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13637-13638.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13637-13638.diff	(revision 13980)
@@ -0,0 +1,121 @@
+Index: ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp	(revision 13637)
++++ ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp	(revision 13638)
+@@ -291,7 +291,54 @@
+ 	*pdataref=dataref;
+ }
+ /*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref,RiftStruct* riftstruct){{{*/
++void WriteData(mxArray** pdataref,RiftStruct* riftstruct){
+ 
++	/*Intermediary*/
++	int         i;
++	mxArray    *dataref           = NULL;
++	const int   numfields         = 10;
++	const char *fnames[numfields];
++	mwSize      ndim              = 2;
++	mwSize      dimensions[2]     = {1,1};
++
++	/*Initialize field names*/
++	i=0;
++	fnames[i++] = "numsegs";
++	fnames[i++] = "segments";
++	fnames[i++] = "pairs";
++	fnames[i++] = "tips";
++	fnames[i++] = "penaltypairs";
++	fnames[i++] = "fill";
++	fnames[i++] = "friction";
++	fnames[i++] = "fraction";
++	fnames[i++] = "fractionincrement";
++	fnames[i++] = "state";
++	_assert_(i==numfields);
++
++	/*Initialize matlab structure of dimension numrifts*/
++	dimensions[0]=riftstruct->numrifts;
++	dataref=mxCreateStructArray(ndim,dimensions,numfields,fnames);
++
++	/*set each matlab each field*/
++	for(int i=0;i<riftstruct->numrifts;i++){
++		SetStructureFieldi(dataref,i,"numsegs"          ,riftstruct->riftsnumsegments[i]);
++		SetStructureFieldi(dataref,i,"segments"         ,riftstruct->riftsnumsegments[i]    ,3,riftstruct->riftssegments[i]);
++		SetStructureFieldi(dataref,i,"pairs"            ,riftstruct->riftsnumpairs[i]       ,2,riftstruct->riftspairs[i]);
++		SetStructureFieldi(dataref,i,"tips"             ,1                                  ,2,&riftstruct->riftstips[2*i]);
++		SetStructureFieldi(dataref,i,"penaltypairs"     ,riftstruct->riftsnumpenaltypairs[i],7,riftstruct->riftspenaltypairs[i]);
++		SetStructureFieldi(dataref,i,"friction"         ,0);
++		SetStructureFieldi(dataref,i,"fill"             ,IceEnum);
++		SetStructureFieldi(dataref,i,"fraction"         ,0.);
++		SetStructureFieldi(dataref,i,"fractionincrement",0.1);
++		SetStructureFieldi(dataref,i,"state"            ,riftstruct->riftsnumpenaltypairs[i],1,riftstruct->state[i]);
++	}
++
++	/*Assign output*/
++	*pdataref=dataref;
++}
++/*}}}*/
++
+ /*Toolkit*/
+ /*FUNCTION SetStructureField{{{*/
+ void SetStructureField(mxArray* dataref,const char* fieldname,int M,int N,double* fieldpointer){
+@@ -305,3 +352,39 @@
+ 	mxSetField(dataref,0,fieldname,field);
+ }
+ /*}}}*/
++/*FUNCTION SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int M,int N,double* fieldpointer){{{*/
++void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int M,int N,double* fieldpointer){
++
++	mxArray* field = NULL;
++
++	/*Convert field*/
++	WriteData(&field,fieldpointer,M,N);
++
++	/*Assign to structure*/
++	mxSetField(dataref,i,fieldname,field);
++}
++/*}}}*/
++/*FUNCTION SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int field){{{*/
++void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int fieldin){
++
++	mxArray* field = NULL;
++
++	/*Convert field*/
++	WriteData(&field,fieldin);
++
++	/*Assign to structure*/
++	mxSetField(dataref,i,fieldname,field);
++}
++/*}}}*/
++/*FUNCTION SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,double field){{{*/
++void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,double fieldin){
++
++	mxArray* field = NULL;
++
++	/*Convert field*/
++	WriteData(&field,fieldin);
++
++	/*Assign to structure*/
++	mxSetField(dataref,i,fieldname,field);
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/matlab/io/matlabio.h
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/matlabio.h	(revision 13637)
++++ ../trunk-jpl/src/c/matlab/io/matlabio.h	(revision 13638)
+@@ -28,6 +28,7 @@
+ void WriteData(mxArray** pdataref);
+ void WriteData(mxArray** pdataref,BamgGeom* bamggeom);
+ void WriteData(mxArray** pdataref,BamgMesh* bamgmesh);
++void WriteData(mxArray** pdataref,RiftStruct* riftstruct);
+ 
+ void FetchData(double** pmatrix,int* pM,int *pN,const mxArray* dataref);
+ void FetchData(double** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref);
+@@ -61,6 +62,9 @@
+ 
+ mxArray* mxGetAssignedField(const mxArray* pmxa_array,int number, const char* field);
+ void SetStructureField(mxArray* dataref,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer);
++void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer);
++void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int field);
++void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,double field);
+ int CheckNumMatlabArguments(int nlhs,int NLHS, int nrhs,int NRHS, const char* THISFUNCTION, void (*function)( void ));
+ 
+ /*Matlab to Matrix routines: */
Index: /issm/oecreview/Archive/13393-13976/ISSM-13638-13639.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13638-13639.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13638-13639.diff	(revision 13980)
@@ -0,0 +1,111 @@
+Index: ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 13638)
++++ ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 13639)
+@@ -38,8 +38,7 @@
+ 	FetchData(&segmentmarkers,NULL,SEGMENTMARKERSIN);
+ 
+ 	/*call x layer*/
+-	TriMeshProcessRiftsx(&index,&nel,&x,&y,&nods,&segments,&segmentmarkers,&num_seg,
+-				&riftstruct);
++	TriMeshProcessRiftsx(&index,&nel,&x,&y,&nods,&segments,&segmentmarkers,&num_seg,&riftstruct);
+ 
+ 	/*Output : */
+ 	WriteData(INDEXOUT,index,nel,3);
+@@ -47,73 +46,8 @@
+ 	WriteData(YOUT,y,nods,1);
+ 	WriteData(SEGMENTSOUT,segments,num_seg,3);
+ 	WriteData(SEGMENTMARKERSOUT,segmentmarkers,num_seg,1);
++	WriteData(RIFTSTRUCT,riftstruct);
+ 
+-	mxArray    *pmxa_array    = NULL;
+-	mxArray    *pmxa_array2   = NULL;
+-	mxArray    *pmxa_array3   = NULL;
+-	const char *fnames[10];
+-	mwSize      ndim          = 2;
+-	mwSize      dimensions[2] = {1,1};
+-	double     *pair          = NULL;
+-
+-	/*Create a structure rifts where if i is a rift number, we have the following fields rifts(i).segments and rifts(i).numsegs: */
+-	fnames[0] = "numsegs";
+-	fnames[1] = "segments";
+-	fnames[2] = "pairs";
+-	fnames[3] = "tips";
+-	fnames[4] = "penaltypairs";
+-	fnames[5] = "fill";
+-	fnames[6] = "friction";
+-	fnames[7] = "fraction";
+-	fnames[8] = "fractionincrement";
+-	fnames[9] = "state";
+-
+-	dimensions[0]=riftstruct->numrifts;
+-	pmxa_array=mxCreateStructArray(ndim,dimensions,10,fnames);
+-
+-	for(int i=0;i<riftstruct->numrifts;i++){
+-
+-		/*Segments: */
+-		WriteData(&pmxa_array3,riftstruct->riftssegments[i],riftstruct->riftsnumsegments[i],3);
+-		mxSetField(pmxa_array,i,"segments",pmxa_array3);
+-		mxSetField(pmxa_array,i,"numsegs",mxCreateDoubleScalar((double)riftstruct->riftsnumsegments[i]));
+-
+-		/*Element pairs: */
+-		WriteData(&pmxa_array3,riftstruct->riftspairs[i],riftstruct->riftsnumpairs[i],2);
+-		mxSetField(pmxa_array,i,"pairs",pmxa_array3);
+-
+-		/*Tips: */
+-		pmxa_array2= mxCreateDoubleMatrix(0,0,mxREAL);
+-		mxSetM(pmxa_array2,1);
+-		pair=(double*)mxMalloc(2*sizeof(double));
+-		pair[0]=*(riftstruct->riftstips+2*i+0);
+-		pair[1]=*(riftstruct->riftstips+2*i+1);
+-		mxSetN(pmxa_array2,2);
+-		mxSetPr(pmxa_array2,pair);
+-		mxSetField(pmxa_array,i,"tips",pmxa_array2);
+-
+-		/*Penalty pairs: */
+-		WriteData(&pmxa_array3,riftstruct->riftspenaltypairs[i],riftstruct->riftsnumpenaltypairs[i],7);
+-		mxSetField(pmxa_array,i,"penaltypairs",pmxa_array3);
+-
+-		/*Friction fraction, fractionincrement  and fill: */
+-		mxSetField(pmxa_array,i,"friction",mxCreateDoubleScalar(0));
+-		mxSetField(pmxa_array,i,"fill",mxCreateDoubleScalar(IceEnum)); //default is ice
+-		mxSetField(pmxa_array,i,"fraction",mxCreateDoubleScalar(0)); //default is ice
+-		mxSetField(pmxa_array,i,"fractionincrement",mxCreateDoubleScalar(0.1)); 
+-
+-		/*State: */
+-		pmxa_array2= mxCreateDoubleMatrix(0,0,mxREAL);
+-		mxSetM(pmxa_array2,1);
+-		mxSetN(pmxa_array2,riftstruct->riftsnumpenaltypairs[i]);
+-		mxSetPr(pmxa_array2,riftstruct->state[i]);
+-		mexCallMATLAB( 1, &pmxa_array3, 1, &pmxa_array2, "transpose");
+-
+-		mxSetField(pmxa_array,i,"state",pmxa_array3);
+-	}
+-
+-	plhs[5]=pmxa_array;
+-
+ 	/*end module: */
+ 	MODULEEND();
+ }
+Index: ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h
+===================================================================
+--- ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 13638)
++++ ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 13639)
+@@ -38,7 +38,7 @@
+ #define YOUT              (mxArray**)&plhs[2]
+ #define SEGMENTSOUT       (mxArray**)&plhs[3]
+ #define SEGMENTMARKERSOUT (mxArray**)&plhs[4]
+-#define RIFTSTRUCTOUT     (mxArray**)&plhs[5]
++#define RIFTSTRUCT        (mxArray**)&plhs[5]
+ #endif
+ 
+ #ifdef _HAVE_PYTHON_MODULES_
+@@ -54,7 +54,7 @@
+ #define YOUT              output,2
+ #define SEGMENTSOUT       output,3
+ #define SEGMENTMARKERSOUT output,4
+-#define RIFTSTRUCTOUT     output,5
++#define RIFTSTRUCT        output,5
+ #endif
+ 
+ /* serial arg counts: */
Index: /issm/oecreview/Archive/13393-13976/ISSM-13639-13640.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13639-13640.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13639-13640.diff	(revision 13980)
@@ -0,0 +1,137 @@
+Index: ../trunk-jpl/src/c/python/io/pythonio.h
+===================================================================
+--- ../trunk-jpl/src/c/python/io/pythonio.h	(revision 13639)
++++ ../trunk-jpl/src/c/python/io/pythonio.h	(revision 13640)
+@@ -23,6 +23,7 @@
+ void WriteData(PyObject* py_tuple,int index, SeqVec<double>* vector);
+ void WriteData(PyObject* py_tuple,int index, BamgGeom* bamggeom);
+ void WriteData(PyObject* py_tuple,int index, BamgMesh* bamgmesh);
++void WriteData(PyObject* py_tuple,int index, RiftStruct* riftstruct);
+ 
+ void FetchData(double** pvector,int* pM,PyObject* py_ref);
+ void FetchData(double** pmatrix,int* pM,int *pN,PyObject* py_array);
+Index: ../trunk-jpl/src/c/python/io/WritePythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13639)
++++ ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13640)
+@@ -99,22 +99,6 @@
+ 	PyTuple_SetItem(py_tuple, index, dict);
+ }
+ /*}}}*/
+-/*FUNCTION PyArrayFromCopiedData(int dims[2],double* data){{{*/
+-PyObject* PyArrayFromCopiedData(int dims[2],double* data){
+-
+-	double* pydata;
+-	npy_intp pydims[2]={0,0};
+-
+-	/*  note that PyArray_SimpleNewFromData does not copy the data, so that when the original
+-	object (e.g. bamggeom,bamgmesh) is deleted, the data is gone.  */
+-
+-	pydims[0]=(npy_intp)dims[0];
+-	pydims[1]=(npy_intp)dims[1];
+-	pydata=xNew<IssmDouble>(dims[0]*dims[1]);
+-	memcpy(pydata,data,dims[0]*dims[1]*sizeof(double));
+-	return PyArray_SimpleNewFromData(2,pydims,NPY_DOUBLE,pydata);
+-}
+-/*}}}*/
+ /*FUNCTION WriteData(PyObject* py_tuple,int index,SeqMat<double>* matrix){{{*/
+ void WriteData(PyObject* py_tuple,int index,SeqMat<double>* matrix){
+ 
+@@ -148,3 +132,27 @@
+ 	PyTuple_SetItem(py_tuple, index, array);
+ }
+ /*}}}*/
++/*FUNCTION WriteData(PyObject* py_tuple,int index,RiftStruct* riftstruct){{{*/
++void WriteData(PyObject* py_tuple,int index,RiftStruct* riftstruct){
++
++	_error_("not implemented yet... good luck John!");
++}
++/*}}}*/
++
++/*Utils*/
++/*FUNCTION PyArrayFromCopiedData(int dims[2],double* data){{{*/
++PyObject* PyArrayFromCopiedData(int dims[2],double* data){
++
++	double* pydata;
++	npy_intp pydims[2]={0,0};
++
++	/*  note that PyArray_SimpleNewFromData does not copy the data, so that when the original
++		 object (e.g. bamggeom,bamgmesh) is deleted, the data is gone.  */
++
++	pydims[0]=(npy_intp)dims[0];
++	pydims[1]=(npy_intp)dims[1];
++	pydata=xNew<IssmDouble>(dims[0]*dims[1]);
++	memcpy(pydata,data,dims[0]*dims[1]*sizeof(double));
++	return PyArray_SimpleNewFromData(2,pydims,NPY_DOUBLE,pydata);
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/shared/TriMesh/trimesh.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/trimesh.h	(revision 13639)
++++ ../trunk-jpl/src/c/shared/TriMesh/trimesh.h	(revision 13640)
+@@ -21,7 +21,6 @@
+ void RiftSegmentsFromSegments(int* pnriftsegs, int** priftsegments, int nel, double* index, int nsegs,double* segments);
+ int DetermineGridElementListOnOneSideOfRift(int* pNumGridElementListOnOneSideOfRift, int** pGridElementListOnOneSideOfRift, int segmentnumber, int nriftsegs, int* riftsegments, int node,double* index,int nel);
+ int UpdateSegments(double** psegments,double** psegmentmarkerlist, int* pnsegs, double* index, double* x,double* y,int* riftsegments,int nriftsegs,int nods,int nel);
+-int pnpoly(int npol, double *xp, double *yp, double x, double y);
+ int FindElement(double A,double B,double* index,int nel);
+ int RemoveRifts(double** pindex,double** px,double** py,int* pnods,double** psegments,int* pnumsegs,int numrifts1,int* rifts1numsegs,double** rifts1segments,double** rifts1pairs,int nel);
+ int IsRiftPresent(int* priftflag,int* pnumrifts, double* segmentmarkerlist,int nsegs);
+Index: ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 13639)
++++ ../trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp	(revision 13640)
+@@ -346,17 +346,6 @@
+ 
+ 	return noerr;
+ }/*}}}*/
+-/*FUNCTION pnpoly{{{*/
+-int pnpoly(int npol, double *xp, double *yp, double x, double y) {
+-	int i, j, c = 0;
+-	for (i = 0, j = npol-1; i < npol; j = i++) {
+-		if ((((yp[i]<=y) && (y<yp[j])) ||
+-					((yp[j]<=y) && (y<yp[i]))) &&
+-				(x < (xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i]))
+-			c = !c;
+-	}
+-	return c;
+-}/*}}}*/
+ /*FUNCTION FindElement{{{*/
+ int FindElement(double A,double B,double* index,int nel){
+ 
+Index: ../trunk-jpl/src/modules/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/modules/python/Makefile.am	(revision 13639)
++++ ../trunk-jpl/src/modules/python/Makefile.am	(revision 13640)
+@@ -13,7 +13,8 @@
+ 						InterpFromMeshToMesh2d.la\
+ 						NodeConnectivity.la\
+ 						StringToEnum.la\
+-						TriMesh.la
++						TriMesh.la\
++						TriMeshProcessRifts.la
+ endif 
+ #}}}
+ #Flags and libraries {{{
+@@ -96,4 +97,8 @@
+ TriMesh_la_SOURCES = ../TriMesh/TriMesh.cpp\
+ 							../TriMesh/TriMesh.h
+ TriMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(TRIANGLELIB)
++
++TriMeshProcessRifts_la_SOURCES = ../TriMeshProcessRifts/TriMeshProcessRifts.cpp\
++											../TriMeshProcessRifts/TriMeshProcessRifts.h
++TriMeshProcessRifts_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+ #}}}
+Index: ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h
+===================================================================
+--- ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 13639)
++++ ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 13640)
+@@ -47,7 +47,7 @@
+ #define XIN              PyTuple_GetItem(args,1)
+ #define YIN              PyTuple_GetItem(args,2)
+ #define SEGMENTSIN       PyTuple_GetItem(args,3)
+-#define SEGMENTSMARKERSIN PyTuple_GetItem(args,4)
++#define SEGMENTMARKERSIN PyTuple_GetItem(args,4)
+ /* serial output macros: */
+ #define INDEXOUT          output,0
+ #define XOUT              output,1
Index: /issm/oecreview/Archive/13393-13976/ISSM-13640-13641.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13640-13641.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13640-13641.diff	(revision 13980)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/Par/SquareShelfConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 13640)
++++ ../trunk-jpl/test/Par/SquareShelfConstrained.py	(revision 13641)
+@@ -21,8 +21,8 @@
+ #Initial velocity 
+ f = netCDF4.Dataset('../Data/SquareShelfConstrained.nc','r')
+ #Reshape as Rank-1 arrays
+-x=reshape(f.variables['x'][:],(-1))
+-y=reshape(f.variables['y'][:],(-1))
++x=numpy.reshape(f.variables['x'][:],(-1))
++y=numpy.reshape(f.variables['y'][:],(-1))
+ vx=f.variables['vx'][:]
+ vy=f.variables['vy'][:]
+ index=f.variables['index'][:]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13641-13642.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13641-13642.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13641-13642.diff	(revision 13980)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/src/m/classes/inversion.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.py	(revision 13641)
++++ ../trunk-jpl/src/m/classes/inversion.py	(revision 13642)
+@@ -95,10 +95,10 @@
+ 		#usually the gradient_scaling must be of the order of magnitude of the 
+ 		#inversed parameter (10^8 for B, 50 for drag) and can be decreased
+ 		#after the first iterations
+-		self.gradient_scaling=50*numpy.ones(self.nsteps)
++		self.gradient_scaling=50*numpy.ones((self.nsteps,1))
+ 
+ 		#several responses can be used:
+-		self.cost_functions=101*numpy.ones(self.nsteps)
++		self.cost_functions=101*numpy.ones((self.nsteps,1))
+ 
+ 		#step_threshold is used to speed up control method. When
+ 		#misfit(1)/misfit(0) < self.step_threshold, we go directly to
+@@ -123,7 +123,7 @@
+ 			return md
+ 
+ 		num_controls=numpy.size(md.inversion.control_parameters)
+-		num_costfunc=numpy.size(md.inversion.cost_functions,1)
++		num_costfunc=numpy.size(md.inversion.cost_functions,axis=1)
+ 
+ 		md = checkfield(md,'inversion.iscontrol','values',[0,1])
+ 		md = checkfield(md,'inversion.tao','values',[0,1])
+@@ -176,7 +176,7 @@
+ 		WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer')
+ 
+ 		#process cost functions
+-		num_cost_functions=numpy.size(self.cost_functions,1)
++		num_cost_functions=numpy.size(self.cost_functions,axis=1)
+ 		data=self.cost_functions
+ 		data[numpy.nonzero(data==101)]=SurfaceAbsVelMisfitEnum()
+ 		data[numpy.nonzero(data==102)]=SurfaceRelVelMisfitEnum()
Index: /issm/oecreview/Archive/13393-13976/ISSM-13642-13643.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13642-13643.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13642-13643.diff	(revision 13980)
@@ -0,0 +1,735 @@
+Index: ../trunk-jpl/test/NightlyRun/test312.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test312.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test312.m	(revision 13643)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'macayeal','all');
+-md.timestepping.time_step=0;
++md.timestepping.time_step=0.;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,ThermalSolutionEnum);
++md=solve(md,ThermalSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test214.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test214.m	(revision 13643)
+@@ -21,7 +21,7 @@
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy'};
++field_names     ={'Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-07,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+Index: ../trunk-jpl/test/NightlyRun/test315.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test315.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test315.py	(revision 13643)
+@@ -0,0 +1,56 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(5,1.2)
++md=setflowequation(md,'hutter','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1',\
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2',\
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test310.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test310.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test310.py	(revision 13643)
+@@ -0,0 +1,26 @@
++from model import *
++from triangle import *
++from meshconvert import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=meshconvert(md)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.prognostic.stabilization=3
++md.prognostic.spcthickness=md.geometry.thickness
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,PrognosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['PrognosticSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test313.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test313.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test313.m	(revision 13643)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+@@ -9,7 +9,7 @@
+ md.transient.isprognostic=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test215.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test215.m	(revision 13643)
+@@ -21,7 +21,7 @@
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy'};
++field_names     ={'Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+Index: ../trunk-jpl/test/NightlyRun/test316.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test316.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test316.py	(revision 13643)
+@@ -0,0 +1,42 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test314.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test314.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test314.m	(revision 13643)
+@@ -1,9 +1,9 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'hutter','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
+Index: ../trunk-jpl/test/NightlyRun/test311.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test311.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test311.py	(revision 13643)
+@@ -0,0 +1,23 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.extrude(5,0.5)
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,PrognosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['PrognosticSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test315.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test315.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test315.m	(revision 13643)
+@@ -1,18 +1,18 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,5,1.2);
+ md=setflowequation(md,'hutter','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
+-					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+-field_tolerances={1e-13,  1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...,
+-						1e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-						1e-10,  1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1',...
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2',...
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...,
++	1e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test119.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test119.m	(revision 13643)
+@@ -16,8 +16,8 @@
+ elapsedtime=etime(clock,t0);
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'x1' 'y1' 'x2' 'y2' 'nbelements' 'elapsed time'};
+-field_tolerances={1e-13 1e-13 1e-13 1e-13 1e-13 0.5};
++field_names     ={'x1','y1','x2','y2','nbelements','elapsed time'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,0.5};
+ field_values={...
+ 	x1, y1,...
+ 	x2, y2,...
+Index: ../trunk-jpl/test/NightlyRun/test317.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test317.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test317.py	(revision 13643)
+@@ -0,0 +1,56 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',200000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1',\
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2',\
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++field_tolerances=[1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,5e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test312.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test312.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test312.py	(revision 13643)
+@@ -0,0 +1,25 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.timestepping.time_step=0.
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,ThermalSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results['ThermalSolution'][1]['Temperature'],\
++	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test316.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test316.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test316.m	(revision 13643)
+@@ -1,9 +1,9 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
+Index: ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 13643)
+@@ -2,4 +2,4 @@
+ test218    needs Dakota
+ test234    needs Dakota
+ test235    needs Dakota
+-
++test274    needs TriMeshProcessRifts module in meshprocessrifts.py
+Index: ../trunk-jpl/test/NightlyRun/test318.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test318.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test318.py	(revision 13643)
+@@ -0,0 +1,30 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(4,1)
++md=setflowequation(md,'hutter','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_step=0
++md=solve(md,SteadystateSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['SteadystateSolution'][1]['Vx'],\
++	md.results['SteadystateSolution'][1]['Vy'],\
++	md.results['SteadystateSolution'][1]['Vz'],\
++	md.results['SteadystateSolution'][1]['Vel'],\
++	md.results['SteadystateSolution'][1]['Pressure'],\
++	md.results['SteadystateSolution'][1]['Temperature'],\
++	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test317.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test317.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test317.m	(revision 13643)
+@@ -1,18 +1,18 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
+-					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
++field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1',...
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2',...
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+ field_tolerances={1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
+-						1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
+-						1e-09,5e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
++	1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
++	1e-09,5e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test313.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test313.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test313.py	(revision 13643)
+@@ -0,0 +1,29 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.verbose=verbose('convergence',True,'solution',True)
++md.transient.isdiagnostic=0
++md.transient.isprognostic=0
++md.transient.isthermal=1
++md.transient.isgroundingline=0
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test310.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test310.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test310.m	(revision 13643)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=meshconvert(md);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+@@ -6,7 +6,7 @@
+ md.prognostic.stabilization=3;
+ md.prognostic.spcthickness=md.geometry.thickness;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test212.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test212.m	(revision 13643)
+@@ -20,7 +20,7 @@
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy'};
++field_names     ={'Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+Index: ../trunk-jpl/test/NightlyRun/test318.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test318.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test318.m	(revision 13643)
+@@ -1,16 +1,15 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,4,1);
+ md=setflowequation(md,'hutter','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+-md=solve(md,SteadystateSolutionEnum);
++md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13
+-};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+ 	(md.results.SteadystateSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test319.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test319.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test319.py	(revision 13643)
+@@ -0,0 +1,45 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',200000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md=setflowequation(md,'macayeal','all')
++
++#control parameters
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['FrictionCoefficient']
++md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=numpy.hstack((103*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
++md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
++md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2*numpy.ones(md.inversion.nsteps)
++md.inversion.step_threshold=0.3*numpy.ones(md.inversion.nsteps)
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
++field_tolerances=[1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Gradient1'],\
++	md.results['DiagnosticSolution'][1]['J'],\
++	md.results['DiagnosticSolution'][1]['FrictionCoefficient'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++]
+Index: ../trunk-jpl/test/NightlyRun/test314.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test314.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test314.py	(revision 13643)
+@@ -0,0 +1,42 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md=setflowequation(md,'hutter','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test311.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test311.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test311.m	(revision 13643)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md=extrude(md,5,0.5);
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test213.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test213.m	(revision 13643)
+@@ -21,7 +21,7 @@
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'MaterialsRheologyBbar' 'Pressure' 'Vel' 'Vx' 'Vy'};
++field_names     ={'Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+Index: ../trunk-jpl/test/NightlyRun/test319.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test319.m	(revision 13642)
++++ ../trunk-jpl/test/NightlyRun/test319.m	(revision 13643)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+@@ -6,25 +6,25 @@
+ %control parameters
+ md.inversion.iscontrol=1;
+ md.inversion.control_parameters={'FrictionCoefficient'};
+-md.inversion.min_parameters=1*ones(md.mesh.numberofvertices,1);
+-md.inversion.max_parameters=200*ones(md.mesh.numberofvertices,1);
++md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
++md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+ md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+-md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+-md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
++md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'FrictionCoefficient' 'Pressure' 'Vel' 'Vx' 'Vy'};
++field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+-	md.results.DiagnosticSolution.J,...
++	(md.results.DiagnosticSolution.J),...
+ 	(md.results.DiagnosticSolution.FrictionCoefficient),...
+ 	(md.results.DiagnosticSolution.Pressure),...
+ 	(md.results.DiagnosticSolution.Vel),...
Index: /issm/oecreview/Archive/13393-13976/ISSM-13643-13644.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13643-13644.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13643-13644.diff	(revision 13980)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/etc/environment.sh
+===================================================================
+--- ../trunk-jpl/etc/environment.sh	(revision 13643)
++++ ../trunk-jpl/etc/environment.sh	(revision 13644)
+@@ -186,10 +186,13 @@
+ PACKAGEMAKER_DIR="$ISSM_DIR/externalpackages/packagemaker/install"
+ pathappend "$PACKAGEMAKER_DIR"
+ 
+-ANDROID_NDK_DIR="$ISSM_DIR/externalpackages/android-ndk/install"
++#android-dev-dir
++export ANDROID_DIR="$ISSM_DIR/externalpackages/android"
++
++ANDROID_NDK_DIR="$ANDROID_DIR/android-ndk/install"
+ pathappend "$ANDROID_NDK_DIR/"
+ 
+-ANDROID_SDK_DIR="$ANDROID_DIR/android-sdk/install-sdk"
++ANDROID_SDK_DIR="$ANDROID_DIR/android-sdk/install"
+ pathappend "$ANDROID_SDK_DIR/"
+ 
+ GSL_DIR="$ISSM_DIR/externalpackages/gsl/install"
Index: /issm/oecreview/Archive/13393-13976/ISSM-13644-13645.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13644-13645.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13644-13645.diff	(revision 13980)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/etc/environment.sh
+===================================================================
+--- ../trunk-jpl/etc/environment.sh	(revision 13644)
++++ ../trunk-jpl/etc/environment.sh	(revision 13645)
+@@ -189,10 +189,10 @@
+ #android-dev-dir
+ export ANDROID_DIR="$ISSM_DIR/externalpackages/android"
+ 
+-ANDROID_NDK_DIR="$ANDROID_DIR/android-ndk/install"
++export ANDROID_NDK_DIR="$ANDROID_DIR/android-ndk/install"
+ pathappend "$ANDROID_NDK_DIR/"
+ 
+-ANDROID_SDK_DIR="$ANDROID_DIR/android-sdk/install"
++export ANDROID_SDK_DIR="$ANDROID_DIR/android-sdk/install"
+ pathappend "$ANDROID_SDK_DIR/"
+ 
+ GSL_DIR="$ISSM_DIR/externalpackages/gsl/install"
Index: /issm/oecreview/Archive/13393-13976/ISSM-13645-13646.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13645-13646.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13645-13646.diff	(revision 13980)
@@ -0,0 +1,4628 @@
+Index: ../trunk-jpl/src/m/os/issmssh.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmssh.m	(revision 13645)
++++ ../trunk-jpl/src/m/os/issmssh.m	(revision 13646)
+@@ -13,7 +13,7 @@
+ else
+ 	if ispc(),
+ 		%use the putty project plink.exe: it should be in the path.
+-		
++
+ 		%get ISSM_DIR variable
+ 		[status,ISSM_DIR]=system('echo [%ISSM_DIR_WIN%]');
+ 		if status, 
+Index: ../trunk-jpl/src/m/os/ismumps.m
+===================================================================
+--- ../trunk-jpl/src/m/os/ismumps.m	(revision 13645)
++++ ../trunk-jpl/src/m/os/ismumps.m	(revision 13646)
+@@ -4,7 +4,6 @@
+ %   Usage:
+ %       flag=ismumps();
+ 
+-
+ configfile=[issmdir() '/bin/config.h']; %should find it in the install target
+ if ~exist(configfile,'file'),
+ 	error(['File ' configfile ' not found. ISSM has not been configured yet!']);
+Index: ../trunk-jpl/src/m/os/issmstssh.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmstssh.m	(revision 13645)
++++ ../trunk-jpl/src/m/os/issmstssh.m	(revision 13646)
+@@ -4,6 +4,5 @@
+ %   usage: 
+ %      issmstssh(host,command)
+ 
+-
+ %just use starcluster command to pipe an ssh command through
+ system([starcluster() ' sshmaster ' host ' --user ' login ' ''' command '''']);
+Index: ../trunk-jpl/src/m/os/issmscpin.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmscpin.m	(revision 13645)
++++ ../trunk-jpl/src/m/os/issmscpin.m	(revision 13646)
+@@ -30,7 +30,7 @@
+ 
+ 	if ispc(),
+ 		%use the putty project pscp.exe: it should be in the path.
+-		
++
+ 		%get ISSM_DIR variable
+ 		[status,ISSM_DIR]=system('echo [%ISSM_DIR_WIN%]');
+ 		if status, 
+@@ -61,13 +61,12 @@
+ 			string=[string packages{end} '\}'];
+ 		end
+ 
+-
+ 		if port,
+ 			eval(['!scp -P ' num2str(port) ' ' login '@localhost:' path '/' string ' ./']);
+ 		else
+ 			eval(['!scp ' login '@' host ':' path '/' string ' ./']);
+ 		end
+-		
++
+ 		%check scp worked
+ 		for i=1:numel(packages),
+ 			if ~exist(['./' packages{i}]),
+Index: ../trunk-jpl/src/m/os/issmscpout.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmscpout.m	(revision 13645)
++++ ../trunk-jpl/src/m/os/issmscpout.m	(revision 13646)
+@@ -21,7 +21,7 @@
+ else 
+ 	if ispc(),
+ 		%use the putty project pscp.exe: it should be in the path.
+-		
++
+ 		%get ISSM_DIR variable
+ 		[status,ISSM_DIR]=system('echo [%ISSM_DIR_WIN%]');
+ 		if status, 
+@@ -47,7 +47,7 @@
+ 			string=[string ' ' packages{i}];
+ 		end
+ 		string=[string ' '];
+-		
++
+ 		if port,
+ 			eval(['!scp -P ' num2str(port) ' ' string ' ' login '@localhost:' path]);
+ 		else
+Index: ../trunk-jpl/src/m/os/ispetsc.m
+===================================================================
+--- ../trunk-jpl/src/m/os/ispetsc.m	(revision 13645)
++++ ../trunk-jpl/src/m/os/ispetsc.m	(revision 13646)
+@@ -4,7 +4,6 @@
+ %   Usage:
+ %       flag=ispetsc();
+ 
+-
+ configfile=[issmdir() '/bin/config.h']; %should find it in the install target
+ if ~exist(configfile,'file'),
+ 	error(['File ' configfile ' not found. ISSM has not been configured yet!']);
+Index: ../trunk-jpl/src/m/os/issmbbftpin.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmbbftpin.m	(revision 13645)
++++ ../trunk-jpl/src/m/os/issmbbftpin.m	(revision 13646)
+@@ -34,7 +34,7 @@
+ 		command=[command 'get ' packages{i} ';'];
+ 	end
+ 	command=[command '''  pfe1.nas.nasa.gov'];
+-	
++
+ 	eval(command);
+ 
+ 	%check bbftp worked
+@@ -44,5 +44,4 @@
+ 		end
+ 	end
+ 
+-
+ end
+Index: ../trunk-jpl/src/m/os/issmbbftpout.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmbbftpout.m	(revision 13645)
++++ ../trunk-jpl/src/m/os/issmbbftpout.m	(revision 13646)
+@@ -18,13 +18,13 @@
+ 		eval(['cd ' here]);
+ 	end
+ else 
+-	
++
+ 	%build a string of the type: bbftp -s -u elarour -e 'setnbstream 8; cd /nobackupp10/elarour/Testing/Interactive3/; put Antarctica.tar.gz' pfe1.nas.nasa.gov
+ 	command=['!bbftp -s -V -u ' login ' -e ''setnbstream 8; cd ' path '; ']
+ 	for i=1:length(packages),
+ 		command=[command 'put ' packages{i} ';'];
+ 	end
+ 	command=[command '''  pfe1.nas.nasa.gov'];
+-	
++
+ 	eval(command);
+ end
+Index: ../trunk-jpl/src/m/os/ismpi.m
+===================================================================
+--- ../trunk-jpl/src/m/os/ismpi.m	(revision 13645)
++++ ../trunk-jpl/src/m/os/ismpi.m	(revision 13646)
+@@ -4,7 +4,6 @@
+ %   Usage:
+ %       flag=ismpi();
+ 
+-
+ configfile=[issmdir() '/bin/config.h']; %should find it in the install target
+ if ~exist(configfile,'file'),
+ 	error(['File ' configfile ' not found. ISSM has not been configured yet!']);
+Index: ../trunk-jpl/src/m/kml/kml_unsh_edges.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_unsh_edges.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_unsh_edges.m	(revision 13646)
+@@ -113,4 +113,3 @@
+ end
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_part_elems.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_part_elems.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_part_elems.m	(revision 13646)
+@@ -100,7 +100,7 @@
+ end
+ cmap=colormap;
+ close(hfig)
+-    
++
+ if exist('edata','var')
+     if ~exist('cmin','var')
+         cmin=min(min(edata));
+@@ -214,4 +214,3 @@
+ end
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_feature.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_feature.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_feature.m	(revision 13646)
+@@ -27,7 +27,7 @@
+         styleurl  ='';
+         style     ={};
+     end
+-    
++
+     methods
+         function [kml]=kml_feature(varargin)
+ 
+@@ -203,7 +203,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -261,7 +261,7 @@
+             end
+ 
+         end
+-        
++
+ %  delete the object
+ 
+         function []=delete(kml)
+@@ -288,8 +288,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_mesh_elem.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_mesh_elem.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_mesh_elem.m	(revision 13646)
+@@ -99,7 +99,7 @@
+ end
+ cmap=colormap;
+ close(hfig)
+-    
++
+ if exist('edata','var')
+     if ~exist('cmin','var')
+         cmin=min(min(edata));
+@@ -174,4 +174,3 @@
+ end
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_colorstyle.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_colorstyle.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_colorstyle.m	(revision 13646)
+@@ -17,7 +17,7 @@
+         color     ='ffffffff';
+         colormode ='normal';
+     end
+-    
++
+     methods
+         function [kml]=kml_colorstyle(varargin)
+ 
+@@ -159,7 +159,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -195,8 +195,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/edgeadjacency.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/edgeadjacency.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/edgeadjacency.m	(revision 13646)
+@@ -30,7 +30,7 @@
+     for j=1:size(elem,2)
+         inode1=elem(i,j);
+         inode2=elem(i,mod(j,size(elem,2))+1);
+-        
++
+ %  loop over the elements containing the first node of the edge to see
+ %  if they contain the second node of the edge
+ 
+Index: ../trunk-jpl/src/m/kml/kml_object.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_object.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_object.m	(revision 13646)
+@@ -14,7 +14,7 @@
+     properties
+         id        ='';
+     end
+-    
++
+     methods
+         function [kml]=kml_object(varargin)
+ 
+@@ -143,7 +143,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -173,8 +173,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_multigeometry.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_multigeometry.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_multigeometry.m	(revision 13646)
+@@ -15,7 +15,7 @@
+     properties
+         geometry  ={};
+     end
+-    
++
+     methods
+         function [kml]=kml_multigeometry(varargin)
+ 
+@@ -155,7 +155,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -196,7 +196,7 @@
+             end
+ 
+         end
+-        
++
+ %  delete the object
+ 
+         function []=delete(kml)
+@@ -224,8 +224,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_linestyle.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_linestyle.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_linestyle.m	(revision 13646)
+@@ -17,7 +17,7 @@
+     properties
+         width     =1;
+     end
+-    
++
+     methods
+         function [kml]=kml_linestyle(varargin)
+ 
+@@ -142,7 +142,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -169,8 +169,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_container.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_container.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_container.m	(revision 13646)
+@@ -20,7 +20,7 @@
+ classdef kml_container < kml_feature
+     properties
+     end
+-    
++
+     methods
+         function [kml]=kml_container(varargin)
+ 
+@@ -149,7 +149,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -179,7 +179,7 @@
+             end
+ 
+         end
+-        
++
+ %  delete the object
+ 
+         function []=delete(kml)
+@@ -192,8 +192,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_polygon.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_polygon.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_polygon.m	(revision 13646)
+@@ -23,7 +23,7 @@
+         outer     =kml_linearring.empty();
+         inner     =kml_linearring.empty();
+     end
+-    
++
+     methods
+         function [kml]=kml_polygon(varargin)
+ 
+@@ -182,7 +182,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -233,7 +233,7 @@
+             end
+ 
+         end
+-        
++
+ %  delete the object
+ 
+         function []=delete(kml)
+@@ -265,8 +265,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_file_write.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_file_write.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_file_write.m	(revision 13646)
+@@ -123,4 +123,3 @@
+ end
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_linearring.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_linearring.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_linearring.m	(revision 13646)
+@@ -21,7 +21,7 @@
+         altmode   ='clampToGround';
+         coords    =zeros(0,3);
+     end
+-    
++
+     methods
+         function [kml]=kml_linearring(varargin)
+ 
+@@ -164,7 +164,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -202,8 +202,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_geometry.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_geometry.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_geometry.m	(revision 13646)
+@@ -13,7 +13,7 @@
+ classdef kml_geometry < kml_object
+     properties
+     end
+-    
++
+     methods
+         function [kml]=kml_geometry(varargin)
+ 
+@@ -142,7 +142,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -172,8 +172,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_partitions.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_partitions.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_partitions.m	(revision 13646)
+@@ -101,7 +101,7 @@
+ end
+ cmap=colormap;
+ close(hfig)
+-    
++
+ if exist('edata','var')
+     if ~exist('cmin','var')
+         cmin=min(min(edata));
+@@ -139,7 +139,7 @@
+ 
+     for k=1:md.qmu.numberofpartitions
+ %        disp(['partition k=' int2str(k)])
+-        
++
+ %  for each partition, find all the included elements and determine the
+ %  perimeter (including those shared by another partition)
+ 
+@@ -170,7 +170,7 @@
+                 warning('Data for Partition %d is not defined.\n',k)
+             end
+         end
+-        
++
+ %  set up the placemark with multigeometry
+ 
+         kplace=kml_placemark();
+@@ -196,7 +196,7 @@
+ 
+         kmgeom=kml_multigeometry();
+         kmgeom.geometry  ={repmat(kml_polygon(),1,length(iloop)-1)};
+-        
++
+ %  loop over each loop of the perimeter for the given partition
+ 
+         for i=1:length(iloop)-1
+@@ -212,7 +212,7 @@
+             slast=0;
+             lat=[];
+             long=[];
+-            
++
+ %  loop over the element edges on the loop of the partition
+ 
+             j=iloop(i);
+@@ -242,7 +242,7 @@
+                     nlast=edgeper(j,2);
+                     slast=0;
+                     j=j+1;
+-                    
++
+ %  element not entirely within partition, so figure out boundary
+                 else
+ %                    disp(['segment j=' int2str(j) ' from element ' int2str(elemper(j)) ' shared by other partitions.'])
+@@ -328,7 +328,7 @@
+                                                        md.mesh.lat(elemp(ielem,nlast)) alt];
+                             end
+                             nlast=0;
+-                            
++
+ %  write out midpoint of first side
+                             kring.coords(end+1,:)=[(md.mesh.long(elemp(ielem,slast))...
+                                                    +md.mesh.long(elemp(ielem,mod(slast,3)+1)))/2. ...
+@@ -483,4 +483,3 @@
+ end
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/kml/string_buf.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/string_buf.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/string_buf.m	(revision 13646)
+@@ -172,7 +172,7 @@
+            str=sbuf.string(1:sbuf.len);
+ 
+         end
+-        
++
+ %  reset the object
+ 
+         function [sbuf]=reset(sbuf)
+@@ -182,8 +182,7 @@
+             len       =0;
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_placemark.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_placemark.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_placemark.m	(revision 13646)
+@@ -22,7 +22,7 @@
+     properties
+         geometry  =kml_geometry.empty();
+     end
+-    
++
+     methods
+         function [kml]=kml_placemark(varargin)
+ 
+@@ -162,7 +162,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -203,7 +203,7 @@
+             end
+ 
+         end
+-        
++
+ %  delete the object
+ 
+         function []=delete(kml)
+@@ -232,8 +232,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_style.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_style.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_style.m	(revision 13646)
+@@ -29,7 +29,7 @@
+         balloon   =[];
+         list      =[];
+     end
+-    
++
+     methods
+         function [kml]=kml_style(varargin)
+ 
+@@ -205,7 +205,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -267,7 +267,7 @@
+             end
+ 
+         end
+-        
++
+ %  delete the object
+ 
+         function []=delete(kml)
+@@ -321,8 +321,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_styleselector.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_styleselector.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_styleselector.m	(revision 13646)
+@@ -13,7 +13,7 @@
+ classdef kml_styleselector < kml_object
+     properties
+     end
+-    
++
+     methods
+         function [kml]=kml_styleselector(varargin)
+ 
+@@ -142,7 +142,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -172,8 +172,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_polystyle.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_polystyle.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_polystyle.m	(revision 13646)
+@@ -19,7 +19,7 @@
+         fill      =true;
+         outline   =true;
+     end
+-    
++
+     methods
+         function [kml]=kml_polystyle(varargin)
+ 
+@@ -147,7 +147,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -175,8 +175,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_mesh_write.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_mesh_write.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_mesh_write.m	(revision 13646)
+@@ -192,7 +192,7 @@
+     end
+     cmap=colormap;
+     close(hfig)
+-    
++
+     disp(['Writing ' num2str(size(cmap,1)) ' Matlab colors as KML style templates.']);
+     for i=1:size(cmap,1)
+         klsty=kml_linestyle();
+@@ -258,4 +258,3 @@
+ delete(kdoc);
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_part_flagedges.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_part_flagedges.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_part_flagedges.m	(revision 13646)
+@@ -107,4 +107,3 @@
+ end
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_substyle.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_substyle.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_substyle.m	(revision 13646)
+@@ -13,7 +13,7 @@
+ classdef kml_substyle < kml_object
+     properties
+     end
+-    
++
+     methods
+         function [kml]=kml_substyle(varargin)
+ 
+@@ -142,7 +142,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -172,8 +172,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_folder.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_folder.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_folder.m	(revision 13646)
+@@ -22,7 +22,7 @@
+     properties
+         feature   ={};
+     end
+-    
++
+     methods
+         function [kml]=kml_folder(varargin)
+ 
+@@ -161,7 +161,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -201,7 +201,7 @@
+             end
+ 
+         end
+-        
++
+ %  delete the object
+ 
+         function []=delete(kml)
+@@ -229,8 +229,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_file_swrite.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_file_swrite.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_file_swrite.m	(revision 13646)
+@@ -129,4 +129,3 @@
+ end
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_part_edges.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_part_edges.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_part_edges.m	(revision 13646)
+@@ -100,7 +100,7 @@
+ end
+ cmap=colormap;
+ close(hfig)
+-    
++
+ if exist('edata','var')
+     if ~exist('cmin','var')
+         cmin=min(min(edata));
+@@ -138,7 +138,7 @@
+ 
+     for k=1:md.qmu.numberofpartitions
+ %        disp(['partition k=' int2str(k)])
+-        
++
+ %  for each partition, find all the included elements and determine the
+ %  perimeter (including those shared by another partition)
+ 
+@@ -153,7 +153,7 @@
+         [edgeadjp]=edgeadjacency(elemp,nodeconp);
+         [edgeper,elemper,iloop]=edgeperimeter(elemp,nodeconp,edgeadjp);
+         iloop(end+1)=size(edgeper,1)+1;
+-        
++
+ %  determine the data to be used for the colors (if any)
+ 
+         if exist('ndata','var')
+@@ -169,7 +169,7 @@
+                 warning('Data for Partition %d is not defined.\n',k)
+             end
+         end
+-        
++
+ %  set up the placemark with multigeometry
+ 
+         kplace=kml_placemark();
+@@ -210,7 +210,7 @@
+             slast=0;
+             lat=[];
+             long=[];
+-            
++
+ %  loop over the element edges on the loop of the partition
+ 
+             j=iloop(i);
+@@ -240,7 +240,7 @@
+                     nlast=edgeper(j,2);
+                     slast=0;
+                     j=j+1;
+-                    
++
+ %  element not entirely within partition, so figure out boundary
+                 else
+ %                    disp(['segment j=' int2str(j) ' from element ' int2str(elemper(j)) ' shared by other partitions.'])
+@@ -326,7 +326,7 @@
+                                                        md.mesh.lat(elemp(ielem,nlast)) alt];
+                             end
+                             nlast=0;
+-                            
++
+ %  write out midpoint of first side
+                             kline.coords(end+1,:)=[(md.mesh.long(elemp(ielem,slast))...
+                                                    +md.mesh.long(elemp(ielem,mod(slast,3)+1)))/2. ...
+@@ -480,4 +480,3 @@
+ end
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_document.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_document.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_document.m	(revision 13646)
+@@ -22,7 +22,7 @@
+     properties
+         feature   ={};
+     end
+-    
++
+     methods
+         function [kml]=kml_document(varargin)
+ 
+@@ -161,7 +161,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -201,7 +201,7 @@
+             end
+ 
+         end
+-        
++
+ %  delete the object
+ 
+         function []=delete(kml)
+@@ -229,8 +229,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/kml_linestring.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml_linestring.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml_linestring.m	(revision 13646)
+@@ -21,7 +21,7 @@
+         altmode   ='clampToGround';
+         coords    =zeros(0,3);
+     end
+-    
++
+     methods
+         function [kml]=kml_linestring(varargin)
+ 
+@@ -164,7 +164,7 @@
+             end
+ 
+         end
+-        
++
+ %  string write the object
+ 
+         function [sbuf]=kml_swrite(kml,sbuf,indent)
+@@ -202,8 +202,7 @@
+             end
+ 
+         end
+-        
++
+     end
+-    
++
+ end
+-
+Index: ../trunk-jpl/src/m/kml/exp2kml.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/exp2kml.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/exp2kml.m	(revision 13646)
+@@ -5,11 +5,9 @@
+ %
+ %
+ 
+-
+ %First, read exp file
+ domain=expread(input);
+ 
+-
+ %then transform: 
+ string=ge_plot(domain.x,domain.y,'name',domain.name);
+ 
+Index: ../trunk-jpl/src/m/kml/kml2exp.m
+===================================================================
+--- ../trunk-jpl/src/m/kml/kml2exp.m	(revision 13645)
++++ ../trunk-jpl/src/m/kml/kml2exp.m	(revision 13646)
+@@ -5,12 +5,9 @@
+ %
+ %
+ 
+-
+-
+-
+ %First, read polygon kml file.
+ structure=kml_shapefile(input);
+-	
++
+ %create exp file: 
+ domain=struct();
+ for i=1:length(structure),
+Index: ../trunk-jpl/src/m/solve/solve.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/solve.m	(revision 13645)
++++ ../trunk-jpl/src/m/solve/solve.m	(revision 13646)
+@@ -73,13 +73,11 @@
+ 	cluster.np=1;
+ end
+ 
+-
+ %Write all input files
+ marshall(md);                                          % bin file
+ PetscFile(md.solver,[md.miscellaneous.name '.petsc']); % petsc file
+ BuildQueueScript(cluster,md.private.runtimename,md.miscellaneous.name,md.private.solution,md.settings.io_gather,md.debug.valgrind,md.debug.gprof); % queue file
+ 
+-
+ %Stop here if batch mode
+ if strcmpi(options.batch,'yes')
+ 	disp('batch mode requested: not launching job interactively');
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 13645)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.m	(revision 13646)
+@@ -19,7 +19,6 @@
+ %   Usage:
+ %      results=parseresultsfromdiskioserial(filename)
+ 
+-
+ %Open file
+ fid=fopen(filename,'rb');
+ if(fid==-1),
+@@ -54,7 +53,6 @@
+ %   Usage:
+ %      results=parseresultsfromdiskiosplit(filename)
+ 
+-
+ %Open file
+ fid=fopen(filename,'rb');
+ if(fid==-1),
+@@ -176,7 +174,6 @@
+ %   Usage:
+ %      field=ReadDataDimensions(fid)
+ 
+-
+ %read field
+ [length,count]=fread(fid,1,'int');
+ 
+Index: ../trunk-jpl/src/m/solve/loadresultsfromdisk.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/loadresultsfromdisk.m	(revision 13645)
++++ ../trunk-jpl/src/m/solve/loadresultsfromdisk.m	(revision 13646)
+@@ -49,7 +49,6 @@
+ 		disp(['loadresultsfromcluster info message: error during solution. Check your errlog and outlog model fields']);
+ 	end
+ 
+-
+ %post processes qmu results if necessary
+ else
+ 
+Index: ../trunk-jpl/src/m/geometry/SegIntersect.m
+===================================================================
+--- ../trunk-jpl/src/m/geometry/SegIntersect.m	(revision 13645)
++++ ../trunk-jpl/src/m/geometry/SegIntersect.m	(revision 13646)
+@@ -48,7 +48,7 @@
+ 	O1B=O2O1'*(O2B-O2O1);
+ 	O1C=O2O1'*O1C;
+ 	O1D=O2O1'*O1D;
+-	
++
+ 	%test if one point is included in the other segment (->bval=1)
+ 	if (O1C-O1A)*(O1D-O1A)<0
+ 		bval=1;
+Index: ../trunk-jpl/src/m/print/printmodel.m
+===================================================================
+--- ../trunk-jpl/src/m/print/printmodel.m	(revision 13645)
++++ ../trunk-jpl/src/m/print/printmodel.m	(revision 13646)
+@@ -23,7 +23,6 @@
+ %      printmodel('image','tiff')
+ %      printmodel('image','eps','margin','on','frame','on','hardcopy','on')
+ 
+-
+ %get options: 
+ options=pairoptions(varargin{:});
+ 
+@@ -54,7 +53,6 @@
+ %InvertHardcopy off imposes MATLAB to use the same colors
+ set(fig, 'InvertHardcopy', getfieldvalue(options,'hardcopy'));
+ 
+-
+ %we could have several formats, as a cell array of strings.
+ formats=format;
+ if ~iscell(formats),
+Index: ../trunk-jpl/src/m/mesh/NodeInElement.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/NodeInElement.m	(revision 13645)
++++ ../trunk-jpl/src/m/mesh/NodeInElement.m	(revision 13646)
+@@ -24,14 +24,14 @@
+ for i=1:length(newx),
+ 	x0=newx(i);
+ 	y0=newy(i);
+-	
++
+ 	%first area coordinate
+ 	area_1=(y3y2.*(x0-x3)-x3x2.*(y0-y3))./delta;
+ 	%second area coordinate
+ 	area_2=(x3x1.*(y0-y3)-y3y1.*(x0-x3))./delta;
+ 	%third area coordinate
+ 	area_3=1-area_1-area_2;
+-	
++
+ 	%get elements for which all area coordinates are positive (meaning (x0,y0) belongs to these elements
+ 	pos=find((area_1>=0-epsilon) & (area_2>=0-epsilon) & (area_3>=0-epsilon));
+ 
+Index: ../trunk-jpl/src/m/mesh/planet/sphere_tri.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/planet/sphere_tri.m	(revision 13645)
++++ ../trunk-jpl/src/m/mesh/planet/sphere_tri.m	(revision 13646)
+@@ -43,8 +43,6 @@
+ % See also: mesh_refine, sphere_project
+ %
+ 
+-
+-
+ % $Revision: 1.2 $ $Date: 2005/07/20 23:07:03 $
+ 
+ % Licence:  GNU GPL, no implied or express warranties
+@@ -79,7 +77,6 @@
+     winding = 0;
+ end
+ 
+-
+ % -----------------
+ % define the starting shapes
+ 
+@@ -87,26 +84,26 @@
+ 
+ switch shape,
+ case 'tetra',
+-    
++
+     % Vertices of a tetrahedron
+     sqrt_3 = 0.5773502692;
+-    
++
+     tetra.v = [  sqrt_3,  sqrt_3,  sqrt_3 ;   % +X, +Y, +Z  - PPP
+                 -sqrt_3, -sqrt_3,  sqrt_3 ;   % -X, -Y, +Z  - MMP
+                 -sqrt_3,  sqrt_3, -sqrt_3 ;   % -X, +Y, -Z  - MPM
+                  sqrt_3, -sqrt_3, -sqrt_3 ];  % +X, -Y, -Z  - PMM
+-	
++
+     % Structure describing a tetrahedron
+     tetra.f = [ 1, 2, 3;
+                 1, 4, 2;
+                 3, 2, 4;
+                 4, 1, 3 ];
+-    
++
+     FV.vertices = tetra.v;
+     FV.faces    = tetra.f;
+-    
++
+ case 'oct',
+-    
++
+     % Six equidistant points lying on the unit sphere
+     oct.v = [  1,  0,  0 ;  %  X
+               -1,  0,  0 ; 	% -X
+@@ -114,7 +111,7 @@
+                0, -1,  0 ; 	% -Y
+                0,  0,  1 ; 	%  Z
+                0,  0, -1 ];	% -Z
+-	
++
+     % Join vertices to create a unit octahedron
+     oct.f = [ 1 5 3 ;    %  X  Z  Y  -  First the top half
+               3 5 2 ;    %  Y  Z -X
+@@ -124,16 +121,16 @@
+               3 2 6 ;    %  Y  Z -Z
+               2 4 6 ;    % -X  Z -Z
+               4 1 6 ];   % -Y  Z -Z
+-    
++
+     FV.vertices = oct.v;
+     FV.faces    = oct.f;
+-    
++
+ case 'ico',
+-    
++
+     % Twelve vertices of icosahedron on unit sphere
+     tau = 0.8506508084; % t=(1+sqrt(5))/2, tau=t/sqrt(1+t^2)
+     one = 0.5257311121; % one=1/sqrt(1+t^2) , unit sphere
+-    
++
+     ico.v( 1,:) = [  tau,  one,    0 ]; % ZA
+     ico.v( 2,:) = [ -tau,  one,    0 ]; % ZB
+     ico.v( 3,:) = [ -tau, -one,    0 ]; % ZC
+@@ -146,7 +143,7 @@
+     ico.v(10,:) = [   0 , -tau,  one ]; % XB
+     ico.v(11,:) = [   0 , -tau, -one ]; % XC
+     ico.v(12,:) = [   0 ,  tau, -one ]; % XD
+-    
++
+     % Structure for unit icosahedron
+     ico.f = [  5,  8,  9 ;
+                5, 10,  8 ;
+@@ -168,27 +165,26 @@
+                7, 12,  2 ;
+                8, 10,  3 ;
+                7,  3, 11 ];
+-	
++
+     FV.vertices = ico.v;
+     FV.faces    = ico.f;
+ end
+ 
+-
+ % -----------------
+ % refine the starting shapes with subdivisions
+ if maxlevel,
+-    
++
+     % Subdivide each starting triangle (maxlevel) times
+     for level = 1:maxlevel,
+-        
++
+         % Subdivide each triangle and normalize the new points thus
+         % generated to lie on the surface of a sphere radius r.
+         FV = mesh_refine_tri4(FV);
+         FV.vertices = sphere_project(FV.vertices,r);
+-        
++
+         % An alternative might be to define a min distance
+         % between vertices and recurse or use fminsearch
+-        
++
+     end
+ end
+ 
+Index: ../trunk-jpl/src/m/mesh/planet/mesh_refine_tri4.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/planet/mesh_refine_tri4.m	(revision 13645)
++++ ../trunk-jpl/src/m/mesh/planet/mesh_refine_tri4.m	(revision 13646)
+@@ -28,7 +28,6 @@
+ % See also: mesh_refine, sphere_tri, sphere_project
+ % 
+ 
+-
+ % ---this method is not implemented, but the idea here remains...
+ % This can be done until some minimal distance (D) of the mean 
+ % distance between vertices of all triangles is achieved.  If
+@@ -36,7 +35,6 @@
+ % Alternatively, it could be done until some minimum mean 
+ % area of faces is achieved.  As is, it just refines once.
+ 
+-
+ % $Revision: 1.1 $ $Date: 2004/11/12 01:32:35 $
+ 
+ % Licence:  GNU GPL, no implied or express warranties
+@@ -79,39 +77,39 @@
+ F2 = zeros(Nface*4,3);
+ 
+ for f = 1:Nface,
+-    
++
+     % Get the triangle vertex indices
+     NA = FV.faces(f,1);
+     NB = FV.faces(f,2);
+     NC = FV.faces(f,3);
+-    
++
+     % Get the triangle vertex coordinates
+     A = FV.vertices(NA,:);
+     B = FV.vertices(NB,:);
+     C = FV.vertices(NC,:);
+-    
++
+     % Now find the midpoints between vertices
+     a = (A + B) ./ 2;
+     b = (B + C) ./ 2;
+     c = (C + A) ./ 2;
+-    
++
+     % Find the length of each median
+     %A2blen = sqrt ( sum( (A - b).^2, 2 ) );
+     %B2clen = sqrt ( sum( (B - c).^2, 2 ) );
+     %C2alen = sqrt ( sum( (C - a).^2, 2 ) );
+-    
++
+     % Store the midpoint vertices, while
+     % checking if midpoint vertex already exists
+     [FV, Na] = mesh_find_vertex(FV,a);
+     [FV, Nb] = mesh_find_vertex(FV,b);
+     [FV, Nc] = mesh_find_vertex(FV,c);
+-    
++
+     % Create new faces with orig vertices plus midpoints
+     F2(f*4-3,:) = [ NA, Na, Nc ];
+     F2(f*4-2,:) = [ Na, NB, Nb ];
+     F2(f*4-1,:) = [ Nc, Nb, NC ];
+     F2(f*4-0,:) = [ Na, Nb, Nc ];
+-    
++
+ end
+ 
+ % Replace the faces matrix
+@@ -121,7 +119,6 @@
+ 
+ return
+ 
+-
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ function [FV, N] = mesh_find_vertex(FV,vertex)
+Index: ../trunk-jpl/src/m/mesh/planet/planetmixedmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/planet/planetmixedmesh.m	(revision 13645)
++++ ../trunk-jpl/src/m/mesh/planet/planetmixedmesh.m	(revision 13646)
+@@ -32,12 +32,12 @@
+ for i=1:nphi-1,
+ 	for j=1:nthetha-1,
+ 		count=(i-1)*(nthetha-1)+j;
+-	
++
+ 		A=(i-1)*nthetha+j;
+ 		B=(i-1)*nthetha+j+1;
+ 		C=(i)*nthetha+j+1;
+ 		D=(i)*nthetha+j;
+-		
++
+ 		quads(count,:)=[A B C D];
+ 	end
+ end
+@@ -63,7 +63,6 @@
+ 
+ quads=[trias;quads];
+ 
+-
+ % now add south pole: 
+ phii=180*conv;
+ x=[x;r.*cos(phii).*sin(phii)];
+@@ -84,7 +83,6 @@
+ 
+ quads=[quads;trias];
+ 
+-
+ md.mesh.elements=quads;
+ md.mesh.x=x;
+ md.mesh.y=y;
+Index: ../trunk-jpl/src/m/mesh/planet/sphere_project.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/planet/sphere_project.m	(revision 13645)
++++ ../trunk-jpl/src/m/mesh/planet/sphere_project.m	(revision 13646)
+@@ -49,7 +49,6 @@
+ % by the radius required.  This avoids the
+ % use of arctan functions, which have branches.
+ 
+-
+ % Convert Cartesian X,Y,Z to spherical (radians)
+ theta = atan2( (Y-yo), (X-xo) );
+ phi   = atan2( sqrt( (X-xo).^2 + (Y-yo).^2 ), (Z-zo) );
+Index: ../trunk-jpl/src/m/mesh/rifts/meshplug.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/meshplug.m	(revision 13645)
++++ ../trunk-jpl/src/m/mesh/rifts/meshplug.m	(revision 13646)
+@@ -2,7 +2,6 @@
+ %MESHPLUG - embed mesh into another one
+ %     See also meshaddrifts
+ 
+-
+ %initialize elconv,nodeconv conversion tables from md mesh to new md mesh
+ elconv=1:size(elements,1); elconv=elconv';
+ nodeconv=1:size(x,1); nodeconv=nodeconv';
+@@ -47,11 +46,9 @@
+ 	nodeconv2(i)=extractednodes(domain(i));
+ end
+ 
+-
+ %plug elements
+ elements=[elements;elements2];
+ 
+-
+ %now, increase number of nodes
+ x=[x; x2];
+ y=[y; y2];
+@@ -86,4 +83,3 @@
+ temp_nodeconvnum=1:length(temp_nodeconv);
+ nodeconv(temp_nodeconv)=temp_nodeconvnum;
+ nodeconv(extractednodes_minusborder)=NaN;
+-
+Index: ../trunk-jpl/src/m/mesh/rifts/meshaddrifts.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/meshaddrifts.m	(revision 13645)
++++ ../trunk-jpl/src/m/mesh/rifts/meshaddrifts.m	(revision 13646)
+@@ -11,7 +11,6 @@
+ %        will be used to define the rift contour density of the mesh. The open contour density will 
+ %        be preserved. There can be as many pairs of closed contour and rift contour as wished.
+ 
+-
+ %read rift: 
+ domains=expread(riftname,1);
+ contours=domains(1:2:end);
+@@ -19,20 +18,20 @@
+ 
+ %now loop over rifts: 
+ for rift_i=1:length(rifts),
+-	
++
+ 	%refine rift to desired resolution: 
+ 	contour=contours(rift_i);
+ 	rift=rifts(rift_i);
+-	
++
+ 	delete('Meshaddrifts.Rift.exp');
+ 	expwrite(rift,'Meshaddrifts.Rift.Coarse.exp');
+ 	expcoarsen('Meshaddrifts.Rift.exp','Meshaddrifts.Rift.Coarse.exp',rift.density);
+ 	delete('Meshaddrifts.Rift.Coarse.exp');
+-	
++
+ 	%extract model:
+ 	expwrite(contour,'Meshaddrifts.Contour.exp');
+ 	md2=modelextract(md,'Meshaddrifts.Contour.exp');
+-	
++
+ 	%create domain of md2 model: 
+ 	md2.mesh.segments=contourenvelope(md2,'Meshaddrifts.Contour.exp');
+ 	domain_index=md2.mesh.segments(1,1:2);
+@@ -40,31 +39,31 @@
+ 		pos=find(md2.mesh.segments(:,1)==domain_index(end));
+ 		domain_index(end+1)=md2.mesh.segments(pos,2);
+ 	end
+-	
++
+ 	domain.x=md2.mesh.x(domain_index);
+ 	domain.y=md2.mesh.y(domain_index);
+ 	domain.name='Meshaddrifts.Domain.exp';
+ 	domain.density=1;
+ 	expwrite(domain,'Meshaddrifts.Domain.exp');
+-	
++
+ 	%unloop domain index: used for later.
+ 	domain_index=domain_index(1:end-1);
+-	
++
+ 	%remesh md2 using new domain outline, and rift profile: 
+ 	md2=meshnodensity(md2,'Meshaddrifts.Domain.exp','Meshaddrifts.Rift.exp');
+ 	md2=meshprocessrifts(md2);
+-	
++
+ 	%plug md2 mesh into md mesh: 
+ 	[md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.z,md.mesh.numberofelements,md.mesh.numberofvertices,elconv,nodeconv,elconv2,nodeconv2]=meshplug(md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.z,...
+ 								md2.mesh.elements,md2.mesh.x,md2.mesh.y,md2.mesh.z,md2.extractednodes,md2.extractedelements,domain_index);
+ 
+ 	%update md2 rifts using elconv and nodeconv, and plug them into md: 
+ 	md2.rifts=updateriftindexing(md2.rifts,elconv2,nodeconv2);
+-	
++
+ 	for i=1:md.rifts.numrifts,
+ 		md.rifts.riftstruct(i)=updateriftindexing(md.rifts.riftstruct(i),elconv,nodeconv);
+ 	end
+-	
++
+ 	if md.rifts.numrifts==0,
+ 		md.rifts.riftstruct=md2.rifts;
+ 		md.rifts.numrifts=1;
+@@ -72,7 +71,7 @@
+ 		md.rifts.riftstruct(end+1,1)=md2.rifts;
+ 		md.rifts.numrifts=md.rifts.numrifts+1;
+ 	end
+-	
++
+ 	md.mesh.segments(:,1:2)=nodeconv(md.mesh.segments(:,1:2));
+ 	md.mesh.segments(:,3)=elconv(md.mesh.segments(:,3));
+ 
+Index: ../trunk-jpl/src/m/mesh/rifts/rifttipsonmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/rifttipsonmesh.m	(revision 13645)
++++ ../trunk-jpl/src/m/mesh/rifts/rifttipsonmesh.m	(revision 13646)
+@@ -12,15 +12,14 @@
+ 
+ 	x_tip=rift.x(1);
+ 	y_tip=rift.y(1);
+-	
++
+ 	index=find_point(md.mesh.x,md.mesh.y,x_tip,y_tip);
+ 	tips(end+1)=index;
+ 
+ 	x_tip=rift.x(end);
+ 	y_tip=rift.y(end);
+-	
++
+ 	index=find_point(md.mesh.x,md.mesh.y,x_tip,y_tip);
+ 	tips(end+1)=index;
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.m	(revision 13645)
++++ ../trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.m	(revision 13646)
+@@ -5,11 +5,9 @@
+ %      md=meshprocessoutsiderifts(md,domain)
+ %
+ 
+-
+-
+ %go through rifts, and figure out which ones touch the domain outline
+ for i=1:md.rifts.numrifts,
+-	
++
+ 	%first, flag nodes that belong to the domain outline
+ 	flags=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,domainoutline,'node',0);
+ 
+@@ -19,7 +17,7 @@
+ 
+ 	%we have found outsidetips, tips that touch the domain outline. go through them
+ 	for j=1:length(outsidetips),
+-		
++
+ 		tip=outsidetips(j);
+ 		%find tip in the segments, take first segment (there should be 2) that holds tip, 
+ 		%and node_connected_to_tip is the other node on this segment:
+@@ -51,14 +49,14 @@
+ 			%new B:
+ 			B=md.mesh.elements(nextelement,find(~ismember(md.mesh.elements(nextelement,:),[A B])));
+ 		end
+-		
++
+ 		%take the list of elements on one side of the rift that connect to the tip, 
+ 		%and duplicate the tip on them, so as to open the rift to the outside.
+ 		num=length(md.mesh.x)+1;
+ 		md.mesh.x=[md.mesh.x;md.mesh.x(tip)];
+ 		md.mesh.y=[md.mesh.y;md.mesh.y(tip)];
+ 		md.mesh.numberofvertices=num;
+-		
++
+ 		%replace tip in elements
+ 		newelements=md.mesh.elements(elements,:);
+ 		pos=find(newelements==tip);
+@@ -80,7 +78,6 @@
+ 	end
+ end
+ 
+-
+ %Fill in rest of fields:
+ md.mesh.numberofelements=length(md.mesh.elements);
+ md.mesh.numberofvertices=length(md.mesh.x);
+Index: ../trunk-jpl/src/m/mesh/FixMesh.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/FixMesh.m	(revision 13645)
++++ ../trunk-jpl/src/m/mesh/FixMesh.m	(revision 13646)
+@@ -31,7 +31,7 @@
+ 
+ 	%now, the index:
+ 	pos=find(index2>orphan); index2(pos)=index2(pos)-1;
+-	
++
+ 	%look again for orphans on new mesh
+ 	flags=zeros(length(x2),1);flags(index2)=1;
+ 	orphans=find(flags==0);
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 13645)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 13646)
+@@ -235,7 +235,7 @@
+ 		%recover RequiredVertices
+ 		requiredvertices=double(getfieldvalue(options,'RequiredVertices')); %for some reason, it is of class "single"
+ 		if(size(requiredvertices,2)==2), requiredvertices=[requiredvertices 4.*ones(size(requiredvertices,1),1)]; end
+-	
++
+ 		%only keep those inside
+ 		flags=ContourToNodes(requiredvertices(:,1),requiredvertices(:,2),domain(1),0);
+ 		requiredvertices=requiredvertices(find(flags),:);
+Index: ../trunk-jpl/src/m/exp/expxy2ll.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expxy2ll.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/expxy2ll.m	(revision 13646)
+@@ -5,7 +5,6 @@
+ %      - sgn = Sign of latitude +1 : north latitude (default is mer=45 lat=70)
+ %                               -1 : south latitude (default is mer=0  lat=71)
+ 
+-
+ %Get central_meridian and standard_parallel depending on hemisphere
+ if nargin==4,
+ 	delta = central_meridian;
+Index: ../trunk-jpl/src/m/exp/expll2xy.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expll2xy.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/expll2xy.m	(revision 13646)
+@@ -5,7 +5,6 @@
+ %      - sgn = Sign of latitude +1 : north latitude (default is mer=45 lat=70)
+ %                               -1 : south latitude (default is mer=0  lat=71)
+ 
+-
+ %Get central_meridian and standard_parallel depending on hemisphere
+ if nargin==4,
+ 	delta = central_meridian;
+Index: ../trunk-jpl/src/m/exp/exptool.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/exptool.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/exptool.m	(revision 13646)
+@@ -307,7 +307,6 @@
+ 			backup{counter,3}=numpoints;
+ 			backup{counter,4}=closed;
+ 
+-
+ 		case 12
+ 
+ 			[A,numprofiles,numpoints,closed]=closeprofile(A,numprofiles,numpoints,closed,prevplot,root,options);
+Index: ../trunk-jpl/src/m/exp/expcontract.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expcontract.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/expcontract.m	(revision 13646)
+@@ -6,7 +6,6 @@
+ %
+ %   See also EXPMASTER, EXPDOC
+ 
+-
+ contour=expread(oldfile);
+ num=numel(contour.x);
+ 
+Index: ../trunk-jpl/src/m/exp/expcreatecontour.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expcreatecontour.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/expcreatecontour.m	(revision 13646)
+@@ -33,4 +33,3 @@
+ 
+ %write contour using expwrite
+ expwrite(a,filename);
+-
+Index: ../trunk-jpl/src/m/exp/expexcludeoutliers.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expexcludeoutliers.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/expexcludeoutliers.m	(revision 13646)
+@@ -7,7 +7,6 @@
+ %
+ %   See also EXPMASTER, EXPDOC
+ 
+-
+ contour=expread(contourname);
+ 
+ for i=1:length(contour),
+Index: ../trunk-jpl/src/m/exp/manipulation/cutarea.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/cutarea.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/manipulation/cutarea.m	(revision 13646)
+@@ -9,7 +9,7 @@
+ %
+ %   Usage:
+ %      [A,numprofiles,numpoints,closed]=cutarea(A,numprofiles,numpoints,closed,prevplot,root,options)
+-		
++
+ 	hold on
+ 	loop=1;
+ 
+Index: ../trunk-jpl/src/m/exp/manipulation/closeprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/closeprofile.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/manipulation/closeprofile.m	(revision 13646)
+@@ -12,7 +12,7 @@
+ 		disp('no profile to be closed')
+ 		return
+ 	end
+-		   
++
+ 	title('click on the profiles to be closed, RETURN to exit','FontSize',14)
+ 	hold on
+ 
+@@ -32,7 +32,7 @@
+ 		end
+ 
+ 		[xi,yi] = ginput(1);
+-					  
++
+ 		if ~isempty(xi)
+ 
+ 			%get closest profile
+Index: ../trunk-jpl/src/m/exp/manipulation/removepoints.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/removepoints.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/manipulation/removepoints.m	(revision 13646)
+@@ -6,7 +6,7 @@
+ %
+ %   Usage:
+ %      [A,numprofiles,numpoints,closed]=removepoints(A,numprofiles,numpoints,closed,prevplot,root,options)
+-		
++
+ 	%some checks
+ 	if numprofiles==0
+ 		disp('no profile present, exiting...')
+Index: ../trunk-jpl/src/m/exp/manipulation/addendprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/addendprofile.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/manipulation/addendprofile.m	(revision 13646)
+@@ -6,7 +6,7 @@
+ %
+ %   Usage:
+ %      [A,numprofiles,numpoints,closed]=addendprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-		
++
+ 	%some checks
+ 	if numprofiles==0
+ 		disp('no profile present, exiting...')
+Index: ../trunk-jpl/src/m/exp/manipulation/addcontour.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/addcontour.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/manipulation/addcontour.m	(revision 13646)
+@@ -6,7 +6,7 @@
+ %
+ %   Usage:
+ %      [A,numprofiles,numpoints,closed]=addcontour(A,numprofiles,numpoints,closed,prevplot,root,options)
+-		   
++
+ 	title('click to add a point to the new profile, RETURN to exit','FontSize',14)
+ 	hold on
+ 
+@@ -17,7 +17,7 @@
+ 	while loop
+ 
+ 		[xi,yi] = ginput(1);
+-					  
++
+ 		if ~isempty(xi)
+ 			x(end+1,1)=xi;
+ 			y(end+1,1)=yi;
+Index: ../trunk-jpl/src/m/exp/manipulation/addinsideprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/addinsideprofile.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/manipulation/addinsideprofile.m	(revision 13646)
+@@ -6,7 +6,7 @@
+ %
+ %   Usage:
+ %      [A,numprofiles,numpoints,closed]=addinsideprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-		
++
+ 	%some checks
+ 	if numprofiles==0
+ 		disp('no profile present, exiting...')
+Index: ../trunk-jpl/src/m/exp/manipulation/addprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/addprofile.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/manipulation/addprofile.m	(revision 13646)
+@@ -6,7 +6,7 @@
+ %
+ %   Usage:
+ %      [A,numprofiles,numpoints,closed]=addprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-		   
++
+ 	title('click to add a point to the new profile, RETURN to exit','FontSize',14)
+ 	hold on
+ 
+@@ -17,7 +17,7 @@
+ 	while loop
+ 
+ 		[xi,yi] = ginput(1);
+-					  
++
+ 		if ~isempty(xi)
+ 			x(end+1,1)=xi;
+ 			y(end+1,1)=yi;
+Index: ../trunk-jpl/src/m/exp/manipulation/cutprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/cutprofile.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/manipulation/cutprofile.m	(revision 13646)
+@@ -6,7 +6,7 @@
+ %
+ %   Usage:
+ %      [A,numprofiles,numpoints,closed]=cutprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+-		
++
+ 	%some checks
+ 	if numprofiles==0
+ 		disp('no profile present, exiting...')
+Index: ../trunk-jpl/src/m/exp/manipulation/modifyposition.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/modifyposition.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/manipulation/modifyposition.m	(revision 13646)
+@@ -6,7 +6,7 @@
+ %
+ %   Usage:
+ %      [A,numprofiles,numpoints,closed]=modifyposition(A,numprofiles,numpoints,closed,prevplot,root,options)
+-		
++
+ 	%some checks
+ 	if numprofiles==0
+ 		disp('no profile present, exiting..')
+Index: ../trunk-jpl/src/m/exp/manipulation/removeseveralpoints.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/removeseveralpoints.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/manipulation/removeseveralpoints.m	(revision 13646)
+@@ -6,7 +6,7 @@
+ %
+ %   Usage:
+ %      [A,numprofiles,numpoints,closed]=removeseveralpoints(A,numprofiles,numpoints,closed,prevplot,root,options)
+-		
++
+ 	%some checks
+ 	if numprofiles==0
+ 		disp('no profile present, exiting...')
+Index: ../trunk-jpl/src/m/exp/manipulation/removeprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/removeprofile.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/manipulation/removeprofile.m	(revision 13646)
+@@ -20,9 +20,9 @@
+ 			disp('no profile to be removed, exiting...')
+ 			return
+ 		end
+-		   
++
+ 		[xi,yi] = ginput(1);
+-					  
++
+ 		if ~isempty(xi)
+ 
+ 			%get closest profile
+Index: ../trunk-jpl/src/m/exp/manipulation/orientprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/orientprofile.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/manipulation/orientprofile.m	(revision 13646)
+@@ -20,9 +20,9 @@
+ 			disp('no profile to be reoriented, exiting...')
+ 			return
+ 		end
+-		   
++
+ 		[xi,yi] = ginput(1);
+-					  
++
+ 		if ~isempty(xi)
+ 
+ 			%get closest profile
+Index: ../trunk-jpl/src/m/exp/expflip.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expflip.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/expflip.m	(revision 13646)
+@@ -5,10 +5,6 @@
+ %
+ %
+ 
+-
+-
+-
+-
+ a=expread(domainname,1);
+ 
+ for i=1:length(a),
+Index: ../trunk-jpl/src/m/exp/expwrite.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expwrite.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/expwrite.m	(revision 13646)
+@@ -19,7 +19,7 @@
+ 	if(length(a(n).x)~=length(a(n).y)),
+ 		error('contours x and y coordinates must be of identical size');
+ 	end
+-   
++
+ 	if isfield(a,'name'),
+ 		if ~isempty(a(n).name),
+ 			fprintf(fid,'%s%s\n','## Name:',a(n).name);
+@@ -29,7 +29,7 @@
+ 	else
+ 		fprintf(fid,'%s\n','## Name:');
+ 	end
+-   
++
+ 	fprintf(fid,'%s\n','## Icon:0');
+ 	fprintf(fid,'%s\n','# Points Count Value');
+ 	fprintf(fid,'%i %f\n',[length(a(n).x) a(n).density]);
+Index: ../trunk-jpl/src/m/exp/expswapxy.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expswapxy.m	(revision 13645)
++++ ../trunk-jpl/src/m/exp/expswapxy.m	(revision 13646)
+@@ -6,7 +6,6 @@
+ %
+ %   See also EXPMASTER, EXPDOC
+ 
+-
+ contours=expread(filename,1);
+ 
+ newcontours=contours(1);
+Index: ../trunk-jpl/src/m/solvers/asmoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/asmoptions.m	(revision 13645)
++++ ../trunk-jpl/src/m/solvers/asmoptions.m	(revision 13646)
+@@ -3,7 +3,7 @@
+ %
+ %   Usage:
+ %      options=asmoptions;
+-			 
++
+ %retrieve options provided in varargin
+ options=pairoptions(varargin{:});
+ asm=struct();
+Index: ../trunk-jpl/src/m/solvers/jacobiasmoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/jacobiasmoptions.m	(revision 13645)
++++ ../trunk-jpl/src/m/solvers/jacobiasmoptions.m	(revision 13646)
+@@ -3,7 +3,7 @@
+ %
+ %   Usage:
+ %      options=jacobiasmoptions;
+-			 
++
+ %retrieve options provided in varargin
+ options=pairoptions(varargin{:});
+ jacobiasm=struct();
+Index: ../trunk-jpl/src/m/solvers/iluasmoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/iluasmoptions.m	(revision 13645)
++++ ../trunk-jpl/src/m/solvers/iluasmoptions.m	(revision 13646)
+@@ -3,7 +3,7 @@
+ %
+ %   Usage:
+ %      options=iluasmoptions;
+-			 
++
+ %retrieve options provided in varargin
+ options=pairoptions(varargin{:});
+ iluasm=struct();
+Index: ../trunk-jpl/src/m/solvers/matlaboptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/matlaboptions.m	(revision 13645)
++++ ../trunk-jpl/src/m/solvers/matlaboptions.m	(revision 13646)
+@@ -3,7 +3,7 @@
+ %
+ %   Usage:
+ %      options=matlaboptions;
+-			 
++
+ %retrieve options provided in varargin
+ options=pairoptions(varargin{:});
+ maltab=struct();
+Index: ../trunk-jpl/src/m/solvers/jacobicgoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/jacobicgoptions.m	(revision 13645)
++++ ../trunk-jpl/src/m/solvers/jacobicgoptions.m	(revision 13646)
+@@ -3,7 +3,7 @@
+ %
+ %   Usage:
+ %      options=jacobiasmoptions;
+-			 
++
+ %retrieve options provided in varargin
+ options=pairoptions(varargin{:});
+ jacobicg=struct();
+Index: ../trunk-jpl/src/m/solvers/soroptions.m
+===================================================================
+--- ../trunk-jpl/src/m/solvers/soroptions.m	(revision 13645)
++++ ../trunk-jpl/src/m/solvers/soroptions.m	(revision 13646)
+@@ -3,7 +3,7 @@
+ %
+ %   Usage:
+ %      options=soroptions;
+-			 
++
+ %retrieve options provided in varargin
+ options=pairoptions(varargin{:});
+ sor=struct();
+Index: ../trunk-jpl/src/m/classes/prognostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/prognostic.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/prognostic.m	(revision 13646)
+@@ -49,7 +49,6 @@
+ 				md = checkfield(md,'prognostic.requested_outputs','size',[NaN 1]);
+ 			end
+ 
+-
+ 		end % }}}
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   Prognostic solution parameters:'));
+Index: ../trunk-jpl/src/m/classes/flaim.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/flaim.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/flaim.m	(revision 13646)
+@@ -58,7 +58,7 @@
+ 			fielddisplay(obj,'gridsatequator'     ,'number of grids at equator (determines resolution)');
+ 			fielddisplay(obj,'usevalueordering'   ,'flag to consider target values for flight path evaluation');
+ 			fielddisplay(obj,'split_antimeridian' ,'flag to split polygons on the antimeridian');
+-			
++
+ 			disp(sprintf('\n      Optimization:'));
+ 			fielddisplay(obj,'path_optimize'     ,'optimize? (default false)');
+ 			fielddisplay(obj,'opt_ndir'     ,{'number of directions to test when moving a point.  If this value = 1, a random direction is tested.',...
+Index: ../trunk-jpl/src/m/classes/organizer.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/organizer.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/organizer.m	(revision 13646)
+@@ -113,7 +113,7 @@
+ 			 end
+ 		 end%}}}
+ 		 function bool=perform(org,string) % {{{
+-			 
++
+ 			 bool=false;
+ 
+ 			 %Some checks
+@@ -154,7 +154,7 @@
+ 
+ 			 name=[org.repository '/' org.prefix org.steps(org.currentstep).string ];
+ 			 disp(['saving model as: ' name]);
+-			 
++
+ 			 %check that md is a model
+ 			 if ~isa(md,'model'), warning('third argument is not a model'); end
+ 			 if (org.currentstep>length(org.steps)), error(['organizer error message: element with id ' num2str(org.currentstep) ' not found']); end
+Index: ../trunk-jpl/src/m/classes/groundingline.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/groundingline.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/groundingline.m	(revision 13646)
+@@ -25,7 +25,6 @@
+ 			%basal melting rate correction: 
+ 			obj.melting_rate=0; 
+ 
+-
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+Index: ../trunk-jpl/src/m/classes/qmu/continuous_state.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/continuous_state.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu/continuous_state.m	(revision 13646)
+@@ -34,7 +34,7 @@
+         lower     =-Inf;
+         upper     = Inf;
+     end
+-    
++
+     methods
+         function [csv]=continuous_state(varargin)
+ 
+@@ -60,7 +60,7 @@
+                     asizec=num2cell(array_size(varargin{1:min(nargin,4)}));
+                     csv(asizec{:})=continuous_state;
+                     clear asizec
+-                    
++
+                     if ischar(varargin{1})
+                         varargin{1}=cellstr(varargin{1});
+                     end
+@@ -176,7 +176,7 @@
+             scale=[];
+         end
+     end
+-    
++
+     methods (Static)
+         function []=dakota_write(fidi,dvar)
+ 
+Index: ../trunk-jpl/src/m/classes/qmu/nonlinear_equality_constraint.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/nonlinear_equality_constraint.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu/nonlinear_equality_constraint.m	(revision 13646)
+@@ -34,7 +34,7 @@
+         scale_type='none';
+         scale     = 1.;
+     end
+-    
++
+     methods
+         function [nec]=nonlinear_equality_constraint(varargin)
+ 
+@@ -60,7 +60,7 @@
+                     asizec=num2cell(array_size(varargin{1:min(nargin,4)}));
+                     nec(asizec{:})=nonlinear_equality_constraint;
+                     clear asizec
+-                    
++
+                     if ischar(varargin{1})
+                         varargin{1}=cellstr(varargin{1});
+                     end
+@@ -170,7 +170,7 @@
+             target=allequal(target,0.);
+         end
+     end
+-    
++
+     methods (Static)
+         function [rdesc]=dakota_write(fidi,dresp,rdesc)
+ 
+Index: ../trunk-jpl/src/m/classes/qmu/uniform_uncertain.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/uniform_uncertain.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu/uniform_uncertain.m	(revision 13646)
+@@ -31,7 +31,7 @@
+         lower     =-Inf;
+         upper     = Inf;
+     end
+-    
++
+     methods
+         function [uuv]=uniform_uncertain(varargin)
+ 
+@@ -63,7 +63,7 @@
+                     asizec=num2cell(array_size(varargin{1:min(nargin,3)}));
+                     uuv(asizec{:})=uniform_uncertain;
+                     clear asizec
+-                    
++
+                     if ischar(varargin{1})
+                         varargin{1}=cellstr(varargin{1});
+                     end
+@@ -151,7 +151,7 @@
+             scale=[];
+         end
+     end
+-    
++
+     methods (Static)
+         function []=dakota_write(fidi,dvar)
+ 
+Index: ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu/@dakota_method/dmeth_params_write.m	(revision 13646)
+@@ -45,7 +45,7 @@
+             otherwise
+                 error('Unrecognized ''%s'' method: ''%s''.',dm.type,dm.method);
+         end
+-        
++
+     case {'npsol'}
+         param_write(fid,sbeg,'max_iterations','           = ','\n',dm.params);
+         param_write(fid,sbeg,'max_function_evaluations',' = ','\n',dm.params);
+@@ -63,7 +63,7 @@
+             otherwise
+                 error('Unrecognized ''%s'' method: ''%s''.',dm.type,dm.method);
+         end
+-        
++
+     case {'conmin'}
+         param_write(fid,sbeg,'max_iterations','           = ','\n',dm.params);
+         param_write(fid,sbeg,'max_function_evaluations',' = ','\n',dm.params);
+@@ -79,7 +79,7 @@
+             otherwise
+                 error('Unrecognized ''%s'' method: ''%s''.',dm.type,dm.method);
+         end
+-        
++
+     case {'optpp'}
+         param_write(fid,sbeg,'max_iterations','           = ','\n',dm.params);
+         param_write(fid,sbeg,'max_function_evaluations',' = ','\n',dm.params);
+@@ -119,7 +119,7 @@
+             otherwise
+                 error('Unrecognized ''%s'' method: ''%s''.',dm.type,dm.method);
+         end
+-        
++
+     case {'apps'}
+         param_write(fid,sbeg,'max_function_evaluations',' = ','\n',dm.params);
+         param_write(fid,sbeg,'constraint_tolerance','     = ','\n',dm.params);
+@@ -139,7 +139,7 @@
+             otherwise
+                 error('Unrecognized ''%s'' method: ''%s''.',dm.type,dm.method);
+         end
+-        
++
+     case {'coliny'}
+         param_write(fid,sbeg,'max_iterations','           = ','\n',dm.params);
+         param_write(fid,sbeg,'max_function_evaluations',' = ','\n',dm.params);
+@@ -211,7 +211,7 @@
+             otherwise
+                 error('Unrecognized ''%s'' method: ''%s''.',dm.type,dm.method);
+         end
+-        
++
+     case {'ncsu'}
+         param_write(fid,sbeg,'max_iterations','           = ','\n',dm.params);
+         param_write(fid,sbeg,'max_function_evaluations',' = ','\n',dm.params);
+@@ -225,7 +225,7 @@
+             otherwise
+                 error('Unrecognized ''%s'' method: ''%s''.',dm.type,dm.method);
+         end
+-        
++
+     case {'jega'}
+         param_write(fid,sbeg,'max_iterations','           = ','\n',dm.params);
+         param_write(fid,sbeg,'max_function_evaluations',' = ','\n',dm.params);
+@@ -281,7 +281,7 @@
+             otherwise
+                 error('Unrecognized ''%s'' method: ''%s''.',dm.type,dm.method);
+         end
+-        
++
+     case {'lsq'}
+         switch dm.method
+             case {'nl2sol'}
+@@ -343,7 +343,7 @@
+             otherwise
+                 error('Unrecognized ''%s'' method: ''%s''.',dm.type,dm.method);
+         end
+-        
++
+     case {'nond'}
+         switch dm.method
+             case {'nond_sampling'}
+@@ -425,7 +425,7 @@
+             otherwise
+                 error('Unrecognized ''%s'' method: ''%s''.',dm.type,dm.method);
+         end
+-        
++
+     case {'dace'}
+         switch dm.method
+             case {'dace'}
+@@ -483,7 +483,7 @@
+             otherwise
+                 error('Unrecognized ''%s'' method: ''%s''.',dm.type,dm.method);
+         end
+-        
++
+     case {'param'}
+         param_write(fid,sbeg,'output',' ','\n',dm.params);
+         switch dm.method
+@@ -511,7 +511,7 @@
+ 
+             case {'multidim_parameter_study'}
+                 param_write(fid,sbeg,'partitions',' = ','\n',dm.params);
+-            
++
+             otherwise
+                 error('Unrecognized ''%s'' method: ''%s''.',dm.type,dm.method);
+         end
+Index: ../trunk-jpl/src/m/classes/qmu/@dakota_method/dakota_method.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/@dakota_method/dakota_method.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu/@dakota_method/dakota_method.m	(revision 13646)
+@@ -48,7 +48,7 @@
+     properties
+         params   =struct();
+     end
+-    
++
+     methods
+         function [dm]=dakota_method(method)
+ 
+@@ -827,7 +827,7 @@
+                         end
+ 
+                     end
+-                    
++
+ %  if more than one argument, issue warning
+ 
+                 otherwise
+@@ -851,7 +851,7 @@
+                 disp(sprintf('       lcspec: %s'      ,string_cell(dm(i).lcspec)));
+                 disp(sprintf('    responses: %s'      ,string_cell(dm(i).responses)));
+                 disp(sprintf('       ghspec: %s\n'    ,string_cell(dm(i).ghspec)));
+-    
++
+ %  display the parameters within the object
+ 
+                 fnames=fieldnames(dm(i).params);
+@@ -859,7 +859,7 @@
+                 for j=1:numel(fnames)
+                     maxlen=max(maxlen,length(fnames{j}));
+                 end
+-    
++
+                 for j=1:numel(fnames)
+                     disp(sprintf(['       params.%-' num2str(maxlen+1) 's: %s'],...
+                         fnames{j},any2str(dm(i).params.(fnames{j}))));
+@@ -869,4 +869,3 @@
+         end
+     end
+ end
+-
+Index: ../trunk-jpl/src/m/classes/qmu/linear_equality_constraint.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/linear_equality_constraint.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu/linear_equality_constraint.m	(revision 13646)
+@@ -34,7 +34,7 @@
+         scale_type='none';
+         scale     = 1.;
+     end
+-    
++
+     methods
+         function [lec]=linear_equality_constraint(varargin)
+ 
+@@ -68,7 +68,7 @@
+                     end
+                     lec(asizec{:})=linear_equality_constraint;
+                     clear asizec
+-                    
++
+                     for i=1:numel(lec)
+                         if (size(varargin{1},1) > 1)
+                             lec(i).matrix    =varargin{1}(i,:);
+@@ -166,7 +166,7 @@
+             scale=allequal(scale,1.);
+         end
+     end
+-    
++
+     methods (Static)
+         function []=dakota_write(fidi,dvar)
+ 
+Index: ../trunk-jpl/src/m/classes/qmu/nonlinear_inequality_constraint.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/nonlinear_inequality_constraint.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu/nonlinear_inequality_constraint.m	(revision 13646)
+@@ -36,7 +36,7 @@
+         scale_type='none';
+         scale     = 1.;
+     end
+-    
++
+     methods
+         function [nic]=nonlinear_inequality_constraint(varargin)
+ 
+@@ -68,7 +68,7 @@
+                     asizec=num2cell(array_size(varargin{1:min(nargin,5)}));
+                     nic(asizec{:})=nonlinear_inequality_constraint;
+                     clear asizec
+-                    
++
+                     if ischar(varargin{1})
+                         varargin{1}=cellstr(varargin{1});
+                     end
+@@ -188,7 +188,7 @@
+             target=[];
+         end
+     end
+-    
++
+     methods (Static)
+         function [rdesc]=dakota_write(fidi,dresp,rdesc)
+ 
+Index: ../trunk-jpl/src/m/classes/qmu/continuous_design.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/continuous_design.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu/continuous_design.m	(revision 13646)
+@@ -38,7 +38,7 @@
+         scale_type='none';
+         scale     = 1.;
+     end
+-    
++
+     methods
+         function [cdv]=continuous_design(varargin)
+ 
+@@ -64,7 +64,7 @@
+                     asizec=num2cell(array_size(varargin{1:min(nargin,6)}));
+                     cdv(asizec{:})=continuous_design;
+                     clear asizec
+-                    
++
+                     if ischar(varargin{1})
+                         varargin{1}=cellstr(varargin{1});
+                     end
+@@ -211,7 +211,7 @@
+             scale=allequal(scale,1.);
+         end
+     end
+-    
++
+     methods (Static)
+         function []=dakota_write(fidi,dvar)
+ 
+Index: ../trunk-jpl/src/m/classes/qmu/objective_function.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/objective_function.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu/objective_function.m	(revision 13646)
+@@ -34,7 +34,7 @@
+         scale     = 1.;
+         weight    = 1.;
+     end
+-    
++
+     methods
+         function [of]=objective_function(varargin)
+ 
+@@ -53,7 +53,7 @@
+                         asizec=num2cell(array_size(varargin{1:min(nargin,4)}));
+                         of(asizec{:})=objective_function;
+                         clear asizec
+-                    
++
+                         if ischar(varargin{1})
+                             varargin{1}=cellstr(varargin{1});
+                         end
+@@ -168,7 +168,7 @@
+             target=[];
+         end
+     end
+-    
++
+     methods (Static)
+         function [rdesc]=dakota_write(fidi,dresp,rdesc)
+ 
+Index: ../trunk-jpl/src/m/classes/qmu/normal_uncertain.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/normal_uncertain.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu/normal_uncertain.m	(revision 13646)
+@@ -36,7 +36,7 @@
+         lower     =-Inf;
+         upper     = Inf;
+     end
+-    
++
+     methods
+         function [nuv]=normal_uncertain(varargin)
+ 
+@@ -68,7 +68,7 @@
+                     asizec=num2cell(array_size(varargin{1:min(nargin,5)}));
+                     nuv(asizec{:})=normal_uncertain;
+                     clear asizec
+-                    
++
+                     if ischar(varargin{1})
+                         varargin{1}=cellstr(varargin{1});
+                     end
+@@ -192,7 +192,7 @@
+             scale=[];
+         end
+     end
+-    
++
+     methods (Static)
+         function []=dakota_write(fidi,dvar)
+ 
+Index: ../trunk-jpl/src/m/classes/qmu/least_squares_term.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/least_squares_term.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu/least_squares_term.m	(revision 13646)
+@@ -34,7 +34,7 @@
+         scale     = 1.;
+         weight    = 1.;
+     end
+-    
++
+     methods
+         function [lst]=least_squares_term(varargin)
+ 
+@@ -53,7 +53,7 @@
+                         asizec=num2cell(array_size(varargin{1:min(nargin,4)}));
+                         lst(asizec{:})=least_squares_term;
+                         clear asizec
+-                    
++
+                         if ischar(varargin{1})
+                             varargin{1}=cellstr(varargin{1});
+                         end
+@@ -168,7 +168,7 @@
+             target=[];
+         end
+     end
+-    
++
+     methods (Static)
+         function [rdesc]=dakota_write(fidi,dresp,rdesc)
+ 
+Index: ../trunk-jpl/src/m/classes/qmu/linear_inequality_constraint.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/linear_inequality_constraint.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu/linear_inequality_constraint.m	(revision 13646)
+@@ -36,7 +36,7 @@
+         scale_type='none';
+         scale     = 1.;
+     end
+-    
++
+     methods
+         function [lic]=linear_inequality_constraint(varargin)
+ 
+@@ -76,7 +76,7 @@
+                     end
+                     lic(asizec{:})=linear_inequality_constraint;
+                     clear asizec
+-                    
++
+                     for i=1:numel(lic)
+                         if (size(varargin{1},1) > 1)
+                             lic(i).matrix    =varargin{1}(i,:);
+@@ -188,7 +188,7 @@
+             scale=allequal(scale,1.);
+         end
+     end
+-    
++
+     methods (Static)
+         function []=dakota_write(fidi,dvar)
+ 
+@@ -202,4 +202,3 @@
+         end
+     end
+ end
+-
+Index: ../trunk-jpl/src/m/classes/qmu/response_function.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu/response_function.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu/response_function.m	(revision 13646)
+@@ -36,7 +36,7 @@
+         rell      =[];
+         grell     =[];
+     end
+-    
++
+     methods
+         function [rf]=response_function(varargin)
+ 
+@@ -55,7 +55,7 @@
+                         asizec=num2cell(array_size(varargin{1:min(nargin,1)}));
+                         rf(asizec{:})=response_function;
+                         clear asizec
+-                    
++
+                         if ischar(varargin{1})
+                             varargin{1}=cellstr(varargin{1});
+                         end
+@@ -165,7 +165,7 @@
+             grell=allempty(grell);
+         end
+     end
+-    
++
+     methods (Static)
+         function [rdesc]=dakota_write(fidi,dresp,rdesc)
+ 
+@@ -177,7 +177,7 @@
+ 
+             [rdesc]=rlist_write(fidi,'response_functions','response_function',rf,rdesc);
+         end
+-        
++
+         function []=dakota_rlev_write(fidi,dresp,params)
+ 
+ %  collect only the responses of the appropriate class
+Index: ../trunk-jpl/src/m/classes/mesh.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/mesh.m	(revision 13646)
+@@ -14,7 +14,7 @@
+ 		numberofelements            = 0;
+ 		numberofvertices            = 0;
+ 		numberofedges               = 0;
+-		
++
+ 		lat                         = NaN
+ 		long                        = NaN
+ 		hemisphere                  = NaN
+@@ -157,7 +157,7 @@
+ 			fielddisplay(obj,'lowervertex','lower vertex list (NaN for vertex on the lower surface)');
+ 			fielddisplay(obj,'lowerelements','lower element list (NaN for element on the lower layer');
+ 			fielddisplay(obj,'vertexonboundary','vertices on the boundary of the domain flag list');
+-			
++
+ 			fielddisplay(obj,'segments','edges on domain boundary (vertex1 vertex2 element)');
+ 			fielddisplay(obj,'segmentmarkers','number associated to each segment');
+ 			fielddisplay(obj,'vertexconnectivity','list of vertices connected to vertex_i');
+Index: ../trunk-jpl/src/m/classes/modellist.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/modellist.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/modellist.m	(revision 13646)
+@@ -270,7 +270,6 @@
+ 				return
+ 			end
+ 
+-
+ 			%now, tar all the files and then erase them.
+ 			eval(['!find -iname ''' name '-*'' > file_list.txt']);
+ 			!tar zcvf ModelList.tar.gz --files-from file_list.txt
+@@ -368,7 +367,6 @@
+ %   Usage:
+ %      LaunchMultipleQueueJobgemini(cluster,name,executionpath)
+ 
+-
+ %first, check we have the binary file and the queueing script
+ if ~exist([ name '.queue'],'file'),
+ 	error('LaunchMultipleQueueJobgemini error message: queueing script issing, cannot go forward');
+Index: ../trunk-jpl/src/m/classes/planetmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/planetmesh.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/planetmesh.m	(revision 13646)
+@@ -16,7 +16,7 @@
+ 		numberoflayers              = 0;
+ 		numberofelements            = 0;
+ 		numberofvertices            = 0;
+-		
++
+ 		lat                         = NaN
+ 		long                        = NaN
+ 
+@@ -102,7 +102,7 @@
+ 			disp(sprintf('\n      Properties:'));
+ 			fielddisplay(obj,'dimension','planetmesh dimension (2d or 3d)');
+ 			fielddisplay(obj,'numberoflayers','number of extrusion layers');
+-			
++
+ 			fielddisplay(obj,'vertexconnectivity','list of vertices connected to vertex_i');
+ 			fielddisplay(obj,'elementconnectivity','list of vertices connected to element_i');
+ 			fielddisplay(obj,'average_vertex_connectivity','average number of vertices connected to one vertex');
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 13646)
+@@ -40,7 +40,6 @@
+ 				md=checkconsistency(indep,md,i,solution,analyses,obj.driver);
+ 			end
+ 
+-
+ 		end % }}}
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   automatic differentiation parameters:'));
+@@ -53,7 +52,7 @@
+ 
+ 			WriteData(fid,'object',obj,'fieldname','isautodiff','format','Boolean');
+ 			WriteData(fid,'object',obj,'fieldname','driver','format','String');
+-			
++
+ 			%early return
+ 			if ~obj.isautodiff, 
+ 				WriteData(fid,'data',false,'enum',AutodiffMassFluxSegmentsPresentEnum,'format','Boolean');
+@@ -103,7 +102,7 @@
+ 			%if driver is fos_forward, build index:  {{{
+ 			if strcmpi(obj.driver,'fos_forward'),
+ 				index=0;
+-				
++
+ 				for i=1:num_independent_objects,
+ 					indep=obj.independents{i};
+ 					if ~isnan(indep.fos_forward_index),
+@@ -124,7 +123,7 @@
+ 			%if driver is fos_reverse, build index:  {{{
+ 			if strcmpi(obj.driver,'fos_reverse'),
+ 				index=0;
+-				
++
+ 				for i=1:num_dependent_objects,
+ 					dep=obj.dependents{i};
+ 					if ~isnan(dep.fos_reverse_index),
+@@ -145,7 +144,7 @@
+ 			%if driver is fov_forward, build indices:  {{{
+ 			if strcmpi(obj.driver,'fov_forward'),
+ 				indices=0;
+-				
++
+ 				for i=1:num_independent_objects,
+ 					indep=obj.independents{i};
+ 					if ~isempty(indep.fos_forward_index),
+Index: ../trunk-jpl/src/m/classes/qmu.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/qmu.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/qmu.m	(revision 13646)
+@@ -32,7 +32,7 @@
+ 			end
+ 		end % }}}
+ 		function obj = setdefaultparameters(obj) % {{{
+-	
++
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+ 
+Index: ../trunk-jpl/src/m/classes/verbose.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/verbose.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/verbose.m	(revision 13646)
+@@ -108,7 +108,7 @@
+ 
+ 		end % }}}
+ 		function disp(verbose) % {{{
+-			
++
+ 		%BEGINDISP
+ 		disp(sprintf('class ''%s''  = ',class(verbose)));
+ 		disp(sprintf('   %15s : %s','mprocessor',mat2str(verbose.mprocessor)));
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 13646)
+@@ -929,7 +929,7 @@
+ 			 if isfield(structmd,'diagnostic_ref'), md.diagnostic.referential=structmd.diagnostic_ref; end
+ 			 if isfield(structmd,'npart'); md.qmu.numberofpartitions=structmd.npart; end
+ 			 if isfield(structmd,'part'); md.qmu.partition=structmd.part; end
+-				 
++
+ 			 %Field changes
+ 			 if (isfield(structmd,'type') & ischar(structmd.type)), 
+ 				 if strcmpi(structmd.type,'2d'), md.mesh.dimension=2; end
+@@ -1036,7 +1036,7 @@
+ 				 md.mesh.lowerelements=transpose(1:md.mesh.numberofelements)-md.mesh.numberofelements2d;
+ 				 md.mesh.lowerelements(1:md.mesh.numberofelements2d)=NaN;
+ 			 end
+-				 
++
+ 			 if ~isfield(structmd,'diagnostic_ref');
+ 				 md.diagnostic.referential=NaN*ones(md.mesh.numberofvertices,6);
+ 			 end
+Index: ../trunk-jpl/src/m/classes/dependent.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/dependent.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/dependent.m	(revision 13646)
+@@ -15,10 +15,10 @@
+ 	end
+ 	methods
+ 		 function obj= dependent(varargin) % {{{
+-			 
++
+ 			 %use provided options to change fields
+ 			 options=pairoptions(varargin{:});
+-				
++
+ 			 obj.name=getfieldvalue(options,'name','');
+ 			 obj.type=getfieldvalue(options,'type','');
+ 			 obj.exp=getfieldvalue(options,'exp','');
+@@ -67,7 +67,7 @@
+ 
+ 			fielddisplay(obj,'name','variable name (must match corresponding Enum)');
+ 			fielddisplay(obj,'type','type of variable (''vertex'' or ''scalar'')');
+-			
++
+ 			if ~isnan(obj.fos_reverse_index),
+ 				fielddisplay(obj,'fos_reverse_index','index for fos_reverse driver of ADOLC');
+ 			end
+Index: ../trunk-jpl/src/m/classes/surfaceforcings.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/surfaceforcings.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/surfaceforcings.m	(revision 13646)
+@@ -36,7 +36,7 @@
+ 			end
+ 		end % }}}
+ 		function obj = setdefaultparameters(obj) % {{{
+-		  
++
+ 		  %pdd method not used in default mode
+ 		  obj.ispdd=0;
+ 		  obj.issmbgradients=0;
+Index: ../trunk-jpl/src/m/classes/diagnostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/diagnostic.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/diagnostic.m	(revision 13646)
+@@ -37,12 +37,12 @@
+ 
+ 			 %maximum of non-linear iterations.
+ 			 obj.maxiter=100;
+-			 
++
+ 			 %Convergence criterion: absolute, relative and residual
+ 			 obj.restol=10^-4; 
+ 			 obj.reltol=0.01;
+ 			 obj.abstol=10;
+-			 
++
+ 			 obj.stokesreconditioning=10^13;
+ 			 obj.shelf_dampening=0;
+ 
+Index: ../trunk-jpl/src/m/classes/independent.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/independent.m	(revision 13645)
++++ ../trunk-jpl/src/m/classes/independent.m	(revision 13646)
+@@ -13,7 +13,7 @@
+ 	end
+ 	methods
+ 		 function obj= independent(varargin) % {{{
+-			 
++
+ 			 %use provided options to change fields
+ 			 options=pairoptions(varargin{:});
+ 
+@@ -48,7 +48,6 @@
+ 				md = checkfield(md,['autodiff.independents{' num2str(i) '}.fov_forward_indices'],'>=',1,'<=',obj.nods,'size',[NaN 1]);
+ 			end
+ 
+-
+ 		end % }}}
+ 		function disp(obj) % {{{
+ 			disp(sprintf('   independent variable :'));
+Index: ../trunk-jpl/src/m/inversions/parametercontrolB.m
+===================================================================
+--- ../trunk-jpl/src/m/inversions/parametercontrolB.m	(revision 13645)
++++ ../trunk-jpl/src/m/inversions/parametercontrolB.m	(revision 13646)
+@@ -38,7 +38,6 @@
+ 	md.inversion.nsteps=nsteps;
+ end
+ 
+-
+ %cm_min
+ cm_min=getfieldvalue(options,'cm_min',paterson(273.15+5)*ones(md.mesh.numberofvertices,1));
+ if (length(cm_min)==1)
+Index: ../trunk-jpl/src/m/regional/regionaltransient2d.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/regionaltransient2d.m	(revision 13645)
++++ ../trunk-jpl/src/m/regional/regionaltransient2d.m	(revision 13646)
+@@ -155,4 +155,3 @@
+ 	if isstruct(md1.results),
+ 		md2.results=[];
+ 	end
+-
+Index: ../trunk-jpl/src/m/regional/showbasins.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/showbasins.m	(revision 13645)
++++ ../trunk-jpl/src/m/regional/showbasins.m	(revision 13646)
+@@ -21,7 +21,6 @@
+ 	options=pairoptions(varargin{:});
+ end
+ 
+-
+ %recover some options, and set defaults
+ unitmultiplier=getfieldvalue(options,'unit',1);
+ fontsize=getfieldvalue(options,'fontsize',12);
+Index: ../trunk-jpl/src/m/regional/basinzoom.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/basinzoom.m	(revision 13645)
++++ ../trunk-jpl/src/m/regional/basinzoom.m	(revision 13646)
+@@ -38,7 +38,7 @@
+ 
+ %Ok, find basin we are talking about: 
+ load([jplsvn() '/projects/ModelData/Names/Names.mat']);
+-		
++
+ %Go through names: 
+ found=0;
+ for i=1:size(names,1),
+Index: ../trunk-jpl/src/m/contrib/uci/expremovestraightsegments.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/uci/expremovestraightsegments.m	(revision 13645)
++++ ../trunk-jpl/src/m/contrib/uci/expremovestraightsegments.m	(revision 13646)
+@@ -10,10 +10,10 @@
+ 
+ for i=1:length(a),
+ 	contour=a(i);
+-	
++
+ 	s=sqrt(contour.x.^2+contour.y.^2);
+ 	d=diff(s);
+-	
++
+ 	pos=find(abs(d)>cutoff);
+ 	pos=[0;pos;length(contour.x)];
+ 
+Index: ../trunk-jpl/src/m/contrib/bamg/YamsCall.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/bamg/YamsCall.m	(revision 13645)
++++ ../trunk-jpl/src/m/contrib/bamg/YamsCall.m	(revision 13646)
+@@ -52,10 +52,10 @@
+ fprintf(fid,'\n\n%s\n%i\n\n','Triangles',md.mesh.numberofelements);
+ fprintf(fid,'%i %i %i %i\n',[md.mesh.elements zeros(md.mesh.numberofelements,1)]');
+ numberofelements1=md.mesh.numberofelements;
+-	
++
+ %Deal with rifts
+ if ~isnan(md.rifts.riftstruct),
+-	
++
+ 	%we have the list of triangles that make up the rift. keep those triangles around during refinement.
+ 	triangles=[];
+ 	for i=1:size(md.rifts.riftstruct,1),
+Index: ../trunk-jpl/src/m/contrib/bamg/yams.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/bamg/yams.m	(revision 13645)
++++ ../trunk-jpl/src/m/contrib/bamg/yams.m	(revision 13646)
+@@ -101,7 +101,7 @@
+ 	end
+ 
+ end
+-	
++
+ disp(['Final mesh, number of elements: ' num2str(md.mesh.numberofelements)]);
+ 
+ %Now, build the connectivity tables for this mesh.
+Index: ../trunk-jpl/src/m/interp/SectionValues.m
+===================================================================
+--- ../trunk-jpl/src/m/interp/SectionValues.m	(revision 13645)
++++ ../trunk-jpl/src/m/interp/SectionValues.m	(revision 13646)
+@@ -22,7 +22,6 @@
+ 	y=infile.y;
+ end
+ 
+-
+ %get the specified resolution
+ if isnumeric(resolution(1))
+ 	res_h=resolution(1);
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 13645)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 13646)
+@@ -46,8 +46,6 @@
+ %   Usage:
+ %      [analyses, numanalyses]=AnalysisConfiguration(solutiontype);
+ 
+-
+-
+ switch solutiontype,
+ 
+ 	case DiagnosticSolutionEnum(),
+Index: ../trunk-jpl/src/m/qmu/dakota_out_parse.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/dakota_out_parse.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/dakota_out_parse.m	(revision 13646)
+@@ -169,7 +169,7 @@
+     desc(1,i)=cellstr(tokens{1}{i+1});
+ end
+ display(sprintf('Number of columns (Dakota V+R)=%d.',ntokens-1));
+-    
++
+ %  process rows of matrix
+ 
+ nrow=0;
+@@ -300,7 +300,7 @@
+         break;
+     end
+     [ntokens,tokens]=fltokens(fline);
+-    
++
+ %  add new response function and moments
+ 
+     dresp(end+1).descriptor=tokens{1}{ 1};
+@@ -335,7 +335,7 @@
+         break;
+     end
+     [ntokens,tokens]=fltokens(fline);
+-   
++
+ %  find response function associated with confidence intervals
+ 
+     idresp=0;
+@@ -463,11 +463,11 @@
+     cmat.column=cell(1,ntokens);
+     cmat.row   =cell(1,1);
+     cmat.matrix=zeros(1,ntokens);
+-    
++
+     for i=1:ntokens
+         cmat.column(1,i)=cellstr(tokens{1}{i});
+     end
+-    
++
+ %  process rows of matrix, reading until blank line
+ 
+     nrow=0;
+@@ -582,7 +582,7 @@
+             dresp(idresp).descriptor=tokens{1}{ 6};
+             display(sprintf('  %s',dresp(idresp).descriptor));
+         end
+-    
++
+ %  skip column headings of cdf
+ 
+         fline=fgetl(fidi);
+Index: ../trunk-jpl/src/m/qmu/qmumarshall.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/qmumarshall.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/qmumarshall.m	(revision 13646)
+@@ -46,7 +46,7 @@
+ 		qmu_segments=1;
+ 	end
+ end
+-			
++
+ if qmu_segments,
+ 	WriteData(fid,md.qmu.mass_flux_num_profiles,'Integer','qmu_mass_flux_num_profiles');
+ 	for i=1:md.qmu.mass_flux_num_profiles,
+@@ -57,7 +57,6 @@
+ 	WriteData(fid,md.qmu.mass_flux_num_profiles,'Integer','qmu_mass_flux_num_profiles');
+ end
+ 
+-
+ %write part and npart to disk
+ WriteData(fid,md.qmu.numberofpartitions,'Integer','npart');
+ WriteData(fid,md.qmu.partition,'Mat','part');
+Index: ../trunk-jpl/src/m/qmu/dakota_in_params.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/dakota_in_params.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/dakota_in_params.m	(revision 13646)
+@@ -208,4 +208,3 @@
+ end
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/qmu/qmuisdistributed.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/qmuisdistributed.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/qmuisdistributed.m	(revision 13646)
+@@ -1,7 +1,6 @@
+ function found=qmuisdistribted(string)
+ %QMUISDISTRIBTED - figure out if a string is a decriptor with a numerical postfix. Like thickness1, or drag10
+ 
+-
+ %just take last string element, and see if it is numeric.
+ last=string(end);
+ 
+Index: ../trunk-jpl/src/m/qmu/sensitivities.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/sensitivities.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/sensitivities.m	(revision 13646)
+@@ -8,7 +8,6 @@
+ %   Example: sens=sensitivities(md,'DragCoefficient','MaxVel');
+ %
+ 
+-
+ variablenamelength=length(variablename);
+ 
+ %go through all response functions and find the one corresponding to the correct responsename
+Index: ../trunk-jpl/src/m/qmu/dakota_cdfs.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/dakota_cdfs.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/dakota_cdfs.m	(revision 13646)
+@@ -135,9 +135,9 @@
+                 resp,prob,rel,grel);
+         end
+     end
+-    
++
+     varargout{1}=dresp;
+-    
++
+ elseif exist('samp','var') && ~isempty(samp)
+     cdf=zeros(length(resp)+length(prob)+length(rel)+length(grel),...
+               4,size(samp,2));
+@@ -146,9 +146,9 @@
+         [cdf(:,:,i)]=cdfs_samp_calc(samp(:,i),...
+             resp,prob,rel,grel);
+     end
+-    
++
+     varargout{1}=cdf;
+-    
++
+ elseif exist('mean','var'  ) && ~isempty(mean  ) && ...
+        exist('stddev','var') && ~isempty(stddev)
+     cdf=zeros(length(resp)+length(prob)+length(rel)+length(grel),...
+@@ -158,7 +158,7 @@
+         [cdf(:,:,i)]=cdfs_lr_calc(mean(i),stddev(i),...
+             resp,prob,rel,grel);
+     end
+-    
++
+     varargout{1}=cdf;
+ else
+     error(['Empty data ''' inputname(2) ''' of type ''' class(varargin{2}) '''.']);
+@@ -177,7 +177,7 @@
+ 
+     mu   =mean(samp);
+     sigma=std(samp);
+-    
++
+     cdf=zeros(length(resp)+length(prob)+length(rel)+length(grel),4);
+     cdf(:,:)=NaN;
+     irow=0;
+Index: ../trunk-jpl/src/m/qmu/rlist_write.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/rlist_write.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/rlist_write.m	(revision 13646)
+@@ -67,4 +67,3 @@
+ end
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/qmu/expandvariables.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/expandvariables.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/expandvariables.m	(revision 13646)
+@@ -3,7 +3,7 @@
+ fnames=fieldnames(variables);
+ 
+ for i=1:length(fnames)
+-    
++
+ %  for linear constraints, just copy
+ 
+     if isa(variables.(fnames{i}),'linear_inequality_constraint') || ...
+Index: ../trunk-jpl/src/m/qmu/vector_write.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/vector_write.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/vector_write.m	(revision 13646)
+@@ -30,7 +30,7 @@
+     end
+     nitem=nitem+1;
+     lsvec=lsvec+1+length(sitem);
+-    
++
+     if (nitem <= nmax) && (lsvec <= cmax)
+         svec=[svec ' ' sitem];
+     else
+Index: ../trunk-jpl/src/m/qmu/qmuresponse.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/qmuresponse.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/qmuresponse.m	(revision 13646)
+@@ -113,4 +113,3 @@
+ else
+ 	error(['qmuresponse error message: unknown descriptor ' descriptor]);
+ end
+-
+Index: ../trunk-jpl/src/m/qmu/dakota_in_parse.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/dakota_in_parse.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/dakota_in_parse.m	(revision 13646)
+@@ -41,7 +41,7 @@
+ %  to foreign countries or providing access to foreign persons."
+ %
+ function [method,dvar,dresp]=dakota_in_parse(filei)
+-    
++
+ if ~nargin
+     help dakota_in_parse
+     return
+@@ -630,7 +630,7 @@
+ %  start with next token
+ 
+ itoken=itoken+1;
+-    
++
+ %  read next line if necessary
+ 
+ if (itoken > length(tokens{1}))
+@@ -643,7 +643,7 @@
+     [ntokens,tokens]=fltokens(fline);
+     itoken=1;
+ end
+-    
++
+ end
+ 
+ %%  function to read a list of tokens
+@@ -667,7 +667,7 @@
+     [ntokens,tokens]=fltokens(fline);
+     itoken=1;
+ end
+-    
++
+ %  check for equal sign and skip
+ 
+ if strncmp(tokens{1}{itoken},'=',1)
+Index: ../trunk-jpl/src/m/qmu/plot/plot_normdist_bars.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_normdist_bars.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_normdist_bars.m	(revision 13646)
+@@ -72,7 +72,7 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+@@ -81,7 +81,7 @@
+ else
+     sampr=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+     if     iarg <= nargin && iscell(varargin{iarg})
+         descr=varargin{iarg};
+         iarg=iarg+1;
+@@ -91,7 +91,7 @@
+     else
+         descr=cell(1:size(sampr,2));
+     end
+-    
++
+     dresp=struct([]);
+     for i=1:size(sampr,2)
+         dresp(end+1).sample=samp(:,i);
+Index: ../trunk-jpl/src/m/qmu/plot/plot_boxplot.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_boxplot.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_boxplot.m	(revision 13646)
+@@ -61,13 +61,13 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descr=cell (1,length(dresp));
+     lsamp=zeros(1,length(dresp));
+     for i=1:length(dresp)
+@@ -83,7 +83,7 @@
+ else
+     sampr=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+     if     iarg <= nargin && iscell(varargin{iarg})
+         descr=varargin{iarg};
+         iarg=iarg+1;
+@@ -118,7 +118,7 @@
+     end
+     iarg=iarg+2;
+ end
+-    
++
+ %%  draw the plot
+ 
+ %  draw box plot
+Index: ../trunk-jpl/src/m/qmu/plot/plot_rvsv_line.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_rvsv_line.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_rvsv_line.m	(revision 13646)
+@@ -73,13 +73,13 @@
+ if isstruct(varargin{iarg})
+     dvar=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dvar=struc_desc(dvar,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descv=cell (1,length(dvar));
+     lsamp=zeros(1,length(dvar));
+     for i=1:length(dvar)
+@@ -95,7 +95,7 @@
+ else
+     sampv=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+     if     iarg <= nargin && iscell(varargin{iarg})
+         descv=varargin{iarg};
+         iarg=iarg+1;
+@@ -118,13 +118,13 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descr=cell (1,length(dresp));
+     lsamp=zeros(1,length(dresp));
+     for i=1:length(dresp)
+@@ -140,7 +140,7 @@
+ else
+     sampr=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+     if     iarg <= nargin && iscell(varargin{iarg})
+         descr=varargin{iarg};
+         iarg=iarg+1;
+@@ -176,7 +176,7 @@
+     end
+     iarg=iarg+2;
+ end
+-    
++
+ if     ~exist('nplotr','var') && ~exist('nplotc','var')
+     nplotr=1;
+     nplotc=1;
+@@ -224,7 +224,7 @@
+             set(get(get(hscat(end),'Annotation'),'LegendInformation'),...
+                 'IconDisplayStyle','off'); % Exclude line from legend
+         end
+-        
++
+ %  add the annotation
+ 
+         if (ivar*iresp == size(sampv,2)*size(sampr,2)) || ...
+Index: ../trunk-jpl/src/m/qmu/plot/plot_if_spec.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_if_spec.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_if_spec.m	(revision 13646)
+@@ -71,13 +71,13 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descr=cell (1,length(dresp));
+     lifr =zeros(1,length(dresp));
+     for i=1:length(dresp)
+@@ -136,7 +136,7 @@
+         [ifmean,index]=sort(ifmean,'descend');
+     end
+     clear ifmean
+-    
++
+     dvar=dvar(index);
+     ifr =ifr (:,index);
+ end
+@@ -147,11 +147,11 @@
+     nif=length(dvar);
+     dvar(nif+1,1)=cellstr(sprintf('others < %f',ifmin));
+     ifr (:,nif+1)=0.;
+-    
++
+     nif2=0;
+     dvar2=cell (size(dvar));
+     ifr2 =zeros(size(ifr ));
+-    
++
+ %  sum filtered rows and copy unfiltered rows
+ 
+     for i=1:nif
+@@ -163,12 +163,12 @@
+             ifr2 (:,nif2)=ifr (:,i);
+         end
+     end
+-    
++
+ %  copy sums
+ 
+     dvar2(nif2+1)  =dvar(nif+1);
+     ifr2 (:,nif2+1)=ifr (:,nif+1);
+-    
++
+ %  copy back and truncate filtered rows
+ 
+     clear dvar ifr
+Index: ../trunk-jpl/src/m/qmu/plot/plot_prob_bars.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_prob_bars.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_prob_bars.m	(revision 13646)
+@@ -56,7 +56,6 @@
+ 
+ %%  assemble the data into a matrix and calculate the increments
+ 
+-
+ %%  process input data and assemble into matrices and increments
+ 
+ %  responses
+@@ -65,13 +64,13 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descr=cell (1,length(dresp));
+     lcdfr=zeros(1,length(dresp));
+     for i=1:length(dresp)
+Index: ../trunk-jpl/src/m/qmu/plot/plot_normplot.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_normplot.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_normplot.m	(revision 13646)
+@@ -61,13 +61,13 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descr=cell (1,length(dresp));
+     lsamp=zeros(1,length(dresp));
+     for i=1:length(dresp)
+@@ -83,7 +83,7 @@
+ else
+     sampr=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+     if     iarg <= nargin && iscell(varargin{iarg})
+         descr=varargin{iarg};
+         iarg=iarg+1;
+@@ -118,7 +118,7 @@
+     end
+     iarg=iarg+2;
+ end
+-    
++
+ %%  draw the plot
+ 
+ %  draw normal probability plot
+Index: ../trunk-jpl/src/m/qmu/plot/plot_rlev_bars_ci.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_rlev_bars_ci.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_rlev_bars_ci.m	(revision 13646)
+@@ -73,7 +73,7 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+@@ -82,7 +82,7 @@
+ else
+     sampr=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+     if     iarg <= nargin && iscell(varargin{iarg})
+         descr=varargin{iarg};
+         iarg=iarg+1;
+@@ -92,7 +92,7 @@
+     else
+         descr=cell(1:size(sampr,2));
+     end
+-    
++
+     dresp=struct([]);
+     for i=1:size(sampr,2)
+         dresp(end+1).sample=sampr(:,i);
+@@ -135,7 +135,7 @@
+             normfit(sampr(:,i),0.05);
+         display('Using calculated normal fits from sample data.')
+     end
+-    
++
+     if ~isfield(dresp(i),'cdf') || isempty(dresp(i).cdf)
+ %  use minus/plus integer standard deviations
+         sdvect=[-4 -3 -2 -1 0 1 2 3 4];
+Index: ../trunk-jpl/src/m/qmu/plot/plot_sampdist_bars.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_sampdist_bars.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_sampdist_bars.m	(revision 13646)
+@@ -71,7 +71,7 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+@@ -80,7 +80,7 @@
+ else
+     sampr=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+     if     iarg <= nargin && iscell(varargin{iarg})
+         descr=varargin{iarg};
+         iarg=iarg+1;
+@@ -90,7 +90,7 @@
+     else
+         descr=cell(1:size(sampr,2));
+     end
+-    
++
+     dresp=struct([]);
+     for i=1:size(sampr,2)
+         dresp(end+1).sample=sampr(:,i);
+Index: ../trunk-jpl/src/m/qmu/plot/plot_cdf.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_cdf.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_cdf.m	(revision 13646)
+@@ -76,7 +76,7 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+@@ -187,7 +187,7 @@
+     end
+     set(hl1(i),'Color',cmap(imap,:))
+ end
+-    
++
+ xlim('auto')
+ [xlims]=xlim;
+ if exist('xmin','var')
+@@ -277,7 +277,7 @@
+             end
+         end
+     end
+-    
++
+     if strcmpi(pdfplt,'line')
+         xplot=xpdf;
+         yplot=ypdf;
+Index: ../trunk-jpl/src/m/qmu/plot/plot_hist_norm_ci.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_hist_norm_ci.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_hist_norm_ci.m	(revision 13646)
+@@ -77,13 +77,13 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descr=cell (1,length(dresp));
+     lsamp=zeros(1,length(dresp));
+     for i=1:length(dresp)
+@@ -91,7 +91,7 @@
+     end
+     sampr=zeros(max(lsamp),length(dresp));
+     sampr(:,:)=NaN;
+-    
++
+     mu     =zeros(1,length(dresp));
+     sigma  =zeros(1,length(dresp));
+     muci   =zeros(2,length(dresp));
+@@ -108,7 +108,7 @@
+ else
+     sampr=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+     lsamp(1:size(sampr,2))=size(sampr,1);
+ 
+     if     iarg <= nargin && iscell(varargin{iarg})
+@@ -120,7 +120,7 @@
+     else
+         descr=cell(1,size(sampr,2));
+     end
+-    
++
+     mu     =zeros(1,size(sampr,2));
+     sigma  =zeros(1,size(sampr,2));
+     muci   =zeros(2,size(sampr,2));
+@@ -324,7 +324,7 @@
+         set(hl1(i),'Color',cmap(imap,:))
+     end
+ end
+-    
++
+ xlim('auto')
+ [xlims]=xlim;
+ if exist('hmin','var')
+Index: ../trunk-jpl/src/m/qmu/plot/plot_rvsv_scat3.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_rvsv_scat3.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_rvsv_scat3.m	(revision 13646)
+@@ -78,13 +78,13 @@
+ if isstruct(varargin{iarg})
+     dvar=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dvar=struc_desc(dvar,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descv=cell (1,length(dvar));
+     lsamp=zeros(1,length(dvar));
+     for i=1:length(dvar)
+@@ -100,7 +100,7 @@
+ else
+     sampv=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+     if     iarg <= nargin && iscell(varargin{iarg})
+         descv=varargin{iarg};
+         iarg=iarg+1;
+@@ -127,13 +127,13 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descr=cell (1,length(dresp));
+     lsamp=zeros(1,length(dresp));
+     for i=1:length(dresp)
+@@ -149,7 +149,7 @@
+ else
+     sampr=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+     if     iarg <= nargin && iscell(varargin{iarg})
+         descr=varargin{iarg};
+         iarg=iarg+1;
+@@ -186,7 +186,7 @@
+     end
+     iarg=iarg+2;
+ end
+-    
++
+ if     ~exist('nplotr','var') && ~exist('nplotc','var')
+     nplotr=ceil(sqrt(size(sampr,2)));
+     nplotc=ceil(size(sampr,2)/nplotr);
+@@ -207,7 +207,7 @@
+ hscat3=[];
+ 
+ for iresp=1:size(sampr,2)
+-    
++
+ %  initialize the subplot
+ 
+     haxes(end+1)=subplot(nplotr,nplotc,iresp);
+Index: ../trunk-jpl/src/m/qmu/plot/plot_rlev_bars.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_rlev_bars.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_rlev_bars.m	(revision 13646)
+@@ -61,13 +61,13 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descr=cell (1,length(dresp));
+     lcdfr=zeros(1,length(dresp));
+     for i=1:length(dresp)
+Index: ../trunk-jpl/src/m/qmu/plot/plot_rvsv_surf.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_rvsv_surf.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_rvsv_surf.m	(revision 13646)
+@@ -75,13 +75,13 @@
+ if isstruct(varargin{iarg})
+     dvar=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dvar=struc_desc(dvar,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descv=cell (1,length(dvar));
+     lsamp=zeros(1,length(dvar));
+     for i=1:length(dvar)
+@@ -97,7 +97,7 @@
+ else
+     sampv=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+     if     iarg <= nargin && iscell(varargin{iarg})
+         descv=varargin{iarg};
+         iarg=iarg+1;
+@@ -124,13 +124,13 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descr=cell (1,length(dresp));
+     lsamp=zeros(1,length(dresp));
+     for i=1:length(dresp)
+@@ -146,7 +146,7 @@
+ else
+     sampr=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+     if     iarg <= nargin && iscell(varargin{iarg})
+         descr=varargin{iarg};
+         iarg=iarg+1;
+@@ -183,7 +183,7 @@
+     end
+     iarg=iarg+2;
+ end
+-    
++
+ if     ~exist('nplotr','var') && ~exist('nplotc','var')
+     nplotr=ceil(sqrt(size(sampr,2)));
+     nplotc=ceil(size(sampr,2)/nplotr);
+@@ -207,7 +207,7 @@
+     for i=1:size(sampr,1)
+         z(ixi(i),iyi(i))=sampr(i,iresp);
+     end
+-    
++
+ %  initialize the subplot
+ 
+     haxes(iresp)=subplot(nplotr,nplotc,iresp);
+Index: ../trunk-jpl/src/m/qmu/plot/plot_hist_norm.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_hist_norm.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_hist_norm.m	(revision 13646)
+@@ -88,13 +88,13 @@
+ if isstruct(varargin{iarg})
+     dresp1=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp1=struc_desc(dresp1,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descr=cell (1,length(dresp1));
+     lsamp=zeros(1,length(dresp1));
+     for i=1:length(dresp1)
+@@ -110,7 +110,7 @@
+ else
+     sampr=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+     lsamp(1:size(sampr,2))=size(sampr,1);
+ 
+     if     iarg <= nargin && iscell(varargin{iarg})
+@@ -141,7 +141,7 @@
+         dresp2=struc_desc(dresp2,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     mu   =zeros(1,length(dresp2));
+     sigma=zeros(1,length(dresp2));
+ 
+@@ -297,7 +297,7 @@
+         set(hl1(i),'Color',cmap(imap,:))
+     end
+ end
+-    
++
+ xlim('auto')
+ [xlims]=xlim;
+ if exist('hmin','var')
+Index: ../trunk-jpl/src/m/qmu/plot/plot_if_bars.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/plot/plot_if_bars.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/plot/plot_if_bars.m	(revision 13646)
+@@ -65,13 +65,13 @@
+ if isstruct(varargin{iarg})
+     dresp=varargin{iarg};
+     iarg=iarg+1;
+-    
++
+ %     if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
+     if iarg <= nargin && iscell(varargin{iarg})
+         dresp=struc_desc(dresp,varargin{iarg});
+         iarg=iarg+1;
+     end
+-    
++
+     descr=cell (1,length(dresp));
+     lifr =zeros(1,length(dresp));
+     for i=1:length(dresp)
+@@ -124,7 +124,7 @@
+         [ifmean,index]=sort(ifmean,'ascend' );
+     end
+     clear ifmean
+-    
++
+     dvar=dvar(index);
+     ifr =ifr (:,index);
+ end
+@@ -135,11 +135,11 @@
+     nif=length(dvar);
+     dvar(nif+1,1)=cellstr(sprintf('others < %f',ifmin));
+     ifr (:,nif+1)=0.;
+-    
++
+     nif2=0;
+     dvar2=cell (size(dvar));
+     ifr2 =zeros(size(ifr ));
+-    
++
+ %  sum filtered rows and copy unfiltered rows
+ 
+     for i=1:nif
+@@ -151,12 +151,12 @@
+             ifr2 (:,nif2)=ifr (:,i);
+         end
+     end
+-    
++
+ %  copy sums
+ 
+     dvar2(nif2+1)  =dvar(nif+1);
+     ifr2 (:,nif2+1)=ifr (:,nif+1);
+-    
++
+ %  copy back and truncate filtered rows
+ 
+     clear dvar ifr
+Index: ../trunk-jpl/src/m/qmu/setupdesign/IsScaled.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/setupdesign/IsScaled.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/setupdesign/IsScaled.m	(revision 13646)
+@@ -11,7 +11,7 @@
+ 	status=1;
+ 
+ case {'RiftsFriction'},
+-	
++
+ 	status=2; %special treatment
+ 
+ otherwise
+Index: ../trunk-jpl/src/m/qmu/setupdesign/QmuSetupVariables.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/setupdesign/QmuSetupVariables.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/setupdesign/QmuSetupVariables.m	(revision 13646)
+@@ -6,7 +6,6 @@
+ %decide whether this is a distributed variable, which will drive whether we expand it into npart values,
+ %or if we just carry it forward as is. 
+ 
+-
+ %ok, key off according to type of descriptor:
+ if strncmp(descriptor,'scaled_',7),
+ 	%we have a scaled variable, expand it over the partition.
+Index: ../trunk-jpl/src/m/qmu/qmu_correlation.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/qmu_correlation.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/qmu_correlation.m	(revision 13646)
+@@ -11,7 +11,7 @@
+ if ~isfield(md.qmu.results,'dresp_dat'),
+ 	error('qmu_correlation error message: could not find dresp_dat field in dakota results. you need to run montecarlo before computing correlations');
+ end
+-	
++
+ data=md.qmu.results.dresp_dat;
+ 
+ %go through all the rows and figure which one we are interested in.
+Index: ../trunk-jpl/src/m/qmu/lclist_write.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/lclist_write.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/lclist_write.m	(revision 13646)
+@@ -59,4 +59,3 @@
+ end
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/qmu/dakota_moments.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/dakota_moments.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/dakota_moments.m	(revision 13646)
+@@ -88,9 +88,9 @@
+          dresp(i).meanci,dresp(i).stddevci]=...
+             moments_calc(dresp(i).sample,alpha);
+     end
+-    
++
+     varargout{1}=dresp;
+-    
++
+ elseif exist('samp','var') && ~isempty(samp)
+     mean    =zeros(1,size(samp,2));
+     stddev  =zeros(1,size(samp,2));
+@@ -105,7 +105,7 @@
+          meanci(:,i),stddevci(:,i)]=...
+             moments_calc(samp(:,i),alpha);
+     end
+-    
++
+     varargout{1}=mean;
+     varargout{2}=stddev;
+     varargout{3}=meanci;
+Index: ../trunk-jpl/src/m/qmu/qmuroot.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/qmuroot.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/qmuroot.m	(revision 13646)
+@@ -10,4 +10,3 @@
+ 		root=[root string(i)];
+ 	end
+ end
+-
+Index: ../trunk-jpl/src/m/qmu/process_qmu_response_data.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/process_qmu_response_data.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/process_qmu_response_data.m	(revision 13646)
+@@ -5,7 +5,6 @@
+ %
+ % See also PREQMU, PRESOLVE
+ 
+-
+ %preliminary data
+ process_mass_flux_profiles=0;
+ 
+@@ -21,7 +20,6 @@
+ 	end
+ end
+ 
+-
+ %deal with mass flux profiles
+ if process_mass_flux_profiles,
+ 
+@@ -29,7 +27,7 @@
+ 	if isnans(md.qmu.mass_flux_profiles),
+ 		error('process_qmu_response_data error message: could not find a mass_flux exp profile!');
+ 	end
+-	
++
+ 	if ~iscell(md.qmu.mass_flux_profiles),
+ 		error('process_qmu_response_data error message: qmu_mass_flux_profiles field should be a cell array of domain outline names');
+ 	end
+Index: ../trunk-jpl/src/m/qmu/process_qmu_options.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/process_qmu_options.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/process_qmu_options.m	(revision 13646)
+@@ -98,4 +98,3 @@
+ outoptions.imethod=imethod;
+ outoptions.iparams=iparams;
+ outoptions.runmpi=runmpi;
+-
+Index: ../trunk-jpl/src/m/qmu/dakota_in_data.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/dakota_in_data.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/dakota_in_data.m	(revision 13646)
+@@ -87,7 +87,6 @@
+ 
+ % dmeth=dmeth_params_merge(dmeth,dparams)
+ 
+-
+ %%  variables
+ 
+ fnames=fieldnames(variables);
+@@ -98,7 +97,7 @@
+ 	dvar.(fnames{i})=variables.(fnames{i});
+ 
+ end
+-    
++
+ %%  responses
+ 
+ fnames=fieldnames(responses);
+Index: ../trunk-jpl/src/m/qmu/MassFluxProcessProfile.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/MassFluxProcessProfile.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/MassFluxProcessProfile.m	(revision 13646)
+@@ -6,7 +6,6 @@
+ %
+ % See also: PROCESS_QMU_RESPONSE_DATA, PREQMU
+ 
+-
+ %first read the profile points.
+ profile=expread([directory '/' profilename]);
+ 
+Index: ../trunk-jpl/src/m/qmu/examples/direct.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/examples/direct.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/examples/direct.m	(revision 13646)
+@@ -3,8 +3,6 @@
+ md.qmu.params.analysis_driver='diagnostic';
+ md.qmu.params.evaluation_concurrency=1;
+ 
+-
+-
+ %or for matlab direct driver
+ md.qmu.params.direct=true;
+ md.qmu.params.analysis_driver='matlab';
+Index: ../trunk-jpl/src/m/qmu/examples/lrel_mmf.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/examples/lrel_mmf.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/examples/lrel_mmf.m	(revision 13646)
+@@ -92,4 +92,3 @@
+ %plotmodel(md,'data','mesh','partitionedges','on','linewidth',2)
+ %part_hist(md.qmu.partition,md.vertex_weight)
+ %plotmodel(md,'data',log10(md.results.dakota.dresp_out(9).impfac(md.qmu.partition+1)))
+-
+Index: ../trunk-jpl/src/m/qmu/importancefactors.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/importancefactors.m	(revision 13645)
++++ ../trunk-jpl/src/m/qmu/importancefactors.m	(revision 13646)
+@@ -8,7 +8,6 @@
+ %   Example: factors=importancefactors(md,'drag','max_vel');
+ %
+ 
+-
+ variablenamelength=length(variablename);
+ 
+ %go through all response functions and find the one corresponding to the correct responsename
+Index: ../trunk-jpl/src/m/miscellaneous/parallelrange.m
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/parallelrange.m	(revision 13645)
++++ ../trunk-jpl/src/m/miscellaneous/parallelrange.m	(revision 13646)
+@@ -11,7 +11,6 @@
+ 	num_local_rows(i)=floor(globalsize/numprocs);
+ end
+ 
+-
+ %There may be some rows left. Distribute evenly.
+ row_rest=globalsize - numprocs*floor(globalsize/numprocs);
+ 
+Index: ../trunk-jpl/src/m/miscellaneous/isnans.m
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/isnans.m	(revision 13645)
++++ ../trunk-jpl/src/m/miscellaneous/isnans.m	(revision 13646)
+@@ -5,7 +5,6 @@
+ %
+ %  See also : ISNAN 
+ 
+-
+ if isstruct(array), 
+ 	returnvalue=0;
+ elseif iscell(array)
+Index: ../trunk-jpl/src/m/string/strsplit.m
+===================================================================
+--- ../trunk-jpl/src/m/string/strsplit.m	(revision 13645)
++++ ../trunk-jpl/src/m/string/strsplit.m	(revision 13646)
+@@ -16,8 +16,6 @@
+ 
+ %   mailto:    gie.spaepen@ua.ac.be
+ 
+-
+-
+ %Check input arguments
+ if(nargin < 1)
+     error('There is no argument defined');
+@@ -86,6 +84,5 @@
+     else
+         splittedstring = tempsplit;
+     end
+-    
+-        
++
+ end
+Index: ../trunk-jpl/src/m/string/strsplit_strict.m
+===================================================================
+--- ../trunk-jpl/src/m/string/strsplit_strict.m	(revision 13645)
++++ ../trunk-jpl/src/m/string/strsplit_strict.m	(revision 13646)
+@@ -4,7 +4,6 @@
+ %   Usage:
+ %      output = strsplit_strict(inpstr,delimiter)
+ 
+-
+ %Check input arguments
+ if(nargin ~= 2)
+     error('There is no argument defined');
+Index: ../trunk-jpl/src/m/string/issmprintf.m
+===================================================================
+--- ../trunk-jpl/src/m/string/issmprintf.m	(revision 13645)
++++ ../trunk-jpl/src/m/string/issmprintf.m	(revision 13646)
+@@ -7,7 +7,7 @@
+ %
+ %   Example:
+ %      issmprintf(1,'%s\n','string to display');
+-	
++
+ if flag,
+ 	disp(sprintf(format,varargin{:}));
+ end
+Index: ../trunk-jpl/src/m/partition/AreaAverageOntoPartition.m
+===================================================================
+--- ../trunk-jpl/src/m/partition/AreaAverageOntoPartition.m	(revision 13645)
++++ ../trunk-jpl/src/m/partition/AreaAverageOntoPartition.m	(revision 13646)
+@@ -14,7 +14,7 @@
+ 	end
+ 	%save 3D model
+ 	md3d=md;
+-	
++
+ 	md.mesh.elements=md.mesh.elements2d;
+ 	md.mesh.x=md.mesh.x2d;
+ 	md.mesh.y=md.mesh.y2d;
+Index: ../trunk-jpl/src/m/partition/partitioner.m
+===================================================================
+--- ../trunk-jpl/src/m/partition/partitioner.m	(revision 13645)
++++ ../trunk-jpl/src/m/partition/partitioner.m	(revision 13646)
+@@ -49,14 +49,13 @@
+ 	disp('skipping adjacency matrix computation as requested in the options');
+ end
+ 
+-
+ if strcmpi(package,'chaco'),
+ 
+ 	%  default method (from chaco.m)
+ 	method=[1 1 0 0 1 1 50 0 .001 7654321]';
+ 	method(1)=3;    %  global method (3=inertial (geometric))
+ 	method(3)=0;    %  vertex weights (0=off, 1=on)
+-	
++
+ 	%specify bisection
+ 	method(6)=getfieldvalue(options,'section');%  ndims (1=bisection, 2=quadrisection, 3=octasection)
+ 
+@@ -67,7 +66,7 @@
+ 	else 
+ 		weights=[];
+ 	end
+-	
++
+ 	%  partition into nparts
+ 	part=Chaco(md.qmu.adjacency,weights,[],md.mesh.x, md.mesh.y ,md.mesh.z,method,npart,[])'+1; %index partitions from 1 up. like metis.
+ 
+@@ -78,10 +77,9 @@
+ 		weights=floor(md.qmu.vertex_weight/min(md.qmu.vertex_weight));
+ 	end
+ 	maptab=Scotch(md.qmu.adjacency,[],weights,[],'cmplt',[npart]);
+-	
++
+ 	part=maptab(:,2);%index partitions from 1 up. like metis.
+ 
+-
+ elseif strcmpi(package,'linear'),
+ 
+ 	part=1:1:md.mesh.numberofvertices;
+Index: ../trunk-jpl/src/m/mech/basalstress.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/basalstress.m	(revision 13645)
++++ ../trunk-jpl/src/m/mech/basalstress.m	(revision 13646)
+@@ -6,7 +6,6 @@
+ %
+ %   See also: plot_basaldrag
+ 
+-
+ %compute exponents
+ s=averaging(md,1./md.friction.p,0);
+ r=averaging(md,md.friction.q./md.friction.p,0);
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 13645)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m	(revision 13646)
+@@ -73,7 +73,6 @@
+ %plug onto model
+ md.diagnostic.icefront=pressureload;
+ 
+-
+ %Create zeros basalforcings and surfaceforcings
+ if (isnan(md.surfaceforcings.precipitation) & (md.surfaceforcings.ispdd==1)),
+ 	md.surfaceforcings.precipitation=zeros(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/src/m/array/struc_desc.m
+===================================================================
+--- ../trunk-jpl/src/m/array/struc_desc.m	(revision 13645)
++++ ../trunk-jpl/src/m/array/struc_desc.m	(revision 13646)
+@@ -21,7 +21,7 @@
+     elseif ischar(varargin{iarg})
+         desc=cellstr(varargin{iarg});
+     end
+-    
++
+     for i=1:length(desc)
+         sarrayoi=struc_desci(sarray,desc{i});
+         if ~isempty(sarrayoi)
+Index: ../trunk-jpl/src/m/array/str2int.m
+===================================================================
+--- ../trunk-jpl/src/m/array/str2int.m	(revision 13645)
++++ ../trunk-jpl/src/m/array/str2int.m	(revision 13646)
+@@ -43,4 +43,3 @@
+ end
+ 
+ end
+-
+Index: ../trunk-jpl/src/m/array/array_size.m
+===================================================================
+--- ../trunk-jpl/src/m/array/array_size.m	(revision 13645)
++++ ../trunk-jpl/src/m/array/array_size.m	(revision 13646)
+@@ -16,7 +16,7 @@
+     else
+         isize=size(varargin{iarg});
+     end
+-    
++
+     if ~isequal(isize,[1 1])
+         if isequal(asize,[1 1])
+             asize=isize;
+Index: ../trunk-jpl/src/m/array/array_numel.m
+===================================================================
+--- ../trunk-jpl/src/m/array/array_numel.m	(revision 13645)
++++ ../trunk-jpl/src/m/array/array_numel.m	(revision 13646)
+@@ -16,7 +16,7 @@
+     else
+         inum=numel(varargin{iarg});
+     end
+-    
++
+     if ~isequal(inum,1)
+         if isequal(anum,1)
+             anum=inum;
+Index: ../trunk-jpl/src/m/parameterization/contourenvelope.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/contourenvelope.m	(revision 13645)
++++ ../trunk-jpl/src/m/parameterization/contourenvelope.m	(revision 13646)
+@@ -71,7 +71,7 @@
+ 		%get flag list of elements and nodes inside the contour
+ 		nodein=zeros(mesh.numberofvertices,1); 
+ 		elemin=zeros(mesh.numberofelements,1); 
+-		
++
+ 		pos=find(flags); 
+ 		elemin(pos)=1;
+ 		nodein(mesh.elements(pos,:))=1;
+Index: ../trunk-jpl/src/m/parameterization/parameterize.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/parameterize.m	(revision 13645)
++++ ../trunk-jpl/src/m/parameterization/parameterize.m	(revision 13646)
+@@ -55,4 +55,3 @@
+ 	md.miscellaneous.name=root; 
+ end
+ md.miscellaneous.notes=['Model created by using parameter file: ' parametername ' on: ' datestr(now)];
+-
+Index: ../trunk-jpl/src/m/plot/plot_rifts.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_rifts.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plot_rifts.m	(revision 13646)
+@@ -15,7 +15,7 @@
+ %offset to separate rift flanks.
+ offset=getfieldvalue(options,'offset',500);
+ if isstruct(md.rifts.riftstruct),
+-	
++
+ 	for i=1:size(md.rifts.riftstruct,1),
+ 		penaltypairs=md.rifts.riftstruct(i).penaltypairs;
+ 
+Index: ../trunk-jpl/src/m/plot/processmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/processmesh.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/processmesh.m	(revision 13646)
+@@ -36,7 +36,6 @@
+ 		z=md.mesh.z;
+ 	end
+ 
+-
+ 	if isprop(md.mesh,'elements2d'), elements2d=md.mesh.elements2d; end
+ 	elements=md.mesh.elements;
+ 
+Index: ../trunk-jpl/src/m/plot/radarpower.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/radarpower.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/radarpower.m	(revision 13646)
+@@ -89,7 +89,6 @@
+ 		%Erase image
+ 		system('rm -rf ./temp.tif');
+ 
+-
+ 	elseif strcmpi(md.mesh.hemisphere,'s'),
+ 		if highres,
+ 			if ~exist([jplsvn() '/projects/ModelData/MosaicTiffRsat/amm125m_v2_200m.tif']),
+Index: ../trunk-jpl/src/m/plot/plot_riftrelvel.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_riftrelvel.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plot_riftrelvel.m	(revision 13646)
+@@ -62,7 +62,7 @@
+ 	h1=plot(x(md.mesh.segments(i,1:2)),y(md.mesh.segments(i,1:2)),'b-');
+ end
+ for i=1:size(md.rifts.riftstruct,1),
+-	
++
+ 	%get nodes on rift
+ 	penaltypairs=md.rifts.riftstruct(i).penaltypairs;
+ 
+Index: ../trunk-jpl/src/m/plot/plot_sarpwr.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_sarpwr.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plot_sarpwr.m	(revision 13646)
+@@ -16,7 +16,7 @@
+ 	md.mesh.y=md.mesh.y*unit;
+ 	md.mesh.z=md.mesh.z*unit;
+ end
+-					
++
+ imagesc(md.radaroverlay.x,md.radaroverlay.y,double(md.radaroverlay.pwr)),set(gca,'YDir','normal');colormap(gray);
+ 
+ %apply options
+Index: ../trunk-jpl/src/m/plot/plotmodel.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plotmodel.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plotmodel.m	(revision 13646)
+@@ -31,7 +31,7 @@
+ 
+ %go through subplots
+ if numberofplots,
+-		
++
+ 	%Create figure 
+ 	if strcmpi(getfieldvalue(options.list{1},'visible','on'),'off'),
+ 		F=figure(figurenumber);clf;
+Index: ../trunk-jpl/src/m/plot/plot_section.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_section.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plot_section.m	(revision 13646)
+@@ -114,7 +114,6 @@
+ 			plot(s,data_s,'color',color(i,:),'LineWidth',getfieldvalue(options,'linewidth',1))
+ 			hold on
+ 
+-
+ 			%3D
+ 		else
+ 			%plot section value
+Index: ../trunk-jpl/src/m/plot/plot_manager.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_manager.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plot_manager.m	(revision 13646)
+@@ -32,15 +32,15 @@
+ 		case 'highlightelements',
+ 			plot_highlightelements(md,options,subplotwidth,i);
+ 			return;
+-		
++
+ 		case 'qmumean',
+ 			plot_qmumean(md,options,nlines,ncols,i);
+ 			return;
+-		
++
+ 		case 'qmustddev',
+ 			plot_qmustddev(md,options,nlines,ncols,i);
+ 			return;
+-		
++
+ 		case 'qmuhistnorm',
+ 			plot_qmuhistnorm(md,options,nlines,ncols,i);
+ 			return;
+@@ -117,7 +117,7 @@
+ 		case 'segments'
+ 			plot_segments(md,options,subplotwidth,i,data)
+ 			return
+-		
++
+ 		case 'quiver'
+ 			data=[md.initialization.vx md.initialization.vy]; %Go ahead and try plot_unit
+ 
+@@ -198,7 +198,7 @@
+ 	if ((nlines*ncols~=1) | (i~=1)),
+ 		error('cannot kmlgroundoverlay on multi-plots');
+ 	end
+-	
++
+ 	%call routine to build kml file and image that goes with it.
+ 	kmlgroundoverlay(md,options);
+ end
+Index: ../trunk-jpl/src/m/plot/plot_riftvel.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_riftvel.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plot_riftvel.m	(revision 13646)
+@@ -88,7 +88,6 @@
+ 	segments=md.rifts.riftstruct(i).segments(:,1:2);
+ end
+ 
+-
+ %legend
+ if isp1 & isp2
+ 	legend([h1,h2,p1,p2],'mesh boundaries','rift tips',' rifts closing','rifts opening')
+Index: ../trunk-jpl/src/m/plot/plot_qmustddev.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_qmustddev.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plot_qmustddev.m	(revision 13646)
+@@ -46,7 +46,6 @@
+ 	responses=log(responses)/log(getfieldvalue(options,'log'));
+ end
+ 
+-
+ %now, project onto vertices
+ responses_on_node=responses(md.qmu.partition+1);
+ 
+Index: ../trunk-jpl/src/m/plot/plot_segments.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_segments.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plot_segments.m	(revision 13646)
+@@ -41,7 +41,6 @@
+ 	q=quiver(xstart,ystart,xend-xstart,yend-ystart); hold on;
+ 	h3=plot(xstart,ystart,'r*');
+ 
+-
+ else
+ 	error('plot_segments: 3d plot of segments not supported yet!');
+ end
+Index: ../trunk-jpl/src/m/plot/plot_qmuhistnorm.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_qmuhistnorm.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plot_qmuhistnorm.m	(revision 13646)
+@@ -4,7 +4,6 @@
+ subplot(nlines,ncols,index); 
+ hold on
+ 
+-
+ %recover histnorm data
+ if ~exist(options,'qmudata')
+ 	error('plot_qmuhistnorm error message: option qmudata is required');
+Index: ../trunk-jpl/src/m/plot/plot_qmu_mass_flux_segments.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_qmu_mass_flux_segments.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plot_qmu_mass_flux_segments.m	(revision 13646)
+@@ -26,7 +26,7 @@
+ 		text(segments(j,1),segments(j,2),['Profile #' num2str(i)]);
+ 
+ 		%plot normals
+-		
++
+ 		for j=1:length(segments),
+ 			xstart=mean([segments(j,1) segments(j,3)]);
+ 			ystart=mean([segments(j,2) segments(j,4)]);
+Index: ../trunk-jpl/src/m/plot/quiver_colorbar.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/quiver_colorbar.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/quiver_colorbar.m	(revision 13646)
+@@ -30,7 +30,7 @@
+ 	%fontsize
+ 	fontsize=getfieldvalue(options,'fontsize',14);
+ 	set(hcb,'FontSize',fontsize);
+-	
++
+ 	if exist(options,'colorbartitle'),
+ 		backup=gca;
+ 		axes(hcb);lab=title(getfieldvalue(options,'colorbartitle'));
+Index: ../trunk-jpl/src/m/plot/plot_overlay.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_overlay.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plot_overlay.m	(revision 13646)
+@@ -25,7 +25,6 @@
+ 	error('buildoverlay error message: overlay not supported for quiver plots');
+ end
+ 
+-
+ %radar power
+ if ~any(isnan(md.radaroverlay.x)) & ~any(isnan(md.radaroverlay.y)) & ~any(isnan(md.radaroverlay.pwr)),
+ 	disp('plot_overlay info: the radar image held by the model is being used');
+Index: ../trunk-jpl/src/m/plot/checkplotoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/checkplotoptions.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/checkplotoptions.m	(revision 13646)
+@@ -52,7 +52,7 @@
+ 			options=changefieldvalue(options,'colorbar',0);
+ 	end
+ end
+-	
++
+ %text
+ if exist(options,'text'),
+ 	%1: textvalue
+Index: ../trunk-jpl/src/m/plot/arrow.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/arrow.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/arrow.m	(revision 13646)
+@@ -8,7 +8,6 @@
+ %            'ratio': default .5 (ratio headarrow/length)
+ %            'widthratio': default is 1/10 of length
+ 
+-
+ %recover options
+ options=pairoptions(varargin{:});
+ ratio=getfieldvalue(options,'ratio',.5);
+Index: ../trunk-jpl/src/m/plot/latlonoverlay.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/latlonoverlay.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/latlonoverlay.m	(revision 13646)
+@@ -116,7 +116,6 @@
+ 		error('field hemisphere should either be ''n'' or ''s'''); 
+ 	end
+ 
+-
+ 	pos=find(x<=xlimits(2) & x>=xlimits(1) & y<=ylimits(2) & y>=ylimits(1));
+ 	if length(pos)<=1, continue; end
+ 	x=x(pos);y=y(pos);
+Index: ../trunk-jpl/src/m/plot/applyoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/applyoptions.m	(revision 13646)
+@@ -5,7 +5,6 @@
+ %      applyoptions(md,data,options)
+ %
+ %   See also: PLOTMODEL, PARSE_OPTIONS
+-		
+ 
+ %some defaults
+ if isfield(md.mesh,'hemisphere'),
+@@ -225,10 +224,9 @@
+ 	colorbar('off');
+ else
+ 	%do nothing
+-	
++
+ end
+ 
+-
+ %area
+ if exist(options,'area'),
+ 	antzoom(getfieldvalue(options,'area'));
+@@ -319,10 +317,9 @@
+ 	set(gca,'pos',Axis);
+ end
+ 
+-
+ %position of figure
+ if exist(options,'figposition'),
+-	
++
+ 	figposition=getfieldvalue(options,'figposition');
+ 	if ischar(figposition),
+ 		if strcmpi(figposition,'larour'),
+Index: ../trunk-jpl/src/m/plot/plot_thermaltransient_results.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_thermaltransient_results.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plot_thermaltransient_results.m	(revision 13646)
+@@ -21,4 +21,3 @@
+ string=[string ',''figure'',2,''colorbar#all'',''on'',''fontsize'',' num2str(options.fontsize) ',''fontweight'',' options.fontweight ');'];
+ eval(string);
+ clear string;
+-
+Index: ../trunk-jpl/src/m/plot/processdata.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/processdata.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/processdata.m	(revision 13646)
+@@ -73,7 +73,7 @@
+ 	if datasize(1)~=md.mesh.numberofvertices & datasize(1)~=md.mesh.numberofelements & datasize(1)~=md.mesh.numberofvertices*6 & (md.mesh.dimension==3 & ~(datasize(1)==numberofelements2d | datasize(1)==numberofvertices2d))
+ 		error('plotmodel error message: data not supported yet');
+ 	end
+-	
++
+ 	%quiver?
+ 	if datasize(2)>1,
+ 		datatype=3;
+Index: ../trunk-jpl/src/m/plot/plot_riftnumbering.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_riftnumbering.m	(revision 13645)
++++ ../trunk-jpl/src/m/plot/plot_riftnumbering.m	(revision 13646)
+@@ -87,7 +87,6 @@
+ 	end
+ end
+ 
+-
+ %apply options
+ options=addfielddefault(options,'title','Rift/Fault location');
+ options=addfielddefault(options,'colorbar',0);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13646-13647.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13646-13647.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13646-13647.diff	(revision 13980)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/externalpackages/android/android_aux.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/android/android_aux.sh	(revision 13646)
++++ ../trunk-jpl/externalpackages/android/android_aux.sh	(revision 13647)
+@@ -15,16 +15,29 @@
+ step=0;
+ j=1;
+ 
++echo ""
++echo "This install script utilizes 'android_aux.sh' to allow for options."
++echo "For usage information enter: '--help'"
+ echo Number of arguments is: $#
++
+ for arg in $* 
+ do 
+     if [[ "$arg" =~ --step=([0-9])* ]]; then
+         step=${BASH_REMATCH[1]}; 
+         echo "Setting step to: " $step
+-    elif [[ "$arg" =~ -j=([1-9]+[0-9]*) || "$arg" =~ ([1-9]+[0-9]*) ]]; then
++    elif [[ "$arg" == "--help" ]]; then
++        echo ""
++        echo "USAGE: $ install.sh [--step=#] [-j#]"
++        echo ""
++        echo "Where '#' is some integer."
++        echo "To check the number of steps check the install script."
++        echo ""
++        exit 1;
++    elif [[ "$arg" =~ -j=([1-9]+[0-9]*) ]]; then
+         j=${BASH_REMATCH[1]}; 
+         echo "Number of jobs set to: " $j
+     else
+         echo "Option not recognized"
++        exit 1;
+     fi
+ done
Index: /issm/oecreview/Archive/13393-13976/ISSM-13647-13648.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13647-13648.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13647-13648.diff	(revision 13980)
@@ -0,0 +1,80 @@
+Index: ../trunk-jpl/src/android/test102/test102.petsc
+===================================================================
+--- ../trunk-jpl/src/android/test102/test102.petsc	(revision 13647)
++++ ../trunk-jpl/src/android/test102/test102.petsc	(revision 13648)
+@@ -1,19 +0,0 @@
+-%Petsc options file: test102.petsc written from Matlab solver array
+-
+-+NoneAnalysis
+--mat_type aij
+--ksp_type gmres
+--pc_type asm
+--sub_pc_type ilu
+--pc_asm_overlap 5
+--ksp_max_it 100
+--ksp_rtol 1e-15
+-
+-+DiagnosticVertAnalysis
+--mat_type aij
+--ksp_type gmres
+--pc_type asm
+--sub_pc_type ilu
+--pc_asm_overlap 5
+--ksp_max_it 100
+--ksp_rtol 1e-15
+Index: ../trunk-jpl/src/android/test102/test102.bin
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/test102/test102.sh
+===================================================================
+--- ../trunk-jpl/src/android/test102/test102.sh	(revision 13647)
++++ ../trunk-jpl/src/android/test102/test102.sh	(revision 13648)
+@@ -1,2 +0,0 @@
+-#!/bin/sh
+-/Users/larour/issm-uci/trunk-jpl/bin/issm.exe DiagnosticSolution /Users/larour/issm-uci/trunk-jpl/src/android/test102 test102 
+Index: ../trunk-jpl/src/android/issm-android-inputfiles/test102.petsc
+===================================================================
+--- ../trunk-jpl/src/android/issm-android-inputfiles/test102.petsc	(revision 0)
++++ ../trunk-jpl/src/android/issm-android-inputfiles/test102.petsc	(revision 13648)
+@@ -0,0 +1,19 @@
++%Petsc options file: test102.petsc written from Matlab solver array
++
+++NoneAnalysis
++-mat_type aij
++-ksp_type gmres
++-pc_type asm
++-sub_pc_type ilu
++-pc_asm_overlap 5
++-ksp_max_it 100
++-ksp_rtol 1e-15
++
+++DiagnosticVertAnalysis
++-mat_type aij
++-ksp_type gmres
++-pc_type asm
++-sub_pc_type ilu
++-pc_asm_overlap 5
++-ksp_max_it 100
++-ksp_rtol 1e-15
+Index: ../trunk-jpl/src/android/issm-android-inputfiles/test102.bin
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/issm-android-inputfiles/test102.bin
+===================================================================
+--- ../trunk-jpl/src/android/issm-android-inputfiles/test102.bin	(revision 13647)
++++ ../trunk-jpl/src/android/issm-android-inputfiles/test102.bin	(revision 13648)
+
+Property changes on: ../trunk-jpl/src/android/issm-android-inputfiles/test102.bin
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/issm-android-inputfiles/test102.sh
+===================================================================
+--- ../trunk-jpl/src/android/issm-android-inputfiles/test102.sh	(revision 0)
++++ ../trunk-jpl/src/android/issm-android-inputfiles/test102.sh	(revision 13648)
+@@ -0,0 +1,2 @@
++#!/bin/sh
++/Users/larour/issm-uci/trunk-jpl/bin/issm.exe DiagnosticSolution /Users/larour/issm-uci/trunk-jpl/src/android/test102 test102 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13648-13649.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13648-13649.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13648-13649.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/configs/config-arm-linux.sh
+===================================================================
+--- ../trunk-jpl/configs/config-arm-linux.sh	(revision 13648)
++++ ../trunk-jpl/configs/config-arm-linux.sh	(revision 13649)
+@@ -7,6 +7,7 @@
+     --enable-shared \
+     --without-fortran \
+ 	--without-modules \
++	--without-kriging \
+ 	--with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+     --disable-static
Index: /issm/oecreview/Archive/13393-13976/ISSM-13649-13650.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13649-13650.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13649-13650.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/configs/config-macosx64-larour-bothapis.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-larour-bothapis.sh	(revision 13649)
++++ ../trunk-jpl/configs/config-macosx64-larour-bothapis.sh	(revision 13650)
+@@ -18,7 +18,7 @@
+ 	--with-chaco-dir=$ISSM_DIR/externalpackages/chaco/install \
+ 	--with-fortran-lib="/usr/local/gfortran/lib/libgfortran.a" \
+ 	--with-math-lib="/usr/lib/libm.dylib" \
+-	--with-graphics-lib="/usr/X11/lib/libX11.dylib" \
++	--with-graphics-lib="/usr/X11R6/lib/libX11.dylib" \
+ 	--with-cxxoptflags=" -fno-common -no-cpp-precomp -fexceptions -arch x86_64 -mmacosx-version-min=10.5  -O3 -DNDEBUG -w "\
+ 	--with-numthreads=8 \
+ 	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
+@@ -28,6 +28,5 @@
+ 	--with-plapack-include="-I$ISSM_DIR/externalpackages/petsc/install/include/ " \
+ 	--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+-	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ 
+-	#--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+-	#--with-boost-dir=$ISSM_DIR/externalpackages/boost/install/ \
++	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install \
++	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13650-13651.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13650-13651.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13650-13651.diff	(revision 13980)
@@ -0,0 +1,11343 @@
+Index: ../trunk-jpl/src/modules/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/modules/python/Makefile.am	(revision 13650)
++++ ../trunk-jpl/src/modules/python/Makefile.am	(revision 13651)
+@@ -1,104 +0,0 @@
+-AM_CPPFLAGS = @DAKOTAINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @BOOSTINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@
+-
+-EXEEXT=$(PYTHONWRAPPEREXT)
+-
+-#Modules {{{
+-if MODULES
+-lib_LTLIBRARIES = BamgConvertMesh.la\
+-						BamgMesher.la\
+-						ContourToMesh.la\
+-						ContourToNodes.la\
+-						ElementConnectivity.la\
+-						EnumToString.la\
+-						InterpFromMeshToMesh2d.la\
+-						NodeConnectivity.la\
+-						StringToEnum.la\
+-						TriMesh.la\
+-						TriMeshProcessRifts.la
+-endif 
+-#}}}
+-#Flags and libraries {{{
+-if SHAREDLIBS
+-deps = ../../c/libISSMCore.la ../../c/libISSMModules.la
+-else
+-deps = ../../c/libISSMCore.a ../../c/libISSMModules.a
+-endif
+-
+-deps +=  $(MATHLIB) ${PYTHONLIB}
+-
+-#Triangle library
+-AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER
+-
+-#Python part
+-AM_LDFLAGS   = $(PYTHONLINK) -shrext ${EXEEXT} -module
+-if VERSION
+-AM_LDFLAGS +=
+-else
+-AM_LDFLAGS += -avoid-version
+-endif
+-if SHAREDLIBS
+-deps += ../../c/libISSMPython.la 
+-else
+-deps += ../../c/libISSMPython.a
+-AM_LDFLAGS += --no-warnings 
+-endif
+-
+-AM_CXXFLAGS +=  -D_HAVE_PYTHON_MODULES_  -fPIC
+-if PYTHON3
+-AM_CXXFLAGS +=  -DNPY_NO_DEPRECATED_API 
+-endif
+-
+-if SHAREDLIBS
+-deps +=
+-else
+-deps += ../../c/libISSMModules.a ../../c/libISSMCore.a
+-endif
+-
+-#Optimization flags:
+-AM_CXXFLAGS += $(CXXOPTFLAGS) 
+-#}}}
+-#Bin sources {{{
+-BamgConvertMesh_la_SOURCES = ../BamgConvertMesh/BamgConvertMesh.cpp\
+-									  ../BamgConvertMesh/BamgConvertMesh.h
+-BamgConvertMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-BamgMesher_la_SOURCES = ../BamgMesher/BamgMesher.cpp\
+-								../BamgMesher/BamgMesher.h
+-BamgMesher_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-ContourToMesh_la_SOURCES = ../ContourToMesh/ContourToMesh.cpp\
+-									 ../ContourToMesh/ContourToMesh.h
+-ContourToMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-ContourToNodes_la_SOURCES = ../ContourToNodes/ContourToNodes.cpp\
+-									 ../ContourToNodes/ContourToNodes.h
+-ContourToNodes_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-ElementConnectivity_la_SOURCES = ../ElementConnectivity/ElementConnectivity.cpp\
+-											../ElementConnectivity/ElementConnectivity.h
+-ElementConnectivity_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-EnumToString_la_SOURCES = ../EnumToString/EnumToString.cpp\
+-								  ../EnumToString/EnumToString.h
+-EnumToString_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-InterpFromMeshToMesh2d_la_SOURCES = ../InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp\
+-												../InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h
+-InterpFromMeshToMesh2d_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
+-
+-NodeConnectivity_la_SOURCES = ../NodeConnectivity/NodeConnectivity.cpp\
+-										../NodeConnectivity/NodeConnectivity.h
+-NodeConnectivity_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-StringToEnum_la_SOURCES = ../StringToEnum/StringToEnum.cpp\
+-								  ../StringToEnum/StringToEnum.h
+-StringToEnum_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-TriMesh_la_SOURCES = ../TriMesh/TriMesh.cpp\
+-							../TriMesh/TriMesh.h
+-TriMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(TRIANGLELIB)
+-
+-TriMeshProcessRifts_la_SOURCES = ../TriMeshProcessRifts/TriMeshProcessRifts.cpp\
+-											../TriMeshProcessRifts/TriMeshProcessRifts.h
+-TriMeshProcessRifts_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-#}}}
+Index: ../trunk-jpl/src/modules/Scotch/Scotch.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/Scotch/Scotch.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/Scotch/Scotch.cpp	(revision 13651)
+@@ -1,249 +0,0 @@
+-/*\file Scotch.c
+- *\brief:  Scotch partitioner mex module
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-#include "config.h"
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-#include "./Scotch.h"
+-
+-void GmapUsage(void){/*{{{*/
+-	mexPrintf("\n");
+-	mexPrintf("Usage: [maptab]=Scotch(adjmat,vertlb,vertwt,edgewt,archtyp,archpar,\n");
+-	mexPrintf("                         Scotch-specific parameters);\n");
+-	mexPrintf("\n");
+-}/*}}}*/
+-void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
+-
+-	#ifndef _HAVE_SCOTCH_ //only works if scotch library has been compiled in.
+-	_error_("Scotch not available! Cannot carry out Scotch partitioning!");
+-	#else
+-
+-	int     argcm;
+-	char    **argvm=NULL;
+-	int     nvert =0,nedge2=0,napar =0;
+-	mwIndex *ir=NULL,*jc=NULL;
+-	int     *adjir=NULL,*adjjc=NULL;
+-	double  *vld=NULL,*vwd=NULL,*ewd=NULL,*apd=NULL;
+-	int     *vli=NULL,*vwi=NULL,*ewi=NULL,*api=NULL;
+-	char    *archtyp=NULL;
+-	int     (*maptabi)[2]=NULL;
+-	double* maptabd=NULL;
+-	int     i,j,k,imi=0,imo=0,isi=0,ierr;
+-
+-	/* Check for proper number of arguments */
+-   
+-	if (nrhs == 0 && nlhs == 0) {
+-		GmapUsage();
+-		return;
+-	}
+-	else if (nrhs <  6 || nlhs >  1) {
+-		GmapUsage();
+-		mexErrMsgTxt(" ");
+-	}
+-
+-/*  load matlab argument list and convert to integer (note that converting here
+-	and in the x-layer is inefficient, but it makes the x-layer more general)  */
+-
+-	argvm = (char **) calloc(nrhs,sizeof(char *));
+-
+-	if (!(mxIsNumeric(prhs[imi]) &&
+-		  (mxGetM(prhs[imi]) == 1 && mxGetN(prhs[imi]) == 1))) {
+-		argvm[isi] = (char *) calloc(4+1,sizeof(char));
+-		strcpy(argvm[isi],"gmap");
+-		mexPrintf("%s -- Using \"%s\" entry point.\n",
+-				  __FUNCT__,argvm[isi]);
+-		isi++;
+-	}
+-	else {
+-		argvm[isi] = (char *) calloc(5+1,sizeof(char));
+-		strcpy(argvm[isi],"gpart");
+-		mexPrintf("%s -- Using \"%s\" entry point.\n",
+-				  __FUNCT__,argvm[isi]);
+-		isi++;
+-
+-		argvm[isi] = (char *) calloc(17,sizeof(char));
+-		sprintf(argvm[isi],"%d",(int)mxGetScalar(prhs[imi]));
+-		mexPrintf("%s -- Number of parts is %s.\n",
+-				  __FUNCT__,argvm[isi]);
+-		isi++;
+-		imi++;
+-	}
+-
+-	if (!mxIsNumeric(prhs[imi]) || (!mxIsEmpty(prhs[imi]) && !mxIsSparse(prhs[imi]))) {
+-		mexPrintf("%s -- Adjacency matrix must be numeric and sparse.\n",__FUNCT__);
+-		mexErrMsgTxt(" ");
+-	}
+-	else {
+-		nvert =mxGetM(prhs[imi]);
+-		nedge2=mxGetNzmax(prhs[imi]);
+-		if (mxGetNzmax(prhs[imi])) {
+-			ir    =mxGetIr(prhs[imi]);
+-			adjir = (int *) malloc(mxGetNzmax(prhs[imi])*sizeof(int));
+-			for (i=0; i<mxGetNzmax(prhs[imi]); i++)
+-				adjir[i]=(int)ir[i];
+-		}
+-		if (mxGetN(prhs[imi])) {
+-			jc    =mxGetJc(prhs[imi]);
+-			adjjc = (int *) malloc((mxGetN(prhs[imi])+1)*sizeof(int));
+-			for (i=0; i<(mxGetN(prhs[imi])+1); i++)
+-				adjjc[i]=(int)jc[i];
+-		}
+-		mexPrintf("%s -- Adjacency matrix is of size %d by %d with %d non-zeroes.\n",
+-				  __FUNCT__,mxGetM(prhs[imi]),mxGetN(prhs[imi]),mxGetNzmax(prhs[imi]));
+-	}
+-	imi++;
+-
+-	if (!mxIsNumeric(prhs[imi])) {
+-		mexPrintf("%s -- Vertex label vector must be numeric.\n",__FUNCT__);
+-		mexErrMsgTxt(" ");
+-	}
+-	else {
+-		if (mxGetM(prhs[imi])*mxGetN(prhs[imi])) {
+-			vld=mxGetPr(prhs[imi]);
+-			vli = (int *) malloc(mxGetM(prhs[imi])*mxGetN(prhs[imi])*sizeof(int));
+-			for (i=0; i<mxGetM(prhs[imi])*mxGetN(prhs[imi]); i++)
+-				vli[i]=(int)vld[i];
+-		}
+-		mexPrintf("%s -- Vertex label vector is of size %d by %d.\n",
+-				  __FUNCT__,mxGetM(prhs[imi]),mxGetN(prhs[imi]));
+-	}
+-	imi++;
+-
+-	if (!mxIsNumeric(prhs[imi])) {
+-		mexPrintf("%s -- Vertex weight vector must be numeric.\n",__FUNCT__);
+-		mexErrMsgTxt(" ");
+-	}
+-	else {
+-		if (mxGetM(prhs[imi])*mxGetN(prhs[imi])) {
+-			vwd=mxGetPr(prhs[imi]);
+-			vwi = (int *) malloc(mxGetM(prhs[imi])*mxGetN(prhs[imi])*sizeof(int));
+-			for (i=0; i<mxGetM(prhs[imi])*mxGetN(prhs[imi]); i++)
+-				vwi[i]=(int)vwd[i];
+-		}
+-		mexPrintf("%s -- Vertex weight vector is of size %d by %d.\n",
+-				  __FUNCT__,mxGetM(prhs[imi]),mxGetN(prhs[imi]));
+-	}
+-	imi++;
+-
+-	if (!mxIsNumeric(prhs[imi]) || (!mxIsEmpty(prhs[imi]) && !mxIsSparse(prhs[imi]))) {
+-		mexPrintf("%s -- Edge weight matrix must be numeric and sparse.\n",__FUNCT__);
+-		mexErrMsgTxt(" ");
+-	}
+-	else {
+-		if (mxGetM(prhs[imi])) {
+-			ewd=mxGetPr(prhs[imi]);
+-			ewi = (int *) malloc(mxGetM(prhs[imi])*sizeof(int));
+-			for (i=0; i<mxGetNzmax(prhs[imi]); i++)
+-				ewi[i]=(int)ewd[i];
+-		}
+-		mexPrintf("%s -- Edge weight matrix is of size %d by %d with %d non-zeroes.\n",
+-				  __FUNCT__,mxGetM(prhs[imi]),mxGetN(prhs[imi]),mxGetNzmax(prhs[imi]));
+-	}
+-	imi++;
+-
+-	if (!((strlen (argvm[0]) >= 5) &&
+-		  (strncmp (argvm[0] + strlen (argvm[0]) - 5, "gpart", 5) == 0))) {
+-		if (!mxIsChar(prhs[imi])) {
+-			mexPrintf("%s -- Architecture type must be character.\n",__FUNCT__);
+-			mexErrMsgTxt(" ");
+-		}
+-		else {
+-			if (mxGetM(prhs[imi])*mxGetN(prhs[imi])) {
+-				archtyp = (char *) calloc(mxGetM(prhs[imi])*mxGetN(prhs[imi])+1,sizeof(char));
+-				mxGetString(prhs[imi],archtyp,mxGetM(prhs[imi])*mxGetN(prhs[imi])+1);
+-			}
+-			mexPrintf("%s -- Architecture type is \"%s\".\n",
+-					  __FUNCT__,archtyp);
+-		}
+-		imi++;
+-
+-		if (!mxIsNumeric(prhs[imi])) {
+-			mexPrintf("%s -- Architecture parameter vector must be numeric.\n",__FUNCT__);
+-			mexErrMsgTxt(" ");
+-		}
+-		else {
+-			napar =mxGetM(prhs[imi])*mxGetN(prhs[imi]);
+-			if (mxGetM(prhs[imi])*mxGetN(prhs[imi])) {
+-				apd=mxGetPr(prhs[imi]);
+-				api = (int *) malloc(mxGetM(prhs[imi])*mxGetN(prhs[imi])*sizeof(int));
+-				for (i=0; i<mxGetM(prhs[imi])*mxGetN(prhs[imi]); i++)
+-					api[i]=(int)apd[i];
+-			}
+-			mexPrintf("%s -- Architecture parameter vector is of size %d by %d.\n",
+-					  __FUNCT__,mxGetM(prhs[imi]),mxGetN(prhs[imi]));
+-		}
+-		imi++;
+-	}
+-
+-	while (imi < nrhs) {
+-		if (!mxIsChar(prhs[imi])) {
+-			mexPrintf("%s -- prhs[%d] must be character.\n",__FUNCT__,imi);
+-			mexErrMsgTxt(" ");
+-		}
+-		else {
+-			argvm[isi] = (char *) calloc(mxGetM(prhs[imi])*mxGetN(prhs[imi])+1,sizeof(char));
+-			mxGetString(prhs[imi],argvm[isi],mxGetM(prhs[imi])*mxGetN(prhs[imi])+1);
+-		}
+-		isi++;
+-		imi++;
+-	}
+-	argcm=isi;
+-	mexPrintf("argcm=%d\n",argcm);
+-	for (i=0; i<argcm; i++)
+-		mexPrintf("argvm[%d]=\"%s\"\n",i,argvm[i]);
+-
+-	/* Do the actual computations in a subroutine */
+-
+-	mexPrintf("Gmapx:\n");
+-	ierr=gmapx(&maptabi,
+-			   argcm,
+-			   argvm,
+-			   nvert,
+-			   nedge2,
+-			   adjir,
+-			   adjjc,
+-			   vli,
+-			   vwi,
+-			   ewi,
+-			   archtyp,
+-			   napar,
+-			   api);
+-	mexPrintf("%s -- Error %d from Gmapx.\n",__FUNCT__,ierr);
+-
+-/*  for (i=0; i<nvert; i++)
+-		mexPrintf("maptabi[%d][0]=%d, maptabi[%d][1]=%d\n",
+-			 	  i,maptabi[i][0],i,maptabi[i][1]); */
+-
+-	/* Create matrices for the return arguments */
+-
+-	if (maptabi) {
+-		plhs[imo]=mxCreateDoubleMatrix(nvert, 2, mxREAL);
+-		maptabd = mxGetPr(plhs[imo]);
+-		k=0;
+-		for (j=0; j<2; j++)
+-			for (i=0; i<nvert; i++)
+-				maptabd[k++]=(double)maptabi[i][j];
+-		//free(maptabi);
+-	}
+-	else {
+-		plhs[imo]=mxCreateDoubleMatrix(0, 2, mxREAL);
+-	}
+-	imo++;
+-
+-	/*if (argvm)
+-		for (i=argcm-1; i>=0; i--)
+-			free(argvm[i]);
+-	if (api)     free(api);
+-	if (archtyp) free(archtyp);
+-	if (ewi)     free(ewi);
+-	if (vwi)     free(vwi);
+-	if (vli)     free(vli);
+-	if (adjjc)   free(adjjc);
+-	if (adjir)   free(adjir);*/
+-
+-	return;
+-#endif //#ifndef _HAVE_SCOTCH_
+-}
+Index: ../trunk-jpl/src/modules/Scotch/Scotch.h
+===================================================================
+--- ../trunk-jpl/src/modules/Scotch/Scotch.h	(revision 13650)
++++ ../trunk-jpl/src/modules/Scotch/Scotch.h	(revision 13651)
+@@ -1,35 +0,0 @@
+-/*!\file:  Scotch.h
+- * \brief header file for Scotch module.
+- */ 
+-
+-#ifndef _SCOTCH_H
+-#define _SCOTCH_H
+-
+-#include <stdio.h>
+-#include <string.h>    /*  strcasecmp  */
+-#include <time.h>      /*  clock,time,difftime  */
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-    
+-#undef __FUNCT__ 
+-#define __FUNCT__  "Scotch"
+-
+-/*  Scotch structures and prototypes  */
+-#ifdef MATLAB
+-#include "mat.h"
+-#include "mex.h"
+-#include "matrix.h"
+-
+-#define printf mexPrintf
+-#define fprintf(file,...) (file == stdout || file == stderr ? mexPrintf(__VA_ARGS__) : fprintf(file,__VA_ARGS__))
+-#define malloc mxMalloc
+-#define calloc mxCalloc
+-#define realloc mxRealloc
+-#define free mxFree
+-#define exit(status) mexErrMsgTxt("exit=" #status)
+-#endif
+-
+-#endif  /* _SCOTCH_H */
+Index: ../trunk-jpl/src/modules/NodeConnectivity/NodeConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/NodeConnectivity/NodeConnectivity.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/NodeConnectivity/NodeConnectivity.cpp	(revision 13651)
+@@ -1,41 +0,0 @@
+-/*\file NodeConnectivity.c
+- *\brief: build node connectivity from elements. 
+- */
+-
+-#include "./NodeConnectivity.h"
+-
+-void NodeConnectivityUsage(void){/*{{{*/
+-	_pprintLine_("");
+-	_pprintLine_("   usage: connectivity = " << __FUNCT__ << "(elements, numnodes);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(NodeConnectivity){
+-
+-	/*inputs: */
+-	double* elements=NULL;
+-	int     nel;
+-	int     nods;
+-
+-	/*outputs: */
+-	double* connectivity=NULL;
+-	int     width;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments: */
+-	CHECKARGUMENTS(NLHS,NRHS,&NodeConnectivityUsage);
+-        
+-	/*Input datasets: */
+-	FetchData(&elements,&nel,NULL,ELEMENTS);
+-	FetchData(&nods,NUMNODES);
+-
+-	/*!Generate internal degree of freedom numbers: */
+-	NodeConnectivityx(&connectivity, &width,elements,nel, nods);
+-
+-	/*write output datasets: */
+-	WriteData(CONNECTIVITY,connectivity,nods,width);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/NodeConnectivity/NodeConnectivity.h
+===================================================================
+--- ../trunk-jpl/src/modules/NodeConnectivity/NodeConnectivity.h	(revision 13650)
++++ ../trunk-jpl/src/modules/NodeConnectivity/NodeConnectivity.h	(revision 13651)
+@@ -1,55 +0,0 @@
+-/*
+-	NodeConnectivity.h
+-*/
+-
+-#ifndef _NODECONNECTIVITY_H
+-#define _NODECONNECTIVITY_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "NodeConnectivity"
+-
+-/*Header files: */
+-#include "../../c/include/globals.h"
+-#include "../../c/toolkits/toolkits.h"
+-#include "../../c/include/include.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-#include "../../c/io/io.h"
+-#include "../../c/EnumDefinitions/EnumDefinitions.h"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define ELEMENTS prhs[0]
+-#define NUMNODES prhs[1]
+-/* serial output macros: */
+-#define CONNECTIVITY (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define ELEMENTS PyTuple_GetItem(args,0)
+-#define NUMNODES PyTuple_GetItem(args,1)
+-/* serial output macros: */
+-#define CONNECTIVITY output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  2
+-
+-#endif  /* _NODECONNECTIVITY_H */
+Index: ../trunk-jpl/src/modules/BamgConvertMesh/BamgConvertMesh.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/BamgConvertMesh/BamgConvertMesh.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/BamgConvertMesh/BamgConvertMesh.cpp	(revision 13651)
+@@ -1,61 +0,0 @@
+-/*\file BamgConvertMesh.c
+- *\brief: bamg module.
+- */
+-#include "./BamgConvertMesh.h"
+-
+-void BamgConvertMeshUsage(void){/*{{{*/
+-	_pprintString_("BAMGCONVERTMESH - convert [x y index] to a bamg geom and mesh geom");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("      [bamggeom bamgmesh]=BamgConvertMesh(index,x,y);");
+-	_pprintLine_("      index: index of the mesh");
+-	_pprintLine_("      x,y: coordinates of the nodes");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(BamgConvertMesh){
+-
+-	/*input: */
+-	int    *index      = NULL;
+-	double *x          = NULL;
+-	double *y          = NULL;
+-	int     nods,nels,test1,test2;
+-
+-	/*Output*/
+-	BamgMesh *bamgmesh = NULL;
+-	BamgGeom *bamggeom = NULL;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CHECKARGUMENTS(NLHS,NRHS,&BamgConvertMeshUsage);
+-
+-	/*Initialize Bamg outputs*/
+-	bamggeom=new BamgGeom();
+-	bamgmesh=new BamgMesh();
+-
+-	/*Input datasets: */
+-	FetchData(&index,&nels,&test1,INDEXHANDLE);
+-	FetchData(&x,&nods,XHANDLE);
+-	FetchData(&y,&test2,YHANDLE);
+-
+-	/*Check inputs*/
+-	if(nels<0) _error_("Number of elements must be positive, check index number of lines");
+-	if(nods<0) _error_("Number of nods must be positive, check x and y sizes");
+-	if(test1!=3) _error_("index should have 3 columns");
+-	if(test2!=nods) _error_("x and y do not have the same length");
+-
+-	/* Run core computations: */
+-	BamgConvertMeshx(bamgmesh,bamggeom,index,x,y,nods,nels);
+-
+-	/*Generate output Matlab Structures*/
+-	WriteData(BAMGGEOMOUT,bamggeom);
+-	WriteData(BAMGMESHOUT,bamgmesh);
+-
+-	/*Clean up*/
+-	delete bamggeom;
+-	delete bamgmesh;
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/BamgConvertMesh/BamgConvertMesh.h
+===================================================================
+--- ../trunk-jpl/src/modules/BamgConvertMesh/BamgConvertMesh.h	(revision 13650)
++++ ../trunk-jpl/src/modules/BamgConvertMesh/BamgConvertMesh.h	(revision 13651)
+@@ -1,55 +0,0 @@
+-/*!\file BamgConvertMesh.h
+- * \brief: prototype for Data Interpolation mex module.
+- */
+-
+-#ifndef _BAMGCONVERTMESH_H
+-#define _BAMGCONVERTMESH_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-#include "../../c/io/io.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "BamgConvertMesh"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define INDEXHANDLE prhs[0]
+-#define XHANDLE     prhs[1]
+-#define YHANDLE     prhs[2]
+-/* serial output macros: */
+-#define BAMGMESHOUT    (mxArray**)&plhs[0]
+-#define BAMGGEOMOUT    (mxArray**)&plhs[1]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define INDEXHANDLE PyTuple_GetItem(args,0)
+-#define XHANDLE     PyTuple_GetItem(args,1)
+-#define YHANDLE     PyTuple_GetItem(args,2)
+-/* serial output macros: */
+-#define BAMGMESHOUT    output,0
+-#define BAMGGEOMOUT    output,1
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  2
+-#undef NRHS
+-#define NRHS  3
+-
+-#endif
+Index: ../trunk-jpl/src/modules/KMLOverlay/KMLOverlay.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/KMLOverlay/KMLOverlay.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/KMLOverlay/KMLOverlay.cpp	(revision 13651)
+@@ -1,133 +0,0 @@
+-/*\file KMLOverlay.c
+- *\brief: KML file overlay mex module.
+- */
+-#include "./KMLOverlay.h"
+-
+-void KMLOverlayUsage(void){/*{{{*/
+-	_pprintLine_("KMLOverlay - KML file overlay module:");
+-	_pprintLine_("");
+-	_pprintLine_("   This module reads a list of image files and writes a KML or KMZ overlay file.");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("      ierror=KMLOverlay(kmlfile,'param name',param,...);");
+-	_pprintLine_("");
+-	_pprintLine_("      kmlfile     KML or KMZ file name (string)");
+-	_pprintLine_("");
+-	_pprintLine_("      lataxis     latitude axis (double vector [south north], required)");
+-	_pprintLine_("      longaxis    longitude axis (double vector [west east], required)");
+-	_pprintLine_("      images      relative or http image file names (string or array of strings or cell array of strings, required)");
+-	_pprintLine_("      zip         flag to zip the doc.kml and image files into kmzfile (double, non-zero for kmz)");
+-	_pprintLine_("");
+-	_pprintLine_("      ierror     error flag (double, non-zero for error)");
+-	_pprintLine_("");
+-	_pprintLine_("   Example:");
+-	_pprintLine_("      KMLOverlay(kmlfile,'lataxis',[south north],'longaxis',[west east],'images',{'file1.png','http://issm/file2.png'},'zip',1);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(KMLOverlay){
+-
+-	int i,verbose=1;
+-
+-	/*input: */
+-	char*   filkml=NULL;
+-	char*   filkmz=NULL;
+-
+-	FILE*   fid=NULL;
+-
+-	Options* options=NULL;
+-	int      nlat=0,nlong=0;
+-	double*  lataxis =NULL;
+-	double*  longaxis=NULL;
+-	int      nimages=0;
+-	char**   pimages=NULL;
+-	double   dzip=0;
+-	char*    czip=NULL;
+-
+-	/* output: */
+-	int     ierror=0;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	if(nlhs>NLHS){
+-		KMLOverlayUsage(); _error_("KMLOverlay usage error");
+-	}
+-	if(nrhs<NRHS){
+-		KMLOverlayUsage(); _error_("KMLOverlay usage error");
+-	}
+-
+-	/*Input datasets: */
+-	FetchData(&filkml,FILENAME);
+-	FetchData(&options,NRHS,nrhs,prhs);
+-
+-	options->Get(&lataxis ,&nlat ,(char*)"lataxis");
+-	if (verbose && lataxis) for (i=0; i<nlat; i++) _printLine_("  lataxis [" << i << "]=" << lataxis[i]);
+-	options->Get(&longaxis,&nlong,(char*)"longaxis");
+-	if (verbose && longaxis) for (i=0; i<nlong; i++) _printLine_("  longaxis[" << i << "]=" << longaxis[i]);
+-	options->Get(&pimages,&nimages,(char*)"images");
+-	if (verbose && pimages) for (i=0; i<nimages; i++) _printLine_("  pimages[" << i << "]=\"" << pimages[i] << "\"");
+-	options->Get(&dzip,(char*)"zip",0.);
+-	if (verbose) _printLine_("  dzip=" << dzip);
+-
+-	/*some checks*/
+-	if (nlat !=2) _error_("Latitudinal axes \"lataxis\" require two double values, not " << nlat << ".");
+-	if (nlong!=2) _error_("Longitudinal axes \"longaxis\" require two double values, not " << nlong << ".");
+-	if (!nimages) _error_("No image files provided.");
+-
+-	if ((int)dzip){
+-		filkmz=filkml;
+-		filkml=(char*)mxMalloc(8*sizeof(char));
+-		strcpy(filkml,"doc.kml");
+-	}
+-
+-	if(!strlen(filkml)) strcpy(filkml,"stdout");
+-
+-	if(verbose) _printLine_("Opening kml overlay file \"" << filkml << "\".");
+-	fid=fopen(filkml,"w");
+-
+-	/* Run core computations: */
+-	if (verbose) _printLine_("Calling core:");
+-	KMLOverlayx(&ierror,lataxis,longaxis,nimages,pimages,fid);
+-
+-	if (verbose) _printLine_("Closing file \"" << filkml << "\".");
+-	fclose(fid);
+-
+-	/* Create kmz file, if specified: */
+-	if ((int)dzip) {
+-		czip=(char*)mxMalloc((5+strlen(filkmz)+1+strlen(filkml)+1)*sizeof(char));
+-		czip[0]='\0';
+-		strcat(czip,"!zip ");
+-		strcat(czip,filkmz);
+-		strcat(czip," ");
+-		strcat(czip,filkml);
+-		for (i=0; i<nimages; i++)
+-			if (strlen(pimages[i]) && strncmp(pimages[i],"http",4)) {
+-				czip=(char*)mxRealloc(czip,(strlen(czip)+1+strlen(pimages[i])+1)*sizeof(char));
+-				strcat(czip," ");
+-				strcat(czip,pimages[i]);
+-			}
+-		if (verbose) _printLine_("Zipping file \"" << filkmz << "\".");
+-		if (verbose) _printLine_(czip);
+-
+-		if (mexEvalString(czip)) _error_("Error zipping file \"" << filkmz << "\".");
+-		xDelete<char>(czip);
+-		xDelete<char>(filkmz);
+-	}
+-
+-	/*Write data: */
+-	WriteData(ERRORFLAG,ierror);
+-
+-	/*Clean-up*/
+-	if (pimages) {
+-		for (i=nimages; i>0; i--) xDelete<char>(pimages[i-1]);
+-		xDelete<char*>(pimages);
+-	}
+-	xDelete<double>(longaxis);
+-	xDelete<double>(lataxis);
+-	xDelete<char>(filkml);
+-	delete options;
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/KMLOverlay/KMLOverlay.h
+===================================================================
+--- ../trunk-jpl/src/modules/KMLOverlay/KMLOverlay.h	(revision 13650)
++++ ../trunk-jpl/src/modules/KMLOverlay/KMLOverlay.h	(revision 13651)
+@@ -1,48 +0,0 @@
+-/*!\file KMLOverlay.h
+- * \brief: prototype for KML file overlay mex module.
+- */
+-
+-#ifndef _KMLOVERLAY_H
+-#define _KMLOVERLAY_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "KMLOverlay"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define FILENAME  prhs[0]
+-/* serial output macros: */
+-#define ERRORFLAG (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define FILENAME  PyTuple_GetItem(args,0)
+-/* serial output macros: */
+-#define ERRORFLAG output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NRHS
+-#define NRHS  1
+-#undef NLHS
+-#define NLHS  1
+-
+-#endif
+Index: ../trunk-jpl/src/modules/ContourToNodes/ContourToNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/ContourToNodes/ContourToNodes.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/ContourToNodes/ContourToNodes.cpp	(revision 13651)
+@@ -1,49 +0,0 @@
+-/*! \file  ContourtoNodes
+-    \brief: takes a  contour file, and figures out which nodes  (x,y list)
+-*/
+-	
+-#include "./ContourToNodes.h"
+-
+-void ContourToNodesUsage(void){/*{{{*/
+-	_printLine_("   usage:");
+-	_printLine_("   [flags]=ContourToNodes(x,y,contourname,edgevalue);\n");
+-	_printLine_("   where:");
+-	_printLine_("      x,y: list of nodes.");
+-	_printLine_("      contourname: name of .exp file containing the contours, or resulting structure from call to expread.");
+-	_printLine_("      edgevalue: integer (0, 1 or 2) defining the value associated to the nodes on the edges of the polygons.");
+-	_printLine_("      flags: vector of flags (0 or 1), of size nods.");
+-	_printLine_("");
+-}/*}}}*/
+-WRAPPER(ContourToNodes){
+-
+-	/* input: */
+-	int      edgevalue,nods;
+-	double  *x           = NULL;
+-	double  *y           = NULL;
+-	char    *contourname = NULL;
+-	DataSet *contours    = NULL;
+-
+-	/* output: */
+-	SeqVec<double> *flags = NULL;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CHECKARGUMENTS(NLHS,NRHS,&ContourToNodesUsage);
+-	
+-	/*Fetch inputs: */
+-	FetchData(&x,&nods,NULL,XHANDLE);
+-	FetchData(&y,NULL,NULL,YHANDLE);
+-	FetchData(&edgevalue,EDGEVALUE);
+-	FetchData(&contours,CONTOUR);
+-
+-	/*Run x layer */
+-	ContourToNodesx(&flags,x,y,nods,contours,edgevalue);
+-
+-	/* output: */
+-	WriteData(FLAGS,flags);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/ContourToNodes/ContourToNodes.h
+===================================================================
+--- ../trunk-jpl/src/modules/ContourToNodes/ContourToNodes.h	(revision 13650)
++++ ../trunk-jpl/src/modules/ContourToNodes/ContourToNodes.h	(revision 13651)
+@@ -1,57 +0,0 @@
+-/*
+-	ContourToNodes.h
+-*/
+-
+-#ifndef _CONTOURTONODES_H
+-#define _CONTOURTONODES_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__
+-#define __FUNCT__ "ContourToNodes"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* input macros: */
+-#define XHANDLE   prhs[0]
+-#define YHANDLE   prhs[1]
+-#define CONTOUR   prhs[2]
+-#define EDGEVALUE prhs[3]
+-
+-/* serial output macros: */
+-#define FLAGS (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* input macros: */
+-#define XHANDLE   PyTuple_GetItem(args,0)
+-#define YHANDLE   PyTuple_GetItem(args,1)
+-#define CONTOUR   PyTuple_GetItem(args,2)
+-#define EDGEVALUE PyTuple_GetItem(args,3)
+-
+-/* serial output macros: */
+-#define FLAGS output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS 1
+-#undef NRHS
+-#define NRHS 4
+-
+-#endif  /* _CONTOURTONODES_H */
+-
+Index: ../trunk-jpl/src/modules/HoleFiller/HoleFiller.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/HoleFiller/HoleFiller.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/HoleFiller/HoleFiller.cpp	(revision 13651)
+@@ -1,63 +0,0 @@
+-/*!\file:  HoleFiller.cpp
+- * \brief fill holes in matlab velocity array
+-	this matlab module is an adaptation of a routine written by Robber 
+-	Crippen.  The original routine was designed for the SRTM mission at JPL, 
+-	and can be found in the current directory, under the name 
+-	HoleFillerCrippen.  It fills void holes in an image, using an interpolation 
+-	algorithm, and optionnally a smoothing algorithm. 
+-	This matlab module extends the Crippen routine to be used in Matlab, 
+-	using double arrays found in the workspace, and loaded directly into memory.
+-*/
+-
+-#include "./HoleFiller.h"
+-
+-void HoleFillerUsage(void){/*{{{*/
+-	_printLine_("   HoleFiller usage:");
+-	_printLine_("   [image_out]=HoleFiller(image_in,smooth);\n");
+-	_printLine_("   where:");
+-	_printLine_("      image_in in double format");
+-	_printLine_("      smooth: 1 to smooth with a box filer, 0 to leave data raw");
+-	_printLine_("      image_out in double format");
+-	_printLine_("");
+-}/*}}}*/
+-WRAPPER(HoleFiller){
+-
+-	int i,j;
+-
+-	/* required input: */
+-	double* imagein=NULL;
+-	int     imagein_rows,imagein_cols;
+-	int     smooth_flag;
+-	int     smooth;
+-
+-
+-	/* output: */
+-	mxArray* pfield=NULL;
+-	double* imageout=NULL;
+-	int     imageout_rows,imageout_cols;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&HoleFillerUsage);
+-
+-	/*Fetch data: */
+-	FetchData(&imagein,&imagein_rows,&imagein_cols,IMAGEIN);
+-	FetchData(&smooth_flag,SMOOTH);
+-	
+-	/*Get smooth flag setup: */
+-	if (smooth_flag==0)
+-		smooth=1;
+-	else
+-		smooth=0;
+-
+-	/*Run core hole filler routine: */
+-	HoleFillerx( &imageout,imagein,imagein_rows,imagein_cols,smooth);
+-
+-	/* output: */
+-	WriteData(IMAGEOUT,imageout,imagein_rows,imagein_cols);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/HoleFiller/HoleFiller.h
+===================================================================
+--- ../trunk-jpl/src/modules/HoleFiller/HoleFiller.h	(revision 13650)
++++ ../trunk-jpl/src/modules/HoleFiller/HoleFiller.h	(revision 13651)
+@@ -1,50 +0,0 @@
+-/*
+-	HoleFiller.h
+-*/
+-
+-#ifndef _HOLEFILLER_H
+-#define _HOLEFILLER_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "HoleFiller"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define IMAGEIN prhs[0]
+-#define SMOOTH  prhs[1]
+-/* serial output macros: */
+-#define IMAGEOUT (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define IMAGEIN PyTuple_GetItem(args,0)
+-#define SMOOTH  PyTuple_GetItem(args,1)
+-/* serial output macros: */
+-#define IMAGEOUT output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  2
+-
+-#endif  /* _HOLEFILLER_H */
+Index: ../trunk-jpl/src/modules/MeshProfileIntersection/MeshProfileIntersection.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/MeshProfileIntersection/MeshProfileIntersection.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/MeshProfileIntersection/MeshProfileIntersection.cpp	(revision 13651)
+@@ -1,113 +0,0 @@
+-/*! \file  MeshProfileIntersection.cpp
+-    \brief: takes a  .exp file (made of several profiles), and figures out its intersection 
+-	with a mesh.
+-
+-	usage:
+-	[segments]=MeshProfileIntersection(index,x,y,filename);
+-
+-	where:
+-	input:
+-		index,x,y is a triangulation
+-		filename: name of Argus style .exp file containing the segments (can be groups of disconnected segments)
+-	output:
+-		segments: array made of x1,y1,x2,y2,element_id lines (x1,y1) and (x2,y2) are segment extremitis for a segment 
+-		belonging to the elemnt_id element. there are as many lines in segments as there are segments intersecting the 
+-		mesh.
+-*/
+-	
+-#include "./MeshProfileIntersection.h"
+-
+-void MeshProfileIntersectionUsage(void){/*{{{*/
+-	_printLine_("   usage:");
+-	_printLine_("   [segments]=MeshProfileIntersection(index,x,y,filename);");
+-	_printLine_("   where:");
+-	_printLine_("   input:");
+-	_printLine_("        index,x,y is a triangulation");
+-	_printLine_("        filename: name of Argus style .exp file containing the segments (can be groups of disconnected segments)");
+-	_printLine_("   output:");
+-	_printLine_("        segments: array made of x1,y1,x2,y2,element_id lines (x1,y1) and (x2,y2) are segment extremitis for a segment ");
+-	_printLine_("        belonging to the elemnt_id element. there are as many lines in segments as there are segments intersecting the ");
+-	_printLine_("        mesh.");
+-}/*}}}*/
+-WRAPPER(MeshProfileIntersection){
+-
+-	int i,j;
+-
+-	/* required input: */
+-	//mesh
+-	double* double_index=NULL;
+-	int*    index=NULL;
+-	int     nel;
+-	double* x=NULL;
+-	double* y=NULL;
+-	int     nods;
+-	int     dummy;
+-	
+-	//contours
+-	mxArray*  matlabstructure=NULL;
+-	Contour<double>** contours=NULL;
+-	int       numcontours;
+-	Contour<double>*  contouri=NULL;
+-
+-	/* output: */
+-	double* segments=NULL;
+-	int     numsegs;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&MeshProfileIntersectionUsage);
+-
+-	/*First, call expread on filename to build a contour array in the matlab workspace: */
+-	mexCallMATLAB( 1, &matlabstructure, 1, (mxArray**)&FILENAME, "expread");
+-
+-	/*Fetch inputs: */
+-	//index
+-	FetchData(&double_index,&nel,&dummy,INDEX);
+-	if(dummy!=3 && dummy!=6)_error_("element triangulation should be of 3 or 6 column width!");
+-	index=xNew<int>(nel*3);
+-	for(i=0;i<nel;i++){
+-		for(j=0;j<3;j++){
+-			*(index+3*i+j)=(int)*(double_index+dummy*i+j)-1; //"C" style indexing
+-		}
+-	}
+-	//x and y
+-	FetchData(&x,&nods,X);
+-	FetchData(&y,&dummy,Y);
+-
+-	//contours
+-	numcontours=mxGetNumberOfElements(matlabstructure);
+-	contours=xNew<Contour<double>*>(numcontours);
+-	for(i=0;i<numcontours;i++){
+-		//allocate
+-		contouri=xNew<Contour<double> >(1);
+-		//retrieve dimension of this contour.
+-		contouri->nods=(int)mxGetScalar(mxGetField(matlabstructure,i,"nods"));
+-		//set pointers.
+-		contouri->x=mxGetPr(mxGetField(matlabstructure,i,"x"));
+-		contouri->y=mxGetPr(mxGetField(matlabstructure,i,"y"));
+-		*(contours+i)=contouri;
+-	}
+-
+-	/* Debugging of contours :{{{1*/
+-	/*for(i=0;i<numcontours;i++){
+-		_printLine_("\nContour echo: contour number  " << i+1 << " / " << numcontours);
+-		contouri=*(contours+i);
+-		_printLine_("   Number of vertices " << contouri->nods);
+-		for (j=0;j<contouri->nods;j++){
+-			_printLine_("   " << *(contouri->x+j) << "f " << *(contouri->y+j) << "f");
+-		}
+-	}*/
+-	/*}}}*/
+-
+-	/*Run interpolation routine: */
+-	MeshProfileIntersectionx(&segments,&numsegs,index,x,y,nel,nods,contours,numcontours);
+-
+-	/* output: */
+-	WriteData(SEGMENTS,segments,numsegs,5);
+-
+-	/*end module: */
+-	MODULEEND();
+-
+-}
+Index: ../trunk-jpl/src/modules/MeshProfileIntersection/MeshProfileIntersection.h
+===================================================================
+--- ../trunk-jpl/src/modules/MeshProfileIntersection/MeshProfileIntersection.h	(revision 13650)
++++ ../trunk-jpl/src/modules/MeshProfileIntersection/MeshProfileIntersection.h	(revision 13651)
+@@ -1,55 +0,0 @@
+-/*
+-	MeshProfileIntersection.h
+-*/
+-
+-#ifndef _MESHPROFILEINTERSECTION_H
+-#define _MESHPROFILEINTERSECTION_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__
+-#define __FUNCT__ "MeshProfileIntersection"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* input macros: */
+-#define INDEX    prhs[0]
+-#define X        prhs[1]
+-#define Y        prhs[2]
+-#define FILENAME prhs[3]
+-/* serial output macros: */
+-#define SEGMENTS (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* input macros: */
+-#define INDEX    PyTuple_GetItem(args,0)
+-#define X        PyTuple_GetItem(args,1)
+-#define Y        PyTuple_GetItem(args,2)
+-#define FILENAME PyTuple_GetItem(args,3)
+-/* serial output macros: */
+-#define SEGMENTS output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS 1
+-#undef NRHS
+-#define NRHS 4
+-
+-#endif  /* _MESHPROFILEINTERSECTION_H */
+-
+Index: ../trunk-jpl/src/modules/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h
+===================================================================
+--- ../trunk-jpl/src/modules/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h	(revision 13650)
++++ ../trunk-jpl/src/modules/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h	(revision 13651)
+@@ -1,64 +0,0 @@
+-/*!\file InterpFromMeshToMesh3d.h
+- * \brief: prototype for Data Interpolation mex module.
+- */
+-
+-#ifndef _INTERPFROMMESH3D_H
+-#define _INTERPFROMMESH3D_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "InterpFromMeshToMesh3d"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define INDEXHANDLE   prhs[0]
+-#define XHANDLE       prhs[1]
+-#define YHANDLE       prhs[2]
+-#define ZHANDLE       prhs[3]
+-#define DATAHANDLE    prhs[4]
+-#define XPRIMEHANDLE  prhs[5]
+-#define YPRIMEHANDLE  prhs[6]
+-#define ZPRIMEHANDLE  prhs[7]
+-#define DEFAULTHANDLE prhs[8]
+-/* serial output macros: */
+-#define DATAPRIME (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define INDEXHANDLE   PyTuple_GetItem(args,0)
+-#define XHANDLE       PyTuple_GetItem(args,1)
+-#define YHANDLE       PyTuple_GetItem(args,2)
+-#define ZHANDLE       PyTuple_GetItem(args,3)
+-#define DATAHANDLE    PyTuple_GetItem(args,4)
+-#define XPRIMEHANDLE  PyTuple_GetItem(args,5)
+-#define YPRIMEHANDLE  PyTuple_GetItem(args,6)
+-#define ZPRIMEHANDLE  PyTuple_GetItem(args,7)
+-#define DEFAULTHANDLE PyTuple_GetItem(args,8)
+-/* serial output macros: */
+-#define DATAPRIME output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  9
+-
+-#endif  /* _INTERPFROMMESHTOMESH3D_H */
+Index: ../trunk-jpl/src/modules/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.cpp	(revision 13651)
+@@ -1,101 +0,0 @@
+-/*!\file InterpFromMeshToMesh3d.c
+- * \brief: data interpolation from a list of (x,y,values) into mesh vertices
+-*/
+-	
+-#include "./InterpFromMeshToMesh3d.h"
+-
+-void InterpFromMeshToMesh3dUsage(void){/*{{{*/
+-	_pprintLine_("INTERPFROMMESHTOMESH3D - interpolation from a 3d hexahedron mesh onto a list of point");
+-	_pprintLine_("");
+-	_pprintLine_("   This function is a multi-threaded mex file that interpolates a field");
+-	_pprintLine_("   defined on a triangular mesh onto a list of point");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("      data_prime=InterpFromMeshToMesh3d(index,x,y,z,data,x_prime,y_prime,z_prime,default_value);");
+-	_pprintLine_("");
+-	_pprintLine_("      index: index of the mesh where data is defined");
+-	_pprintLine_("      x,y,z: coordinates of the nodes where data is defined");
+-	_pprintLine_("      data: matrix holding the data to be interpolated onto the mesh.");
+-	_pprintLine_("      x_prime,y_prime,z_prime: coordinates of the points onto which we interpolate.");
+-	_pprintLine_("      default_value: default value if no data is found (holes).");
+-	_pprintLine_("      data_prime: vector of mesh interpolated data.");
+-	_pprintLine_("");
+-	_pprintLine_("   Example:");
+-	_pprintLine_("      load('temperature.mat');");
+-	_pprintLine_("      md.initialization.temperature=InterpFromMeshToMesh3d(index,x,y,z,temperature,md.mesh.x,md.mesh.y,md.mesh.z,253);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(InterpFromMeshToMesh3d){
+-
+-	/*input: */
+-	double* index_data=NULL;
+-	int     index_data_rows;
+-
+-	double* x_data=NULL;
+-	double* y_data=NULL;
+-	double* z_data=NULL;
+-
+-	int     x_data_rows;
+-	int     y_data_rows;
+-	int     z_data_rows;
+-
+-	double* data=NULL; 
+-	int     data_rows;
+-	int     data_cols;
+-
+-	double* x_prime=NULL;
+-	double* y_prime=NULL;
+-	double* z_prime=NULL;
+-	
+-	int     x_prime_rows;
+-	int     y_prime_rows;
+-	int     z_prime_rows;
+-
+-	double  default_value;
+-
+-	/*Intermediary*/
+-	int nods_data;
+-	int nels_data;
+-	int nods_prime;
+-
+-	/* output: */
+-	SeqVec<double>*  data_prime=NULL;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&InterpFromMeshToMesh3dUsage);
+-
+-	/*Input datasets: */
+-	FetchData(&index_data,&index_data_rows,NULL,INDEXHANDLE);
+-	FetchData(&x_data,&x_data_rows,NULL,XHANDLE);
+-	FetchData(&y_data,&y_data_rows,NULL,YHANDLE);
+-	FetchData(&z_data,&z_data_rows,NULL,ZHANDLE);
+-	FetchData(&data,&data_rows,&data_cols,DATAHANDLE);
+-	FetchData(&x_prime,&x_prime_rows,NULL,XPRIMEHANDLE);
+-	FetchData(&y_prime,&y_prime_rows,NULL,YPRIMEHANDLE);
+-	FetchData(&z_prime,&z_prime_rows,NULL,ZPRIMEHANDLE);
+-	FetchData(&default_value,DEFAULTHANDLE);
+-
+-	/*some checks*/
+-	if (x_data_rows!=y_data_rows || x_data_rows!=z_data_rows){
+-		_error_("vectors x, y and z should have the same length!");
+-	}
+-	if (x_prime_rows!=y_prime_rows || x_prime_rows!=z_prime_rows){
+-		_error_("vectors x_prime, y_prime and z_prime should have the same length!");
+-	}
+-	/*get number of elements and number of nodes in the data*/
+-	nels_data=index_data_rows;
+-	nods_data=x_data_rows;
+-	nods_prime=x_prime_rows;
+-
+-	/* Run core computations: */
+-	InterpFromMeshToMesh3dx(&data_prime,index_data,x_data,y_data,z_data,nods_data,nels_data,data,data_rows,x_prime,y_prime,z_prime,nods_prime,default_value);
+-
+-	/*Write data: */
+-	WriteData(DATAPRIME,data_prime);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/Ll2xy/Ll2xy.h
+===================================================================
+--- ../trunk-jpl/src/modules/Ll2xy/Ll2xy.h	(revision 13650)
++++ ../trunk-jpl/src/modules/Ll2xy/Ll2xy.h	(revision 13651)
+@@ -1,54 +0,0 @@
+-/*!\file Ll2xy.h
+- * \brief: prototype for lat/long to x/y coordinate mex module.
+- */
+-
+-#ifndef _LL2XY_H
+-#define _LL2XY_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "Ll2xy"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define LAT_IN prhs[0]
+-#define LON_IN prhs[1]
+-#define SGN_IN prhs[2]
+-/* serial output macros: */
+-#define X_OUT (mxArray**)&plhs[0]
+-#define Y_OUT (mxArray**)&plhs[1]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define LAT_IN PyTuple_GetItem(args,0)
+-#define LON_IN PyTuple_GetItem(args,1)
+-#define SGN_IN PyTuple_GetItem(args,2)
+-/* serial output macros: */
+-#define X_OUT output,0
+-#define Y_OUT output,1
+-#endif
+-
+-/* serial arg counts: */
+-#undef NRHS
+-#define NRHS  3
+-#undef NLHS
+-#define NLHS  2
+-
+-#endif
+Index: ../trunk-jpl/src/modules/Ll2xy/Ll2xy.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/Ll2xy/Ll2xy.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/Ll2xy/Ll2xy.cpp	(revision 13651)
+@@ -1,97 +0,0 @@
+-/*\file Ll2xy.c
+- *\brief: lat/long to x/y coordinate mex module.
+- */
+-#include "./Ll2xy.h"
+-
+-void Ll2xyUsage(void){/*{{{*/
+-	_pprintLine_("Ll2xy - lat/long to x/y coordinate transformation module:");
+-	_pprintLine_("");
+-	_pprintLine_("   This module transforms lat/long to x/y coordinates.");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("      [x,y]=Ll2xy(lat,lon,sgn,'param name',param,...);");
+-	_pprintLine_("");
+-	_pprintLine_("      lat         latitude coordinates (double vector)");
+-	_pprintLine_("      lon         longitude coordinates (double vector)");
+-	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))");
+-	_pprintLine_("");
+-	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
+-	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
+-	_pprintLine_("");
+-	_pprintLine_("      x           x coordinates (double vector)");
+-	_pprintLine_("      y           y coordinates (double vector)");
+-	_pprintLine_("");
+-	_pprintLine_("   Examples:");
+-	_pprintLine_("      [x,y]=Ll2xy(lat,lon, 1);");
+-	_pprintLine_("      [x,y]=Ll2xy(lat,lon, 1,'central_meridian',45,'standard_parallel',70);");
+-	_pprintLine_("      [x,y]=Ll2xy(lat,lon,-1,'central_meridian', 0,'standard_parallel',71);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(Ll2xy){
+-
+-	int i,verbose=1;
+-
+-	/*input: */
+-	double  *lat=NULL,*lon=NULL;
+-	int     nlat,nlon,ncoord;
+-	int     sgn;
+-
+-	Options* options=NULL;
+-	double   cm=0.,sp=0.;
+-
+-	/* output: */
+-	double  *x=NULL,*y=NULL;
+-	int     iret=0;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	if (nlhs > NLHS) {
+-		Ll2xyUsage(); _error_("Ll2xy usage error");
+-	}
+-	if (nrhs < NRHS) {
+-		Ll2xyUsage(); _error_("Ll2xy usage error");
+-	}
+-
+-	/*Input datasets: */
+-	FetchData(&lat,&nlat,LAT_IN);
+-	FetchData(&lon,&nlon,LON_IN);
+-	FetchData(&sgn,SGN_IN);
+-	FetchData(&options,NRHS,nrhs,prhs);
+-
+-	/*  defaults are in Ll2xydef, so don't duplicate them here, and only use user values if both have been specified  */
+-	if(options->GetOption("central_meridian") || options->GetOption("standard_parallel")){
+-		options->Get(&cm,"central_meridian");
+-		if (verbose) _printLine_("  cm=" << cm);
+-		options->Get(&sp,"standard_parallel");
+-		if (verbose) _printLine_("  sp=" << sp);
+-	}
+-
+-	/*some checks*/
+-	if (verbose) _printLine_("Checking inputs:");
+-	if (nlat != nlon){_error_("Must have same number of lat[" << nlat << "] and lon[" << nlon << "] coordinates.");}
+-	else                ncoord=nlat;
+-	if (sgn != +1 && sgn != -1) _error_("Hemisphere sgn=" << sgn << " must be +1 (north) or -1 (south).");
+-	if (fabs(cm)      > 180.) _error_("Central meridian cm=" << cm << " must be between -180 (west) and +180 (east) degrees.");
+-	if (sp < 0. || sp >  90.) _error_("Standard parallel sp=" << sp << " must be between 0 and 90 degrees (in specified hemisphere).");
+-
+-	x=(double*)mxMalloc(ncoord*sizeof(double));
+-	y=(double*)mxMalloc(ncoord*sizeof(double));
+-
+-	/* Run core computations: */
+-	if (options->GetOption("central_meridian") && options->GetOption("standard_parallel"))
+-		iret=Ll2xyx(x,y,lat,lon,ncoord,sgn,cm,sp);
+-	else
+-		iret=Ll2xyx(x,y,lat,lon,ncoord,sgn);
+-
+-	/*Write data: */
+-	WriteData(X_OUT,x,ncoord);
+-	WriteData(Y_OUT,y,ncoord);
+-
+-	/*Clean-up*/
+-	delete options;
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/BamgMesher/BamgMesher.h
+===================================================================
+--- ../trunk-jpl/src/modules/BamgMesher/BamgMesher.h	(revision 13650)
++++ ../trunk-jpl/src/modules/BamgMesher/BamgMesher.h	(revision 13651)
+@@ -1,54 +0,0 @@
+-/*
+-	BamgMesher.h
+-*/
+-
+-#ifndef _BAMG_MESHER_H_
+-#define _BAMG_MESHER_H_
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "BamgMesher"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define BAMGMESHIN  prhs[0]
+-#define BAMGGEOMIN  prhs[1]
+-#define BAMGOPTIONS prhs[2]
+-/* serial output macros: */
+-#define BAMGMESHOUT (mxArray**)&plhs[0]
+-#define BAMGGEOMOUT (mxArray**)&plhs[1]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define BAMGMESHIN  PyTuple_GetItem(args,0)
+-#define BAMGGEOMIN  PyTuple_GetItem(args,1)
+-#define BAMGOPTIONS PyTuple_GetItem(args,2)
+-/* serial output macros: */
+-#define BAMGMESHOUT output,0
+-#define BAMGGEOMOUT output,1
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  2
+-#undef NRHS
+-#define NRHS  3
+-
+-#endif  /* _BAMG_MESHER_H_ */
+Index: ../trunk-jpl/src/modules/BamgMesher/BamgMesher.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/BamgMesher/BamgMesher.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/BamgMesher/BamgMesher.cpp	(revision 13651)
+@@ -1,51 +0,0 @@
+-/*\file BamgMesher.c
+- *\brief: mesher that uses the bamg library
+- */
+-#include "./BamgMesher.h"
+-
+-void BamgMesherUsage(void){/*{{{*/
+-	_pprintLine_("");
+-	_pprintLine_("   usage: [bamgmesh,bamggeom]=" << __FUNCT__ << "(bamgmesh,bamggeom,bamgoptions);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(BamgMesher){
+-
+-	/*Intermediary*/
+-	BamgOpts *bamgopts=NULL;
+-	BamgMesh *bamgmesh_in=NULL;
+-	BamgGeom *bamggeom_in=NULL;
+-	BamgMesh *bamgmesh_out=NULL;
+-	BamgGeom *bamggeom_out=NULL;
+-
+-	/*Boot module*/
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CHECKARGUMENTS(NLHS,NRHS,&BamgMesherUsage);
+-
+-	/*Initialize outputs*/
+-	bamggeom_out=new BamgGeom();
+-	bamgmesh_out=new BamgMesh();
+-
+-	/*Fetch inputs: */
+-	FetchData(&bamgopts,BAMGOPTIONS);
+-	FetchData(&bamggeom_in,BAMGGEOMIN);
+-	FetchData(&bamgmesh_in,BAMGMESHIN);
+-
+-	/*Call x layer*/
+-	Bamgx(bamgmesh_out,bamggeom_out,bamgmesh_in,bamggeom_in,bamgopts);
+-
+-	/*Generate output Matlab Structures*/
+-	WriteData(BAMGGEOMOUT,bamggeom_out);
+-	WriteData(BAMGMESHOUT,bamgmesh_out);
+-
+-	/*Free ressources: */
+-	delete bamgopts;
+-	delete bamggeom_in;
+-	delete bamggeom_out;
+-	delete bamgmesh_in;
+-	delete bamgmesh_out;
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/InterpFromGridToMesh/InterpFromGridToMesh.h
+===================================================================
+--- ../trunk-jpl/src/modules/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 13650)
++++ ../trunk-jpl/src/modules/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 13651)
+@@ -1,60 +0,0 @@
+-/*!\file InterpFromGridToMesh.h
+- * \brief: prototype for Data Interpolation mex module.
+- */
+-
+-#ifndef _InterpFromGridToMesh_H
+-#define _InterpFromGridToMesh_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "InterpFromGridToMesh"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define XHANDLE       prhs[0]
+-#define YHANDLE       prhs[1]
+-#define DATAHANDLE    prhs[2]
+-#define XMESHHANDLE   prhs[3]
+-#define YMESHHANDLE   prhs[4]
+-#define DEFAULTHANDLE prhs[5]
+-#define INTERPENUM    prhs[6]
+-/* serial output macros: */
+-#define DATAMESH (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define XHANDLE       PyTuple_GetItem(args,0)
+-#define YHANDLE       PyTuple_GetItem(args,1)
+-#define DATAHANDLE    PyTuple_GetItem(args,2)
+-#define XMESHHANDLE   PyTuple_GetItem(args,3)
+-#define YMESHHANDLE   PyTuple_GetItem(args,4)
+-#define DEFAULTHANDLE PyTuple_GetItem(args,5)
+-#define INTERPENUM    PyTuple_GetItem(args,6)
+-/* serial output macros: */
+-#define DATAMESH output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  6
+-
+-#endif  /* _INTERPFROMGRIDTOMESH_H */
+Index: ../trunk-jpl/src/modules/InterpFromGridToMesh/InterpFromGridToMesh.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/InterpFromGridToMesh/InterpFromGridToMesh.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/InterpFromGridToMesh/InterpFromGridToMesh.cpp	(revision 13651)
+@@ -1,77 +0,0 @@
+-/*!\file InterpFromGridToMesh.c
+- * \brief: data interpolation from a list of (x,y,values) into mesh vertices
+-*/
+-	
+-#include "./InterpFromGridToMesh.h"
+-
+-void InterpFromGridToMeshUsage(void){/*{{{*/
+-	_pprintLine_("INTERPFROMGRIDTOMESH - interpolation from a grid onto a list of points");
+-	_pprintLine_("");
+-	_pprintLine_("   This function is a multi-threaded mex file that interpolates a field");
+-	_pprintLine_("   defined on a grid onto a list of points");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("      data_mesh=InterpFromGridToMesh(x,y,data,x_mesh,y_mesh,default_value);");
+-	_pprintLine_("");
+-	_pprintLine_("      data: matrix holding the data to be interpolated onto the mesh.");
+-	_pprintLine_("      x,y: coordinates of matrix data. (x and y must be in increasing order)");
+-	_pprintLine_("      x_mesh,y_mesh: coordinates of the points onto which we interpolate.");
+-	_pprintLine_("      default_value: default value if no data is found (holes).");
+-	_pprintLine_("      data_mesh: vector of mesh interpolated data.");
+-	_pprintLine_("");
+-	_pprintLine_("   Example:");
+-	_pprintLine_("      load('velocities.mat');");
+-	_pprintLine_("      md.inversion.vx_obs=InterpFromGridToMesh(x_n,y_m,vx,md.mesh.x,md.mesh.y,0);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(InterpFromGridToMesh){
+-
+-	int i,j;
+-
+-	/*input: */
+-	double *x = NULL;
+-	double *y = NULL;
+-	int     x_rows,y_rows;
+-	double *data  = NULL;
+-	int     data_rows,data_cols;
+-	double *x_mesh = NULL;
+-	double *y_mesh = NULL;
+-	int     x_mesh_rows,y_mesh_rows;
+-	double  default_value;
+-	int     interpolationenum;
+-
+-	/* output: */
+-	SeqVec<double>*  data_mesh=NULL;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	if((nlhs!=NLHS) || (nrhs!=6 && nrhs!=7)){
+-		InterpFromGridToMeshUsage();
+-		_error_("usage. See above");
+-	}
+-
+-	/*Input datasets: */
+-	FetchData(&x,&x_rows,NULL,XHANDLE);
+-	FetchData(&y,&y_rows,NULL,YHANDLE);
+-	FetchData(&data,&data_rows,&data_cols,DATAHANDLE);
+-	FetchData(&x_mesh,&x_mesh_rows,NULL,XMESHHANDLE);
+-	FetchData(&y_mesh,&y_mesh_rows,NULL,YMESHHANDLE);
+-	FetchData(&default_value,DEFAULTHANDLE);
+-
+-	/* Run core computations: */
+-	if(nrhs==7){
+-		FetchData(&interpolationenum,INTERPENUM);
+-		InterpFromGridToMeshx(&data_mesh, x, x_rows,  y, y_rows, data, data_rows,data_cols, x_mesh, y_mesh, x_mesh_rows,default_value,interpolationenum);
+-	}
+-	else{
+-		InterpFromGridToMeshx(&data_mesh, x, x_rows,  y, y_rows, data, data_rows,data_cols, x_mesh, y_mesh, x_mesh_rows,default_value);
+-	}
+-
+-	/*Write data: */
+-	WriteData(DATAMESH,data_mesh);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/InterpFromMeshToGrid/InterpFromMeshToGrid.h
+===================================================================
+--- ../trunk-jpl/src/modules/InterpFromMeshToGrid/InterpFromMeshToGrid.h	(revision 13650)
++++ ../trunk-jpl/src/modules/InterpFromMeshToGrid/InterpFromMeshToGrid.h	(revision 13651)
+@@ -1,72 +0,0 @@
+-/*
+-	InterpFromMeshToGrid.h
+-*/
+-
+-#ifndef _INTERPFROMMESHTOGRID_H
+-#define _INTERPFROMMESHTOGRID_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "InterpFromMeshToGrid"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define INDEX        prhs[0]
+-#define X            prhs[1]
+-#define Y            prhs[2]
+-#define MESHDATA     prhs[3]
+-#define XMIN         prhs[4]
+-#define YMAX         prhs[5]
+-#define XPOSTING     prhs[6]
+-#define YPOSTING     prhs[7]
+-#define NLINES       prhs[8]
+-#define NCOLS        prhs[9]
+-#define DEFAULTVALUE prhs[10]
+-/* serial output macros: */
+-#define XM (mxArray**)&plhs[0]
+-#define YM (mxArray**)&plhs[1]
+-#define GRIDDATA (mxArray**)&plhs[2]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define INDEX        PyTuple_GetItem(args,0)
+-#define X            PyTuple_GetItem(args,1)
+-#define Y            PyTuple_GetItem(args,2)
+-#define MESHDATA     PyTuple_GetItem(args,3)
+-#define XMIN         PyTuple_GetItem(args,4)
+-#define YMAX         PyTuple_GetItem(args,5)
+-#define XPOSTING     PyTuple_GetItem(args,6)
+-#define YPOSTING     PyTuple_GetItem(args,7)
+-#define NLINES       PyTuple_GetItem(args,8)
+-#define NCOLS        PyTuple_GetItem(args,9)
+-#define DEFAULTVALUE PyTuple_GetItem(args,10)
+-/* serial output macros: */
+-#define XM output,0
+-#define YM output,1
+-#define GRIDDATA output,2
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  3
+-#undef NRHS
+-#define NRHS  11
+-
+-#endif  /* _INTERPFROMMESHTOGRID_H*/
+Index: ../trunk-jpl/src/modules/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp	(revision 13651)
+@@ -1,77 +0,0 @@
+-/*\file InterpFromMeshToGrid.c
+- *\brief: compute diff between observed and modeled velocity
+- */
+-
+-#include "./InterpFromMeshToGrid.h"
+-
+-void InterpFromMeshToGridUsage(void){/*{{{*/
+-	_pprintLine_("INTERPFROMMESHTOGRID - interpolation of a data defined on a mesh onto a grid");
+-	_pprintLine_("");
+-	_pprintLine_("   This function is a multi-threaded mex file that interpolates a field");
+-	_pprintLine_("   defined on a triangular mesh onto a regular grid");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("      [x_m,y_m,griddata]=InterpFromMeshToGrid(index,x,y,data,xmin,ymax,xposting,yposting,nlines,ncols,default_value)");
+-	_pprintLine_("");
+-	_pprintLine_("      index,x,y: delaunay triangulation defining the mesh.");
+-	_pprintLine_("      meshdata: vertex values of data to be interpolated.");
+-	_pprintLine_("      xmin,ymax,posting,nlines,ncols: parameters that define the grid");
+-	_pprintLine_("      default_value: value of points located out of the mesh.");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(InterpFromMeshToGrid){
+-
+-	/*input datasets: */
+-	double* index=NULL;
+-	int     nel;
+-	double* x=NULL;
+-	int     nods;
+-	double* y=NULL;
+-	double* meshdata=NULL;
+-	int     meshdata_length;
+-	double  xmin;
+-	double  ymax;
+-	double  xposting;
+-	double  yposting;
+-	int     nlines,ncols;
+-	double  default_value;
+-
+-	/* output datasets: */
+-	double* griddata=NULL;
+-	double* x_m=NULL;
+-	double* y_m=NULL;
+-
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&InterpFromMeshToGridUsage);
+-
+-	/*Input datasets: */
+-	FetchData(&index,&nel,NULL,INDEX);
+-	FetchData(&x,&nods,NULL,X);
+-	FetchData(&y,NULL,NULL,Y);
+-	FetchData(&meshdata,&meshdata_length,NULL,MESHDATA);
+-	FetchData(&xmin,XMIN);
+-	FetchData(&ymax,YMAX);
+-	FetchData(&xposting,XPOSTING);
+-	FetchData(&yposting,YPOSTING);
+-	FetchData(&nlines,NLINES);
+-	FetchData(&ncols,NCOLS);
+-	FetchData(&default_value,DEFAULTVALUE);
+-
+-	/*Call core of computation: */
+-	InterpFromMeshToGridx(&x_m,&y_m,&griddata,index,x,y,nods,nel,meshdata,meshdata_length,xmin,ymax,xposting,yposting,nlines,ncols,default_value);
+-
+-	/*Write results: */
+-	WriteData(XM,x_m,ncols);
+-	WriteData(YM,y_m,nlines);
+-	WriteData(GRIDDATA,griddata,nlines,ncols);
+-
+-	/*Free ressources: */
+-	//let matlab do this.
+-	
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/KMLFileRead/KMLFileRead.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/KMLFileRead/KMLFileRead.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/KMLFileRead/KMLFileRead.cpp	(revision 13651)
+@@ -1,127 +0,0 @@
+-/*\file KMLFileRead.c
+- *\brief: KML file reader module.
+- */
+-#include "./KMLFileRead.h"
+-
+-void KMLFileReadUsage(void){/*{{{*/
+-	_pprintLine_("KMLFileRead - KML file reader module:");
+-	_pprintLine_("");
+-	_pprintLine_("   This module reads a KML file.");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("      [ierror]=KMLFileRead(kmlfile,'param name',param,...);");
+-	_pprintLine_("");
+-	_pprintLine_("      kmlfile      file name of kml file to be read (char)");
+-	_pprintLine_("");
+-	_pprintLine_("      echo         echo command (char, optional, 'off'/'on')");
+-	_pprintLine_("      deepecho     deep echo command (char, optional, 'off'/'on')");
+-	_pprintLine_("      write        write command (char, optional, 'off'/'stdout'/kmlfile)");
+-	_pprintLine_("");
+-	_pprintLine_("      ierror       return code (non-zero for error)");
+-	_pprintLine_("");
+-	_pprintLine_("   Examples:");
+-	_pprintLine_("      [ierror]=KMLFileRead('file.kml','deepecho','on');");
+-	_pprintLine_("      [ierror]=KMLFileRead('filin.kml','echo','on','write','filout.kml');");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(KMLFileRead){
+-
+-	int i,j,nnodes=0,verbose=1;
+-	KML_Object* kobj;
+-
+-	/*input: */
+-	char*   name=NULL;
+-	char*   notes=NULL;
+-	const mxArray* notesi;
+-	mwIndex        nindex;
+-	int*    elem=NULL;
+-	int     melem=0,nelem=0;
+-	int*    nodecon=NULL;
+-	int     mncon=0,nncon=0;
+-	double* lat=NULL;
+-	int     mlat=0,nlat=0,llat=0;
+-	double* lng=NULL;
+-	int     mlng=0,nlng=0,llng=0;
+-	int     nparts=0;
+-	int*    part=NULL;
+-	int     mprt=0,nprt=0,lprt=0;
+-	double* data=NULL;
+-	int     mdata=0,ndata=0;
+-	double* cmap=NULL;
+-	int     mcmap=0,ncmap=0;
+-	char*   filnam=NULL;
+-	FILE*   fidi=NULL;
+-	FILE*   fido=NULL;
+-	Options* options=NULL;
+-	char*    echo    =NULL;
+-	char*    deepecho=NULL;
+-	char*    write   =NULL;
+-
+-	/* output: */
+-	int     ierror=0;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	if (nlhs > NLHS) {
+-		KMLFileReadUsage(); _error_("KMLFileRead usage error");
+-	}
+-	if (nrhs < NRHS) {
+-		KMLFileReadUsage(); _error_("KMLFileRead usage error");
+-	}
+-
+-	/*Input datasets: */
+-	FetchData(&filnam,FILENAME);
+-	FetchData(&options,NRHS,nrhs,prhs);
+-	FetchData(&options,NRHS,nrhs,prhs);
+-
+-	options->Get(&echo    ,"echo"    ,(char*)"off");
+-	options->Get(&deepecho,"deepecho",(char*)"off");
+-	options->Get(&write   ,"write"   ,(char*)"off");
+-
+-	/*some checks*/
+-	if (!strlen(filnam)) strcpy(filnam,"stdout");
+-
+-	if (verbose) _printLine_("Opening file \"" << filnam << "\".");
+-	fidi=fopen(filnam,"r");
+-
+-	/* Run core computations: */
+-	if (verbose) _printLine_("Calling core:");
+-	kobj=KMLFileReadx(fidi);
+-
+-	if (verbose) _printLine_("Closing file \"" << filnam << "\".");
+-	fclose(fidi);
+-
+-	if (kobj){
+-		if (!strncmp(echo    ,"on",2) || !strncmp(echo    ,"y",1))
+-			kobj->Echo();
+-		if (!strncmp(deepecho,"on",2) || !strncmp(deepecho,"y",1))
+-			kobj->DeepEcho();
+-		if (strncmp(write,"off",3) && strncmp(write,"no",2)) {
+-			if (!strncmp(write,"on",2) || !strncmp(write,"yes",3) || !strncmp(write,"stdout",6)) {
+-				kobj->Write(stdout,"");
+-			}
+-			else {
+-				if (verbose) _printLine_("Opening file \"" << write << "\".");
+-				fido=fopen(write,"w");
+-				kobj->Write(fido,"");
+-				if (verbose) _printLine_("Closing file \"" << write << "\".");
+-				ierror=fclose(fido);
+-			}
+-		}
+-		delete kobj;
+-	}
+-
+-	/*Write data: */
+-	WriteData(ERRORFLAG,ierror);
+-
+-	/*Clean-up*/
+-	xDelete<char>(write);
+-	xDelete<char>(deepecho);
+-	xDelete<char>(echo);
+-	delete options;
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/KMLFileRead/KMLFileRead.h
+===================================================================
+--- ../trunk-jpl/src/modules/KMLFileRead/KMLFileRead.h	(revision 13650)
++++ ../trunk-jpl/src/modules/KMLFileRead/KMLFileRead.h	(revision 13651)
+@@ -1,48 +0,0 @@
+-/*!\file KMLFileRead.h
+- * \brief: prototype for KML file reader mex module.
+- */
+-
+-#ifndef _KMLFILEREAD_H
+-#define _KMLFILEREAD_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "KMLFileRead"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define FILENAME prhs[0]
+-/* serial output macros: */
+-#define ERRORFLAG (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define FILENAME PyTuple_GetItem(args,0)
+-/* serial output macros: */
+-#define ERRORFLAG output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NRHS
+-#define NRHS  1
+-#undef NLHS
+-#define NLHS  1
+-
+-#endif
+Index: ../trunk-jpl/src/modules/Shp2Kml/Shp2Kml.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/Shp2Kml/Shp2Kml.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/Shp2Kml/Shp2Kml.cpp	(revision 13651)
+@@ -1,99 +0,0 @@
+-/*\file Shp2Kml.c
+- *\brief: shp to kml file conversion mex module.
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-#include "config.h"
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./Shp2Kml.h"
+-
+-void Shp2KmlUsage(void){/*{{{*/
+-	_pprintLine_("Shp2Kml - shp to kml file conversion module:");
+-	_pprintLine_("");
+-	_pprintLine_("   This module converts a file from shp to kml format.");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("      [ret]=Shp2Kml(filshp,filkml,sgn,'param name',param,...);");
+-	_pprintLine_("");
+-	_pprintLine_("      filshp      file name of shp file to be read (char, extension optional)");
+-	_pprintLine_("      filkml      file name of kml file to be written (char)");
+-	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north); -1 (south); or 0 (no translation))");
+-	_pprintLine_("");
+-	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
+-	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
+-	_pprintLine_("");
+-	_pprintLine_("      ret         return code (non-zero for warning)");
+-	_pprintLine_("");
+-	_pprintLine_("   Examples:");
+-	_pprintLine_("      [ret]=Shp2Kml('file.shp','file.kml', 0);");
+-	_pprintLine_("      [ret]=Shp2Kml('file.shp','file.kml', 1,'central_meridian',45,'standard_parallel',70);");
+-	_pprintLine_("      [ret]=Shp2Kml('file.shp','file.kml',-1,'central_meridian', 0,'standard_parallel',71);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(Shp2Kml){
+-
+-	int i,verbose=1;
+-
+-	/*input: */
+-	char    *filshp=NULL,*filkml=NULL;
+-	int     sgn;
+-	Options* options=NULL;
+-	double   cm=0.,sp=0.;
+-
+-	/* output: */
+-	int     iret=0;
+-
+-	#ifndef _HAVE_SHAPELIB_ //only works if shapelib library has been compiled in.
+-	_error_("Shapelib not available! Cannot carry out shp file translation!");
+-	#endif
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	if (nlhs > NLHS) {
+-		Shp2KmlUsage(); _error_("Shp2Kml usage error");
+-	}
+-	if (nrhs < NRHS) {
+-		Shp2KmlUsage(); _error_("Shp2Kml usage error");
+-	}
+-
+-	/*Input datasets: */
+-	FetchData(&filshp,SHP_IN);
+-	FetchData(&filkml,KML_IN);
+-	FetchData(&sgn,SGN_IN);
+-	FetchData(&options,NRHS,nrhs,prhs);
+-
+-	/*  defaults are in Xy2lldef, so don't duplicate them here, and only use user values if both have been specified  */
+-	if (options->GetOption("central_meridian") || options->GetOption("standard_parallel")) {
+-		options->Get(&cm,"central_meridian");
+-		if (verbose) _printLine_("  cm=" << cm);
+-		options->Get(&sp,"standard_parallel");
+-		if (verbose) _printLine_("  sp=" << sp);
+-	}
+-
+-	/*some checks*/
+-	if (sgn < -1 || sgn > +1) _error_("Hemisphere sgn=" << sgn << " must be +1 (north), -1 (south), or 0 (no translation).");
+-	if (fabs(cm)      > 180.) _error_("Central meridian cm=" << cm << " must be between -180 (west) and +180 (east) degrees.");
+-	if (sp < 0. || sp >  90.) _error_("Standard parallel sp=" << sp << " must be between 0 and 90 degrees (in specified hemisphere).");
+-
+-	/* Run core computations: */
+-	if (options->GetOption("central_meridian") && options->GetOption("standard_parallel"))
+-		iret=Shp2Kmlx(filshp,filkml,sgn,cm,sp);
+-	else
+-		iret=Shp2Kmlx(filshp,filkml,sgn);
+-
+-	/*Write data: */
+-	WriteData(RET_OUT,iret);
+-
+-	/*Clean-up*/
+-	delete options;
+-	xDelete<char>(filkml);
+-	xDelete<char>(filshp);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/Shp2Kml/Shp2Kml.h
+===================================================================
+--- ../trunk-jpl/src/modules/Shp2Kml/Shp2Kml.h	(revision 13650)
++++ ../trunk-jpl/src/modules/Shp2Kml/Shp2Kml.h	(revision 13651)
+@@ -1,53 +0,0 @@
+-/*!\file Shp2Kml.h
+- * \brief: prototype for shp to kml file conversion mex module.
+- */
+-
+-#ifndef _SHP2KML_H
+-#define _SHP2KML_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "Shp2Kml"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define SHP_IN  prhs[0]
+-#define KML_IN  prhs[1]
+-#define SGN_IN  prhs[2]
+-/* serial output macros: */
+-#define RET_OUT (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define SHP_IN PyTuple_GetItem(args,0)
+-#define KML_IN PyTuple_GetItem(args,1)
+-#define SGN_IN PyTuple_GetItem(args,2)
+-/* serial output macros: */
+-#define RET_OUT output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NRHS
+-#define NRHS  3
+-#undef NLHS
+-#define NLHS  1
+-
+-#endif
+-
+Index: ../trunk-jpl/src/modules/AverageFilter/AverageFilter.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/AverageFilter/AverageFilter.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/AverageFilter/AverageFilter.cpp	(revision 13651)
+@@ -1,56 +0,0 @@
+-/*!\file:  AverageFilter.cpp
+- * \brief fill holes in matlab velocity array
+-	this matlab module is an adaptation of a routine written by Robber 
+-	Crippen.  The original routine was designed for the SRTM mission at JPL, 
+-	and can be found in the current directory, under the name 
+-	AverageFilterCrippen.  It fills void holes in an image, using an interpolation 
+-	algorithm, and optionnally a smoothing algorithm. 
+-	This matlab module extends the Crippen routine to be used in Matlab, 
+-	using double arrays found in the workspace, and loaded directly into memory.
+-*/
+-
+-#include "./AverageFilter.h"
+-
+-void AverageFilterUsage(void){/*{{{*/
+-	_printLine_("   AverageFilter usage:");
+-	_printLine_("   [image_out]=AverageFilter(image_in,pixels);\n");
+-	_printLine_("   where:");
+-	_printLine_("      image_in in double format");
+-	_printLine_("      pixels: characteristic size of smoothing");
+-	_printLine_("      image_out in double format");
+-	_printLine_("");
+-}/*}}}*/
+-WRAPPER(AverageFilter){
+-
+-	int i,j;
+-
+-	/* required input: */
+-	double* imagein=NULL;
+-	int     imagein_rows,imagein_cols;
+-	int     smooth;
+-
+-
+-	/* output: */
+-	mxArray* pfield=NULL;
+-	double* imageout=NULL;
+-	int     imageout_rows,imageout_cols;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&AverageFilterUsage);
+-
+-	/*Fetch data: */
+-	FetchData(&imagein,&imagein_rows,&imagein_cols,IMAGEIN);
+-	FetchData(&smooth,SMOOTH);
+-	
+-	/*Run core hole filler routine: */
+-	AverageFilterx( &imageout,imagein,imagein_rows,imagein_cols,smooth);
+-
+-	/* output: */
+-	WriteData(IMAGEOUT,imageout,imagein_rows,imagein_cols);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/AverageFilter/AverageFilter.h
+===================================================================
+--- ../trunk-jpl/src/modules/AverageFilter/AverageFilter.h	(revision 13650)
++++ ../trunk-jpl/src/modules/AverageFilter/AverageFilter.h	(revision 13651)
+@@ -1,50 +0,0 @@
+-/*
+-	AverageFilter.h
+-*/
+-
+-#ifndef _AVERAGEFILTER_H
+-#define _AVERAGEFILTER_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "AverageFilter"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define IMAGEIN prhs[0]
+-#define SMOOTH  prhs[1]
+-/* serial output macros: */
+-#define IMAGEOUT (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define IMAGEIN PyTuple_GetItem(args,0)
+-#define SMOOTH  PyTuple_GetItem(args,1)
+-/* serial output macros: */
+-#define IMAGEOUT output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  2
+-
+-#endif  /* _AVERAGEFILTER_H */
+Index: ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 13651)
+@@ -1,53 +0,0 @@
+-/*!\file:  TriMeshProcessRifts.cpp
+- * \brief split a mesh where a rift (or fault) is present
+- */ 
+-
+-#include "./TriMeshProcessRifts.h"
+-
+-void TriMeshProcessRiftsUsage(void){/*{{{*/
+-	_printLine_("");
+-	_printLine_("   usage: [index2,x2,y2,segments2,segmentmarkers2,rifts2]=TriMeshProcessrifts(index1,x1,y1,segments1,segmentmarkers1) ");
+-	_printLine_("      where: (index1,x1,y1,segments1,segmentmarkers1) is an initial triangulation.");
+-	_printLine_("      index2,x2,y2,segments2,segmentmarkers2,rifts2 is the resulting triangulation where rifts have been processed.");
+-}/*}}}*/
+-WRAPPER(TriMeshProcessRifts){
+-
+-	/* returned quantities: */
+-	RiftStruct *riftstruct = NULL;
+-
+-	/* input: */
+-	int     nel,nods;
+-	double *index          = NULL;
+-	double *x              = NULL;
+-	double *y              = NULL;
+-	double *segments       = NULL;
+-	double *segmentmarkers = NULL;
+-	int     num_seg;
+-
+-	/*Boot module*/
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CHECKARGUMENTS(NLHS,NRHS,&TriMeshProcessRiftsUsage);
+-
+-	/*Fetch data */
+-	FetchData(&index,&nel,NULL,INDEXIN);
+-	FetchData(&x,&nods,XIN);
+-	FetchData(&y,NULL,YIN);
+-	FetchData(&segments,&num_seg,NULL,SEGMENTSIN);
+-	FetchData(&segmentmarkers,NULL,SEGMENTMARKERSIN);
+-
+-	/*call x layer*/
+-	TriMeshProcessRiftsx(&index,&nel,&x,&y,&nods,&segments,&segmentmarkers,&num_seg,&riftstruct);
+-
+-	/*Output : */
+-	WriteData(INDEXOUT,index,nel,3);
+-	WriteData(XOUT,x,nods,1);
+-	WriteData(YOUT,y,nods,1);
+-	WriteData(SEGMENTSOUT,segments,num_seg,3);
+-	WriteData(SEGMENTMARKERSOUT,segmentmarkers,num_seg,1);
+-	WriteData(RIFTSTRUCT,riftstruct);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h
+===================================================================
+--- ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 13650)
++++ ../trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 13651)
+@@ -1,66 +0,0 @@
+-/*
+- * TriMeshProcessRifts.h
+- */ 
+-
+-#ifndef _TRIMESH_PROCESSRIFTS_H_
+-#define _TRIMESH_PROCESSRIFTS_H_
+-
+-#ifdef HAVE_CONFIG_H
+-#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "TriMeshProcessRifts"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define INDEXIN          prhs[0]
+-#define XIN              prhs[1]
+-#define YIN              prhs[2]
+-#define SEGMENTSIN       prhs[3]
+-#define SEGMENTMARKERSIN prhs[4]
+-/* serial output macros: */
+-#define INDEXOUT          (mxArray**)&plhs[0]
+-#define XOUT              (mxArray**)&plhs[1]
+-#define YOUT              (mxArray**)&plhs[2]
+-#define SEGMENTSOUT       (mxArray**)&plhs[3]
+-#define SEGMENTMARKERSOUT (mxArray**)&plhs[4]
+-#define RIFTSTRUCT        (mxArray**)&plhs[5]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define INDEXIN          PyTuple_GetItem(args,0)
+-#define XIN              PyTuple_GetItem(args,1)
+-#define YIN              PyTuple_GetItem(args,2)
+-#define SEGMENTSIN       PyTuple_GetItem(args,3)
+-#define SEGMENTMARKERSIN PyTuple_GetItem(args,4)
+-/* serial output macros: */
+-#define INDEXOUT          output,0
+-#define XOUT              output,1
+-#define YOUT              output,2
+-#define SEGMENTSOUT       output,3
+-#define SEGMENTMARKERSOUT output,4
+-#define RIFTSTRUCT        output,5
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  6
+-#undef NRHS
+-#define NRHS  5
+-
+-#endif
+Index: ../trunk-jpl/src/modules/Exp2Kml/Exp2Kml.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/Exp2Kml/Exp2Kml.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/Exp2Kml/Exp2Kml.cpp	(revision 13651)
+@@ -1,96 +0,0 @@
+-/*\file Exp2Kml.c
+- *\brief: exp to kml file conversion mex module.
+- */
+-#include "./Exp2Kml.h"
+-
+-void Exp2KmlUsage(void){/*{{{*/
+-	_pprintLine_("Exp2Kml - exp to kml file conversion module:");
+-	_pprintLine_("");
+-	_pprintLine_("   This module converts a file from exp to kml format.");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("      [ret]=Exp2Kml(filexp,filkml,sgn,'param name',param,...);");
+-	_pprintLine_("");
+-	_pprintLine_("      filexp      file name of exp file to be read (char)");
+-	_pprintLine_("      filkml      file name of kml file to be written (char)");
+-	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))");
+-	_pprintLine_("");
+-	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
+-	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
+-	_pprintLine_("      holes       flag for treatment of multiple profiles (char, optional, 'yes' for holes))");
+-	_pprintLine_("");
+-	_pprintLine_("      ret         return code (non-zero for warning)");
+-	_pprintLine_("");
+-	_pprintLine_("   Examples:");
+-	_pprintLine_("      [ret]=Exp2Kml('file.exp','file.kml', 1);");
+-	_pprintLine_("      [ret]=Exp2Kml('file.exp','file.kml', 1,'central_meridian',45,'standard_parallel',70,'holes','yes');");
+-	_pprintLine_("      [ret]=Exp2Kml('file.exp','file.kml',-1,'central_meridian', 0,'standard_parallel',71,'holes','yes');");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(Exp2Kml){
+-
+-	int i,verbose=1;
+-
+-	/*input: */
+-	char    *filexp=NULL,*filkml=NULL;
+-	int     sgn;
+-
+-	Options* options=NULL;
+-	char     *choles=NULL;
+-	bool     holes=false;
+-	double   cm=0.,sp=0.;
+-
+-	/* output: */
+-	int     iret=0;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	if (nlhs > NLHS) {
+-		Exp2KmlUsage(); _error_("Exp2Kml usage error");
+-	}
+-	if (nrhs < NRHS) {
+-		Exp2KmlUsage(); _error_("Exp2Kml usage error");
+-	}
+-
+-	/*Input datasets: */
+-	FetchData(&filexp,EXP_IN);
+-	FetchData(&filkml,KML_IN);
+-	FetchData(&sgn,SGN_IN);
+-	FetchData(&options,NRHS,nrhs,prhs);
+-
+-	options->Get(&choles,"holes",(char*)"no");
+-	if (!strncmp(choles,"y",1) || !strncmp(choles,"on",2)) holes=true;
+-
+-	/*  defaults are in Xy2lldef, so don't duplicate them here, and only use user values if both have been specified  */
+-	if (options->GetOption("central_meridian") || options->GetOption("standard_parallel")) {
+-		options->Get(&cm,"central_meridian");
+-		if (verbose) _printLine_("  cm=" << cm);
+-		options->Get(&sp,"standard_parallel");
+-		if (verbose) _printLine_("  sp=" << sp);
+-	}
+-
+-	/*some checks*/
+-	if (sgn !=+1 && sgn !=-1) _error_("Hemisphere sgn=" << sgn << " must be +1 (north) or -1 (south).");
+-	if (fabs(cm)      > 180.) _error_("Central meridian cm=" << cm << " must be between -180 (west) and +180 (east) degrees.");
+-	if (sp < 0. || sp >  90.) _error_("Standard parallel sp=" << sp << " must be between 0 and 90 degrees (in specified hemisphere).");
+-
+-	/* Run core computations: */
+-	if (options->GetOption("central_meridian") && options->GetOption("standard_parallel"))
+-		iret=Exp2Kmlx(filexp,filkml,sgn,cm,sp,holes);
+-	else
+-		iret=Exp2Kmlx(filexp,filkml,sgn,holes);
+-
+-	/*Write data: */
+-	WriteData(RET_OUT,iret);
+-
+-	/*Clean-up*/
+-	xDelete<char>(choles);
+-	xDelete<char>(filkml);
+-	xDelete<char>(filexp);
+-	delete options;
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/Exp2Kml/Exp2Kml.h
+===================================================================
+--- ../trunk-jpl/src/modules/Exp2Kml/Exp2Kml.h	(revision 13650)
++++ ../trunk-jpl/src/modules/Exp2Kml/Exp2Kml.h	(revision 13651)
+@@ -1,53 +0,0 @@
+-/*!\file Exp2Kml.h
+- * \brief: prototype for exp to kml file conversion mex module.
+- */
+-
+-#ifndef _EXP2KML_H
+-#define _EXP2KML_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "Exp2Kml"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define EXP_IN prhs[0]
+-#define KML_IN prhs[1]
+-#define SGN_IN prhs[2]
+-/* serial output macros: */
+-#define RET_OUT    (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define EXP_IN PyTuple_GetItem(args,0)
+-#define KML_IN PyTuple_GetItem(args,1)
+-#define SGN_IN PyTuple_GetItem(args,2)
+-/* serial output macros: */
+-#define RET_OUT    output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NRHS
+-#define NRHS  3
+-#undef NLHS
+-#define NLHS  1
+-
+-#endif
+-
+Index: ../trunk-jpl/src/modules/Kml2Exp/Kml2Exp.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/Kml2Exp/Kml2Exp.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/Kml2Exp/Kml2Exp.cpp	(revision 13651)
+@@ -1,88 +0,0 @@
+-/*\file Kml2Exp.c
+- *\brief: kml to exp file conversion mex module.
+- */
+-#include "./Kml2Exp.h"
+-
+-void Kml2ExpUsage(void){/*{{{*/
+-	_pprintLine_("Kml2Exp - kml to exp file conversion module:");
+-	_pprintLine_("");
+-	_pprintLine_("   This module converts a file from kml to exp format.");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("      [ret]=Kml2Exp(filexp,filkml,sgn,'param name',param,...);");
+-	_pprintLine_("");
+-	_pprintLine_("      filkml      file name of kml file to be read (char)");
+-	_pprintLine_("      filexp      file name of exp file to be written (char)");
+-	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))");
+-	_pprintLine_("");
+-	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
+-	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
+-	_pprintLine_("");
+-	_pprintLine_("      ret         return code (non-zero for warning)");
+-	_pprintLine_("");
+-	_pprintLine_("   Examples:");
+-	_pprintLine_("      [ret]=Kml2Exp('file.kml','file.exp', 1);");
+-	_pprintLine_("      [ret]=Kml2Exp('file.kml','file.exp', 1,'central_meridian',45,'standard_parallel',70);");
+-	_pprintLine_("      [ret]=Kml2Exp('file.kml','file.exp',-1,'central_meridian', 0,'standard_parallel',71);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(Kml2Exp){
+-
+-	int i,verbose=1;
+-
+-	/*input: */
+-	char    *filkml=NULL,*filexp=NULL;
+-	int     sgn;
+-	Options* options=NULL;
+-	double   cm=0.,sp=0.;
+-
+-	/* output: */
+-	int     iret=0;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	if (nlhs > NLHS) {
+-		Kml2ExpUsage(); _error_("Kml2Exp usage error");
+-	}
+-	if (nrhs < NRHS) {
+-		Kml2ExpUsage(); _error_("Kml2Exp usage error");
+-	}
+-
+-	/*Input datasets: */
+-	FetchData(&filkml,KML_IN);
+-	FetchData(&filexp,EXP_IN);
+-	FetchData(&sgn,SGN_IN);
+-	FetchData(&options,NRHS,nrhs,prhs);
+-
+-	/*  defaults are in Ll2xydef, so don't duplicate them here, and only use user values if both have been specified  */
+-	if (options->GetOption("central_meridian") || options->GetOption("standard_parallel")) {
+-		options->Get(&cm,"central_meridian");
+-		if (verbose) _printLine_("  cm=" << cm);
+-		options->Get(&sp,"standard_parallel");
+-		if (verbose) _printLine_("  sp=" << sp);
+-	}
+-
+-	/*some checks*/
+-	if (sgn !=+1 && sgn!= -1) _error_("Hemisphere sgn=" << sgn << " must be +1 (north) or -1 (south).");
+-	if (fabs(cm)      > 180.) _error_("Central meridian cm=" << cm << " must be between -180 (west) and +180 (east) degrees.");
+-	if (sp < 0. || sp >  90.) _error_("Standard parallel sp=" << sp << " must be between 0 and 90 degrees (in specified hemisphere).");
+-
+-	/* Run core computations: */
+-	if (options->GetOption("central_meridian") && options->GetOption("standard_parallel"))
+-		iret=Kml2Expx(filkml,filexp,sgn,cm,sp);
+-	else
+-		iret=Kml2Expx(filkml,filexp,sgn);
+-
+-	/*Write data: */
+-	WriteData(RET_OUT,iret);
+-
+-	/*Clean-up*/
+-	xDelete<char>(filexp);
+-	xDelete<char>(filkml);
+-	delete options;
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/Kml2Exp/Kml2Exp.h
+===================================================================
+--- ../trunk-jpl/src/modules/Kml2Exp/Kml2Exp.h	(revision 13650)
++++ ../trunk-jpl/src/modules/Kml2Exp/Kml2Exp.h	(revision 13651)
+@@ -1,52 +0,0 @@
+-/*!\file Kml2Exp.h
+- * \brief: prototype for kml to exp file conversion mex module.
+- */
+-
+-#ifndef _KML2EXP_H
+-#define _KML2EXP_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "Kml2Exp"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define KML_IN prhs[0]
+-#define EXP_IN prhs[1]
+-#define SGN_IN prhs[2]
+-/* serial output macros: */
+-#define RET_OUT    (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define KML_IN PyTuple_GetItem(args,0)
+-#define EXP_IN PyTuple_GetItem(args,1)
+-#define SGN_IN PyTuple_GetItem(args,2)
+-/* serial output macros: */
+-#define RET_OUT    output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NRHS
+-#define NRHS  3
+-#undef NLHS
+-#define NLHS  1
+-
+-#endif
+Index: ../trunk-jpl/src/modules/PointCloudFindNeighbors/PointCloudFindNeighbors.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/PointCloudFindNeighbors/PointCloudFindNeighbors.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/PointCloudFindNeighbors/PointCloudFindNeighbors.cpp	(revision 13651)
+@@ -1,51 +0,0 @@
+-/*! \file  PointCloudFindNeighbors
+-    \brief: flag points that are too near one another, within an array of point coordinates
+-*/
+-	
+-#include "./PointCloudFindNeighbors.h"
+-
+-void PointCloudFindNeighborsUsage(void){/*{{{*/
+-	_printLine_("   usage:");
+-	_printLine_("   [flags]=PointCloudFindNeighbors(x,y,mindistance,multithread);\n");
+-	_printLine_("   where:");
+-	_printLine_("      x,y: list of points.");
+-	_printLine_("      mindistance: minimum distance that should exist between points in the cloud.");
+-	_printLine_("      multithread: run multithreaded or not. with multithreads, flags can get 1 and 2 values in duplicates.");
+-	_printLine_("      flags: array of flags (flag==1 means point is within mindistance of another point)");
+-	_printLine_("");
+-}/*}}}*/
+-WRAPPER(PointCloudFindNeighbors){
+-
+-	int i,j;
+-
+-	/* required input: */
+-	double *x = NULL;
+-	double *y = NULL;
+-	int     nods;
+-	double  mindistance;
+-	double  multithread;
+-
+-	/* output: */
+-	SeqVec<double> *flags = NULL;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&PointCloudFindNeighborsUsage);
+-
+-	/*Fetch inputs: */
+-	FetchData(&x,&nods,NULL,XHANDLE);  
+-	FetchData(&y,NULL,NULL,YHANDLE);
+-	FetchData(&mindistance,MINDISTANCE);
+-	FetchData(&multithread,MULTITHREAD);
+-
+-	/*Run core routine: */
+-	PointCloudFindNeighborsx(&flags,x,y,nods,mindistance,multithread);
+-
+-	/* output: */
+-	WriteData(FLAGS,flags);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/PointCloudFindNeighbors/PointCloudFindNeighbors.h
+===================================================================
+--- ../trunk-jpl/src/modules/PointCloudFindNeighbors/PointCloudFindNeighbors.h	(revision 13650)
++++ ../trunk-jpl/src/modules/PointCloudFindNeighbors/PointCloudFindNeighbors.h	(revision 13651)
+@@ -1,54 +0,0 @@
+-/*
+-	PointCloudFindNeighbors.h
+-*/
+-
+-#ifndef _POINTCLOUDFINDNEIGHBORS_H
+-#define _POINTCLOUDFINDNEIGHBORS_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__
+-#define __FUNCT__ "PointCloudFindNeighbors"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* input macros: */
+-#define XHANDLE     prhs[0]
+-#define YHANDLE     prhs[1]
+-#define MINDISTANCE prhs[2]
+-#define MULTITHREAD prhs[3]
+-/* serial output macros: */
+-#define FLAGS (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* input macros: */
+-#define XHANDLE     PyTuple_GetItem(args,0)
+-#define YHANDLE     PyTuple_GetItem(args,1)
+-#define MINDISTANCE PyTuple_GetItem(args,2)
+-#define MULTITHREAD PyTuple_GetItem(args,3)
+-/* serial output macros: */
+-#define FLAGS output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS 1
+-#undef NRHS
+-#define NRHS 4
+-
+-#endif  /* _POINTCLOUDFINDNEIGHBORS_H */
+Index: ../trunk-jpl/src/modules/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.cpp	(revision 13651)
+@@ -1,46 +0,0 @@
+-/*\file PropagateFlagsFromConnectivity.c
+- *\brief: propagate flags onto mesh, element by element, using connectivity.
+- */
+-
+-#include "./PropagateFlagsFromConnectivity.h"
+-
+-void PropagateFlagsFromConnectivityUsage(void) {/*{{{*/
+-	_printLine_("");
+-	_printLine_("   usage: [pool] = " << __FUNCT__ << "(connectivity,pool,index,flags);");;
+-	_printLine_("");
+-}/*}}}*/
+-WRAPPER(PropagateFlagsFromConnectivity){
+-
+-	/*input/output datasets: */
+-	double* connectivity=NULL;
+-	int     nel;
+-	double* pool=NULL;
+-	double* flags=NULL;
+-	int     index;
+-	int     dummy;
+-	
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&PropagateFlagsFromConnectivityUsage);
+-        
+-	/*Input datasets: */
+-	FetchData(&connectivity,&nel,&dummy,CONNECTIVITY);
+-	FetchData(&pool,&dummy,POOL);
+-	FetchData(&index,INDEX);
+-	FetchData(&flags,&dummy,FLAGS);
+-
+-	/*!Generate internal degree of freedom numbers: */
+-	PropagateFlagsFromConnectivityx(pool,connectivity,index,flags);
+-
+-	/*write output datasets: */
+-	WriteData(POOLOUT,pool,nel);
+-
+-	/*Free ressources: */
+-	xDelete<double>(connectivity);
+-	xDelete<double>(flags);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h
+===================================================================
+--- ../trunk-jpl/src/modules/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h	(revision 13650)
++++ ../trunk-jpl/src/modules/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h	(revision 13651)
+@@ -1,54 +0,0 @@
+-/*
+-	PropagateFlagsFromConnectivity.h
+-*/
+-
+-#ifndef _PROPAGATEFLAGSFROMCONNECTIVITY_H
+-#define _PROPAGATEFLAGSFROMCONNECTIVITY_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "PropagateFlagsFromConnectivity"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define CONNECTIVITY prhs[0]
+-#define POOL         prhs[1]
+-#define INDEX        prhs[2]
+-#define FLAGS        prhs[3]
+-/* serial output macros: */
+-#define POOLOUT (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define CONNECTIVITY PyTuple_GetItem(args,0)
+-#define POOL         PyTuple_GetItem(args,1)
+-#define INDEX        PyTuple_GetItem(args,2)
+-#define FLAGS        PyTuple_GetItem(args,3)
+-/* serial output macros: */
+-#define POOLOUT output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  4
+-
+-#endif  /* _PROPAGATEFLAGSFROMCONNECTIVITY_H */
+Index: ../trunk-jpl/src/modules/InternalFront/InternalFront.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/InternalFront/InternalFront.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/InternalFront/InternalFront.cpp	(revision 13651)
+@@ -1,98 +0,0 @@
+-/*\file InternalFront.c
+- *\brief: build pressureload
+- */
+-
+-#include "./InternalFront.h"
+-
+-void InternalFrontUsage(void) {/*{{{*/
+-	_pprintLine_("");
+-	_pprintLine_("   usage: icefront = " << __FUNCT__ << "(md);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(InternalFront){
+-
+-	bool*   elementonwater=NULL;
+-	int*    elements=NULL;
+-	int*    connectivity=NULL;
+-	int*    elementconnectivity=NULL;
+-	int*    front=NULL;
+-	double* front2=NULL;
+-	bool    found;
+-	int     numberofelements,numberofsegments;
+-	int     N,M;
+-	int     i,j,ii,jj,id;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&InternalFrontUsage);
+-
+-	/*Fetch required fields*/
+-	FetchData(&numberofelements,mxGetAssignedField(MODEL,0,"numberofelements"));
+-	if(numberofelements<=0) _error_("No elements found in the model");
+-	FetchData(&elements,&M,&N,mxGetAssignedField(MODEL,0,"elements"));
+-	if(M!=numberofelements || N!=3) _error_("Field 'elements' should be of size [md.numberofelements 3]");
+-	FetchData(&elementonwater,&M,&N,mxGetAssignedField(MODEL,0,"elementonwater"));
+-	if(M!=numberofelements || N!=1) _error_("Field 'elementonwater' should be of size [md.numberofelements 1]");
+-	FetchData(&elementconnectivity,&M,&N,mxGetAssignedField(MODEL,0,"elementconnectivity"));
+-	if(M!=numberofelements || N!=3) _error_("Field 'elementconnectivity' should be of size [md.numberofelements 3]");
+-
+-	/*Allocate and initialize all variables*/
+-	numberofsegments=0;
+-	front=xNew<int>(3*numberofelements*4);
+-
+-	/*Loop over all elements on water*/
+-	for(i=0;i<numberofelements;i++){
+-
+-		/*Skip if on water*/
+-		if(!elementonwater[i]) continue;
+-
+-		/*Loop over all three adjacent elements*/
+-		for(j=0;j<3;j++){
+-
+-			/*Skip if adjacent element does not exist or is on water*/
+-			id=elementconnectivity[i*3+j];
+-			if(id==0) continue;
+-			if(elementonwater[id-1]) continue;
+-
+-			/*We have an ice front to add here, let's go!*/
+-			for(ii=0;ii<3;ii++){
+-
+-				found=false;
+-				for(jj=0;jj<3;jj++){
+-					if(elements[(id-1)*3+ii]==elements[i*3+jj]){
+-						found=true;
+-						break;
+-					}
+-				}
+-
+-				/*OK, we just found the node of id, which is not in i. We have the segment*/
+-				if(!found){
+-					front[numberofsegments*4+0]=elements[(id-1)*3+(ii+1)%3];
+-					front[numberofsegments*4+1]=elements[(id-1)*3+(ii+2)%3];
+-					front[numberofsegments*4+2]=id;
+-					front[numberofsegments*4+3]=IceEnum;
+-					numberofsegments+=1;
+-					break;
+-				}
+-			}
+-
+-			/*In debugging mode, check that the segment has been found*/
+-			_assert_(!found);
+-		}
+-	}
+-
+-	/*Now that we know how many segments there is we can allocate the final matrix*/
+-	if(numberofsegments){
+-		front2=xNew<double>(4*numberofsegments);
+-		for(i=0;i<4*numberofsegments;i++) front2[i]=(double)front[i];
+-	}
+-	xDelete<int>(front);
+-
+-	/*write output datasets: */
+-	WriteData(FRONT,front2,numberofsegments,4);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/InternalFront/InternalFront.h
+===================================================================
+--- ../trunk-jpl/src/modules/InternalFront/InternalFront.h	(revision 13650)
++++ ../trunk-jpl/src/modules/InternalFront/InternalFront.h	(revision 13651)
+@@ -1,47 +0,0 @@
+-/*
+-	InternalFront.h
+-*/
+-
+-#ifndef _INTERNALFRONT_H
+-#define _INTERNALFRONT_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-#include "../../c/io/io.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "InternalFront"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define MODEL prhs[0]
+-/* serial output macros: */
+-#define FRONT (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define MODEL PyTuple_GetItem(args,0)
+-/* serial output macros: */
+-#define FRONT output,0]
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  1
+-
+-#endif
+Index: ../trunk-jpl/src/modules/TriaSearch/TriaSearch.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/TriaSearch/TriaSearch.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/TriaSearch/TriaSearch.cpp	(revision 13651)
+@@ -1,60 +0,0 @@
+-/*\file TriaSearch.c
+- *\brief: TriaSearch module. See TriaSearchx for more details.
+- */
+-#include "./TriaSearch.h"
+-
+-void TriaSearchUsage(void){/*{{{*/
+-	_pprintLine_("TriaSearch- find triangle holding a point (x0,y0) in a mesh");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("         tria=TriaSearch(index,x,y,x0,y0);");
+-	_pprintLine_("      index,x,y: mesh triangulatrion");
+-	_pprintLine_("      x0,y0: coordinates of the point for which we are trying to find a triangle");
+-	_pprintLine_("      x0,y0 can be an array of points");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(TriaSearch){
+-
+-	int i;
+-
+-	/*input: */
+-	int*    index=NULL;
+-	int     nel;
+-	int     dummy;
+-
+-	double* x=NULL;
+-	double* y=NULL;
+-	int     nods;
+-
+-	double* x0=NULL;
+-	double* y0=NULL;
+-	int     numberofnodes;
+-
+-	/* output: */
+-	double*  tria=NULL;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&TriaSearchUsage);
+-
+-	/*Input datasets: */
+-	FetchData(&index,&nel,&dummy,INDEXHANDLE);
+-	FetchData(&x,&nods,XHANDLE);
+-	FetchData(&y,&nods,YHANDLE);
+-	FetchData(&x0,&numberofnodes,X0HANDLE);
+-	FetchData(&y0,&numberofnodes,Y0HANDLE);
+-
+-	/* Run core computations: */
+-	TriaSearchx(&tria,index,nel,x,y,nods,x0,y0,numberofnodes);
+-
+-	/* c to matlab: */
+-	for(i=0;i<numberofnodes;i++)tria[i]++;
+-
+-	/*Write data: */
+-	WriteData(TRIA,tria,numberofnodes);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/TriaSearch/TriaSearch.h
+===================================================================
+--- ../trunk-jpl/src/modules/TriaSearch/TriaSearch.h	(revision 13650)
++++ ../trunk-jpl/src/modules/TriaSearch/TriaSearch.h	(revision 13651)
+@@ -1,57 +0,0 @@
+-/*!\file TriaSearch.h
+- */
+-
+-#ifndef _TRIASEARCH_H
+-#define _TRIASEARCH_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "TriaSearch"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define INDEXHANDLE prhs[0]
+-#define XHANDLE     prhs[1]
+-#define YHANDLE     prhs[2]
+-#define X0HANDLE    prhs[3]
+-#define Y0HANDLE    prhs[4]
+-
+-/* serial output macros: */
+-#define TRIA (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define INDEXHANDLE PyTuple _GetItem(args,0)
+-#define XHANDLE     PyTuple _GetItem(args,1)
+-#define YHANDLE     PyTuple _GetItem(args,2)
+-#define X0HANDLE    PyTuple _GetItem(args,3)
+-#define Y0HANDLE    PyTuple _GetItem(args,4)
+-
+-/* serial output macros: */
+-#define TRIA output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  5
+-
+-#endif
+Index: ../trunk-jpl/src/modules/MeshPartition/MeshPartition.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/MeshPartition/MeshPartition.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/MeshPartition/MeshPartition.cpp	(revision 13651)
+@@ -1,84 +0,0 @@
+-/*!\file:  MeshPartition.cpp
+- * \brief: partition mesh according to number of areas, using Metis library.
+-*/
+-	
+-#include "./MeshPartition.h"
+-
+-void MeshPartitionUsage(void){/*{{{*/
+-	_printLine_("   usage:");
+-	_printString_("   [element_partitioning,node_partitioning]=MeshPartition(md.mesh,numpartitions)");
+-	_printLine_("   where:");
+-	_printLine_("      element_partitioning is a vector of partitioning area numbers, for every element.");
+-	_printLine_("      node_partitioning is a vector of partitioning area numbers, for every node.");
+-	_printLine_("");
+-}/*}}}*/
+-WRAPPER(MeshPartition){
+-
+-	/*Indexing: */
+-	int i,j;
+-
+-	/* required input: */
+-	int     dim;
+-	int     numberofelements;
+-	int     numberofvertices;
+-	double *elements         = NULL;
+-	int     elements_width;
+-
+-	int numberofelements2d;
+-	int numberofvertices2d;
+-	double* elements2d=NULL;
+-
+-	int numberoflayers;
+-	int numareas=1;
+-
+-	/* output: */
+-	int    *int_element_partitioning = NULL;
+-	int    *int_node_partitioning    = NULL;
+-	double *element_partitioning     = NULL;
+-	double *node_partitioning        = NULL;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&MeshPartitionUsage);
+-
+-	/*Fetch data: */
+-	FetchData(&dim,mxGetAssignedField(MODEL,0,"dimension"));
+-	FetchData(&numberofelements,mxGetAssignedField(MODEL,0,"numberofelements"));
+-	FetchData(&numberofvertices,mxGetAssignedField(MODEL,0,"numberofvertices"));
+-	FetchData(&elements,NULL,&elements_width,mxGetAssignedField(MODEL,0,"elements"));
+-
+-	if (dim==3){
+-		FetchData(&numberofelements2d,mxGetAssignedField(MODEL,0,"numberofelements2d"));
+-		FetchData(&numberofvertices2d,mxGetAssignedField(MODEL,0,"numberofvertices2d"));
+-		FetchData(&elements2d,NULL,NULL,mxGetAssignedField(MODEL,0,"elements2d"));
+-	}
+-	FetchData(&numberoflayers,mxGetAssignedField(MODEL,0,"numberoflayers"));
+-	FetchData(&numareas,NUMAREAS);
+-
+-	/*Run partitioning algorithm based on a "clever" use of the Metis partitioner: */
+-	MeshPartitionx(&int_element_partitioning,&int_node_partitioning,numberofelements,numberofvertices,elements,
+-		numberofelements2d,numberofvertices2d,elements2d,numberoflayers,elements_width,dim,numareas);
+-
+-	/*Post process node_partitioning and element_partitioning to be in double format. Metis needed them in int* format: */
+-	element_partitioning=xNew<double>(numberofelements);
+-	for (i=0;i<numberofelements;i++){
+-		element_partitioning[i]=(double)int_element_partitioning[i]+1; //Metis indexing from 0, matlab from 1.
+-	}
+-	
+-	node_partitioning=xNew<double>(numberofvertices);
+-	for (i=0;i<numberofvertices;i++){
+-		node_partitioning[i]=(double)int_node_partitioning[i]+1; //Metis indexing from 0, matlab from 1.
+-	}
+-
+-	/*Write data:*/
+-	WriteData(ELEMENTPARTITIONING,element_partitioning,numberofelements);
+-	WriteData(NODEPARTITIONING,node_partitioning,numberofvertices);
+-	
+-	/*Free ressources:*/
+-	//don't! let matlab do it.
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/MeshPartition/MeshPartition.h
+===================================================================
+--- ../trunk-jpl/src/modules/MeshPartition/MeshPartition.h	(revision 13650)
++++ ../trunk-jpl/src/modules/MeshPartition/MeshPartition.h	(revision 13651)
+@@ -1,54 +0,0 @@
+-/*
+-	MeshPartition.h
+-*/
+-
+-#ifndef _MESHPARTITION_H
+-#define _MESHPARTITION_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "MeshPartition"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define MODEL    prhs[0]
+-#define NUMAREAS prhs[1]
+-/* serial output macros: */
+-#define ELEMENTPARTITIONING (mxArray**)&plhs[0]
+-#define NODEPARTITIONING (mxArray**)&plhs[1]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define MODEL    PyTuple_GetItem(args,0)
+-#define NUMAREAS PyTuple_GetItem(args,1)
+-/* serial output macros: */
+-#define ELEMENTPARTITIONING output,0
+-#define NODEPARTITIONING output,1
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  2
+-#undef NRHS
+-#define NRHS  2
+-
+-
+-#endif  /* _MESHPARTITION_H */
+-
+Index: ../trunk-jpl/src/modules/InterpFromMesh2d/InterpFromMesh2d.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/InterpFromMesh2d/InterpFromMesh2d.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/InterpFromMesh2d/InterpFromMesh2d.cpp	(revision 13651)
+@@ -1,151 +0,0 @@
+-/*!\file InterpFromMesh2d.c
+- * \brief: data interpolation from a list of (x,y,values) into mesh vertices
+-*/
+-	
+-#include "./InterpFromMesh2d.h"
+-
+-void InterpFromMesh2dUsage(void){/*{{{*/
+-	_pprintLine_("   usage:");
+-	_pprintLine_("         data_prime=InterpFromMesh2d(index,x,y,data,x_prime,y_prime);\n");
+-	_pprintLine_("      or data_prime=InterpFromMesh2d(index,x,y,data,x_prime,y_prime,default_value);\n");
+-	_pprintLine_("      or data_prime=InterpFromMesh2d(index,x,y,data,x_prime,y_prime,default_value,contourname);\n");
+-	_pprintLine_("   where:");
+-	_pprintLine_("      x,y: coordinates of the nodes where data is defined");
+-	_pprintLine_("      index: index of the mesh where data is defined");
+-	_pprintLine_("      data - vector holding the data to be interpolated onto the points.");
+-	_pprintLine_("      x_prime,y_prime: coordinates of the mesh vertices onto which we interpolate.");
+-	_pprintLine_("      default_value: a scalar or vector of size length(x_prime).");
+-	_pprintLine_("      contourname: linear interpolation will happen on all x_interp,y_interp inside the contour, default value will be adopted on the rest of the mesh.");
+-	_pprintLine_("      data_prime:  vector of prime interpolated data.");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(InterpFromMesh2d){
+-
+-	/*input: */
+-	double* index_data=NULL;
+-	int     index_data_rows;
+-	int     dummy;
+-
+-	double* x_data=NULL;
+-	int     x_data_rows;
+-	
+-	double* y_data=NULL;
+-	int     y_data_rows;
+-
+-	double* data=NULL; 
+-	int     data_rows;
+-	int     data_cols;
+-
+-	double* x_prime=NULL;
+-	double* y_prime=NULL;
+-	
+-	int     x_prime_rows;
+-	int     y_prime_rows;
+-
+-
+-	double* default_values=NULL;
+-	int     num_default_values=0;
+-
+-	/*contours*/
+-	int i;
+-	mxArray *matlabstructure = NULL;
+-	Contour<double> **contours=NULL;
+-	int numcontours;
+-	Contour<double> *contouri=NULL;
+-
+-	/*Intermediary*/
+-	int nods_data;
+-	int nels_data;
+-	int nods_prime;
+-
+-	/* output: */
+-	SeqVec<double> *data_prime = NULL;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	if(nlhs!=NLHS){
+-		InterpFromMesh2dUsage();
+-		_error_("InterpFromMeshToMesh2dUsage usage error");
+-	}
+-	if((nrhs!=6) && (nrhs!=7) && (nrhs!=8)){
+-		InterpFromMesh2dUsage();
+-		_error_("InterpFromMeshToMesh2dUsage usage error");
+-	}
+-
+-	/*Input datasets: */
+-	FetchData(&index_data,&index_data_rows,&dummy,INDEXHANDLE);
+-	FetchData(&x_data,&x_data_rows,NULL,XHANDLE);
+-	FetchData(&y_data,&y_data_rows,NULL,YHANDLE);
+-	FetchData(&data,&data_rows,&data_cols,DATAHANDLE);
+-	FetchData(&x_prime,&x_prime_rows,NULL,XPRIMEHANDLE);
+-	FetchData(&y_prime,&y_prime_rows,NULL,YPRIMEHANDLE);
+-
+-	if(nrhs>=7){
+-		/*default values: */
+-		FetchData(&default_values,&num_default_values,DEFAULTHANDLE);
+-	}
+-	else{
+-		default_values=NULL;
+-		num_default_values=0;
+-	}
+-
+-	if(nrhs>=8){
+-		
+-		/*Call expread on filename to build a contour array in the matlab workspace: */
+-		mexCallMATLAB( 1, &matlabstructure, 1, (mxArray**)&FILENAME, "expread");
+-
+-		/*contours: */
+-		numcontours=mxGetNumberOfElements(matlabstructure);
+-		contours=xNew<Contour<double> *>(numcontours);
+-		for(i=0;i<numcontours;i++){
+-			//allocate
+-			contouri=xNew<Contour<double> >(1);
+-			//retrieve dimension of this contour.
+-			contouri->nods=(int)mxGetScalar(mxGetField(matlabstructure,i,"nods"));
+-			//set pointers.
+-			contouri->x=mxGetPr(mxGetField(matlabstructure,i,"x"));
+-			contouri->y=mxGetPr(mxGetField(matlabstructure,i,"y"));
+-			*(contours+i)=contouri;
+-		}
+-
+-		/* Debugging of contours :{{{1*/
+-		/*for(i=0;i<numcontours;i++){
+-		  _printLine_("\nContour echo: contour number  " << i+1 << " / " << numcontours);
+-		  contouri=*(contours+i);
+-		  _printLine_("   Number of vertices " << contouri->nods);
+-		  for (j=0;j<contouri->nods;j++){
+-		  _printLine_("   " << *(contouri->x+j) << "f " << *(contouri->y+j) << "f");
+-		  }
+-		  }*/
+-		/*}}}*/
+-	}
+-	else{
+-		numcontours=0;
+-		contours=NULL;
+-	}
+-
+-
+-	/*some checks*/
+-	if (x_data_rows!=y_data_rows){
+-		_error_("vectors x and y should have the same length!");
+-	}
+-	if (x_prime_rows!=y_prime_rows){
+-		_error_("vectors x_prime and y_prime should have the same length!");
+-	}
+-	
+-	/*get number of elements and number of nodes in the data*/
+-	nels_data=index_data_rows;
+-	nods_data=x_data_rows;
+-	nods_prime=x_prime_rows;
+-
+-	/* Run core computations: */
+-	InterpFromMesh2dx(&data_prime,index_data,x_data,y_data,nods_data,nels_data,data,data_rows,x_prime,y_prime,nods_prime,default_values,num_default_values,contours,numcontours);
+-
+-	/*Write data: */
+-	WriteData(DATAPRIME,data_prime);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/InterpFromMesh2d/InterpFromMesh2d.h
+===================================================================
+--- ../trunk-jpl/src/modules/InterpFromMesh2d/InterpFromMesh2d.h	(revision 13650)
++++ ../trunk-jpl/src/modules/InterpFromMesh2d/InterpFromMesh2d.h	(revision 13651)
+@@ -1,60 +0,0 @@
+-/*!\file InterpFromMesh2d.h
+- * \brief: prototype for Data Interpolation mex module.
+- */
+-
+-#ifndef _INTERPFROMMESH2D_H
+-#define _INTERPFROMMESH2D_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "InterpFromMesh2d"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define INDEXHANDLE   prhs[0]
+-#define XHANDLE       prhs[1]
+-#define YHANDLE       prhs[2]
+-#define DATAHANDLE    prhs[3]
+-#define XPRIMEHANDLE  prhs[4]
+-#define YPRIMEHANDLE  prhs[5]
+-#define DEFAULTHANDLE prhs[6]
+-#define FILENAME      prhs[7]
+-/* serial output macros: */
+-#define DATAPRIME (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define INDEXHANDLE   PyTuple_GetItem(args,0)
+-#define XHANDLE       PyTuple_GetItem(args,1)
+-#define YHANDLE       PyTuple_GetItem(args,2)
+-#define DATAHANDLE    PyTuple_GetItem(args,3)
+-#define XPRIMEHANDLE  PyTuple_GetItem(args,4)
+-#define YPRIMEHANDLE  PyTuple_GetItem(args,5)
+-#define DEFAULTHANDLE PyTuple_GetItem(args,6)
+-#define FILENAME      PyTuple_GetItem(args,7)
+-/* serial output macros: */
+-#define DATAPRIME output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-
+-#endif  /* _INTERPFROMMESH2D_H */
+Index: ../trunk-jpl/src/modules/ElementConnectivity/ElementConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/ElementConnectivity/ElementConnectivity.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/ElementConnectivity/ElementConnectivity.cpp	(revision 13651)
+@@ -1,41 +0,0 @@
+-/*\file ElementConnectivity.c
+- *\brief: build element connectivity using node connectivity and elements. 
+- */
+-
+-#include "./ElementConnectivity.h"
+-
+-void ElementConnectivityUsage(void) {/*{{{*/
+-	_pprintLine_("");
+-	_pprintLine_("   usage: elementconnectivity = " << __FUNCT__ << "(elements, nodeconnectivity);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(ElementConnectivity){
+-
+-	/*inputs: */
+-	double* elements=NULL;
+-	double* nodeconnectivity=NULL;
+-	int     nel,nods;
+-	int     width;
+-
+-	/*outputs: */
+-	double* elementconnectivity=NULL;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments: */
+-	CHECKARGUMENTS(NLHS,NRHS,&ElementConnectivityUsage);
+-        
+-	/*Input datasets: */
+-	FetchData(&elements,&nel,NULL,ELEMENTS);
+-	FetchData(&nodeconnectivity,&nods,&width,NODECONNECTIVITY);
+-
+-	/*!Generate internal degree of freedom numbers: */
+-	ElementConnectivityx(&elementconnectivity, elements,nel, nodeconnectivity, nods, width);
+-
+-	/*write output datasets: */
+-	WriteData(ELEMENTCONNECTIVITY,elementconnectivity,nel,3);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/ElementConnectivity/ElementConnectivity.h
+===================================================================
+--- ../trunk-jpl/src/modules/ElementConnectivity/ElementConnectivity.h	(revision 13650)
++++ ../trunk-jpl/src/modules/ElementConnectivity/ElementConnectivity.h	(revision 13651)
+@@ -1,55 +0,0 @@
+-/*
+-	ElementConnectivity.h
+-*/
+-
+-#ifndef _ELEMENTCONNECTIVITY_H
+-#define _ELEMENTCONNECTIVITY_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-/*Header files: */
+-#include "../../c/include/globals.h"
+-#include "../../c/toolkits/toolkits.h"
+-#include "../../c/include/include.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-#include "../../c/io/io.h"
+-#include "../../c/EnumDefinitions/EnumDefinitions.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "ElementConnectivity"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define ELEMENTS         prhs[0]
+-#define NODECONNECTIVITY prhs[1]
+-/* serial output macros: */
+-#define ELEMENTCONNECTIVITY (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define ELEMENTS         PyTuple_GetItem(args,0)
+-#define NODECONNECTIVITY PyTuple_GetItem(args,1)
+-/* serial output macros: */
+-#define ELEMENTCONNECTIVITY output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  2
+-
+-#endif  /* _ELEMENTCONNECTIVITY_H */
+Index: ../trunk-jpl/src/modules/Kriging/Kriging.h
+===================================================================
+--- ../trunk-jpl/src/modules/Kriging/Kriging.h	(revision 13650)
++++ ../trunk-jpl/src/modules/Kriging/Kriging.h	(revision 13651)
+@@ -1,59 +0,0 @@
+-/*
+-	Kriging.h
+-*/
+-
+-#ifndef _KRIGING_H_
+-#define _KRIGING_H_
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "Kriging"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define X            prhs[0]
+-#define Y            prhs[1]
+-#define OBSERVATIONS prhs[2]
+-#define XINTERP      prhs[3]
+-#define YINTERP      prhs[4]
+-
+-/* serial output macros: */
+-#define PREDICTIONS (mxArray**)&plhs[0]
+-#define ERROR       (mxArray**)&plhs[1]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define X            PyTuple_GetItem(args,0)
+-#define Y            PyTuple_GetItem(args,1)
+-#define OBSERVATIONS PyTuple_GetItem(args,2)
+-#define XINTERP      PyTuple_GetItem(args,3)
+-#define YINTERP      PyTuple_GetItem(args,4)
+-
+-/* serial output macros: */
+-#define PREDICTIONS output,0
+-#define ERROR       output,1
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  2
+-#undef NRHS
+-#define NRHS  5
+-
+-#endif  /* _KRIGING_H_ */
+Index: ../trunk-jpl/src/modules/Kriging/Kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/Kriging/Kriging.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/Kriging/Kriging.cpp	(revision 13651)
+@@ -1,73 +0,0 @@
+-/*\file Kriging.c
+- *\brief: best linear predictor
+- */
+-#include "./Kriging.h"
+-
+-void KrigingUsage(void){/*{{{*/
+-	_pprintLine_("");
+-	_pprintLine_("   usage: predictions=" << __FUNCT__ << "(x,y,observations,x_interp,y_interp,'options');");
+-	_pprintLine_("   available options:");
+-	_pprintLine_("      -'model': Available variogram models 'gaussian' (default),'spherical','power','exponential'");
+-	_pprintLine_("         -'nugget': nugget effect (default 0.2)");
+-	_pprintLine_("         -'range':  for gaussian, spherical and exponential models (default sqrt(3))");
+-	_pprintLine_("         -'sill':   for gaussian, spherical and exponential models (default 1)");
+-	_pprintLine_("         -'slope':  for power model (default 1)");
+-	_pprintLine_("         -'power':  for power model (default 1)");
+-	_pprintLine_("      -'searchradius': search radius for each prediction (default is observations span)");
+-	_pprintLine_("      -'boxlength':    minimum length of quadtree boxes (useful to decrease the number of observations)");
+-	_pprintLine_("      -'maxdata':      minimum number of observations for a prediction (default is 50)");
+-	_pprintLine_("      -'mindata':      maximum number of observations for a prediction (default is 1)");
+-	_pprintLine_("      -'maxtrimming':  maximum trimming value (default is -1.e+21)");
+-	_pprintLine_("      -'mintrimming':  minimum trimming value (default is +1.e+21)");
+-	_pprintLine_("      -'minspacing':   minimum distance between observation (default is 0.01)");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(Kriging){
+-
+-	/*Outputs*/
+-	double  *x            = NULL;
+-	double  *y            = NULL;
+-	double  *observations = NULL;
+-	double  *x_interp     = NULL;
+-	double  *y_interp     = NULL;
+-	double  *predictions  = NULL;
+-	double  *error        = NULL;
+-	Options *options      = NULL;
+-	int      N_interp,M_interp,M,N,n_obs;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	if (nrhs<NRHS || nlhs>NLHS){
+-		KrigingUsage(); _error_("Kriging usage error");
+-	}
+-
+-	/*Fetch inputs: */
+-	FetchData(&x,&n_obs,X);
+-	FetchData(&y,&N,Y);                       if(n_obs!=N) _error_("x and y should have the same size");
+-	FetchData(&observations,&N,OBSERVATIONS); if(n_obs!=N) _error_("x and observations should have the same size");
+-	FetchData(&x_interp,&M_interp,&N_interp,XINTERP);
+-	FetchData(&y_interp,&M,&N,YINTERP);       if(N!=N_interp || M!=M_interp) _error_("x_interp and y_interp should have the same size");
+-	FetchData(&options,NRHS,nrhs,prhs);
+-
+-	/*Call x layer*/
+-	Krigingx(&predictions,&error,x,y,observations,n_obs,x_interp,y_interp,M_interp*N_interp,options);
+-
+-	/*Generate output Matlab Structures*/
+-	if(nlhs>=1) WriteData(PREDICTIONS,predictions,M_interp,N_interp);
+-	if(nlhs==2) WriteData(ERROR,error,M_interp,N_interp);
+-
+-	/*Free ressources: */
+-	xDelete<double>(x);
+-	xDelete<double>(y);
+-	xDelete<double>(observations);
+-	xDelete<double>(x_interp);
+-	xDelete<double>(y_interp);
+-	xDelete<double>(predictions);
+-	xDelete<double>(error);
+-	delete options;
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/StringToEnum/StringToEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/StringToEnum/StringToEnum.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/StringToEnum/StringToEnum.cpp	(revision 13651)
+@@ -1,34 +0,0 @@
+-/*\file StringToEnum.c
+- *\brief:convert enum (int) to string
+- */
+-
+-#include "./StringToEnum.h"
+-
+-void StringToEnumUsage(void){/*{{{*/
+-	_pprintLine_("");
+-	_pprintLine_("   usage: " << __FUNCT__ << "enum = StringToEnum(string);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(StringToEnum){
+-
+-	char    *name    = NULL;
+-	int      enum_out;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments: */
+-	CHECKARGUMENTS(NLHS,NRHS,&StringToEnumUsage);
+-
+-	/*Fetch inputs: */
+-	FetchData(&name,NAME);
+-
+-	/*Run core function: */
+-	enum_out=StringToEnumx(name);
+-
+-	/* output: */
+-	WriteData(ENUMOUT,enum_out);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/StringToEnum/StringToEnum.h
+===================================================================
+--- ../trunk-jpl/src/modules/StringToEnum/StringToEnum.h	(revision 13650)
++++ ../trunk-jpl/src/modules/StringToEnum/StringToEnum.h	(revision 13651)
+@@ -1,49 +0,0 @@
+-/*!\file:  StringToEnum.h
+- * \brief header file for StringToEnum module.
+- */ 
+-
+-#ifndef _STRINGTOENUM_H
+-#define _STRINGTOENUM_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-/*Header files: */
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "StringToEnum"
+-    
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define NAME (mxArray*)prhs[0]
+-/* serial output macros: */
+-#define ENUMOUT (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define NAME PyTuple_GetItem(args,0)
+-/* serial output macros: */
+-#define ENUMOUT output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  1
+-
+-#endif  /* _TEST_H */
+Index: ../trunk-jpl/src/modules/EnumToString/EnumToString.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/EnumToString/EnumToString.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/EnumToString/EnumToString.cpp	(revision 13651)
+@@ -1,34 +0,0 @@
+-/*\file EnumToString.c
+- *\brief:convert enum (int) to string
+- */
+-
+-#include "./EnumToString.h"
+-
+-void EnumToStringUsage(void){/*{{{*/
+-	_pprintLine_("");
+-	_pprintLine_("   usage: " << __FUNCT__ << "string = EnumToString(enum);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(EnumToString){
+-
+-	char    *name    = NULL;
+-	int      enum_in;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments: */
+-	CHECKARGUMENTS(NLHS,NRHS,&EnumToStringUsage);
+-
+-	/*Fetch inputs: */
+-	FetchData(&enum_in,ENUMIN);
+-
+-	/*Run core function: */
+-	EnumToStringx(&name,enum_in);
+-
+-	/* output: */
+-	WriteData(NAME,name);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/EnumToString/EnumToString.h
+===================================================================
+--- ../trunk-jpl/src/modules/EnumToString/EnumToString.h	(revision 13650)
++++ ../trunk-jpl/src/modules/EnumToString/EnumToString.h	(revision 13651)
+@@ -1,49 +0,0 @@
+-/*!\file:  EnumToString.h
+- * \brief header file for EnumToString module.
+- */ 
+-
+-#ifndef _ENUMTOSTRING_H
+-#define _ENUMTOSTRING_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-/*Header files: */
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "EnumToString"
+- 
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define ENUMIN (mxArray*)prhs[0]
+-/* serial output macros: */
+-#define NAME (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define ENUMIN PyTuple_GetItem(args,0)
+-/* serial output macros: */
+-#define NAME output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  1
+-
+-#endif  /* _TEST_H */
+Index: ../trunk-jpl/src/modules/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/modules/matlab/Makefile.am	(revision 13650)
++++ ../trunk-jpl/src/modules/matlab/Makefile.am	(revision 13651)
+@@ -1,240 +0,0 @@
+-AM_CPPFLAGS = @DAKOTAINCL@ @MATLABINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @BOOSTINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@ @ADOLCINCL@
+-
+-EXEEXT=$(MATLABWRAPPEREXT)
+-
+-#Modules {{{
+-if MODULES
+-lib_LTLIBRARIES =  AverageFilter.la\
+-						 BamgMesher.la\
+-						 BamgConvertMesh.la\
+-						 BamgTriangulate.la\
+-						 ContourToMesh.la\
+-						 ContourToNodes.la\
+-						 ElementConnectivity.la\
+-						 EnumToString.la\
+-						 HoleFiller.la\
+-						 InternalFront.la\
+-						 InterpFromGridToMesh.la\
+-						 InterpFromMeshToMesh2d.la\
+-						 InterpFromMeshToMesh3d.la\
+-						 InterpFromMeshToGrid.la\
+-						 InterpFromMesh2d.la\
+-						 Ll2xy.la\
+-						 NodeConnectivity.la\
+-						 MeshPartition.la\
+-						 MeshProfileIntersection.la\
+-						 PointCloudFindNeighbors.la\
+-						 PropagateFlagsFromConnectivity.la\
+-						 StringToEnum.la\
+-						 TriaSearch.la\
+-						 TriMesh.la\
+-						 TriMeshProcessRifts.la\
+-						 Scotch.la\
+-						 Xy2ll.la\
+-						 Chaco.la
+-
+-if KRIGING
+-lib_LTLIBRARIES +=  Kriging.la
+-endif
+-if KML
+-lib_LTLIBRARIES +=  KMLFileRead.la\
+-				   KMLMeshWrite.la\
+-				   KMLOverlay.la\
+-				   Shp2Kml.la\
+-				   Exp2Kml.la\
+-				   Kml2Exp.la
+-endif
+-endif 
+-
+-#}}}
+-#Flags and libraries {{{
+-if SHAREDLIBS
+-deps = ../../c/libISSMCore.la ../../c/libISSMModules.la
+-else
+-deps = ../../c/libISSMCore.a ../../c/libISSMModules.a
+-endif
+-
+-deps +=  $(MATHLIB) ${MEXLIB}
+-
+-#$(TRIANGLELIB) $(PETSCLIB) $(FLIBS) $(PLAPACKLIB) $(SPOOLESLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MPILIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(SHAPELIBLIB) $(GSLLIB) 
+-
+-#Triangle library
+-AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER
+-
+-#Matlab part
+-AM_LDFLAGS = -module $(MEXLINK) -shrext ${EXEEXT}
+-if VERSION
+-AM_LDFLAGS +=
+-else
+-AM_LDFLAGS += -avoid-version
+-endif
+-if SHAREDLIBS
+-deps += ../../c/libISSMMatlab.la 
+-else
+-deps += ../../c/libISSMMatlab.a
+-AM_LDFLAGS += --no-warnings 
+-endif
+-
+-AM_CXXFLAGS +=  -D_HAVE_MATLAB_MODULES_ -D_GNU_SOURCE -fPIC -fno-omit-frame-pointer -pthread 
+-
+-######################################################################################
+-# Circular dependencies may not be necessary here.
+-#deps += ../../c/libISSMCore.a 
+-#if CIRCULAR_DEPENDENCIES
+-#deps += $(TRIANGLELIB) $(PETSCLIB) $(FLIBS) $(PLAPACKLIB) $(SPOOLESLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MPILIB) $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(SHAPELIBLIB) $(GSLLIB)
+-#endif
+-######################################################################################
+-
+-if SHAREDLIBS
+-deps +=
+-else
+-deps += ../../c/libISSMModules.a ../../c/libISSMCore.a  
+-if ADOLC
+-deps += $(ADOLCLIB)
+-endif
+-endif
+-
+-#Optimization flags:
+-AM_CXXFLAGS += $(CXXOPTFLAGS) 
+-#}}}
+-#Bin sources {{{
+-AverageFilter_la_SOURCES = ../AverageFilter/AverageFilter.cpp\
+-									../AverageFilter/AverageFilter.h
+-AverageFilter_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-BamgMesher_la_SOURCES = ../BamgMesher/BamgMesher.cpp\
+-								../BamgMesher/BamgMesher.h
+-BamgMesher_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-BamgConvertMesh_la_SOURCES = ../BamgConvertMesh/BamgConvertMesh.cpp\
+-									  ../BamgConvertMesh/BamgConvertMesh.h
+-BamgConvertMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-BamgTriangulate_la_SOURCES = ../BamgTriangulate/BamgTriangulate.cpp\
+-									  ../BamgTriangulate/BamgTriangulate.h
+-BamgTriangulate_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-Chaco_la_SOURCES = ../Chaco/Chaco.cpp\
+-						 ../Chaco/Chaco.h
+-Chaco_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(CHACOLIB)
+-
+-ContourToMesh_la_SOURCES = ../ContourToMesh/ContourToMesh.cpp\
+-									../ContourToMesh/ContourToMesh.h
+-ContourToMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
+-
+-ContourToNodes_la_SOURCES = ../ContourToNodes/ContourToNodes.cpp\
+-									 ../ContourToNodes/ContourToNodes.h
+-ContourToNodes_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-ElementConnectivity_la_SOURCES = ../ElementConnectivity/ElementConnectivity.cpp\
+-											../ElementConnectivity/ElementConnectivity.h
+-ElementConnectivity_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-EnumToString_la_SOURCES = ../EnumToString/EnumToString.cpp\
+-								  ../EnumToString/EnumToString.h
+-EnumToString_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-StringToEnum_la_SOURCES = ../StringToEnum/StringToEnum.cpp\
+-								  ../StringToEnum/StringToEnum.h
+-StringToEnum_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-HoleFiller_la_SOURCES = ../HoleFiller/HoleFiller.cpp\
+-								../HoleFiller/HoleFiller.h
+-HoleFiller_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) 
+-
+-InternalFront_la_SOURCES = ../InternalFront/InternalFront.cpp\
+-									../InternalFront/InternalFront.h
+-InternalFront_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-InterpFromGridToMesh_la_SOURCES = ../InterpFromGridToMesh/InterpFromGridToMesh.cpp\
+-											 ../InterpFromGridToMesh/InterpFromGridToMesh.h
+-InterpFromGridToMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
+-
+-InterpFromMeshToMesh2d_la_SOURCES = ../InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp\
+-												../InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h
+-InterpFromMeshToMesh2d_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
+-
+-InterpFromMeshToMesh3d_la_SOURCES = ../InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.cpp\
+-												../InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h
+-InterpFromMeshToMesh3d_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-InterpFromMeshToGrid_la_SOURCES = ../InterpFromMeshToGrid/InterpFromMeshToGrid.cpp\
+-											 ../InterpFromMeshToGrid/InterpFromMeshToGrid.h
+-InterpFromMeshToGrid_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-InterpFromMesh2d_la_SOURCES = ../InterpFromMesh2d/InterpFromMesh2d.cpp\
+-										../InterpFromMesh2d/InterpFromMesh2d.h
+-InterpFromMesh2d_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
+-
+-KMLFileRead_la_SOURCES = ../KMLFileRead/KMLFileRead.cpp\
+-								 ../KMLFileRead/KMLFileRead.h
+-KMLFileRead_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-KMLMeshWrite_la_SOURCES = ../KMLMeshWrite/KMLMeshWrite.cpp\
+-								  ../KMLMeshWrite/KMLMeshWrite.h
+-KMLMeshWrite_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-KMLOverlay_la_SOURCES = ../KMLOverlay/KMLOverlay.cpp\
+-								../KMLOverlay/KMLOverlay.h
+-KMLOverlay_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-Xy2ll_la_SOURCES = ../Xy2ll/Xy2ll.cpp\
+-						 ../Xy2ll/Xy2ll.h
+-Xy2ll_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-Ll2xy_la_SOURCES = ../Ll2xy/Ll2xy.cpp\
+-						 ../Ll2xy/Ll2xy.h
+-Ll2xy_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-Exp2Kml_la_SOURCES = ../Exp2Kml/Exp2Kml.cpp\
+-							../Exp2Kml/Exp2Kml.h
+-Exp2Kml_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-Kml2Exp_la_SOURCES = ../Kml2Exp/Kml2Exp.cpp\
+-							../Kml2Exp/Kml2Exp.h
+-Kml2Exp_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-Kriging_la_SOURCES = ../Kriging/Kriging.cpp\
+-							../Kriging/Kriging.h
+-Kriging_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(MULTITHREADINGLIB)
+-
+-MeshPartition_la_SOURCES = ../MeshPartition/MeshPartition.cpp\
+-									../MeshPartition/MeshPartition.h
+-MeshPartition_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(METISLIB)
+-
+-MeshProfileIntersection_la_SOURCES = ../MeshProfileIntersection/MeshProfileIntersection.cpp\
+-												 ../MeshProfileIntersection/MeshProfileIntersection.h
+-MeshProfileIntersection_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-NodeConnectivity_la_SOURCES = ../NodeConnectivity/NodeConnectivity.cpp\
+-										../NodeConnectivity/NodeConnectivity.h
+-NodeConnectivity_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-PointCloudFindNeighbors_la_SOURCES = ../PointCloudFindNeighbors/PointCloudFindNeighbors.cpp\
+-												 ../PointCloudFindNeighbors/PointCloudFindNeighbors.h
+-PointCloudFindNeighbors_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
+-
+-PropagateFlagsFromConnectivity_la_SOURCES = ../PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.cpp\
+-														  ../PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h
+-PropagateFlagsFromConnectivity_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-Scotch_la_SOURCES = ../Scotch/Scotch.cpp\
+-						  ../Scotch/Scotch.h
+-Scotch_la_LIBADD = ${deps} $(SCOTCHLIB) $(MPILIB)
+-
+-Shp2Kml_la_SOURCES = ../Shp2Kml/Shp2Kml.cpp\
+-							../Shp2Kml/Shp2Kml.h
+-Shp2Kml_la_LIBADD = ${deps} $(SHAPELIBLIB) $(MPILIB) $(PETSCLIB)
+-
+-TriaSearch_la_SOURCES = ../TriaSearch/TriaSearch.cpp\
+-								../TriaSearch/TriaSearch.h
+-TriaSearch_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-
+-TriMesh_la_SOURCES = ../TriMesh/TriMesh.cpp\
+-							../TriMesh/TriMesh.h
+-TriMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(TRIANGLELIB)
+-
+-TriMeshProcessRifts_la_SOURCES = ../TriMeshProcessRifts/TriMeshProcessRifts.cpp\
+-											../TriMeshProcessRifts/TriMeshProcessRifts.h
+-TriMeshProcessRifts_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+-#}}}
+Index: ../trunk-jpl/src/modules/BamgTriangulate/BamgTriangulate.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/BamgTriangulate/BamgTriangulate.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/BamgTriangulate/BamgTriangulate.cpp	(revision 13651)
+@@ -1,56 +0,0 @@
+-/*\file BamgTriangulate.c
+- *\brief: bamg module.
+- */
+-#include "./BamgTriangulate.h"
+-
+-void BamgTriangulateUsage(void){/*{{{*/
+-	_pprintString_("BAMGTRIANGULATE - Delaunay Triangulation of a list of points");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("      index=BamgTriangulate(x,y);");
+-	_pprintLine_("      index: index of the triangulation");
+-	_pprintLine_("      x,y: coordinates of the nodes");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(BamgTriangulate){
+-
+-	/*input: */
+-	double* x=NULL;
+-	double* y=NULL;
+-	int     x_cols;
+-	int     y_rows,y_cols;
+-	int nods;
+-
+-	/*Output*/
+-	int* index=NULL;
+-	int  nels;
+-
+-	/*Intermediary*/
+-	int verbose=0;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&BamgTriangulateUsage);
+-
+-	/*Input datasets: */
+-	if (verbose) _printLine_("Fetching inputs");
+-	FetchData(&x,&nods,&x_cols,XHANDLE);
+-	FetchData(&y,&y_rows,&y_cols,YHANDLE);
+-
+-	/*Check inputs*/
+-	if(y_rows!=nods)         _error_("x and y do not have the same length");
+-	if(x_cols>1 || y_cols>1) _error_("x and y should have only one column");
+-	if(nods<3)               _error_("At least 3 points are required");
+-
+-	/* Run core computations: */
+-	if (verbose) _printLine_("Call core");
+-	BamgTriangulatex(&index,&nels,x,y,nods);
+-
+-	/*Write output*/
+-	WriteData(INDEX,index,nels,3);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/BamgTriangulate/BamgTriangulate.h
+===================================================================
+--- ../trunk-jpl/src/modules/BamgTriangulate/BamgTriangulate.h	(revision 13650)
++++ ../trunk-jpl/src/modules/BamgTriangulate/BamgTriangulate.h	(revision 13651)
+@@ -1,52 +0,0 @@
+-/*!\file BamgTriangulate.h
+- * \brief: prototype for Data Interpolation mex module.
+- */
+-
+-#ifndef _BAMGTRIANGULATE_H
+-#define _BAMGTRIANGULATE_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "BamgTriangulate"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define XHANDLE prhs[0]
+-#define YHANDLE prhs[1]
+-
+-/* serial output macros: */
+-#define INDEX (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define XHANDLE PyTuple_GetItem(args,0)
+-#define YHANDLE PyTuple_GetItem(args,1)
+-
+-/* serial output macros: */
+-#define INDEX output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  2
+-
+-#endif
+Index: ../trunk-jpl/src/modules/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp	(revision 13651)
+@@ -1,79 +0,0 @@
+-/*\file InterpFromMeshToMesh2d.c
+- *\brief: bamg module.
+- */
+-#include "./InterpFromMeshToMesh2d.h"
+-
+-void InterpFromMeshToMesh2dUsage(void){/*{{{*/
+-	_pprintLine_("INTERFROMMESHTOMESH2D - interpolation from a 2d triangular mesh onto a list of point");
+-	_pprintLine_("");
+-	_pprintLine_("   This function is a multi-threaded mex file that interpolates a field");
+-	_pprintLine_("   defined on a Delaunay triangulation onto a list of point");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("         data_interp=InterpFromMeshToMesh2d(index,x,y,data,x_interp,y_interp);");
+-	_pprintLine_("      or data_interp=InterpFromMeshToMesh2d(index,x,y,data,x_interp,y_interp,OPTIONS);");
+-	_pprintLine_("");
+-	_pprintLine_("      index             : index of the mesh where data is defined");
+-	_pprintLine_("      x,y               : coordinates of the nodes where data is defined");
+-	_pprintLine_("      data              : matrix holding the data to be interpolated onto the mesh. (one column per field)");
+-	_pprintLine_("      x_interp,y_interp : coordinates of the points onto which we interpolate.");
+-	_pprintLine_("      data_interp       : vector of mesh interpolated data.");
+-	_pprintLine_("      Available options :");
+-	_pprintLine_("         - 'default' : default value if point is outsite of triangulation (instead of linear interolation)");
+-	_pprintLine_("");
+-	_pprintLine_("   Example:");
+-	_pprintLine_("      load('temperature.mat');");
+-	_pprintLine_("      md.initialization.temperature=InterpFromMeshToMesh2d(index,x,y,temperature,md.mesh.x,md.mesh.y);");
+-	_pprintLine_("      md.initialization.temperature=InterpFromMeshToMesh2d(index,x,y,temperature,md.mesh.x,md.mesh.y,'default',253);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(InterpFromMeshToMesh2d){
+-
+-	/*Intermediaties*/
+-	int     *index              = NULL;
+-	double  *x_data             = NULL;
+-	double  *y_data             = NULL;
+-	double  *data               = NULL;
+-	int      nods_data,nels_data;
+-	int      M_data,N_data;
+-	double  *x_interp           = NULL;
+-	double  *y_interp           = NULL;
+-	int      N_interp;
+-	Options *options   = NULL;
+-	double  *data_interp = NULL;
+-	int      test1,test2,test;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on output arguments on the matlab side: */
+-	#ifdef _HAVE_MATLAB_MODULES_
+-	if(nlhs!=NLHS){
+-		InterpFromMeshToMesh2dUsage();
+-		_error_("InterpFromMeshToMesh2dUsage usage error");
+-	}
+-	#endif
+-	/*check on input arguments: */
+-	if(nrhs<NRHS){
+-		InterpFromMeshToMesh2dUsage();
+-		_error_("InterpFromMeshToMesh2dUsage usage error");
+-	}
+-
+-	/*Fetch inputs: */
+-	FetchData(&index,&nels_data,&test,INDEX); if(test!=3) _error_("index should have 3 columns");
+-	FetchData(&x_data,&nods_data,X);          if(nods_data<3) _error_("there should be at least three points");
+-	FetchData(&y_data,&test,Y);               if(test!=nods_data) _error_("vectors x and y should have the same length");
+-	FetchData(&data,&M_data,&N_data,DATA);    if(M_data*N_data<1) _error_("data is empty");
+-	FetchData(&x_interp,&N_interp,XINTERP);   if(N_interp<1) _error_("no interpolation requested");
+-	FetchData(&y_interp,&test,YINTERP);       if(test!=N_interp) _error_("vectors x_interp and y_interp should have the same length");
+-	FetchData(&options,NRHS,nrhs,ARGUMENTS);
+-
+-	/*Run core computations*/
+-	InterpFromMeshToMesh2dx(&data_interp,index,x_data,y_data,nods_data,nels_data,data,M_data,N_data,x_interp,y_interp,N_interp,options);
+-
+-	/*Write data: */
+-	WriteData(DATAINTERP,data_interp,N_interp,N_data);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h
+===================================================================
+--- ../trunk-jpl/src/modules/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h	(revision 13650)
++++ ../trunk-jpl/src/modules/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h	(revision 13651)
+@@ -1,65 +0,0 @@
+-/*!\file InterpFromMeshToMesh2d.h
+- * \brief: prototype for Data Interpolation mex module.
+- */
+-
+-#ifndef _INTERPFROMMESHTOMESH2d_H
+-#define _INTERPFROMMESHTOMESH2d_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-/*Header files: */
+-#include "../../c/include/globals.h"
+-#include "../../c/toolkits/toolkits.h"
+-#include "../../c/include/include.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-#include "../../c/io/io.h"
+-#include "../../c/EnumDefinitions/EnumDefinitions.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "InterpFromMeshToMesh2d"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define INDEX     prhs[0]
+-#define X         prhs[1]
+-#define Y         prhs[2]
+-#define DATA      prhs[3]
+-#define XINTERP   prhs[4]
+-#define YINTERP   prhs[5]
+-#define ARGUMENTS prhs 
+-/* serial output macros: */
+-#define DATAINTERP (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define INDEX          PyTuple_GetItem(args,0)
+-#define X              PyTuple_GetItem(args,1)
+-#define Y              PyTuple_GetItem(args,2)
+-#define DATA           PyTuple_GetItem(args,3)
+-#define XINTERP        PyTuple_GetItem(args,4)
+-#define YINTERP        PyTuple_GetItem(args,5)
+-#define ARGUMENTS args
+-/* serial output macros: */
+-#define DATAINTERP output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  6
+-
+-#endif
+Index: ../trunk-jpl/src/modules/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/modules/Makefile.am	(revision 13650)
++++ ../trunk-jpl/src/modules/Makefile.am	(revision 13651)
+@@ -1,8 +0,0 @@
+-SUBDIRS = 
+-if MATLAB
+-SUBDIRS += matlab
+-endif
+-
+-if PYTHON
+-SUBDIRS += python
+-endif
+Index: ../trunk-jpl/src/modules/ContourToMesh/ContourToMesh.h
+===================================================================
+--- ../trunk-jpl/src/modules/ContourToMesh/ContourToMesh.h	(revision 13650)
++++ ../trunk-jpl/src/modules/ContourToMesh/ContourToMesh.h	(revision 13651)
+@@ -1,66 +0,0 @@
+-/*
+-	ContourToMesh.h
+-*/
+-
+-#ifndef _CONTOURTOMESH_H
+-#define _CONTOURTOMESH_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-/*Header files: */
+-#include "../../c/include/globals.h"
+-#include "../../c/toolkits/toolkits.h"
+-#include "../../c/include/include.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-#include "../../c/io/io.h"
+-#include "../../c/EnumDefinitions/EnumDefinitions.h"
+-
+-#undef __FUNCT__
+-#define __FUNCT__ "ContourToMesh"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define INDEX       prhs[0]
+-#define X           prhs[1]
+-#define Y           prhs[2]
+-#define CONTOUR     prhs[3]
+-#define INTERPTYPE  prhs[4]
+-#define EDGEVALUE   prhs[5]
+-/* serial output macros: */
+-#define PLHS0 (mxArray**)&plhs[0]
+-#define PLHS1 (mxArray**)&plhs[1]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define INDEX       PyTuple_GetItem(args,0)
+-#define X           PyTuple_GetItem(args,1)
+-#define Y           PyTuple_GetItem(args,2)
+-#define CONTOUR     PyTuple_GetItem(args,3)
+-#define INTERPTYPE  PyTuple_GetItem(args,4)
+-#define EDGEVALUE   PyTuple_GetItem(args,5)
+-/* serial output macros: */
+-#define PLHS0 output,0
+-#define PLHS1 output,1
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  2
+-#undef NRHS
+-#define NRHS 6
+-
+-#endif  /* _CONTOURTOMESH_H */
+-
+Index: ../trunk-jpl/src/modules/ContourToMesh/ContourToMesh.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/ContourToMesh/ContourToMesh.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/ContourToMesh/ContourToMesh.cpp	(revision 13651)
+@@ -1,89 +0,0 @@
+-/*! \file  ContourtoMesh
+-    \brief: takes an  contour file, and figures out which nodes or elements from the mesh  
+-    are inside this contour. 
+-*/
+-	
+-#include "./ContourToMesh.h"
+-
+-void ContourToMeshUsage(void){/*{{{*/
+-	_printLine_("CONTOURTOMESH - Flag the elements or nodes inside a contour");
+-	_printLine_("");
+-	_printLine_("      Usage: ");
+-	_printLine_("         [in_nod,in_elem]=ContourToMesh(index,x,y,contourname,interptype,edgevalue)\n");
+-	_printLine_("");
+-	_printLine_("         index,x,y: mesh triangulation.");
+-	_printLine_("         contourname: name of .exp file containing the contours.");
+-	_printLine_("         interptype: string definining type of interpolation ('element', or 'node').");
+-	_printLine_("         edgevalue: integer (0, 1 or 2) defining the value associated to the nodes on the edges of the polygons.");
+-	_printLine_("         in_nod: vector of flags (0 or 1), of size nods if interptype is set to 'node' or 'element and node', ");
+-	_printLine_("            or of size 0 otherwise.");
+-	_printLine_("         in_elem: vector of flags (0 or 1), of size nel if interptype is set to 'element' or 'element and node', ");
+-	_printLine_("            or of size 0 otherwise.");
+-	_printLine_("");
+-	_printLine_("      Example: ");
+-	_printLine_("         in_nod=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','node',1)");
+-	_printLine_("         in_elements=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','element',0)");
+-	_printLine_("         [in_nodes,in_elements]=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','element and node',0)");
+-	_printLine_("");
+-}/*}}}*/
+-WRAPPER(ContourToMesh){
+-
+-	/* required input: */
+-	int      edgevalue;
+-	double  *index       = NULL;
+-	int      nel;
+-	double  *x           = NULL;
+-	int      nods;
+-	double  *y           = NULL;
+-	char    *interptype  = NULL;
+-	DataSet *contours    = NULL;
+-
+-	/* output: */
+-	SeqVec<double> *in_nod  = NULL;
+-	SeqVec<double> *in_elem = NULL;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on output arguments on the matlab side: */
+-	#ifdef _HAVE_MATLAB_MODULES_
+-	if(nlhs!=1 && nlhs!=2){
+-		ContourToMeshUsage();
+-		_error_("usage. See above");
+-	}
+-	#endif
+-	/*check on input arguments: */
+-	if(nrhs!=NRHS){
+-		ContourToMeshUsage();
+-		_error_("usage. See above");
+-	}
+-
+-	/*Fetch inputs: */
+-	FetchData(&index,&nel,NULL,INDEX);
+-	FetchData(&x,&nods,NULL,X);
+-	FetchData(&y,NULL,NULL,Y);
+-	FetchData(&edgevalue,EDGEVALUE);
+-	FetchData(&contours,CONTOUR);
+-	FetchData(&interptype,INTERPTYPE);
+-
+-	/*Run interpolation routine: */
+-	ContourToMeshx( &in_nod,&in_elem,index,x,y,contours,interptype,nel,nods,edgevalue);
+-
+-	/* output: */
+-	if (strcmp(interptype,"node")==0){
+-		WriteData(PLHS0,in_nod);
+-		WriteData(PLHS1);
+-	}
+-	else if (strcmp(interptype,"element")==0){
+-		WriteData(PLHS0,in_elem);
+-		WriteData(PLHS1);
+-	}
+-	else if (strcmp(interptype,"element and node")==0){
+-		WriteData(PLHS0,in_nod);
+-		WriteData(PLHS1,in_elem);
+-	}
+-	else _error_("wrong interpolation type");
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/Xy2ll/Xy2ll.h
+===================================================================
+--- ../trunk-jpl/src/modules/Xy2ll/Xy2ll.h	(revision 13650)
++++ ../trunk-jpl/src/modules/Xy2ll/Xy2ll.h	(revision 13651)
+@@ -1,54 +0,0 @@
+-/*!\file Xy2ll.h
+- * \brief: prototype for x/y to lat/long coordinate mex module.
+- */
+-
+-#ifndef _XY2LL_H
+-#define _XY2LL_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "Xy2ll"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define X_IN   prhs[0]
+-#define Y_IN   prhs[1]
+-#define SGN_IN prhs[2]
+-/* serial output macros: */
+-#define LAT_OUT (mxArray**)&plhs[0]
+-#define LON_OUT (mxArray**)&plhs[1]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define X_IN   PyTuple_GetItem(args,0)
+-#define Y_IN   PyTuple_GetItem(args,1)
+-#define SGN_IN PyTuple_GetItem(args,2)
+-/* serial output macros: */
+-#define LAT_OUT output,0
+-#define LON_OUT output,1
+-#endif
+-
+-/* serial arg counts: */
+-#undef NRHS
+-#define NRHS  3
+-#undef NLHS
+-#define NLHS  2
+-
+-#endif
+Index: ../trunk-jpl/src/modules/Xy2ll/Xy2ll.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/Xy2ll/Xy2ll.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/Xy2ll/Xy2ll.cpp	(revision 13651)
+@@ -1,96 +0,0 @@
+-/*\file Xy2ll.c
+- *\brief: x/y to lat/long coordinate mex module.
+- */
+-#include "./Xy2ll.h"
+-
+-void Xy2llUsage(void){/*{{{*/
+-	_pprintLine_("Xy2ll - x/y to lat/long coordinate transformation module:");
+-	_pprintLine_("");
+-	_pprintLine_("   This module transforms x/y to lat/long coordinates.");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("      [lat,lon]=Xy2ll(x,y,sgn,'param name',param,...);");
+-	_pprintLine_("");
+-	_pprintLine_("      x           x coordinates (double vector)");
+-	_pprintLine_("      y           y coordinates (double vector)");
+-	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))");
+-	_pprintLine_("");
+-	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
+-	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
+-	_pprintLine_("");
+-	_pprintLine_("      lat         latitude coordinates (double vector)");
+-	_pprintLine_("      lon         longitude coordinates (double vector)");
+-	_pprintLine_("");
+-	_pprintLine_("   Examples:");
+-	_pprintLine_("      [lat,lon]=Xy2ll(x,y, 1);");
+-	_pprintLine_("      [lat,lon]=Xy2ll(x,y, 1,'central_meridian',45,'standard_parallel',70);");
+-	_pprintLine_("      [lat,lon]=Xy2ll(x,y,-1,'central_meridian', 0,'standard_parallel',71);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(Xy2ll){
+-
+-	int i,verbose=1;
+-
+-	/*input: */
+-	double  *x=NULL,*y=NULL;
+-	int     nx,ny,ncoord;
+-	int     sgn;
+-	Options* options=NULL;
+-	double   cm=0.,sp=0.;
+-
+-	/* output: */
+-	double  *lat=NULL,*lon=NULL;
+-	int     iret=0;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	if (nlhs > NLHS) {
+-		Xy2llUsage(); _error_("Xy2ll usage error");
+-	}
+-	if (nrhs < NRHS) {
+-		Xy2llUsage(); _error_("Xy2ll usage error");
+-	}
+-
+-	/*Input datasets: */
+-	FetchData(&x,&nx,X_IN);
+-	FetchData(&y,&ny,Y_IN);
+-	FetchData(&sgn,SGN_IN);
+-	FetchData(&options,NRHS,nrhs,prhs);
+-
+-	/*  defaults are in Xy2lldef, so don't duplicate them here, and only use user values if both have been specified  */
+-	if (options->GetOption("central_meridian") || options->GetOption("standard_parallel")) {
+-		options->Get(&cm,"central_meridian");
+-		if (verbose) _printLine_("  cm=" << cm);
+-		options->Get(&sp,"standard_parallel");
+-		if (verbose) _printLine_("  sp=" << sp);
+-	}
+-
+-	/*some checks*/
+-	if   (nx != ny){_error_("Must have same number of x[" << nx << "] and y[" << ny << "] coordinates.");}
+-	else            ncoord=nx;
+-	if (sgn != +1 && sgn != -1) _error_("Hemisphere sgn=" << sgn << " must be +1 (north) or -1 (south).");
+-	if (fabs(cm)      > 180.) _error_("Central meridian cm=" << cm << " must be between -180 (west) and +180 (east) degrees.");
+-	if (sp < 0. || sp >  90.) _error_("Standard parallel sp=" << sp << " must be between 0 and 90 degrees (in specified hemisphere).");
+-
+-	lat=(double*)mxMalloc(ncoord*sizeof(double));
+-	lon=(double*)mxMalloc(ncoord*sizeof(double));
+-
+-	/* Run core computations: */
+-	if (verbose) _printLine_("Calling core:");
+-	if (options->GetOption("central_meridian") && options->GetOption("standard_parallel"))
+-		iret=Xy2llx(lat,lon,x,y,ncoord,sgn,cm,sp);
+-	else
+-		iret=Xy2llx(lat,lon,x,y,ncoord,sgn);
+-
+-	/*Write data: */
+-	WriteData(LAT_OUT,lat,ncoord);
+-	WriteData(LON_OUT,lon,ncoord);
+-
+-	/*Clean-up*/
+-	delete options;
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/KMLMeshWrite/KMLMeshWrite.h
+===================================================================
+--- ../trunk-jpl/src/modules/KMLMeshWrite/KMLMeshWrite.h	(revision 13650)
++++ ../trunk-jpl/src/modules/KMLMeshWrite/KMLMeshWrite.h	(revision 13651)
+@@ -1,66 +0,0 @@
+-/*!\file KMLMeshWrite.h
+- * \brief: prototype for KML mesh writer mex module.
+- */
+-
+-#ifndef _KMLMESHWRITE_H
+-#define _KMLMESHWRITE_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "KMLMeshWrite"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define NAME          prhs[0]
+-#define NOTES         prhs[1]
+-#define ELEMHANDLE    prhs[2]
+-#define NODECONHANDLE prhs[3]
+-#define LATHANDLE     prhs[4]
+-#define LNGHANDLE     prhs[5]
+-#define PARTHANDLE    prhs[6]
+-#define DATAHANDLE    prhs[7]
+-#define CMAPHANDLE    prhs[8]
+-#define FILENAME      prhs[9]
+-/* serial output macros: */
+-#define ERRORFLAG (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define NAME          PyTuple_GetItem(args,0)
+-#define NOTES         PyTuple_GetItem(args,1)
+-#define ELEMHANDLE    PyTuple_GetItem(args,2)
+-#define NODECONHANDLE PyTuple_GetItem(args,3)
+-#define LATHANDLE     PyTuple_GetItem(args,4)
+-#define LNGHANDLE     PyTuple_GetItem(args,5)
+-#define PARTHANDLE    PyTuple_GetItem(args,6)
+-#define DATAHANDLE    PyTuple_GetItem(args,7)
+-#define CMAPHANDLE    PyTuple_GetItem(args,8)
+-#define FILENAME      PyTuple_GetItem(args,9)
+-/* serial output macros: */
+-#define ERRORFLAG output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NRHS
+-#define NRHS 10
+-#undef NLHS
+-#define NLHS  1
+-
+-#endif
+Index: ../trunk-jpl/src/modules/KMLMeshWrite/KMLMeshWrite.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/KMLMeshWrite/KMLMeshWrite.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/KMLMeshWrite/KMLMeshWrite.cpp	(revision 13651)
+@@ -1,148 +0,0 @@
+-/*\file KMLMeshWrite.c
+- *\brief: KML mesh writer module.
+- */
+-#include "./KMLMeshWrite.h"
+-
+-void KMLMeshWriteUsage(void){/*{{{*/
+-	_pprintLine_("KMLMeshWrite - KML mesh writer module:");
+-	_pprintLine_("");
+-	_pprintLine_("   This module writes the mesh of a model as KML polygons into the specified KML file.");
+-	_pprintLine_("");
+-	_pprintLine_("   Usage:");
+-	_pprintLine_("      ierror=KMLMeshWrite(name,notes,elem,nodecon,lat,long,part,data,cmap,kmlfile);");
+-	_pprintLine_("");
+-	_pprintLine_("      name       model name (string, may be empty)");
+-	_pprintLine_("      notes      model notes (string or cell array of strings, may be empty)");
+-	_pprintLine_("      elem       elements (double array)");
+-	_pprintLine_("      nodecon    nodal connectivity array (double array, may be empty)");
+-	_pprintLine_("      lat        nodal latititudes (double vector)");
+-	_pprintLine_("      long       nodal longitudes (double vector)");
+-	_pprintLine_("      part       nodal partitions (double vector, may be empty)");
+-	_pprintLine_("      data       nodal or element data (double vector, may be empty)");
+-	_pprintLine_("      cmap       color map (double nx3 array, may be empty)");
+-	_pprintLine_("      kmlfile    KML file name (string)");
+-	_pprintLine_("");
+-	_pprintLine_("      ierror     error flag (double, non-zero for error)");
+-	_pprintLine_("");
+-	_pprintLine_("   Example:");
+-	_pprintLine_("      KMLMeshWrite(md.name,md.notes,md.elements,md.nodeconnectivity,md.lat,md.long,md.part,md.fm_criterion,options.cmap,filekml);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(KMLMeshWrite){
+-
+-	int i,j,nnodes=0,verbose=1;
+-
+-	/*input: */
+-	char*   name=NULL;
+-	char*   notes=NULL;
+-	char*   notes2=NULL;
+-	const mxArray* notesi;
+-	mwIndex        nindex;
+-	int*    elem=NULL;
+-	int     melem=0,nelem=0;
+-	int*    nodecon=NULL;
+-	int     mncon=0,nncon=0;
+-	double* lat=NULL;
+-	int     mlat=0,nlat=0,llat=0;
+-	double* lng=NULL;
+-	int     mlng=0,nlng=0,llng=0;
+-	int     nparts=0;
+-	int*    part=NULL;
+-	int     mprt=0,nprt=0,lprt=0;
+-	double* data=NULL;
+-	int     mdata=0,ndata=0;
+-	double* cmap=NULL;
+-	int     mcmap=0,ncmap=0;
+-	char*   filnam=NULL;
+-	FILE*   fid=NULL;
+-	Options* options=NULL;
+-
+-	/* output: */
+-	int     ierror=0;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	if (nlhs > NLHS) {
+-		KMLMeshWriteUsage(); _error_("KMLMeshWrite usage error");
+-	}
+-	if (nrhs < NRHS) {
+-		KMLMeshWriteUsage(); _error_("KMLMeshWrite usage error");
+-	}
+-
+-	/*Input datasets: */
+-	FetchData(&name,NAME);
+-
+-/*  notes is typically a cell array of character strings  */
+-	if (mxIsCell(NOTES)) {
+-		for (nindex=0; nindex<mxGetNumberOfElements(NOTES); nindex++) {
+-			notesi=mxGetCell(NOTES,nindex);
+-			if (notesi && mxIsChar(notesi) && mxGetNumberOfElements(notesi)) {
+-				if (!notes) {
+-					notes=xNew<char>(mxGetNumberOfElements(notesi)+1);
+-					mxGetString(notesi,notes,mxGetNumberOfElements(notesi)+1);
+-				}
+-				else {
+-/*  note that strlen does not include trailing null  */
+-					notes2=xNew<char>(strlen(notes)+1+mxGetNumberOfElements(notesi)+1);
+-					memcpy(notes2,notes,(strlen(notes)+1)*sizeof(char));
+-					xDelete<char>(notes);
+-					notes=notes2;
+-					notes2=NULL;
+-//					notes=(char*)xrealloc(notes,(strlen(notes)+1+mxGetNumberOfElements(notesi)+1)*sizeof(char));
+-					strcat(notes,"\n");
+-					mxGetString(notesi,&notes[strlen(notes)],mxGetNumberOfElements(notesi)+1);
+-				}
+-			}
+-		}
+-	}
+-	else
+-		FetchData(&notes,NOTES);
+-	FetchData(&elem,&melem,&nelem,ELEMHANDLE);
+-	FetchData(&nodecon,&mncon,&nncon,NODECONHANDLE);
+-	FetchData(&lat,&mlat,&nlat,LATHANDLE);
+-	llat=mlat*nlat;
+-	FetchData(&lng,&mlng,&nlng,LNGHANDLE);
+-	llng=mlng*nlng;
+-	FetchData(&part,&mprt,&nprt,PARTHANDLE);
+-	lprt=mprt*nprt;
+-	FetchData(&data,&mdata,&ndata,DATAHANDLE);
+-	FetchData(&cmap,&mcmap,&ncmap,CMAPHANDLE);
+-	FetchData(&filnam,FILENAME);
+-	FetchData(&options,NRHS,nrhs,prhs);
+-
+-	/*some checks*/
+-	for (i=0; i<melem*nelem; i++) if(elem[i]>nnodes) nnodes=elem[i];
+-	if(part) for (i=0; i<lprt; i++) if (part[i]+1 > nparts) nparts=part[i]+1;
+-
+-	if (nodecon && (mncon != nnodes))
+-	  {_error_("Nodal connectivity table, if supplied, must be supplied for all nodes.");}
+-	else if (!nodecon)
+-		mncon=nnodes;
+-	if ((llat != nnodes) || (llng != nnodes) || (llat != llng))
+-		_error_("Latitude and longitude vectors must be supplied for all nodes.");
+-	if (part && (lprt != nnodes))
+-		_error_("Partitioning vector, if supplied, must be supplied for all nodes.");
+-	if (data && !((mdata == nnodes) || (mdata == melem)))
+-		_error_("Data matrix, if supplied, must be supplied for all nodes or all elements.");
+-	if (cmap && (ncmap != 3))
+-		_error_("Colormap matrix, if supplied, must have three columns for rgb.");
+-	if (!strlen(filnam))
+-		strcpy(filnam,"stdout");
+-
+-	/* Run core computations: */
+-	fid=fopen(filnam,"w");
+-	KMLMeshWritex(&ierror,name,notes,elem,melem,nelem,nodecon,mncon,nncon,lat,lng,part,data,mdata,ndata,cmap,mcmap,ncmap,fid);
+-	fclose(fid);
+-
+-	/*Write data: */
+-	WriteData(ERRORFLAG,ierror);
+-
+-	/*Clean-up*/
+-	delete options;
+-	if (mxIsCell(NOTES) && notes) xDelete<char>(notes);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/TriMesh/TriMesh.h
+===================================================================
+--- ../trunk-jpl/src/modules/TriMesh/TriMesh.h	(revision 13650)
++++ ../trunk-jpl/src/modules/TriMesh/TriMesh.h	(revision 13651)
+@@ -1,65 +0,0 @@
+-/*
+-	TriMesh.h
+-*/
+-
+-#ifndef _TRIMESH_H
+-#define _TRIMESH_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-/*Header files: */
+-#include "../../c/include/globals.h"
+-#include "../../c/toolkits/toolkits.h"
+-#include "../../c/include/include.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-#include "../../c/io/io.h"
+-#include "../../c/EnumDefinitions/EnumDefinitions.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "TriMesh"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define DOMAINOUTLINE  prhs[0]
+-#define RIFTSOUTLINE   prhs[1]
+-#define AREA           prhs[2]
+-/* serial output macros: */
+-#define INDEX             (mxArray**)&plhs[0]
+-#define X                 (mxArray**)&plhs[1]
+-#define Y                 (mxArray**)&plhs[2]
+-#define SEGMENTS          (mxArray**)&plhs[3]
+-#define SEGMENTMARKERLIST (mxArray**)&plhs[4]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define DOMAINOUTLINE PyTuple_GetItem(args,0)
+-#define RIFTSOUTLINE  PyTuple_GetItem(args,1)
+-#define AREA          PyTuple_GetItem(args,2)
+-/* serial output macros: */
+-#define INDEX             output,0
+-#define X                 output,1
+-#define Y                 output,2
+-#define SEGMENTS          output,3
+-#define SEGMENTMARKERLIST output,4
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  5
+-#undef NRHS
+-#define NRHS  3
+-
+-#endif  /* _TRIMESH_H */
+Index: ../trunk-jpl/src/modules/TriMesh/TriMesh.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/TriMesh/TriMesh.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/TriMesh/TriMesh.cpp	(revision 13651)
+@@ -1,62 +0,0 @@
+-/*
+- * TriMesh: mesh a domain using an .exp file
+- */
+-
+-#include "./TriMesh.h"
+-
+-void TriMeshUsage(void){/*{{{*/
+-	_printLine_("");
+-	_printLine_("   usage: [index,x,y,segments,segmentmarkers]=TriMesh(domainoutlinefilename,rifts,area) ");
+-	_printLine_("      where: index,x,y defines a triangulation, segments is an array made ");
+-	_printLine_("      of exterior segments to the mesh domain outline, segmentmarkers is an array flagging each segment, ");
+-	_printLine_("      outlinefilename an Argus domain outline file, ");
+-	_printLine_("      area is the maximum area desired for any element of the resulting mesh, ");
+-	_printLine_("");
+-}/*}}}*/
+-WRAPPER(TriMesh){
+-	
+-	/*intermediary: */
+-	double  area;
+-	DataSet *domain = NULL;
+-	DataSet *rifts  = NULL;
+-
+-	/* output: */
+-	SeqMat<double> *index             = NULL;
+-	SeqVec<double> *x                 = NULL;
+-	SeqVec<double> *y                 = NULL;
+-	SeqMat<double> *segments          = NULL;
+-	SeqVec<double> *segmentmarkerlist = NULL;
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments: */
+-	CHECKARGUMENTS(NLHS,NRHS,&TriMeshUsage);
+-	
+-	/*Fetch data needed for meshing: */
+-	FetchData(&domain,DOMAINOUTLINE);
+-	FetchData(&rifts,RIFTSOUTLINE);
+-	FetchData(&area,AREA);
+-
+-	/*call x core: */
+-	TriMeshx(&index,&x,&y,&segments,&segmentmarkerlist,domain,rifts,area);
+-
+-	/*write outputs: */
+-	WriteData(INDEX,index);
+-	WriteData(X,x);
+-	WriteData(Y,y);
+-	WriteData(SEGMENTS,segments);
+-	WriteData(SEGMENTMARKERLIST,segmentmarkerlist);
+-
+-	/*free ressources: */
+-	delete domain;
+-	delete rifts;
+-	delete index;
+-	delete x;
+-	delete y;
+-	delete segments;
+-	delete segmentmarkerlist;
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/modules/Chaco/Chaco.h
+===================================================================
+--- ../trunk-jpl/src/modules/Chaco/Chaco.h	(revision 13650)
++++ ../trunk-jpl/src/modules/Chaco/Chaco.h	(revision 13651)
+@@ -1,68 +0,0 @@
+-/*!\file:  Chaco.h
+- * \brief header file for Chaco module.
+- */ 
+-
+-#ifndef _CHACO_H
+-#define _CHACO_H
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*For python modules: needs to come before header files inclusion*/
+-#ifdef _HAVE_PYTHON_
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#endif
+-
+-/*headers*/
+-#include <stdio.h>
+-#include <string.h>    /*  strcasecmp  */
+-#include <time.h>      /*  clock,time,difftime  */
+-#include "../../c/include/globals.h"
+-#include "../../c/modules/modules.h"
+-#include "../../c/Container/Container.h"
+-#include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
+-
+-#undef __FUNCT__ 
+-#define __FUNCT__  "Chaco"
+-
+-#ifdef _HAVE_MATLAB_MODULES_
+-/* serial input macros: */
+-#define A_IN      prhs[0]
+-#define VWGTS_IN  prhs[1]
+-#define EWGTS_IN  prhs[2]
+-#define X_IN      prhs[3]
+-#define Y_IN      prhs[4]
+-#define Z_IN      prhs[5]
+-#define OPTNS_IN  prhs[6]
+-#define NPARTS_IN prhs[7]
+-#define GOAL_IN   prhs[8]
+-/* serial output macros: */
+-#define ASSGN_OUT (mxArray**)&plhs[0]
+-#endif
+-
+-#ifdef _HAVE_PYTHON_MODULES_
+-/* serial input macros: */
+-#define A_IN      PyTuple_GetItem(args,0)
+-#define VWGTS_IN  PyTuple_GetItem(args,1)
+-#define EWGTS_IN  PyTuple_GetItem(args,2)
+-#define X_IN      PyTuple_GetItem(args,3)
+-#define Y_IN      PyTuple_GetItem(args,4)
+-#define Z_IN      PyTuple_GetItem(args,5)
+-#define OPTNS_IN  PyTuple_GetItem(args,6)
+-#define NPARTS_IN PyTuple_GetItem(args,7)
+-#define GOAL_IN   PyTuple_GetItem(args,8)
+-/* serial output macros: */
+-#define ASSGN_OUT output,0
+-#endif
+-
+-/* serial arg counts: */
+-#undef NLHS
+-#define NLHS  1
+-#undef NRHS
+-#define NRHS  9
+-
+-#endif  /* _CHACO_H */
+Index: ../trunk-jpl/src/modules/Chaco/Chaco.cpp
+===================================================================
+--- ../trunk-jpl/src/modules/Chaco/Chaco.cpp	(revision 13650)
++++ ../trunk-jpl/src/modules/Chaco/Chaco.cpp	(revision 13651)
+@@ -1,135 +0,0 @@
+-/*\file Chaco.c
+- *\brief:  Chaco partitioner mex module
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-#include "config.h"
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./Chaco.h"
+-
+-void ChacoUsage(void){/*{{{*/
+-	_pprintLine_("");
+-	_pprintLine_("Usage: [assgn] = Chaco(A,vwgts,ewgts,x,y,z,options,nparts,goal);");
+-	_pprintLine_("");
+-}/*}}}*/
+-WRAPPER(Chaco){
+-   
+-	int i;
+-	int nterms;
+-
+-	/*Inputs: */
+-	int     nvtxs;               /* number of vertices in graph           */
+-	int    *start;               /* start of edge list for each vertex    */
+-	int    *adjacency;           /* edge list data                        */
+-	int    *vwgts       = NULL;  /* weights for all vertices              */
+-	int     nedges;
+-	float  *ewgts       = NULL;  /* weights for all edges                 */
+-	float  *x           = NULL;
+-	float  *y           = NULL;
+-	float  *z           = NULL;  /* coordinates for inertial method       */
+-	double  options[10] = {1,1,0,0,1,1,50,0,.001,7654321}; /* architecture and partitioning options */
+-	double *in_options  = NULL;
+-	int    *nparts      = NULL;   /* number of parts options               */
+-	int     npart;
+-	double *goal        = NULL;   /* desired set sizes                     */
+-
+-	/*intermediary pointers: */
+-	mwIndex *mwstart, *mwadjacency;
+-	double  *doublepointer;
+-
+-	/*output: */
+-   short  *assignment       = NULL; /* set number of each vtx (length nvtxs+1)                */
+-   double *doubleassignment = NULL; /*holds assignment, in double format, to return to matlab */
+-
+-	#ifndef _HAVE_CHACO_ //only works if dakota library has been compiled in.
+-	_error_("Chaco not available! Cannot carry out Chaco partitioning!");
+-	#endif
+-
+-	/*Boot module: */
+-	MODULEBOOT();
+-
+-	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&ChacoUsage);
+-
+-	/*Fetch adjacency matrix: */
+-	nvtxs = mxGetN(A_IN);
+-	mwstart = mxGetJc(A_IN);
+-	start=xNew<int>((nvtxs+1));
+-	for (i=0; i<nvtxs+1;i++)start[i]=(int)mwstart[i];
+-
+-	mwadjacency = mxGetIr(A_IN);
+-	adjacency = xNew<int>(mxGetNzmax(A_IN));
+-	for (i=0; i<mxGetNzmax(A_IN); i++) adjacency[i]= (int)mwadjacency[i];
+-
+-	nedges = start[nvtxs];
+-	if(!mxIsEmpty(EWGTS_IN)){
+-		ewgts = xNewZeroInit<float>(nedges);
+-		doublepointer=mxGetPr(A_IN);
+-		for (i = 0; i < nedges; i++)ewgts[i] = (float)doublepointer[i];
+-	}
+-	else ewgts=NULL;
+-
+-	/*Fetch rest of data: */
+-	FetchData(&vwgts,&nterms,VWGTS_IN); 
+-	FetchData(&x,&nterms,X_IN); 
+-	FetchData(&y,&nterms,Y_IN); 
+-	FetchData(&z,&nterms,Z_IN); 
+-	FetchData(&in_options,&nterms,OPTNS_IN); 
+-	for (i=0;i<(nterms<10?nterms:10);i++) options[i]=in_options[i]; //copy in_options into default options
+-	FetchData(&npart,NPARTS_IN); 
+-	nparts=xNew<int>(1); nparts[0]=npart; //weird Chacox interface ain't it?
+-	FetchData(&goal,&nterms,GOAL_IN); 
+-	
+-	/*Some debugging print: {{{*/
+-	#ifdef _DEBUG_
+-	_printLine_("nvtxs: " << nvtxs);
+-	_printString_("options: [");
+-	for(i=0;i<10;i++)_printString_(options[i] << "|");
+-	_printLine_("]");
+-	_printLine_("start: ");
+-	for (i=0; i<nvtxs+1;i++)_printString_(start[i] << " ");
+-	_printLine_("");
+-	_printLine_("adjacency: ");
+-	for (i=0; i<mxGetNzmax(A_IN);i++)_printString_("" <<adjacency[i]<< " ");i++)
+-	_printLine_("");
+-	_printLine_("nedges: " << nedges << " " << ewgts);
+-	if(ewgts) for (i = 0; i < nedges; i++)_printString_(ewgts[i] << " ");
+-	_printLine_("");
+-	_printLine_("vwgts:");
+-	for (i = 0; i < nvtxs; i++)_printString_(vwgts[i] << " ");
+-	_printLine_("");
+-	_printLine_("nparts: " << nparts[0]);
+-	_printLine_("goal: " << goal);
+-	#endif
+-	/*}}}*/
+-	
+-	/*Allocate output: */
+-	assignment = xNewZeroInit<short>(nvtxs);
+-	
+-    /*Call core: */
+-	Chacox(nvtxs, start, adjacency, vwgts, ewgts, x, y, z, assignment, options, nparts, goal);
+-
+-    /*Output data: */
+-	doubleassignment=xNew<double>(nvtxs);
+-	for(i=0;i<nvtxs;i++) doubleassignment[i]=(double)assignment[i];
+-	WriteData(ASSGN_OUT,doubleassignment,nvtxs);
+-
+-	/*Free ressources:*/
+-	xDelete<short>(assignment); 
+-	xDelete<double>(goal);
+-	xDelete<int>(nparts);
+-	xDelete<float>(z);
+-	xDelete<float>(y);
+-	xDelete<float>(x);
+-	xDelete<float>(ewgts);
+-	xDelete<int>(vwgts);
+-	xDelete<int>(adjacency);
+-	xDelete<int>(start);
+-	xDelete<double>(doubleassignment);
+-
+-	/*end module: */
+-	MODULEEND();
+-}
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 0)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13651)
+@@ -0,0 +1,104 @@
++AM_CPPFLAGS = @DAKOTAINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @BOOSTINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@
++
++EXEEXT=$(PYTHONWRAPPEREXT)
++
++#Modules {{{
++if MODULES
++lib_LTLIBRARIES = BamgConvertMesh.la\
++						BamgMesher.la\
++						ContourToMesh.la\
++						ContourToNodes.la\
++						ElementConnectivity.la\
++						EnumToString.la\
++						InterpFromMeshToMesh2d.la\
++						NodeConnectivity.la\
++						StringToEnum.la\
++						TriMesh.la\
++						TriMeshProcessRifts.la
++endif 
++#}}}
++#Flags and libraries {{{
++if SHAREDLIBS
++deps = ../../c/libISSMCore.la ../../c/libISSMModules.la
++else
++deps = ../../c/libISSMCore.a ../../c/libISSMModules.a
++endif
++
++deps +=  $(MATHLIB) ${PYTHONLIB}
++
++#Triangle library
++AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER
++
++#Python part
++AM_LDFLAGS   = $(PYTHONLINK) -shrext ${EXEEXT} -module
++if VERSION
++AM_LDFLAGS +=
++else
++AM_LDFLAGS += -avoid-version
++endif
++if SHAREDLIBS
++deps += ../../c/libISSMPython.la 
++else
++deps += ../../c/libISSMPython.a
++AM_LDFLAGS += --no-warnings 
++endif
++
++AM_CXXFLAGS +=  -D_HAVE_PYTHON_MODULES_  -fPIC
++if PYTHON3
++AM_CXXFLAGS +=  -DNPY_NO_DEPRECATED_API 
++endif
++
++if SHAREDLIBS
++deps +=
++else
++deps += ../../c/libISSMModules.a ../../c/libISSMCore.a
++endif
++
++#Optimization flags:
++AM_CXXFLAGS += $(CXXOPTFLAGS) 
++#}}}
++#Bin sources {{{
++BamgConvertMesh_la_SOURCES = ../BamgConvertMesh/BamgConvertMesh.cpp\
++									  ../BamgConvertMesh/BamgConvertMesh.h
++BamgConvertMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++BamgMesher_la_SOURCES = ../BamgMesher/BamgMesher.cpp\
++								../BamgMesher/BamgMesher.h
++BamgMesher_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++ContourToMesh_la_SOURCES = ../ContourToMesh/ContourToMesh.cpp\
++									 ../ContourToMesh/ContourToMesh.h
++ContourToMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++ContourToNodes_la_SOURCES = ../ContourToNodes/ContourToNodes.cpp\
++									 ../ContourToNodes/ContourToNodes.h
++ContourToNodes_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++ElementConnectivity_la_SOURCES = ../ElementConnectivity/ElementConnectivity.cpp\
++											../ElementConnectivity/ElementConnectivity.h
++ElementConnectivity_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++EnumToString_la_SOURCES = ../EnumToString/EnumToString.cpp\
++								  ../EnumToString/EnumToString.h
++EnumToString_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++InterpFromMeshToMesh2d_la_SOURCES = ../InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp\
++												../InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h
++InterpFromMeshToMesh2d_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
++
++NodeConnectivity_la_SOURCES = ../NodeConnectivity/NodeConnectivity.cpp\
++										../NodeConnectivity/NodeConnectivity.h
++NodeConnectivity_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++StringToEnum_la_SOURCES = ../StringToEnum/StringToEnum.cpp\
++								  ../StringToEnum/StringToEnum.h
++StringToEnum_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++TriMesh_la_SOURCES = ../TriMesh/TriMesh.cpp\
++							../TriMesh/TriMesh.h
++TriMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(TRIANGLELIB)
++
++TriMeshProcessRifts_la_SOURCES = ../TriMeshProcessRifts/TriMeshProcessRifts.cpp\
++											../TriMeshProcessRifts/TriMeshProcessRifts.h
++TriMeshProcessRifts_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++#}}}
+Index: ../trunk-jpl/src/wrappers/python
+===================================================================
+--- ../trunk-jpl/src/wrappers/python	(revision 13650)
++++ ../trunk-jpl/src/wrappers/python	(revision 13651)
+
+Property changes on: ../trunk-jpl/src/wrappers/python
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,3 ##
++*.deps
++Makefile.in
++Makefile
+Index: ../trunk-jpl/src/wrappers/Scotch/Scotch.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/Scotch/Scotch.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/Scotch/Scotch.cpp	(revision 13651)
+@@ -0,0 +1,249 @@
++/*\file Scotch.c
++ *\brief:  Scotch partitioner mex module
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++#include "./Scotch.h"
++
++void GmapUsage(void){/*{{{*/
++	mexPrintf("\n");
++	mexPrintf("Usage: [maptab]=Scotch(adjmat,vertlb,vertwt,edgewt,archtyp,archpar,\n");
++	mexPrintf("                         Scotch-specific parameters);\n");
++	mexPrintf("\n");
++}/*}}}*/
++void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
++
++	#ifndef _HAVE_SCOTCH_ //only works if scotch library has been compiled in.
++	_error_("Scotch not available! Cannot carry out Scotch partitioning!");
++	#else
++
++	int     argcm;
++	char    **argvm=NULL;
++	int     nvert =0,nedge2=0,napar =0;
++	mwIndex *ir=NULL,*jc=NULL;
++	int     *adjir=NULL,*adjjc=NULL;
++	double  *vld=NULL,*vwd=NULL,*ewd=NULL,*apd=NULL;
++	int     *vli=NULL,*vwi=NULL,*ewi=NULL,*api=NULL;
++	char    *archtyp=NULL;
++	int     (*maptabi)[2]=NULL;
++	double* maptabd=NULL;
++	int     i,j,k,imi=0,imo=0,isi=0,ierr;
++
++	/* Check for proper number of arguments */
++   
++	if (nrhs == 0 && nlhs == 0) {
++		GmapUsage();
++		return;
++	}
++	else if (nrhs <  6 || nlhs >  1) {
++		GmapUsage();
++		mexErrMsgTxt(" ");
++	}
++
++/*  load matlab argument list and convert to integer (note that converting here
++	and in the x-layer is inefficient, but it makes the x-layer more general)  */
++
++	argvm = (char **) calloc(nrhs,sizeof(char *));
++
++	if (!(mxIsNumeric(prhs[imi]) &&
++		  (mxGetM(prhs[imi]) == 1 && mxGetN(prhs[imi]) == 1))) {
++		argvm[isi] = (char *) calloc(4+1,sizeof(char));
++		strcpy(argvm[isi],"gmap");
++		mexPrintf("%s -- Using \"%s\" entry point.\n",
++				  __FUNCT__,argvm[isi]);
++		isi++;
++	}
++	else {
++		argvm[isi] = (char *) calloc(5+1,sizeof(char));
++		strcpy(argvm[isi],"gpart");
++		mexPrintf("%s -- Using \"%s\" entry point.\n",
++				  __FUNCT__,argvm[isi]);
++		isi++;
++
++		argvm[isi] = (char *) calloc(17,sizeof(char));
++		sprintf(argvm[isi],"%d",(int)mxGetScalar(prhs[imi]));
++		mexPrintf("%s -- Number of parts is %s.\n",
++				  __FUNCT__,argvm[isi]);
++		isi++;
++		imi++;
++	}
++
++	if (!mxIsNumeric(prhs[imi]) || (!mxIsEmpty(prhs[imi]) && !mxIsSparse(prhs[imi]))) {
++		mexPrintf("%s -- Adjacency matrix must be numeric and sparse.\n",__FUNCT__);
++		mexErrMsgTxt(" ");
++	}
++	else {
++		nvert =mxGetM(prhs[imi]);
++		nedge2=mxGetNzmax(prhs[imi]);
++		if (mxGetNzmax(prhs[imi])) {
++			ir    =mxGetIr(prhs[imi]);
++			adjir = (int *) malloc(mxGetNzmax(prhs[imi])*sizeof(int));
++			for (i=0; i<mxGetNzmax(prhs[imi]); i++)
++				adjir[i]=(int)ir[i];
++		}
++		if (mxGetN(prhs[imi])) {
++			jc    =mxGetJc(prhs[imi]);
++			adjjc = (int *) malloc((mxGetN(prhs[imi])+1)*sizeof(int));
++			for (i=0; i<(mxGetN(prhs[imi])+1); i++)
++				adjjc[i]=(int)jc[i];
++		}
++		mexPrintf("%s -- Adjacency matrix is of size %d by %d with %d non-zeroes.\n",
++				  __FUNCT__,mxGetM(prhs[imi]),mxGetN(prhs[imi]),mxGetNzmax(prhs[imi]));
++	}
++	imi++;
++
++	if (!mxIsNumeric(prhs[imi])) {
++		mexPrintf("%s -- Vertex label vector must be numeric.\n",__FUNCT__);
++		mexErrMsgTxt(" ");
++	}
++	else {
++		if (mxGetM(prhs[imi])*mxGetN(prhs[imi])) {
++			vld=mxGetPr(prhs[imi]);
++			vli = (int *) malloc(mxGetM(prhs[imi])*mxGetN(prhs[imi])*sizeof(int));
++			for (i=0; i<mxGetM(prhs[imi])*mxGetN(prhs[imi]); i++)
++				vli[i]=(int)vld[i];
++		}
++		mexPrintf("%s -- Vertex label vector is of size %d by %d.\n",
++				  __FUNCT__,mxGetM(prhs[imi]),mxGetN(prhs[imi]));
++	}
++	imi++;
++
++	if (!mxIsNumeric(prhs[imi])) {
++		mexPrintf("%s -- Vertex weight vector must be numeric.\n",__FUNCT__);
++		mexErrMsgTxt(" ");
++	}
++	else {
++		if (mxGetM(prhs[imi])*mxGetN(prhs[imi])) {
++			vwd=mxGetPr(prhs[imi]);
++			vwi = (int *) malloc(mxGetM(prhs[imi])*mxGetN(prhs[imi])*sizeof(int));
++			for (i=0; i<mxGetM(prhs[imi])*mxGetN(prhs[imi]); i++)
++				vwi[i]=(int)vwd[i];
++		}
++		mexPrintf("%s -- Vertex weight vector is of size %d by %d.\n",
++				  __FUNCT__,mxGetM(prhs[imi]),mxGetN(prhs[imi]));
++	}
++	imi++;
++
++	if (!mxIsNumeric(prhs[imi]) || (!mxIsEmpty(prhs[imi]) && !mxIsSparse(prhs[imi]))) {
++		mexPrintf("%s -- Edge weight matrix must be numeric and sparse.\n",__FUNCT__);
++		mexErrMsgTxt(" ");
++	}
++	else {
++		if (mxGetM(prhs[imi])) {
++			ewd=mxGetPr(prhs[imi]);
++			ewi = (int *) malloc(mxGetM(prhs[imi])*sizeof(int));
++			for (i=0; i<mxGetNzmax(prhs[imi]); i++)
++				ewi[i]=(int)ewd[i];
++		}
++		mexPrintf("%s -- Edge weight matrix is of size %d by %d with %d non-zeroes.\n",
++				  __FUNCT__,mxGetM(prhs[imi]),mxGetN(prhs[imi]),mxGetNzmax(prhs[imi]));
++	}
++	imi++;
++
++	if (!((strlen (argvm[0]) >= 5) &&
++		  (strncmp (argvm[0] + strlen (argvm[0]) - 5, "gpart", 5) == 0))) {
++		if (!mxIsChar(prhs[imi])) {
++			mexPrintf("%s -- Architecture type must be character.\n",__FUNCT__);
++			mexErrMsgTxt(" ");
++		}
++		else {
++			if (mxGetM(prhs[imi])*mxGetN(prhs[imi])) {
++				archtyp = (char *) calloc(mxGetM(prhs[imi])*mxGetN(prhs[imi])+1,sizeof(char));
++				mxGetString(prhs[imi],archtyp,mxGetM(prhs[imi])*mxGetN(prhs[imi])+1);
++			}
++			mexPrintf("%s -- Architecture type is \"%s\".\n",
++					  __FUNCT__,archtyp);
++		}
++		imi++;
++
++		if (!mxIsNumeric(prhs[imi])) {
++			mexPrintf("%s -- Architecture parameter vector must be numeric.\n",__FUNCT__);
++			mexErrMsgTxt(" ");
++		}
++		else {
++			napar =mxGetM(prhs[imi])*mxGetN(prhs[imi]);
++			if (mxGetM(prhs[imi])*mxGetN(prhs[imi])) {
++				apd=mxGetPr(prhs[imi]);
++				api = (int *) malloc(mxGetM(prhs[imi])*mxGetN(prhs[imi])*sizeof(int));
++				for (i=0; i<mxGetM(prhs[imi])*mxGetN(prhs[imi]); i++)
++					api[i]=(int)apd[i];
++			}
++			mexPrintf("%s -- Architecture parameter vector is of size %d by %d.\n",
++					  __FUNCT__,mxGetM(prhs[imi]),mxGetN(prhs[imi]));
++		}
++		imi++;
++	}
++
++	while (imi < nrhs) {
++		if (!mxIsChar(prhs[imi])) {
++			mexPrintf("%s -- prhs[%d] must be character.\n",__FUNCT__,imi);
++			mexErrMsgTxt(" ");
++		}
++		else {
++			argvm[isi] = (char *) calloc(mxGetM(prhs[imi])*mxGetN(prhs[imi])+1,sizeof(char));
++			mxGetString(prhs[imi],argvm[isi],mxGetM(prhs[imi])*mxGetN(prhs[imi])+1);
++		}
++		isi++;
++		imi++;
++	}
++	argcm=isi;
++	mexPrintf("argcm=%d\n",argcm);
++	for (i=0; i<argcm; i++)
++		mexPrintf("argvm[%d]=\"%s\"\n",i,argvm[i]);
++
++	/* Do the actual computations in a subroutine */
++
++	mexPrintf("Gmapx:\n");
++	ierr=gmapx(&maptabi,
++			   argcm,
++			   argvm,
++			   nvert,
++			   nedge2,
++			   adjir,
++			   adjjc,
++			   vli,
++			   vwi,
++			   ewi,
++			   archtyp,
++			   napar,
++			   api);
++	mexPrintf("%s -- Error %d from Gmapx.\n",__FUNCT__,ierr);
++
++/*  for (i=0; i<nvert; i++)
++		mexPrintf("maptabi[%d][0]=%d, maptabi[%d][1]=%d\n",
++			 	  i,maptabi[i][0],i,maptabi[i][1]); */
++
++	/* Create matrices for the return arguments */
++
++	if (maptabi) {
++		plhs[imo]=mxCreateDoubleMatrix(nvert, 2, mxREAL);
++		maptabd = mxGetPr(plhs[imo]);
++		k=0;
++		for (j=0; j<2; j++)
++			for (i=0; i<nvert; i++)
++				maptabd[k++]=(double)maptabi[i][j];
++		//free(maptabi);
++	}
++	else {
++		plhs[imo]=mxCreateDoubleMatrix(0, 2, mxREAL);
++	}
++	imo++;
++
++	/*if (argvm)
++		for (i=argcm-1; i>=0; i--)
++			free(argvm[i]);
++	if (api)     free(api);
++	if (archtyp) free(archtyp);
++	if (ewi)     free(ewi);
++	if (vwi)     free(vwi);
++	if (vli)     free(vli);
++	if (adjjc)   free(adjjc);
++	if (adjir)   free(adjir);*/
++
++	return;
++#endif //#ifndef _HAVE_SCOTCH_
++}
+Index: ../trunk-jpl/src/wrappers/Scotch/Scotch.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Scotch/Scotch.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/Scotch/Scotch.h	(revision 13651)
+@@ -0,0 +1,35 @@
++/*!\file:  Scotch.h
++ * \brief header file for Scotch module.
++ */ 
++
++#ifndef _SCOTCH_H
++#define _SCOTCH_H
++
++#include <stdio.h>
++#include <string.h>    /*  strcasecmp  */
++#include <time.h>      /*  clock,time,difftime  */
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++    
++#undef __FUNCT__ 
++#define __FUNCT__  "Scotch"
++
++/*  Scotch structures and prototypes  */
++#ifdef MATLAB
++#include "mat.h"
++#include "mex.h"
++#include "matrix.h"
++
++#define printf mexPrintf
++#define fprintf(file,...) (file == stdout || file == stderr ? mexPrintf(__VA_ARGS__) : fprintf(file,__VA_ARGS__))
++#define malloc mxMalloc
++#define calloc mxCalloc
++#define realloc mxRealloc
++#define free mxFree
++#define exit(status) mexErrMsgTxt("exit=" #status)
++#endif
++
++#endif  /* _SCOTCH_H */
+Index: ../trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.cpp	(revision 13651)
+@@ -0,0 +1,41 @@
++/*\file NodeConnectivity.c
++ *\brief: build node connectivity from elements. 
++ */
++
++#include "./NodeConnectivity.h"
++
++void NodeConnectivityUsage(void){/*{{{*/
++	_pprintLine_("");
++	_pprintLine_("   usage: connectivity = " << __FUNCT__ << "(elements, numnodes);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(NodeConnectivity){
++
++	/*inputs: */
++	double* elements=NULL;
++	int     nel;
++	int     nods;
++
++	/*outputs: */
++	double* connectivity=NULL;
++	int     width;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments: */
++	CHECKARGUMENTS(NLHS,NRHS,&NodeConnectivityUsage);
++        
++	/*Input datasets: */
++	FetchData(&elements,&nel,NULL,ELEMENTS);
++	FetchData(&nods,NUMNODES);
++
++	/*!Generate internal degree of freedom numbers: */
++	NodeConnectivityx(&connectivity, &width,elements,nel, nods);
++
++	/*write output datasets: */
++	WriteData(CONNECTIVITY,connectivity,nods,width);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.h	(revision 13651)
+@@ -0,0 +1,55 @@
++/*
++	NodeConnectivity.h
++*/
++
++#ifndef _NODECONNECTIVITY_H
++#define _NODECONNECTIVITY_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#undef __FUNCT__ 
++#define __FUNCT__  "NodeConnectivity"
++
++/*Header files: */
++#include "../../c/include/globals.h"
++#include "../../c/toolkits/toolkits.h"
++#include "../../c/include/include.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++#include "../../c/io/io.h"
++#include "../../c/EnumDefinitions/EnumDefinitions.h"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define ELEMENTS prhs[0]
++#define NUMNODES prhs[1]
++/* serial output macros: */
++#define CONNECTIVITY (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define ELEMENTS PyTuple_GetItem(args,0)
++#define NUMNODES PyTuple_GetItem(args,1)
++/* serial output macros: */
++#define CONNECTIVITY output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  2
++
++#endif  /* _NODECONNECTIVITY_H */
+Index: ../trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.cpp	(revision 13651)
+@@ -0,0 +1,61 @@
++/*\file BamgConvertMesh.c
++ *\brief: bamg module.
++ */
++#include "./BamgConvertMesh.h"
++
++void BamgConvertMeshUsage(void){/*{{{*/
++	_pprintString_("BAMGCONVERTMESH - convert [x y index] to a bamg geom and mesh geom");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("      [bamggeom bamgmesh]=BamgConvertMesh(index,x,y);");
++	_pprintLine_("      index: index of the mesh");
++	_pprintLine_("      x,y: coordinates of the nodes");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(BamgConvertMesh){
++
++	/*input: */
++	int    *index      = NULL;
++	double *x          = NULL;
++	double *y          = NULL;
++	int     nods,nels,test1,test2;
++
++	/*Output*/
++	BamgMesh *bamgmesh = NULL;
++	BamgGeom *bamggeom = NULL;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CHECKARGUMENTS(NLHS,NRHS,&BamgConvertMeshUsage);
++
++	/*Initialize Bamg outputs*/
++	bamggeom=new BamgGeom();
++	bamgmesh=new BamgMesh();
++
++	/*Input datasets: */
++	FetchData(&index,&nels,&test1,INDEXHANDLE);
++	FetchData(&x,&nods,XHANDLE);
++	FetchData(&y,&test2,YHANDLE);
++
++	/*Check inputs*/
++	if(nels<0) _error_("Number of elements must be positive, check index number of lines");
++	if(nods<0) _error_("Number of nods must be positive, check x and y sizes");
++	if(test1!=3) _error_("index should have 3 columns");
++	if(test2!=nods) _error_("x and y do not have the same length");
++
++	/* Run core computations: */
++	BamgConvertMeshx(bamgmesh,bamggeom,index,x,y,nods,nels);
++
++	/*Generate output Matlab Structures*/
++	WriteData(BAMGGEOMOUT,bamggeom);
++	WriteData(BAMGMESHOUT,bamgmesh);
++
++	/*Clean up*/
++	delete bamggeom;
++	delete bamgmesh;
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.h	(revision 13651)
+@@ -0,0 +1,55 @@
++/*!\file BamgConvertMesh.h
++ * \brief: prototype for Data Interpolation mex module.
++ */
++
++#ifndef _BAMGCONVERTMESH_H
++#define _BAMGCONVERTMESH_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++#include "../../c/io/io.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "BamgConvertMesh"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define INDEXHANDLE prhs[0]
++#define XHANDLE     prhs[1]
++#define YHANDLE     prhs[2]
++/* serial output macros: */
++#define BAMGMESHOUT    (mxArray**)&plhs[0]
++#define BAMGGEOMOUT    (mxArray**)&plhs[1]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define INDEXHANDLE PyTuple_GetItem(args,0)
++#define XHANDLE     PyTuple_GetItem(args,1)
++#define YHANDLE     PyTuple_GetItem(args,2)
++/* serial output macros: */
++#define BAMGMESHOUT    output,0
++#define BAMGGEOMOUT    output,1
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  2
++#undef NRHS
++#define NRHS  3
++
++#endif
+Index: ../trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.cpp	(revision 13651)
+@@ -0,0 +1,133 @@
++/*\file KMLOverlay.c
++ *\brief: KML file overlay mex module.
++ */
++#include "./KMLOverlay.h"
++
++void KMLOverlayUsage(void){/*{{{*/
++	_pprintLine_("KMLOverlay - KML file overlay module:");
++	_pprintLine_("");
++	_pprintLine_("   This module reads a list of image files and writes a KML or KMZ overlay file.");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("      ierror=KMLOverlay(kmlfile,'param name',param,...);");
++	_pprintLine_("");
++	_pprintLine_("      kmlfile     KML or KMZ file name (string)");
++	_pprintLine_("");
++	_pprintLine_("      lataxis     latitude axis (double vector [south north], required)");
++	_pprintLine_("      longaxis    longitude axis (double vector [west east], required)");
++	_pprintLine_("      images      relative or http image file names (string or array of strings or cell array of strings, required)");
++	_pprintLine_("      zip         flag to zip the doc.kml and image files into kmzfile (double, non-zero for kmz)");
++	_pprintLine_("");
++	_pprintLine_("      ierror     error flag (double, non-zero for error)");
++	_pprintLine_("");
++	_pprintLine_("   Example:");
++	_pprintLine_("      KMLOverlay(kmlfile,'lataxis',[south north],'longaxis',[west east],'images',{'file1.png','http://issm/file2.png'},'zip',1);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(KMLOverlay){
++
++	int i,verbose=1;
++
++	/*input: */
++	char*   filkml=NULL;
++	char*   filkmz=NULL;
++
++	FILE*   fid=NULL;
++
++	Options* options=NULL;
++	int      nlat=0,nlong=0;
++	double*  lataxis =NULL;
++	double*  longaxis=NULL;
++	int      nimages=0;
++	char**   pimages=NULL;
++	double   dzip=0;
++	char*    czip=NULL;
++
++	/* output: */
++	int     ierror=0;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	if(nlhs>NLHS){
++		KMLOverlayUsage(); _error_("KMLOverlay usage error");
++	}
++	if(nrhs<NRHS){
++		KMLOverlayUsage(); _error_("KMLOverlay usage error");
++	}
++
++	/*Input datasets: */
++	FetchData(&filkml,FILENAME);
++	FetchData(&options,NRHS,nrhs,prhs);
++
++	options->Get(&lataxis ,&nlat ,(char*)"lataxis");
++	if (verbose && lataxis) for (i=0; i<nlat; i++) _printLine_("  lataxis [" << i << "]=" << lataxis[i]);
++	options->Get(&longaxis,&nlong,(char*)"longaxis");
++	if (verbose && longaxis) for (i=0; i<nlong; i++) _printLine_("  longaxis[" << i << "]=" << longaxis[i]);
++	options->Get(&pimages,&nimages,(char*)"images");
++	if (verbose && pimages) for (i=0; i<nimages; i++) _printLine_("  pimages[" << i << "]=\"" << pimages[i] << "\"");
++	options->Get(&dzip,(char*)"zip",0.);
++	if (verbose) _printLine_("  dzip=" << dzip);
++
++	/*some checks*/
++	if (nlat !=2) _error_("Latitudinal axes \"lataxis\" require two double values, not " << nlat << ".");
++	if (nlong!=2) _error_("Longitudinal axes \"longaxis\" require two double values, not " << nlong << ".");
++	if (!nimages) _error_("No image files provided.");
++
++	if ((int)dzip){
++		filkmz=filkml;
++		filkml=(char*)mxMalloc(8*sizeof(char));
++		strcpy(filkml,"doc.kml");
++	}
++
++	if(!strlen(filkml)) strcpy(filkml,"stdout");
++
++	if(verbose) _printLine_("Opening kml overlay file \"" << filkml << "\".");
++	fid=fopen(filkml,"w");
++
++	/* Run core computations: */
++	if (verbose) _printLine_("Calling core:");
++	KMLOverlayx(&ierror,lataxis,longaxis,nimages,pimages,fid);
++
++	if (verbose) _printLine_("Closing file \"" << filkml << "\".");
++	fclose(fid);
++
++	/* Create kmz file, if specified: */
++	if ((int)dzip) {
++		czip=(char*)mxMalloc((5+strlen(filkmz)+1+strlen(filkml)+1)*sizeof(char));
++		czip[0]='\0';
++		strcat(czip,"!zip ");
++		strcat(czip,filkmz);
++		strcat(czip," ");
++		strcat(czip,filkml);
++		for (i=0; i<nimages; i++)
++			if (strlen(pimages[i]) && strncmp(pimages[i],"http",4)) {
++				czip=(char*)mxRealloc(czip,(strlen(czip)+1+strlen(pimages[i])+1)*sizeof(char));
++				strcat(czip," ");
++				strcat(czip,pimages[i]);
++			}
++		if (verbose) _printLine_("Zipping file \"" << filkmz << "\".");
++		if (verbose) _printLine_(czip);
++
++		if (mexEvalString(czip)) _error_("Error zipping file \"" << filkmz << "\".");
++		xDelete<char>(czip);
++		xDelete<char>(filkmz);
++	}
++
++	/*Write data: */
++	WriteData(ERRORFLAG,ierror);
++
++	/*Clean-up*/
++	if (pimages) {
++		for (i=nimages; i>0; i--) xDelete<char>(pimages[i-1]);
++		xDelete<char*>(pimages);
++	}
++	xDelete<double>(longaxis);
++	xDelete<double>(lataxis);
++	xDelete<char>(filkml);
++	delete options;
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.h	(revision 13651)
+@@ -0,0 +1,48 @@
++/*!\file KMLOverlay.h
++ * \brief: prototype for KML file overlay mex module.
++ */
++
++#ifndef _KMLOVERLAY_H
++#define _KMLOVERLAY_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "KMLOverlay"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define FILENAME  prhs[0]
++/* serial output macros: */
++#define ERRORFLAG (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define FILENAME  PyTuple_GetItem(args,0)
++/* serial output macros: */
++#define ERRORFLAG output,0
++#endif
++
++/* serial arg counts: */
++#undef NRHS
++#define NRHS  1
++#undef NLHS
++#define NLHS  1
++
++#endif
+Index: ../trunk-jpl/src/wrappers/ContourToNodes/.dirstamp
+===================================================================
+Index: ../trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.cpp	(revision 13651)
+@@ -0,0 +1,49 @@
++/*! \file  ContourtoNodes
++    \brief: takes a  contour file, and figures out which nodes  (x,y list)
++*/
++	
++#include "./ContourToNodes.h"
++
++void ContourToNodesUsage(void){/*{{{*/
++	_printLine_("   usage:");
++	_printLine_("   [flags]=ContourToNodes(x,y,contourname,edgevalue);\n");
++	_printLine_("   where:");
++	_printLine_("      x,y: list of nodes.");
++	_printLine_("      contourname: name of .exp file containing the contours, or resulting structure from call to expread.");
++	_printLine_("      edgevalue: integer (0, 1 or 2) defining the value associated to the nodes on the edges of the polygons.");
++	_printLine_("      flags: vector of flags (0 or 1), of size nods.");
++	_printLine_("");
++}/*}}}*/
++WRAPPER(ContourToNodes){
++
++	/* input: */
++	int      edgevalue,nods;
++	double  *x           = NULL;
++	double  *y           = NULL;
++	char    *contourname = NULL;
++	DataSet *contours    = NULL;
++
++	/* output: */
++	SeqVec<double> *flags = NULL;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CHECKARGUMENTS(NLHS,NRHS,&ContourToNodesUsage);
++	
++	/*Fetch inputs: */
++	FetchData(&x,&nods,NULL,XHANDLE);
++	FetchData(&y,NULL,NULL,YHANDLE);
++	FetchData(&edgevalue,EDGEVALUE);
++	FetchData(&contours,CONTOUR);
++
++	/*Run x layer */
++	ContourToNodesx(&flags,x,y,nods,contours,edgevalue);
++
++	/* output: */
++	WriteData(FLAGS,flags);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.h	(revision 13651)
+@@ -0,0 +1,57 @@
++/*
++	ContourToNodes.h
++*/
++
++#ifndef _CONTOURTONODES_H
++#define _CONTOURTONODES_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__
++#define __FUNCT__ "ContourToNodes"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* input macros: */
++#define XHANDLE   prhs[0]
++#define YHANDLE   prhs[1]
++#define CONTOUR   prhs[2]
++#define EDGEVALUE prhs[3]
++
++/* serial output macros: */
++#define FLAGS (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* input macros: */
++#define XHANDLE   PyTuple_GetItem(args,0)
++#define YHANDLE   PyTuple_GetItem(args,1)
++#define CONTOUR   PyTuple_GetItem(args,2)
++#define EDGEVALUE PyTuple_GetItem(args,3)
++
++/* serial output macros: */
++#define FLAGS output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS 1
++#undef NRHS
++#define NRHS 4
++
++#endif  /* _CONTOURTONODES_H */
++
+Index: ../trunk-jpl/src/wrappers/HoleFiller/HoleFiller.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/HoleFiller/HoleFiller.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/HoleFiller/HoleFiller.cpp	(revision 13651)
+@@ -0,0 +1,63 @@
++/*!\file:  HoleFiller.cpp
++ * \brief fill holes in matlab velocity array
++	this matlab module is an adaptation of a routine written by Robber 
++	Crippen.  The original routine was designed for the SRTM mission at JPL, 
++	and can be found in the current directory, under the name 
++	HoleFillerCrippen.  It fills void holes in an image, using an interpolation 
++	algorithm, and optionnally a smoothing algorithm. 
++	This matlab module extends the Crippen routine to be used in Matlab, 
++	using double arrays found in the workspace, and loaded directly into memory.
++*/
++
++#include "./HoleFiller.h"
++
++void HoleFillerUsage(void){/*{{{*/
++	_printLine_("   HoleFiller usage:");
++	_printLine_("   [image_out]=HoleFiller(image_in,smooth);\n");
++	_printLine_("   where:");
++	_printLine_("      image_in in double format");
++	_printLine_("      smooth: 1 to smooth with a box filer, 0 to leave data raw");
++	_printLine_("      image_out in double format");
++	_printLine_("");
++}/*}}}*/
++WRAPPER(HoleFiller){
++
++	int i,j;
++
++	/* required input: */
++	double* imagein=NULL;
++	int     imagein_rows,imagein_cols;
++	int     smooth_flag;
++	int     smooth;
++
++
++	/* output: */
++	mxArray* pfield=NULL;
++	double* imageout=NULL;
++	int     imageout_rows,imageout_cols;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&HoleFillerUsage);
++
++	/*Fetch data: */
++	FetchData(&imagein,&imagein_rows,&imagein_cols,IMAGEIN);
++	FetchData(&smooth_flag,SMOOTH);
++	
++	/*Get smooth flag setup: */
++	if (smooth_flag==0)
++		smooth=1;
++	else
++		smooth=0;
++
++	/*Run core hole filler routine: */
++	HoleFillerx( &imageout,imagein,imagein_rows,imagein_cols,smooth);
++
++	/* output: */
++	WriteData(IMAGEOUT,imageout,imagein_rows,imagein_cols);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/HoleFiller/HoleFiller.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/HoleFiller/HoleFiller.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/HoleFiller/HoleFiller.h	(revision 13651)
+@@ -0,0 +1,50 @@
++/*
++	HoleFiller.h
++*/
++
++#ifndef _HOLEFILLER_H
++#define _HOLEFILLER_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "HoleFiller"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define IMAGEIN prhs[0]
++#define SMOOTH  prhs[1]
++/* serial output macros: */
++#define IMAGEOUT (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define IMAGEIN PyTuple_GetItem(args,0)
++#define SMOOTH  PyTuple_GetItem(args,1)
++/* serial output macros: */
++#define IMAGEOUT output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  2
++
++#endif  /* _HOLEFILLER_H */
+Index: ../trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.cpp	(revision 13651)
+@@ -0,0 +1,113 @@
++/*! \file  MeshProfileIntersection.cpp
++    \brief: takes a  .exp file (made of several profiles), and figures out its intersection 
++	with a mesh.
++
++	usage:
++	[segments]=MeshProfileIntersection(index,x,y,filename);
++
++	where:
++	input:
++		index,x,y is a triangulation
++		filename: name of Argus style .exp file containing the segments (can be groups of disconnected segments)
++	output:
++		segments: array made of x1,y1,x2,y2,element_id lines (x1,y1) and (x2,y2) are segment extremitis for a segment 
++		belonging to the elemnt_id element. there are as many lines in segments as there are segments intersecting the 
++		mesh.
++*/
++	
++#include "./MeshProfileIntersection.h"
++
++void MeshProfileIntersectionUsage(void){/*{{{*/
++	_printLine_("   usage:");
++	_printLine_("   [segments]=MeshProfileIntersection(index,x,y,filename);");
++	_printLine_("   where:");
++	_printLine_("   input:");
++	_printLine_("        index,x,y is a triangulation");
++	_printLine_("        filename: name of Argus style .exp file containing the segments (can be groups of disconnected segments)");
++	_printLine_("   output:");
++	_printLine_("        segments: array made of x1,y1,x2,y2,element_id lines (x1,y1) and (x2,y2) are segment extremitis for a segment ");
++	_printLine_("        belonging to the elemnt_id element. there are as many lines in segments as there are segments intersecting the ");
++	_printLine_("        mesh.");
++}/*}}}*/
++WRAPPER(MeshProfileIntersection){
++
++	int i,j;
++
++	/* required input: */
++	//mesh
++	double* double_index=NULL;
++	int*    index=NULL;
++	int     nel;
++	double* x=NULL;
++	double* y=NULL;
++	int     nods;
++	int     dummy;
++	
++	//contours
++	mxArray*  matlabstructure=NULL;
++	Contour<double>** contours=NULL;
++	int       numcontours;
++	Contour<double>*  contouri=NULL;
++
++	/* output: */
++	double* segments=NULL;
++	int     numsegs;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&MeshProfileIntersectionUsage);
++
++	/*First, call expread on filename to build a contour array in the matlab workspace: */
++	mexCallMATLAB( 1, &matlabstructure, 1, (mxArray**)&FILENAME, "expread");
++
++	/*Fetch inputs: */
++	//index
++	FetchData(&double_index,&nel,&dummy,INDEX);
++	if(dummy!=3 && dummy!=6)_error_("element triangulation should be of 3 or 6 column width!");
++	index=xNew<int>(nel*3);
++	for(i=0;i<nel;i++){
++		for(j=0;j<3;j++){
++			*(index+3*i+j)=(int)*(double_index+dummy*i+j)-1; //"C" style indexing
++		}
++	}
++	//x and y
++	FetchData(&x,&nods,X);
++	FetchData(&y,&dummy,Y);
++
++	//contours
++	numcontours=mxGetNumberOfElements(matlabstructure);
++	contours=xNew<Contour<double>*>(numcontours);
++	for(i=0;i<numcontours;i++){
++		//allocate
++		contouri=xNew<Contour<double> >(1);
++		//retrieve dimension of this contour.
++		contouri->nods=(int)mxGetScalar(mxGetField(matlabstructure,i,"nods"));
++		//set pointers.
++		contouri->x=mxGetPr(mxGetField(matlabstructure,i,"x"));
++		contouri->y=mxGetPr(mxGetField(matlabstructure,i,"y"));
++		*(contours+i)=contouri;
++	}
++
++	/* Debugging of contours :{{{1*/
++	/*for(i=0;i<numcontours;i++){
++		_printLine_("\nContour echo: contour number  " << i+1 << " / " << numcontours);
++		contouri=*(contours+i);
++		_printLine_("   Number of vertices " << contouri->nods);
++		for (j=0;j<contouri->nods;j++){
++			_printLine_("   " << *(contouri->x+j) << "f " << *(contouri->y+j) << "f");
++		}
++	}*/
++	/*}}}*/
++
++	/*Run interpolation routine: */
++	MeshProfileIntersectionx(&segments,&numsegs,index,x,y,nel,nods,contours,numcontours);
++
++	/* output: */
++	WriteData(SEGMENTS,segments,numsegs,5);
++
++	/*end module: */
++	MODULEEND();
++
++}
+Index: ../trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.h	(revision 13651)
+@@ -0,0 +1,55 @@
++/*
++	MeshProfileIntersection.h
++*/
++
++#ifndef _MESHPROFILEINTERSECTION_H
++#define _MESHPROFILEINTERSECTION_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__
++#define __FUNCT__ "MeshProfileIntersection"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* input macros: */
++#define INDEX    prhs[0]
++#define X        prhs[1]
++#define Y        prhs[2]
++#define FILENAME prhs[3]
++/* serial output macros: */
++#define SEGMENTS (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* input macros: */
++#define INDEX    PyTuple_GetItem(args,0)
++#define X        PyTuple_GetItem(args,1)
++#define Y        PyTuple_GetItem(args,2)
++#define FILENAME PyTuple_GetItem(args,3)
++/* serial output macros: */
++#define SEGMENTS output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS 1
++#undef NRHS
++#define NRHS 4
++
++#endif  /* _MESHPROFILEINTERSECTION_H */
++
+Index: ../trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h	(revision 13651)
+@@ -0,0 +1,64 @@
++/*!\file InterpFromMeshToMesh3d.h
++ * \brief: prototype for Data Interpolation mex module.
++ */
++
++#ifndef _INTERPFROMMESH3D_H
++#define _INTERPFROMMESH3D_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "InterpFromMeshToMesh3d"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define INDEXHANDLE   prhs[0]
++#define XHANDLE       prhs[1]
++#define YHANDLE       prhs[2]
++#define ZHANDLE       prhs[3]
++#define DATAHANDLE    prhs[4]
++#define XPRIMEHANDLE  prhs[5]
++#define YPRIMEHANDLE  prhs[6]
++#define ZPRIMEHANDLE  prhs[7]
++#define DEFAULTHANDLE prhs[8]
++/* serial output macros: */
++#define DATAPRIME (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define INDEXHANDLE   PyTuple_GetItem(args,0)
++#define XHANDLE       PyTuple_GetItem(args,1)
++#define YHANDLE       PyTuple_GetItem(args,2)
++#define ZHANDLE       PyTuple_GetItem(args,3)
++#define DATAHANDLE    PyTuple_GetItem(args,4)
++#define XPRIMEHANDLE  PyTuple_GetItem(args,5)
++#define YPRIMEHANDLE  PyTuple_GetItem(args,6)
++#define ZPRIMEHANDLE  PyTuple_GetItem(args,7)
++#define DEFAULTHANDLE PyTuple_GetItem(args,8)
++/* serial output macros: */
++#define DATAPRIME output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  9
++
++#endif  /* _INTERPFROMMESHTOMESH3D_H */
+Index: ../trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.cpp	(revision 13651)
+@@ -0,0 +1,101 @@
++/*!\file InterpFromMeshToMesh3d.c
++ * \brief: data interpolation from a list of (x,y,values) into mesh vertices
++*/
++	
++#include "./InterpFromMeshToMesh3d.h"
++
++void InterpFromMeshToMesh3dUsage(void){/*{{{*/
++	_pprintLine_("INTERPFROMMESHTOMESH3D - interpolation from a 3d hexahedron mesh onto a list of point");
++	_pprintLine_("");
++	_pprintLine_("   This function is a multi-threaded mex file that interpolates a field");
++	_pprintLine_("   defined on a triangular mesh onto a list of point");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("      data_prime=InterpFromMeshToMesh3d(index,x,y,z,data,x_prime,y_prime,z_prime,default_value);");
++	_pprintLine_("");
++	_pprintLine_("      index: index of the mesh where data is defined");
++	_pprintLine_("      x,y,z: coordinates of the nodes where data is defined");
++	_pprintLine_("      data: matrix holding the data to be interpolated onto the mesh.");
++	_pprintLine_("      x_prime,y_prime,z_prime: coordinates of the points onto which we interpolate.");
++	_pprintLine_("      default_value: default value if no data is found (holes).");
++	_pprintLine_("      data_prime: vector of mesh interpolated data.");
++	_pprintLine_("");
++	_pprintLine_("   Example:");
++	_pprintLine_("      load('temperature.mat');");
++	_pprintLine_("      md.initialization.temperature=InterpFromMeshToMesh3d(index,x,y,z,temperature,md.mesh.x,md.mesh.y,md.mesh.z,253);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(InterpFromMeshToMesh3d){
++
++	/*input: */
++	double* index_data=NULL;
++	int     index_data_rows;
++
++	double* x_data=NULL;
++	double* y_data=NULL;
++	double* z_data=NULL;
++
++	int     x_data_rows;
++	int     y_data_rows;
++	int     z_data_rows;
++
++	double* data=NULL; 
++	int     data_rows;
++	int     data_cols;
++
++	double* x_prime=NULL;
++	double* y_prime=NULL;
++	double* z_prime=NULL;
++	
++	int     x_prime_rows;
++	int     y_prime_rows;
++	int     z_prime_rows;
++
++	double  default_value;
++
++	/*Intermediary*/
++	int nods_data;
++	int nels_data;
++	int nods_prime;
++
++	/* output: */
++	SeqVec<double>*  data_prime=NULL;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&InterpFromMeshToMesh3dUsage);
++
++	/*Input datasets: */
++	FetchData(&index_data,&index_data_rows,NULL,INDEXHANDLE);
++	FetchData(&x_data,&x_data_rows,NULL,XHANDLE);
++	FetchData(&y_data,&y_data_rows,NULL,YHANDLE);
++	FetchData(&z_data,&z_data_rows,NULL,ZHANDLE);
++	FetchData(&data,&data_rows,&data_cols,DATAHANDLE);
++	FetchData(&x_prime,&x_prime_rows,NULL,XPRIMEHANDLE);
++	FetchData(&y_prime,&y_prime_rows,NULL,YPRIMEHANDLE);
++	FetchData(&z_prime,&z_prime_rows,NULL,ZPRIMEHANDLE);
++	FetchData(&default_value,DEFAULTHANDLE);
++
++	/*some checks*/
++	if (x_data_rows!=y_data_rows || x_data_rows!=z_data_rows){
++		_error_("vectors x, y and z should have the same length!");
++	}
++	if (x_prime_rows!=y_prime_rows || x_prime_rows!=z_prime_rows){
++		_error_("vectors x_prime, y_prime and z_prime should have the same length!");
++	}
++	/*get number of elements and number of nodes in the data*/
++	nels_data=index_data_rows;
++	nods_data=x_data_rows;
++	nods_prime=x_prime_rows;
++
++	/* Run core computations: */
++	InterpFromMeshToMesh3dx(&data_prime,index_data,x_data,y_data,z_data,nods_data,nels_data,data,data_rows,x_prime,y_prime,z_prime,nods_prime,default_value);
++
++	/*Write data: */
++	WriteData(DATAPRIME,data_prime);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/Ll2xy/Ll2xy.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Ll2xy/Ll2xy.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/Ll2xy/Ll2xy.h	(revision 13651)
+@@ -0,0 +1,54 @@
++/*!\file Ll2xy.h
++ * \brief: prototype for lat/long to x/y coordinate mex module.
++ */
++
++#ifndef _LL2XY_H
++#define _LL2XY_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "Ll2xy"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define LAT_IN prhs[0]
++#define LON_IN prhs[1]
++#define SGN_IN prhs[2]
++/* serial output macros: */
++#define X_OUT (mxArray**)&plhs[0]
++#define Y_OUT (mxArray**)&plhs[1]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define LAT_IN PyTuple_GetItem(args,0)
++#define LON_IN PyTuple_GetItem(args,1)
++#define SGN_IN PyTuple_GetItem(args,2)
++/* serial output macros: */
++#define X_OUT output,0
++#define Y_OUT output,1
++#endif
++
++/* serial arg counts: */
++#undef NRHS
++#define NRHS  3
++#undef NLHS
++#define NLHS  2
++
++#endif
+Index: ../trunk-jpl/src/wrappers/Ll2xy/Ll2xy.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/Ll2xy/Ll2xy.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/Ll2xy/Ll2xy.cpp	(revision 13651)
+@@ -0,0 +1,97 @@
++/*\file Ll2xy.c
++ *\brief: lat/long to x/y coordinate mex module.
++ */
++#include "./Ll2xy.h"
++
++void Ll2xyUsage(void){/*{{{*/
++	_pprintLine_("Ll2xy - lat/long to x/y coordinate transformation module:");
++	_pprintLine_("");
++	_pprintLine_("   This module transforms lat/long to x/y coordinates.");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("      [x,y]=Ll2xy(lat,lon,sgn,'param name',param,...);");
++	_pprintLine_("");
++	_pprintLine_("      lat         latitude coordinates (double vector)");
++	_pprintLine_("      lon         longitude coordinates (double vector)");
++	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))");
++	_pprintLine_("");
++	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
++	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
++	_pprintLine_("");
++	_pprintLine_("      x           x coordinates (double vector)");
++	_pprintLine_("      y           y coordinates (double vector)");
++	_pprintLine_("");
++	_pprintLine_("   Examples:");
++	_pprintLine_("      [x,y]=Ll2xy(lat,lon, 1);");
++	_pprintLine_("      [x,y]=Ll2xy(lat,lon, 1,'central_meridian',45,'standard_parallel',70);");
++	_pprintLine_("      [x,y]=Ll2xy(lat,lon,-1,'central_meridian', 0,'standard_parallel',71);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(Ll2xy){
++
++	int i,verbose=1;
++
++	/*input: */
++	double  *lat=NULL,*lon=NULL;
++	int     nlat,nlon,ncoord;
++	int     sgn;
++
++	Options* options=NULL;
++	double   cm=0.,sp=0.;
++
++	/* output: */
++	double  *x=NULL,*y=NULL;
++	int     iret=0;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	if (nlhs > NLHS) {
++		Ll2xyUsage(); _error_("Ll2xy usage error");
++	}
++	if (nrhs < NRHS) {
++		Ll2xyUsage(); _error_("Ll2xy usage error");
++	}
++
++	/*Input datasets: */
++	FetchData(&lat,&nlat,LAT_IN);
++	FetchData(&lon,&nlon,LON_IN);
++	FetchData(&sgn,SGN_IN);
++	FetchData(&options,NRHS,nrhs,prhs);
++
++	/*  defaults are in Ll2xydef, so don't duplicate them here, and only use user values if both have been specified  */
++	if(options->GetOption("central_meridian") || options->GetOption("standard_parallel")){
++		options->Get(&cm,"central_meridian");
++		if (verbose) _printLine_("  cm=" << cm);
++		options->Get(&sp,"standard_parallel");
++		if (verbose) _printLine_("  sp=" << sp);
++	}
++
++	/*some checks*/
++	if (verbose) _printLine_("Checking inputs:");
++	if (nlat != nlon){_error_("Must have same number of lat[" << nlat << "] and lon[" << nlon << "] coordinates.");}
++	else                ncoord=nlat;
++	if (sgn != +1 && sgn != -1) _error_("Hemisphere sgn=" << sgn << " must be +1 (north) or -1 (south).");
++	if (fabs(cm)      > 180.) _error_("Central meridian cm=" << cm << " must be between -180 (west) and +180 (east) degrees.");
++	if (sp < 0. || sp >  90.) _error_("Standard parallel sp=" << sp << " must be between 0 and 90 degrees (in specified hemisphere).");
++
++	x=(double*)mxMalloc(ncoord*sizeof(double));
++	y=(double*)mxMalloc(ncoord*sizeof(double));
++
++	/* Run core computations: */
++	if (options->GetOption("central_meridian") && options->GetOption("standard_parallel"))
++		iret=Ll2xyx(x,y,lat,lon,ncoord,sgn,cm,sp);
++	else
++		iret=Ll2xyx(x,y,lat,lon,ncoord,sgn);
++
++	/*Write data: */
++	WriteData(X_OUT,x,ncoord);
++	WriteData(Y_OUT,y,ncoord);
++
++	/*Clean-up*/
++	delete options;
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/BamgMesher/BamgMesher.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/BamgMesher/BamgMesher.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/BamgMesher/BamgMesher.h	(revision 13651)
+@@ -0,0 +1,54 @@
++/*
++	BamgMesher.h
++*/
++
++#ifndef _BAMG_MESHER_H_
++#define _BAMG_MESHER_H_
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "BamgMesher"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define BAMGMESHIN  prhs[0]
++#define BAMGGEOMIN  prhs[1]
++#define BAMGOPTIONS prhs[2]
++/* serial output macros: */
++#define BAMGMESHOUT (mxArray**)&plhs[0]
++#define BAMGGEOMOUT (mxArray**)&plhs[1]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define BAMGMESHIN  PyTuple_GetItem(args,0)
++#define BAMGGEOMIN  PyTuple_GetItem(args,1)
++#define BAMGOPTIONS PyTuple_GetItem(args,2)
++/* serial output macros: */
++#define BAMGMESHOUT output,0
++#define BAMGGEOMOUT output,1
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  2
++#undef NRHS
++#define NRHS  3
++
++#endif  /* _BAMG_MESHER_H_ */
+Index: ../trunk-jpl/src/wrappers/BamgMesher/BamgMesher.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/BamgMesher/BamgMesher.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/BamgMesher/BamgMesher.cpp	(revision 13651)
+@@ -0,0 +1,51 @@
++/*\file BamgMesher.c
++ *\brief: mesher that uses the bamg library
++ */
++#include "./BamgMesher.h"
++
++void BamgMesherUsage(void){/*{{{*/
++	_pprintLine_("");
++	_pprintLine_("   usage: [bamgmesh,bamggeom]=" << __FUNCT__ << "(bamgmesh,bamggeom,bamgoptions);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(BamgMesher){
++
++	/*Intermediary*/
++	BamgOpts *bamgopts=NULL;
++	BamgMesh *bamgmesh_in=NULL;
++	BamgGeom *bamggeom_in=NULL;
++	BamgMesh *bamgmesh_out=NULL;
++	BamgGeom *bamggeom_out=NULL;
++
++	/*Boot module*/
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CHECKARGUMENTS(NLHS,NRHS,&BamgMesherUsage);
++
++	/*Initialize outputs*/
++	bamggeom_out=new BamgGeom();
++	bamgmesh_out=new BamgMesh();
++
++	/*Fetch inputs: */
++	FetchData(&bamgopts,BAMGOPTIONS);
++	FetchData(&bamggeom_in,BAMGGEOMIN);
++	FetchData(&bamgmesh_in,BAMGMESHIN);
++
++	/*Call x layer*/
++	Bamgx(bamgmesh_out,bamggeom_out,bamgmesh_in,bamggeom_in,bamgopts);
++
++	/*Generate output Matlab Structures*/
++	WriteData(BAMGGEOMOUT,bamggeom_out);
++	WriteData(BAMGMESHOUT,bamgmesh_out);
++
++	/*Free ressources: */
++	delete bamgopts;
++	delete bamggeom_in;
++	delete bamggeom_out;
++	delete bamgmesh_in;
++	delete bamgmesh_out;
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 13651)
+@@ -0,0 +1,60 @@
++/*!\file InterpFromGridToMesh.h
++ * \brief: prototype for Data Interpolation mex module.
++ */
++
++#ifndef _InterpFromGridToMesh_H
++#define _InterpFromGridToMesh_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "InterpFromGridToMesh"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define XHANDLE       prhs[0]
++#define YHANDLE       prhs[1]
++#define DATAHANDLE    prhs[2]
++#define XMESHHANDLE   prhs[3]
++#define YMESHHANDLE   prhs[4]
++#define DEFAULTHANDLE prhs[5]
++#define INTERPENUM    prhs[6]
++/* serial output macros: */
++#define DATAMESH (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define XHANDLE       PyTuple_GetItem(args,0)
++#define YHANDLE       PyTuple_GetItem(args,1)
++#define DATAHANDLE    PyTuple_GetItem(args,2)
++#define XMESHHANDLE   PyTuple_GetItem(args,3)
++#define YMESHHANDLE   PyTuple_GetItem(args,4)
++#define DEFAULTHANDLE PyTuple_GetItem(args,5)
++#define INTERPENUM    PyTuple_GetItem(args,6)
++/* serial output macros: */
++#define DATAMESH output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  6
++
++#endif  /* _INTERPFROMGRIDTOMESH_H */
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.cpp	(revision 13651)
+@@ -0,0 +1,77 @@
++/*!\file InterpFromGridToMesh.c
++ * \brief: data interpolation from a list of (x,y,values) into mesh vertices
++*/
++	
++#include "./InterpFromGridToMesh.h"
++
++void InterpFromGridToMeshUsage(void){/*{{{*/
++	_pprintLine_("INTERPFROMGRIDTOMESH - interpolation from a grid onto a list of points");
++	_pprintLine_("");
++	_pprintLine_("   This function is a multi-threaded mex file that interpolates a field");
++	_pprintLine_("   defined on a grid onto a list of points");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("      data_mesh=InterpFromGridToMesh(x,y,data,x_mesh,y_mesh,default_value);");
++	_pprintLine_("");
++	_pprintLine_("      data: matrix holding the data to be interpolated onto the mesh.");
++	_pprintLine_("      x,y: coordinates of matrix data. (x and y must be in increasing order)");
++	_pprintLine_("      x_mesh,y_mesh: coordinates of the points onto which we interpolate.");
++	_pprintLine_("      default_value: default value if no data is found (holes).");
++	_pprintLine_("      data_mesh: vector of mesh interpolated data.");
++	_pprintLine_("");
++	_pprintLine_("   Example:");
++	_pprintLine_("      load('velocities.mat');");
++	_pprintLine_("      md.inversion.vx_obs=InterpFromGridToMesh(x_n,y_m,vx,md.mesh.x,md.mesh.y,0);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(InterpFromGridToMesh){
++
++	int i,j;
++
++	/*input: */
++	double *x = NULL;
++	double *y = NULL;
++	int     x_rows,y_rows;
++	double *data  = NULL;
++	int     data_rows,data_cols;
++	double *x_mesh = NULL;
++	double *y_mesh = NULL;
++	int     x_mesh_rows,y_mesh_rows;
++	double  default_value;
++	int     interpolationenum;
++
++	/* output: */
++	SeqVec<double>*  data_mesh=NULL;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	if((nlhs!=NLHS) || (nrhs!=6 && nrhs!=7)){
++		InterpFromGridToMeshUsage();
++		_error_("usage. See above");
++	}
++
++	/*Input datasets: */
++	FetchData(&x,&x_rows,NULL,XHANDLE);
++	FetchData(&y,&y_rows,NULL,YHANDLE);
++	FetchData(&data,&data_rows,&data_cols,DATAHANDLE);
++	FetchData(&x_mesh,&x_mesh_rows,NULL,XMESHHANDLE);
++	FetchData(&y_mesh,&y_mesh_rows,NULL,YMESHHANDLE);
++	FetchData(&default_value,DEFAULTHANDLE);
++
++	/* Run core computations: */
++	if(nrhs==7){
++		FetchData(&interpolationenum,INTERPENUM);
++		InterpFromGridToMeshx(&data_mesh, x, x_rows,  y, y_rows, data, data_rows,data_cols, x_mesh, y_mesh, x_mesh_rows,default_value,interpolationenum);
++	}
++	else{
++		InterpFromGridToMeshx(&data_mesh, x, x_rows,  y, y_rows, data, data_rows,data_cols, x_mesh, y_mesh, x_mesh_rows,default_value);
++	}
++
++	/*Write data: */
++	WriteData(DATAMESH,data_mesh);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h	(revision 13651)
+@@ -0,0 +1,72 @@
++/*
++	InterpFromMeshToGrid.h
++*/
++
++#ifndef _INTERPFROMMESHTOGRID_H
++#define _INTERPFROMMESHTOGRID_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "InterpFromMeshToGrid"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define INDEX        prhs[0]
++#define X            prhs[1]
++#define Y            prhs[2]
++#define MESHDATA     prhs[3]
++#define XMIN         prhs[4]
++#define YMAX         prhs[5]
++#define XPOSTING     prhs[6]
++#define YPOSTING     prhs[7]
++#define NLINES       prhs[8]
++#define NCOLS        prhs[9]
++#define DEFAULTVALUE prhs[10]
++/* serial output macros: */
++#define XM (mxArray**)&plhs[0]
++#define YM (mxArray**)&plhs[1]
++#define GRIDDATA (mxArray**)&plhs[2]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define INDEX        PyTuple_GetItem(args,0)
++#define X            PyTuple_GetItem(args,1)
++#define Y            PyTuple_GetItem(args,2)
++#define MESHDATA     PyTuple_GetItem(args,3)
++#define XMIN         PyTuple_GetItem(args,4)
++#define YMAX         PyTuple_GetItem(args,5)
++#define XPOSTING     PyTuple_GetItem(args,6)
++#define YPOSTING     PyTuple_GetItem(args,7)
++#define NLINES       PyTuple_GetItem(args,8)
++#define NCOLS        PyTuple_GetItem(args,9)
++#define DEFAULTVALUE PyTuple_GetItem(args,10)
++/* serial output macros: */
++#define XM output,0
++#define YM output,1
++#define GRIDDATA output,2
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  3
++#undef NRHS
++#define NRHS  11
++
++#endif  /* _INTERPFROMMESHTOGRID_H*/
+Index: ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp	(revision 13651)
+@@ -0,0 +1,77 @@
++/*\file InterpFromMeshToGrid.c
++ *\brief: compute diff between observed and modeled velocity
++ */
++
++#include "./InterpFromMeshToGrid.h"
++
++void InterpFromMeshToGridUsage(void){/*{{{*/
++	_pprintLine_("INTERPFROMMESHTOGRID - interpolation of a data defined on a mesh onto a grid");
++	_pprintLine_("");
++	_pprintLine_("   This function is a multi-threaded mex file that interpolates a field");
++	_pprintLine_("   defined on a triangular mesh onto a regular grid");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("      [x_m,y_m,griddata]=InterpFromMeshToGrid(index,x,y,data,xmin,ymax,xposting,yposting,nlines,ncols,default_value)");
++	_pprintLine_("");
++	_pprintLine_("      index,x,y: delaunay triangulation defining the mesh.");
++	_pprintLine_("      meshdata: vertex values of data to be interpolated.");
++	_pprintLine_("      xmin,ymax,posting,nlines,ncols: parameters that define the grid");
++	_pprintLine_("      default_value: value of points located out of the mesh.");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(InterpFromMeshToGrid){
++
++	/*input datasets: */
++	double* index=NULL;
++	int     nel;
++	double* x=NULL;
++	int     nods;
++	double* y=NULL;
++	double* meshdata=NULL;
++	int     meshdata_length;
++	double  xmin;
++	double  ymax;
++	double  xposting;
++	double  yposting;
++	int     nlines,ncols;
++	double  default_value;
++
++	/* output datasets: */
++	double* griddata=NULL;
++	double* x_m=NULL;
++	double* y_m=NULL;
++
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&InterpFromMeshToGridUsage);
++
++	/*Input datasets: */
++	FetchData(&index,&nel,NULL,INDEX);
++	FetchData(&x,&nods,NULL,X);
++	FetchData(&y,NULL,NULL,Y);
++	FetchData(&meshdata,&meshdata_length,NULL,MESHDATA);
++	FetchData(&xmin,XMIN);
++	FetchData(&ymax,YMAX);
++	FetchData(&xposting,XPOSTING);
++	FetchData(&yposting,YPOSTING);
++	FetchData(&nlines,NLINES);
++	FetchData(&ncols,NCOLS);
++	FetchData(&default_value,DEFAULTVALUE);
++
++	/*Call core of computation: */
++	InterpFromMeshToGridx(&x_m,&y_m,&griddata,index,x,y,nods,nel,meshdata,meshdata_length,xmin,ymax,xposting,yposting,nlines,ncols,default_value);
++
++	/*Write results: */
++	WriteData(XM,x_m,ncols);
++	WriteData(YM,y_m,nlines);
++	WriteData(GRIDDATA,griddata,nlines,ncols);
++
++	/*Free ressources: */
++	//let matlab do this.
++	
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.cpp	(revision 13651)
+@@ -0,0 +1,127 @@
++/*\file KMLFileRead.c
++ *\brief: KML file reader module.
++ */
++#include "./KMLFileRead.h"
++
++void KMLFileReadUsage(void){/*{{{*/
++	_pprintLine_("KMLFileRead - KML file reader module:");
++	_pprintLine_("");
++	_pprintLine_("   This module reads a KML file.");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("      [ierror]=KMLFileRead(kmlfile,'param name',param,...);");
++	_pprintLine_("");
++	_pprintLine_("      kmlfile      file name of kml file to be read (char)");
++	_pprintLine_("");
++	_pprintLine_("      echo         echo command (char, optional, 'off'/'on')");
++	_pprintLine_("      deepecho     deep echo command (char, optional, 'off'/'on')");
++	_pprintLine_("      write        write command (char, optional, 'off'/'stdout'/kmlfile)");
++	_pprintLine_("");
++	_pprintLine_("      ierror       return code (non-zero for error)");
++	_pprintLine_("");
++	_pprintLine_("   Examples:");
++	_pprintLine_("      [ierror]=KMLFileRead('file.kml','deepecho','on');");
++	_pprintLine_("      [ierror]=KMLFileRead('filin.kml','echo','on','write','filout.kml');");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(KMLFileRead){
++
++	int i,j,nnodes=0,verbose=1;
++	KML_Object* kobj;
++
++	/*input: */
++	char*   name=NULL;
++	char*   notes=NULL;
++	const mxArray* notesi;
++	mwIndex        nindex;
++	int*    elem=NULL;
++	int     melem=0,nelem=0;
++	int*    nodecon=NULL;
++	int     mncon=0,nncon=0;
++	double* lat=NULL;
++	int     mlat=0,nlat=0,llat=0;
++	double* lng=NULL;
++	int     mlng=0,nlng=0,llng=0;
++	int     nparts=0;
++	int*    part=NULL;
++	int     mprt=0,nprt=0,lprt=0;
++	double* data=NULL;
++	int     mdata=0,ndata=0;
++	double* cmap=NULL;
++	int     mcmap=0,ncmap=0;
++	char*   filnam=NULL;
++	FILE*   fidi=NULL;
++	FILE*   fido=NULL;
++	Options* options=NULL;
++	char*    echo    =NULL;
++	char*    deepecho=NULL;
++	char*    write   =NULL;
++
++	/* output: */
++	int     ierror=0;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	if (nlhs > NLHS) {
++		KMLFileReadUsage(); _error_("KMLFileRead usage error");
++	}
++	if (nrhs < NRHS) {
++		KMLFileReadUsage(); _error_("KMLFileRead usage error");
++	}
++
++	/*Input datasets: */
++	FetchData(&filnam,FILENAME);
++	FetchData(&options,NRHS,nrhs,prhs);
++	FetchData(&options,NRHS,nrhs,prhs);
++
++	options->Get(&echo    ,"echo"    ,(char*)"off");
++	options->Get(&deepecho,"deepecho",(char*)"off");
++	options->Get(&write   ,"write"   ,(char*)"off");
++
++	/*some checks*/
++	if (!strlen(filnam)) strcpy(filnam,"stdout");
++
++	if (verbose) _printLine_("Opening file \"" << filnam << "\".");
++	fidi=fopen(filnam,"r");
++
++	/* Run core computations: */
++	if (verbose) _printLine_("Calling core:");
++	kobj=KMLFileReadx(fidi);
++
++	if (verbose) _printLine_("Closing file \"" << filnam << "\".");
++	fclose(fidi);
++
++	if (kobj){
++		if (!strncmp(echo    ,"on",2) || !strncmp(echo    ,"y",1))
++			kobj->Echo();
++		if (!strncmp(deepecho,"on",2) || !strncmp(deepecho,"y",1))
++			kobj->DeepEcho();
++		if (strncmp(write,"off",3) && strncmp(write,"no",2)) {
++			if (!strncmp(write,"on",2) || !strncmp(write,"yes",3) || !strncmp(write,"stdout",6)) {
++				kobj->Write(stdout,"");
++			}
++			else {
++				if (verbose) _printLine_("Opening file \"" << write << "\".");
++				fido=fopen(write,"w");
++				kobj->Write(fido,"");
++				if (verbose) _printLine_("Closing file \"" << write << "\".");
++				ierror=fclose(fido);
++			}
++		}
++		delete kobj;
++	}
++
++	/*Write data: */
++	WriteData(ERRORFLAG,ierror);
++
++	/*Clean-up*/
++	xDelete<char>(write);
++	xDelete<char>(deepecho);
++	xDelete<char>(echo);
++	delete options;
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.h	(revision 13651)
+@@ -0,0 +1,48 @@
++/*!\file KMLFileRead.h
++ * \brief: prototype for KML file reader mex module.
++ */
++
++#ifndef _KMLFILEREAD_H
++#define _KMLFILEREAD_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "KMLFileRead"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define FILENAME prhs[0]
++/* serial output macros: */
++#define ERRORFLAG (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define FILENAME PyTuple_GetItem(args,0)
++/* serial output macros: */
++#define ERRORFLAG output,0
++#endif
++
++/* serial arg counts: */
++#undef NRHS
++#define NRHS  1
++#undef NLHS
++#define NLHS  1
++
++#endif
+Index: ../trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.cpp	(revision 13651)
+@@ -0,0 +1,99 @@
++/*\file Shp2Kml.c
++ *\brief: shp to kml file conversion mex module.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./Shp2Kml.h"
++
++void Shp2KmlUsage(void){/*{{{*/
++	_pprintLine_("Shp2Kml - shp to kml file conversion module:");
++	_pprintLine_("");
++	_pprintLine_("   This module converts a file from shp to kml format.");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("      [ret]=Shp2Kml(filshp,filkml,sgn,'param name',param,...);");
++	_pprintLine_("");
++	_pprintLine_("      filshp      file name of shp file to be read (char, extension optional)");
++	_pprintLine_("      filkml      file name of kml file to be written (char)");
++	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north); -1 (south); or 0 (no translation))");
++	_pprintLine_("");
++	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
++	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
++	_pprintLine_("");
++	_pprintLine_("      ret         return code (non-zero for warning)");
++	_pprintLine_("");
++	_pprintLine_("   Examples:");
++	_pprintLine_("      [ret]=Shp2Kml('file.shp','file.kml', 0);");
++	_pprintLine_("      [ret]=Shp2Kml('file.shp','file.kml', 1,'central_meridian',45,'standard_parallel',70);");
++	_pprintLine_("      [ret]=Shp2Kml('file.shp','file.kml',-1,'central_meridian', 0,'standard_parallel',71);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(Shp2Kml){
++
++	int i,verbose=1;
++
++	/*input: */
++	char    *filshp=NULL,*filkml=NULL;
++	int     sgn;
++	Options* options=NULL;
++	double   cm=0.,sp=0.;
++
++	/* output: */
++	int     iret=0;
++
++	#ifndef _HAVE_SHAPELIB_ //only works if shapelib library has been compiled in.
++	_error_("Shapelib not available! Cannot carry out shp file translation!");
++	#endif
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	if (nlhs > NLHS) {
++		Shp2KmlUsage(); _error_("Shp2Kml usage error");
++	}
++	if (nrhs < NRHS) {
++		Shp2KmlUsage(); _error_("Shp2Kml usage error");
++	}
++
++	/*Input datasets: */
++	FetchData(&filshp,SHP_IN);
++	FetchData(&filkml,KML_IN);
++	FetchData(&sgn,SGN_IN);
++	FetchData(&options,NRHS,nrhs,prhs);
++
++	/*  defaults are in Xy2lldef, so don't duplicate them here, and only use user values if both have been specified  */
++	if (options->GetOption("central_meridian") || options->GetOption("standard_parallel")) {
++		options->Get(&cm,"central_meridian");
++		if (verbose) _printLine_("  cm=" << cm);
++		options->Get(&sp,"standard_parallel");
++		if (verbose) _printLine_("  sp=" << sp);
++	}
++
++	/*some checks*/
++	if (sgn < -1 || sgn > +1) _error_("Hemisphere sgn=" << sgn << " must be +1 (north), -1 (south), or 0 (no translation).");
++	if (fabs(cm)      > 180.) _error_("Central meridian cm=" << cm << " must be between -180 (west) and +180 (east) degrees.");
++	if (sp < 0. || sp >  90.) _error_("Standard parallel sp=" << sp << " must be between 0 and 90 degrees (in specified hemisphere).");
++
++	/* Run core computations: */
++	if (options->GetOption("central_meridian") && options->GetOption("standard_parallel"))
++		iret=Shp2Kmlx(filshp,filkml,sgn,cm,sp);
++	else
++		iret=Shp2Kmlx(filshp,filkml,sgn);
++
++	/*Write data: */
++	WriteData(RET_OUT,iret);
++
++	/*Clean-up*/
++	delete options;
++	xDelete<char>(filkml);
++	xDelete<char>(filshp);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.h	(revision 13651)
+@@ -0,0 +1,53 @@
++/*!\file Shp2Kml.h
++ * \brief: prototype for shp to kml file conversion mex module.
++ */
++
++#ifndef _SHP2KML_H
++#define _SHP2KML_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "Shp2Kml"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define SHP_IN  prhs[0]
++#define KML_IN  prhs[1]
++#define SGN_IN  prhs[2]
++/* serial output macros: */
++#define RET_OUT (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define SHP_IN PyTuple_GetItem(args,0)
++#define KML_IN PyTuple_GetItem(args,1)
++#define SGN_IN PyTuple_GetItem(args,2)
++/* serial output macros: */
++#define RET_OUT output,0
++#endif
++
++/* serial arg counts: */
++#undef NRHS
++#define NRHS  3
++#undef NLHS
++#define NLHS  1
++
++#endif
++
+Index: ../trunk-jpl/src/wrappers/AverageFilter/AverageFilter.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/AverageFilter/AverageFilter.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/AverageFilter/AverageFilter.cpp	(revision 13651)
+@@ -0,0 +1,56 @@
++/*!\file:  AverageFilter.cpp
++ * \brief fill holes in matlab velocity array
++	this matlab module is an adaptation of a routine written by Robber 
++	Crippen.  The original routine was designed for the SRTM mission at JPL, 
++	and can be found in the current directory, under the name 
++	AverageFilterCrippen.  It fills void holes in an image, using an interpolation 
++	algorithm, and optionnally a smoothing algorithm. 
++	This matlab module extends the Crippen routine to be used in Matlab, 
++	using double arrays found in the workspace, and loaded directly into memory.
++*/
++
++#include "./AverageFilter.h"
++
++void AverageFilterUsage(void){/*{{{*/
++	_printLine_("   AverageFilter usage:");
++	_printLine_("   [image_out]=AverageFilter(image_in,pixels);\n");
++	_printLine_("   where:");
++	_printLine_("      image_in in double format");
++	_printLine_("      pixels: characteristic size of smoothing");
++	_printLine_("      image_out in double format");
++	_printLine_("");
++}/*}}}*/
++WRAPPER(AverageFilter){
++
++	int i,j;
++
++	/* required input: */
++	double* imagein=NULL;
++	int     imagein_rows,imagein_cols;
++	int     smooth;
++
++
++	/* output: */
++	mxArray* pfield=NULL;
++	double* imageout=NULL;
++	int     imageout_rows,imageout_cols;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&AverageFilterUsage);
++
++	/*Fetch data: */
++	FetchData(&imagein,&imagein_rows,&imagein_cols,IMAGEIN);
++	FetchData(&smooth,SMOOTH);
++	
++	/*Run core hole filler routine: */
++	AverageFilterx( &imageout,imagein,imagein_rows,imagein_cols,smooth);
++
++	/* output: */
++	WriteData(IMAGEOUT,imageout,imagein_rows,imagein_cols);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/AverageFilter/AverageFilter.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/AverageFilter/AverageFilter.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/AverageFilter/AverageFilter.h	(revision 13651)
+@@ -0,0 +1,50 @@
++/*
++	AverageFilter.h
++*/
++
++#ifndef _AVERAGEFILTER_H
++#define _AVERAGEFILTER_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "AverageFilter"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define IMAGEIN prhs[0]
++#define SMOOTH  prhs[1]
++/* serial output macros: */
++#define IMAGEOUT (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define IMAGEIN PyTuple_GetItem(args,0)
++#define SMOOTH  PyTuple_GetItem(args,1)
++/* serial output macros: */
++#define IMAGEOUT output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  2
++
++#endif  /* _AVERAGEFILTER_H */
+Index: ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 13651)
+@@ -0,0 +1,53 @@
++/*!\file:  TriMeshProcessRifts.cpp
++ * \brief split a mesh where a rift (or fault) is present
++ */ 
++
++#include "./TriMeshProcessRifts.h"
++
++void TriMeshProcessRiftsUsage(void){/*{{{*/
++	_printLine_("");
++	_printLine_("   usage: [index2,x2,y2,segments2,segmentmarkers2,rifts2]=TriMeshProcessrifts(index1,x1,y1,segments1,segmentmarkers1) ");
++	_printLine_("      where: (index1,x1,y1,segments1,segmentmarkers1) is an initial triangulation.");
++	_printLine_("      index2,x2,y2,segments2,segmentmarkers2,rifts2 is the resulting triangulation where rifts have been processed.");
++}/*}}}*/
++WRAPPER(TriMeshProcessRifts){
++
++	/* returned quantities: */
++	RiftStruct *riftstruct = NULL;
++
++	/* input: */
++	int     nel,nods;
++	double *index          = NULL;
++	double *x              = NULL;
++	double *y              = NULL;
++	double *segments       = NULL;
++	double *segmentmarkers = NULL;
++	int     num_seg;
++
++	/*Boot module*/
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CHECKARGUMENTS(NLHS,NRHS,&TriMeshProcessRiftsUsage);
++
++	/*Fetch data */
++	FetchData(&index,&nel,NULL,INDEXIN);
++	FetchData(&x,&nods,XIN);
++	FetchData(&y,NULL,YIN);
++	FetchData(&segments,&num_seg,NULL,SEGMENTSIN);
++	FetchData(&segmentmarkers,NULL,SEGMENTMARKERSIN);
++
++	/*call x layer*/
++	TriMeshProcessRiftsx(&index,&nel,&x,&y,&nods,&segments,&segmentmarkers,&num_seg,&riftstruct);
++
++	/*Output : */
++	WriteData(INDEXOUT,index,nel,3);
++	WriteData(XOUT,x,nods,1);
++	WriteData(YOUT,y,nods,1);
++	WriteData(SEGMENTSOUT,segments,num_seg,3);
++	WriteData(SEGMENTMARKERSOUT,segmentmarkers,num_seg,1);
++	WriteData(RIFTSTRUCT,riftstruct);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 13651)
+@@ -0,0 +1,66 @@
++/*
++ * TriMeshProcessRifts.h
++ */ 
++
++#ifndef _TRIMESH_PROCESSRIFTS_H_
++#define _TRIMESH_PROCESSRIFTS_H_
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "TriMeshProcessRifts"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define INDEXIN          prhs[0]
++#define XIN              prhs[1]
++#define YIN              prhs[2]
++#define SEGMENTSIN       prhs[3]
++#define SEGMENTMARKERSIN prhs[4]
++/* serial output macros: */
++#define INDEXOUT          (mxArray**)&plhs[0]
++#define XOUT              (mxArray**)&plhs[1]
++#define YOUT              (mxArray**)&plhs[2]
++#define SEGMENTSOUT       (mxArray**)&plhs[3]
++#define SEGMENTMARKERSOUT (mxArray**)&plhs[4]
++#define RIFTSTRUCT        (mxArray**)&plhs[5]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define INDEXIN          PyTuple_GetItem(args,0)
++#define XIN              PyTuple_GetItem(args,1)
++#define YIN              PyTuple_GetItem(args,2)
++#define SEGMENTSIN       PyTuple_GetItem(args,3)
++#define SEGMENTMARKERSIN PyTuple_GetItem(args,4)
++/* serial output macros: */
++#define INDEXOUT          output,0
++#define XOUT              output,1
++#define YOUT              output,2
++#define SEGMENTSOUT       output,3
++#define SEGMENTMARKERSOUT output,4
++#define RIFTSTRUCT        output,5
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  6
++#undef NRHS
++#define NRHS  5
++
++#endif
+Index: ../trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.cpp	(revision 13651)
+@@ -0,0 +1,96 @@
++/*\file Exp2Kml.c
++ *\brief: exp to kml file conversion mex module.
++ */
++#include "./Exp2Kml.h"
++
++void Exp2KmlUsage(void){/*{{{*/
++	_pprintLine_("Exp2Kml - exp to kml file conversion module:");
++	_pprintLine_("");
++	_pprintLine_("   This module converts a file from exp to kml format.");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("      [ret]=Exp2Kml(filexp,filkml,sgn,'param name',param,...);");
++	_pprintLine_("");
++	_pprintLine_("      filexp      file name of exp file to be read (char)");
++	_pprintLine_("      filkml      file name of kml file to be written (char)");
++	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))");
++	_pprintLine_("");
++	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
++	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
++	_pprintLine_("      holes       flag for treatment of multiple profiles (char, optional, 'yes' for holes))");
++	_pprintLine_("");
++	_pprintLine_("      ret         return code (non-zero for warning)");
++	_pprintLine_("");
++	_pprintLine_("   Examples:");
++	_pprintLine_("      [ret]=Exp2Kml('file.exp','file.kml', 1);");
++	_pprintLine_("      [ret]=Exp2Kml('file.exp','file.kml', 1,'central_meridian',45,'standard_parallel',70,'holes','yes');");
++	_pprintLine_("      [ret]=Exp2Kml('file.exp','file.kml',-1,'central_meridian', 0,'standard_parallel',71,'holes','yes');");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(Exp2Kml){
++
++	int i,verbose=1;
++
++	/*input: */
++	char    *filexp=NULL,*filkml=NULL;
++	int     sgn;
++
++	Options* options=NULL;
++	char     *choles=NULL;
++	bool     holes=false;
++	double   cm=0.,sp=0.;
++
++	/* output: */
++	int     iret=0;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	if (nlhs > NLHS) {
++		Exp2KmlUsage(); _error_("Exp2Kml usage error");
++	}
++	if (nrhs < NRHS) {
++		Exp2KmlUsage(); _error_("Exp2Kml usage error");
++	}
++
++	/*Input datasets: */
++	FetchData(&filexp,EXP_IN);
++	FetchData(&filkml,KML_IN);
++	FetchData(&sgn,SGN_IN);
++	FetchData(&options,NRHS,nrhs,prhs);
++
++	options->Get(&choles,"holes",(char*)"no");
++	if (!strncmp(choles,"y",1) || !strncmp(choles,"on",2)) holes=true;
++
++	/*  defaults are in Xy2lldef, so don't duplicate them here, and only use user values if both have been specified  */
++	if (options->GetOption("central_meridian") || options->GetOption("standard_parallel")) {
++		options->Get(&cm,"central_meridian");
++		if (verbose) _printLine_("  cm=" << cm);
++		options->Get(&sp,"standard_parallel");
++		if (verbose) _printLine_("  sp=" << sp);
++	}
++
++	/*some checks*/
++	if (sgn !=+1 && sgn !=-1) _error_("Hemisphere sgn=" << sgn << " must be +1 (north) or -1 (south).");
++	if (fabs(cm)      > 180.) _error_("Central meridian cm=" << cm << " must be between -180 (west) and +180 (east) degrees.");
++	if (sp < 0. || sp >  90.) _error_("Standard parallel sp=" << sp << " must be between 0 and 90 degrees (in specified hemisphere).");
++
++	/* Run core computations: */
++	if (options->GetOption("central_meridian") && options->GetOption("standard_parallel"))
++		iret=Exp2Kmlx(filexp,filkml,sgn,cm,sp,holes);
++	else
++		iret=Exp2Kmlx(filexp,filkml,sgn,holes);
++
++	/*Write data: */
++	WriteData(RET_OUT,iret);
++
++	/*Clean-up*/
++	xDelete<char>(choles);
++	xDelete<char>(filkml);
++	xDelete<char>(filexp);
++	delete options;
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.h	(revision 13651)
+@@ -0,0 +1,53 @@
++/*!\file Exp2Kml.h
++ * \brief: prototype for exp to kml file conversion mex module.
++ */
++
++#ifndef _EXP2KML_H
++#define _EXP2KML_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "Exp2Kml"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define EXP_IN prhs[0]
++#define KML_IN prhs[1]
++#define SGN_IN prhs[2]
++/* serial output macros: */
++#define RET_OUT    (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define EXP_IN PyTuple_GetItem(args,0)
++#define KML_IN PyTuple_GetItem(args,1)
++#define SGN_IN PyTuple_GetItem(args,2)
++/* serial output macros: */
++#define RET_OUT    output,0
++#endif
++
++/* serial arg counts: */
++#undef NRHS
++#define NRHS  3
++#undef NLHS
++#define NLHS  1
++
++#endif
++
+Index: ../trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.cpp	(revision 13651)
+@@ -0,0 +1,88 @@
++/*\file Kml2Exp.c
++ *\brief: kml to exp file conversion mex module.
++ */
++#include "./Kml2Exp.h"
++
++void Kml2ExpUsage(void){/*{{{*/
++	_pprintLine_("Kml2Exp - kml to exp file conversion module:");
++	_pprintLine_("");
++	_pprintLine_("   This module converts a file from kml to exp format.");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("      [ret]=Kml2Exp(filexp,filkml,sgn,'param name',param,...);");
++	_pprintLine_("");
++	_pprintLine_("      filkml      file name of kml file to be read (char)");
++	_pprintLine_("      filexp      file name of exp file to be written (char)");
++	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))");
++	_pprintLine_("");
++	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
++	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
++	_pprintLine_("");
++	_pprintLine_("      ret         return code (non-zero for warning)");
++	_pprintLine_("");
++	_pprintLine_("   Examples:");
++	_pprintLine_("      [ret]=Kml2Exp('file.kml','file.exp', 1);");
++	_pprintLine_("      [ret]=Kml2Exp('file.kml','file.exp', 1,'central_meridian',45,'standard_parallel',70);");
++	_pprintLine_("      [ret]=Kml2Exp('file.kml','file.exp',-1,'central_meridian', 0,'standard_parallel',71);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(Kml2Exp){
++
++	int i,verbose=1;
++
++	/*input: */
++	char    *filkml=NULL,*filexp=NULL;
++	int     sgn;
++	Options* options=NULL;
++	double   cm=0.,sp=0.;
++
++	/* output: */
++	int     iret=0;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	if (nlhs > NLHS) {
++		Kml2ExpUsage(); _error_("Kml2Exp usage error");
++	}
++	if (nrhs < NRHS) {
++		Kml2ExpUsage(); _error_("Kml2Exp usage error");
++	}
++
++	/*Input datasets: */
++	FetchData(&filkml,KML_IN);
++	FetchData(&filexp,EXP_IN);
++	FetchData(&sgn,SGN_IN);
++	FetchData(&options,NRHS,nrhs,prhs);
++
++	/*  defaults are in Ll2xydef, so don't duplicate them here, and only use user values if both have been specified  */
++	if (options->GetOption("central_meridian") || options->GetOption("standard_parallel")) {
++		options->Get(&cm,"central_meridian");
++		if (verbose) _printLine_("  cm=" << cm);
++		options->Get(&sp,"standard_parallel");
++		if (verbose) _printLine_("  sp=" << sp);
++	}
++
++	/*some checks*/
++	if (sgn !=+1 && sgn!= -1) _error_("Hemisphere sgn=" << sgn << " must be +1 (north) or -1 (south).");
++	if (fabs(cm)      > 180.) _error_("Central meridian cm=" << cm << " must be between -180 (west) and +180 (east) degrees.");
++	if (sp < 0. || sp >  90.) _error_("Standard parallel sp=" << sp << " must be between 0 and 90 degrees (in specified hemisphere).");
++
++	/* Run core computations: */
++	if (options->GetOption("central_meridian") && options->GetOption("standard_parallel"))
++		iret=Kml2Expx(filkml,filexp,sgn,cm,sp);
++	else
++		iret=Kml2Expx(filkml,filexp,sgn);
++
++	/*Write data: */
++	WriteData(RET_OUT,iret);
++
++	/*Clean-up*/
++	xDelete<char>(filexp);
++	xDelete<char>(filkml);
++	delete options;
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.h	(revision 13651)
+@@ -0,0 +1,52 @@
++/*!\file Kml2Exp.h
++ * \brief: prototype for kml to exp file conversion mex module.
++ */
++
++#ifndef _KML2EXP_H
++#define _KML2EXP_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "Kml2Exp"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define KML_IN prhs[0]
++#define EXP_IN prhs[1]
++#define SGN_IN prhs[2]
++/* serial output macros: */
++#define RET_OUT    (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define KML_IN PyTuple_GetItem(args,0)
++#define EXP_IN PyTuple_GetItem(args,1)
++#define SGN_IN PyTuple_GetItem(args,2)
++/* serial output macros: */
++#define RET_OUT    output,0
++#endif
++
++/* serial arg counts: */
++#undef NRHS
++#define NRHS  3
++#undef NLHS
++#define NLHS  1
++
++#endif
+Index: ../trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.cpp	(revision 13651)
+@@ -0,0 +1,51 @@
++/*! \file  PointCloudFindNeighbors
++    \brief: flag points that are too near one another, within an array of point coordinates
++*/
++	
++#include "./PointCloudFindNeighbors.h"
++
++void PointCloudFindNeighborsUsage(void){/*{{{*/
++	_printLine_("   usage:");
++	_printLine_("   [flags]=PointCloudFindNeighbors(x,y,mindistance,multithread);\n");
++	_printLine_("   where:");
++	_printLine_("      x,y: list of points.");
++	_printLine_("      mindistance: minimum distance that should exist between points in the cloud.");
++	_printLine_("      multithread: run multithreaded or not. with multithreads, flags can get 1 and 2 values in duplicates.");
++	_printLine_("      flags: array of flags (flag==1 means point is within mindistance of another point)");
++	_printLine_("");
++}/*}}}*/
++WRAPPER(PointCloudFindNeighbors){
++
++	int i,j;
++
++	/* required input: */
++	double *x = NULL;
++	double *y = NULL;
++	int     nods;
++	double  mindistance;
++	double  multithread;
++
++	/* output: */
++	SeqVec<double> *flags = NULL;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&PointCloudFindNeighborsUsage);
++
++	/*Fetch inputs: */
++	FetchData(&x,&nods,NULL,XHANDLE);  
++	FetchData(&y,NULL,NULL,YHANDLE);
++	FetchData(&mindistance,MINDISTANCE);
++	FetchData(&multithread,MULTITHREAD);
++
++	/*Run core routine: */
++	PointCloudFindNeighborsx(&flags,x,y,nods,mindistance,multithread);
++
++	/* output: */
++	WriteData(FLAGS,flags);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.h	(revision 13651)
+@@ -0,0 +1,54 @@
++/*
++	PointCloudFindNeighbors.h
++*/
++
++#ifndef _POINTCLOUDFINDNEIGHBORS_H
++#define _POINTCLOUDFINDNEIGHBORS_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__
++#define __FUNCT__ "PointCloudFindNeighbors"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* input macros: */
++#define XHANDLE     prhs[0]
++#define YHANDLE     prhs[1]
++#define MINDISTANCE prhs[2]
++#define MULTITHREAD prhs[3]
++/* serial output macros: */
++#define FLAGS (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* input macros: */
++#define XHANDLE     PyTuple_GetItem(args,0)
++#define YHANDLE     PyTuple_GetItem(args,1)
++#define MINDISTANCE PyTuple_GetItem(args,2)
++#define MULTITHREAD PyTuple_GetItem(args,3)
++/* serial output macros: */
++#define FLAGS output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS 1
++#undef NRHS
++#define NRHS 4
++
++#endif  /* _POINTCLOUDFINDNEIGHBORS_H */
+Index: ../trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.cpp	(revision 13651)
+@@ -0,0 +1,46 @@
++/*\file PropagateFlagsFromConnectivity.c
++ *\brief: propagate flags onto mesh, element by element, using connectivity.
++ */
++
++#include "./PropagateFlagsFromConnectivity.h"
++
++void PropagateFlagsFromConnectivityUsage(void) {/*{{{*/
++	_printLine_("");
++	_printLine_("   usage: [pool] = " << __FUNCT__ << "(connectivity,pool,index,flags);");;
++	_printLine_("");
++}/*}}}*/
++WRAPPER(PropagateFlagsFromConnectivity){
++
++	/*input/output datasets: */
++	double* connectivity=NULL;
++	int     nel;
++	double* pool=NULL;
++	double* flags=NULL;
++	int     index;
++	int     dummy;
++	
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&PropagateFlagsFromConnectivityUsage);
++        
++	/*Input datasets: */
++	FetchData(&connectivity,&nel,&dummy,CONNECTIVITY);
++	FetchData(&pool,&dummy,POOL);
++	FetchData(&index,INDEX);
++	FetchData(&flags,&dummy,FLAGS);
++
++	/*!Generate internal degree of freedom numbers: */
++	PropagateFlagsFromConnectivityx(pool,connectivity,index,flags);
++
++	/*write output datasets: */
++	WriteData(POOLOUT,pool,nel);
++
++	/*Free ressources: */
++	xDelete<double>(connectivity);
++	xDelete<double>(flags);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h	(revision 13651)
+@@ -0,0 +1,54 @@
++/*
++	PropagateFlagsFromConnectivity.h
++*/
++
++#ifndef _PROPAGATEFLAGSFROMCONNECTIVITY_H
++#define _PROPAGATEFLAGSFROMCONNECTIVITY_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "PropagateFlagsFromConnectivity"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define CONNECTIVITY prhs[0]
++#define POOL         prhs[1]
++#define INDEX        prhs[2]
++#define FLAGS        prhs[3]
++/* serial output macros: */
++#define POOLOUT (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define CONNECTIVITY PyTuple_GetItem(args,0)
++#define POOL         PyTuple_GetItem(args,1)
++#define INDEX        PyTuple_GetItem(args,2)
++#define FLAGS        PyTuple_GetItem(args,3)
++/* serial output macros: */
++#define POOLOUT output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  4
++
++#endif  /* _PROPAGATEFLAGSFROMCONNECTIVITY_H */
+Index: ../trunk-jpl/src/wrappers/TriaSearch/TriaSearch.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriaSearch/TriaSearch.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/TriaSearch/TriaSearch.cpp	(revision 13651)
+@@ -0,0 +1,60 @@
++/*\file TriaSearch.c
++ *\brief: TriaSearch module. See TriaSearchx for more details.
++ */
++#include "./TriaSearch.h"
++
++void TriaSearchUsage(void){/*{{{*/
++	_pprintLine_("TriaSearch- find triangle holding a point (x0,y0) in a mesh");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("         tria=TriaSearch(index,x,y,x0,y0);");
++	_pprintLine_("      index,x,y: mesh triangulatrion");
++	_pprintLine_("      x0,y0: coordinates of the point for which we are trying to find a triangle");
++	_pprintLine_("      x0,y0 can be an array of points");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(TriaSearch){
++
++	int i;
++
++	/*input: */
++	int*    index=NULL;
++	int     nel;
++	int     dummy;
++
++	double* x=NULL;
++	double* y=NULL;
++	int     nods;
++
++	double* x0=NULL;
++	double* y0=NULL;
++	int     numberofnodes;
++
++	/* output: */
++	double*  tria=NULL;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&TriaSearchUsage);
++
++	/*Input datasets: */
++	FetchData(&index,&nel,&dummy,INDEXHANDLE);
++	FetchData(&x,&nods,XHANDLE);
++	FetchData(&y,&nods,YHANDLE);
++	FetchData(&x0,&numberofnodes,X0HANDLE);
++	FetchData(&y0,&numberofnodes,Y0HANDLE);
++
++	/* Run core computations: */
++	TriaSearchx(&tria,index,nel,x,y,nods,x0,y0,numberofnodes);
++
++	/* c to matlab: */
++	for(i=0;i<numberofnodes;i++)tria[i]++;
++
++	/*Write data: */
++	WriteData(TRIA,tria,numberofnodes);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/TriaSearch/TriaSearch.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriaSearch/TriaSearch.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/TriaSearch/TriaSearch.h	(revision 13651)
+@@ -0,0 +1,57 @@
++/*!\file TriaSearch.h
++ */
++
++#ifndef _TRIASEARCH_H
++#define _TRIASEARCH_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "TriaSearch"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define INDEXHANDLE prhs[0]
++#define XHANDLE     prhs[1]
++#define YHANDLE     prhs[2]
++#define X0HANDLE    prhs[3]
++#define Y0HANDLE    prhs[4]
++
++/* serial output macros: */
++#define TRIA (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define INDEXHANDLE PyTuple _GetItem(args,0)
++#define XHANDLE     PyTuple _GetItem(args,1)
++#define YHANDLE     PyTuple _GetItem(args,2)
++#define X0HANDLE    PyTuple _GetItem(args,3)
++#define Y0HANDLE    PyTuple _GetItem(args,4)
++
++/* serial output macros: */
++#define TRIA output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  5
++
++#endif
+Index: ../trunk-jpl/src/wrappers/InternalFront/InternalFront.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/InternalFront/InternalFront.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/InternalFront/InternalFront.cpp	(revision 13651)
+@@ -0,0 +1,98 @@
++/*\file InternalFront.c
++ *\brief: build pressureload
++ */
++
++#include "./InternalFront.h"
++
++void InternalFrontUsage(void) {/*{{{*/
++	_pprintLine_("");
++	_pprintLine_("   usage: icefront = " << __FUNCT__ << "(md);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(InternalFront){
++
++	bool*   elementonwater=NULL;
++	int*    elements=NULL;
++	int*    connectivity=NULL;
++	int*    elementconnectivity=NULL;
++	int*    front=NULL;
++	double* front2=NULL;
++	bool    found;
++	int     numberofelements,numberofsegments;
++	int     N,M;
++	int     i,j,ii,jj,id;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&InternalFrontUsage);
++
++	/*Fetch required fields*/
++	FetchData(&numberofelements,mxGetAssignedField(MODEL,0,"numberofelements"));
++	if(numberofelements<=0) _error_("No elements found in the model");
++	FetchData(&elements,&M,&N,mxGetAssignedField(MODEL,0,"elements"));
++	if(M!=numberofelements || N!=3) _error_("Field 'elements' should be of size [md.numberofelements 3]");
++	FetchData(&elementonwater,&M,&N,mxGetAssignedField(MODEL,0,"elementonwater"));
++	if(M!=numberofelements || N!=1) _error_("Field 'elementonwater' should be of size [md.numberofelements 1]");
++	FetchData(&elementconnectivity,&M,&N,mxGetAssignedField(MODEL,0,"elementconnectivity"));
++	if(M!=numberofelements || N!=3) _error_("Field 'elementconnectivity' should be of size [md.numberofelements 3]");
++
++	/*Allocate and initialize all variables*/
++	numberofsegments=0;
++	front=xNew<int>(3*numberofelements*4);
++
++	/*Loop over all elements on water*/
++	for(i=0;i<numberofelements;i++){
++
++		/*Skip if on water*/
++		if(!elementonwater[i]) continue;
++
++		/*Loop over all three adjacent elements*/
++		for(j=0;j<3;j++){
++
++			/*Skip if adjacent element does not exist or is on water*/
++			id=elementconnectivity[i*3+j];
++			if(id==0) continue;
++			if(elementonwater[id-1]) continue;
++
++			/*We have an ice front to add here, let's go!*/
++			for(ii=0;ii<3;ii++){
++
++				found=false;
++				for(jj=0;jj<3;jj++){
++					if(elements[(id-1)*3+ii]==elements[i*3+jj]){
++						found=true;
++						break;
++					}
++				}
++
++				/*OK, we just found the node of id, which is not in i. We have the segment*/
++				if(!found){
++					front[numberofsegments*4+0]=elements[(id-1)*3+(ii+1)%3];
++					front[numberofsegments*4+1]=elements[(id-1)*3+(ii+2)%3];
++					front[numberofsegments*4+2]=id;
++					front[numberofsegments*4+3]=IceEnum;
++					numberofsegments+=1;
++					break;
++				}
++			}
++
++			/*In debugging mode, check that the segment has been found*/
++			_assert_(!found);
++		}
++	}
++
++	/*Now that we know how many segments there is we can allocate the final matrix*/
++	if(numberofsegments){
++		front2=xNew<double>(4*numberofsegments);
++		for(i=0;i<4*numberofsegments;i++) front2[i]=(double)front[i];
++	}
++	xDelete<int>(front);
++
++	/*write output datasets: */
++	WriteData(FRONT,front2,numberofsegments,4);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/InternalFront/InternalFront.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InternalFront/InternalFront.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/InternalFront/InternalFront.h	(revision 13651)
+@@ -0,0 +1,47 @@
++/*
++	InternalFront.h
++*/
++
++#ifndef _INTERNALFRONT_H
++#define _INTERNALFRONT_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++#include "../../c/io/io.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "InternalFront"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define MODEL prhs[0]
++/* serial output macros: */
++#define FRONT (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define MODEL PyTuple_GetItem(args,0)
++/* serial output macros: */
++#define FRONT output,0]
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  1
++
++#endif
+Index: ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 13651)
+@@ -0,0 +1,84 @@
++/*!\file:  MeshPartition.cpp
++ * \brief: partition mesh according to number of areas, using Metis library.
++*/
++	
++#include "./MeshPartition.h"
++
++void MeshPartitionUsage(void){/*{{{*/
++	_printLine_("   usage:");
++	_printString_("   [element_partitioning,node_partitioning]=MeshPartition(md.mesh,numpartitions)");
++	_printLine_("   where:");
++	_printLine_("      element_partitioning is a vector of partitioning area numbers, for every element.");
++	_printLine_("      node_partitioning is a vector of partitioning area numbers, for every node.");
++	_printLine_("");
++}/*}}}*/
++WRAPPER(MeshPartition){
++
++	/*Indexing: */
++	int i,j;
++
++	/* required input: */
++	int     dim;
++	int     numberofelements;
++	int     numberofvertices;
++	double *elements         = NULL;
++	int     elements_width;
++
++	int numberofelements2d;
++	int numberofvertices2d;
++	double* elements2d=NULL;
++
++	int numberoflayers;
++	int numareas=1;
++
++	/* output: */
++	int    *int_element_partitioning = NULL;
++	int    *int_node_partitioning    = NULL;
++	double *element_partitioning     = NULL;
++	double *node_partitioning        = NULL;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&MeshPartitionUsage);
++
++	/*Fetch data: */
++	FetchData(&dim,mxGetAssignedField(MODEL,0,"dimension"));
++	FetchData(&numberofelements,mxGetAssignedField(MODEL,0,"numberofelements"));
++	FetchData(&numberofvertices,mxGetAssignedField(MODEL,0,"numberofvertices"));
++	FetchData(&elements,NULL,&elements_width,mxGetAssignedField(MODEL,0,"elements"));
++
++	if (dim==3){
++		FetchData(&numberofelements2d,mxGetAssignedField(MODEL,0,"numberofelements2d"));
++		FetchData(&numberofvertices2d,mxGetAssignedField(MODEL,0,"numberofvertices2d"));
++		FetchData(&elements2d,NULL,NULL,mxGetAssignedField(MODEL,0,"elements2d"));
++	}
++	FetchData(&numberoflayers,mxGetAssignedField(MODEL,0,"numberoflayers"));
++	FetchData(&numareas,NUMAREAS);
++
++	/*Run partitioning algorithm based on a "clever" use of the Metis partitioner: */
++	MeshPartitionx(&int_element_partitioning,&int_node_partitioning,numberofelements,numberofvertices,elements,
++		numberofelements2d,numberofvertices2d,elements2d,numberoflayers,elements_width,dim,numareas);
++
++	/*Post process node_partitioning and element_partitioning to be in double format. Metis needed them in int* format: */
++	element_partitioning=xNew<double>(numberofelements);
++	for (i=0;i<numberofelements;i++){
++		element_partitioning[i]=(double)int_element_partitioning[i]+1; //Metis indexing from 0, matlab from 1.
++	}
++	
++	node_partitioning=xNew<double>(numberofvertices);
++	for (i=0;i<numberofvertices;i++){
++		node_partitioning[i]=(double)int_node_partitioning[i]+1; //Metis indexing from 0, matlab from 1.
++	}
++
++	/*Write data:*/
++	WriteData(ELEMENTPARTITIONING,element_partitioning,numberofelements);
++	WriteData(NODEPARTITIONING,node_partitioning,numberofvertices);
++	
++	/*Free ressources:*/
++	//don't! let matlab do it.
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h	(revision 13651)
+@@ -0,0 +1,54 @@
++/*
++	MeshPartition.h
++*/
++
++#ifndef _MESHPARTITION_H
++#define _MESHPARTITION_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "MeshPartition"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define MODEL    prhs[0]
++#define NUMAREAS prhs[1]
++/* serial output macros: */
++#define ELEMENTPARTITIONING (mxArray**)&plhs[0]
++#define NODEPARTITIONING (mxArray**)&plhs[1]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define MODEL    PyTuple_GetItem(args,0)
++#define NUMAREAS PyTuple_GetItem(args,1)
++/* serial output macros: */
++#define ELEMENTPARTITIONING output,0
++#define NODEPARTITIONING output,1
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  2
++#undef NRHS
++#define NRHS  2
++
++
++#endif  /* _MESHPARTITION_H */
++
+Index: ../trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.cpp	(revision 13651)
+@@ -0,0 +1,151 @@
++/*!\file InterpFromMesh2d.c
++ * \brief: data interpolation from a list of (x,y,values) into mesh vertices
++*/
++	
++#include "./InterpFromMesh2d.h"
++
++void InterpFromMesh2dUsage(void){/*{{{*/
++	_pprintLine_("   usage:");
++	_pprintLine_("         data_prime=InterpFromMesh2d(index,x,y,data,x_prime,y_prime);\n");
++	_pprintLine_("      or data_prime=InterpFromMesh2d(index,x,y,data,x_prime,y_prime,default_value);\n");
++	_pprintLine_("      or data_prime=InterpFromMesh2d(index,x,y,data,x_prime,y_prime,default_value,contourname);\n");
++	_pprintLine_("   where:");
++	_pprintLine_("      x,y: coordinates of the nodes where data is defined");
++	_pprintLine_("      index: index of the mesh where data is defined");
++	_pprintLine_("      data - vector holding the data to be interpolated onto the points.");
++	_pprintLine_("      x_prime,y_prime: coordinates of the mesh vertices onto which we interpolate.");
++	_pprintLine_("      default_value: a scalar or vector of size length(x_prime).");
++	_pprintLine_("      contourname: linear interpolation will happen on all x_interp,y_interp inside the contour, default value will be adopted on the rest of the mesh.");
++	_pprintLine_("      data_prime:  vector of prime interpolated data.");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(InterpFromMesh2d){
++
++	/*input: */
++	double* index_data=NULL;
++	int     index_data_rows;
++	int     dummy;
++
++	double* x_data=NULL;
++	int     x_data_rows;
++	
++	double* y_data=NULL;
++	int     y_data_rows;
++
++	double* data=NULL; 
++	int     data_rows;
++	int     data_cols;
++
++	double* x_prime=NULL;
++	double* y_prime=NULL;
++	
++	int     x_prime_rows;
++	int     y_prime_rows;
++
++
++	double* default_values=NULL;
++	int     num_default_values=0;
++
++	/*contours*/
++	int i;
++	mxArray *matlabstructure = NULL;
++	Contour<double> **contours=NULL;
++	int numcontours;
++	Contour<double> *contouri=NULL;
++
++	/*Intermediary*/
++	int nods_data;
++	int nels_data;
++	int nods_prime;
++
++	/* output: */
++	SeqVec<double> *data_prime = NULL;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	if(nlhs!=NLHS){
++		InterpFromMesh2dUsage();
++		_error_("InterpFromMeshToMesh2dUsage usage error");
++	}
++	if((nrhs!=6) && (nrhs!=7) && (nrhs!=8)){
++		InterpFromMesh2dUsage();
++		_error_("InterpFromMeshToMesh2dUsage usage error");
++	}
++
++	/*Input datasets: */
++	FetchData(&index_data,&index_data_rows,&dummy,INDEXHANDLE);
++	FetchData(&x_data,&x_data_rows,NULL,XHANDLE);
++	FetchData(&y_data,&y_data_rows,NULL,YHANDLE);
++	FetchData(&data,&data_rows,&data_cols,DATAHANDLE);
++	FetchData(&x_prime,&x_prime_rows,NULL,XPRIMEHANDLE);
++	FetchData(&y_prime,&y_prime_rows,NULL,YPRIMEHANDLE);
++
++	if(nrhs>=7){
++		/*default values: */
++		FetchData(&default_values,&num_default_values,DEFAULTHANDLE);
++	}
++	else{
++		default_values=NULL;
++		num_default_values=0;
++	}
++
++	if(nrhs>=8){
++		
++		/*Call expread on filename to build a contour array in the matlab workspace: */
++		mexCallMATLAB( 1, &matlabstructure, 1, (mxArray**)&FILENAME, "expread");
++
++		/*contours: */
++		numcontours=mxGetNumberOfElements(matlabstructure);
++		contours=xNew<Contour<double> *>(numcontours);
++		for(i=0;i<numcontours;i++){
++			//allocate
++			contouri=xNew<Contour<double> >(1);
++			//retrieve dimension of this contour.
++			contouri->nods=(int)mxGetScalar(mxGetField(matlabstructure,i,"nods"));
++			//set pointers.
++			contouri->x=mxGetPr(mxGetField(matlabstructure,i,"x"));
++			contouri->y=mxGetPr(mxGetField(matlabstructure,i,"y"));
++			*(contours+i)=contouri;
++		}
++
++		/* Debugging of contours :{{{1*/
++		/*for(i=0;i<numcontours;i++){
++		  _printLine_("\nContour echo: contour number  " << i+1 << " / " << numcontours);
++		  contouri=*(contours+i);
++		  _printLine_("   Number of vertices " << contouri->nods);
++		  for (j=0;j<contouri->nods;j++){
++		  _printLine_("   " << *(contouri->x+j) << "f " << *(contouri->y+j) << "f");
++		  }
++		  }*/
++		/*}}}*/
++	}
++	else{
++		numcontours=0;
++		contours=NULL;
++	}
++
++
++	/*some checks*/
++	if (x_data_rows!=y_data_rows){
++		_error_("vectors x and y should have the same length!");
++	}
++	if (x_prime_rows!=y_prime_rows){
++		_error_("vectors x_prime and y_prime should have the same length!");
++	}
++	
++	/*get number of elements and number of nodes in the data*/
++	nels_data=index_data_rows;
++	nods_data=x_data_rows;
++	nods_prime=x_prime_rows;
++
++	/* Run core computations: */
++	InterpFromMesh2dx(&data_prime,index_data,x_data,y_data,nods_data,nels_data,data,data_rows,x_prime,y_prime,nods_prime,default_values,num_default_values,contours,numcontours);
++
++	/*Write data: */
++	WriteData(DATAPRIME,data_prime);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.h	(revision 13651)
+@@ -0,0 +1,60 @@
++/*!\file InterpFromMesh2d.h
++ * \brief: prototype for Data Interpolation mex module.
++ */
++
++#ifndef _INTERPFROMMESH2D_H
++#define _INTERPFROMMESH2D_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "InterpFromMesh2d"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define INDEXHANDLE   prhs[0]
++#define XHANDLE       prhs[1]
++#define YHANDLE       prhs[2]
++#define DATAHANDLE    prhs[3]
++#define XPRIMEHANDLE  prhs[4]
++#define YPRIMEHANDLE  prhs[5]
++#define DEFAULTHANDLE prhs[6]
++#define FILENAME      prhs[7]
++/* serial output macros: */
++#define DATAPRIME (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define INDEXHANDLE   PyTuple_GetItem(args,0)
++#define XHANDLE       PyTuple_GetItem(args,1)
++#define YHANDLE       PyTuple_GetItem(args,2)
++#define DATAHANDLE    PyTuple_GetItem(args,3)
++#define XPRIMEHANDLE  PyTuple_GetItem(args,4)
++#define YPRIMEHANDLE  PyTuple_GetItem(args,5)
++#define DEFAULTHANDLE PyTuple_GetItem(args,6)
++#define FILENAME      PyTuple_GetItem(args,7)
++/* serial output macros: */
++#define DATAPRIME output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++
++#endif  /* _INTERPFROMMESH2D_H */
+Index: ../trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.cpp	(revision 13651)
+@@ -0,0 +1,41 @@
++/*\file ElementConnectivity.c
++ *\brief: build element connectivity using node connectivity and elements. 
++ */
++
++#include "./ElementConnectivity.h"
++
++void ElementConnectivityUsage(void) {/*{{{*/
++	_pprintLine_("");
++	_pprintLine_("   usage: elementconnectivity = " << __FUNCT__ << "(elements, nodeconnectivity);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(ElementConnectivity){
++
++	/*inputs: */
++	double* elements=NULL;
++	double* nodeconnectivity=NULL;
++	int     nel,nods;
++	int     width;
++
++	/*outputs: */
++	double* elementconnectivity=NULL;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments: */
++	CHECKARGUMENTS(NLHS,NRHS,&ElementConnectivityUsage);
++        
++	/*Input datasets: */
++	FetchData(&elements,&nel,NULL,ELEMENTS);
++	FetchData(&nodeconnectivity,&nods,&width,NODECONNECTIVITY);
++
++	/*!Generate internal degree of freedom numbers: */
++	ElementConnectivityx(&elementconnectivity, elements,nel, nodeconnectivity, nods, width);
++
++	/*write output datasets: */
++	WriteData(ELEMENTCONNECTIVITY,elementconnectivity,nel,3);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.h	(revision 13651)
+@@ -0,0 +1,55 @@
++/*
++	ElementConnectivity.h
++*/
++
++#ifndef _ELEMENTCONNECTIVITY_H
++#define _ELEMENTCONNECTIVITY_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++/*Header files: */
++#include "../../c/include/globals.h"
++#include "../../c/toolkits/toolkits.h"
++#include "../../c/include/include.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++#include "../../c/io/io.h"
++#include "../../c/EnumDefinitions/EnumDefinitions.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "ElementConnectivity"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define ELEMENTS         prhs[0]
++#define NODECONNECTIVITY prhs[1]
++/* serial output macros: */
++#define ELEMENTCONNECTIVITY (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define ELEMENTS         PyTuple_GetItem(args,0)
++#define NODECONNECTIVITY PyTuple_GetItem(args,1)
++/* serial output macros: */
++#define ELEMENTCONNECTIVITY output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  2
++
++#endif  /* _ELEMENTCONNECTIVITY_H */
+Index: ../trunk-jpl/src/wrappers/Kriging/Kriging.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Kriging/Kriging.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/Kriging/Kriging.h	(revision 13651)
+@@ -0,0 +1,59 @@
++/*
++	Kriging.h
++*/
++
++#ifndef _KRIGING_H_
++#define _KRIGING_H_
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "Kriging"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define X            prhs[0]
++#define Y            prhs[1]
++#define OBSERVATIONS prhs[2]
++#define XINTERP      prhs[3]
++#define YINTERP      prhs[4]
++
++/* serial output macros: */
++#define PREDICTIONS (mxArray**)&plhs[0]
++#define ERROR       (mxArray**)&plhs[1]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define X            PyTuple_GetItem(args,0)
++#define Y            PyTuple_GetItem(args,1)
++#define OBSERVATIONS PyTuple_GetItem(args,2)
++#define XINTERP      PyTuple_GetItem(args,3)
++#define YINTERP      PyTuple_GetItem(args,4)
++
++/* serial output macros: */
++#define PREDICTIONS output,0
++#define ERROR       output,1
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  2
++#undef NRHS
++#define NRHS  5
++
++#endif  /* _KRIGING_H_ */
+Index: ../trunk-jpl/src/wrappers/Kriging/Kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/Kriging/Kriging.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/Kriging/Kriging.cpp	(revision 13651)
+@@ -0,0 +1,73 @@
++/*\file Kriging.c
++ *\brief: best linear predictor
++ */
++#include "./Kriging.h"
++
++void KrigingUsage(void){/*{{{*/
++	_pprintLine_("");
++	_pprintLine_("   usage: predictions=" << __FUNCT__ << "(x,y,observations,x_interp,y_interp,'options');");
++	_pprintLine_("   available options:");
++	_pprintLine_("      -'model': Available variogram models 'gaussian' (default),'spherical','power','exponential'");
++	_pprintLine_("         -'nugget': nugget effect (default 0.2)");
++	_pprintLine_("         -'range':  for gaussian, spherical and exponential models (default sqrt(3))");
++	_pprintLine_("         -'sill':   for gaussian, spherical and exponential models (default 1)");
++	_pprintLine_("         -'slope':  for power model (default 1)");
++	_pprintLine_("         -'power':  for power model (default 1)");
++	_pprintLine_("      -'searchradius': search radius for each prediction (default is observations span)");
++	_pprintLine_("      -'boxlength':    minimum length of quadtree boxes (useful to decrease the number of observations)");
++	_pprintLine_("      -'maxdata':      minimum number of observations for a prediction (default is 50)");
++	_pprintLine_("      -'mindata':      maximum number of observations for a prediction (default is 1)");
++	_pprintLine_("      -'maxtrimming':  maximum trimming value (default is -1.e+21)");
++	_pprintLine_("      -'mintrimming':  minimum trimming value (default is +1.e+21)");
++	_pprintLine_("      -'minspacing':   minimum distance between observation (default is 0.01)");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(Kriging){
++
++	/*Outputs*/
++	double  *x            = NULL;
++	double  *y            = NULL;
++	double  *observations = NULL;
++	double  *x_interp     = NULL;
++	double  *y_interp     = NULL;
++	double  *predictions  = NULL;
++	double  *error        = NULL;
++	Options *options      = NULL;
++	int      N_interp,M_interp,M,N,n_obs;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	if (nrhs<NRHS || nlhs>NLHS){
++		KrigingUsage(); _error_("Kriging usage error");
++	}
++
++	/*Fetch inputs: */
++	FetchData(&x,&n_obs,X);
++	FetchData(&y,&N,Y);                       if(n_obs!=N) _error_("x and y should have the same size");
++	FetchData(&observations,&N,OBSERVATIONS); if(n_obs!=N) _error_("x and observations should have the same size");
++	FetchData(&x_interp,&M_interp,&N_interp,XINTERP);
++	FetchData(&y_interp,&M,&N,YINTERP);       if(N!=N_interp || M!=M_interp) _error_("x_interp and y_interp should have the same size");
++	FetchData(&options,NRHS,nrhs,prhs);
++
++	/*Call x layer*/
++	Krigingx(&predictions,&error,x,y,observations,n_obs,x_interp,y_interp,M_interp*N_interp,options);
++
++	/*Generate output Matlab Structures*/
++	if(nlhs>=1) WriteData(PREDICTIONS,predictions,M_interp,N_interp);
++	if(nlhs==2) WriteData(ERROR,error,M_interp,N_interp);
++
++	/*Free ressources: */
++	xDelete<double>(x);
++	xDelete<double>(y);
++	xDelete<double>(observations);
++	xDelete<double>(x_interp);
++	xDelete<double>(y_interp);
++	xDelete<double>(predictions);
++	xDelete<double>(error);
++	delete options;
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/EnumToString/EnumToString.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/EnumToString/EnumToString.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/EnumToString/EnumToString.cpp	(revision 13651)
+@@ -0,0 +1,34 @@
++/*\file EnumToString.c
++ *\brief:convert enum (int) to string
++ */
++
++#include "./EnumToString.h"
++
++void EnumToStringUsage(void){/*{{{*/
++	_pprintLine_("");
++	_pprintLine_("   usage: " << __FUNCT__ << "string = EnumToString(enum);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(EnumToString){
++
++	char    *name    = NULL;
++	int      enum_in;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments: */
++	CHECKARGUMENTS(NLHS,NRHS,&EnumToStringUsage);
++
++	/*Fetch inputs: */
++	FetchData(&enum_in,ENUMIN);
++
++	/*Run core function: */
++	EnumToStringx(&name,enum_in);
++
++	/* output: */
++	WriteData(NAME,name);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/EnumToString/EnumToString.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/EnumToString/EnumToString.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/EnumToString/EnumToString.h	(revision 13651)
+@@ -0,0 +1,49 @@
++/*!\file:  EnumToString.h
++ * \brief header file for EnumToString module.
++ */ 
++
++#ifndef _ENUMTOSTRING_H
++#define _ENUMTOSTRING_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++/*Header files: */
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "EnumToString"
++ 
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define ENUMIN (mxArray*)prhs[0]
++/* serial output macros: */
++#define NAME (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define ENUMIN PyTuple_GetItem(args,0)
++/* serial output macros: */
++#define NAME output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  1
++
++#endif  /* _TEST_H */
+Index: ../trunk-jpl/src/wrappers/StringToEnum/StringToEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/StringToEnum/StringToEnum.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/StringToEnum/StringToEnum.cpp	(revision 13651)
+@@ -0,0 +1,34 @@
++/*\file StringToEnum.c
++ *\brief:convert enum (int) to string
++ */
++
++#include "./StringToEnum.h"
++
++void StringToEnumUsage(void){/*{{{*/
++	_pprintLine_("");
++	_pprintLine_("   usage: " << __FUNCT__ << "enum = StringToEnum(string);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(StringToEnum){
++
++	char    *name    = NULL;
++	int      enum_out;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments: */
++	CHECKARGUMENTS(NLHS,NRHS,&StringToEnumUsage);
++
++	/*Fetch inputs: */
++	FetchData(&name,NAME);
++
++	/*Run core function: */
++	enum_out=StringToEnumx(name);
++
++	/* output: */
++	WriteData(ENUMOUT,enum_out);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/StringToEnum/StringToEnum.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/StringToEnum/StringToEnum.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/StringToEnum/StringToEnum.h	(revision 13651)
+@@ -0,0 +1,49 @@
++/*!\file:  StringToEnum.h
++ * \brief header file for StringToEnum module.
++ */ 
++
++#ifndef _STRINGTOENUM_H
++#define _STRINGTOENUM_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++/*Header files: */
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "StringToEnum"
++    
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define NAME (mxArray*)prhs[0]
++/* serial output macros: */
++#define ENUMOUT (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define NAME PyTuple_GetItem(args,0)
++/* serial output macros: */
++#define ENUMOUT output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  1
++
++#endif  /* _TEST_H */
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13651)
+@@ -0,0 +1,240 @@
++AM_CPPFLAGS = @DAKOTAINCL@ @MATLABINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @BOOSTINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@ @ADOLCINCL@
++
++EXEEXT=$(MATLABWRAPPEREXT)
++
++#Modules {{{
++if MODULES
++lib_LTLIBRARIES =  AverageFilter.la\
++						 BamgMesher.la\
++						 BamgConvertMesh.la\
++						 BamgTriangulate.la\
++						 ContourToMesh.la\
++						 ContourToNodes.la\
++						 ElementConnectivity.la\
++						 EnumToString.la\
++						 HoleFiller.la\
++						 InternalFront.la\
++						 InterpFromGridToMesh.la\
++						 InterpFromMeshToMesh2d.la\
++						 InterpFromMeshToMesh3d.la\
++						 InterpFromMeshToGrid.la\
++						 InterpFromMesh2d.la\
++						 Ll2xy.la\
++						 NodeConnectivity.la\
++						 MeshPartition.la\
++						 MeshProfileIntersection.la\
++						 PointCloudFindNeighbors.la\
++						 PropagateFlagsFromConnectivity.la\
++						 StringToEnum.la\
++						 TriaSearch.la\
++						 TriMesh.la\
++						 TriMeshProcessRifts.la\
++						 Scotch.la\
++						 Xy2ll.la\
++						 Chaco.la
++
++if KRIGING
++lib_LTLIBRARIES +=  Kriging.la
++endif
++if KML
++lib_LTLIBRARIES +=  KMLFileRead.la\
++				   KMLMeshWrite.la\
++				   KMLOverlay.la\
++				   Shp2Kml.la\
++				   Exp2Kml.la\
++				   Kml2Exp.la
++endif
++endif 
++
++#}}}
++#Flags and libraries {{{
++if SHAREDLIBS
++deps = ../../c/libISSMCore.la ../../c/libISSMModules.la
++else
++deps = ../../c/libISSMCore.a ../../c/libISSMModules.a
++endif
++
++deps +=  $(MATHLIB) ${MEXLIB}
++
++#$(TRIANGLELIB) $(PETSCLIB) $(FLIBS) $(PLAPACKLIB) $(SPOOLESLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MPILIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(SHAPELIBLIB) $(GSLLIB) 
++
++#Triangle library
++AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER
++
++#Matlab part
++AM_LDFLAGS = -module $(MEXLINK) -shrext ${EXEEXT}
++if VERSION
++AM_LDFLAGS +=
++else
++AM_LDFLAGS += -avoid-version
++endif
++if SHAREDLIBS
++deps += ../../c/libISSMMatlab.la 
++else
++deps += ../../c/libISSMMatlab.a
++AM_LDFLAGS += --no-warnings 
++endif
++
++AM_CXXFLAGS +=  -D_HAVE_MATLAB_MODULES_ -D_GNU_SOURCE -fPIC -fno-omit-frame-pointer -pthread 
++
++######################################################################################
++# Circular dependencies may not be necessary here.
++#deps += ../../c/libISSMCore.a 
++#if CIRCULAR_DEPENDENCIES
++#deps += $(TRIANGLELIB) $(PETSCLIB) $(FLIBS) $(PLAPACKLIB) $(SPOOLESLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MPILIB) $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(SHAPELIBLIB) $(GSLLIB)
++#endif
++######################################################################################
++
++if SHAREDLIBS
++deps +=
++else
++deps += ../../c/libISSMModules.a ../../c/libISSMCore.a  
++if ADOLC
++deps += $(ADOLCLIB)
++endif
++endif
++
++#Optimization flags:
++AM_CXXFLAGS += $(CXXOPTFLAGS) 
++#}}}
++#Bin sources {{{
++AverageFilter_la_SOURCES = ../AverageFilter/AverageFilter.cpp\
++									../AverageFilter/AverageFilter.h
++AverageFilter_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++BamgMesher_la_SOURCES = ../BamgMesher/BamgMesher.cpp\
++								../BamgMesher/BamgMesher.h
++BamgMesher_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++BamgConvertMesh_la_SOURCES = ../BamgConvertMesh/BamgConvertMesh.cpp\
++									  ../BamgConvertMesh/BamgConvertMesh.h
++BamgConvertMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++BamgTriangulate_la_SOURCES = ../BamgTriangulate/BamgTriangulate.cpp\
++									  ../BamgTriangulate/BamgTriangulate.h
++BamgTriangulate_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++Chaco_la_SOURCES = ../Chaco/Chaco.cpp\
++						 ../Chaco/Chaco.h
++Chaco_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(CHACOLIB)
++
++ContourToMesh_la_SOURCES = ../ContourToMesh/ContourToMesh.cpp\
++									../ContourToMesh/ContourToMesh.h
++ContourToMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
++
++ContourToNodes_la_SOURCES = ../ContourToNodes/ContourToNodes.cpp\
++									 ../ContourToNodes/ContourToNodes.h
++ContourToNodes_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++ElementConnectivity_la_SOURCES = ../ElementConnectivity/ElementConnectivity.cpp\
++											../ElementConnectivity/ElementConnectivity.h
++ElementConnectivity_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++EnumToString_la_SOURCES = ../EnumToString/EnumToString.cpp\
++								  ../EnumToString/EnumToString.h
++EnumToString_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++StringToEnum_la_SOURCES = ../StringToEnum/StringToEnum.cpp\
++								  ../StringToEnum/StringToEnum.h
++StringToEnum_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++HoleFiller_la_SOURCES = ../HoleFiller/HoleFiller.cpp\
++								../HoleFiller/HoleFiller.h
++HoleFiller_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) 
++
++InternalFront_la_SOURCES = ../InternalFront/InternalFront.cpp\
++									../InternalFront/InternalFront.h
++InternalFront_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++InterpFromGridToMesh_la_SOURCES = ../InterpFromGridToMesh/InterpFromGridToMesh.cpp\
++											 ../InterpFromGridToMesh/InterpFromGridToMesh.h
++InterpFromGridToMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
++
++InterpFromMeshToMesh2d_la_SOURCES = ../InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp\
++												../InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h
++InterpFromMeshToMesh2d_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
++
++InterpFromMeshToMesh3d_la_SOURCES = ../InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.cpp\
++												../InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h
++InterpFromMeshToMesh3d_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++InterpFromMeshToGrid_la_SOURCES = ../InterpFromMeshToGrid/InterpFromMeshToGrid.cpp\
++											 ../InterpFromMeshToGrid/InterpFromMeshToGrid.h
++InterpFromMeshToGrid_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++InterpFromMesh2d_la_SOURCES = ../InterpFromMesh2d/InterpFromMesh2d.cpp\
++										../InterpFromMesh2d/InterpFromMesh2d.h
++InterpFromMesh2d_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
++
++KMLFileRead_la_SOURCES = ../KMLFileRead/KMLFileRead.cpp\
++								 ../KMLFileRead/KMLFileRead.h
++KMLFileRead_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++KMLMeshWrite_la_SOURCES = ../KMLMeshWrite/KMLMeshWrite.cpp\
++								  ../KMLMeshWrite/KMLMeshWrite.h
++KMLMeshWrite_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++KMLOverlay_la_SOURCES = ../KMLOverlay/KMLOverlay.cpp\
++								../KMLOverlay/KMLOverlay.h
++KMLOverlay_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++Xy2ll_la_SOURCES = ../Xy2ll/Xy2ll.cpp\
++						 ../Xy2ll/Xy2ll.h
++Xy2ll_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++Ll2xy_la_SOURCES = ../Ll2xy/Ll2xy.cpp\
++						 ../Ll2xy/Ll2xy.h
++Ll2xy_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++Exp2Kml_la_SOURCES = ../Exp2Kml/Exp2Kml.cpp\
++							../Exp2Kml/Exp2Kml.h
++Exp2Kml_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++Kml2Exp_la_SOURCES = ../Kml2Exp/Kml2Exp.cpp\
++							../Kml2Exp/Kml2Exp.h
++Kml2Exp_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++Kriging_la_SOURCES = ../Kriging/Kriging.cpp\
++							../Kriging/Kriging.h
++Kriging_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(GSLLIB) $(MULTITHREADINGLIB)
++
++MeshPartition_la_SOURCES = ../MeshPartition/MeshPartition.cpp\
++									../MeshPartition/MeshPartition.h
++MeshPartition_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(METISLIB)
++
++MeshProfileIntersection_la_SOURCES = ../MeshProfileIntersection/MeshProfileIntersection.cpp\
++												 ../MeshProfileIntersection/MeshProfileIntersection.h
++MeshProfileIntersection_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++NodeConnectivity_la_SOURCES = ../NodeConnectivity/NodeConnectivity.cpp\
++										../NodeConnectivity/NodeConnectivity.h
++NodeConnectivity_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++PointCloudFindNeighbors_la_SOURCES = ../PointCloudFindNeighbors/PointCloudFindNeighbors.cpp\
++												 ../PointCloudFindNeighbors/PointCloudFindNeighbors.h
++PointCloudFindNeighbors_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
++
++PropagateFlagsFromConnectivity_la_SOURCES = ../PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.cpp\
++														  ../PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h
++PropagateFlagsFromConnectivity_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++Scotch_la_SOURCES = ../Scotch/Scotch.cpp\
++						  ../Scotch/Scotch.h
++Scotch_la_LIBADD = ${deps} $(SCOTCHLIB) $(MPILIB)
++
++Shp2Kml_la_SOURCES = ../Shp2Kml/Shp2Kml.cpp\
++							../Shp2Kml/Shp2Kml.h
++Shp2Kml_la_LIBADD = ${deps} $(SHAPELIBLIB) $(MPILIB) $(PETSCLIB)
++
++TriaSearch_la_SOURCES = ../TriaSearch/TriaSearch.cpp\
++								../TriaSearch/TriaSearch.h
++TriaSearch_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
++TriMesh_la_SOURCES = ../TriMesh/TriMesh.cpp\
++							../TriMesh/TriMesh.h
++TriMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(TRIANGLELIB)
++
++TriMeshProcessRifts_la_SOURCES = ../TriMeshProcessRifts/TriMeshProcessRifts.cpp\
++											../TriMeshProcessRifts/TriMeshProcessRifts.h
++TriMeshProcessRifts_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++#}}}
+Index: ../trunk-jpl/src/wrappers/matlab
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab	(revision 13650)
++++ ../trunk-jpl/src/wrappers/matlab	(revision 13651)
+
+Property changes on: ../trunk-jpl/src/wrappers/matlab
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,10 ##
++*.obj
++Makefile
++*.lib
++*.mexmaci64
++*.mexa64
++*.mexw64
++*.manifest
++*.exp
++.deps
++Makefile.in
+Index: ../trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.cpp	(revision 13651)
+@@ -0,0 +1,56 @@
++/*\file BamgTriangulate.c
++ *\brief: bamg module.
++ */
++#include "./BamgTriangulate.h"
++
++void BamgTriangulateUsage(void){/*{{{*/
++	_pprintString_("BAMGTRIANGULATE - Delaunay Triangulation of a list of points");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("      index=BamgTriangulate(x,y);");
++	_pprintLine_("      index: index of the triangulation");
++	_pprintLine_("      x,y: coordinates of the nodes");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(BamgTriangulate){
++
++	/*input: */
++	double* x=NULL;
++	double* y=NULL;
++	int     x_cols;
++	int     y_rows,y_cols;
++	int nods;
++
++	/*Output*/
++	int* index=NULL;
++	int  nels;
++
++	/*Intermediary*/
++	int verbose=0;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&BamgTriangulateUsage);
++
++	/*Input datasets: */
++	if (verbose) _printLine_("Fetching inputs");
++	FetchData(&x,&nods,&x_cols,XHANDLE);
++	FetchData(&y,&y_rows,&y_cols,YHANDLE);
++
++	/*Check inputs*/
++	if(y_rows!=nods)         _error_("x and y do not have the same length");
++	if(x_cols>1 || y_cols>1) _error_("x and y should have only one column");
++	if(nods<3)               _error_("At least 3 points are required");
++
++	/* Run core computations: */
++	if (verbose) _printLine_("Call core");
++	BamgTriangulatex(&index,&nels,x,y,nods);
++
++	/*Write output*/
++	WriteData(INDEX,index,nels,3);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.h	(revision 13651)
+@@ -0,0 +1,52 @@
++/*!\file BamgTriangulate.h
++ * \brief: prototype for Data Interpolation mex module.
++ */
++
++#ifndef _BAMGTRIANGULATE_H
++#define _BAMGTRIANGULATE_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "BamgTriangulate"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define XHANDLE prhs[0]
++#define YHANDLE prhs[1]
++
++/* serial output macros: */
++#define INDEX (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define XHANDLE PyTuple_GetItem(args,0)
++#define YHANDLE PyTuple_GetItem(args,1)
++
++/* serial output macros: */
++#define INDEX output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  2
++
++#endif
+Index: ../trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp	(revision 13651)
+@@ -0,0 +1,79 @@
++/*\file InterpFromMeshToMesh2d.c
++ *\brief: bamg module.
++ */
++#include "./InterpFromMeshToMesh2d.h"
++
++void InterpFromMeshToMesh2dUsage(void){/*{{{*/
++	_pprintLine_("INTERFROMMESHTOMESH2D - interpolation from a 2d triangular mesh onto a list of point");
++	_pprintLine_("");
++	_pprintLine_("   This function is a multi-threaded mex file that interpolates a field");
++	_pprintLine_("   defined on a Delaunay triangulation onto a list of point");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("         data_interp=InterpFromMeshToMesh2d(index,x,y,data,x_interp,y_interp);");
++	_pprintLine_("      or data_interp=InterpFromMeshToMesh2d(index,x,y,data,x_interp,y_interp,OPTIONS);");
++	_pprintLine_("");
++	_pprintLine_("      index             : index of the mesh where data is defined");
++	_pprintLine_("      x,y               : coordinates of the nodes where data is defined");
++	_pprintLine_("      data              : matrix holding the data to be interpolated onto the mesh. (one column per field)");
++	_pprintLine_("      x_interp,y_interp : coordinates of the points onto which we interpolate.");
++	_pprintLine_("      data_interp       : vector of mesh interpolated data.");
++	_pprintLine_("      Available options :");
++	_pprintLine_("         - 'default' : default value if point is outsite of triangulation (instead of linear interolation)");
++	_pprintLine_("");
++	_pprintLine_("   Example:");
++	_pprintLine_("      load('temperature.mat');");
++	_pprintLine_("      md.initialization.temperature=InterpFromMeshToMesh2d(index,x,y,temperature,md.mesh.x,md.mesh.y);");
++	_pprintLine_("      md.initialization.temperature=InterpFromMeshToMesh2d(index,x,y,temperature,md.mesh.x,md.mesh.y,'default',253);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(InterpFromMeshToMesh2d){
++
++	/*Intermediaties*/
++	int     *index              = NULL;
++	double  *x_data             = NULL;
++	double  *y_data             = NULL;
++	double  *data               = NULL;
++	int      nods_data,nels_data;
++	int      M_data,N_data;
++	double  *x_interp           = NULL;
++	double  *y_interp           = NULL;
++	int      N_interp;
++	Options *options   = NULL;
++	double  *data_interp = NULL;
++	int      test1,test2,test;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on output arguments on the matlab side: */
++	#ifdef _HAVE_MATLAB_MODULES_
++	if(nlhs!=NLHS){
++		InterpFromMeshToMesh2dUsage();
++		_error_("InterpFromMeshToMesh2dUsage usage error");
++	}
++	#endif
++	/*check on input arguments: */
++	if(nrhs<NRHS){
++		InterpFromMeshToMesh2dUsage();
++		_error_("InterpFromMeshToMesh2dUsage usage error");
++	}
++
++	/*Fetch inputs: */
++	FetchData(&index,&nels_data,&test,INDEX); if(test!=3) _error_("index should have 3 columns");
++	FetchData(&x_data,&nods_data,X);          if(nods_data<3) _error_("there should be at least three points");
++	FetchData(&y_data,&test,Y);               if(test!=nods_data) _error_("vectors x and y should have the same length");
++	FetchData(&data,&M_data,&N_data,DATA);    if(M_data*N_data<1) _error_("data is empty");
++	FetchData(&x_interp,&N_interp,XINTERP);   if(N_interp<1) _error_("no interpolation requested");
++	FetchData(&y_interp,&test,YINTERP);       if(test!=N_interp) _error_("vectors x_interp and y_interp should have the same length");
++	FetchData(&options,NRHS,nrhs,ARGUMENTS);
++
++	/*Run core computations*/
++	InterpFromMeshToMesh2dx(&data_interp,index,x_data,y_data,nods_data,nels_data,data,M_data,N_data,x_interp,y_interp,N_interp,options);
++
++	/*Write data: */
++	WriteData(DATAINTERP,data_interp,N_interp,N_data);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h	(revision 13651)
+@@ -0,0 +1,65 @@
++/*!\file InterpFromMeshToMesh2d.h
++ * \brief: prototype for Data Interpolation mex module.
++ */
++
++#ifndef _INTERPFROMMESHTOMESH2d_H
++#define _INTERPFROMMESHTOMESH2d_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++/*Header files: */
++#include "../../c/include/globals.h"
++#include "../../c/toolkits/toolkits.h"
++#include "../../c/include/include.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++#include "../../c/io/io.h"
++#include "../../c/EnumDefinitions/EnumDefinitions.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "InterpFromMeshToMesh2d"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define INDEX     prhs[0]
++#define X         prhs[1]
++#define Y         prhs[2]
++#define DATA      prhs[3]
++#define XINTERP   prhs[4]
++#define YINTERP   prhs[5]
++#define ARGUMENTS prhs 
++/* serial output macros: */
++#define DATAINTERP (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define INDEX          PyTuple_GetItem(args,0)
++#define X              PyTuple_GetItem(args,1)
++#define Y              PyTuple_GetItem(args,2)
++#define DATA           PyTuple_GetItem(args,3)
++#define XINTERP        PyTuple_GetItem(args,4)
++#define YINTERP        PyTuple_GetItem(args,5)
++#define ARGUMENTS args
++/* serial output macros: */
++#define DATAINTERP output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  6
++
++#endif
+Index: ../trunk-jpl/src/wrappers/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/Makefile.am	(revision 0)
++++ ../trunk-jpl/src/wrappers/Makefile.am	(revision 13651)
+@@ -0,0 +1,8 @@
++SUBDIRS = 
++if MATLAB
++SUBDIRS += matlab
++endif
++
++if PYTHON
++SUBDIRS += python
++endif
+Index: ../trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.h	(revision 13651)
+@@ -0,0 +1,66 @@
++/*
++	ContourToMesh.h
++*/
++
++#ifndef _CONTOURTOMESH_H
++#define _CONTOURTOMESH_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++/*Header files: */
++#include "../../c/include/globals.h"
++#include "../../c/toolkits/toolkits.h"
++#include "../../c/include/include.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++#include "../../c/io/io.h"
++#include "../../c/EnumDefinitions/EnumDefinitions.h"
++
++#undef __FUNCT__
++#define __FUNCT__ "ContourToMesh"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define INDEX       prhs[0]
++#define X           prhs[1]
++#define Y           prhs[2]
++#define CONTOUR     prhs[3]
++#define INTERPTYPE  prhs[4]
++#define EDGEVALUE   prhs[5]
++/* serial output macros: */
++#define PLHS0 (mxArray**)&plhs[0]
++#define PLHS1 (mxArray**)&plhs[1]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define INDEX       PyTuple_GetItem(args,0)
++#define X           PyTuple_GetItem(args,1)
++#define Y           PyTuple_GetItem(args,2)
++#define CONTOUR     PyTuple_GetItem(args,3)
++#define INTERPTYPE  PyTuple_GetItem(args,4)
++#define EDGEVALUE   PyTuple_GetItem(args,5)
++/* serial output macros: */
++#define PLHS0 output,0
++#define PLHS1 output,1
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  2
++#undef NRHS
++#define NRHS 6
++
++#endif  /* _CONTOURTOMESH_H */
++
+Index: ../trunk-jpl/src/wrappers/ContourToMesh/.dirstamp
+===================================================================
+Index: ../trunk-jpl/src/wrappers/ContourToMesh/.deps/.dirstamp
+===================================================================
+Index: ../trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.cpp	(revision 13651)
+@@ -0,0 +1,89 @@
++/*! \file  ContourtoMesh
++    \brief: takes an  contour file, and figures out which nodes or elements from the mesh  
++    are inside this contour. 
++*/
++	
++#include "./ContourToMesh.h"
++
++void ContourToMeshUsage(void){/*{{{*/
++	_printLine_("CONTOURTOMESH - Flag the elements or nodes inside a contour");
++	_printLine_("");
++	_printLine_("      Usage: ");
++	_printLine_("         [in_nod,in_elem]=ContourToMesh(index,x,y,contourname,interptype,edgevalue)\n");
++	_printLine_("");
++	_printLine_("         index,x,y: mesh triangulation.");
++	_printLine_("         contourname: name of .exp file containing the contours.");
++	_printLine_("         interptype: string definining type of interpolation ('element', or 'node').");
++	_printLine_("         edgevalue: integer (0, 1 or 2) defining the value associated to the nodes on the edges of the polygons.");
++	_printLine_("         in_nod: vector of flags (0 or 1), of size nods if interptype is set to 'node' or 'element and node', ");
++	_printLine_("            or of size 0 otherwise.");
++	_printLine_("         in_elem: vector of flags (0 or 1), of size nel if interptype is set to 'element' or 'element and node', ");
++	_printLine_("            or of size 0 otherwise.");
++	_printLine_("");
++	_printLine_("      Example: ");
++	_printLine_("         in_nod=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','node',1)");
++	_printLine_("         in_elements=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','element',0)");
++	_printLine_("         [in_nodes,in_elements]=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','element and node',0)");
++	_printLine_("");
++}/*}}}*/
++WRAPPER(ContourToMesh){
++
++	/* required input: */
++	int      edgevalue;
++	double  *index       = NULL;
++	int      nel;
++	double  *x           = NULL;
++	int      nods;
++	double  *y           = NULL;
++	char    *interptype  = NULL;
++	DataSet *contours    = NULL;
++
++	/* output: */
++	SeqVec<double> *in_nod  = NULL;
++	SeqVec<double> *in_elem = NULL;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on output arguments on the matlab side: */
++	#ifdef _HAVE_MATLAB_MODULES_
++	if(nlhs!=1 && nlhs!=2){
++		ContourToMeshUsage();
++		_error_("usage. See above");
++	}
++	#endif
++	/*check on input arguments: */
++	if(nrhs!=NRHS){
++		ContourToMeshUsage();
++		_error_("usage. See above");
++	}
++
++	/*Fetch inputs: */
++	FetchData(&index,&nel,NULL,INDEX);
++	FetchData(&x,&nods,NULL,X);
++	FetchData(&y,NULL,NULL,Y);
++	FetchData(&edgevalue,EDGEVALUE);
++	FetchData(&contours,CONTOUR);
++	FetchData(&interptype,INTERPTYPE);
++
++	/*Run interpolation routine: */
++	ContourToMeshx( &in_nod,&in_elem,index,x,y,contours,interptype,nel,nods,edgevalue);
++
++	/* output: */
++	if (strcmp(interptype,"node")==0){
++		WriteData(PLHS0,in_nod);
++		WriteData(PLHS1);
++	}
++	else if (strcmp(interptype,"element")==0){
++		WriteData(PLHS0,in_elem);
++		WriteData(PLHS1);
++	}
++	else if (strcmp(interptype,"element and node")==0){
++		WriteData(PLHS0,in_nod);
++		WriteData(PLHS1,in_elem);
++	}
++	else _error_("wrong interpolation type");
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/Xy2ll/Xy2ll.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Xy2ll/Xy2ll.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/Xy2ll/Xy2ll.h	(revision 13651)
+@@ -0,0 +1,54 @@
++/*!\file Xy2ll.h
++ * \brief: prototype for x/y to lat/long coordinate mex module.
++ */
++
++#ifndef _XY2LL_H
++#define _XY2LL_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "Xy2ll"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define X_IN   prhs[0]
++#define Y_IN   prhs[1]
++#define SGN_IN prhs[2]
++/* serial output macros: */
++#define LAT_OUT (mxArray**)&plhs[0]
++#define LON_OUT (mxArray**)&plhs[1]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define X_IN   PyTuple_GetItem(args,0)
++#define Y_IN   PyTuple_GetItem(args,1)
++#define SGN_IN PyTuple_GetItem(args,2)
++/* serial output macros: */
++#define LAT_OUT output,0
++#define LON_OUT output,1
++#endif
++
++/* serial arg counts: */
++#undef NRHS
++#define NRHS  3
++#undef NLHS
++#define NLHS  2
++
++#endif
+Index: ../trunk-jpl/src/wrappers/Xy2ll/Xy2ll.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/Xy2ll/Xy2ll.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/Xy2ll/Xy2ll.cpp	(revision 13651)
+@@ -0,0 +1,96 @@
++/*\file Xy2ll.c
++ *\brief: x/y to lat/long coordinate mex module.
++ */
++#include "./Xy2ll.h"
++
++void Xy2llUsage(void){/*{{{*/
++	_pprintLine_("Xy2ll - x/y to lat/long coordinate transformation module:");
++	_pprintLine_("");
++	_pprintLine_("   This module transforms x/y to lat/long coordinates.");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("      [lat,lon]=Xy2ll(x,y,sgn,'param name',param,...);");
++	_pprintLine_("");
++	_pprintLine_("      x           x coordinates (double vector)");
++	_pprintLine_("      y           y coordinates (double vector)");
++	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))");
++	_pprintLine_("");
++	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
++	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
++	_pprintLine_("");
++	_pprintLine_("      lat         latitude coordinates (double vector)");
++	_pprintLine_("      lon         longitude coordinates (double vector)");
++	_pprintLine_("");
++	_pprintLine_("   Examples:");
++	_pprintLine_("      [lat,lon]=Xy2ll(x,y, 1);");
++	_pprintLine_("      [lat,lon]=Xy2ll(x,y, 1,'central_meridian',45,'standard_parallel',70);");
++	_pprintLine_("      [lat,lon]=Xy2ll(x,y,-1,'central_meridian', 0,'standard_parallel',71);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(Xy2ll){
++
++	int i,verbose=1;
++
++	/*input: */
++	double  *x=NULL,*y=NULL;
++	int     nx,ny,ncoord;
++	int     sgn;
++	Options* options=NULL;
++	double   cm=0.,sp=0.;
++
++	/* output: */
++	double  *lat=NULL,*lon=NULL;
++	int     iret=0;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	if (nlhs > NLHS) {
++		Xy2llUsage(); _error_("Xy2ll usage error");
++	}
++	if (nrhs < NRHS) {
++		Xy2llUsage(); _error_("Xy2ll usage error");
++	}
++
++	/*Input datasets: */
++	FetchData(&x,&nx,X_IN);
++	FetchData(&y,&ny,Y_IN);
++	FetchData(&sgn,SGN_IN);
++	FetchData(&options,NRHS,nrhs,prhs);
++
++	/*  defaults are in Xy2lldef, so don't duplicate them here, and only use user values if both have been specified  */
++	if (options->GetOption("central_meridian") || options->GetOption("standard_parallel")) {
++		options->Get(&cm,"central_meridian");
++		if (verbose) _printLine_("  cm=" << cm);
++		options->Get(&sp,"standard_parallel");
++		if (verbose) _printLine_("  sp=" << sp);
++	}
++
++	/*some checks*/
++	if   (nx != ny){_error_("Must have same number of x[" << nx << "] and y[" << ny << "] coordinates.");}
++	else            ncoord=nx;
++	if (sgn != +1 && sgn != -1) _error_("Hemisphere sgn=" << sgn << " must be +1 (north) or -1 (south).");
++	if (fabs(cm)      > 180.) _error_("Central meridian cm=" << cm << " must be between -180 (west) and +180 (east) degrees.");
++	if (sp < 0. || sp >  90.) _error_("Standard parallel sp=" << sp << " must be between 0 and 90 degrees (in specified hemisphere).");
++
++	lat=(double*)mxMalloc(ncoord*sizeof(double));
++	lon=(double*)mxMalloc(ncoord*sizeof(double));
++
++	/* Run core computations: */
++	if (verbose) _printLine_("Calling core:");
++	if (options->GetOption("central_meridian") && options->GetOption("standard_parallel"))
++		iret=Xy2llx(lat,lon,x,y,ncoord,sgn,cm,sp);
++	else
++		iret=Xy2llx(lat,lon,x,y,ncoord,sgn);
++
++	/*Write data: */
++	WriteData(LAT_OUT,lat,ncoord);
++	WriteData(LON_OUT,lon,ncoord);
++
++	/*Clean-up*/
++	delete options;
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.h	(revision 13651)
+@@ -0,0 +1,66 @@
++/*!\file KMLMeshWrite.h
++ * \brief: prototype for KML mesh writer mex module.
++ */
++
++#ifndef _KMLMESHWRITE_H
++#define _KMLMESHWRITE_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "KMLMeshWrite"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define NAME          prhs[0]
++#define NOTES         prhs[1]
++#define ELEMHANDLE    prhs[2]
++#define NODECONHANDLE prhs[3]
++#define LATHANDLE     prhs[4]
++#define LNGHANDLE     prhs[5]
++#define PARTHANDLE    prhs[6]
++#define DATAHANDLE    prhs[7]
++#define CMAPHANDLE    prhs[8]
++#define FILENAME      prhs[9]
++/* serial output macros: */
++#define ERRORFLAG (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define NAME          PyTuple_GetItem(args,0)
++#define NOTES         PyTuple_GetItem(args,1)
++#define ELEMHANDLE    PyTuple_GetItem(args,2)
++#define NODECONHANDLE PyTuple_GetItem(args,3)
++#define LATHANDLE     PyTuple_GetItem(args,4)
++#define LNGHANDLE     PyTuple_GetItem(args,5)
++#define PARTHANDLE    PyTuple_GetItem(args,6)
++#define DATAHANDLE    PyTuple_GetItem(args,7)
++#define CMAPHANDLE    PyTuple_GetItem(args,8)
++#define FILENAME      PyTuple_GetItem(args,9)
++/* serial output macros: */
++#define ERRORFLAG output,0
++#endif
++
++/* serial arg counts: */
++#undef NRHS
++#define NRHS 10
++#undef NLHS
++#define NLHS  1
++
++#endif
+Index: ../trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.cpp	(revision 13651)
+@@ -0,0 +1,148 @@
++/*\file KMLMeshWrite.c
++ *\brief: KML mesh writer module.
++ */
++#include "./KMLMeshWrite.h"
++
++void KMLMeshWriteUsage(void){/*{{{*/
++	_pprintLine_("KMLMeshWrite - KML mesh writer module:");
++	_pprintLine_("");
++	_pprintLine_("   This module writes the mesh of a model as KML polygons into the specified KML file.");
++	_pprintLine_("");
++	_pprintLine_("   Usage:");
++	_pprintLine_("      ierror=KMLMeshWrite(name,notes,elem,nodecon,lat,long,part,data,cmap,kmlfile);");
++	_pprintLine_("");
++	_pprintLine_("      name       model name (string, may be empty)");
++	_pprintLine_("      notes      model notes (string or cell array of strings, may be empty)");
++	_pprintLine_("      elem       elements (double array)");
++	_pprintLine_("      nodecon    nodal connectivity array (double array, may be empty)");
++	_pprintLine_("      lat        nodal latititudes (double vector)");
++	_pprintLine_("      long       nodal longitudes (double vector)");
++	_pprintLine_("      part       nodal partitions (double vector, may be empty)");
++	_pprintLine_("      data       nodal or element data (double vector, may be empty)");
++	_pprintLine_("      cmap       color map (double nx3 array, may be empty)");
++	_pprintLine_("      kmlfile    KML file name (string)");
++	_pprintLine_("");
++	_pprintLine_("      ierror     error flag (double, non-zero for error)");
++	_pprintLine_("");
++	_pprintLine_("   Example:");
++	_pprintLine_("      KMLMeshWrite(md.name,md.notes,md.elements,md.nodeconnectivity,md.lat,md.long,md.part,md.fm_criterion,options.cmap,filekml);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(KMLMeshWrite){
++
++	int i,j,nnodes=0,verbose=1;
++
++	/*input: */
++	char*   name=NULL;
++	char*   notes=NULL;
++	char*   notes2=NULL;
++	const mxArray* notesi;
++	mwIndex        nindex;
++	int*    elem=NULL;
++	int     melem=0,nelem=0;
++	int*    nodecon=NULL;
++	int     mncon=0,nncon=0;
++	double* lat=NULL;
++	int     mlat=0,nlat=0,llat=0;
++	double* lng=NULL;
++	int     mlng=0,nlng=0,llng=0;
++	int     nparts=0;
++	int*    part=NULL;
++	int     mprt=0,nprt=0,lprt=0;
++	double* data=NULL;
++	int     mdata=0,ndata=0;
++	double* cmap=NULL;
++	int     mcmap=0,ncmap=0;
++	char*   filnam=NULL;
++	FILE*   fid=NULL;
++	Options* options=NULL;
++
++	/* output: */
++	int     ierror=0;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	if (nlhs > NLHS) {
++		KMLMeshWriteUsage(); _error_("KMLMeshWrite usage error");
++	}
++	if (nrhs < NRHS) {
++		KMLMeshWriteUsage(); _error_("KMLMeshWrite usage error");
++	}
++
++	/*Input datasets: */
++	FetchData(&name,NAME);
++
++/*  notes is typically a cell array of character strings  */
++	if (mxIsCell(NOTES)) {
++		for (nindex=0; nindex<mxGetNumberOfElements(NOTES); nindex++) {
++			notesi=mxGetCell(NOTES,nindex);
++			if (notesi && mxIsChar(notesi) && mxGetNumberOfElements(notesi)) {
++				if (!notes) {
++					notes=xNew<char>(mxGetNumberOfElements(notesi)+1);
++					mxGetString(notesi,notes,mxGetNumberOfElements(notesi)+1);
++				}
++				else {
++/*  note that strlen does not include trailing null  */
++					notes2=xNew<char>(strlen(notes)+1+mxGetNumberOfElements(notesi)+1);
++					memcpy(notes2,notes,(strlen(notes)+1)*sizeof(char));
++					xDelete<char>(notes);
++					notes=notes2;
++					notes2=NULL;
++//					notes=(char*)xrealloc(notes,(strlen(notes)+1+mxGetNumberOfElements(notesi)+1)*sizeof(char));
++					strcat(notes,"\n");
++					mxGetString(notesi,&notes[strlen(notes)],mxGetNumberOfElements(notesi)+1);
++				}
++			}
++		}
++	}
++	else
++		FetchData(&notes,NOTES);
++	FetchData(&elem,&melem,&nelem,ELEMHANDLE);
++	FetchData(&nodecon,&mncon,&nncon,NODECONHANDLE);
++	FetchData(&lat,&mlat,&nlat,LATHANDLE);
++	llat=mlat*nlat;
++	FetchData(&lng,&mlng,&nlng,LNGHANDLE);
++	llng=mlng*nlng;
++	FetchData(&part,&mprt,&nprt,PARTHANDLE);
++	lprt=mprt*nprt;
++	FetchData(&data,&mdata,&ndata,DATAHANDLE);
++	FetchData(&cmap,&mcmap,&ncmap,CMAPHANDLE);
++	FetchData(&filnam,FILENAME);
++	FetchData(&options,NRHS,nrhs,prhs);
++
++	/*some checks*/
++	for (i=0; i<melem*nelem; i++) if(elem[i]>nnodes) nnodes=elem[i];
++	if(part) for (i=0; i<lprt; i++) if (part[i]+1 > nparts) nparts=part[i]+1;
++
++	if (nodecon && (mncon != nnodes))
++	  {_error_("Nodal connectivity table, if supplied, must be supplied for all nodes.");}
++	else if (!nodecon)
++		mncon=nnodes;
++	if ((llat != nnodes) || (llng != nnodes) || (llat != llng))
++		_error_("Latitude and longitude vectors must be supplied for all nodes.");
++	if (part && (lprt != nnodes))
++		_error_("Partitioning vector, if supplied, must be supplied for all nodes.");
++	if (data && !((mdata == nnodes) || (mdata == melem)))
++		_error_("Data matrix, if supplied, must be supplied for all nodes or all elements.");
++	if (cmap && (ncmap != 3))
++		_error_("Colormap matrix, if supplied, must have three columns for rgb.");
++	if (!strlen(filnam))
++		strcpy(filnam,"stdout");
++
++	/* Run core computations: */
++	fid=fopen(filnam,"w");
++	KMLMeshWritex(&ierror,name,notes,elem,melem,nelem,nodecon,mncon,nncon,lat,lng,part,data,mdata,ndata,cmap,mcmap,ncmap,fid);
++	fclose(fid);
++
++	/*Write data: */
++	WriteData(ERRORFLAG,ierror);
++
++	/*Clean-up*/
++	delete options;
++	if (mxIsCell(NOTES) && notes) xDelete<char>(notes);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/TriMesh/TriMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriMesh/TriMesh.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/TriMesh/TriMesh.h	(revision 13651)
+@@ -0,0 +1,65 @@
++/*
++	TriMesh.h
++*/
++
++#ifndef _TRIMESH_H
++#define _TRIMESH_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++/*Header files: */
++#include "../../c/include/globals.h"
++#include "../../c/toolkits/toolkits.h"
++#include "../../c/include/include.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++#include "../../c/io/io.h"
++#include "../../c/EnumDefinitions/EnumDefinitions.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "TriMesh"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define DOMAINOUTLINE  prhs[0]
++#define RIFTSOUTLINE   prhs[1]
++#define AREA           prhs[2]
++/* serial output macros: */
++#define INDEX             (mxArray**)&plhs[0]
++#define X                 (mxArray**)&plhs[1]
++#define Y                 (mxArray**)&plhs[2]
++#define SEGMENTS          (mxArray**)&plhs[3]
++#define SEGMENTMARKERLIST (mxArray**)&plhs[4]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define DOMAINOUTLINE PyTuple_GetItem(args,0)
++#define RIFTSOUTLINE  PyTuple_GetItem(args,1)
++#define AREA          PyTuple_GetItem(args,2)
++/* serial output macros: */
++#define INDEX             output,0
++#define X                 output,1
++#define Y                 output,2
++#define SEGMENTS          output,3
++#define SEGMENTMARKERLIST output,4
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  5
++#undef NRHS
++#define NRHS  3
++
++#endif  /* _TRIMESH_H */
+Index: ../trunk-jpl/src/wrappers/TriMesh/TriMesh.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriMesh/TriMesh.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/TriMesh/TriMesh.cpp	(revision 13651)
+@@ -0,0 +1,62 @@
++/*
++ * TriMesh: mesh a domain using an .exp file
++ */
++
++#include "./TriMesh.h"
++
++void TriMeshUsage(void){/*{{{*/
++	_printLine_("");
++	_printLine_("   usage: [index,x,y,segments,segmentmarkers]=TriMesh(domainoutlinefilename,rifts,area) ");
++	_printLine_("      where: index,x,y defines a triangulation, segments is an array made ");
++	_printLine_("      of exterior segments to the mesh domain outline, segmentmarkers is an array flagging each segment, ");
++	_printLine_("      outlinefilename an Argus domain outline file, ");
++	_printLine_("      area is the maximum area desired for any element of the resulting mesh, ");
++	_printLine_("");
++}/*}}}*/
++WRAPPER(TriMesh){
++	
++	/*intermediary: */
++	double  area;
++	DataSet *domain = NULL;
++	DataSet *rifts  = NULL;
++
++	/* output: */
++	SeqMat<double> *index             = NULL;
++	SeqVec<double> *x                 = NULL;
++	SeqVec<double> *y                 = NULL;
++	SeqMat<double> *segments          = NULL;
++	SeqVec<double> *segmentmarkerlist = NULL;
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments: */
++	CHECKARGUMENTS(NLHS,NRHS,&TriMeshUsage);
++	
++	/*Fetch data needed for meshing: */
++	FetchData(&domain,DOMAINOUTLINE);
++	FetchData(&rifts,RIFTSOUTLINE);
++	FetchData(&area,AREA);
++
++	/*call x core: */
++	TriMeshx(&index,&x,&y,&segments,&segmentmarkerlist,domain,rifts,area);
++
++	/*write outputs: */
++	WriteData(INDEX,index);
++	WriteData(X,x);
++	WriteData(Y,y);
++	WriteData(SEGMENTS,segments);
++	WriteData(SEGMENTMARKERLIST,segmentmarkerlist);
++
++	/*free ressources: */
++	delete domain;
++	delete rifts;
++	delete index;
++	delete x;
++	delete y;
++	delete segments;
++	delete segmentmarkerlist;
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers/Chaco/Chaco.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Chaco/Chaco.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/Chaco/Chaco.h	(revision 13651)
+@@ -0,0 +1,68 @@
++/*!\file:  Chaco.h
++ * \brief header file for Chaco module.
++ */ 
++
++#ifndef _CHACO_H
++#define _CHACO_H
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++	#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*For python modules: needs to come before header files inclusion*/
++#ifdef _HAVE_PYTHON_
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#endif
++
++/*headers*/
++#include <stdio.h>
++#include <string.h>    /*  strcasecmp  */
++#include <time.h>      /*  clock,time,difftime  */
++#include "../../c/include/globals.h"
++#include "../../c/modules/modules.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/issm-binding.h"
++
++#undef __FUNCT__ 
++#define __FUNCT__  "Chaco"
++
++#ifdef _HAVE_MATLAB_MODULES_
++/* serial input macros: */
++#define A_IN      prhs[0]
++#define VWGTS_IN  prhs[1]
++#define EWGTS_IN  prhs[2]
++#define X_IN      prhs[3]
++#define Y_IN      prhs[4]
++#define Z_IN      prhs[5]
++#define OPTNS_IN  prhs[6]
++#define NPARTS_IN prhs[7]
++#define GOAL_IN   prhs[8]
++/* serial output macros: */
++#define ASSGN_OUT (mxArray**)&plhs[0]
++#endif
++
++#ifdef _HAVE_PYTHON_MODULES_
++/* serial input macros: */
++#define A_IN      PyTuple_GetItem(args,0)
++#define VWGTS_IN  PyTuple_GetItem(args,1)
++#define EWGTS_IN  PyTuple_GetItem(args,2)
++#define X_IN      PyTuple_GetItem(args,3)
++#define Y_IN      PyTuple_GetItem(args,4)
++#define Z_IN      PyTuple_GetItem(args,5)
++#define OPTNS_IN  PyTuple_GetItem(args,6)
++#define NPARTS_IN PyTuple_GetItem(args,7)
++#define GOAL_IN   PyTuple_GetItem(args,8)
++/* serial output macros: */
++#define ASSGN_OUT output,0
++#endif
++
++/* serial arg counts: */
++#undef NLHS
++#define NLHS  1
++#undef NRHS
++#define NRHS  9
++
++#endif  /* _CHACO_H */
+Index: ../trunk-jpl/src/wrappers/Chaco/Chaco.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/Chaco/Chaco.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/Chaco/Chaco.cpp	(revision 13651)
+@@ -0,0 +1,135 @@
++/*\file Chaco.c
++ *\brief:  Chaco partitioner mex module
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./Chaco.h"
++
++void ChacoUsage(void){/*{{{*/
++	_pprintLine_("");
++	_pprintLine_("Usage: [assgn] = Chaco(A,vwgts,ewgts,x,y,z,options,nparts,goal);");
++	_pprintLine_("");
++}/*}}}*/
++WRAPPER(Chaco){
++   
++	int i;
++	int nterms;
++
++	/*Inputs: */
++	int     nvtxs;               /* number of vertices in graph           */
++	int    *start;               /* start of edge list for each vertex    */
++	int    *adjacency;           /* edge list data                        */
++	int    *vwgts       = NULL;  /* weights for all vertices              */
++	int     nedges;
++	float  *ewgts       = NULL;  /* weights for all edges                 */
++	float  *x           = NULL;
++	float  *y           = NULL;
++	float  *z           = NULL;  /* coordinates for inertial method       */
++	double  options[10] = {1,1,0,0,1,1,50,0,.001,7654321}; /* architecture and partitioning options */
++	double *in_options  = NULL;
++	int    *nparts      = NULL;   /* number of parts options               */
++	int     npart;
++	double *goal        = NULL;   /* desired set sizes                     */
++
++	/*intermediary pointers: */
++	mwIndex *mwstart, *mwadjacency;
++	double  *doublepointer;
++
++	/*output: */
++   short  *assignment       = NULL; /* set number of each vtx (length nvtxs+1)                */
++   double *doubleassignment = NULL; /*holds assignment, in double format, to return to matlab */
++
++	#ifndef _HAVE_CHACO_ //only works if dakota library has been compiled in.
++	_error_("Chaco not available! Cannot carry out Chaco partitioning!");
++	#endif
++
++	/*Boot module: */
++	MODULEBOOT();
++
++	/*checks on arguments on the matlab side: */
++	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&ChacoUsage);
++
++	/*Fetch adjacency matrix: */
++	nvtxs = mxGetN(A_IN);
++	mwstart = mxGetJc(A_IN);
++	start=xNew<int>((nvtxs+1));
++	for (i=0; i<nvtxs+1;i++)start[i]=(int)mwstart[i];
++
++	mwadjacency = mxGetIr(A_IN);
++	adjacency = xNew<int>(mxGetNzmax(A_IN));
++	for (i=0; i<mxGetNzmax(A_IN); i++) adjacency[i]= (int)mwadjacency[i];
++
++	nedges = start[nvtxs];
++	if(!mxIsEmpty(EWGTS_IN)){
++		ewgts = xNewZeroInit<float>(nedges);
++		doublepointer=mxGetPr(A_IN);
++		for (i = 0; i < nedges; i++)ewgts[i] = (float)doublepointer[i];
++	}
++	else ewgts=NULL;
++
++	/*Fetch rest of data: */
++	FetchData(&vwgts,&nterms,VWGTS_IN); 
++	FetchData(&x,&nterms,X_IN); 
++	FetchData(&y,&nterms,Y_IN); 
++	FetchData(&z,&nterms,Z_IN); 
++	FetchData(&in_options,&nterms,OPTNS_IN); 
++	for (i=0;i<(nterms<10?nterms:10);i++) options[i]=in_options[i]; //copy in_options into default options
++	FetchData(&npart,NPARTS_IN); 
++	nparts=xNew<int>(1); nparts[0]=npart; //weird Chacox interface ain't it?
++	FetchData(&goal,&nterms,GOAL_IN); 
++	
++	/*Some debugging print: {{{*/
++	#ifdef _DEBUG_
++	_printLine_("nvtxs: " << nvtxs);
++	_printString_("options: [");
++	for(i=0;i<10;i++)_printString_(options[i] << "|");
++	_printLine_("]");
++	_printLine_("start: ");
++	for (i=0; i<nvtxs+1;i++)_printString_(start[i] << " ");
++	_printLine_("");
++	_printLine_("adjacency: ");
++	for (i=0; i<mxGetNzmax(A_IN);i++)_printString_("" <<adjacency[i]<< " ");i++)
++	_printLine_("");
++	_printLine_("nedges: " << nedges << " " << ewgts);
++	if(ewgts) for (i = 0; i < nedges; i++)_printString_(ewgts[i] << " ");
++	_printLine_("");
++	_printLine_("vwgts:");
++	for (i = 0; i < nvtxs; i++)_printString_(vwgts[i] << " ");
++	_printLine_("");
++	_printLine_("nparts: " << nparts[0]);
++	_printLine_("goal: " << goal);
++	#endif
++	/*}}}*/
++	
++	/*Allocate output: */
++	assignment = xNewZeroInit<short>(nvtxs);
++	
++    /*Call core: */
++	Chacox(nvtxs, start, adjacency, vwgts, ewgts, x, y, z, assignment, options, nparts, goal);
++
++    /*Output data: */
++	doubleassignment=xNew<double>(nvtxs);
++	for(i=0;i<nvtxs;i++) doubleassignment[i]=(double)assignment[i];
++	WriteData(ASSGN_OUT,doubleassignment,nvtxs);
++
++	/*Free ressources:*/
++	xDelete<short>(assignment); 
++	xDelete<double>(goal);
++	xDelete<int>(nparts);
++	xDelete<float>(z);
++	xDelete<float>(y);
++	xDelete<float>(x);
++	xDelete<float>(ewgts);
++	xDelete<int>(vwgts);
++	xDelete<int>(adjacency);
++	xDelete<int>(start);
++	xDelete<double>(doubleassignment);
++
++	/*end module: */
++	MODULEEND();
++}
+Index: ../trunk-jpl/src/wrappers
+===================================================================
+--- ../trunk-jpl/src/wrappers	(revision 13650)
++++ ../trunk-jpl/src/wrappers	(revision 13651)
+
+Property changes on: ../trunk-jpl/src/wrappers
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,17 ##
++__pycache__
++Makefile
++.ignore.txt
++Makefile.in
++*.mexa64
++.deps
++*.exe
++*.exp
++*.lib
++*.obj
++*.mexw64
++*.mexw64.manifest
++*.mexw64.map
++*.mexw32
++*.mexw32.manifest
++*.mexw32.map
++*.exe.manifest
Index: /issm/oecreview/Archive/13393-13976/ISSM-13651-13652.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13651-13652.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13651-13652.diff	(revision 13980)
@@ -0,0 +1,141 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13651)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13652)
+@@ -17,11 +17,11 @@
+ endif
+ lib_LIBRARIES += libISSMMatlab.a 
+ endif
+-if MODULES
++if WRAPPERS
+ if SHAREDLIBS
+-lib_LTLIBRARIES += libISSMModules.la
++lib_LTLIBRARIES += libISSMWrappers.la
+ endif
+-lib_LIBRARIES += libISSMModules.a 
++lib_LIBRARIES += libISSMWrappers.a 
+ endif
+ #}}}
+ 
+@@ -823,8 +823,8 @@
+ 					 ./matlab/io/MatlabVectorToPetscVec.cpp
+ 
+ #}}}
+-#Modules sources{{{
+-module_sources= ./shared/Threads/issm_threads.h\
++#Wrappers sources{{{
++wrapper_sources= ./shared/Threads/issm_threads.h\
+ 			./shared/Threads/LaunchThread.cpp\
+ 			./shared/Threads/PartitionRange.cpp\
+ 			./shared/Exp/exp.h\
+@@ -998,19 +998,19 @@
+ libISSMOverload_la_SOURCES = ./shared/String/stricmp.c
+ endif
+ 
+-if MODULES
+-libISSMModules_a_SOURCES = $(module_sources)
+-libISSMModules_a_SOURCES += $(bamg_sources)
++if WRAPPERS
++libISSMWrappers_a_SOURCES = $(wrapper_sources)
++libISSMWrappers_a_SOURCES += $(bamg_sources)
+ if KRIGING
+-libISSMModules_a_SOURCES += $(kriging_sources)
++libISSMWrappers_a_SOURCES += $(kriging_sources)
+ endif
+ if KML
+-libISSMModules_a_SOURCES += $(kml_sources)
++libISSMWrappers_a_SOURCES += $(kml_sources)
+ endif
+-libISSMModules_a_CXXFLAGS = $(ALLCXXFLAGS)
+-libISSMModules_a_LIBADD = ./libISSMCore.a
++libISSMWrappers_a_CXXFLAGS = $(ALLCXXFLAGS)
++libISSMWrappers_a_LIBADD = ./libISSMCore.a
+ if SHAREDLIBS
+-libISSMModules_la_SOURCES = $(libISSMModules_a_SOURCES)
++libISSMWrappers_la_SOURCES = $(libISSMWrappers_a_SOURCES)
+ endif
+ endif
+ 
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13651)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13652)
+@@ -2,8 +2,8 @@
+ 
+ EXEEXT=$(PYTHONWRAPPEREXT)
+ 
+-#Modules {{{
+-if MODULES
++#Wrappers {{{
++if WRAPPERS
+ lib_LTLIBRARIES = BamgConvertMesh.la\
+ 						BamgMesher.la\
+ 						ContourToMesh.la\
+@@ -19,9 +19,9 @@
+ #}}}
+ #Flags and libraries {{{
+ if SHAREDLIBS
+-deps = ../../c/libISSMCore.la ../../c/libISSMModules.la
++deps = ../../c/libISSMCore.la ../../c/libISSMWrappers.la
+ else
+-deps = ../../c/libISSMCore.a ../../c/libISSMModules.a
++deps = ../../c/libISSMCore.a ../../c/libISSMWrappers.a
+ endif
+ 
+ deps +=  $(MATHLIB) ${PYTHONLIB}
+@@ -51,7 +51,7 @@
+ if SHAREDLIBS
+ deps +=
+ else
+-deps += ../../c/libISSMModules.a ../../c/libISSMCore.a
++deps += ../../c/libISSMWrappers.a ../../c/libISSMCore.a
+ endif
+ 
+ #Optimization flags:
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13651)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13652)
+@@ -2,8 +2,8 @@
+ 
+ EXEEXT=$(MATLABWRAPPEREXT)
+ 
+-#Modules {{{
+-if MODULES
++#Wrappers {{{
++if WRAPPERS
+ lib_LTLIBRARIES =  AverageFilter.la\
+ 						 BamgMesher.la\
+ 						 BamgConvertMesh.la\
+@@ -49,9 +49,9 @@
+ #}}}
+ #Flags and libraries {{{
+ if SHAREDLIBS
+-deps = ../../c/libISSMCore.la ../../c/libISSMModules.la
++deps = ../../c/libISSMCore.la ../../c/libISSMWrappers.la
+ else
+-deps = ../../c/libISSMCore.a ../../c/libISSMModules.a
++deps = ../../c/libISSMCore.a ../../c/libISSMWrappers.a
+ endif
+ 
+ deps +=  $(MATHLIB) ${MEXLIB}
+@@ -88,7 +88,7 @@
+ if SHAREDLIBS
+ deps +=
+ else
+-deps += ../../c/libISSMModules.a ../../c/libISSMCore.a  
++deps += ../../c/libISSMWrappers.a ../../c/libISSMCore.a  
+ if ADOLC
+ deps += $(ADOLCLIB)
+ endif
+Index: ../trunk-jpl/src/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/Makefile.am	(revision 13651)
++++ ../trunk-jpl/src/Makefile.am	(revision 13652)
+@@ -1,2 +1,5 @@
+ EXTRA_DIST =  perl pro py
+-SUBDIRS = c modules m
++SUBDIRS = c m
++if WRAPPERS
++SUBDIRS += wrappers 
++endif
Index: /issm/oecreview/Archive/13393-13976/ISSM-13652-13653.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13652-13653.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13652-13653.diff	(revision 13980)
@@ -0,0 +1,66 @@
+Index: ../trunk-jpl/src/android/helloworld/My First App/.classpath
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/.classpath	(revision 13652)
++++ ../trunk-jpl/src/android/helloworld/My First App/.classpath	(revision 13653)
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <classpath>
++	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
++	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ 	<classpathentry kind="src" path="src"/>
+ 	<classpathentry kind="src" path="gen"/>
+-	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+-	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ 	<classpathentry kind="output" path="bin/classes"/>
+ </classpath>
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/.classpath
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/.classpath	(revision 13652)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/.classpath	(revision 13653)
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <classpath>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ 	<classpathentry kind="src" path="src"/>
+ 	<classpathentry kind="src" path="gen"/>
+-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ 	<classpathentry kind="output" path="bin/classes"/>
+ </classpath>
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/resources.ap_
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes.dex
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/Makefile.am	(revision 13652)
++++ ../trunk-jpl/src/Makefile.am	(revision 13653)
+@@ -1,5 +1,2 @@
+ EXTRA_DIST =  perl pro py
+-SUBDIRS = c m
+-if WRAPPERS
+-SUBDIRS += wrappers 
+-endif
++SUBDIRS = c m wrappers 
+Index: ../trunk-jpl/src/m/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/m/Makefile.am	(revision 13652)
++++ ../trunk-jpl/src/m/Makefile.am	(revision 13653)
+@@ -2,6 +2,7 @@
+ #
+ #find . -type d -exec ls -d {} \;
+ 
++if WRAPPERS
+ bin_SCRIPTS= ./qmu/*.m \
+ 				 ./qmu/setupdesign/*.m \
+ 				 ./qmu/plot/*.m \
+@@ -48,3 +49,4 @@
+ 				 ./solve/*.m \
+ 				 ./solvers/*.m \
+ 				 ./materials/*.m
++endif
Index: /issm/oecreview/Archive/13393-13976/ISSM-13653-13654.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13653-13654.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13653-13654.diff	(revision 13980)
@@ -0,0 +1,119 @@
+Index: ../trunk-jpl/configs/config-macosx64-larour.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-larour.sh	(revision 13653)
++++ ../trunk-jpl/configs/config-macosx64-larour.sh	(revision 13654)
+@@ -18,9 +18,8 @@
+ 	--with-numthreads=8 \
+ 	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
+ 	--with-petsc-arch=$ISSM_ARCH \
++	--with-cxxoptflags="-L/usr/lib -lbundle1.o"\
+ 	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-plapack-lib="-L$ISSM_DIR/externalpackages/petsc/install/ -lPLAPACK" \
+-	--with-plapack-include="-I$ISSM_DIR/externalpackages/petsc/install/include/ " \
+ 	--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+Index: ../trunk-jpl/configs/config-pleiades-petsc2.sh
+===================================================================
+--- ../trunk-jpl/configs/config-pleiades-petsc2.sh	(revision 13653)
++++ ../trunk-jpl/configs/config-pleiades-petsc2.sh	(revision 13654)
+@@ -2,7 +2,7 @@
+ 
+ ./configure \
+  --prefix=$ISSM_DIR \
+- --with-modules=no \
++ --with-wrappers=no \
+  --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+  --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+  --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+Index: ../trunk-jpl/configs/config-linux64-ad.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-ad.sh	(revision 13653)
++++ ../trunk-jpl/configs/config-linux64-ad.sh	(revision 13654)
+@@ -2,7 +2,7 @@
+ 
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+-	--without-modules\
++	--without-wrappers\
+ 	--with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install\
+ 	--without-thermal \
+ 	--without-control \
+Index: ../trunk-jpl/configs/config-pleiades-petscdev.sh
+===================================================================
+--- ../trunk-jpl/configs/config-pleiades-petscdev.sh	(revision 13653)
++++ ../trunk-jpl/configs/config-pleiades-petscdev.sh	(revision 13654)
+@@ -2,7 +2,7 @@
+ 
+ ./configure \
+  --prefix=$ISSM_DIR \
+- --with-modules=no \
++ --with-wrappers=no \
+  --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+  --with-metis-dir=$ISSM_DIR/externalpackages/petsc/src/externalpackages/metis-5.0.2-p3 \
+  --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+Index: ../trunk-jpl/configs/config-greenplanet.sh
+===================================================================
+--- ../trunk-jpl/configs/config-greenplanet.sh	(revision 13653)
++++ ../trunk-jpl/configs/config-greenplanet.sh	(revision 13654)
+@@ -5,7 +5,7 @@
+ 
+ ./configure \
+  --prefix=$ISSM_DIR \
+- --with-modules=no \
++ --with-wrappers=no \
+  --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+  --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+  --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+Index: ../trunk-jpl/configs/config-arm-linux.sh
+===================================================================
+--- ../trunk-jpl/configs/config-arm-linux.sh	(revision 13653)
++++ ../trunk-jpl/configs/config-arm-linux.sh	(revision 13654)
+@@ -6,7 +6,7 @@
+     --host="arm-linux-androideabi" \
+     --enable-shared \
+     --without-fortran \
+-	--without-modules \
++	--without-wrappers \
+ 	--without-kriging \
+ 	--with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+Index: ../trunk-jpl/configs/config-macosx64-ad.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-ad.sh	(revision 13653)
++++ ../trunk-jpl/configs/config-macosx64-ad.sh	(revision 13654)
+@@ -2,7 +2,7 @@
+ 
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+-	--without-modules\
++	--without-wrappers\
+ 	--with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install\
+ 	--without-thermal \
+ 	--without-control \
+Index: ../trunk-jpl/configs/config-pleiades.sh
+===================================================================
+--- ../trunk-jpl/configs/config-pleiades.sh	(revision 13653)
++++ ../trunk-jpl/configs/config-pleiades.sh	(revision 13654)
+@@ -2,7 +2,7 @@
+ 
+ ./configure \
+  --prefix=$ISSM_DIR \
+- --with-modules=no \
++ --with-wrappers=no \
+  --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+  --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+  --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+Index: ../trunk-jpl/configs/config-macosx64-gsl.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-gsl.sh	(revision 13653)
++++ ../trunk-jpl/configs/config-macosx64-gsl.sh	(revision 13654)
+@@ -2,7 +2,7 @@
+ 
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+-	--without-modules\
++	--without-wrappers\
+ 	--with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install
+ 	#--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install 
+     #--without-fortran-lib
Index: /issm/oecreview/Archive/13393-13976/ISSM-13654-13655.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13654-13655.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13654-13655.diff	(revision 13980)
@@ -0,0 +1,60 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 13654)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 13655)
+@@ -13,29 +13,27 @@
+ 	fi
+ 
+ 	dnl }}}
+-    dnl shared build {{{
++    dnl Shared build {{{
+     AC_ARG_ENABLE([sharedlibs],                                                dnl feature
+         AS_HELP_STRING([--enable-sharedlibs], [produce libISSM.so.0]),         dnl help string
+         [enable_sharedlibs=$enableval],                                        dnl action if given
+         [enable_sharedlibs=no])                                                dnl action if not given
+     AM_CONDITIONAL([SHAREDLIBS], [test x$enable_sharedlibs = xyes])
+     dnl }}}
+-
+-    dnl shared build {{{
++    dnl Version{{{
+     AC_ARG_ENABLE([version],                                                dnl feature
+         AS_HELP_STRING([--enable-version], [produce libISSM.so.0]),         dnl help string
+         [enable_version=$enableval],                                        dnl action if given
+         [enable_version=no])                                                dnl action if not given
+     AM_CONDITIONAL([VERSION], [test x$enable_VERSION = xyes])
+     dnl }}}
+-
+-	dnl Modules build {{{
+-	AC_ARG_WITH([modules],
+-		AS_HELP_STRING([--with-modules = value],[modules compilation. ]),
+-		[MODULES_VALUE=$withval],[MODULES_VALUE="yes"])
+-	AC_MSG_CHECKING(for modules compilation)
+-	AM_CONDITIONAL([MODULES], [test $MODULES_VALUE = yes])
+-	AC_MSG_RESULT($MODULES_VALUE) 
++	dnl Wrappers build {{{
++	AC_ARG_WITH([wrappers],
++		AS_HELP_STRING([--with-wrappers = value],[wrappers compilation. ]),
++		[WRAPPERS_VALUE=$withval],[WRAPPERS_VALUE="yes"])
++	AC_MSG_CHECKING(for wrappers compilation)
++	AM_CONDITIONAL([WRAPPERS], [test x$WRAPPERS_VALUE = xyes])
++	AC_MSG_RESULT($WRAPPERS_VALUE) 
+ 	dnl }}}
+ 	dnl Extensions{{{
+ 	ISSMEXT=".exe"
+Index: ../trunk-jpl/configure.ac
+===================================================================
+--- ../trunk-jpl/configure.ac	(revision 13654)
++++ ../trunk-jpl/configure.ac	(revision 13655)
+@@ -35,9 +35,9 @@
+ AC_CONFIG_FILES([Makefile
+ 			src/Makefile
+ 			src/c/Makefile 
+-			src/modules/Makefile
+-			src/modules/python/Makefile
+-			src/modules/matlab/Makefile
++			src/wrappers/Makefile
++			src/wrappers/python/Makefile
++			src/wrappers/matlab/Makefile
+ 			src/m/Makefile])
+ 
+ #End of configure.ac
Index: /issm/oecreview/Archive/13393-13976/ISSM-13655-13656.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13655-13656.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13655-13656.diff	(revision 13980)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/res
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/res	(revision 13655)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/res	(revision 13656)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin/res
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,4 ##
++drawable-hdpi
++drawable-ldpi
++drawable-mdpi
++drawable-xhdpi
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin/classes
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin/classes	(revision 13655)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin/classes	(revision 13656)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin/classes
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++com
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin	(revision 13655)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin	(revision 13656)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,3 ##
++resources.ap_
++com.example.my.first.app.MainActivity.apk
++classes.dex
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes	(revision 13655)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes	(revision 13656)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++com
+Index: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/OpenGLES20/bin	(revision 13655)
++++ ../trunk-jpl/src/android/helloworld/OpenGLES20/bin	(revision 13656)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/OpenGLES20/bin
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++com.example.opengles20.MainActivity.apk
++jarlist.cache
Index: /issm/oecreview/Archive/13393-13976/ISSM-13656-13657.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13656-13657.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13656-13657.diff	(revision 13980)
@@ -0,0 +1,192 @@
+Index: ../trunk-jpl/test/NightlyRun/test503.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test503.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test503.py	(revision 13657)
+@@ -0,0 +1,27 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',20000)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md.extrude(3,0.9)
++md=setflowequation(md,'stokes','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test501.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test501.m	(revision 13656)
++++ ../trunk-jpl/test/NightlyRun/test501.m	(revision 13657)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',20000);
++md=triangle(model,'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test504.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test504.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test504.py	(revision 13657)
+@@ -0,0 +1,35 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',20000)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test505.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test505.py	(revision 13657)
+@@ -0,0 +1,43 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',30000)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
++				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2']
++field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test501.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test501.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test501.py	(revision 13657)
+@@ -0,0 +1,25 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',20000.)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test502.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test502.py	(revision 13657)
+@@ -0,0 +1,27 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',20000)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md.extrude(3,0.9)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-08,1e-08,1e-08,1e-08,1e-08]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13657-13658.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13657-13658.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13657-13658.diff	(revision 13980)
@@ -0,0 +1,193 @@
+Index: ../trunk-jpl/test/NightlyRun/test507.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test507.m	(revision 13657)
++++ ../trunk-jpl/test/NightlyRun/test507.m	(revision 13658)
+@@ -7,7 +7,6 @@
+ md=solve(md,TransientSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+-%The thickness wants to be lower than 1 so we contrain it to 1
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2'};
+ field_tolerances={1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06};
+Index: ../trunk-jpl/test/NightlyRun/test508.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test508.py	(revision 13658)
+@@ -0,0 +1,30 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',30000)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md.extrude(4,1.1)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_step=0
++md=solve(md,SteadystateSolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-08]
++field_values=[\
++	md.results['SteadystateSolution'][1]['Vx'],\
++	md.results['SteadystateSolution'][1]['Vy'],\
++	md.results['SteadystateSolution'][1]['Vz'],\
++	md.results['SteadystateSolution'][1]['Vel'],\
++	md.results['SteadystateSolution'][1]['Pressure'],\
++	md.results['SteadystateSolution'][1]['Temperature'],\
++	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test508.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.m	(revision 13657)
++++ ../trunk-jpl/test/NightlyRun/test508.m	(revision 13658)
+@@ -9,8 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-08
+-};
++field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-08};
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+ 	(md.results.SteadystateSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test509.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test509.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test509.py	(revision 13658)
+@@ -0,0 +1,30 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',30000)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_step=0
++md=solve(md,SteadystateSolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06]
++field_values=[\
++	md.results['SteadystateSolution'][1]['Vx'],\
++	md.results['SteadystateSolution'][1]['Vy'],\
++	md.results['SteadystateSolution'][1]['Vz'],\
++	md.results['SteadystateSolution'][1]['Vel'],\
++	md.results['SteadystateSolution'][1]['Pressure'],\
++	md.results['SteadystateSolution'][1]['Temperature'],\
++	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test506.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test506.py	(revision 13658)
+@@ -0,0 +1,44 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',30000)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md.extrude(2,1)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
++				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2']
++field_tolerances=[1e-10,1e-10,1e-10,1e-10,1e-12,1e-11,1e-12,1e-11,1e-12,1e-12,\
++						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,1e-08]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test507.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test507.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test507.py	(revision 13658)
+@@ -0,0 +1,43 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',30000)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md.extrude(2,1)
++md=setflowequation(md,'stokes','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
++				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2']
++field_tolerances=[1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13658-13659.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13658-13659.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13658-13659.diff	(revision 13980)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/python_test_guidelines.txt
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/python_test_guidelines.txt	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/python_test_guidelines.txt	(revision 13659)
+@@ -0,0 +1,10 @@
++Guidelines for language-independent tests (as much as possible!):
++
++- Functions (e.g., model() and Enum()) have argument lists, even if blank.  Add the parentheses to distinguish them from variables.
++- Floating points numbers should have decimal points.  Expressions without decimals (e.g. 2/7) can evaluate incorrectly.
++- Make indentation consistent in appearance as well as content (e.g., don't mix tabs and equivalent number of spaces).
++- Separate statements on separate lines are more general.
++- Be careful with vectors vs. column arrays (unfortunately Matlab does not distinguish).
++- Be careful with variable names that might be reserved words in other languages (e.g. "list").
++- Weird shortcuts for a particular language are not very general.
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13659-13660.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13659-13660.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13659-13660.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/python_test_guidelines.txt
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/python_test_guidelines.txt	(revision 13659)
++++ ../trunk-jpl/test/NightlyRun/python_test_guidelines.txt	(revision 13660)
+@@ -4,7 +4,7 @@
+ - Floating points numbers should have decimal points.  Expressions without decimals (e.g. 2/7) can evaluate incorrectly.
+ - Make indentation consistent in appearance as well as content (e.g., don't mix tabs and equivalent number of spaces).
+ - Separate statements on separate lines are more general.
+-- Be careful with vectors vs. column arrays (unfortunately Matlab does not distinguish).
++- Be careful with vectors vs. column arrays (unfortunately Matlab does not distinguish).  Documentation (like in the class def) showing whether more than one column is possible is very helpful.
+ - Be careful with variable names that might be reserved words in other languages (e.g. "list").
+ - Weird shortcuts for a particular language are not very general.
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13660-13661.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13660-13661.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13660-13661.diff	(revision 13980)
@@ -0,0 +1,673 @@
+Index: ../trunk-jpl/test/NightlyRun/test323.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test323.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test323.py	(revision 13661)
+@@ -0,0 +1,45 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_adapt=1
++md.timestepping.final_time=600.
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test320.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test320.m	(revision 13660)
++++ ../trunk-jpl/test/NightlyRun/test320.m	(revision 13661)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+@@ -7,25 +7,25 @@
+ %control parameters
+ md.inversion.iscontrol=1;
+ md.inversion.control_parameters={'FrictionCoefficient'};
+-md.inversion.min_parameters=1*ones(md.mesh.numberofvertices,1);
+-md.inversion.max_parameters=200*ones(md.mesh.numberofvertices,1);
++md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
++md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+ md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+-md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+-md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
++md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'FrictionCoefficient' 'Pressure' 'Vel' 'Vx' 'Vy'};
++field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+-	md.results.DiagnosticSolution.J,...
++	(md.results.DiagnosticSolution.J),...
+ 	(md.results.DiagnosticSolution.FrictionCoefficient),...
+ 	(md.results.DiagnosticSolution.Pressure),...
+ 	(md.results.DiagnosticSolution.Vel),...
+Index: ../trunk-jpl/test/NightlyRun/test321.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test321.m	(revision 13660)
++++ ../trunk-jpl/test/NightlyRun/test321.m	(revision 13661)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+@@ -7,25 +7,25 @@
+ %control parameters
+ md.inversion.iscontrol=1;
+ md.inversion.control_parameters={'FrictionCoefficient'};
+-md.inversion.min_parameters=1*ones(md.mesh.numberofvertices,1);
+-md.inversion.max_parameters=200*ones(md.mesh.numberofvertices,1);
++md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
++md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+ md.inversion.cost_functions=[102*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+-md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+-md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
++md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'FrictionCoefficient' 'Pressure' 'Vel' 'Vx' 'Vy'};
++field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-08,1e-07,1e-10,1e-10,1e-09,1e-09,1e-09};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+-	md.results.DiagnosticSolution.J,...
++	(md.results.DiagnosticSolution.J),...
+ 	(md.results.DiagnosticSolution.FrictionCoefficient),...
+ 	(md.results.DiagnosticSolution.Pressure),...
+ 	(md.results.DiagnosticSolution.Vel),...
+Index: ../trunk-jpl/test/NightlyRun/test324.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test324.py	(revision 13661)
+@@ -0,0 +1,59 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(5,1.2)
++md=setflowequation(md,'hutter','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_adapt=1
++md.timestepping.final_time=500.
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1',\
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2']
++	#'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++field_tolerances=[1e-13,  1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	5*1e-11,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
++	1e-10,  1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++#	md.results['TransientSolution'][3]['Vx'],\
++#	md.results['TransientSolution'][3]['Vy'],\
++#	md.results['TransientSolution'][3]['Vz'],\
++#	md.results['TransientSolution'][3]['Vel'],\
++#	md.results['TransientSolution'][3]['Pressure'],\
++#	md.results['TransientSolution'][3]['Bed'],\
++#	md.results['TransientSolution'][3]['Surface'],\
++#	md.results['TransientSolution'][3]['Thickness'],\
++#	md.results['TransientSolution'][3]['Temperature'],\
++#	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test322.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.m	(revision 13660)
++++ ../trunk-jpl/test/NightlyRun/test322.m	(revision 13661)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+@@ -7,25 +7,25 @@
+ %control parameters
+ md.inversion.iscontrol=1;
+ md.inversion.control_parameters={'FrictionCoefficient'};
+-md.inversion.min_parameters=1*ones(md.mesh.numberofvertices,1);
+-md.inversion.max_parameters=200*ones(md.mesh.numberofvertices,1);
++md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
++md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+ md.inversion.cost_functions=[104*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+-md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+-md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
++md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'FrictionCoefficient' 'Pressure' 'Vel' 'Vx' 'Vy'};
++field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-06,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+-	md.results.DiagnosticSolution.J,...
++	(md.results.DiagnosticSolution.J),...
+ 	(md.results.DiagnosticSolution.FrictionCoefficient),...
+ 	(md.results.DiagnosticSolution.Pressure),...
+ 	(md.results.DiagnosticSolution.Vel),...
+Index: ../trunk-jpl/test/NightlyRun/test325.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test325.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test325.py	(revision 13661)
+@@ -0,0 +1,28 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.timestepping.time_step=0.
++md.cluster=generic('name',oshostname(),'np',3)
++md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
++md=solve(md,EnthalpySolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Enthalpy','Waterfraction','Temperature']
++field_tolerances=[1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['EnthalpySolution'][1]['Enthalpy'],\
++	md.results['EnthalpySolution'][1]['Waterfraction'],\
++	md.results['EnthalpySolution'][1]['Temperature'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test323.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test323.m	(revision 13660)
++++ ../trunk-jpl/test/NightlyRun/test323.m	(revision 13661)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_adapt=1;
+-md.timestepping.final_time=600;
+-md=solve(md,TransientSolutionEnum);
++md.timestepping.final_time=600.;
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
+Index: ../trunk-jpl/test/NightlyRun/test320.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test320.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test320.py	(revision 13661)
+@@ -0,0 +1,46 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',200000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++
++#control parameters
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['FrictionCoefficient']
++md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=numpy.hstack((103*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
++md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
++md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2*numpy.ones(md.inversion.nsteps)
++md.inversion.step_threshold=0.3*numpy.ones(md.inversion.nsteps)
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
++field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Gradient1'],\
++	md.results['DiagnosticSolution'][1]['J'],\
++	md.results['DiagnosticSolution'][1]['FrictionCoefficient'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++]
+Index: ../trunk-jpl/test/NightlyRun/test324.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.m	(revision 13660)
++++ ../trunk-jpl/test/NightlyRun/test324.m	(revision 13661)
+@@ -1,20 +1,20 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,5,1.2);
+ md=setflowequation(md,'hutter','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_adapt=1;
+-md.timestepping.final_time=500;
+-md=solve(md,TransientSolutionEnum);
++md.timestepping.final_time=500.;
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2'};
+-					   %'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
++field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1',...
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2'};
++	%'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+ field_tolerances={1e-13,  1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...,
+-						5*1e-11,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+-						1e-10,  1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++	5*1e-11,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++	1e-10,  1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test326.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test326.py	(revision 13661)
+@@ -0,0 +1,40 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
++md.transient.isdiagnostic=0
++md.transient.isprognostic=0
++md.transient.isthermal=1
++md.transient.isgroundingline=0
++md.thermal.isenthalpy=1
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Enthalpy1','Waterfraction1','Temperature1',\
++	'Enthalpy2','Waterfraction2','Temperature2',\
++	'Enthalpy3','Waterfraction3','Temperature3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Enthalpy'],\
++	md.results['TransientSolution'][1]['Waterfraction'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][2]['Enthalpy'],\
++	md.results['TransientSolution'][2]['Waterfraction'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][3]['Enthalpy'],\
++	md.results['TransientSolution'][3]['Waterfraction'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test321.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test321.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test321.py	(revision 13661)
+@@ -0,0 +1,46 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',200000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++
++#control parameters
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['FrictionCoefficient']
++md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=numpy.hstack((102*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
++md.inversion.cost_functions_coefficients[:,1]=2*10**-7
++md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2*numpy.ones(md.inversion.nsteps)
++md.inversion.step_threshold=0.3*numpy.ones(md.inversion.nsteps)
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
++field_tolerances=[1e-08,1e-07,1e-10,1e-10,1e-09,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Gradient1'],\
++	md.results['DiagnosticSolution'][1]['J'],\
++	md.results['DiagnosticSolution'][1]['FrictionCoefficient'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++]
+Index: ../trunk-jpl/test/NightlyRun/test325.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test325.m	(revision 13660)
++++ ../trunk-jpl/test/NightlyRun/test325.m	(revision 13661)
+@@ -1,12 +1,12 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'macayeal','all');
+-md.timestepping.time_step=0;
++md.timestepping.time_step=0.;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+-md=solve(md,EnthalpySolutionEnum);
++md=solve(md,EnthalpySolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Enthalpy','Waterfraction','Temperature'};
+Index: ../trunk-jpl/test/NightlyRun/test327.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test327.py	(revision 13661)
+@@ -0,0 +1,65 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',200000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.temperature[:]=272.
++md.thermal.spctemperature[numpy.nonzero(md.mesh.vertexonsurface)[0]]=272.
++md.thermal.isenthalpy=1
++md.basalforcings.geothermalflux[:]=5.
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','Enthalpy1','Waterfraction1',\
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','Enthalpy2','Waterfraction2',\
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','Enthalpy3','Waterfraction3']
++field_tolerances=[1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,5e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['Enthalpy'],\
++	md.results['TransientSolution'][1]['Waterfraction'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['Enthalpy'],\
++	md.results['TransientSolution'][2]['Waterfraction'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['Enthalpy'],\
++	md.results['TransientSolution'][3]['Waterfraction'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test326.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.m	(revision 13660)
++++ ../trunk-jpl/test/NightlyRun/test326.m	(revision 13661)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+@@ -10,7 +10,7 @@
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+ md.thermal.isenthalpy=1;
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Enthalpy1','Waterfraction1','Temperature1',...
+Index: ../trunk-jpl/test/NightlyRun/test322.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test322.py	(revision 13661)
+@@ -0,0 +1,46 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',200000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'stokes','all')
++
++#control parameters
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['FrictionCoefficient']
++md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=numpy.hstack((104*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
++md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
++md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2*numpy.ones(md.inversion.nsteps)
++md.inversion.step_threshold=0.3*numpy.ones(md.inversion.nsteps)
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
++field_tolerances=[1e-06,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Gradient1'],\
++	md.results['DiagnosticSolution'][1]['J'],\
++	md.results['DiagnosticSolution'][1]['FrictionCoefficient'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++]
+Index: ../trunk-jpl/test/NightlyRun/test327.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.m	(revision 13660)
++++ ../trunk-jpl/test/NightlyRun/test327.m	(revision 13661)
+@@ -1,23 +1,23 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+-md.initialization.temperature(:)=272;
+-md.thermal.spctemperature(find(md.mesh.vertexonsurface))=272;
++md.initialization.temperature(:)=272.;
++md.thermal.spctemperature(find(md.mesh.vertexonsurface))=272.;
+ md.thermal.isenthalpy=1;
+-md.basalforcings.geothermalflux(:)=5;
+-md=solve(md,TransientSolutionEnum);
++md.basalforcings.geothermalflux(:)=5.;
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','Enthalpy1','Waterfraction1', ...
+-				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','Enthalpy2','Waterfraction2', ...
+-					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','Enthalpy3','Waterfraction3'};
++field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','Enthalpy1','Waterfraction1',...
++	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','Enthalpy2','Waterfraction2',...
++	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','Enthalpy3','Waterfraction3'};
+ field_tolerances={1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
+-						1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
+-						1e-09,5e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
++	1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
++	1e-09,5e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
Index: /issm/oecreview/Archive/13393-13976/ISSM-13661-13662.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13661-13662.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13661-13662.diff	(revision 13980)
@@ -0,0 +1,233 @@
+Index: ../trunk-jpl/test/NightlyRun/test512.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test512.py	(revision 13662)
+@@ -0,0 +1,46 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',20000.)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md.extrude(3,1.)
++md=setflowequation(md,'pattyn','all')
++
++# control parameters
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['FrictionCoefficient']
++md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=numpy.hstack((103*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
++md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
++md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=2.99*numpy.ones((md.inversion.nsteps,1))
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
++field_tolerances=[1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Gradient1'],\
++	md.results['DiagnosticSolution'][1]['J'],\
++	md.results['DiagnosticSolution'][1]['FrictionCoefficient'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy']
++]
+Index: ../trunk-jpl/test/NightlyRun/test510.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test510.m	(revision 13661)
++++ ../trunk-jpl/test/NightlyRun/test510.m	(revision 13662)
+@@ -9,8 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06
+-};
++field_tolerances={1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06};
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+ 	(md.results.SteadystateSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test513.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test513.py	(revision 13662)
+@@ -0,0 +1,50 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',30000.)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md.extrude(3,1)
++md=setflowequation(md,'macayeal','all')
++
++# control parameters
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['FrictionCoefficient']
++md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=numpy.hstack((103*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
++md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
++md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=0.99*numpy.ones((md.inversion.nsteps,1))
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++md.timestepping.time_step=0
++
++md.thermal.penalty_lock=5
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,SteadystateSolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-10,1e-10,1e-10,1e-10,1e-6,1e-6,1e-6,1e-6,1e-6,1e-06]
++field_values=[\
++	md.results['SteadystateSolution'][1]['Gradient1'],\
++	md.results['SteadystateSolution'][1]['J'],\
++	md.results['SteadystateSolution'][1]['FrictionCoefficient'],\
++	md.results['SteadystateSolution'][1]['Pressure'],\
++	md.results['SteadystateSolution'][1]['Vel'],\
++	md.results['SteadystateSolution'][1]['Vx'],\
++	md.results['SteadystateSolution'][1]['Vy'],\
++	md.results['SteadystateSolution'][1]['Vz'],\
++	md.results['SteadystateSolution'][1]['Temperature'],\
++	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate']
++]
+Index: ../trunk-jpl/test/NightlyRun/test512.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.m	(revision 13661)
++++ ../trunk-jpl/test/NightlyRun/test512.m	(revision 13662)
+@@ -21,7 +21,7 @@
+ md=solve(md,DiagnosticSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'FrictionCoefficient' 'Pressure' 'Vel' 'Vx' 'Vy'};
++field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+Index: ../trunk-jpl/test/NightlyRun/test513.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.m	(revision 13661)
++++ ../trunk-jpl/test/NightlyRun/test513.m	(revision 13662)
+@@ -23,7 +23,7 @@
+ md=solve(md,SteadystateSolutionEnum);
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'FrictionCoefficient' 'Pressure' 'Vel' 'Vx' 'Vy' 'Vz' 'Temperature' 'BasalforcingsMeltingRate'};
++field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate'};
+ field_tolerances={1e-10,1e-10,1e-10,1e-10,1e-6,1e-6,1e-6,1e-6,1e-6,1e-06};
+ field_values={...
+ 	(md.results.SteadystateSolution.Gradient1),...
+Index: ../trunk-jpl/test/NightlyRun/test515.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test515.py	(revision 13662)
+@@ -0,0 +1,32 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',30000)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++md.thermal.stabilization=2
++md.cluster=generic('name',oshostname(),'np',3)
++md.transient.isdiagnostic=0
++md.transient.isprognostic=0
++md.transient.isthermal=1
++md.transient.isgroundingline=0
++md=solve(md,TransientSolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['Temperature1','BasalforcingsMeltingRate1', \
++				      'Temperature2','BasalforcingsMeltingRate2']
++field_tolerances=[1e-13,1e-8,1e-13,1e-8]
++field_values=[\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test510.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test510.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test510.py	(revision 13662)
+@@ -0,0 +1,30 @@
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',20000)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md.extrude(2,1)
++md=setflowequation(md,'stokes','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_step=0
++md=solve(md,SteadystateSolutionEnum())
++
++# Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06]
++field_values=[\
++	md.results['SteadystateSolution'][1]['Vx'],\
++	md.results['SteadystateSolution'][1]['Vy'],\
++	md.results['SteadystateSolution'][1]['Vz'],\
++	md.results['SteadystateSolution'][1]['Vel'],\
++	md.results['SteadystateSolution'][1]['Pressure'],\
++	md.results['SteadystateSolution'][1]['Temperature'],\
++	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test514.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test514.m	(revision 13661)
++++ ../trunk-jpl/test/NightlyRun/test514.m	(revision 13662)
+@@ -43,8 +43,8 @@
+ y7=md2.mesh.y;
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'x1' 'y1' 'x2' 'y2' 'x3' 'y3' 'x4' 'y4' 'x5' 'y5' 'x6' 'y6'  'x7' 'y7' };
+-field_tolerances={1e-13 1e-13 1e-13 1e-13 1e-13 1e-13 1e-13 1e-13 1e-13 1e-13 1e-13 1e-13 1e-13 1e-13};
++field_names     ={'x1y1x2y2x3y3x4y4x5y5x6y6'  'x7y7' };
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	x1, y1,...
+ 	y2, y2,...
Index: /issm/oecreview/Archive/13393-13976/ISSM-13662-13663.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13662-13663.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13662-13663.diff	(revision 13980)
@@ -0,0 +1,1990 @@
+Index: ../trunk-jpl/test/NightlyRun/test401.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test401.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test401.m	(revision 13663)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test605.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test605.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test605.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ md=extrude(md,5,1.5);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,SurfaceSlopeSolutionEnum);
++md=solve(md,SurfaceSlopeSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'SurfaceSlopeX','SurfaceSlopeY'};
+Index: ../trunk-jpl/test/NightlyRun/test507.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test507.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test507.m	(revision 13663)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Pig.exp',30000);
++md=triangle(model,'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,2,1);
++md=extrude(md,2,1.);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 13663)
+@@ -17,7 +17,7 @@
+ md.groundingline.migration='AgressiveMigration';
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Bed1','Surface1','Thickness1','Floatingice1',...
+Index: ../trunk-jpl/test/NightlyRun/test328.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test328.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test328.m	(revision 13663)
+@@ -21,7 +21,7 @@
+ end
+ md.surfaceforcings.smbref=smbref';
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vel1','Bed1','Surface1','Thickness1','SMB1','TotalSmb1','Vx2','Vy2','Vel2','Bed2','Surface2','Thickness2','SMB2','TotalSmb2','Vx3','Vy3','Vel3','Bed3','Surface3','Thickness3','SMB3','TotalSmb3'};
+Index: ../trunk-jpl/test/NightlyRun/test409.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test409.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test409.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,1);
+ md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn','coupling','penalties');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+Index: ../trunk-jpl/test/NightlyRun/test3001.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test3001.m	(revision 13663)
+@@ -3,10 +3,10 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.diagnostic.requested_outputs=StressTensorEnum;
++md.diagnostic.requested_outputs=StressTensorEnum();
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure',...
+Index: ../trunk-jpl/test/NightlyRun/test1202.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1202.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1202.m	(revision 13663)
+@@ -2,7 +2,7 @@
+ printingflag=false;
+ 
+ %tests 3 and 4: using Glen's flow law
+-md=model;
++md=model();
+ md=triangle(md,'../Exp/SquareEISMINT.exp',3550);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareEISMINT.par');
+@@ -10,7 +10,7 @@
+ 
+ %Compute solution for MacAyeal's model 
+ md.cluster=generic('name',oshostname(),'np',8);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %plot results
+ vx=(md.results.DiagnosticSolution.Vx);
+Index: ../trunk-jpl/test/NightlyRun/test1104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1104.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1104.m	(revision 13663)
+@@ -8,7 +8,7 @@
+ 	L=L_list{i};
+ 	nx=20; %numberof nodes in x direction
+ 	ny=20;
+-	md=model;
++	md=model();
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPB.par');
+@@ -36,13 +36,13 @@
+ 	%Compute the diagnostic
+ 	md.diagnostic.abstol=NaN;
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum);
++	md=solve(md,DiagnosticSolutionEnum());
+ 	pos=find(md.mesh.x==0 | md.mesh.y==0 | md.mesh.x==max(md.mesh.x) | md.mesh.y==max(md.mesh.y));
+ 	md.diagnostic.spcvx(pos)=md.results.DiagnosticSolution.Vx(pos);
+ 	md.diagnostic.spcvy(pos)=md.results.DiagnosticSolution.Vy(pos);
+ 	md.diagnostic.vertex_pairing=[];
+ 	md=setflowequation(md,'stokes','all');
+-	md=solve(md,DiagnosticSolutionEnum);
++	md=solve(md,DiagnosticSolutionEnum());
+ 
+ 	%Plot the results and save them
+ 	vx=(md.results.DiagnosticSolution.Vx);
+Index: ../trunk-jpl/test/NightlyRun/test1602.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1602.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1602.m	(revision 13663)
+@@ -9,7 +9,7 @@
+ md.initialization.vel(:)=0;
+ 
+ md.cluster=generic('name',oshostname,'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ vel0=md.results.DiagnosticSolution.Vel;
+ 
+ theta=30*pi/180;
+@@ -20,7 +20,7 @@
+ 
+ md.diagnostic.referential(:,1:3)=repmat([cos(theta),sin(theta),0],md.mesh.numberofvertices,1);
+ md.diagnostic.referential(:,4:6)=repmat([0,0,1],md.mesh.numberofvertices,1);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ vel1=md.results.DiagnosticSolution.Vel;
+ 
+ plotmodel(md,'data',vel0,'data',vel1,'data',vel1-vel0,'title','Cartesian CS','title','Rotated CS','title','difference','view#all',2)
+Index: ../trunk-jpl/test/NightlyRun/test3009.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test3009.m	(revision 13663)
+@@ -10,7 +10,7 @@
+ md.transient.isgroundingline=0;
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test410.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test410.m	(revision 13663)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+-md=solve(md,SteadystateSolutionEnum);
++md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test508.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.py	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test508.py	(revision 13663)
+@@ -7,13 +7,13 @@
+ from solve import *
+ from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Pig.exp',30000)
++md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(4,1.1)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.timestepping.time_step=0
++md.timestepping.time_step=0.
+ md=solve(md,SteadystateSolutionEnum())
+ 
+ # Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test516.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test516.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test516.m	(revision 13663)
+@@ -1,13 +1,13 @@
+-md=triangle(model,'../Exp/Pig.exp',30000);
++md=triangle(model,'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.thermal.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+ md.thermal.penalty_threshold=40;
+-md=solve(md,ThermalSolutionEnum);
++md=solve(md,ThermalSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test3010.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test3010.m	(revision 13663)
+@@ -7,7 +7,7 @@
+ 
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Volume1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Volume2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Volume3'};
+Index: ../trunk-jpl/test/NightlyRun/test503.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test503.py	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test503.py	(revision 13663)
+@@ -7,7 +7,7 @@
+ from solve import *
+ from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Pig.exp',20000)
++md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(3,0.9)
+Index: ../trunk-jpl/test/NightlyRun/test402.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test402.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test402.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ md=extrude(md,4,1);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test606.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test606.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test606.m	(revision 13663)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,BedSlopeSolutionEnum);
++md=solve(md,BedSlopeSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'BedSlopeX','BedSlopeY'};
+Index: ../trunk-jpl/test/NightlyRun/test508.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test508.m	(revision 13663)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Pig.exp',30000);
++md=triangle(model,'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,4,1.1);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_step=0;
+-md=solve(md,SteadystateSolutionEnum);
++md.timestepping.time_step=0.;
++md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test427.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test427.m	(revision 13663)
+@@ -16,7 +16,7 @@
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='SoftMigration';
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Bed1','Surface1','Thickness1','Floatingice1',...
+Index: ../trunk-jpl/test/NightlyRun/test329.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test329.m	(revision 13663)
+@@ -22,7 +22,7 @@
+ md.surfaceforcings.smbref=smbref';
+ md.transient.requested_outputs=TotalSmbEnum();
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Bed1','Surface1','Thickness1','Temperature1','SMB1','TotalSmb1','Vx2','Vy2','Vz2','Vel2','Bed2','Surface2','Thickness2','Temperature2','SMB2','TotalSmb1','Vx3','Vy3','Vz3','Vel3','Bed3','Surface3','Thickness3','Temperature3','SMB3','TotalSmb1'};
+Index: ../trunk-jpl/test/NightlyRun/test1301.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1301.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1301.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ % surface with an imposed slope (Geothermal flux). if it is not the case, something is thermal modeling has been changed...
+ printingflag=false;
+ 
+-md=model;
++md=model();
+ md=triangle(md,'../Exp/Square.exp',100000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+@@ -25,7 +25,7 @@
+ 
+ %modeled  results
+ md.cluster=generic('name',oshostname(),'np',2);
+-md=solve(md,ThermalSolutionEnum);
++md=solve(md,ThermalSolutionEnum());
+ 
+ %plot results
+ comp_melting=md.results.ThermalSolution.BasalforcingsMeltingRate;
+Index: ../trunk-jpl/test/NightlyRun/test3002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test3002.m	(revision 13663)
+@@ -6,7 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test1203.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1203.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1203.m	(revision 13663)
+@@ -2,7 +2,7 @@
+ printingflag=false;
+ 
+ %test 5 and 6 : 
+-md=model;
++md=model();
+ md=triangle(md,'../Exp/SquareEISMINT.exp',5100); %test3
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareEISMINT.par');
+@@ -14,7 +14,7 @@
+ 
+ %Compute solution for MacAyeal's model 
+ md.cluster=generic('name',oshostname(),'np',8);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ vx=(md.results.DiagnosticSolution.Vx);
+ vy=(md.results.DiagnosticSolution.Vy);
+Index: ../trunk-jpl/test/NightlyRun/test1105.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1105.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1105.m	(revision 13663)
+@@ -11,7 +11,7 @@
+ 	L=L_list{i};  %in m (3 times the desired lenght for BC problems)  
+ 	nx=30; %number of nodes in x direction
+ 	ny=30;
+-	md=model;
++	md=model();
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPC.par');
+@@ -62,7 +62,7 @@
+ 
+ 	%Compute the diagnostic
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum);
++	md=solve(md,DiagnosticSolutionEnum());
+ 
+ 	%Plot the results and save them
+ 	vx=(md.results.DiagnosticSolution.Vx);
+Index: ../trunk-jpl/test/NightlyRun/test411.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test411.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test411.m	(revision 13663)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+-md=solve(md,SteadystateSolutionEnum);
++md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test419.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test419.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test419.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ md=extrude(md,5,1);
+ md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/ad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/ad.m	(revision 13663)
+@@ -22,7 +22,7 @@
+ %md.autodiff.driver='fos_forward';
+ md.autodiff.driver='fos_reverse';
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %plot
+ nods=md.mesh.numberofvertices;
+Index: ../trunk-jpl/test/NightlyRun/test3019.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test3019.m	(revision 13663)
+@@ -13,7 +13,7 @@
+ md.autodiff.dependents={dependent('name','MaxVel','type','scalar','fos_reverse_index',1)};
+ md.autodiff.driver='fos_reverse';
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %recover jacobian: 
+ jac_reverse=md.results.TransientSolution(1).AutodiffJacobian;
+@@ -24,7 +24,7 @@
+ md.autodiff.dependents={dependent('name','MaxVel','type','scalar')};
+ md.autodiff.driver='fov_forward';
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %recover jacobian: 
+ jac_forward=md.results.TransientSolution(1).AutodiffJacobian;
+Index: ../trunk-jpl/test/NightlyRun/test420.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test420.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test420.m	(revision 13663)
+@@ -31,7 +31,7 @@
+ md.diagnostic.reltol=10^-5; %tighten for qmu analysese
+ 
+ %solve
+-md=solve(md,DiagnosticSolutionEnum,'overwrite','y');
++md=solve(md,DiagnosticSolutionEnum(),'overwrite','y');
+ md.qmu.results=md.results.dakota;
+ 
+ %test on thickness
+Index: ../trunk-jpl/test/NightlyRun/test501.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test501.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test501.m	(revision 13663)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/Pig.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test403.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test403.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test403.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ md=extrude(md,5,1);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test509.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test509.py	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test509.py	(revision 13663)
+@@ -7,13 +7,13 @@
+ from solve import *
+ from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Pig.exp',30000)
++md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.timestepping.time_step=0
++md.timestepping.time_step=0.
+ md=solve(md,SteadystateSolutionEnum())
+ 
+ # Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test607.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test607.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test607.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ md=extrude(md,2,1);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,BedSlopeSolutionEnum);
++md=solve(md,BedSlopeSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'BedSlopeX','BedSlopeY'};
+Index: ../trunk-jpl/test/NightlyRun/test428.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test428.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test428.m	(revision 13663)
+@@ -5,7 +5,7 @@
+ md.diagnostic.isnewton=1;
+ md.diagnostic.restol=0.0001;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test509.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test509.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test509.m	(revision 13663)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Pig.exp',30000);
++md=triangle(model,'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_step=0;
+-md=solve(md,SteadystateSolutionEnum);
++md.timestepping.time_step=0.;
++md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test3020.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test3020.m	(revision 13663)
+@@ -7,7 +7,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.transient.requested_outputs=[IceVolumeEnum;MaxVelEnum];
++md.transient.requested_outputs=[IceVolumeEnum();MaxVelEnum];
+ md.verbose=verbose('autodiff',true);
+ md.diagnostic.restol=.000001;
+ 
+@@ -42,7 +42,7 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md=SetIceShelfBC(md);
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ V0=md.results.TransientSolution(end).IceVolume;
+ MaxV0=md.results.TransientSolution(end).MaxVel;
+ 
+@@ -54,7 +54,7 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md=SetIceShelfBC(md);
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ V2=md.results.TransientSolution(end).IceVolume;
+ MaxV2=md.results.TransientSolution(end).MaxVel;
+ 
+@@ -71,7 +71,7 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md=SetIceShelfBC(md);
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ %retrieve directly
+ dVdh_ad=md.results.TransientSolution(1).AutodiffJacobian(1);
+ dMaxVdh_ad=md.results.TransientSolution(1).AutodiffJacobian(2);
+Index: ../trunk-jpl/test/NightlyRun/test3003.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test3003.m	(revision 13663)
+@@ -4,10 +4,10 @@
+ md=extrude(md,3,2);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.diagnostic.requested_outputs=StressTensorEnum;
++md.diagnostic.requested_outputs=StressTensorEnum();
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure',...
+Index: ../trunk-jpl/test/NightlyRun/test1302.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1302.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1302.m	(revision 13663)
+@@ -3,7 +3,7 @@
+ % at upper surface and an impose flux at its base.
+ printingflag=false;
+ 
+-md=model;
++md=model();
+ md=triangle(md,'../Exp/Square.exp',100000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+@@ -27,7 +27,7 @@
+ 
+ %modeled  results
+ md.cluster=generic('name',oshostname(),'np',2);
+-md=solve(md,ThermalSolutionEnum);
++md=solve(md,ThermalSolutionEnum());
+ 
+ %plot results
+ comp_temp=md.results.ThermalSolution.Temperature;
+Index: ../trunk-jpl/test/NightlyRun/test1204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1204.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1204.m	(revision 13663)
+@@ -2,7 +2,7 @@
+ printingflag=false;
+ 
+ %tests 3 and 4: using Glen's flow law
+-md=model;
++md=model();
+ md=triangle(md,'../Exp/SquareEISMINT.exp',3550);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareEISMINT.par');
+@@ -14,7 +14,7 @@
+ 
+ %Compute solution for MacAyeal's model 
+ md.cluster=generic('name',oshostname(),'np',8);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %plot results
+ md.initialization.vx=(md.results.DiagnosticSolution.Vx);
+@@ -23,7 +23,7 @@
+ md.timestepping.time_step=1;
+ md.timestepping.final_time=5000;
+ md.prognostic.stabilization=1;
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ plotmodel(md,'data',(md.results.TransientSolution(end).Vx))
+ if printingflag, 
+Index: ../trunk-jpl/test/NightlyRun/test1106.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1106.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1106.m	(revision 13663)
+@@ -40,7 +40,7 @@
+ 
+ 	%Compute the diagnostic
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum);
++	md=solve(md,DiagnosticSolutionEnum());
+ 
+ 	%Plot the results and save them
+ 	vx=(md.results.DiagnosticSolution.Vx);
+Index: ../trunk-jpl/test/NightlyRun/test504.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test504.py	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test504.py	(revision 13663)
+@@ -7,7 +7,7 @@
+ from solve import *
+ from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Pig.exp',20000)
++md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md=setflowequation(md,'macayeal','all')
+Index: ../trunk-jpl/test/NightlyRun/test510.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test510.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test510.m	(revision 13663)
+@@ -1,11 +1,11 @@
+-md=triangle(model,'../Exp/Pig.exp',20000);
++md=triangle(model,'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,2,1);
++md=extrude(md,2,1.);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_step=0;
+-md=solve(md,SteadystateSolutionEnum);
++md.timestepping.time_step=0.;
++md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test412.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test412.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test412.m	(revision 13663)
+@@ -32,7 +32,7 @@
+ md.diagnostic.reltol=10^-5; %tighten for qmu analysese
+ 
+ %solve
+-md=solve(md,DiagnosticSolutionEnum,'overwrite','y');
++md=solve(md,DiagnosticSolutionEnum(),'overwrite','y');
+ 
+ %Fields and tolerances to track changes
+ md.qmu.results=md.results.dakota;
+Index: ../trunk-jpl/test/NightlyRun/test513.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.py	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test513.py	(revision 13663)
+@@ -27,7 +27,7 @@
+ md.inversion.step_threshold=0.99*numpy.ones((md.inversion.nsteps,1))
+ md.inversion.vx_obs=md.initialization.vx
+ md.inversion.vy_obs=md.initialization.vy
+-md.timestepping.time_step=0
++md.timestepping.time_step=0.
+ 
+ md.thermal.penalty_lock=5
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ md=extrude(md,5,1);
+ md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','pattyn');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test502.m	(revision 13663)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Pig.exp',20000);
++md=triangle(model,'../Exp/Pig.exp',20000).;
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,0.9);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test404.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test404.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,1);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test608.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test608.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test608.m	(revision 13663)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,BalancethicknessSolutionEnum);
++md=solve(md,BalancethicknessSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test429.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test429.m	(revision 13663)
+@@ -6,7 +6,7 @@
+ md.diagnostic.isnewton=1;
+ md.diagnostic.restol=0.0001;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test1401.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1401.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1401.m	(revision 13663)
+@@ -6,7 +6,7 @@
+ L=1; %in m
+ nx=70; %numberof nodes in x direction
+ ny=70;
+-md=model;
++md=model();
+ 
+ %mesh adaptation loop YAMS
+ md=squaremesh(md,L,L,nx,ny);
+Index: ../trunk-jpl/test/NightlyRun/test1303.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1303.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1303.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ % surface. if it is not the case, something is thermal modeling has been changed...
+ printingflag=false;
+ 
+-md=model;
++md=model();
+ md=triangle(md,'../Exp/Square.exp',100000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+@@ -21,7 +21,7 @@
+ 
+ %modeled  results
+ md.cluster=generic('name',oshostname(),'np',2);
+-md=solve(md,ThermalSolutionEnum);
++md=solve(md,ThermalSolutionEnum());
+ 
+ %plot results
+ comp_temp=md.results.ThermalSolution.Temperature;
+Index: ../trunk-jpl/test/NightlyRun/test3004.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test3004.m	(revision 13663)
+@@ -6,7 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test1205.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1205.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1205.m	(revision 13663)
+@@ -5,7 +5,7 @@
+ resolution=30000;
+ 
+ %To begin with the numerical model
+-md=model;
++md=model();
+ md=roundmesh(md,750000,resolution);
+ md=setmask(md,'',''); %We can not test iceshelves nor ice rises with this analytical solution
+ md=parameterize(md,'../Par/RoundSheetStaticEISMINT.par');
+@@ -28,7 +28,7 @@
+ 
+ %Now we can solve the problem 
+ md.cluster=generic('name',oshostname(),'np',8);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Calculate the depth averaged velocity field (2d):
+ vx=(md.results.DiagnosticSolution.Vx);
+Index: ../trunk-jpl/test/NightlyRun/test1107.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1107.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1107.m	(revision 13663)
+@@ -11,7 +11,7 @@
+ 	L=L_list{i};
+ 	nx=30; %numberof nodes in x direction
+ 	ny=30;
+-	md=model;
++	md=model();
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPD.par');
+@@ -57,7 +57,7 @@
+ 
+ 	%Compute the diagnostic
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum);
++	md=solve(md,DiagnosticSolutionEnum());
+ 
+ 	%Plot the results and save them
+ 	vx=(md.results.DiagnosticSolution.Vx);
+Index: ../trunk-jpl/test/NightlyRun/test511.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test511.m	(revision 13663)
+@@ -1,29 +1,29 @@
+-md=triangle(model,'../Exp/Pig.exp',10000);
++md=triangle(model,'../Exp/Pig.exp',10000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ 
+ %impose hydrostatic equilibrium (required by Stokes)
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'stokes','all');
+ md=extract(md,md.mask.elementonfloatingice);
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+ md.inversion.control_parameters={'MaterialsRheologyBbar'};
+-md.inversion.min_parameters=10^6*ones(md.mesh.numberofvertices,1);
+-md.inversion.max_parameters=2*10^9*ones(md.mesh.numberofvertices,1);
++md.inversion.min_parameters=10.^6*ones(md.mesh.numberofvertices,1);
++md.inversion.max_parameters=2.*10^9*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+ md.inversion.cost_functions=101*ones(md.inversion.nsteps,1);
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+-md.inversion.gradient_scaling=10^8*ones(md.inversion.nsteps,1);
+-md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
++md.inversion.gradient_scaling=10.^8*ones(md.inversion.nsteps,1);
++md.inversion.maxiter_per_step=2.*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient' 'Misfits' 'MaterialsRheologyB' 'Pressure' 'Vel' 'Vx' 'Vy'};
+Index: ../trunk-jpl/test/NightlyRun/test430.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test430.m	(revision 13663)
+@@ -6,7 +6,7 @@
+ md.diagnostic.isnewton=1;
+ md.diagnostic.restol=0.0001;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test413.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test413.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test413.m	(revision 13663)
+@@ -33,7 +33,7 @@
+ md.qmu.isdakota=1;
+ 
+ %solve
+-md=solve(md,DiagnosticSolutionEnum,'overwrite','y');
++md=solve(md,DiagnosticSolutionEnum(),'overwrite','y');
+ 
+ %Fields and tolerances to track changes
+ md.qmu.results=md.results.dakota;
+Index: ../trunk-jpl/test/NightlyRun/test505.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.py	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test505.py	(revision 13663)
+@@ -7,10 +7,10 @@
+ from solve import *
+ from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Pig.exp',30000)
++md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test601.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test601.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test601.m	(revision 13663)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test503.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test503.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test503.m	(revision 13663)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Pig.exp',20000);
++md=triangle(model,'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,0.9);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test422.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test422.m	(revision 13663)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','macayeal');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.reltol=0.4;
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test405.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test405.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test405.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ md=extrude(md,5,1);
+ md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn','coupling','penalties');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure'};
+Index: ../trunk-jpl/test/NightlyRun/test609.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test609.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test609.m	(revision 13663)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'macayeal','all');
+ md.balancethickness.stabilization=3;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,BalancethicknessSolutionEnum);
++md=solve(md,BalancethicknessSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test1402.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1402.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1402.m	(revision 13663)
+@@ -5,7 +5,7 @@
+ L=1; %in m
+ nx=30; %numberof nodes in x direction
+ ny=30;
+-md=model;
++md=model();
+ 
+ %mesh adaptation loop YAMS
+ md=squaremesh(md,L,L,nx,ny);
+Index: ../trunk-jpl/test/NightlyRun/test1304.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1304.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1304.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ % surface with an imposed slope (Geothermal flux). if it is not the case, something is thermal modeling has been changed...
+ printingflag=false;
+ 
+-md=model;
++md=model();
+ md=triangle(md,'../Exp/Square.exp',100000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+@@ -22,7 +22,7 @@
+ 
+ %modeled  results
+ md.cluster=generic('name',oshostname(),'np',2);
+-md=solve(md,ThermalSolutionEnum);
++md=solve(md,ThermalSolutionEnum());
+ 
+ %plot results
+ comp_temp=md.results.ThermalSolution.Temperature;
+Index: ../trunk-jpl/test/NightlyRun/test3005.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test3005.m	(revision 13663)
+@@ -5,7 +5,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test1206.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1206.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1206.m	(revision 13663)
+@@ -5,7 +5,7 @@
+ resolution=30000;
+ 
+ %To begin with the numerical model
+-md=model;
++md=model();
+ md=roundmesh(md,750000,resolution);
+ md=setmask(md,'',''); %We can not test iceshelves nor ice rises with this analytical solution
+ md=parameterize(md,'../Par/RoundSheetStaticEISMINT.par');
+@@ -28,7 +28,7 @@
+ 
+ %Now we can solve the problem 
+ md.cluster=generic('name',oshostname(),'np',8);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Calculate the depth averaged velocity field (2d):
+ vx=(md.results.DiagnosticSolution.Vx);
+Index: ../trunk-jpl/test/NightlyRun/test1108.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1108.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1108.m	(revision 13663)
+@@ -8,7 +8,7 @@
+ 	L=L_list{i};
+ 	nx=30; %numberof nodes in x direction
+ 	ny=30;
+-	md=model;
++	md=model();
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPD.par');
+@@ -38,7 +38,7 @@
+ 	%Compute the diagnostic
+ 	md.cluster=generic('name',oshostname(),'np',8);
+ 	md.verbose=verbose('convergence',true);
+-	md=solve(md,DiagnosticSolutionEnum);
++	md=solve(md,DiagnosticSolutionEnum());
+ 	md.diagnostic.reltol=NaN;
+ 	md.diagnostic.abstol=NaN;
+ 	md.diagnostic.vertex_pairing=[];
+@@ -50,7 +50,7 @@
+ 	md.diagnostic.spcvx(pos)=md.results.DiagnosticSolution.Vx(pos);
+ 	md.diagnostic.spcvy(pos)=md.results.DiagnosticSolution.Vy(pos);
+ 	md=setflowequation(md,'stokes','all');
+-	md=solve(md,DiagnosticSolutionEnum);
++	md=solve(md,DiagnosticSolutionEnum());
+ 
+ 	%Plot the results and save them
+ 	vx=(md.results.DiagnosticSolution.Vx);
+Index: ../trunk-jpl/test/NightlyRun/test610.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test610.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test610.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,1);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,BalancethicknessSolutionEnum);
++md=solve(md,BalancethicknessSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test512.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test512.m	(revision 13663)
+@@ -1,7 +1,7 @@
+-md=triangle(model,'../Exp/Pig.exp',20000);
++md=triangle(model,'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ 
+ %control parameters
+@@ -11,14 +11,14 @@
+ md.inversion.max_parameters=200*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+ md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+-md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+-md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
++md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy'};
+Index: ../trunk-jpl/test/NightlyRun/test431.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test431.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test431.m	(revision 13663)
+@@ -7,7 +7,7 @@
+ md.timestepping.time_step=0;
+ md.thermal.isenthalpy=1;
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+-md=solve(md,SteadystateSolutionEnum);
++md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','Water fraction','Enthalpy'};
+Index: ../trunk-jpl/test/NightlyRun/test414.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test414.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test414.m	(revision 13663)
+@@ -47,7 +47,7 @@
+ md.diagnostic.reltol=10^-5; %tighten for qmu analyses
+ 
+ %solve
+-md=solve(md,DiagnosticSolutionEnum,'overwrite','y');
++md=solve(md,DiagnosticSolutionEnum(),'overwrite','y');
+ md.qmu.results=md.results.dakota;
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test602.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test602.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test602.m	(revision 13663)
+@@ -6,7 +6,7 @@
+ md.prognostic.stabilization=3;
+ md.prognostic.spcthickness=md.geometry.thickness;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test504.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test504.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test504.m	(revision 13663)
+@@ -1,9 +1,9 @@
+-md=triangle(model,'../Exp/Pig.exp',20000);
++md=triangle(model,'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2'};
+Index: ../trunk-jpl/test/NightlyRun/test423.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test423.m	(revision 13663)
+@@ -24,11 +24,11 @@
+ 
+ %test different grounding line dynamics.
+ md.groundingline.migration='AgressiveMigration';
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ element_on_iceshelf_agressive=(md.results.TransientSolution.MaskElementonfloatingice);
+ 
+ md.groundingline.migration='SoftMigration';
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ element_on_iceshelf_soft=(md.results.TransientSolution.MaskElementonfloatingice);
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test406.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test406.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test406.m	(revision 13663)
+@@ -5,7 +5,7 @@
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+-md=solve(md,ThermalSolutionEnum);
++md=solve(md,ThermalSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test1101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1101.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1101.m	(revision 13663)
+@@ -11,7 +11,7 @@
+ 	L=L_list{i};
+ 	nx=20; %numberof nodes in x direction
+ 	ny=20;
+-	md=model;
++	md=model();
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPA.par');
+@@ -39,7 +39,7 @@
+ 
+ 	%Compute the diagnostic
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum);
++	md=solve(md,DiagnosticSolutionEnum());
+ 
+ 	%Plot the results and save them
+ 	vx=(md.results.DiagnosticSolution.Vx);
+Index: ../trunk-jpl/test/NightlyRun/test1501.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1501.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1501.m	(revision 13663)
+@@ -16,10 +16,10 @@
+ md.surfaceforcings.mass_balance= smb;
+ md.basalforcings.melting_rate= smb;
+ 
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ for i=1:10
+-	 md=solve(md,PrognosticSolutionEnum);
++	 md=solve(md,PrognosticSolutionEnum());
+ 	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - ((md.results.PrognosticSolution.Thickness)-md.geometry.thickness);
+ end
+ 
+@@ -32,7 +32,7 @@
+ md.surfaceforcings.mass_balance= smb;
+ md.surfaceforcings.mass_balance(end+1,:)=[1:2000];
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','SurfaceforcingsMassBalance1', ...
+Index: ../trunk-jpl/test/NightlyRun/test3006.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test3006.m	(revision 13663)
+@@ -8,7 +8,7 @@
+ md.prognostic.spcthickness=md.geometry.thickness;
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test1207.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1207.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1207.m	(revision 13663)
+@@ -5,7 +5,7 @@
+ resolution=30000;
+ 
+ %To begin with the numerical model
+-md=model;
++md=model();
+ md=roundmesh(md,750000,resolution);
+ md=setmask(md,'',''); %We can not test iceshelves nor ice rises with this analytical solution
+ md=parameterize(md,'../Par/RoundSheetStaticEISMINT.par');
+@@ -28,7 +28,7 @@
+ 
+ %Now we can solve the problem 
+ md.cluster=generic('name',oshostname(),'np',8);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Calculate the depth averaged velocity field (2d):
+ vx=(md.results.DiagnosticSolution.Vx);
+Index: ../trunk-jpl/test/NightlyRun/test1109.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1109.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1109.m	(revision 13663)
+@@ -12,7 +12,7 @@
+ 	Ly=5000; %in m
+ 	nx=3; %number of nodes in x direction
+ 	ny=51;
+-	md=model;
++	md=model();
+ 	md=squaremesh(md,Lx,Ly,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPE.par');
+@@ -48,7 +48,7 @@
+ 
+ 	%Compute the diagnostic
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum);
++	md=solve(md,DiagnosticSolutionEnum());
+ 
+ 	vx=(md.results.DiagnosticSolution.Vx);
+ 	vy=(md.results.DiagnosticSolution.Vy);
+Index: ../trunk-jpl/test/NightlyRun/test506.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.py	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test506.py	(revision 13663)
+@@ -7,10 +7,10 @@
+ from solve import *
+ from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Pig.exp',30000)
++md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(2,1)
++md.extrude(2,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test611.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test611.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test611.m	(revision 13663)
+@@ -18,7 +18,7 @@
+ md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,BalancethicknessSolutionEnum);
++md=solve(md,BalancethicknessSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient' 'Misfits' 'BalancethicknessThickeningRate' 'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test513.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test513.m	(revision 13663)
+@@ -1,26 +1,26 @@
+-md=triangle(model,'../Exp/Pig.exp',30000);
++md=triangle(model,'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ 
+ %control parameters
+ md.inversion.iscontrol=1;
+ md.inversion.control_parameters={'FrictionCoefficient'};
+-md.inversion.min_parameters=1*ones(md.mesh.numberofvertices,1);
+-md.inversion.max_parameters=200*ones(md.mesh.numberofvertices,1);
++md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
++md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+ md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+-md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+-md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
+-md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
++md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
++md.inversion.maxiter_per_step=2.*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+-md.timestepping.time_step=0;
++md.timestepping.time_step=0.;
+ 
+ md.thermal.penalty_lock=5;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,SteadystateSolutionEnum);
++md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test432.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test432.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test432.m	(revision 13663)
+@@ -7,7 +7,7 @@
+ md.timestepping.time_step=0;
+ md.thermal.isenthalpy=1;
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+-md=solve(md,SteadystateSolutionEnum);
++md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','Water fraction','Enthalpy'};
+Index: ../trunk-jpl/test/NightlyRun/test415.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test415.m	(revision 13663)
+@@ -19,7 +19,7 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,SteadystateSolutionEnum);
++md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient' 'Misfits' 'FrictionCoefficient' 'Pressure' 'Vel' 'Vx' 'Vy' 'Vz' 'Temperature' 'BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test1110.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1110.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1110.m	(revision 13663)
+@@ -6,7 +6,7 @@
+ 	L=100000; %in m
+ 	nx=30; %numberof nodes in x direction
+ 	ny=30;
+-	md=model;
++	md=model();
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	%md=triangle(md,'../Exp/SquareISMIP.exp',5500);
+ 	md=setmask(md,'',''); %ice sheet test
+@@ -56,7 +56,7 @@
+ 	%Compute the diagnostic
+ 	md.cluster=generic('name',oshostname(),'np',8);
+ 	md.verbose=verbose('convergence',true,'solution',true);
+-	md=solve(md,TransientSolutionEnum);
++	md=solve(md,TransientSolutionEnum());
+ 
+ 	%save the results
+ 	results{i}=md.results.TransientSolution(end);
+Index: ../trunk-jpl/test/NightlyRun/test3015.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test3015.m	(revision 13663)
+@@ -7,7 +7,7 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.prognostic.requested_outputs=IceVolumeEnum;
++md.prognostic.requested_outputs=IceVolumeEnum();
+ md.verbose=verbose('autodiff',true);
+ 
+ %setup autodiff parameters
+@@ -40,7 +40,7 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md=SetIceShelfBC(md);
+ 
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ V0=md.results.PrognosticSolution.IceVolume;
+ 
+ %backward
+@@ -51,7 +51,7 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md=SetIceShelfBC(md);
+ 
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ V2=md.results.PrognosticSolution.IceVolume;
+ 
+ %compute resulting derivative
+@@ -65,7 +65,7 @@
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md=SetIceShelfBC(md);
+ 
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ %retrieve directly
+ dVdh_ad=md.results.PrognosticSolution.AutodiffJacobian;
+ 
+Index: ../trunk-jpl/test/NightlyRun/test515.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.py	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test515.py	(revision 13663)
+@@ -7,7 +7,7 @@
+ from solve import *
+ from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Pig.exp',30000)
++md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(3,1)
+Index: ../trunk-jpl/test/NightlyRun/test603.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test603.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test603.m	(revision 13663)
+@@ -4,7 +4,7 @@
+ md=extrude(md,6,1);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test505.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test505.m	(revision 13663)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Pig.exp',30000);
++md=triangle(model,'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+Index: ../trunk-jpl/test/NightlyRun/test424.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test424.m	(revision 13663)
+@@ -15,7 +15,7 @@
+ md.groundingline.migration='AgressiveMigration';
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Bed1','Surface1','Thickness1','Floatingice1',...
+Index: ../trunk-jpl/test/NightlyRun/test407.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test407.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test407.m	(revision 13663)
+@@ -8,7 +8,7 @@
+ md.transient.isprognostic=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test1102.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1102.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1102.m	(revision 13663)
+@@ -11,7 +11,7 @@
+ 	L=L_list{i};
+ 	nx=20; %numberof nodes in x direction
+ 	ny=20;
+-	md=model;
++	md=model();
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 
+@@ -48,7 +48,7 @@
+ 	md.diagnostic.reltol=NaN;
+ 	md.diagnostic.restol=1;
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum);
++	md=solve(md,DiagnosticSolutionEnum());
+ 
+ 	%Plot the results and save them
+ 	vx=(md.results.DiagnosticSolution.Vx);
+Index: ../trunk-jpl/test/NightlyRun/test1502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1502.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1502.m	(revision 13663)
+@@ -17,10 +17,10 @@
+ md.surfaceforcings.mass_balance= smb;
+ md.basalforcings.melting_rate= smb;
+ 
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ for i=1:10
+-	 md=solve(md,PrognosticSolutionEnum);
++	 md=solve(md,PrognosticSolutionEnum());
+ 	 md.surfaceforcings.mass_balance= md.surfaceforcings.mass_balance - ((md.results.PrognosticSolution.Thickness)-md.geometry.thickness);
+ end
+ 
+@@ -33,7 +33,7 @@
+ md.surfaceforcings.mass_balance= smb;
+ md.surfaceforcings.mass_balance(end+1,:)=[1:2000];
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','SurfaceforcingsMassBalance1', ...
+Index: ../trunk-jpl/test/NightlyRun/test3007.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test3007.m	(revision 13663)
+@@ -6,7 +6,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,PrognosticSolutionEnum);
++md=solve(md,PrognosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test1208.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1208.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1208.m	(revision 13663)
+@@ -26,7 +26,7 @@
+ 
+ %Now we can solve the problem 
+ md.cluster=generic('name',oshostname(),'np',8);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Thickness','Bed','Surface','Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test510.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test510.py	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test510.py	(revision 13663)
+@@ -7,13 +7,13 @@
+ from solve import *
+ from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Pig.exp',20000)
++md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(2,1)
++md.extrude(2,1.)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.timestepping.time_step=0
++md.timestepping.time_step=0.
+ md=solve(md,SteadystateSolutionEnum())
+ 
+ # Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test612.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test612.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test612.m	(revision 13663)
+@@ -19,7 +19,7 @@
+ md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,BalancethicknessSolutionEnum);
++md=solve(md,BalancethicknessSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient' 'Misfits' 'BalancethicknessThickeningRate' 'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test416.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test416.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test416.m	(revision 13663)
+@@ -19,7 +19,7 @@
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,SteadystateSolutionEnum);
++md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient' 'Misfits' 'FrictionCoefficient' 'Pressure' 'Vel' 'Vx' 'Vy' 'Vz' 'Temperature' 'BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/ad_maxalloc.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad_maxalloc.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/ad_maxalloc.m	(revision 13663)
+@@ -16,4 +16,4 @@
+ 
+ md.autodiff.driver='fov_forward';
+ 
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test507.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test507.py	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test507.py	(revision 13663)
+@@ -7,10 +7,10 @@
+ from solve import *
+ from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Pig.exp',30000)
++md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(2,1)
++md.extrude(2,1.)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test604.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test604.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test604.m	(revision 13663)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,SurfaceSlopeSolutionEnum);
++md=solve(md,SurfaceSlopeSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'SurfaceSlopeX','SurfaceSlopeY'};
+Index: ../trunk-jpl/test/NightlyRun/test425.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test425.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test425.m	(revision 13663)
+@@ -15,7 +15,7 @@
+ md.groundingline.migration='SoftMigration';
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Bed1','Surface1','Thickness1','Floatingice1',...
+Index: ../trunk-jpl/test/NightlyRun/test506.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test506.m	(revision 13663)
+@@ -1,10 +1,10 @@
+-md=triangle(model,'../Exp/Pig.exp',30000);
++md=triangle(model,'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,2,1);
++md=extrude(md,2,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+Index: ../trunk-jpl/test/NightlyRun/test408.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test408.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test408.m	(revision 13663)
+@@ -3,7 +3,7 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
+Index: ../trunk-jpl/test/NightlyRun/test1201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1201.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1201.m	(revision 13663)
+@@ -37,7 +37,7 @@
+ 	md.transient.isdiagnostic=0;
+ 	md.settings.output_frequency=500; %keep only last step
+ 	md.verbose=verbose();
+-	md=solve(md,TransientSolutionEnum);
++	md=solve(md,TransientSolutionEnum());
+ 	results{stabilization}=(md.results.TransientSolution(end).Thickness);
+ end
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1103.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1103.m	(revision 13663)
+@@ -9,7 +9,7 @@
+ 	L=L_list{i};
+ 	nx=20; %numberof nodes in x direction
+ 	ny=20;
+-	md=model;
++	md=model();
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPB.par');
+@@ -36,7 +36,7 @@
+ 
+ 	%Compute the diagnostic
+ 	md.cluster=generic('name',oshostname(),'np',8);
+-	md=solve(md,DiagnosticSolutionEnum);
++	md=solve(md,DiagnosticSolutionEnum());
+ 
+ 	%Plot the results and save them
+ 	vx=(md.results.DiagnosticSolution.Vx);
+Index: ../trunk-jpl/test/NightlyRun/test1601.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1601.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test1601.m	(revision 13663)
+@@ -8,7 +8,7 @@
+ md.initialization.vel(:)=0;
+ 
+ md.cluster=generic('name',oshostname,'np',2);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ vel0=md.results.DiagnosticSolution.Vel;
+ 
+ theta=30*pi/180;
+@@ -19,7 +19,7 @@
+ 
+ md.diagnostic.referential(:,1:3)=repmat([cos(theta),sin(theta),0],md.mesh.numberofvertices,1);
+ md.diagnostic.referential(:,4:6)=repmat([0,0,1],md.mesh.numberofvertices,1);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ vel1=md.results.DiagnosticSolution.Vel;
+ 
+ plotmodel(md,'data',vel0,'data',vel1,'data',vel1-vel0,'title','Cartesian CS','title','Rotated CS','title','difference')
+@@ -30,7 +30,7 @@
+ md.diagnostic.referential(:)=NaN;
+ md.diagnostic.referential(pos,1:3)=repmat([cos(theta),sin(theta),0],size(pos,1),1);
+ md.diagnostic.referential(pos,4:6)=repmat([0,0,1],size(pos,1),1);
+-md=solve(md,DiagnosticSolutionEnum);
++md=solve(md,DiagnosticSolutionEnum());
+ vel2=md.results.DiagnosticSolution.Vel;
+ 
+ plotmodel(md,'data',vel0,'data',vel2,'data',vel2-vel0,'title','Cartesian CS','title','Rotated CS','title','difference')
+Index: ../trunk-jpl/test/NightlyRun/test3008.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test3008.m	(revision 13663)
+@@ -7,7 +7,7 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+-md=solve(md,ThermalSolutionEnum);
++md=solve(md,ThermalSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+Index: ../trunk-jpl/test/NightlyRun/test502.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.py	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test502.py	(revision 13663)
+@@ -7,7 +7,7 @@
+ from solve import *
+ from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Pig.exp',20000)
++md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(3,0.9)
+Index: ../trunk-jpl/test/NightlyRun/test613.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test613.m	(revision 13663)
+@@ -26,7 +26,7 @@
+ 
+ md.verbose.control=1;
+ md.cluster=generic('name',oshostname(),'np',3);
+-md=solve(md,BalancethicknessSolutionEnum);
++md=solve(md,BalancethicknessSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient1' 'Gradient2' 'Misfits' 'Vx' 'Vy' 'Thickness'};
+Index: ../trunk-jpl/test/NightlyRun/test515.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test515.m	(revision 13663)
+@@ -1,7 +1,7 @@
+-md=triangle(model,'../Exp/Pig.exp',30000);
++md=triangle(model,'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.thermal.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+@@ -9,7 +9,7 @@
+ md.transient.isprognostic=0;
+ md.transient.isthermal=1;
+ md.transient.isgroundingline=0;
+-md=solve(md,TransientSolutionEnum);
++md=solve(md,TransientSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature1','BasalforcingsMeltingRate1', ...
+Index: ../trunk-jpl/test/NightlyRun/test417.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test417.m	(revision 13662)
++++ ../trunk-jpl/test/NightlyRun/test417.m	(revision 13663)
+@@ -49,7 +49,7 @@
+ 
+ md.diagnostic.reltol=10^-5; %tighten for qmu analyses
+ 
+-md=solve(md,DiagnosticSolutionEnum,'overwrite','y');
++md=solve(md,DiagnosticSolutionEnum(),'overwrite','y');
+ 
+ %Fields and tolerances to track changes
+ md.qmu.results=md.results.dakota;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13663-13664.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13663-13664.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13663-13664.diff	(revision 13980)
@@ -0,0 +1,921 @@
+Index: ../trunk-jpl/test/NightlyRun/test401.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test401.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test401.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test605.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test605.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test605.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=extrude(md,5,1.5);
+Index: ../trunk-jpl/test/NightlyRun/test507.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test507.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test507.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',30000.);
++md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,2,1.);
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',350000);
++md=triangle(model(),'../Exp/Square.exp',350000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md.initialization.vx(:)=0;
+Index: ../trunk-jpl/test/NightlyRun/test328.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test328.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test328.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test409.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test409.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test409.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test3001.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test3001.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',50000);
++md=triangle(model(),'../Exp/Square.exp',50000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test1602.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1602.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test1602.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test3009.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test3009.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test410.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test410.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test516.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test516.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test516.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',30000.);
++md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,1.);
+Index: ../trunk-jpl/test/NightlyRun/test418.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test418.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test418.m	(revision 13664)
+@@ -1,5 +1,5 @@
+ %test partitioning, and partition averaging
+-md=triangle(model,'../Exp/Square.exp',30000);
++md=triangle(model(),'../Exp/Square.exp',30000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test3010.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test3010.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test402.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test402.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test402.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,4,1);
+Index: ../trunk-jpl/test/NightlyRun/test606.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test606.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test606.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test508.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test508.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',30000.);
++md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,4,1.1);
+Index: ../trunk-jpl/test/NightlyRun/test427.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test427.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md.initialization.vx(:)=0;
+Index: ../trunk-jpl/test/NightlyRun/test329.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test329.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test3002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test3002.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test512.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.py	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test512.py	(revision 13664)
+@@ -7,32 +7,42 @@
+ from EnumDefinitions import *
+ from solve import *
+ from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
+ 
+-md=triangle(model(),'../Exp/Pig.exp',20000.)
++md=triangle(model,'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ 
++
+ # control parameters
++
+ md.inversion.iscontrol=1
+ md.inversion.control_parameters=['FrictionCoefficient']
+-md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
+-md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.min_parameters=1*ones(md.mesh.numberofvertices,1)
++md.inversion.max_parameters=200*ones(md.mesh.numberofvertices,1)
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=numpy.hstack((103*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
+-md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
+-md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
+-md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
+-md.inversion.maxiter_per_step=2.*numpy.ones((md.inversion.nsteps,1))
+-md.inversion.step_threshold=2.99*numpy.ones((md.inversion.nsteps,1))
++md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)]
++md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2)
++ md.inversion.cost_functions_coefficients(:,2)=2.*10^-7
++md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1)
++md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1)
++md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1)
+ md.inversion.vx_obs=md.initialization.vx
+-md.inversion.vy_obs=md.initialization.vy
++ md.inversion.vy_obs=md.initialization.vy
+ 
++
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
++
+ # Fields and tolerances to track changes
++
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11]
+ field_values=[\
+Index: ../trunk-jpl/test/NightlyRun/test411.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test411.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test411.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test419.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test419.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test419.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/ad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/ad.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',100000);
++md=triangle(model(),'../Exp/Square.exp',100000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test3019.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test3019.m	(revision 13664)
+@@ -1,5 +1,5 @@
+ %test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup.
+-md=triangle(model,'../Exp/Square.exp',100000);
++md=triangle(model(),'../Exp/Square.exp',100000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test420.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test420.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test420.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test501.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test501.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test501.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',20000.);
++md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test403.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test403.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test403.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test607.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test607.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test607.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=extrude(md,2,1);
+Index: ../trunk-jpl/test/NightlyRun/test428.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test428.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test428.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test509.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test509.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test509.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',30000.);
++md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,1.);
+Index: ../trunk-jpl/test/NightlyRun/test3020.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test3020.m	(revision 13664)
+@@ -2,7 +2,7 @@
+ %the value of the scalar forward difference match a step-wise differential
+ 
+ %First configure
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test3003.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test3003.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test1106.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1106.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test1106.m	(revision 13664)
+@@ -6,7 +6,7 @@
+ 
+ for i=1:length(L_list),
+ 	L=L_list{i};  
+-	md=triangle(model,['../Exp/Square_' num2str(L) '.exp'],L/10); %size 3*L 
++	md=triangle(model(),['../Exp/Square_' num2str(L) '.exp'],L/10); %size 3*L 
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPC.par');
+ 	md.friction.coefficient=sqrt(md.constants.yts.*(1000+1000*sin(md.mesh.x*2*pi/L).*sin(md.mesh.y*2*pi/L)));
+Index: ../trunk-jpl/test/NightlyRun/test510.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test510.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test510.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',20000.);
++md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,2,1.);
+Index: ../trunk-jpl/test/NightlyRun/test412.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test412.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test412.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',300000);
++md=triangle(model(),'../Exp/Square.exp',300000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test502.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',20000).;
++md=triangle(model(),'../Exp/Pig.exp',20000).;
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,0.9);
+Index: ../trunk-jpl/test/NightlyRun/test404.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test404.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test608.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test608.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test608.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test429.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test429.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test3004.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test3004.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test511.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test511.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',10000.);
++md=triangle(model(),'../Exp/Pig.exp',10000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test430.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test430.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test413.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test413.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test413.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test601.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test601.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test601.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test503.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test503.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test503.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',20000.);
++md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,0.9);
+Index: ../trunk-jpl/test/NightlyRun/test422.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test422.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test405.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test405.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test405.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test609.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test609.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test609.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000);
+ md=meshconvert(md);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+Index: ../trunk-jpl/test/NightlyRun/test3005.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test3005.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test610.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test610.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test610.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test512.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test512.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',20000.);
++md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,1.);
+Index: ../trunk-jpl/test/NightlyRun/test431.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test431.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test431.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test414.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test414.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test414.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test602.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test602.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test602.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000);
+ md=meshconvert(md);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+Index: ../trunk-jpl/test/NightlyRun/test504.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test504.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test504.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',20000.);
++md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test423.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test423.m	(revision 13664)
+@@ -1,7 +1,7 @@
+ radius=1e6;
+ shelfextent=2e5;
+ 
+-md=roundmesh(model,radius,50000);
++md=roundmesh(model(),radius,50000);
+ %fix center node to 0,0
+ rad=sqrt(md.mesh.x.^2+md.mesh.y.^2);
+ pos=find(rad==min(rad));
+Index: ../trunk-jpl/test/NightlyRun/test406.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test406.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test406.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,4,1);
+Index: ../trunk-jpl/test/NightlyRun/test1501.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1501.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test1501.m	(revision 13664)
+@@ -1,6 +1,6 @@
+ printingflag = false;
+ 
+-md=triangle(model,'../Exp/Square.exp',350000);
++md=triangle(model(),'../Exp/Square.exp',350000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test3006.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test3006.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=meshconvert(md);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+Index: ../trunk-jpl/test/NightlyRun/test611.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test611.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test611.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test513.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test513.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',30000.);
++md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,1.);
+Index: ../trunk-jpl/test/NightlyRun/test432.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test432.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test432.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test415.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test415.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',170000);
++md=triangle(model(),'../Exp/Square.exp',170000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test3015.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test3015.m	(revision 13664)
+@@ -2,7 +2,7 @@
+ %the value of the scalar forward difference match a step-wise differential
+ 
+ %First configure
+-md=triangle(model,'../Exp/Square.exp',50000);
++md=triangle(model(),'../Exp/Square.exp',50000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test603.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test603.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test603.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=extrude(md,6,1);
+Index: ../trunk-jpl/test/NightlyRun/test505.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test505.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',30000.);
++md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,1.);
+Index: ../trunk-jpl/test/NightlyRun/test424.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test424.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test407.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test407.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test407.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,4,1);
+Index: ../trunk-jpl/test/NightlyRun/test1502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1502.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test1502.m	(revision 13664)
+@@ -1,6 +1,6 @@
+ printingflag = false;
+ 
+-md=triangle(model,'../Exp/Square.exp',450000);
++md=triangle(model(),'../Exp/Square.exp',450000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test3007.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test3007.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test1208.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1208.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test1208.m	(revision 13664)
+@@ -3,7 +3,7 @@
+ resolution=50000;
+ 
+ %To begin with the numerical model
+-md=triangle(model,'../Exp/SquareEISMINT750000.exp',resolution);
++md=triangle(model(),'../Exp/SquareEISMINT750000.exp',resolution);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/RoundSheetEISMINT.par');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test612.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test612.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test612.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000);
+ md=meshconvert(md);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+Index: ../trunk-jpl/test/NightlyRun/test416.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test416.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test416.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',170000);
++md=triangle(model(),'../Exp/Square.exp',170000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/ad_maxalloc.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad_maxalloc.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/ad_maxalloc.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',100000);
++md=triangle(model(),'../Exp/Square.exp',100000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test604.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test604.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test604.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test425.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test425.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test425.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test506.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test506.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',30000.);
++md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,2,1.);
+Index: ../trunk-jpl/test/NightlyRun/test408.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test408.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test408.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test1201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1201.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test1201.m	(revision 13664)
+@@ -5,7 +5,7 @@
+ 
+ for stabilization=1:3;
+ 	%The goal is to test the prognostic model
+-	md=bamg(model,'domain','../Exp/SquareEISMINT.exp','hmax',3000);
++	md=bamg(model(),'domain','../Exp/SquareEISMINT.exp','hmax',3000);
+ 	md=setmask(md,'all','');
+ 	md=parameterize(md,'../Par/SquareEISMINT.par');
+ 	md.surfaceforcings.mass_balance(:)=0;
+Index: ../trunk-jpl/test/NightlyRun/test1601.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1601.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test1601.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test3008.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test3008.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test613.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test613.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000);
+ md=meshconvert(md);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+Index: ../trunk-jpl/test/NightlyRun/test515.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test515.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Pig.exp',30000.);
++md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,1.);
+Index: ../trunk-jpl/test/NightlyRun/test417.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test417.m	(revision 13663)
++++ ../trunk-jpl/test/NightlyRun/test417.m	(revision 13664)
+@@ -1,4 +1,4 @@
+-md=triangle(model,'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13664-13665.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13664-13665.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13664-13665.diff	(revision 13980)
@@ -0,0 +1,57 @@
+Index: ../trunk-jpl/test/NightlyRun/test512.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.py	(revision 13664)
++++ ../trunk-jpl/test/NightlyRun/test512.py	(revision 13665)
+@@ -7,42 +7,32 @@
+ from EnumDefinitions import *
+ from solve import *
+ from MatlabFuncs import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from solve import *
+ 
+-md=triangle(model,'../Exp/Pig.exp',20000.)
++md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+ md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ 
+-
+ # control parameters
+-
+ md.inversion.iscontrol=1
+ md.inversion.control_parameters=['FrictionCoefficient']
+-md.inversion.min_parameters=1*ones(md.mesh.numberofvertices,1)
+-md.inversion.max_parameters=200*ones(md.mesh.numberofvertices,1)
++md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
+ md.inversion.nsteps=2
+-md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)]
+-md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2)
+- md.inversion.cost_functions_coefficients(:,2)=2.*10^-7
+-md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1)
+-md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1)
+-md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1)
++md.inversion.cost_functions=numpy.hstack((103*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
++md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
++md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=2.99*numpy.ones((md.inversion.nsteps,1))
+ md.inversion.vx_obs=md.initialization.vx
+- md.inversion.vy_obs=md.initialization.vy
++md.inversion.vy_obs=md.initialization.vy
+ 
+-
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+-
+ # Fields and tolerances to track changes
+-
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11]
+ field_values=[\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13665-13666.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13665-13666.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13665-13666.diff	(revision 13980)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/test/NightlyRun/test512.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.m	(revision 13665)
++++ ../trunk-jpl/test/NightlyRun/test512.m	(revision 13666)
+@@ -7,8 +7,8 @@
+ %control parameters
+ md.inversion.iscontrol=1;
+ md.inversion.control_parameters={'FrictionCoefficient'};
+-md.inversion.min_parameters=1*ones(md.mesh.numberofvertices,1);
+-md.inversion.max_parameters=200*ones(md.mesh.numberofvertices,1);
++md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
++md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+ md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13666-13667.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13666-13667.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13666-13667.diff	(revision 13980)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/test/NightlyRun/test502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.m	(revision 13666)
++++ ../trunk-jpl/test/NightlyRun/test502.m	(revision 13667)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Pig.exp',20000).;
++md=triangle(model(),'../Exp/Pig.exp',20000);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,0.9);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13667-13668.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13667-13668.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13667-13668.diff	(revision 13980)
@@ -0,0 +1,363 @@
+Index: ../trunk-jpl/test/NightlyRun/test606.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test606.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test606.py	(revision 13668)
+@@ -0,0 +1,24 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/79North.exp',10000.)
++md=setmask(md,'../Exp/79NorthShelf.exp','')
++md=parameterize(md,'../Par/79North.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,BedSlopeSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['BedSlopeX','BedSlopeY']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results['BedSlopeSolution'][1]['BedSlopeX'],\
++	md.results['BedSlopeSolution'][1]['BedSlopeY'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test605.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test605.m	(revision 13667)
++++ ../trunk-jpl/test/NightlyRun/test605.m	(revision 13668)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=extrude(md,5,1.5);
+Index: ../trunk-jpl/test/NightlyRun/test601.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test601.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test601.py	(revision 13668)
+@@ -0,0 +1,22 @@
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/79North.exp',10000.)
++md=setmask(md,'../Exp/79NorthShelf.exp','')
++md=parameterize(md,'../Par/79North.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,PrognosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['PrognosticSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test606.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test606.m	(revision 13667)
++++ ../trunk-jpl/test/NightlyRun/test606.m	(revision 13668)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test607.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test607.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test607.py	(revision 13668)
+@@ -0,0 +1,25 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/79North.exp',10000.)
++md=setmask(md,'../Exp/79NorthShelf.exp','')
++md=parameterize(md,'../Par/79North.py')
++md.extrude(2,1.)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,BedSlopeSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['BedSlopeX','BedSlopeY']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results['BedSlopeSolution'][1]['BedSlopeX'],\
++	md.results['BedSlopeSolution'][1]['BedSlopeY'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test602.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test602.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test602.py	(revision 13668)
+@@ -0,0 +1,27 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from meshconvert import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/79North.exp',10000.)
++md=meshconvert(md)
++md=setmask(md,'../Exp/79NorthShelf.exp','')
++md=parameterize(md,'../Par/79North.py')
++md=setflowequation(md,'macayeal','all')
++md.prognostic.stabilization=3
++md.prognostic.spcthickness=md.geometry.thickness
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,PrognosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['PrognosticSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test607.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test607.m	(revision 13667)
++++ ../trunk-jpl/test/NightlyRun/test607.m	(revision 13668)
+@@ -1,7 +1,7 @@
+-md=triangle(model(),'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=extrude(md,2,1);
++md=extrude(md,2,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BedSlopeSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test608.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test608.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test608.py	(revision 13668)
+@@ -0,0 +1,23 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/79North.exp',10000.)
++md=setmask(md,'../Exp/79NorthShelf.exp','')
++md=parameterize(md,'../Par/79North.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,BalancethicknessSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['BalancethicknessSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test608.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test608.m	(revision 13667)
++++ ../trunk-jpl/test/NightlyRun/test608.m	(revision 13668)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test603.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test603.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test603.py	(revision 13668)
+@@ -0,0 +1,24 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/79North.exp',10000.)
++md=setmask(md,'../Exp/79NorthShelf.exp','')
++md=parameterize(md,'../Par/79North.py')
++md.extrude(6,1.)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,PrognosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['PrognosticSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test601.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test601.m	(revision 13667)
++++ ../trunk-jpl/test/NightlyRun/test601.m	(revision 13668)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test609.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test609.m	(revision 13667)
++++ ../trunk-jpl/test/NightlyRun/test609.m	(revision 13668)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=meshconvert(md);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+Index: ../trunk-jpl/test/NightlyRun/test609.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test609.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test609.py	(revision 13668)
+@@ -0,0 +1,26 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from meshconvert import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/79North.exp',10000.)
++md=meshconvert(md)
++md=setmask(md,'../Exp/79NorthShelf.exp','')
++md=parameterize(md,'../Par/79North.py')
++md=setflowequation(md,'macayeal','all')
++md.balancethickness.stabilization=3
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,BalancethicknessSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['BalancethicknessSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test604.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test604.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test604.py	(revision 13668)
+@@ -0,0 +1,24 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/79North.exp',10000.)
++md=setmask(md,'../Exp/79NorthShelf.exp','')
++md=parameterize(md,'../Par/79North.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,SurfaceSlopeSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['SurfaceSlopeX','SurfaceSlopeY']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results['SurfaceSlopeSolution'][1]['SurfaceSlopeX'],\
++	md.results['SurfaceSlopeSolution'][1]['SurfaceSlopeY'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test602.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test602.m	(revision 13667)
++++ ../trunk-jpl/test/NightlyRun/test602.m	(revision 13668)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=meshconvert(md);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+Index: ../trunk-jpl/test/NightlyRun/test603.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test603.m	(revision 13667)
++++ ../trunk-jpl/test/NightlyRun/test603.m	(revision 13668)
+@@ -1,7 +1,7 @@
+-md=triangle(model(),'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=extrude(md,6,1);
++md=extrude(md,6,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,PrognosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test605.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test605.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test605.py	(revision 13668)
+@@ -0,0 +1,25 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/79North.exp',10000.)
++md=setmask(md,'../Exp/79NorthShelf.exp','')
++md=parameterize(md,'../Par/79North.py')
++md.extrude(5,1.5)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,SurfaceSlopeSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['SurfaceSlopeX','SurfaceSlopeY']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results['SurfaceSlopeSolution'][1]['SurfaceSlopeX'],\
++	md.results['SurfaceSlopeSolution'][1]['SurfaceSlopeY'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test604.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test604.m	(revision 13667)
++++ ../trunk-jpl/test/NightlyRun/test604.m	(revision 13668)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13668-13669.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13668-13669.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13668-13669.diff	(revision 13980)
@@ -0,0 +1,322 @@
+Index: ../trunk-jpl/test/NightlyRun/test610.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test610.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test610.py	(revision 13669)
+@@ -0,0 +1,24 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/79North.exp',10000.)
++md=setmask(md,'../Exp/79NorthShelf.exp','')
++md=parameterize(md,'../Par/79North.py')
++md.extrude(3,1.)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,BalancethicknessSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Thickness']
++field_tolerances=[1e-13]
++field_values=[\
++	md.results['BalancethicknessSolution'][1]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test611.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test611.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test611.py	(revision 13669)
+@@ -0,0 +1,41 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/79North.exp',10000.)
++md=setmask(md,'../Exp/79NorthShelf.exp','')
++md=parameterize(md,'../Par/79North.py')
++md=setflowequation(md,'macayeal','all')
++
++#control parameters
++md.inversion.nsteps=2
++md.prognostic.stabilization=1
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['BalancethicknessThickeningRate']
++md.inversion.thickness_obs=md.geometry.thickness
++md.inversion.min_parameters=-50.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=50.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.cost_functions=201*numpy.ones((md.inversion.nsteps,1))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.gradient_scaling=10./md.constants.yts*numpy.ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=4*numpy.ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=0.99*numpy.ones((md.inversion.nsteps,1))
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,BalancethicknessSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Gradient','Misfits','BalancethicknessThickeningRate','Thickness']
++field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
++field_values=[\
++	md.results['BalancethicknessSolution'][1]['Gradient1'],\
++	md.results['BalancethicknessSolution'][1]['J'],\
++	md.results['BalancethicknessSolution'][1]['BalancethicknessThickeningRate'],\
++	md.results['BalancethicknessSolution'][1]['Thickness']
++]
+Index: ../trunk-jpl/test/NightlyRun/test1401.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1401.m	(revision 13668)
++++ ../trunk-jpl/test/NightlyRun/test1401.m	(revision 13669)
+@@ -71,8 +71,8 @@
+ y2=md.mesh.y;
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'xyams' 'yyams' 'xbamg' 'ybamg'};
+-field_tolerances={1e-13 1e-13 1e-13 1e-13};
++field_names     ={'xyams','yyams','xbamg','ybamg'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	x1, y1,...
+ 	x2, y2,...
+Index: ../trunk-jpl/test/NightlyRun/test511.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.m	(revision 13668)
++++ ../trunk-jpl/test/NightlyRun/test511.m	(revision 13669)
+@@ -26,7 +26,7 @@
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'MaterialsRheologyB' 'Pressure' 'Vel' 'Vx' 'Vy'};
++field_names     ={'Gradient','Misfits','MaterialsRheologyB','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-11,1e-12,1e-12,1e-09,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+Index: ../trunk-jpl/test/NightlyRun/test612.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test612.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test612.py	(revision 13669)
+@@ -0,0 +1,43 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from meshconvert import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/79North.exp',10000.)
++md=meshconvert(md)
++md=setmask(md,'../Exp/79NorthShelf.exp','')
++md=parameterize(md,'../Par/79North.py')
++md=setflowequation(md,'macayeal','all')
++
++#control parameters
++md.inversion.nsteps=2
++md.balancethickness.stabilization=3
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['BalancethicknessThickeningRate']
++md.inversion.thickness_obs=md.geometry.thickness
++md.inversion.min_parameters=-50.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=50.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.cost_functions=201*numpy.ones((md.inversion.nsteps,1))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.gradient_scaling=10./md.constants.yts*numpy.ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=4*numpy.ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=0.99*numpy.ones((md.inversion.nsteps,1))
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,BalancethicknessSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Gradient','Misfits','BalancethicknessThickeningRate','Thickness']
++field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
++field_values=[\
++	md.results['BalancethicknessSolution'][1]['Gradient1'],\
++	md.results['BalancethicknessSolution'][1]['J'],\
++	md.results['BalancethicknessSolution'][1]['BalancethicknessThickeningRate'],\
++	md.results['BalancethicknessSolution'][1]['Thickness']
++]
+Index: ../trunk-jpl/test/NightlyRun/test1402.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1402.m	(revision 13668)
++++ ../trunk-jpl/test/NightlyRun/test1402.m	(revision 13669)
+@@ -101,8 +101,8 @@
+ y2=md.mesh.y;
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'xyams' 'yyams' 'xbamg' 'ybamg'};
+-field_tolerances={1e-13 1e-13 1e-13 1e-13};
++field_names     ={'xyams','yyams','xbamg','ybamg'};
++field_tolerances={1e-13,1e-13,1e-13,1e-13};
+ field_values={...
+ 	x1, y1,...
+ 	x2, y2,...
+Index: ../trunk-jpl/test/NightlyRun/test610.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test610.m	(revision 13668)
++++ ../trunk-jpl/test/NightlyRun/test610.m	(revision 13669)
+@@ -1,7 +1,7 @@
+-md=triangle(model(),'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BalancethicknessSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test611.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test611.m	(revision 13668)
++++ ../trunk-jpl/test/NightlyRun/test611.m	(revision 13669)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+ md=setflowequation(md,'macayeal','all');
+@@ -9,11 +9,11 @@
+ md.inversion.iscontrol=1;
+ md.inversion.control_parameters={'BalancethicknessThickeningRate'};
+ md.inversion.thickness_obs=md.geometry.thickness;
+-md.inversion.min_parameters=-50*ones(md.mesh.numberofvertices,1);
+-md.inversion.max_parameters=50*ones(md.mesh.numberofvertices,1);
++md.inversion.min_parameters=-50.*ones(md.mesh.numberofvertices,1);
++md.inversion.max_parameters=50.*ones(md.mesh.numberofvertices,1);
+ md.inversion.cost_functions=201*ones(md.inversion.nsteps,1);
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+-md.inversion.gradient_scaling=10/md.constants.yts*ones(md.inversion.nsteps,1);
++md.inversion.gradient_scaling=10./md.constants.yts*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+ 
+@@ -21,7 +21,7 @@
+ md=solve(md,BalancethicknessSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'BalancethicknessThickeningRate' 'Thickness'};
++field_names     ={'Gradient','Misfits','BalancethicknessThickeningRate','Thickness'};
+ field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+ 	(md.results.BalancethicknessSolution.Gradient1),...
+Index: ../trunk-jpl/test/NightlyRun/test415.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.m	(revision 13668)
++++ ../trunk-jpl/test/NightlyRun/test415.m	(revision 13669)
+@@ -22,7 +22,7 @@
+ md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'FrictionCoefficient' 'Pressure' 'Vel' 'Vx' 'Vy' 'Vz' 'Temperature' 'BasalforcingsMeltingRate'};
++field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate'};
+ field_tolerances={1e-10,1e-10,1e-11,1e-13,1e-10,1e-09,1e-10,1e-8,1e-09,1e-6};
+ field_values={...
+ 	(md.results.SteadystateSolution.Gradient1),...
+Index: ../trunk-jpl/test/NightlyRun/test612.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test612.m	(revision 13668)
++++ ../trunk-jpl/test/NightlyRun/test612.m	(revision 13669)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=meshconvert(md);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+@@ -10,11 +10,11 @@
+ md.inversion.iscontrol=1;
+ md.inversion.control_parameters={'BalancethicknessThickeningRate'};
+ md.inversion.thickness_obs=md.geometry.thickness;
+-md.inversion.min_parameters=-50*ones(md.mesh.numberofvertices,1);
+-md.inversion.max_parameters=50*ones(md.mesh.numberofvertices,1);
++md.inversion.min_parameters=-50.*ones(md.mesh.numberofvertices,1);
++md.inversion.max_parameters=50.*ones(md.mesh.numberofvertices,1);
+ md.inversion.cost_functions=201*ones(md.inversion.nsteps,1);
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+-md.inversion.gradient_scaling=10/md.constants.yts*ones(md.inversion.nsteps,1);
++md.inversion.gradient_scaling=10./md.constants.yts*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.99*ones(md.inversion.nsteps,1);
+ 
+@@ -22,7 +22,7 @@
+ md=solve(md,BalancethicknessSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'BalancethicknessThickeningRate' 'Thickness'};
++field_names     ={'Gradient','Misfits','BalancethicknessThickeningRate','Thickness'};
+ field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+ 	(md.results.BalancethicknessSolution.Gradient1),...
+Index: ../trunk-jpl/test/NightlyRun/test416.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test416.m	(revision 13668)
++++ ../trunk-jpl/test/NightlyRun/test416.m	(revision 13669)
+@@ -22,7 +22,7 @@
+ md=solve(md,SteadystateSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'FrictionCoefficient' 'Pressure' 'Vel' 'Vx' 'Vy' 'Vz' 'Temperature' 'BasalforcingsMeltingRate'};
++field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate'};
+ field_tolerances={1e-08,1e-07,1e-08,1e-08,1e-08,1e-08,1e-08,1e-07,1e-08,1e-05};
+ field_values={...
+ 	(md.results.SteadystateSolution.Gradient1),...
+Index: ../trunk-jpl/test/NightlyRun/test613.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.m	(revision 13668)
++++ ../trunk-jpl/test/NightlyRun/test613.m	(revision 13669)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/79North.exp',10000);
++md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=meshconvert(md);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+@@ -14,11 +14,11 @@
+ md.inversion.iscontrol=1;
+ md.inversion.thickness_obs=md.geometry.thickness;
+ md.inversion.nsteps=2;
+-md.inversion.control_parameters={'Vx' 'Vy'};
++md.inversion.control_parameters={'Vx','Vy'};
+ md.balancethickness.stabilization=1;
+-md.inversion.gradient_scaling=[10/md.constants.yts*ones(md.inversion.nsteps,1) 10/md.constants.yts*ones(md.inversion.nsteps,1)];
+-md.inversion.min_parameters=[-2000*ones(md.mesh.numberofvertices,1) -2000*ones(md.mesh.numberofvertices,1)];
+-md.inversion.max_parameters=[+2000*ones(md.mesh.numberofvertices,1) +2000*ones(md.mesh.numberofvertices,1)];
++md.inversion.gradient_scaling=[10./md.constants.yts*ones(md.inversion.nsteps,1) 10./md.constants.yts*ones(md.inversion.nsteps,1)];
++md.inversion.min_parameters=[-2000.*ones(md.mesh.numberofvertices,1) -2000.*ones(md.mesh.numberofvertices,1)];
++md.inversion.max_parameters=[+2000.*ones(md.mesh.numberofvertices,1) +2000.*ones(md.mesh.numberofvertices,1)];
+ md.inversion.cost_functions=201*ones(md.inversion.nsteps,1);
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
+ md.inversion.maxiter_per_step=4*ones(md.inversion.nsteps,1);
+@@ -29,7 +29,7 @@
+ md=solve(md,BalancethicknessSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient1' 'Gradient2' 'Misfits' 'Vx' 'Vy' 'Thickness'};
++field_names     ={'Gradient1','Gradient2','Misfits','Vx','Vy','Thickness'};
+ field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+ 	(md.results.BalancethicknessSolution.Gradient1),...
+Index: ../trunk-jpl/test/NightlyRun/test272.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.m	(revision 13668)
++++ ../trunk-jpl/test/NightlyRun/test272.m	(revision 13669)
+@@ -25,7 +25,7 @@
+ md=solve(md,DiagnosticSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+-field_names     ={'Gradient' 'Misfits' 'MaterialsRheologyZbar' 'Pressure' 'Vel' 'Vx' 'Vy'};
++field_names     ={'Gradient','Misfits','MaterialsRheologyZbar','Pressure','Vel','Vx','Vy'};
+ field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+    (md.results.DiagnosticSolution.Gradient1),...
Index: /issm/oecreview/Archive/13393-13976/ISSM-13669-13670.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13669-13670.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13669-13670.diff	(revision 13980)
@@ -0,0 +1,1529 @@
+Index: ../trunk-jpl/test/NightlyRun/test320.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test320.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test320.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test401.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test401.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test401.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test222.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test222.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test222.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test303.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test303.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test303.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'hutter','../Exp/SquareHalfRight.exp','fill','macayeal');
+Index: ../trunk-jpl/test/NightlyRun/test205.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test205.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test205.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test107.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test107.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test107.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',350000);
++md=triangle(model(),'../Exp/Square.exp',350000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md.initialization.vx(:)=0;
+Index: ../trunk-jpl/test/NightlyRun/test328.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test328.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test328.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test409.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test409.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test409.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test3001.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test3001.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',50000);
++md=triangle(model(),'../Exp/Square.exp',50000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test1202.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1202.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test1202.m	(revision 13670)
+@@ -3,7 +3,7 @@
+ 
+ %tests 3 and 4: using Glen's flow law
+ md=model();
+-md=triangle(md,'../Exp/SquareEISMINT.exp',3550);
++md=triangle(md,'../Exp/SquareEISMINT.exp',3550.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareEISMINT.par');
+ md=setflowequation(md,'macayeal','all'); %MacAyeal's model and 2d
+Index: ../trunk-jpl/test/NightlyRun/test1602.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1602.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test1602.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test3009.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test3009.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test410.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test410.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test312.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test312.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test312.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test231.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test231.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test231.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',350000);
++md=triangle(model(),'../Exp/Square.exp',350000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test214.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test214.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test116.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test116.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test116.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ %Add boundary conditions on thickness on the border
+Index: ../trunk-jpl/test/NightlyRun/test418.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test418.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test418.m	(revision 13670)
+@@ -1,5 +1,5 @@
+ %test partitioning, and partition averaging
+-md=triangle(model(),'../Exp/Square.exp',30000);
++md=triangle(model(),'../Exp/Square.exp',30000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test3010.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test3010.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test321.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test321.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test321.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test402.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test402.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test402.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,4,1);
+Index: ../trunk-jpl/test/NightlyRun/test223.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test223.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test223.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test304.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test304.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test304.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test206.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test206.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test206.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test108.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test108.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test108.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test427.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test427.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md.initialization.vx(:)=0;
+Index: ../trunk-jpl/test/NightlyRun/test329.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test329.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test1301.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1301.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test1301.m	(revision 13670)
+@@ -5,7 +5,7 @@
+ printingflag=false;
+ 
+ md=model();
+-md=triangle(md,'../Exp/Square.exp',100000);
++md=triangle(md,'../Exp/Square.exp',100000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test3002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test3002.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test1203.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1203.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test1203.m	(revision 13670)
+@@ -3,7 +3,7 @@
+ 
+ %test 5 and 6 : 
+ md=model();
+-md=triangle(md,'../Exp/SquareEISMINT.exp',5100); %test3
++md=triangle(md,'../Exp/SquareEISMINT.exp',5100.); %test3
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareEISMINT.par');
+ md=setflowequation(md,'macayeal','all'); %MacAyeal's model and 2d
+Index: ../trunk-jpl/test/NightlyRun/test411.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test411.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test411.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test313.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test313.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test313.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test232.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test232.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test215.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test215.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test117.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test117.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test117.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test274.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test274.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000);
++md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000.);
+ md=meshprocessrifts(md,'../Exp/Square.exp');
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+Index: ../trunk-jpl/test/NightlyRun/test419.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test419.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test419.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/ad.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/ad.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',100000);
++md=triangle(model(),'../Exp/Square.exp',100000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test3019.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test3019.m	(revision 13670)
+@@ -1,5 +1,5 @@
+ %test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup.
+-md=triangle(model(),'../Exp/Square.exp',100000);
++md=triangle(model(),'../Exp/Square.exp',100000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test101.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',50000);
++md=triangle(model(),'../Exp/Square.exp',50000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test420.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test420.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test420.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test403.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test403.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test403.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test322.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test322.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test305.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test305.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test305.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,5,2);
+Index: ../trunk-jpl/test/NightlyRun/test224.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test224.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test207.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test207.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test109.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test109.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test109.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test428.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test428.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test428.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test3020.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test3020.m	(revision 13670)
+@@ -2,7 +2,7 @@
+ %the value of the scalar forward difference match a step-wise differential
+ 
+ %First configure
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test3003.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test3003.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test1302.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1302.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test1302.m	(revision 13670)
+@@ -4,7 +4,7 @@
+ printingflag=false;
+ 
+ md=model();
+-md=triangle(md,'../Exp/Square.exp',100000);
++md=triangle(md,'../Exp/Square.exp',100000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+ md=extrude(md,30,1);   %NB: the more one extrudes, the better (10-> relative~0.35%, 20->0.1%, 30->0.05%)
+Index: ../trunk-jpl/test/NightlyRun/test1204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1204.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test1204.m	(revision 13670)
+@@ -3,7 +3,7 @@
+ 
+ %tests 3 and 4: using Glen's flow law
+ md=model();
+-md=triangle(md,'../Exp/SquareEISMINT.exp',3550);
++md=triangle(md,'../Exp/SquareEISMINT.exp',3550.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareEISMINT.par');
+ md=setflowequation(md,'macayeal','all'); %MacAyeal's model and 2d
+Index: ../trunk-jpl/test/NightlyRun/test1106.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1106.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test1106.m	(revision 13670)
+@@ -6,7 +6,7 @@
+ 
+ for i=1:length(L_list),
+ 	L=L_list{i};  
+-	md=triangle(model(),['../Exp/Square_' num2str(L) '.exp'],L/10); %size 3*L 
++	md=triangle(model(),['../Exp/Square_' num2str(L) '.exp'],L/10.); %size 3*L 
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPC.par');
+ 	md.friction.coefficient=sqrt(md.constants.yts.*(1000+1000*sin(md.mesh.x*2*pi/L).*sin(md.mesh.y*2*pi/L)));
+Index: ../trunk-jpl/test/NightlyRun/test110.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test110.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test110.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test412.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test412.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test412.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',300000);
++md=triangle(model(),'../Exp/Square.exp',300000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test314.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test314.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test314.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'hutter','all');
+Index: ../trunk-jpl/test/NightlyRun/test233.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test233.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test233.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test216.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test216.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000);
++md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000.);
+ md=meshprocessrifts(md,'../Exp/Square.exp');
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+Index: ../trunk-jpl/test/NightlyRun/test118.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test118.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test118.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=meshconvert(md);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+Index: ../trunk-jpl/test/NightlyRun/test102.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test102.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test102.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test502.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Pig.exp',20000);
++md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+ md=extrude(md,3,0.9);
+Index: ../trunk-jpl/test/NightlyRun/test404.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test404.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test323.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test323.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test323.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test225.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test225.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md.geometry.bed=md.geometry.bed+50.; md.geometry.surface=md.geometry.surface+50.;
+Index: ../trunk-jpl/test/NightlyRun/test306.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test306.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test306.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,4,2);
+Index: ../trunk-jpl/test/NightlyRun/test208.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test208.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test208.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test429.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test429.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test1303.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1303.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test1303.m	(revision 13670)
+@@ -5,7 +5,7 @@
+ printingflag=false;
+ 
+ md=model();
+-md=triangle(md,'../Exp/Square.exp',100000);
++md=triangle(md,'../Exp/Square.exp',100000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+ md=extrude(md,11,2);
+Index: ../trunk-jpl/test/NightlyRun/test3004.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test3004.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test111.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test111.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test111.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test430.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test430.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test413.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test413.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test413.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test234.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test234.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test234.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test315.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test315.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test315.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,5,1.2);
+Index: ../trunk-jpl/test/NightlyRun/test217.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test217.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test201.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test201.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test120.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test120.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test103.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test103.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test422.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test422.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test324.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test324.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,5,1.2);
+Index: ../trunk-jpl/test/NightlyRun/test405.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test405.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test405.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test226.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test226.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test226.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test307.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test307.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test307.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test209.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test209.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test1304.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1304.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test1304.m	(revision 13670)
+@@ -5,7 +5,7 @@
+ printingflag=false;
+ 
+ md=model();
+-md=triangle(md,'../Exp/Square.exp',100000);
++md=triangle(md,'../Exp/Square.exp',100000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+ md=extrude(md,11,1);
+Index: ../trunk-jpl/test/NightlyRun/test3005.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test3005.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test210.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test210.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test210.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test112.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test112.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test112.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test431.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test431.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test431.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test414.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test414.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test414.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test235.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test235.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test235.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test316.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test316.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test316.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test202.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test202.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test202.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test121.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test121.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test104.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test325.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test325.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test325.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test406.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test406.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test406.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,4,1);
+Index: ../trunk-jpl/test/NightlyRun/test227.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test227.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test308.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test308.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test308.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test1501.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1501.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test1501.m	(revision 13670)
+@@ -1,6 +1,6 @@
+ printingflag = false;
+ 
+-md=triangle(model(),'../Exp/Square.exp',350000);
++md=triangle(model(),'../Exp/Square.exp',350000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test3006.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test3006.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=meshconvert(md);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+Index: ../trunk-jpl/test/NightlyRun/test211.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test211.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test211.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test113.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test113.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test113.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test432.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test432.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test432.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test270.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test270.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md.materials=matdamageice();
+Index: ../trunk-jpl/test/NightlyRun/test415.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test415.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',170000);
++md=triangle(model(),'../Exp/Square.exp',170000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test236.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test236.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test236.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ 
+ % Use of ispdd and isdelta18o methods
+Index: ../trunk-jpl/test/NightlyRun/test317.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test317.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test317.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test219.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test219.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test1110.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1110.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test1110.m	(revision 13670)
+@@ -8,7 +8,7 @@
+ 	ny=30;
+ 	md=model();
+ 	md=squaremesh(md,L,L,nx,ny);
+-	%md=triangle(md,'../Exp/SquareISMIP.exp',5500);
++	%md=triangle(md,'../Exp/SquareISMIP.exp',5500.);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPF.par');
+ 	md=extrude(md,4,1);
+Index: ../trunk-jpl/test/NightlyRun/test3015.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test3015.m	(revision 13670)
+@@ -2,7 +2,7 @@
+ %the value of the scalar forward difference match a step-wise differential
+ 
+ %First configure
+-md=triangle(model(),'../Exp/Square.exp',50000);
++md=triangle(model(),'../Exp/Square.exp',50000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test220.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test220.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',120000);
++md=triangle(model(),'../Exp/Square.exp',120000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,2,1);
+Index: ../trunk-jpl/test/NightlyRun/test301.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test301.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test301.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test203.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test203.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test203.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test122.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test122.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test122.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test105.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test105.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test105.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test424.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test424.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test407.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test407.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test407.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,4,1);
+Index: ../trunk-jpl/test/NightlyRun/test326.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test326.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test309.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test309.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test309.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test228.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test228.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test228.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test1502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1502.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test1502.m	(revision 13670)
+@@ -1,6 +1,6 @@
+ printingflag = false;
+ 
+-md=triangle(model(),'../Exp/Square.exp',450000);
++md=triangle(model(),'../Exp/Square.exp',450000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test3007.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test3007.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test310.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test310.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test310.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=meshconvert(md);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+Index: ../trunk-jpl/test/NightlyRun/test212.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test212.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test114.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test114.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test114.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test416.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test416.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test416.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',170000);
++md=triangle(model(),'../Exp/Square.exp',170000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test318.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test318.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test318.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,4,1);
+Index: ../trunk-jpl/test/NightlyRun/test237.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test237.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',600000);%180000
++md=triangle(model(),'../Exp/Square.exp',600000.);%180000
+ md=setmask(md,'all','');
+ 
+ % Use of ispdd and isdelta18o methods
+Index: ../trunk-jpl/test/NightlyRun/test302.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test302.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test302.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'hutter','all');
+Index: ../trunk-jpl/test/NightlyRun/ad_maxalloc.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/ad_maxalloc.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/ad_maxalloc.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',100000);
++md=triangle(model(),'../Exp/Square.exp',100000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test221.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test221.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',120000);
++md=triangle(model(),'../Exp/Square.exp',120000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,2,1);
+Index: ../trunk-jpl/test/NightlyRun/test204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test204.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,2);
+Index: ../trunk-jpl/test/NightlyRun/test106.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test106.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test106.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=meshconvert(md);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+Index: ../trunk-jpl/test/NightlyRun/test425.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test425.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test425.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test408.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test408.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test408.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test327.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test327.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test229.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test229.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test229.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test1601.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1601.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test1601.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test3008.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test3008.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',180000);
++md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test311.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test311.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test311.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test230.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test230.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test230.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',350000);
++md=triangle(model(),'../Exp/Square.exp',350000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test213.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test213.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=extrude(md,3,1);
+Index: ../trunk-jpl/test/NightlyRun/test115.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test115.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test115.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=extrude(md,5,1);
+Index: ../trunk-jpl/test/NightlyRun/test272.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test272.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md.materials=matdamageice();
+Index: ../trunk-jpl/test/NightlyRun/test417.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test417.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test417.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',150000);
++md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test319.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test319.m	(revision 13669)
++++ ../trunk-jpl/test/NightlyRun/test319.m	(revision 13670)
+@@ -1,4 +1,4 @@
+-md=triangle(model(),'../Exp/Square.exp',200000);
++md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13670-13671.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13670-13671.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13670-13671.diff	(revision 13980)
@@ -0,0 +1,1534 @@
+Index: ../trunk-jpl/test/NightlyRun/test320.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test320.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test320.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ 
+ %control parameters
+Index: ../trunk-jpl/test/NightlyRun/test205.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test205.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test205.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal','coupling','penalties');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test107.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test107.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test107.m	(revision 13671)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+-md=extrude(md,5,3);
++md=extrude(md,5,3.);
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,PrognosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test605.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test605.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test605.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=extrude(md,5,1.5);
++md=extrude(md,5,1.5.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,SurfaceSlopeSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test507.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test507.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test507.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,2,1.);
++md=extrude(md,2,1..);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 13671)
+@@ -9,7 +9,7 @@
+ md.geometry.thickness(:)=1000;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md.surfaceforcings.mass_balance(:)=100;
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ 
+ md.transient.isdiagnostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test409.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test409.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test409.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn','coupling','penalties');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test1104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1104.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1104.m	(revision 13671)
+@@ -12,7 +12,7 @@
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPB.par');
+-	md=extrude(md,10,1);
++	md=extrude(md,10,1.);
+ 	md=setflowequation(md,'pattyn','all');
+ 
+ 	%Create dirichlet on the bed only
+Index: ../trunk-jpl/test/NightlyRun/test1602.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1602.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1602.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,5,1);
++md=extrude(md,5,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.diagnostic.spcvx(find(md.mesh.y>0))=NaN;
+ md.initialization.vx(:)=0;
+Index: ../trunk-jpl/test/NightlyRun/test3009.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test3009.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isdiagnostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test410.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test410.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+Index: ../trunk-jpl/test/NightlyRun/test312.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test312.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test312.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.timestepping.time_step=0.;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test231.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test231.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test231.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',350000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+Index: ../trunk-jpl/test/NightlyRun/test214.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test214.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ 
+ %control parameters
+Index: ../trunk-jpl/test/NightlyRun/test516.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test516.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test516.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1.);
++md=extrude(md,3,1..);
+ md=setflowequation(md,'pattyn','all');
+ md.thermal.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test321.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test321.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test321.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ 
+ %control parameters
+Index: ../trunk-jpl/test/NightlyRun/test402.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test402.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test402.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,4,1);
++md=extrude(md,4,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test304.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test304.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test304.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test206.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test206.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test206.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.timestepping.time_step=0;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test108.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test108.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test108.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.timestepping.time_step=0;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test508.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test508.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,4,1.1);
++md=extrude(md,4,1.1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+Index: ../trunk-jpl/test/NightlyRun/test427.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test427.m	(revision 13671)
+@@ -9,7 +9,7 @@
+ md.geometry.thickness(:)=1300;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md=setflowequation(md,'macayeal','all');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ 
+ md.surfaceforcings.mass_balance(:)=-150;
+ md.transient.isdiagnostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test329.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test329.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.surfaceforcings.issmbgradients=1;
+ md.surfaceforcings.smb_pos_max=5000. - 0.00005*md.mesh.x + 0.0001*md.mesh.y;
+Index: ../trunk-jpl/test/NightlyRun/test1301.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1301.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1301.m	(revision 13671)
+@@ -8,7 +8,7 @@
+ md=triangle(md,'../Exp/Square.exp',100000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'Pattyn','all');
+ 
+ %Some conditions specific to melting test
+Index: ../trunk-jpl/test/NightlyRun/test3002.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test3002.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.autodiff.isautodiff=true;
+Index: ../trunk-jpl/test/NightlyRun/test1105.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1105.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1105.m	(revision 13671)
+@@ -15,7 +15,7 @@
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPC.par');
+-	md=extrude(md,10,1);
++	md=extrude(md,10,1.);
+ 
+ 	md=setflowequation(md,'pattyn','all'); 
+ 
+Index: ../trunk-jpl/test/NightlyRun/test411.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test411.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test411.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+Index: ../trunk-jpl/test/NightlyRun/test313.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test313.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test313.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.verbose=verbose('convergence',true,'solution',true);
+Index: ../trunk-jpl/test/NightlyRun/test232.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test232.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.thermal.spctemperature=[md.thermal.spctemperature, md.thermal.spctemperature+5., md.thermal.spctemperature+10., md.thermal.spctemperature+15.; 1.5 2.5 3.5 4.];
+Index: ../trunk-jpl/test/NightlyRun/test215.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test215.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'stokes','all');
+ 
+ %control parameters
+Index: ../trunk-jpl/test/NightlyRun/test117.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test117.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test117.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,5,1);
++md=extrude(md,5,1.);
+ %Add boundary conditions on thickness on the border
+ pos=find(md.mesh.vertexonboundary);
+ md.balancethickness.spcthickness(pos)=md.geometry.thickness(pos);
+Index: ../trunk-jpl/test/NightlyRun/test419.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test419.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test419.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,5,1);
++md=extrude(md,5,1.);
+ md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test403.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test403.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test403.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,5,1);
++md=extrude(md,5,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test322.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test322.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'stokes','all');
+ 
+ %control parameters
+Index: ../trunk-jpl/test/NightlyRun/test305.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test305.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test305.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,5,2);
++md=extrude(md,5,2.);
+ md=setflowequation(md,'hutter','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test224.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test224.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.prognostic.hydrostatic_adjustment='Incremental';
+Index: ../trunk-jpl/test/NightlyRun/test207.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test207.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isdiagnostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test109.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test109.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test109.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isdiagnostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test607.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test607.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test607.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=extrude(md,2,1.);
++md=extrude(md,2,1..);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BedSlopeSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test509.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test509.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test509.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1.);
++md=extrude(md,3,1..);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+Index: ../trunk-jpl/test/NightlyRun/test3003.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test3003.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.requested_outputs=StressTensorEnum();
+Index: ../trunk-jpl/test/NightlyRun/test1302.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1302.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1302.m	(revision 13671)
+@@ -7,7 +7,7 @@
+ md=triangle(md,'../Exp/Square.exp',100000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+-md=extrude(md,30,1);   %NB: the more one extrudes, the better (10-> relative~0.35%, 20->0.1%, 30->0.05%)
++md=extrude(md,30,1.);   %NB: the more one extrudes, the better (10-> relative~0.35%, 20->0.1%, 30->0.05%)
+ md=setflowequation(md,'Pattyn','all'); 
+ 
+ %Thermal boundary conditions
+Index: ../trunk-jpl/test/NightlyRun/test1106.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1106.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1106.m	(revision 13671)
+@@ -10,7 +10,7 @@
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPC.par');
+ 	md.friction.coefficient=sqrt(md.constants.yts.*(1000+1000*sin(md.mesh.x*2*pi/L).*sin(md.mesh.y*2*pi/L)));
+-	md=extrude(md,10,1);
++	md=extrude(md,10,1.);
+ 
+ 	%Add spc on the borders
+ 	pos=find((md.mesh.x==0 | md.mesh.x==max(md.mesh.x) | md.mesh.y==0 | md.mesh.y==max(md.mesh.y)));
+Index: ../trunk-jpl/test/NightlyRun/test510.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test510.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test510.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,2,1.);
++md=extrude(md,2,1..);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+Index: ../trunk-jpl/test/NightlyRun/test233.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test233.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test233.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.thermal.spctemperature=[md.thermal.spctemperature, md.thermal.spctemperature+5.; 1. 2.];
+Index: ../trunk-jpl/test/NightlyRun/test102.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test102.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test102.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test421.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test421.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,5,1);
++md=extrude(md,5,1.);
+ md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','pattyn');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test502.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,0.9);
++md=extrude(md,3,0.9.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test404.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test404.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test225.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test225.m	(revision 13671)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md.geometry.bed=md.geometry.bed+50.; md.geometry.surface=md.geometry.surface+50.;
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.prognostic.hydrostatic_adjustment='Incremental';
+Index: ../trunk-jpl/test/NightlyRun/test306.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test306.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test306.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,4,2);
++md=extrude(md,4,2.);
+ md=setflowequation(md,'hutter','../Exp/SquareHalfRight.exp','fill','macayeal');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test429.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test429.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,5,1);
++md=extrude(md,5,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.diagnostic.isnewton=1;
+ md.diagnostic.restol=0.0001;
+Index: ../trunk-jpl/test/NightlyRun/test1303.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1303.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1303.m	(revision 13671)
+@@ -8,7 +8,7 @@
+ md=triangle(md,'../Exp/Square.exp',100000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+-md=extrude(md,11,2);
++md=extrude(md,11,2.);
+ md=setflowequation(md,'Pattyn','all');
+ pos1=find(md.mesh.elementonbed);     md.thermal.spctemperature(md.mesh.elements(pos1,1:3))=10;
+ pos2=find(md.mesh.elementonsurface); md.thermal.spctemperature(md.mesh.elements(pos2,4:6))=0;
+Index: ../trunk-jpl/test/NightlyRun/test3004.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test3004.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.autodiff.isautodiff=true;
+Index: ../trunk-jpl/test/NightlyRun/test1205.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1205.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1205.m	(revision 13671)
+@@ -17,7 +17,7 @@
+ vel_obs=(sqrt((md.inversion.vx_obs).^2+(md.inversion.vy_obs).^2));
+ 
+ %We extrude the model to have a 3d model
+-md=extrude(md,numlayers,1);
++md=extrude(md,numlayers,1.);
+ md=setflowequation(md,'hutter','all');
+ 
+ %Spc the nodes on the bed
+Index: ../trunk-jpl/test/NightlyRun/test1107.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1107.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1107.m	(revision 13671)
+@@ -15,7 +15,7 @@
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPD.par');
+-	md=extrude(md,10,1);
++	md=extrude(md,10,1.);
+ 
+ 	md=setflowequation(md,'pattyn','all');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test111.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test111.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test111.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.requested_outputs=IceVolumeEnum();
+Index: ../trunk-jpl/test/NightlyRun/test511.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test511.m	(revision 13671)
+@@ -5,7 +5,7 @@
+ %impose hydrostatic equilibrium (required by Stokes)
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+-md=extrude(md,3,1.);
++md=extrude(md,3,1..);
+ md=setflowequation(md,'stokes','all');
+ md=extract(md,md.mask.elementonfloatingice);
+ 
+Index: ../trunk-jpl/test/NightlyRun/test430.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test430.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'stokes','all');
+ md.diagnostic.isnewton=1;
+ md.diagnostic.restol=0.0001;
+Index: ../trunk-jpl/test/NightlyRun/test315.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test315.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test315.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,5,1.2);
++md=extrude(md,5,1.2.);
+ md=setflowequation(md,'hutter','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test120.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test120.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.timestepping.time_step=0;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test103.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test103.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.requested_outputs=StressTensorEnum();
+Index: ../trunk-jpl/test/NightlyRun/test503.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test503.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test503.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,0.9);
++md=extrude(md,3,0.9.);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test422.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test422.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,5,1);
++md=extrude(md,5,1.);
+ md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','macayeal');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.reltol=0.4;
+Index: ../trunk-jpl/test/NightlyRun/test324.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test324.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,5,1.2);
++md=extrude(md,5,1.2.);
+ md=setflowequation(md,'hutter','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_adapt=1;
+Index: ../trunk-jpl/test/NightlyRun/test405.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test405.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test405.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,5,1);
++md=extrude(md,5,1.);
+ md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn','coupling','penalties');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test307.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test307.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test307.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test209.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test209.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test1304.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1304.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1304.m	(revision 13671)
+@@ -8,7 +8,7 @@
+ md=triangle(md,'../Exp/Square.exp',100000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareThermal.par');
+-md=extrude(md,11,1);
++md=extrude(md,11,1.);
+ md=setflowequation(md,'Pattyn','all');
+ 
+ pos2=find(md.mesh.elementonsurface); md.thermal.spctemperature(md.mesh.elements(pos2,4:6))=0;
+Index: ../trunk-jpl/test/NightlyRun/test1206.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1206.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1206.m	(revision 13671)
+@@ -17,7 +17,7 @@
+ vel_obs=(sqrt((md.inversion.vx_obs).^2+(md.inversion.vy_obs).^2));
+ 
+ %We extrude the model to have a 3d model
+-md=extrude(md,numlayers,1);
++md=extrude(md,numlayers,1.);
+ md=setflowequation(md,'pattyn','all');
+ 
+ %Spc the nodes on the bed
+Index: ../trunk-jpl/test/NightlyRun/test1108.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1108.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1108.m	(revision 13671)
+@@ -12,7 +12,7 @@
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPD.par');
+-	md=extrude(md,10,1);
++	md=extrude(md,10,1.);
+ 
+ 	md=setflowequation(md,'pattyn','all');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test210.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test210.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test210.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test610.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test610.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test610.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=extrude(md,3,1.);
++md=extrude(md,3,1..);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BalancethicknessSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test512.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test512.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1.);
++md=extrude(md,3,1..);
+ md=setflowequation(md,'pattyn','all');
+ 
+ %control parameters
+Index: ../trunk-jpl/test/NightlyRun/test431.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test431.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test431.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+Index: ../trunk-jpl/test/NightlyRun/test202.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test202.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test202.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test121.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test121.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/NightlyRun/test104.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test104.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test325.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test325.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test325.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.timestepping.time_step=0.;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test406.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test406.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test406.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,4,1);
++md=extrude(md,4,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+Index: ../trunk-jpl/test/NightlyRun/test227.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test227.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_adapt=1.;
+Index: ../trunk-jpl/test/NightlyRun/test308.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test308.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test308.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test1101.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1101.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1101.m	(revision 13671)
+@@ -15,7 +15,7 @@
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPA.par');
+-	md=extrude(md,9,1);
++	md=extrude(md,9,1.);
+ 
+ 	md=setflowequation(md,'pattyn','all');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1207.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1207.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1207.m	(revision 13671)
+@@ -17,7 +17,7 @@
+ vel_obs=(sqrt((md.inversion.vx_obs).^2+(md.inversion.vy_obs).^2));
+ 
+ %We extrude the model to have a 3d model
+-md=extrude(md,numlayers,1);
++md=extrude(md,numlayers,1.);
+ md=setflowequation(md,'stokes','all');
+ 
+ %Spc the nodes on the bed
+Index: ../trunk-jpl/test/NightlyRun/test1109.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1109.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1109.m	(revision 13671)
+@@ -16,7 +16,7 @@
+ 	md=squaremesh(md,Lx,Ly,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPE.par');
+-	md=extrude(md,10,1);
++	md=extrude(md,10,1.);
+ 
+ 	if i==1 | i==3,
+ 		md=setflowequation(md,'pattyn','all');
+Index: ../trunk-jpl/test/NightlyRun/test211.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test211.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test211.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'stokes','all');
+ md.diagnostic.reltol=NaN;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test113.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test113.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test113.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,5,1);
++md=extrude(md,5,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,SurfaceSlopeSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test513.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test513.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1.);
++md=extrude(md,3,1..);
+ md=setflowequation(md,'macayeal','all');
+ 
+ %control parameters
+Index: ../trunk-jpl/test/NightlyRun/test432.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test432.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test432.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+Index: ../trunk-jpl/test/NightlyRun/test415.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test415.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',170000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ 
+ %control parameters
+Index: ../trunk-jpl/test/NightlyRun/test317.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test317.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test317.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test219.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test219.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test1110.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1110.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1110.m	(revision 13671)
+@@ -11,7 +11,7 @@
+ 	%md=triangle(md,'../Exp/SquareISMIP.exp',5500.);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPF.par');
+-	md=extrude(md,4,1);
++	md=extrude(md,4,1.);
+ 
+ 	if (i==1 | i==2),
+ 		md=setflowequation(md,'pattyn','all');
+Index: ../trunk-jpl/test/NightlyRun/test220.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test220.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',120000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,2,1);
++md=extrude(md,2,1.);
+ md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','pattyn');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test203.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test203.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test203.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test122.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test122.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test122.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+ md.thermal.isenthalpy=1;
+Index: ../trunk-jpl/test/NightlyRun/test603.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test603.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test603.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=extrude(md,6,1.);
++md=extrude(md,6,1..);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,PrognosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test505.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test505.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1.);
++md=extrude(md,3,1..);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test407.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test407.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test407.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,4,1);
++md=extrude(md,4,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isdiagnostic=0;
+Index: ../trunk-jpl/test/NightlyRun/test326.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test326.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/NightlyRun/test1102.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1102.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1102.m	(revision 13671)
+@@ -23,7 +23,7 @@
+ %	md=modelextract(md,elements);
+ 
+ 	md=parameterize(md,'../Par/ISMIPA.par');
+-	md=extrude(md,10,1);
++	md=extrude(md,10,1.);
+ 	md=setflowequation(md,'stokes','all');
+ 
+ 	%Create dirichlet on the bed only
+Index: ../trunk-jpl/test/NightlyRun/test1502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1502.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1502.m	(revision 13671)
+@@ -4,7 +4,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md.cluster=generic('name',oshostname(),'np',2);
+ md.transient.isthermal=0;
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3007.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test3007.m	(revision 13671)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+-md=extrude(md,5,3);
++md=extrude(md,5,3.);
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.autodiff.isautodiff=true;
+ md.verbose=verbose('autodiff',true);
+Index: ../trunk-jpl/test/NightlyRun/test1208.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1208.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1208.m	(revision 13671)
+@@ -8,7 +8,7 @@
+ md=parameterize(md,'../Par/RoundSheetEISMINT.par');
+ 
+ %We extrude the model to have a 3d model
+-md=extrude(md,numlayers,1);
++md=extrude(md,numlayers,1.);
+ md=setflowequation(md,'hutter','all');
+ 
+ %Spc the nodes on the bed
+Index: ../trunk-jpl/test/NightlyRun/test416.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test416.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test416.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',170000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ 
+ %control parameters
+Index: ../trunk-jpl/test/NightlyRun/test318.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test318.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test318.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,4,1);
++md=extrude(md,4,1.);
+ md=setflowequation(md,'hutter','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0;
+Index: ../trunk-jpl/test/NightlyRun/test237.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test237.m	(revision 13671)
+@@ -46,7 +46,7 @@
+ md.timestepping.final_time=60;
+ 
+ %
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test221.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test221.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',120000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,2,1);
++md=extrude(md,2,1.);
+ md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','macayeal');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.diagnostic.viscosity_overshoot=0;
+Index: ../trunk-jpl/test/NightlyRun/test204.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test204.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,2);
++md=extrude(md,3,2.);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test506.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test506.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,2,1.);
++md=extrude(md,2,1..);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test327.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test327.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/test/NightlyRun/test1103.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1103.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test1103.m	(revision 13671)
+@@ -13,7 +13,7 @@
+ 	md=squaremesh(md,L,L,nx,ny);
+ 	md=setmask(md,'',''); %ice sheet test
+ 	md=parameterize(md,'../Par/ISMIPB.par');
+-	md=extrude(md,10,1);
++	md=extrude(md,10,1.);
+ 
+ 	md=setflowequation(md,'pattyn','all');
+ 
+Index: ../trunk-jpl/test/NightlyRun/test3008.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test3008.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.timestepping.time_step=0;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test311.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test311.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test311.m	(revision 13671)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+-md=extrude(md,5,0.5);
++md=extrude(md,5,0.5.);
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,PrognosticSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test230.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test230.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test230.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',350000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ 
+Index: ../trunk-jpl/test/NightlyRun/test213.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test213.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+-md=extrude(md,3,1);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ 
+ %control parameters
+Index: ../trunk-jpl/test/NightlyRun/test115.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test115.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test115.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+-md=extrude(md,5,1);
++md=extrude(md,5,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BedSlopeSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test515.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.m	(revision 13670)
++++ ../trunk-jpl/test/NightlyRun/test515.m	(revision 13671)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1.);
++md=extrude(md,3,1..);
+ md=setflowequation(md,'pattyn','all');
+ md.thermal.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13671-13672.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13671-13672.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13671-13672.diff	(revision 13980)
@@ -0,0 +1,1131 @@
+Index: ../trunk-jpl/test/NightlyRun/test202.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test202.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test202.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test121.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test121.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/NightlyRun/test109.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test109.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test109.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.isdiagnostic=0
+Index: ../trunk-jpl/test/NightlyRun/test211.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test211.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test211.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'stokes','all')
+ md.diagnostic.reltol=NaN
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test104.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test104.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test306.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test306.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test306.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(4,2)
++md.extrude(4,2.)
+ md=setflowequation(md,'hutter','../Exp/SquareHalfRight.exp','fill','macayeal')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test225.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test225.py	(revision 13672)
+@@ -12,7 +12,7 @@
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md.geometry.bed=md.geometry.bed+50.
+ md.geometry.surface=md.geometry.surface+50.
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.prognostic.hydrostatic_adjustment='Incremental'
+Index: ../trunk-jpl/test/NightlyRun/test508.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test508.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(4,1.1)
++md.extrude(4,1.1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
+Index: ../trunk-jpl/test/NightlyRun/test220.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test220.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',120000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(2,1)
++md.extrude(2,1.)
+ md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','pattyn')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test113.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test113.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test113.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(5,1)
++md.extrude(5,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,SurfaceSlopeSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test610.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test610.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test610.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md.extrude(3,1.)
++md.extrude(3,1..)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BalancethicknessSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test503.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test503.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test503.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,0.9)
++md.extrude(3,0.9.)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test315.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test315.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test315.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(5,1.2)
++md.extrude(5,1.2.)
+ md=setflowequation(md,'hutter','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test203.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test203.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test203.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test122.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test122.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test122.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+ md.thermal.isenthalpy=1
+Index: ../trunk-jpl/test/NightlyRun/test512.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test512.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,1.)
++md.extrude(3,1..)
+ md=setflowequation(md,'pattyn','all')
+ 
+ # control parameters
+Index: ../trunk-jpl/test/NightlyRun/test324.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test324.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(5,1.2)
++md.extrude(5,1.2.)
+ md=setflowequation(md,'hutter','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_adapt=1
+Index: ../trunk-jpl/test/NightlyRun/test607.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test607.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test607.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md.extrude(2,1.)
++md.extrude(2,1..)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BedSlopeSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test307.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test307.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test307.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test509.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test509.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test509.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,1.)
++md.extrude(3,1..)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
+Index: ../trunk-jpl/test/NightlyRun/test221.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test221.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',120000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(2,1)
++md.extrude(2,1.)
+ md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','macayeal')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.diagnostic.viscosity_overshoot=0
+Index: ../trunk-jpl/test/NightlyRun/test209.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test209.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test311.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test311.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test311.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md=setflowequation(md,'macayeal','all')
+-md.extrude(5,0.5)
++md.extrude(5,0.5.)
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,PrognosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test230.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test230.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test230.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',350000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+Index: ../trunk-jpl/test/NightlyRun/test204.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test204.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test513.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test513.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ 
+ # control parameters
+Index: ../trunk-jpl/test/NightlyRun/test325.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test325.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test325.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.timestepping.time_step=0.
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test320.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test320.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test320.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ 
+ #control parameters
+Index: ../trunk-jpl/test/NightlyRun/test213.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test213.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ 
+ 
+Index: ../trunk-jpl/test/NightlyRun/test603.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test603.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test603.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md.extrude(6,1.)
++md.extrude(6,1..)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,PrognosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test227.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test227.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_adapt=1.
+Index: ../trunk-jpl/test/NightlyRun/test308.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test308.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test308.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1602.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1602.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1602.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'../Exp/SquareShelf.exp','')
+ md=parameterize(md,'../Par/SquareSheetShelf.py')
+-md.extrude(5,1)
++md.extrude(5,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.diagnostic.spcvx(numpy.nonzero(md.mesh.y>0))=NaN
+ md.initialization.vx(:)=0
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3007.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3007.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3007.py	(revision 13672)
+@@ -24,7 +24,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'macayeal','all')
+-md.extrude(5,3)
++md.extrude(5,3.)
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.autodiff.isautodiff=true
+ md=solve(md,PrognosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3008.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3008.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3008.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.timestepping.time_step=0
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3009.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3009.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3009.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.isdiagnostic=0
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1301.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1301.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1301.py	(revision 13672)
+@@ -35,7 +35,7 @@
+ md=triangle(md,'../Exp/Square.exp',100000)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareThermal.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'Pattyn','all')
+ 
+ 
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3002.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3002.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3002.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.autodiff.isautodiff=true
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1302.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1302.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1302.py	(revision 13672)
+@@ -33,7 +33,7 @@
+ md=triangle(md,'../Exp/Square.exp',100000)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareThermal.py')
+-md.extrude(30,1)   %NB: the more one extrudes, the better (10-> relative~0.35%, 20->0.1%, 30->0.05%)
++md.extrude(30,1.)   %NB: the more one extrudes, the better (10-> relative~0.35%, 20->0.1%, 30->0.05%.)
+ md=setflowequation(md,'Pattyn','all') 
+ 
+ 
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3003.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3003.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.diagnostic.requested_outputs=StressTensorEnum()
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1303.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1303.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1303.py	(revision 13672)
+@@ -35,7 +35,7 @@
+ md=triangle(md,'../Exp/Square.exp',100000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareThermal.py')
+-md.extrude(11,2)
++md.extrude(11,2.)
+ md=setflowequation(md,'Pattyn','all')
+ pos1=numpy.nonzero(md.mesh.elementonbed)     md.thermal.spctemperature(md.mesh.elements(pos1,1:3))=10
+ pos2=numpy.nonzero(md.mesh.elementonsurface) md.thermal.spctemperature(md.mesh.elements(pos2,4:6))=0
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3004.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3004.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3004.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.autodiff.isautodiff=true
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1502.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1502.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1502.py	(revision 13672)
+@@ -27,7 +27,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+ md=setflowequation(md,'macayeal','all')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md.cluster=generic('name',oshostname(),'np',2)
+ md.transient.isthermal=0
+ 
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1304.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1304.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1304.py	(revision 13672)
+@@ -35,7 +35,7 @@
+ md=triangle(md,'../Exp/Square.exp',100000)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareThermal.py')
+-md.extrude(11,1)
++md.extrude(11,1.)
+ md=setflowequation(md,'Pattyn','all')
+ 
+ 
+Index: ../trunk-jpl/test/NightlyRun/test115.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test115.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test115.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(5,1)
++md.extrude(5,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BedSlopeSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test505.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test505.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,1.)
++md.extrude(3,1..)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test317.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test317.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test317.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test3007.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test3007.py	(revision 13672)
+@@ -24,7 +24,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'macayeal','all')
+-md.extrude(5,3)
++md.extrude(5,3.)
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.autodiff.isautodiff=true
+ md=solve(md,PrognosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test231.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test231.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test231.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',350000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ 
+Index: ../trunk-jpl/test/NightlyRun/test312.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test312.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test312.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.timestepping.time_step=0.
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test205.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test205.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test205.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal','coupling','penalties')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test326.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test326.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/NightlyRun/test219.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test219.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'pattyn','../Exp/SquareHalfRight.exp','fill','macayeal')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test3002.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test3002.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.autodiff.isautodiff=true
+Index: ../trunk-jpl/test/NightlyRun/test321.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test321.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test321.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ 
+ #control parameters
+Index: ../trunk-jpl/test/NightlyRun/test214.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test214.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ 
+ 
+Index: ../trunk-jpl/test/NightlyRun/test107.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test107.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test107.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'macayeal','all')
+-md.extrude(5,3)
++md.extrude(5,3.)
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,PrognosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test102.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test102.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test102.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test304.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test304.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test304.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test506.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test506.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(2,1.)
++md.extrude(2,1..)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test237.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test237.py	(revision 13672)
+@@ -57,7 +57,7 @@
+ md.timestepping.final_time=60.
+ 
+ #
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test318.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test318.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test318.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(4,1)
++md.extrude(4,1.)
+ md=setflowequation(md,'hutter','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0
+Index: ../trunk-jpl/test/NightlyRun/test3008.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test3008.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.timestepping.time_step=0
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test111.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test111.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test111.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.requested_outputs=IceVolumeEnum()
+Index: ../trunk-jpl/test/NightlyRun/test232.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test232.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.thermal.spctemperature=numpy.vstack((numpy.hstack((md.thermal.spctemperature, md.thermal.spctemperature+5., md.thermal.spctemperature+10., md.thermal.spctemperature+15.)), [1.5,2.5,3.5,4.]))
+Index: ../trunk-jpl/test/NightlyRun/test313.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test313.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test313.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.verbose=verbose('convergence',True,'solution',True)
+Index: ../trunk-jpl/test/NightlyRun/test206.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test206.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test206.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.timestepping.time_step=0
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test515.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test515.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.thermal.stabilization=2
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test327.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test327.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
+Index: ../trunk-jpl/test/NightlyRun/test3003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test3003.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.diagnostic.requested_outputs=StressTensorEnum()
+Index: ../trunk-jpl/test/NightlyRun/test120.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test120.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.timestepping.time_step=0
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test510.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test510.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test510.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(2,1.)
++md.extrude(2,1..)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
+Index: ../trunk-jpl/test/NightlyRun/test322.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test322.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'stokes','all')
+ 
+ #control parameters
+Index: ../trunk-jpl/test/NightlyRun/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test215.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'stokes','all')
+ 
+ 
+Index: ../trunk-jpl/test/NightlyRun/test108.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test108.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test108.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.timestepping.time_step=0
+ md.cluster=generic('name',oshostname(),'np',3)
+Index: ../trunk-jpl/test/NightlyRun/test605.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test605.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test605.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md.extrude(5,1.5)
++md.extrude(5,1.5.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,SurfaceSlopeSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test210.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test210.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test210.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test103.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test103.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test103.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.diagnostic.requested_outputs=StressTensorEnum()
+Index: ../trunk-jpl/test/NightlyRun/test305.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test305.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test305.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(5,2)
++md.extrude(5,2.)
+ md=setflowequation(md,'hutter','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test224.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test224.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.prognostic.hydrostatic_adjustment='Incremental'
+Index: ../trunk-jpl/test/NightlyRun/test117.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test117.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test117.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(5,1)
++md.extrude(5,1.)
+ #Add boundary conditions on thickness on the border
+ pos=numpy.nonzero(md.mesh.vertexonboundary)
+ md.balancethickness.spcthickness[pos]=md.geometry.thickness[pos]
+Index: ../trunk-jpl/test/NightlyRun/test507.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test507.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test507.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(2,1.)
++md.extrude(2,1..)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test3009.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test3009.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.isdiagnostic=0
+Index: ../trunk-jpl/test/NightlyRun/test502.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test502.py	(revision 13672)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,0.9)
++md.extrude(3,0.9.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test233.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test233.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test233.py	(revision 13672)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',200000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.thermal.spctemperature=numpy.vstack((numpy.hstack((md.thermal.spctemperature, md.thermal.spctemperature+5.)), [1.,2.]))
+Index: ../trunk-jpl/test/NightlyRun/test207.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test207.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelf.py')
+-md.extrude(3,1)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.isdiagnostic=0
+Index: ../trunk-jpl/test/NightlyRun/test3004.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.py	(revision 13671)
++++ ../trunk-jpl/test/NightlyRun/test3004.py	(revision 13672)
+@@ -23,7 +23,7 @@
+ md=triangle(model(),'../Exp/Square.exp',180000)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+-md.extrude(3,2)
++md.extrude(3,2.)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.autodiff.isautodiff=true
Index: /issm/oecreview/Archive/13393-13976/ISSM-13672-13673.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13672-13673.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13672-13673.diff	(revision 13980)
@@ -0,0 +1,234 @@
+Index: ../trunk-jpl/test/NightlyRun/test610.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test610.py	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test610.py	(revision 13673)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md.extrude(3,1..)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BalancethicknessSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test315.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test315.py	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test315.py	(revision 13673)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(5,1.2.)
++md.extrude(5,1.)
+ md=setflowequation(md,'hutter','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test512.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.py	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test512.py	(revision 13673)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,1..)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ 
+ # control parameters
+Index: ../trunk-jpl/test/NightlyRun/test324.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.py	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test324.py	(revision 13673)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(5,1.2.)
++md.extrude(5,1.)
+ md=setflowequation(md,'hutter','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_adapt=1
+Index: ../trunk-jpl/test/NightlyRun/test607.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test607.py	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test607.py	(revision 13673)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md.extrude(2,1..)
++md.extrude(2,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,BedSlopeSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test509.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test509.py	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test509.py	(revision 13673)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,1..)
++md.extrude(3,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
+Index: ../trunk-jpl/test/NightlyRun/test311.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test311.py	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test311.py	(revision 13673)
+@@ -11,7 +11,7 @@
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+ md=setflowequation(md,'macayeal','all')
+-md.extrude(5,0.5.)
++md.extrude(5,0.5)
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,PrognosticSolutionEnum())
+ 
+Index: ../trunk-jpl/test/NightlyRun/test502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.m	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test502.m	(revision 13673)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,0.9.);
++md=extrude(md,3,0.9);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test603.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test603.py	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test603.py	(revision 13673)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md.extrude(6,1..)
++md.extrude(6,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,PrognosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test315.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test315.m	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test315.m	(revision 13673)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,5,1.2.);
++md=extrude(md,5,1.2);
+ md=setflowequation(md,'hutter','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test505.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.py	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test505.py	(revision 13673)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,1..)
++md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test503.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test503.m	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test503.m	(revision 13673)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,0.9.);
++md=extrude(md,3,0.9);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test324.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.m	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test324.m	(revision 13673)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+-md=extrude(md,5,1.2.);
++md=extrude(md,5,1.2);
+ md=setflowequation(md,'hutter','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_adapt=1;
+Index: ../trunk-jpl/test/NightlyRun/test506.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.py	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test506.py	(revision 13673)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(2,1..)
++md.extrude(2,1.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test510.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test510.py	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test510.py	(revision 13673)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(2,1..)
++md.extrude(2,1.)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
+Index: ../trunk-jpl/test/NightlyRun/test507.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test507.py	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test507.py	(revision 13673)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(2,1..)
++md.extrude(2,1.)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test502.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.py	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test502.py	(revision 13673)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,0.9.)
++md.extrude(3,0.9)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test311.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test311.m	(revision 13672)
++++ ../trunk-jpl/test/NightlyRun/test311.m	(revision 13673)
+@@ -2,7 +2,7 @@
+ md=setmask(md,'','');
+ md=parameterize(md,'../Par/SquareSheetConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+-md=extrude(md,5,0.5.);
++md=extrude(md,5,0.5);
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,PrognosticSolutionEnum());
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13673-13674.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13673-13674.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13673-13674.diff	(revision 13980)
@@ -0,0 +1,195 @@
+Index: ../trunk-jpl/test/NightlyRun/test507.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test507.m	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test507.m	(revision 13674)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,2,1..);
++md=extrude(md,2,1.);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test516.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test516.m	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test516.m	(revision 13674)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1..);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.thermal.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test315.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test315.py	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test315.py	(revision 13674)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(5,1.)
++md.extrude(5,1.2)
+ md=setflowequation(md,'hutter','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,TransientSolutionEnum())
+Index: ../trunk-jpl/test/NightlyRun/test324.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.py	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test324.py	(revision 13674)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'','')
+ md=parameterize(md,'../Par/SquareSheetConstrained.py')
+-md.extrude(5,1.)
++md.extrude(5,1.2)
+ md=setflowequation(md,'hutter','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_adapt=1
+Index: ../trunk-jpl/test/NightlyRun/test607.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test607.m	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test607.m	(revision 13674)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=extrude(md,2,1..);
++md=extrude(md,2,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BedSlopeSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test509.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test509.m	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test509.m	(revision 13674)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1..);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+Index: ../trunk-jpl/test/NightlyRun/test510.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test510.m	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test510.m	(revision 13674)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,2,1..);
++md=extrude(md,2,1.);
+ md=setflowequation(md,'stokes','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+Index: ../trunk-jpl/test/NightlyRun/test511.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.m	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test511.m	(revision 13674)
+@@ -5,7 +5,7 @@
+ %impose hydrostatic equilibrium (required by Stokes)
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+-md=extrude(md,3,1..);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'stokes','all');
+ md=extract(md,md.mask.elementonfloatingice);
+ 
+Index: ../trunk-jpl/test/NightlyRun/test610.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test610.m	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test610.m	(revision 13674)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=extrude(md,3,1..);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,BalancethicknessSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test512.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.m	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test512.m	(revision 13674)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1..);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ 
+ %control parameters
+Index: ../trunk-jpl/test/NightlyRun/test513.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.m	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test513.m	(revision 13674)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1..);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ 
+ %control parameters
+Index: ../trunk-jpl/test/NightlyRun/test603.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test603.m	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test603.m	(revision 13674)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=extrude(md,6,1..);
++md=extrude(md,6,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,PrognosticSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test505.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.m	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test505.m	(revision 13674)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1..);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test506.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.m	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test506.m	(revision 13674)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,2,1..);
++md=extrude(md,2,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,TransientSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test515.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.m	(revision 13673)
++++ ../trunk-jpl/test/NightlyRun/test515.m	(revision 13674)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,3,1..);
++md=extrude(md,3,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.thermal.stabilization=2;
+ md.cluster=generic('name',oshostname(),'np',3);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13674-13675.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13674-13675.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13674-13675.diff	(revision 13980)
@@ -0,0 +1,123 @@
+Index: ../trunk-jpl/test/Par/79North.par
+===================================================================
+--- ../trunk-jpl/test/Par/79North.par	(revision 13674)
++++ ../trunk-jpl/test/Par/79North.par	(revision 13675)
+@@ -8,8 +8,8 @@
+ index=transpose(ncread('../Data/79North.nc','index'));
+ surface=transpose(ncread('../Data/79North.nc','surface'));
+ thickness=transpose(ncread('../Data/79North.nc','thickness'));
+-md.initialization.vx       =InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y);
+-md.initialization.vy       =InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y);
++md.initialization.vx =InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y);
++md.initialization.vy =InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y);
+ md.geometry.surface  =InterpFromMeshToMesh2d(index,x,y,surface,md.mesh.x,md.mesh.y);
+ md.geometry.thickness=InterpFromMeshToMesh2d(index,x,y,thickness,md.mesh.x,md.mesh.y);
+ md.geometry.bed=md.geometry.surface-md.geometry.thickness;
+@@ -22,17 +22,16 @@
+ 
+ %Friction
+ pos=find(md.mask.elementonfloatingice);
+-md.friction.coefficient=50*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0;
++md.friction.coefficient=50.*ones(md.mesh.numberofvertices,1);
++md.friction.coefficient(md.mesh.elements(pos,:))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+ %Ice shelf melting and surface mass balance 
++pos=find(md.mask.elementonfloatingice);
+ md.basalforcings.melting_rate=zeros(md.mesh.numberofvertices,1);
+-pos=zeros(md.mesh.numberofvertices,1);
+-pos(md.mesh.elements(find(md.mask.elementonfloatingice),:))=1;
+-md.basalforcings.melting_rate(find(pos))=10;
+-md.surfaceforcings.mass_balance=15*ones(md.mesh.numberofvertices,1);
++md.basalforcings.melting_rate(md.mesh.elements(pos,:))=10;
++md.surfaceforcings.mass_balance=15.*ones(md.mesh.numberofvertices,1);
+ 
+ %Numerical parameters
+ md.diagnostic.viscosity_overshoot=0.3;
+@@ -40,8 +39,8 @@
+ md.thermal.stabilization=1;
+ md.verbose=verbose(0);
+ md.settings.waitonlock=30;
+-md.timestepping.time_step=1;
+-md.timestepping.final_time=3;
++md.timestepping.time_step=1.;
++md.timestepping.final_time=3.;
+ md.diagnostic.restol=0.05;
+ md.diagnostic.reltol=0.005;
+ md.steadystate.reltol=0.005;
+Index: ../trunk-jpl/test/Par/79North.py
+===================================================================
+--- ../trunk-jpl/test/Par/79North.py	(revision 0)
++++ ../trunk-jpl/test/Par/79North.py	(revision 13675)
+@@ -0,0 +1,69 @@
++import os.path
++import inspect
++import netCDF4
++from numpy import *
++from verbose import *
++from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
++from paterson import *
++from SetMarineIceSheetBC import *
++
++#Start defining model parameters here
++
++#Geometry and observation
++f = netCDF4.Dataset('../Data/79North.nc','r')
++x         = reshape(f.variables['x'][:],(-1))
++y         = reshape(f.variables['y'][:],(-1))
++vx= f.variables['vx'][:]
++vy= f.variables['vy'][:]
++index     = f.variables['index'][:]
++surface   = f.variables['surface'][:]
++thickness = f.variables['thickness'][:]
++f.close()
++
++[md.initialization.vx]  = InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y)
++[md.initialization.vy]  = InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y)
++[md.geometry.surface]   = InterpFromMeshToMesh2d(index,x,y,surface,md.mesh.x,md.mesh.y)
++[md.geometry.thickness] = InterpFromMeshToMesh2d(index,x,y,thickness,md.mesh.x,md.mesh.y)
++md.geometry.bed         = md.geometry.surface-md.geometry.thickness
++
++#Materials
++md.initialization.temperature=(273.-20.)*ones((md.mesh.numberofvertices,1))
++md.materials.rheology_B=paterson(md.initialization.temperature)
++md.materials.rheology_n=3.*ones((md.mesh.numberofelements,1))
++md.initialization.temperature=md.initialization.temperature
++
++#Friction
++pos=numpy.nonzero(md.mask.elementonfloatingice)
++md.friction.coefficient=50.*ones((md.mesh.numberofvertices,1))
++md.friction.coefficient[md.mesh.elements[pos].astype(int)-1]=0.
++md.friction.p=ones((md.mesh.numberofelements,1))
++md.friction.q=ones((md.mesh.numberofelements,1))
++
++#Ice shelf melting and surface mass balance 
++pos=numpy.nonzero(md.mask.elementonfloatingice)
++md.basalforcings.melting_rate=zeros((md.mesh.numberofvertices,1))
++md.basalforcings.melting_rate[md.mesh.elements[pos].astype(int)-1]=10.
++md.surfaceforcings.mass_balance=15*numpy.ones((md.mesh.numberofvertices,1))
++
++#Numerical parameters
++md.diagnostic.viscosity_overshoot=0.3
++md.prognostic.stabilization=1
++md.thermal.stabilization=1
++md.verbose=verbose(0)
++md.settings.waitonlock=30
++md.timestepping.time_step=1.
++md.timestepping.final_time=3.
++md.diagnostic.restol=0.05
++md.diagnostic.reltol=0.005
++md.steadystate.reltol=0.005
++md.diagnostic.abstol=float('NaN')
++
++#Boundary conditions:
++md=SetMarineIceSheetBC(md)
++pos=numpy.nonzero(md.mesh.vertexonboundary)
++md.balancethickness.spcthickness[pos]=md.geometry.thickness[pos]
++md.prognostic.spcthickness[pos]=md.geometry.thickness[pos]
++
++#Change name so that no test have the same name
++if len(inspect.stack()) > 2:
++	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13675-13676.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13675-13676.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13675-13676.diff	(revision 13980)
@@ -0,0 +1,169 @@
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 13675)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.par	(revision 13676)
+@@ -1,14 +1,14 @@
+ %Start defining model parameters here
+ 
+ %Geometry
+-hmin=300;
+-hmax=1000;
++hmin=300.;
++hmax=1000.;
+ ymin=min(md.mesh.y);
+ ymax=max(md.mesh.y);
+ md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin);
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+ bed_sheet=-md.materials.rho_ice/md.materials.rho_water*(hmax+(hmin-hmax)*(ymax/2-ymin)/(ymax-ymin));
+-pos=find(md.mesh.y<=ymax/2);
++pos=find(md.mesh.y<=ymax/2.);
+ md.geometry.bed(pos)=bed_sheet;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ 
+@@ -25,18 +25,18 @@
+ md.initialization.pressure=zeros(md.mesh.numberofvertices,1);
+ 
+ %Materials
+-md.initialization.temperature=(273-20)*ones(md.mesh.numberofvertices,1);
++md.initialization.temperature=(273.-20.)*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+-md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
+ %Accumulation and melting
+-md.surfaceforcings.mass_balance=10*ones(md.mesh.numberofvertices,1);
+-md.basalforcings.melting_rate=5*ones(md.mesh.numberofvertices,1);
++md.surfaceforcings.mass_balance=10.*ones(md.mesh.numberofvertices,1);
++md.basalforcings.melting_rate=5.*ones(md.mesh.numberofvertices,1);
+ 
+ %Friction
+ pos=find(md.mask.elementonfloatingice);
+-md.friction.coefficient=20*ones(md.mesh.numberofvertices,1);
+-md.friction.coefficient(md.mesh.elements(pos,:))=0;
++md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
++md.friction.coefficient(md.mesh.elements(pos,:))=0.;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+ 
+@@ -50,8 +50,8 @@
+ md.steadystate.reltol=0.05;
+ md.diagnostic.reltol=0.05;
+ md.diagnostic.abstol=NaN;
+-md.timestepping.time_step=1;
+-md.timestepping.final_time=3;
++md.timestepping.time_step=1.;
++md.timestepping.final_time=3.;
+ 
+ %Deal with boundary conditions:
+ md=SetMarineIceSheetBC(md,'../Exp/SquareFront.exp');
+Index: ../trunk-jpl/test/Par/79North.py
+===================================================================
+--- ../trunk-jpl/test/Par/79North.py	(revision 13675)
++++ ../trunk-jpl/test/Par/79North.py	(revision 13676)
+@@ -10,11 +10,11 @@
+ #Start defining model parameters here
+ 
+ #Geometry and observation
+-f = netCDF4.Dataset('../Data/79North.nc','r')
++f         = netCDF4.Dataset('../Data/79North.nc','r')
+ x         = reshape(f.variables['x'][:],(-1))
+ y         = reshape(f.variables['y'][:],(-1))
+-vx= f.variables['vx'][:]
+-vy= f.variables['vy'][:]
++vx        = f.variables['vx'][:]
++vy        = f.variables['vy'][:]
+ index     = f.variables['index'][:]
+ surface   = f.variables['surface'][:]
+ thickness = f.variables['thickness'][:]
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 0)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 13676)
+@@ -0,0 +1,72 @@
++import os.path
++import inspect
++import netCDF4
++from numpy import *
++from verbose import *
++from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d
++from paterson import *
++from SetMarineIceSheetBC import *
++
++#Start defining model parameters here
++
++#Geometry
++hmin=300.
++hmax=1000.
++ymin=min(md.mesh.y)
++ymax=max(md.mesh.y)
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin)
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++bed_sheet=-md.materials.rho_ice/md.materials.rho_water*(hmax+(hmin-hmax)*(ymax/2-ymin)/(ymax-ymin))
++pos=numpy.nonzero(md.mesh.y<=ymax/2.)
++md.geometry.bed[pos]=bed_sheet
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++
++#Initial velocity 
++f = netCDF4.Dataset('../Data/SquareSheetShelf.nc','r')
++x         = reshape(f.variables['x'][:],(-1))
++y         = reshape(f.variables['y'][:],(-1))
++vx        = f.variables['vx'][:]
++vy        = f.variables['vy'][:]
++index     = f.variables['index'][:]
++f.close()
++
++[md.initialization.vx]  = InterpFromMeshToMesh2d(index,x,y,vx,md.mesh.x,md.mesh.y)
++[md.initialization.vy]  = InterpFromMeshToMesh2d(index,x,y,vy,md.mesh.x,md.mesh.y)
++md.initialization.vz=zeros((md.mesh.numberofvertices,1))
++md.initialization.pressure=zeros((md.mesh.numberofvertices,1))
++
++#Materials
++md.initialization.temperature=(273.-20.)*ones((md.mesh.numberofvertices,1))
++md.materials.rheology_B=paterson(md.initialization.temperature)
++md.materials.rheology_n=3.*ones((md.mesh.numberofelements,1))
++
++#Accumulation and melting
++md.surfaceforcings.mass_balance=10.*numpy.ones((md.mesh.numberofvertices,1))
++md.basalforcings.melting_rate=5.*numpy.ones((md.mesh.numberofvertices,1))
++
++#Friction
++pos=numpy.nonzero(md.mask.elementonfloatingice)
++md.friction.coefficient=20.*ones((md.mesh.numberofvertices,1))
++md.friction.coefficient[md.mesh.elements[pos].astype(int)-1]=0.
++md.friction.p=ones((md.mesh.numberofelements,1))
++md.friction.q=ones((md.mesh.numberofelements,1))
++
++#Numerical parameters
++md.diagnostic.viscosity_overshoot=0.0
++md.prognostic.stabilization=1
++md.thermal.stabilization=1
++md.verbose=verbose(0)
++md.settings.waitonlock=30.
++md.diagnostic.restol=0.05
++md.steadystate.reltol=0.05
++md.diagnostic.reltol=0.05
++md.diagnostic.abstol=float('NaN')
++md.timestepping.time_step=1.
++md.timestepping.final_time=3.
++
++#Deal with boundary conditions:
++md=SetMarineIceSheetBC(md,'../Exp/SquareFront.exp')
++
++#Change name so that no test have the same name
++if len(inspect.stack()) > 2:
++	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
+Index: ../trunk-jpl/test/Par/SquareSheetConstrained.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 13675)
++++ ../trunk-jpl/test/Par/SquareSheetConstrained.py	(revision 13676)
+@@ -10,8 +10,8 @@
+ #Start defining model parameters here
+ 
+ #Geometry
+-hmin=300
+-hmax=1000
++hmin=300.
++hmax=1000.
+ ymin=numpy.min(md.mesh.y)
+ ymax=numpy.max(md.mesh.y)
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13676-13677.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13676-13677.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13676-13677.diff	(revision 13980)
@@ -0,0 +1,177 @@
+Index: ../trunk-jpl/test/NightlyRun/test404.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test404.py	(revision 13677)
+@@ -0,0 +1,28 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(3,1.)
++md=setflowequation(md,'stokes','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-07,1e-07,1e-06,1e-07,1e-07]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test405.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test405.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test405.py	(revision 13677)
+@@ -0,0 +1,28 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(5,1.)
++md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn','coupling','penalties')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-05,1e-05,1e-05,1e-05,1e-05]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test401.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test401.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test401.py	(revision 13677)
+@@ -0,0 +1,26 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test402.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test402.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test402.py	(revision 13677)
+@@ -0,0 +1,28 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(4,1.)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test406.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test406.m	(revision 13676)
++++ ../trunk-jpl/test/NightlyRun/test406.m	(revision 13677)
+@@ -4,7 +4,8 @@
+ md=extrude(md,4,1.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_step=0;
++md.timestepping.time_step=0.;
++md.verbose=verbose('all');
+ md=solve(md,ThermalSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test403.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test403.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test403.py	(revision 13677)
+@@ -0,0 +1,28 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(5,1.)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13677-13678.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13677-13678.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13677-13678.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/Par/SquareSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 13677)
++++ ../trunk-jpl/test/Par/SquareSheetShelf.py	(revision 13678)
+@@ -14,7 +14,7 @@
+ hmax=1000.
+ ymin=min(md.mesh.y)
+ ymax=max(md.mesh.y)
+-md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y-ymin)/(ymax-ymin)
++md.geometry.thickness=hmax+(hmin-hmax)*(md.mesh.y.reshape(-1,1)-ymin)/(ymax-ymin)
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
+ bed_sheet=-md.materials.rho_ice/md.materials.rho_water*(hmax+(hmin-hmax)*(ymax/2-ymin)/(ymax-ymin))
+ pos=numpy.nonzero(md.mesh.y<=ymax/2.)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13678-13679.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13678-13679.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13678-13679.diff	(revision 13980)
@@ -0,0 +1,453 @@
+Index: ../trunk-jpl/test/NightlyRun/test419.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test419.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test419.py	(revision 13679)
+@@ -0,0 +1,28 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(5,1.)
++md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test406.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test406.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test406.py	(revision 13679)
+@@ -0,0 +1,26 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(4,1.)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_step=0.
++md=solve(md,ThermalSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results['ThermalSolution'][1]['Temperature'],\
++	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test415.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test415.py	(revision 13679)
+@@ -0,0 +1,50 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',170000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(3,1.)
++md=setflowequation(md,'macayeal','all')
++
++#control parameters
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['FrictionCoefficient']
++md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=numpy.hstack((103*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
++md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
++md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2*numpy.ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=0.3*numpy.ones((md.inversion.nsteps,1))
++md.timestepping.time_step=0.
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,SteadystateSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-10,1e-10,1e-11,1e-13,1e-10,1e-09,1e-10,1e-8,1e-09,1e-6]
++field_values=[\
++	md.results['SteadystateSolution'][1]['Gradient1'],\
++	md.results['SteadystateSolution'][1]['J'],\
++	md.results['SteadystateSolution'][1]['FrictionCoefficient'],\
++	md.results['SteadystateSolution'][1]['Pressure'],\
++	md.results['SteadystateSolution'][1]['Vel'],\
++	md.results['SteadystateSolution'][1]['Vx'],\
++	md.results['SteadystateSolution'][1]['Vy'],\
++	md.results['SteadystateSolution'][1]['Vz'],\
++	md.results['SteadystateSolution'][1]['Temperature'],\
++	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate']
++]
+Index: ../trunk-jpl/test/NightlyRun/test410.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test410.py	(revision 13679)
+@@ -0,0 +1,31 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(3,2.)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_step=0
++md=solve(md,SteadystateSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-10,1e-10,1e-09,1e-10,1e-13,1e-10,1e-06]
++field_values=[\
++	md.results['SteadystateSolution'][1]['Vx'],\
++	md.results['SteadystateSolution'][1]['Vy'],\
++	md.results['SteadystateSolution'][1]['Vz'],\
++	md.results['SteadystateSolution'][1]['Vel'],\
++	md.results['SteadystateSolution'][1]['Pressure'],\
++	md.results['SteadystateSolution'][1]['Temperature'],\
++	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test407.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test407.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test407.py	(revision 13679)
+@@ -0,0 +1,29 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(4,1.)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.transient.isdiagnostic=0
++md.transient.isprognostic=0
++md.transient.isthermal=1
++md.transient.isgroundingline=0
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test416.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test416.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test416.py	(revision 13679)
+@@ -0,0 +1,50 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',170000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(3,1.)
++md=setflowequation(md,'pattyn','all')
++
++#control parameters
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['FrictionCoefficient']
++md.inversion.min_parameters=1.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=200.*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=numpy.hstack((102*numpy.ones((md.inversion.nsteps,1)),501*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,2))
++md.inversion.cost_functions_coefficients[:,1]=2.*10**-7
++md.inversion.gradient_scaling=3.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2*numpy.ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=0.3*numpy.ones((md.inversion.nsteps,1))
++md.timestepping.time_step=0.
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,SteadystateSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-08,1e-07,1e-08,1e-08,1e-08,1e-08,1e-08,1e-07,1e-08,1e-05]
++field_values=[\
++	md.results['SteadystateSolution'][1]['Gradient1'],\
++	md.results['SteadystateSolution'][1]['J'],\
++	md.results['SteadystateSolution'][1]['FrictionCoefficient'],\
++	md.results['SteadystateSolution'][1]['Pressure'],\
++	md.results['SteadystateSolution'][1]['Vel'],\
++	md.results['SteadystateSolution'][1]['Vx'],\
++	md.results['SteadystateSolution'][1]['Vy'],\
++	md.results['SteadystateSolution'][1]['Vz'],\
++	md.results['SteadystateSolution'][1]['Temperature'],\
++	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate']
++]
+Index: ../trunk-jpl/test/NightlyRun/test406.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test406.m	(revision 13678)
++++ ../trunk-jpl/test/NightlyRun/test406.m	(revision 13679)
+@@ -5,7 +5,6 @@
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+-md.verbose=verbose('all');
+ md=solve(md,ThermalSolutionEnum());
+ 
+ %Fields and tolerances to track changes
+Index: ../trunk-jpl/test/NightlyRun/test411.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test411.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test411.py	(revision 13679)
+@@ -0,0 +1,32 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(3,2.)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_step=0
++md=solve(md,SteadystateSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-09,1e-09,1e-08,1e-09,1e-09,1e-08,1e-05
++]
++field_values=[\
++	md.results['SteadystateSolution'][1]['Vx'],\
++	md.results['SteadystateSolution'][1]['Vy'],\
++	md.results['SteadystateSolution'][1]['Vz'],\
++	md.results['SteadystateSolution'][1]['Vel'],\
++	md.results['SteadystateSolution'][1]['Pressure'],\
++	md.results['SteadystateSolution'][1]['Temperature'],\
++	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test415.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.m	(revision 13678)
++++ ../trunk-jpl/test/NightlyRun/test415.m	(revision 13679)
+@@ -7,15 +7,15 @@
+ %control parameters
+ md.inversion.iscontrol=1;
+ md.inversion.control_parameters={'FrictionCoefficient'};
+-md.inversion.min_parameters=1*ones(md.mesh.numberofvertices,1);
+-md.inversion.max_parameters=200*ones(md.mesh.numberofvertices,1);
++md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
++md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+ md.inversion.cost_functions=[103*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+-md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+-md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
++md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2.*10^-7;
++md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+-md.timestepping.time_step=0;
++md.timestepping.time_step=0.;
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test408.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test408.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test408.py	(revision 13679)
+@@ -0,0 +1,43 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test416.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test416.m	(revision 13678)
++++ ../trunk-jpl/test/NightlyRun/test416.m	(revision 13679)
+@@ -7,15 +7,15 @@
+ %control parameters
+ md.inversion.iscontrol=1;
+ md.inversion.control_parameters={'FrictionCoefficient'};
+-md.inversion.min_parameters=1*ones(md.mesh.numberofvertices,1);
+-md.inversion.max_parameters=200*ones(md.mesh.numberofvertices,1);
++md.inversion.min_parameters=1.*ones(md.mesh.numberofvertices,1);
++md.inversion.max_parameters=200.*ones(md.mesh.numberofvertices,1);
+ md.inversion.nsteps=2;
+ md.inversion.cost_functions=[102*ones(md.inversion.nsteps,1)  501*ones(md.inversion.nsteps,1)];
+ md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,2); md.inversion.cost_functions_coefficients(:,2)=2*10^-7;
+-md.inversion.gradient_scaling=3*ones(md.inversion.nsteps,1);
++md.inversion.gradient_scaling=3.*ones(md.inversion.nsteps,1);
+ md.inversion.maxiter_per_step=2*ones(md.inversion.nsteps,1);
+ md.inversion.step_threshold=0.3*ones(md.inversion.nsteps,1);
+-md.timestepping.time_step=0;
++md.timestepping.time_step=0.;
+ md.inversion.vx_obs=md.initialization.vx; md.inversion.vy_obs=md.initialization.vy;
+ 
+ md.cluster=generic('name',oshostname(),'np',3);
+Index: ../trunk-jpl/test/NightlyRun/test409.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test409.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test409.py	(revision 13679)
+@@ -0,0 +1,58 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(3,1.)
++md=setflowequation(md,'macayeal','../Exp/SquareHalfRight.exp','fill','pattyn','coupling','penalties')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
++				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
++					   'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++field_tolerances=[\
++	1e-05,1e-05,1e-05,1e-05,1e-05,1e-05,1e-05,1e-05,1e-05,1e-05,\
++	1e-03,1e-03,1e-02,1e-03,1e-02,1e-04,1e-01,1e-03,1e-01,1e-01,\
++	1e-02,1e-02,1e-01,1e-02,1e-01,1e-04,1e-04,1e-04,1e-04,1e-01]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Pressure'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Pressure'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Pressure'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13679-13680.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13679-13680.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13679-13680.diff	(revision 13980)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/test/NightlyRun/test605.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test605.m	(revision 13679)
++++ ../trunk-jpl/test/NightlyRun/test605.m	(revision 13680)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.);
+ md=setmask(md,'../Exp/79NorthShelf.exp','');
+ md=parameterize(md,'../Par/79North.par');
+-md=extrude(md,5,1.5.);
++md=extrude(md,5,1.5);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,SurfaceSlopeSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test508.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.py	(revision 13679)
++++ ../trunk-jpl/test/NightlyRun/test508.py	(revision 13680)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(4,1.1.)
++md.extrude(4,1.1)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.timestepping.time_step=0.
+Index: ../trunk-jpl/test/NightlyRun/test508.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.m	(revision 13679)
++++ ../trunk-jpl/test/NightlyRun/test508.m	(revision 13680)
+@@ -1,7 +1,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',30000.);
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp');
+ md=parameterize(md,'../Par/Pig.par');
+-md=extrude(md,4,1.1.);
++md=extrude(md,4,1.1);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.timestepping.time_step=0.;
+Index: ../trunk-jpl/test/NightlyRun/test605.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test605.py	(revision 13679)
++++ ../trunk-jpl/test/NightlyRun/test605.py	(revision 13680)
+@@ -11,7 +11,7 @@
+ md=triangle(model(),'../Exp/79North.exp',10000.)
+ md=setmask(md,'../Exp/79NorthShelf.exp','')
+ md=parameterize(md,'../Par/79North.py')
+-md.extrude(5,1.5.)
++md.extrude(5,1.5)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,SurfaceSlopeSolutionEnum())
Index: /issm/oecreview/Archive/13393-13976/ISSM-13680-13681.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13680-13681.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13680-13681.diff	(revision 13980)
@@ -0,0 +1,714 @@
+Index: ../trunk-jpl/test/NightlyRun/test430.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test430.py	(revision 13681)
+@@ -0,0 +1,30 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(3,1.)
++md=setflowequation(md,'stokes','all')
++md.diagnostic.isnewton=1
++md.diagnostic.restol=0.0001
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-07,1e-07,1e-06,1e-07,1e-07]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 13680)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 13681)
+@@ -1,17 +1,15 @@
+ md=triangle(model(),'../Exp/Square.exp',350000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md.initialization.vx(:)=0;
+-md.initialization.vy(:)=0;
+-md.initialization.vel(:)=0;
+-md.geometry.bed=-700-abs(md.mesh.y-500000)/1000;
+-md.geometry.bathymetry=-700-abs(md.mesh.y-500000)/1000;
+-md.geometry.thickness(:)=1000;
++md.initialization.vx(:)=0.;
++md.initialization.vy(:)=0.;
++md.geometry.bed=-700.-abs(md.mesh.y-500000.)/1000.;
++md.geometry.bathymetry=-700.-abs(md.mesh.y-500000.)/1000.;
++md.geometry.thickness(:)=1000.;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+-md.surfaceforcings.mass_balance(:)=100;
++md.surfaceforcings.mass_balance(:)=100.;
+ md=extrude(md,3,1.);
+ md=setflowequation(md,'macayeal','all');
+-
+ md.transient.isdiagnostic=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AgressiveMigration';
+Index: ../trunk-jpl/test/NightlyRun/test427.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test427.py	(revision 13681)
+@@ -0,0 +1,50 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.initialization.vx[:]=0.
++md.initialization.vy[:]=0.
++md.geometry.bed=-700.-abs(md.mesh.y.reshape(-1,1)-500000.)/1000.
++md.geometry.bathymetry=-700.-abs(md.mesh.y.reshape(-1,1)-500000.)/1000.
++md.geometry.thickness[:]=1300
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=setflowequation(md,'macayeal','all')
++md.extrude(3,1.)
++
++md.surfaceforcings.mass_balance[:]=-150
++md.transient.isdiagnostic=0
++md.transient.isgroundingline=1
++md.groundingline.migration='SoftMigration'
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Bed1','Surface1','Thickness1','Floatingice1',\
++	'Bed2','Surface2','Thickness2','Floatingice2',\
++	'Bed3','Surface3','Thickness3','Floatingice3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,\
++	1e-10,1e-11,1e-10,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['MaskElementonfloatingice'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['MaskElementonfloatingice'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['MaskElementonfloatingice'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test422.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test422.py	(revision 13681)
+@@ -0,0 +1,29 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(5,1.)
++md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','macayeal')
++md.cluster=generic('name',oshostname(),'np',3)
++md.diagnostic.reltol=0.4
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-09,1e-09,1e-06,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test427.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.m	(revision 13680)
++++ ../trunk-jpl/test/NightlyRun/test427.m	(revision 13681)
+@@ -1,11 +1,10 @@
+ md=triangle(model(),'../Exp/Square.exp',150000.);
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+-md.initialization.vx(:)=0;
+-md.initialization.vy(:)=0;
+-md.initialization.vel(:)=0;
+-md.geometry.bed=-700-abs(md.mesh.y-500000)/1000;
+-md.geometry.bathymetry=-700-abs(md.mesh.y-500000)/1000;
++md.initialization.vx(:)=0.;
++md.initialization.vy(:)=0.;
++md.geometry.bed=-700.-abs(md.mesh.y-500000.)/1000.;
++md.geometry.bathymetry=-700.-abs(md.mesh.y-500000.)/1000.;
+ md.geometry.thickness(:)=1300;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ md=setflowequation(md,'macayeal','all');
+Index: ../trunk-jpl/test/NightlyRun/test431.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test431.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test431.py	(revision 13681)
+@@ -0,0 +1,34 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(3,2.)
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_step=0.
++md.thermal.isenthalpy=1
++md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
++md=solve(md,SteadystateSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','Water fraction','Enthalpy']
++field_tolerances=[1e-10,1e-10,1e-09,1e-10,1e-13,1e-10,1e-10,1e-10]
++field_values=[\
++	md.results['SteadystateSolution'][1]['Vx'],\
++	md.results['SteadystateSolution'][1]['Vy'],\
++	md.results['SteadystateSolution'][1]['Vz'],\
++	md.results['SteadystateSolution'][1]['Vel'],\
++	md.results['SteadystateSolution'][1]['Pressure'],\
++	md.results['SteadystateSolution'][1]['Temperature'],\
++	md.results['SteadystateSolution'][1]['Waterfraction'],\
++	md.results['SteadystateSolution'][1]['Enthalpy'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test428.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test428.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test428.py	(revision 13681)
+@@ -0,0 +1,28 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.diagnostic.isnewton=1
++md.diagnostic.restol=0.0001
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vel','Pressure']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test432.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test432.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test432.py	(revision 13681)
+@@ -0,0 +1,34 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(3,2.)
++md=setflowequation(md,'pattyn','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_step=0.
++md.thermal.isenthalpy=1
++md.initialization.waterfraction=numpy.zeros((md.mesh.numberofvertices,1))
++md=solve(md,SteadystateSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','Water fraction','Enthalpy']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-13,1e-10,1e-10,1e-10]
++field_values=[\
++	md.results['SteadystateSolution'][1]['Vx'],\
++	md.results['SteadystateSolution'][1]['Vy'],\
++	md.results['SteadystateSolution'][1]['Vz'],\
++	md.results['SteadystateSolution'][1]['Vel'],\
++	md.results['SteadystateSolution'][1]['Pressure'],\
++	md.results['SteadystateSolution'][1]['Temperature'],\
++	md.results['SteadystateSolution'][1]['Waterfraction'],\
++	md.results['SteadystateSolution'][1]['Enthalpy'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test427.py1
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.py1	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test427.py1	(revision 13681)
+@@ -0,0 +1,51 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.initialization.vx(:)=0
++md.initialization.vy(:)=0
++md.initialization.vel(:)=0
++md.geometry.bed=-700-abs(md.mesh.y-500000)/1000
++md.geometry.bathymetry=-700-abs(md.mesh.y-500000)/1000
++md.geometry.thickness(:)=1300
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=setflowequation(md,'macayeal','all')
++md.extrude(3,1.)
++
++md.surfaceforcings.mass_balance(:)=-150
++md.transient.isdiagnostic=0
++md.transient.isgroundingline=1
++md.groundingline.migration='SoftMigration'
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Bed1','Surface1','Thickness1','Floatingice1',\
++	'Bed2','Surface2','Thickness2','Floatingice2',\
++	'Bed3','Surface3','Thickness3','Floatingice3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,\
++	1e-10,1e-11,1e-10,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['MaskElementonfloatingice'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['MaskElementonfloatingice'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['MaskElementonfloatingice'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test429.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test429.py	(revision 13681)
+@@ -0,0 +1,30 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(5,1.)
++md=setflowequation(md,'pattyn','all')
++md.diagnostic.isnewton=1
++md.diagnostic.restol=0.0001
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test424.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test424.py	(revision 13681)
+@@ -0,0 +1,49 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.initialization.vx[:]=0.
++md.initialization.vy[:]=0.
++md.geometry.bed=-700.-abs(md.mesh.y.reshape(-1,1)-500000.)/1000.
++md.geometry.bathymetry=-700.-abs(md.mesh.y.reshape(-1,1)-500000.)/1000.
++md.geometry.thickness[:]=1000.
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md.surfaceforcings.mass_balance[:]=100.
++md.transient.isdiagnostic=0
++md.transient.isgroundingline=1
++md.groundingline.migration='AgressiveMigration'
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Bed1','Surface1','Thickness1','Floatingice1',\
++	'Bed2','Surface2','Thickness2','Floatingice2',\
++	'Bed3','Surface3','Thickness3','Floatingice3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['MaskElementonfloatingice'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['MaskElementonfloatingice'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['MaskElementonfloatingice'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test431.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test431.m	(revision 13680)
++++ ../trunk-jpl/test/NightlyRun/test431.m	(revision 13681)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_step=0;
++md.timestepping.time_step=0.;
+ md.thermal.isenthalpy=1;
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+ md=solve(md,SteadystateSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test423.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.m	(revision 13680)
++++ ../trunk-jpl/test/NightlyRun/test423.m	(revision 13681)
+@@ -1,7 +1,7 @@
+ radius=1e6;
+ shelfextent=2e5;
+ 
+-md=roundmesh(model(),radius,50000);
++md=roundmesh(model(),radius,50000.);
+ %fix center node to 0,0
+ rad=sqrt(md.mesh.x.^2+md.mesh.y.^2);
+ pos=find(rad==min(rad));
+Index: ../trunk-jpl/test/NightlyRun/test424.py1
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.py1	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test424.py1	(revision 13681)
+@@ -0,0 +1,50 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.initialization.vx(:)=0
++md.initialization.vy(:)=0
++md.initialization.vel(:)=0
++md.geometry.bed=-700.-abs(md.mesh.y-500000.)/1000.
++md.geometry.bathymetry=-700.-abs(md.mesh.y-500000.)/1000.
++md.geometry.thickness(:)=1000.
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md.surfaceforcings.mass_balance(:)=100.
++md.transient.isdiagnostic=0
++md.transient.isgroundingline=1
++md.groundingline.migration='AgressiveMigration'
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Bed1','Surface1','Thickness1','Floatingice1',\
++	'Bed2','Surface2','Thickness2','Floatingice2',\
++	'Bed3','Surface3','Thickness3','Floatingice3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['MaskElementonfloatingice'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['MaskElementonfloatingice'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['MaskElementonfloatingice'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test425.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test425.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test425.py	(revision 13681)
+@@ -0,0 +1,49 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.initialization.vx[:]=0.
++md.initialization.vy[:]=0.
++md.geometry.bed=-700.-abs(md.mesh.y.reshape(-1,1)-500000.)/1000.
++md.geometry.bathymetry=-700.-abs(md.mesh.y.reshape(-1,1)-500000.)/1000.
++md.geometry.thickness[:]=1300.
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md.surfaceforcings.mass_balance[:]=-150.
++md.transient.isdiagnostic=0
++md.transient.isgroundingline=1
++md.groundingline.migration='SoftMigration'
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Bed1','Surface1','Thickness1','Floatingice1',\
++	'Bed2','Surface2','Thickness2','Floatingice2',\
++	'Bed3','Surface3','Thickness3','Floatingice3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13,\
++	1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['MaskElementonfloatingice'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['MaskElementonfloatingice'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['MaskElementonfloatingice'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test432.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test432.m	(revision 13680)
++++ ../trunk-jpl/test/NightlyRun/test432.m	(revision 13681)
+@@ -4,7 +4,7 @@
+ md=extrude(md,3,2.);
+ md=setflowequation(md,'pattyn','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.timestepping.time_step=0;
++md.timestepping.time_step=0.;
+ md.thermal.isenthalpy=1;
+ md.initialization.waterfraction=zeros(md.mesh.numberofvertices,1);
+ md=solve(md,SteadystateSolutionEnum());
+Index: ../trunk-jpl/test/NightlyRun/test424.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.m	(revision 13680)
++++ ../trunk-jpl/test/NightlyRun/test424.m	(revision 13681)
+@@ -2,14 +2,13 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+-md.initialization.vx(:)=0;
+-md.initialization.vy(:)=0;
+-md.initialization.vel(:)=0;
+-md.geometry.bed=-700-abs(md.mesh.y-500000)/1000;
+-md.geometry.bathymetry=-700-abs(md.mesh.y-500000)/1000;
+-md.geometry.thickness(:)=1000;
++md.initialization.vx(:)=0.;
++md.initialization.vy(:)=0.;
++md.geometry.bed=-700.-abs(md.mesh.y-500000.)/1000.;
++md.geometry.bathymetry=-700.-abs(md.mesh.y-500000.)/1000.;
++md.geometry.thickness(:)=1000.;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+-md.surfaceforcings.mass_balance(:)=100;
++md.surfaceforcings.mass_balance(:)=100.;
+ md.transient.isdiagnostic=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='AgressiveMigration';
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 13681)
+@@ -0,0 +1,50 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',350000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.initialization.vx[:]=0.
++md.initialization.vy[:]=0.
++md.geometry.bed=-700.-abs(md.mesh.y.reshape(-1,1)-500000.)/1000.
++md.geometry.bathymetry=-700.-abs(md.mesh.y.reshape(-1,1)-500000.)/1000.
++md.geometry.thickness[:]=1000.
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md.surfaceforcings.mass_balance[:]=100.
++md.extrude(3,1.);
++md=setflowequation(md,'macayeal','all');
++md.transient.isdiagnostic=0
++md.transient.isgroundingline=1
++md.groundingline.migration='AgressiveMigration'
++md.cluster=generic('name',oshostname(),'np',3)
++
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Bed1','Surface1','Thickness1','Floatingice1',\
++	'Bed2','Surface2','Thickness2','Floatingice2',\
++	'Bed3','Surface3','Thickness3','Floatingice3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
++	1e-11,1e-11,1e-11,1e-13,\
++	1e-10,1e-10,1e-10,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['MaskElementonfloatingice'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['MaskElementonfloatingice'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['MaskElementonfloatingice'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test425.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test425.m	(revision 13680)
++++ ../trunk-jpl/test/NightlyRun/test425.m	(revision 13681)
+@@ -2,14 +2,13 @@
+ md=setmask(md,'../Exp/SquareShelf.exp','');
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=setflowequation(md,'macayeal','all');
+-md.initialization.vx(:)=0;
+-md.initialization.vy(:)=0;
+-md.initialization.vel(:)=0;
+-md.geometry.bed=-700-abs(md.mesh.y-500000)/1000;
+-md.geometry.bathymetry=-700-abs(md.mesh.y-500000)/1000;
+-md.geometry.thickness(:)=1300;
++md.initialization.vx(:)=0.;
++md.initialization.vy(:)=0.;
++md.geometry.bed=-700.-abs(md.mesh.y-500000.)/1000.;
++md.geometry.bathymetry=-700.-abs(md.mesh.y-500000.)/1000.;
++md.geometry.thickness(:)=1300.;
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+-md.surfaceforcings.mass_balance(:)=-150;
++md.surfaceforcings.mass_balance(:)=-150.;
+ md.transient.isdiagnostic=0;
+ md.transient.isgroundingline=1;
+ md.groundingline.migration='SoftMigration';
+Index: ../trunk-jpl/test/NightlyRun/test421.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test421.py	(revision 13681)
+@@ -0,0 +1,28 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Square.exp',180000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(5,1.)
++md=setflowequation(md,'stokes','../Exp/SquareHalfRight.exp','fill','pattyn')
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vz','Vel','Pressure']
++field_tolerances=[1e-08,2e-09,2e-05,1e-09,2e-09]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vz'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13681-13682.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13681-13682.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13681-13682.diff	(revision 13980)
@@ -0,0 +1,111 @@
+Index: ../trunk-jpl/test/NightlyRun/test427.py1
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.py1	(revision 13681)
++++ ../trunk-jpl/test/NightlyRun/test427.py1	(revision 13682)
+@@ -1,51 +0,0 @@
+-import numpy
+-from model import *
+-from EnumDefinitions import *
+-from MatlabFuncs import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from solve import *
+-
+-md=triangle(model(),'../Exp/Square.exp',150000.)
+-md=setmask(md,'../Exp/SquareShelf.exp','')
+-md=parameterize(md,'../Par/SquareSheetShelf.py')
+-md.initialization.vx(:)=0
+-md.initialization.vy(:)=0
+-md.initialization.vel(:)=0
+-md.geometry.bed=-700-abs(md.mesh.y-500000)/1000
+-md.geometry.bathymetry=-700-abs(md.mesh.y-500000)/1000
+-md.geometry.thickness(:)=1300
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness
+-md=setflowequation(md,'macayeal','all')
+-md.extrude(3,1.)
+-
+-md.surfaceforcings.mass_balance(:)=-150
+-md.transient.isdiagnostic=0
+-md.transient.isgroundingline=1
+-md.groundingline.migration='SoftMigration'
+-md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,TransientSolutionEnum())
+-
+-#Fields and tolerances to track changes
+-field_names     =['Bed1','Surface1','Thickness1','Floatingice1',\
+-	'Bed2','Surface2','Thickness2','Floatingice2',\
+-	'Bed3','Surface3','Thickness3','Floatingice3']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
+-	1e-13,1e-13,1e-13,1e-13,\
+-	1e-10,1e-11,1e-10,1e-13]
+-field_values=[\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['MaskElementonfloatingice'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['MaskElementonfloatingice'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['MaskElementonfloatingice'],\
+-	]
+Index: ../trunk-jpl/test/NightlyRun/test424.py1
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.py1	(revision 13681)
++++ ../trunk-jpl/test/NightlyRun/test424.py1	(revision 13682)
+@@ -1,50 +0,0 @@
+-import numpy
+-from model import *
+-from EnumDefinitions import *
+-from MatlabFuncs import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from solve import *
+-
+-md=triangle(model(),'../Exp/Square.exp',150000.)
+-md=setmask(md,'../Exp/SquareShelf.exp','')
+-md=parameterize(md,'../Par/SquareSheetShelf.py')
+-md=setflowequation(md,'macayeal','all')
+-md.initialization.vx(:)=0
+-md.initialization.vy(:)=0
+-md.initialization.vel(:)=0
+-md.geometry.bed=-700.-abs(md.mesh.y-500000.)/1000.
+-md.geometry.bathymetry=-700.-abs(md.mesh.y-500000.)/1000.
+-md.geometry.thickness(:)=1000.
+-md.geometry.surface=md.geometry.bed+md.geometry.thickness
+-md.surfaceforcings.mass_balance(:)=100.
+-md.transient.isdiagnostic=0
+-md.transient.isgroundingline=1
+-md.groundingline.migration='AgressiveMigration'
+-
+-md.cluster=generic('name',oshostname(),'np',3)
+-md=solve(md,TransientSolutionEnum())
+-
+-#Fields and tolerances to track changes
+-field_names     =['Bed1','Surface1','Thickness1','Floatingice1',\
+-	'Bed2','Surface2','Thickness2','Floatingice2',\
+-	'Bed3','Surface3','Thickness3','Floatingice3']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
+-	1e-13,1e-13,1e-13,1e-13,\
+-	1e-13,1e-13,1e-13,1e-13]
+-field_values=[\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['MaskElementonfloatingice'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['MaskElementonfloatingice'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['MaskElementonfloatingice'],\
+-	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13682-13683.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13682-13683.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13682-13683.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/test503.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test503.py	(revision 13682)
++++ ../trunk-jpl/test/NightlyRun/test503.py	(revision 13683)
+@@ -10,7 +10,7 @@
+ md=triangle(model(),'../Exp/Pig.exp',20000.)
+ md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
+ md=parameterize(md,'../Par/Pig.py')
+-md.extrude(3,0.9.)
++md.extrude(3,0.9)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md=solve(md,DiagnosticSolutionEnum())
Index: /issm/oecreview/Archive/13393-13976/ISSM-13683-13684.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13683-13684.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13683-13684.diff	(revision 13980)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 13683)
++++ ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 13684)
+@@ -1,3 +1,6 @@
++%Get full list with:
++%  for i in test*.m; do NAME=$(echo $i | sed -e "s/\.m//"); %if [ ! -f $NAME.py ]; then echo $NAME; fi; done
++
+ test216    needs TriMeshProcessRifts module in meshprocessrifts.py (skip, per Eric, 10/03/12)
+ test218    needs Dakota
+ test234    needs Dakota
+@@ -3,2 +6,13 @@
+ test235    needs Dakota
+ test274    needs TriMeshProcessRifts module in meshprocessrifts.py
++test328    John is working on it
++test329    John is working on it
++test412    needs Dakota
++test413    needs Dakota
++test414    needs Dakota
++test417    needs Dakota
++test418    needs Dakota
++test420    needs Dakota
++test423    needs roundmesh (and not straightforward)
++test511    needs extract
++test613    needs extract
+Index: ../trunk-jpl/test/NightlyRun/test516.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test516.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test516.py	(revision 13684)
+@@ -0,0 +1,28 @@
++import numpy
++from model import *
++from EnumDefinitions import *
++from MatlabFuncs import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/Pig.exp',30000.)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++md.extrude(3,1.)
++md=setflowequation(md,'pattyn','all')
++md.thermal.stabilization=2
++md.cluster=generic('name',oshostname(),'np',3)
++md.timestepping.time_step=0
++md.thermal.penalty_threshold=40
++md=solve(md,ThermalSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Temperature','BasalforcingsMeltingRate']
++field_tolerances=[1e-11,1e-11]
++field_values=[\
++	md.results['ThermalSolution'][1]['Temperature'],\
++	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
++	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13684-13685.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13684-13685.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13684-13685.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13684)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13685)
+@@ -62,7 +62,7 @@
+ AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER
+ 
+ #Matlab part
+-AM_LDFLAGS = -module $(MEXLINK) -shrext ${EXEEXT}
++AM_LDFLAGS = -module $(MEXLINK) -shrext ${EXEEXT}  -L/usr/lib
+ if VERSION
+ AM_LDFLAGS +=
+ else
Index: /issm/oecreview/Archive/13393-13976/ISSM-13685-13686.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13685-13686.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13685-13686.diff	(revision 13980)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/src/m/classes/surfaceforcings.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/surfaceforcings.py	(revision 13685)
++++ ../trunk-jpl/src/m/classes/surfaceforcings.py	(revision 13686)
+@@ -21,6 +21,8 @@
+ 		self.issmbgradients = 0
+ 		self.isdelta18o = 0
+ 		self.hc = float('NaN')
++		self.href = float('NaN')
++		self.smbref = float('NaN')
+ 		self.smb_pos_max = float('NaN')
+ 		self.smb_pos_min = float('NaN')
+ 		self.a_pos = float('NaN')
+@@ -55,6 +57,8 @@
+ 		string="%s\n%s"%(string,fielddisplay(self,'delta18o_surface','surface elevation of the delta18o site, required if pdd is activated and delta18o activated'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'issmbgradients','is smb gradients method activated (0 or 1, default is 0)'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'hc',' elevation of intersection between accumulation and ablation regime required if smb gradients is activated'))
++		string="%s\n%s"%(string,fielddisplay(self,'href',' reference elevation from which deviation is used to calculate SMB adjustment in smb gradients method'))
++		string="%s\n%s"%(string,fielddisplay(self,'smbref',' reference smb from which deviation is calculated in smb gradients method'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'smb_pos_max',' maximum value of positive smb required if smb gradients is activated'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'smb_pos_min',' minimum value of positive smb required if smb gradients is activated'))
+ 		string="%s\n%s"%(string,fielddisplay(self,'a_pos',' intercept of hs - smb regression line for accumulation regime required if smb gradients is activated'))
+@@ -93,6 +97,8 @@
+ 					md = checkfield(md,'surfaceforcings.precipitations_presentday','size',[md.mesh.numberofvertices+1,12],'NaN',1)
+ 			elif self.issmbgradients:
+ 				md = checkfield(md,'surfaceforcings.hc','forcing',1,'NaN',1)
++				md = checkfield(md,'surfaceforcings.href','forcing',1,'NaN',1)
++				md = checkfield(md,'surfaceforcings.smbref','forcing',1,'NaN',1)
+ 				md = checkfield(md,'surfaceforcings.smb_pos_max','forcing',1,'NaN',1)
+ 				md = checkfield(md,'surfaceforcings.smb_pos_min','forcing',1,'NaN',1)
+ 				md = checkfield(md,'surfaceforcings.a_pos','forcing',1,'NaN',1)
+@@ -129,6 +135,8 @@
+ 
+ 		if self.issmbgradients:
+ 			WriteData(fid,'object',self,'fieldname','hc','format','DoubleMat','mattype',1)
++			WriteData(fid,'object',self,'fieldname','href','format','DoubleMat','mattype',1)
++			WriteData(fid,'object',self,'fieldname','smbref','format','DoubleMat','mattype',1)
+ 			WriteData(fid,'object',self,'fieldname','smb_pos_max','format','DoubleMat','mattype',1)
+ 			WriteData(fid,'object',self,'fieldname','smb_pos_min','format','DoubleMat','mattype',1)
+ 			WriteData(fid,'object',self,'fieldname','a_pos','format','DoubleMat','mattype',1)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13686-13687.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13686-13687.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13686-13687.diff	(revision 13980)
@@ -0,0 +1,105 @@
+Index: ../trunk-jpl/src/c/modules/AddExternalResultx/AddExternalResultx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AddExternalResultx/AddExternalResultx.cpp	(revision 13686)
++++ ../trunk-jpl/src/c/modules/AddExternalResultx/AddExternalResultx.cpp	(revision 13687)
+@@ -1,25 +0,0 @@
+-/*!\file:  AddExternalResultx.cpp
+- * \brief: go through our finite elements, and see what results they have stored within. 
+- * Then output them into serialized patch arrays, and dump to disk.
+- */ 
+-
+-#include "./AddExternalResultx.h"
+-#include "../../Container/Container.h"
+-#include "../../io/io.h"
+-#include "../../classes/objects/objects.h"
+-
+-void AddExternalResultx( DataSet* results, int enumtype, IssmDouble value){
+-	/* Add new result in into results*/
+-	results->AddObject(new GenericExternalResult<double>(results->Size()+1,enumtype,reCast<IssmPDouble>(value),1,0));
+-}
+-void AddExternalResultx( DataSet* results, int enumtype, IssmDouble* value, int nrows){
+-	/* Add new result in into results*/
+-	#ifdef _HAVE_ADOLC_
+-	IssmPDouble* value_passive=xNew<IssmPDouble>(nrows);
+-	for(int i=0;i<nrows;i++)value_passive[i]=reCast<IssmPDouble>(value[i]);
+-	results->AddObject(new GenericExternalResult<double*>(results->Size()+1,enumtype,value_passive,nrows,1,1,0));
+-	xDelete<IssmPDouble>(value_passive);
+-	#else
+-	results->AddObject(new GenericExternalResult<double*>(results->Size()+1,enumtype,value,nrows,1,1,0));
+-	#endif
+-}
+Index: ../trunk-jpl/src/c/modules/AddExternalResultx/AddExternalResultx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/AddExternalResultx/AddExternalResultx.h	(revision 13686)
++++ ../trunk-jpl/src/c/modules/AddExternalResultx/AddExternalResultx.h	(revision 13687)
+@@ -1,14 +0,0 @@
+-/*!\file:  AddExternalResultx.h
+- * \brief header file for outputing results
+- */ 
+-
+-#ifndef _ADDEXTERNALRESULTX_H
+-#define _ADDEXTERNALRESULTX_H
+-
+-#include "../../Container/Container.h"
+-
+-/* local prototypes: */
+-void AddExternalResultx(DataSet* results, int type, IssmDouble value);
+-void AddExternalResultx(DataSet* results, int type, IssmDouble* value, int nraws);
+-
+-#endif  /* _ADDEXTERNALRESULT_H */
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13686)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13687)
+@@ -6,7 +6,6 @@
+ #define _ISSM_MODULES_H_
+ 
+ /*Modules: */
+-#include "./AddExternalResultx/AddExternalResultx.h"
+ #include "./AverageFilterx/AverageFilterx.h"
+ #include "./AverageOntoPartitionx/AverageOntoPartitionx.h"
+ #include "./Bamgx/Bamgx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13686)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13687)
+@@ -837,8 +837,6 @@
+ 			./shared/TriMesh/OrderSegments.cpp\
+ 			./shared/TriMesh/SplitMeshForRifts.cpp\
+ 			./shared/TriMesh/TriMeshUtils.cpp\
+-			./modules/AddExternalResultx/AddExternalResultx.h\
+-			./modules/AddExternalResultx/AddExternalResultx.cpp\
+ 			./modules/Chacox/Chacox.h\
+ 			./modules/Chacox/Chacox.cpp\
+ 			./modules/Chacox/input_parse.cpp\
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13686)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13687)
+@@ -51,17 +51,23 @@
+ 		~FemModel();
+ 		void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
+ 
+-		/*Methods: */
++		/*Methods: {{{*/
+ 		void Echo();
+ 		void Solve(void);
+ 		void OutputResults(void);
+ 		void SetStaticComm();
+ 		void PrintBanner(void);
+-
+-		/*Fem: */
++		/*}}}*/
++		/*Fem: {{{*/
+ 		void  SetCurrentConfiguration(int configuration_type);
+ 		void  SetCurrentConfiguration(int configuration_type,int analysis_type);
++		/*}}}*/
++		/*Modules: {{{*/
+ 
++
++
++		/*}}}*/
++
+ };
+ 
+ #endif
Index: /issm/oecreview/Archive/13393-13976/ISSM-13687-13688.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13687-13688.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13687-13688.diff	(revision 13980)
@@ -0,0 +1,176 @@
+Index: ../trunk-jpl/test/NightlyRun/test329.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test329.py	(revision 13688)
+@@ -0,0 +1,73 @@
++import numpy
++import copy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md.extrude(3,1)
++md=setflowequation(md,'pattyn','all')
++md.surfaceforcings.issmbgradients=1
++md.surfaceforcings.smb_pos_max=5000. - 0.00005*md.mesh.x + 0.0001*md.mesh.y
++md.surfaceforcings.smb_pos_min=1250. + 0.00005*md.mesh.x -0.0001*md.mesh.y
++md.surfaceforcings.a_pos=15000. - 0.000051*md.mesh.x + 0.00011*md.mesh.y
++md.surfaceforcings.b_pos=-100. + 0.00005*md.mesh.x - 0.0001*md.mesh.y
++md.surfaceforcings.a_neg=-20000. - 0.00005*md.mesh.x + 0.0001*md.mesh.y
++md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y
++md.surfaceforcings.hc=(md.surfaceforcings.a_pos-md.surfaceforcings.a_neg)/(md.surfaceforcings.b_neg-md.surfaceforcings.b_pos)
++md.surfaceforcings.href=copy.deepcopy(md.geometry.surface).reshape(-1)
++smbref=numpy.empty_like(md.surfaceforcings.hc)
++for i in xrange(numpy.size(md.surfaceforcings.hc,axis=0)):
++	if md.geometry.surface[i]<md.surfaceforcings.hc[i]:
++		smbref[i]=md.surfaceforcings.a_neg[i]+md.surfaceforcings.b_neg[i]*md.geometry.surface[i]
++	else:
++		smbref[i]=md.surfaceforcings.a_pos[i]+md.surfaceforcings.b_pos[i]*md.geometry.surface[i]
++md.surfaceforcings.smbref=smbref
++md.transient.requested_outputs=TotalSmbEnum()
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vz1','Vel1','Bed1','Surface1','Thickness1','Temperature1','SMB1','TotalSmb1','Vx2','Vy2','Vz2','Vel2','Bed2','Surface2','Thickness2','Temperature2','SMB2','TotalSmb1','Vx3','Vy3','Vz3','Vel3','Bed3','Surface3','Thickness3','Temperature3','SMB3','TotalSmb1']
++field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
++	1e-09,5e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vz'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['Temperature'],\
++	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][1]['TotalSmb'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vz'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['Temperature'],\
++	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][2]['TotalSmb'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vz'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['Temperature'],\
++	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][3]['TotalSmb'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test329.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.m	(revision 13687)
++++ ../trunk-jpl/test/NightlyRun/test329.m	(revision 13688)
+@@ -27,9 +27,8 @@
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Bed1','Surface1','Thickness1','Temperature1','SMB1','TotalSmb1','Vx2','Vy2','Vz2','Vel2','Bed2','Surface2','Thickness2','Temperature2','SMB2','TotalSmb1','Vx3','Vy3','Vz3','Vel3','Bed3','Surface3','Thickness3','Temperature3','SMB3','TotalSmb1'};
+ field_tolerances={1e-09,1e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
+-						1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
+-						1e-09,5e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+-
++	1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,...
++	1e-09,5e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 13687)
++++ ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 13688)
+@@ -6,8 +6,6 @@
+ test234    needs Dakota
+ test235    needs Dakota
+ test274    needs TriMeshProcessRifts module in meshprocessrifts.py
+-test328    John is working on it
+-test329    John is working on it
+ test412    needs Dakota
+ test413    needs Dakota
+ test414    needs Dakota
+Index: ../trunk-jpl/test/NightlyRun/test328.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test328.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test328.py	(revision 13688)
+@@ -0,0 +1,64 @@
++import numpy
++import copy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'','')
++md=parameterize(md,'../Par/SquareSheetConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.surfaceforcings.issmbgradients=1
++md.surfaceforcings.smb_pos_max=5000. - 0.00005*md.mesh.x + 0.0001*md.mesh.y
++md.surfaceforcings.smb_pos_min=1250. + 0.00005*md.mesh.x -0.0001*md.mesh.y
++md.surfaceforcings.a_pos=15000. - 0.000051*md.mesh.x + 0.00011*md.mesh.y
++md.surfaceforcings.b_pos=-100. + 0.00005*md.mesh.x - 0.0001*md.mesh.y
++md.surfaceforcings.a_neg=-20000. - 0.00005*md.mesh.x + 0.0001*md.mesh.y
++md.surfaceforcings.b_neg=250. + 0.000051*md.mesh.x - 0.00011*md.mesh.y
++md.surfaceforcings.hc=(md.surfaceforcings.a_pos-md.surfaceforcings.a_neg)/(md.surfaceforcings.b_neg-md.surfaceforcings.b_pos)
++md.transient.requested_outputs=TotalSmbEnum()
++md.surfaceforcings.href=copy.deepcopy(md.geometry.surface).reshape(-1)
++smbref=numpy.empty_like(md.surfaceforcings.hc)
++for i in xrange(numpy.size(md.surfaceforcings.hc,axis=0)):
++	if md.geometry.surface[i]<md.surfaceforcings.hc[i]:
++		smbref[i]=md.surfaceforcings.a_neg[i]+md.surfaceforcings.b_neg[i]*md.geometry.surface[i]
++	else:
++		smbref[i]=md.surfaceforcings.a_pos[i]+md.surfaceforcings.b_pos[i]*md.geometry.surface[i]
++md.surfaceforcings.smbref=smbref
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,TransientSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx1','Vy1','Vel1','Bed1','Surface1','Thickness1','SMB1','TotalSmb1','Vx2','Vy2','Vel2','Bed2','Surface2','Thickness2','SMB2','TotalSmb2','Vx3','Vy3','Vel3','Bed3','Surface3','Thickness3','SMB3','TotalSmb3']
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_values=[\
++	md.results['TransientSolution'][1]['Vx'],\
++	md.results['TransientSolution'][1]['Vy'],\
++	md.results['TransientSolution'][1]['Vel'],\
++	md.results['TransientSolution'][1]['Bed'],\
++	md.results['TransientSolution'][1]['Surface'],\
++	md.results['TransientSolution'][1]['Thickness'],\
++	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][1]['TotalSmb'],\
++	md.results['TransientSolution'][2]['Vx'],\
++	md.results['TransientSolution'][2]['Vy'],\
++	md.results['TransientSolution'][2]['Vel'],\
++	md.results['TransientSolution'][2]['Bed'],\
++	md.results['TransientSolution'][2]['Surface'],\
++	md.results['TransientSolution'][2]['Thickness'],\
++	md.results['TransientSolution'][2]['TotalSmb'],\
++	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][3]['Vx'],\
++	md.results['TransientSolution'][3]['Vy'],\
++	md.results['TransientSolution'][3]['Vel'],\
++	md.results['TransientSolution'][3]['Bed'],\
++	md.results['TransientSolution'][3]['Surface'],\
++	md.results['TransientSolution'][3]['Thickness'],\
++	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
++	md.results['TransientSolution'][3]['TotalSmb'],\
++	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13688-13689.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13688-13689.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13688-13689.diff	(revision 13980)
@@ -0,0 +1,165 @@
+Index: ../trunk-jpl/src/c/solutions/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/transient_core.cpp	(revision 13688)
++++ ../trunk-jpl/src/c/solutions/transient_core.cpp	(revision 13689)
+@@ -120,7 +120,7 @@
+ 			if(VerboseSolution()) _pprintLine_("   computing new thickness");
+ 			prognostic_core(femmodel);
+ 			if(VerboseSolution()) _pprintLine_("   updating vertices positions");
+-			UpdateVertexPositionsx(femmodel->elements, femmodel->nodes,femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters); 
++			femmodel->UpdateVertexPositionsx();
+ 		}
+ 
+ 		if(isgroundingline){
+Index: ../trunk-jpl/src/c/modules/UpdateVertexPositionsx/UpdateVertexPositionsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/UpdateVertexPositionsx/UpdateVertexPositionsx.cpp	(revision 13688)
++++ ../trunk-jpl/src/c/modules/UpdateVertexPositionsx/UpdateVertexPositionsx.cpp	(revision 13689)
+@@ -1,44 +0,0 @@
+-/*!\file UpdateVertexPositionsx
+- * \brief update vertex positions using new geometry defined by new thickness and new bed.
+- */
+-
+-#include "./UpdateVertexPositionsx.h"
+-#include "../modules.h"
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-int UpdateVertexPositionsx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters){
+-
+-	int     i;
+-	Vector<IssmDouble>*     vz        = NULL;
+-	Vertex *vertex    = NULL;
+-	IssmDouble *thickness = NULL;
+-	IssmDouble *bed       = NULL;
+-
+-	/*get vertex vectors for bed and thickness: */
+-	GetVectorFromInputsx(&thickness,elements,nodes, vertices, loads, materials, parameters, ThicknessEnum,VertexEnum);
+-	GetVectorFromInputsx(&bed      ,elements,nodes, vertices, loads, materials, parameters, BedEnum,      VertexEnum);
+-
+-	/*Allocate vector*/
+-	vz=new Vector<IssmDouble>(vertices->NumberOfVertices());
+-
+-	/*Update verices new geometry: */
+-	for (i=0;i<vertices->Size();i++){
+-		vertex=(Vertex*)vertices->GetObjectByOffset(i);
+-		vertex->UpdatePosition(vz,parameters,thickness,bed);
+-	}
+-
+-	/*Assemble mesh velocity*/
+-	vz->Assemble();
+-
+-	/*Update element inputs*/
+-	InputUpdateFromVectorx(elements,nodes,vertices,loads,materials,parameters,vz,VzMeshEnum,VertexEnum);
+-
+-	/*Free ressources:*/
+-	xDelete<IssmDouble>(thickness);
+-	xDelete<IssmDouble>(bed);
+-	xdelete(&vz);
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/modules/UpdateVertexPositionsx/UpdateVertexPositionsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/UpdateVertexPositionsx/UpdateVertexPositionsx.h	(revision 13688)
++++ ../trunk-jpl/src/c/modules/UpdateVertexPositionsx/UpdateVertexPositionsx.h	(revision 13689)
+@@ -1,13 +0,0 @@
+-/*!\file:  UpdateVertexPositionsx.h
+- * \brief header file for updating node positions using new geometry defined by new thickness and new bed.
+- */ 
+-
+-#ifndef _UPDATEVERTEXPOSITIONSXX_H
+-#define _UPDATEVERTEXPOSITIONSXX_H
+-
+-#include "../../Container/Container.h"
+-
+-/* local prototypes: */
+-int UpdateVertexPositionsx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters);
+-
+-#endif  /* _UPDATEVERTEXPOSITIONSXX_H */
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13688)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13689)
+@@ -120,7 +120,6 @@
+ #include "./ThicknessAbsGradientx/ThicknessAbsGradientx.h"
+ #include "./ThicknessAlongGradientx/ThicknessAlongGradientx.h"
+ #include "./ThicknessAcrossGradientx/ThicknessAcrossGradientx.h"
+-#include "./UpdateVertexPositionsx/UpdateVertexPositionsx.h"
+ #include "./UpdateConstraintsx/UpdateConstraintsx.h"
+ #include "./UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.h"
+ #include "./VerticesDofx/VerticesDofx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13688)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13689)
+@@ -289,8 +289,6 @@
+ 					./modules/InputArtificialNoisex/InputArtificialNoisex.cpp\
+ 					./modules/TimeAdaptx/TimeAdaptx.h\
+ 					./modules/TimeAdaptx/TimeAdaptx.cpp\
+-					./modules/UpdateVertexPositionsx/UpdateVertexPositionsx.h\
+-					./modules/UpdateVertexPositionsx/UpdateVertexPositionsx.cpp\
+ 					./modules/ConfigureObjectsx/ConfigureObjectsx.h\
+ 					./modules/ConfigureObjectsx/ConfigureObjectsx.cpp\
+ 					./modules/ComputeBasalStressx/ComputeBasalStressx.h\
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13688)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13689)
+@@ -336,3 +336,40 @@
+ 	this->SetCurrentConfiguration(configuration_type,configuration_type);
+ }
+ /*}}}*/
++
++/*Modules:*/
++/*FUNCTION FemModel::UpdateVertexPositionsx(void){{{*/
++int FemModel::UpdateVertexPositionsx(void){
++
++	int     i;
++	Vector<IssmDouble>*     vz        = NULL;
++	Vertex *vertex    = NULL;
++	IssmDouble *thickness = NULL;
++	IssmDouble *bed       = NULL;
++
++	/*get vertex vectors for bed and thickness: */
++	GetVectorFromInputsx(&thickness,elements,nodes, vertices, loads, materials, parameters, ThicknessEnum,VertexEnum);
++	GetVectorFromInputsx(&bed      ,elements,nodes, vertices, loads, materials, parameters, BedEnum,      VertexEnum);
++
++	/*Allocate vector*/
++	vz=new Vector<IssmDouble>(vertices->NumberOfVertices());
++
++	/*Update verices new geometry: */
++	for (i=0;i<vertices->Size();i++){
++		vertex=(Vertex*)vertices->GetObjectByOffset(i);
++		vertex->UpdatePosition(vz,parameters,thickness,bed);
++	}
++
++	/*Assemble mesh velocity*/
++	vz->Assemble();
++
++	/*Update element inputs*/
++	InputUpdateFromVectorx(elements,nodes,vertices,loads,materials,parameters,vz,VzMeshEnum,VertexEnum);
++
++	/*Free ressources:*/
++	xDelete<IssmDouble>(thickness);
++	xDelete<IssmDouble>(bed);
++	xdelete(&vz);
++	return 1;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13688)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13689)
+@@ -63,9 +63,8 @@
+ 		void  SetCurrentConfiguration(int configuration_type,int analysis_type);
+ 		/*}}}*/
+ 		/*Modules: {{{*/
++		int UpdateVertexPositionsx(void);
+ 
+-
+-
+ 		/*}}}*/
+ 
+ };
Index: /issm/oecreview/Archive/13393-13976/ISSM-13689-13690.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13689-13690.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13689-13690.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/configs/config-macosx64-larour.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-larour.sh	(revision 13689)
++++ ../trunk-jpl/configs/config-macosx64-larour.sh	(revision 13690)
+@@ -18,7 +18,6 @@
+ 	--with-numthreads=8 \
+ 	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
+ 	--with-petsc-arch=$ISSM_ARCH \
+-	--with-cxxoptflags="-L/usr/lib -lbundle1.o"\
+ 	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13690-13691.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13690-13691.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13690-13691.diff	(revision 13980)
@@ -0,0 +1,81 @@
+Index: ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13690)
++++ ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13691)
+@@ -6,23 +6,37 @@
+ #else
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
++#include <stdio.h>
+ #include "../include/include.h"
+ #include "../toolkits/toolkits.h"
+ 
+ COMM EnvironmentInit(int argc,char** argv){
+ 
++	/*Output*/
++	COMM comm = 0;
++
+ 	/*Initialize environments: Petsc, MPI, etc...: */
+-	#ifdef _HAVE_PETSC_
++	#if defined (_HAVE_PETSC_)
+ 	int ierr=PetscInitialize(&argc,&argv,(char*)0,"");  
+ 	if(ierr) _error_("Could not initialize Petsc");
+-	return MPI_COMM_WORLD;
+-	#else
+-	#ifdef _HAVE_MPI_
++	comm = MPI_COMM_WORLD;
++	#elif defined(_HAVE_MPI_)
+ 	MPI_Init(&argc,&argv);
+-	return MPI_COMM_WORLD;
++	comm = MPI_COMM_WORLD;
+ 	#else
+-	return 1; //return bogus number for comm, which does not exist anyway.
++	comm = 1; //bogus number for comm, which does not exist anyway.
+ 	#endif
++
++	/*Print Banner*/
++	int my_rank = 0;
++	#ifdef _HAVE_MPI_
++	MPI_Comm_rank(comm,&my_rank);
+ 	#endif
++	if(!my_rank) printf("\n");
++	if(!my_rank) printf("Ice Sheet System Model (%s) version  %s\n",PACKAGE_NAME,PACKAGE_VERSION);
++	if(!my_rank) printf("(website: %s contact: %s\n",PACKAGE_URL,PACKAGE_BUGREPORT);
++	if(!my_rank) printf("\n");
+ 
++	/*Return communicator*/
++	return comm;
+ }
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13690)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13691)
+@@ -221,16 +221,6 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION FemModel::PrintBanner {{{*/
+-void FemModel::PrintBanner(void){
+-
+-	_pprintLine_("");
+-	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
+-	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
+-	_pprintLine_("");
+-
+-}
+-/*}}}*/
+ /*FUNCTION FemModel::SetStaticComm {{{*/
+ void FemModel::SetStaticComm(void){
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13690)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13691)
+@@ -56,7 +56,6 @@
+ 		void Solve(void);
+ 		void OutputResults(void);
+ 		void SetStaticComm();
+-		void PrintBanner(void);
+ 		/*}}}*/
+ 		/*Fem: {{{*/
+ 		void  SetCurrentConfiguration(int configuration_type);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13691-13692.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13691-13692.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13691-13692.diff	(revision 13980)
@@ -0,0 +1,2439 @@
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 13691)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 13692)
+@@ -169,6 +169,296 @@
+ 		return self
+ 	# }}}
+ 
++	"""
++	function md2 = extract(md,area) % {{{
++		%extract - extract a model according to an Argus contour or flag list
++		%
++		%   This routine extracts a submodel from a bigger model with respect to a given contour
++		%   md must be followed by the corresponding exp file or flags list
++		%   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
++		%   If user wants every element outside the domain to be 
++		%   extract2d, add '~' to the name of the domain file (ex: '~Pattyn.exp');
++		%   an empty string '' will be considered as an empty domain
++		%   a string 'all' will be considered as the entire domain
++		%   add an argument 0 if you do not want the elements to be checked (faster)
++		%
++		%   Usage:
++		%      md2=extract(md,area);
++		%
++		%   Examples:
++		%      md2=extract(md,'Domain.exp');
++		%      md2=extract(md,md.mask.elementonfloatingice);
++		%
++		%   See also: EXTRUDE, COLLAPSE
++
++		%copy model
++		md1=md;
++
++		%some checks
++		if ((nargin~=2) | (nargout~=1)),
++			help extract
++			error('extract error message: bad usage');
++		end
++
++		%get check option
++		if (nargin==3 & varargin{1}==0),
++			checkoutline=0;
++		else
++			checkoutline=1;
++		end
++
++		%get elements that are inside area
++		flag_elem=FlagElements(md1,area);
++		if ~any(flag_elem),
++			error('extracted model is empty');
++		end
++
++		%kick out all elements with 3 dirichlets
++		spc_elem=find(~flag_elem);
++		spc_node=sort(unique(md1.mesh.elements(spc_elem,:)));
++		flag=ones(md1.mesh.numberofvertices,1);
++		flag(spc_node)=0;
++		pos=find(sum(flag(md1.mesh.elements),2)==0);
++		flag_elem(pos)=0;
++
++		%extracted elements and nodes lists
++		pos_elem=find(flag_elem);
++		pos_node=sort(unique(md1.mesh.elements(pos_elem,:)));
++
++		%keep track of some fields
++		numberofvertices1=md1.mesh.numberofvertices;
++		numberofelements1=md1.mesh.numberofelements;
++		numberofvertices2=length(pos_node);
++		numberofelements2=length(pos_elem);
++		flag_node=zeros(numberofvertices1,1);
++		flag_node(pos_node)=1;
++
++		%Create Pelem and Pnode (transform old nodes in new nodes and same thing for the elements)
++		Pelem=zeros(numberofelements1,1);
++		Pelem(pos_elem)=[1:numberofelements2]';
++		Pnode=zeros(numberofvertices1,1);
++		Pnode(pos_node)=[1:numberofvertices2]';
++
++		%renumber the elements (some node won't exist anymore)
++		elements_1=md1.mesh.elements;
++		elements_2=elements_1(pos_elem,:);
++		elements_2(:,1)=Pnode(elements_2(:,1));
++		elements_2(:,2)=Pnode(elements_2(:,2));
++		elements_2(:,3)=Pnode(elements_2(:,3));
++		if md1.mesh.dimension==3,
++			elements_2(:,4)=Pnode(elements_2(:,4));
++			elements_2(:,5)=Pnode(elements_2(:,5));
++			elements_2(:,6)=Pnode(elements_2(:,6));
++		end
++
++		%OK, now create the new model !
++
++		%take every fields from model
++		md2=md1;
++
++		%automatically modify fields
++
++		%loop over model fields
++		model_fields=fields(md1);
++		for i=1:length(model_fields),
++			%get field
++			field=md1.(model_fields{i});
++			fieldsize=size(field);
++			if isobject(field), %recursive call
++				object_fields=fields(md1.(model_fields{i}));
++				for j=1:length(object_fields),
++					%get field
++					field=md1.(model_fields{i}).(object_fields{j});
++					fieldsize=size(field);
++					%size = number of nodes * n
++					if fieldsize(1)==numberofvertices1
++						md2.(model_fields{i}).(object_fields{j})=field(pos_node,:);
++					elseif (fieldsize(1)==numberofvertices1+1)
++						md2.(model_fields{i}).(object_fields{j})=[field(pos_node,:); field(end,:)];
++						%size = number of elements * n
++					elseif fieldsize(1)==numberofelements1
++						md2.(model_fields{i}).(object_fields{j})=field(pos_elem,:);
++					end
++				end
++			else
++				%size = number of nodes * n
++				if fieldsize(1)==numberofvertices1
++					md2.(model_fields{i})=field(pos_node,:);
++				elseif (fieldsize(1)==numberofvertices1+1)
++					md2.(model_fields{i})=[field(pos_node,:); field(end,:)];
++					%size = number of elements * n
++				elseif fieldsize(1)==numberofelements1
++					md2.(model_fields{i})=field(pos_elem,:);
++				end
++			end
++		end
++
++		%modify some specific fields
++
++		%Mesh
++		md2.mesh.numberofelements=numberofelements2;
++		md2.mesh.numberofvertices=numberofvertices2;
++		md2.mesh.elements=elements_2;
++
++		%mesh.uppervertex mesh.lowervertex
++		if md1.mesh.dimension==3
++			md2.mesh.uppervertex=md1.mesh.uppervertex(pos_node);
++			pos=find(~isnan(md2.mesh.uppervertex));
++			md2.mesh.uppervertex(pos)=Pnode(md2.mesh.uppervertex(pos));
++
++			md2.mesh.lowervertex=md1.mesh.lowervertex(pos_node);
++			pos=find(~isnan(md2.mesh.lowervertex));
++			md2.mesh.lowervertex(pos)=Pnode(md2.mesh.lowervertex(pos));
++
++			md2.mesh.upperelements=md1.mesh.upperelements(pos_elem);
++			pos=find(~isnan(md2.mesh.upperelements));
++			md2.mesh.upperelements(pos)=Pelem(md2.mesh.upperelements(pos));
++
++			md2.mesh.lowerelements=md1.mesh.lowerelements(pos_elem);
++			pos=find(~isnan(md2.mesh.lowerelements));
++			md2.mesh.lowerelements(pos)=Pelem(md2.mesh.lowerelements(pos));
++		end
++
++		%Initial 2d mesh 
++		if md1.mesh.dimension==3
++			flag_elem_2d=flag_elem(1:md1.mesh.numberofelements2d);
++			pos_elem_2d=find(flag_elem_2d);
++			flag_node_2d=flag_node(1:md1.mesh.numberofvertices2d);
++			pos_node_2d=find(flag_node_2d);
++
++			md2.mesh.numberofelements2d=length(pos_elem_2d);
++			md2.mesh.numberofvertices2d=length(pos_node_2d);
++			md2.mesh.elements2d=md1.mesh.elements2d(pos_elem_2d,:);
++			md2.mesh.elements2d(:,1)=Pnode(md2.mesh.elements2d(:,1));
++			md2.mesh.elements2d(:,2)=Pnode(md2.mesh.elements2d(:,2));
++			md2.mesh.elements2d(:,3)=Pnode(md2.mesh.elements2d(:,3));
++
++			md2.mesh.x2d=md1.mesh.x(pos_node_2d);
++			md2.mesh.y2d=md1.mesh.y(pos_node_2d);
++		end
++
++		%Edges
++		if size(md2.mesh.edges,2)>1, %do not use ~isnan because there are some NaNs...
++			%renumber first two columns
++			pos=find(md2.mesh.edges(:,4)~=-1);
++			md2.mesh.edges(:  ,1)=Pnode(md2.mesh.edges(:,1)); 
++			md2.mesh.edges(:  ,2)=Pnode(md2.mesh.edges(:,2)); 
++			md2.mesh.edges(:  ,3)=Pelem(md2.mesh.edges(:,3));
++			md2.mesh.edges(pos,4)=Pelem(md2.mesh.edges(pos,4));
++			%remove edges when the 2 vertices are not in the domain.
++			md2.mesh.edges=md2.mesh.edges(find(md2.mesh.edges(:,1) & md2.mesh.edges(:,2)),:);
++			%Replace all zeros by -1 in the last two columns;
++			pos=find(md2.mesh.edges(:,3)==0);
++			md2.mesh.edges(pos,3)=-1;
++			pos=find(md2.mesh.edges(:,4)==0);
++			md2.mesh.edges(pos,4)=-1;
++			%Invert -1 on the third column with last column (Also invert first two columns!!)
++			pos=find(md2.mesh.edges(:,3)==-1);
++			md2.mesh.edges(pos,3)=md2.mesh.edges(pos,4);
++			md2.mesh.edges(pos,4)=-1;
++			values=md2.mesh.edges(pos,2);
++			md2.mesh.edges(pos,2)=md2.mesh.edges(pos,1);
++			md2.mesh.edges(pos,1)=values;
++			%Finally remove edges that do not belong to any element
++			pos=find(md2.mesh.edges(:,3)==-1 & md2.mesh.edges(:,4)==-1);
++			md2.mesh.edges(pos,:)=[];
++		end
++
++		%Penalties
++		if ~isnan(md2.diagnostic.vertex_pairing),
++			for i=1:size(md1.diagnostic.vertex_pairing,1);
++				md2.diagnostic.vertex_pairing(i,:)=Pnode(md1.diagnostic.vertex_pairing(i,:));
++			end
++			md2.diagnostic.vertex_pairing=md2.diagnostic.vertex_pairing(find(md2.diagnostic.vertex_pairing(:,1)),:);
++		end
++		if ~isnan(md2.prognostic.vertex_pairing),
++			for i=1:size(md1.prognostic.vertex_pairing,1);
++				md2.prognostic.vertex_pairing(i,:)=Pnode(md1.prognostic.vertex_pairing(i,:));
++			end
++			md2.prognostic.vertex_pairing=md2.prognostic.vertex_pairing(find(md2.prognostic.vertex_pairing(:,1)),:);
++		end
++
++		%recreate segments
++		if md1.mesh.dimension==2
++			md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices);
++			md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity);
++			md2.mesh.segments=contourenvelope(md2);
++			md2.mesh.vertexonboundary=zeros(numberofvertices2,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
++		else
++			%First do the connectivity for the contourenvelope in 2d
++			md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements2d,md2.mesh.numberofvertices2d);
++			md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements2d,md2.mesh.vertexconnectivity);
++			md2.mesh.segments=contourenvelope(md2);
++			md2.mesh.vertexonboundary=zeros(numberofvertices2/md2.mesh.numberoflayers,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
++			md2.mesh.vertexonboundary=repmat(md2.mesh.vertexonboundary,md2.mesh.numberoflayers,1);
++			%Then do it for 3d as usual
++			md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices);
++			md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity);
++		end
++
++		%Boundary conditions: Dirichlets on new boundary
++		%Catch the elements that have not been extracted
++		orphans_elem=find(~flag_elem);
++		orphans_node=unique(md1.mesh.elements(orphans_elem,:))';
++		%Figure out which node are on the boundary between md2 and md1
++		nodestoflag1=intersect(orphans_node,pos_node);
++		nodestoflag2=Pnode(nodestoflag1);
++		if numel(md1.diagnostic.spcvx)>1 & numel(md1.diagnostic.spcvy)>2 & numel(md1.diagnostic.spcvz)>2,
++			if numel(md1.inversion.vx_obs)>1 & numel(md1.inversion.vy_obs)>1
++				md2.diagnostic.spcvx(nodestoflag2)=md2.inversion.vx_obs(nodestoflag2); 
++				md2.diagnostic.spcvy(nodestoflag2)=md2.inversion.vy_obs(nodestoflag2);
++			else
++				md2.diagnostic.spcvx(nodestoflag2)=NaN;
++				md2.diagnostic.spcvy(nodestoflag2)=NaN;
++				disp(' ')
++				disp('!! extract warning: spc values should be checked !!')
++				disp(' ')
++			end
++			%put 0 for vz
++			md2.diagnostic.spcvz(nodestoflag2)=0;
++		end
++		if ~isnan(md1.thermal.spctemperature),
++			md2.thermal.spctemperature(nodestoflag2,1)=1;
++		end
++
++		%Diagnostic
++		if ~isnan(md2.diagnostic.icefront)
++			md2.diagnostic.icefront(:,1)=Pnode(md1.diagnostic.icefront(:,1)); 
++			md2.diagnostic.icefront(:,2)=Pnode(md1.diagnostic.icefront(:,2)); 
++			md2.diagnostic.icefront(:,end-1)=Pelem(md1.diagnostic.icefront(:,end-1));
++			if md1.mesh.dimension==3
++				md2.diagnostic.icefront(:,3)=Pnode(md1.diagnostic.icefront(:,3)); 
++				md2.diagnostic.icefront(:,4)=Pnode(md1.diagnostic.icefront(:,4)); 
++			end
++			md2.diagnostic.icefront=md2.diagnostic.icefront(find(md2.diagnostic.icefront(:,1) & md2.diagnostic.icefront(:,2) & md2.diagnostic.icefront(:,end)),:);
++		end
++
++		%Results fields
++		if isstruct(md1.results),
++			md2.results=struct();
++			solutionfields=fields(md1.results);
++			for i=1:length(solutionfields),
++				%get subfields
++				solutionsubfields=fields(md1.results.(solutionfields{i}));
++				for j=1:length(solutionsubfields),
++					field=md1.results.(solutionfields{i}).(solutionsubfields{j});
++					if length(field)==numberofvertices1,
++						md2.results.(solutionfields{i}).(solutionsubfields{j})=field(pos_node);
++					elseif length(field)==numberofelements1,
++						md2.results.(solutionfields{i}).(solutionsubfields{j})=field(pos_elem);
++					else
++						md2.results.(solutionfields{i}).(solutionsubfields{j})=field;
++					end
++				end
++			end
++		end
++
++		%Keep track of pos_node and pos_elem
++		md2.mesh.extractedvertices=pos_node;
++		md2.mesh.extractedelements=pos_elem;
++	end % }}}
++	"""
++
+ 	def extrude(md,*args):    # {{{
+ 		"""
+ 		EXTRUDE - vertically extrude a 2d mesh
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 13691)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 13692)
+@@ -4,1120 +4,1120 @@
+ %      md = model(varargin)
+ 
+ classdef model
+-    properties (SetAccess=public) %Model fields
+-		 % {{{
+-		 %Careful here: no other class should be used as default value this is a bug of matlab
+-		 mesh             = 0;
+-		 mask             = 0;
++	properties (SetAccess=public) %Model fields
++		% {{{
++		%Careful here: no other class should be used as default value this is a bug of matlab
++		mesh             = 0;
++		mask             = 0;
+ 
+-		 geometry         = 0;
+-		 constants        = 0;
+-		 surfaceforcings  = 0;
+-		 basalforcings    = 0;
+-		 materials        = 0;
+-		 friction         = 0;
+-		 flowequation     = 0;
+-		 timestepping     = 0;
+-		 initialization   = 0;
+-		 rifts            = 0;
++		geometry         = 0;
++		constants        = 0;
++		surfaceforcings  = 0;
++		basalforcings    = 0;
++		materials        = 0;
++		friction         = 0;
++		flowequation     = 0;
++		timestepping     = 0;
++		initialization   = 0;
++		rifts            = 0;
+ 
+-		 debug            = 0;
+-		 verbose          = 0;
+-		 settings         = 0;
+-		 solver           = 0;
+-		 cluster          = 0;
++		debug            = 0;
++		verbose          = 0;
++		settings         = 0;
++		solver           = 0;
++		cluster          = 0;
+ 
+-		 balancethickness = 0;
+-		 diagnostic       = 0;
+-		 groundingline    = 0;
+-		 hydrology        = 0;
+-		 prognostic       = 0;
+-		 thermal          = 0;
+-		 steadystate      = 0;
+-		 transient        = 0;
++		balancethickness = 0;
++		diagnostic       = 0;
++		groundingline    = 0;
++		hydrology        = 0;
++		prognostic       = 0;
++		thermal          = 0;
++		steadystate      = 0;
++		transient        = 0;
+ 
+-		 autodiff         = 0;
+-		 flaim            = 0;
+-		 inversion        = 0;
+-		 qmu              = 0;
++		autodiff         = 0;
++		flaim            = 0;
++		inversion        = 0;
++		qmu              = 0;
+ 
+-		 results          = 0;
+-		 radaroverlay     = 0;
+-		 miscellaneous    = 0;
+-		 private          = 0;
++		results          = 0;
++		radaroverlay     = 0;
++		miscellaneous    = 0;
++		private          = 0;
+ 
+-		 %}}}
+-	 end
+-	 methods (Static)
+-		 function md = loadobj(md) % {{{
+-			 % This function is directly called by matlab when a model object is
+-			 % loaded. If the input is a struct it is an old version of model and
+-			 % old fields must be recovered (make sure they are in the deprecated
+-			 % model properties)
++		%}}}
++	end
++	methods (Static)
++		function md = loadobj(md) % {{{
++			% This function is directly called by matlab when a model object is
++			% loaded. If the input is a struct it is an old version of model and
++			% old fields must be recovered (make sure they are in the deprecated
++			% model properties)
+ 
+-			 if verLessThan('matlab','7.9'),
+-				 disp('Warning: your matlab version is old and there is a risk that load does not work correctly');
+-				 disp('         if the model is not loaded correctly, rename temporarily loadobj so that matlab does not use it');
++			if verLessThan('matlab','7.9'),
++				disp('Warning: your matlab version is old and there is a risk that load does not work correctly');
++				disp('         if the model is not loaded correctly, rename temporarily loadobj so that matlab does not use it');
+ 
+-				 % This is a Matlab bug: all the fields of md have their default value
+-				 % Example of error message:
+-				 % Warning: Error loading an object of class 'model':
+-				 % Undefined function or method 'exist' for input arguments of type 'cell'
+-				 %
+-				 % This has been fixed in MATLAB 7.9 (R2009b) and later versions
+-			 end
++				% This is a Matlab bug: all the fields of md have their default value
++				% Example of error message:
++				% Warning: Error loading an object of class 'model':
++				% Undefined function or method 'exist' for input arguments of type 'cell'
++				%
++				% This has been fixed in MATLAB 7.9 (R2009b) and later versions
++			end
+ 
+-			 if isstruct(md)
+-				 disp('Recovering model object from a previous version');
+-				 md = structtomodel(model,md);
+-			 end
++			if isstruct(md)
++				disp('Recovering model object from a previous version');
++				md = structtomodel(model,md);
++			end
+ 
+-			 %2012 August 4th
+-			 if isa(md.materials,'materials'),
+-				 disp('Recovering old materials');
+-				 if numel(md.materials.rheology_Z)==1 & isnan(md.materials.rheology_Z),
+-					 md.materials=matice(md.materials);
+-				 else
+-					 md.materials=matdamageice(md.materials);
+-				 end
+-			 end
++			%2012 August 4th
++			if isa(md.materials,'materials'),
++				disp('Recovering old materials');
++				if numel(md.materials.rheology_Z)==1 & isnan(md.materials.rheology_Z),
++					md.materials=matice(md.materials);
++				else
++					md.materials=matdamageice(md.materials);
++				end
++			end
+ 
+-		 end% }}}
+-	 end
+-	 methods
+-		 function md = model(varargin) % {{{
++		end% }}}
++	end
++	methods
++		function md = model(varargin) % {{{
+ 
+-			 switch nargin
+-				 case 0
+-					 md=setdefaultparameters(md);
+-				 otherwise
+-					 error('model constructor error message: 0 of 1 argument only in input.');
+-				 end
+-		 end
+-		 %}}}
+-		 function md = checkmessage(md,string) % {{{
+-			 if(nargout~=1) error('wrong usage, model must be an output'); end
+-			 disp(['model not consistent: ' string]);
+-			 md.private.isconsistent=false;
+-		 end
+-		 %}}}
+-		 function md = collapse(md)% {{{
+-			 %COLLAPSE - collapses a 3d mesh into a 2d mesh
+-			 %
+-			 %   This routine collapses a 3d model into a 2d model
+-			 %   and collapses all the fileds of the 3d model by
+-			 %   taking their depth-averaged values
+-			 %
+-			 %   Usage:
+-			 %      md=collapse(md)
+-			 %
+-			 %   See also: EXTRUDE, MODELEXTRACT
++			switch nargin
++				case 0
++					md=setdefaultparameters(md);
++				otherwise
++					error('model constructor error message: 0 of 1 argument only in input.');
++				end
++		end
++		%}}}
++		function md = checkmessage(md,string) % {{{
++			if(nargout~=1) error('wrong usage, model must be an output'); end
++			disp(['model not consistent: ' string]);
++			md.private.isconsistent=false;
++		end
++		%}}}
++		function md = collapse(md)% {{{
++			%COLLAPSE - collapses a 3d mesh into a 2d mesh
++			%
++			%   This routine collapses a 3d model into a 2d model
++			%   and collapses all the fileds of the 3d model by
++			%   taking their depth-averaged values
++			%
++			%   Usage:
++			%      md=collapse(md)
++			%
++			%   See also: EXTRUDE, MODELEXTRACT
+ 
+-			 %Check that the model is really a 3d model
+-			 if ~md.mesh.dimension==3,
+-				 error('collapse error message: only 3d mesh can be collapsed')
+-			 end
++			%Check that the model is really a 3d model
++			if ~md.mesh.dimension==3,
++				error('collapse error message: only 3d mesh can be collapsed')
++			end
+ 
+-			 %Start with changing alle the fields from the 3d mesh 
++			%Start with changing alle the fields from the 3d mesh 
+ 
+-			 %drag is limited to nodes that are on the bedrock.
+-			 md.friction.coefficient=project2d(md,md.friction.coefficient,1);
++			%drag is limited to nodes that are on the bedrock.
++			md.friction.coefficient=project2d(md,md.friction.coefficient,1);
+ 
+-			 %p and q (same deal, except for element that are on the bedrock: )
+-			 md.friction.p=project2d(md,md.friction.p,1);
+-			 md.friction.q=project2d(md,md.friction.q,1);
++			%p and q (same deal, except for element that are on the bedrock: )
++			md.friction.p=project2d(md,md.friction.p,1);
++			md.friction.q=project2d(md,md.friction.q,1);
+ 
+-			 %observations
+-			 if ~isnan(md.inversion.vx_obs), md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers); end;
+-			 if ~isnan(md.inversion.vy_obs), md.inversion.vy_obs=project2d(md,md.inversion.vy_obs,md.mesh.numberoflayers); end;
+-			 if ~isnan(md.inversion.vel_obs), md.inversion.vel_obs=project2d(md,md.inversion.vel_obs,md.mesh.numberoflayers); end;
+-			 if ~isnan(md.inversion.cost_functions_coefficients), md.inversion.cost_functions_coefficients=project2d(md,md.inversion.cost_functions_coefficients,md.mesh.numberoflayers); end;
+-			 if numel(md.inversion.min_parameters)>1, md.inversion.min_parameters=project2d(md,md.inversion.min_parameters,md.mesh.numberoflayers); end;
+-			 if numel(md.inversion.max_parameters)>1, md.inversion.max_parameters=project2d(md,md.inversion.max_parameters,md.mesh.numberoflayers); end;
+-			 if ~isnan(md.surfaceforcings.mass_balance),
+-				 md.surfaceforcings.mass_balance=project2d(md,md.surfaceforcings.mass_balance,md.mesh.numberoflayers); 
+-			 end;
+-			 if ~isnan(md.balancethickness.thickening_rate), md.balancethickness.thickening_rate=project2d(md,md.balancethickness.thickening_rate,md.mesh.numberoflayers); end;
++			%observations
++			if ~isnan(md.inversion.vx_obs), md.inversion.vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers); end;
++			if ~isnan(md.inversion.vy_obs), md.inversion.vy_obs=project2d(md,md.inversion.vy_obs,md.mesh.numberoflayers); end;
++			if ~isnan(md.inversion.vel_obs), md.inversion.vel_obs=project2d(md,md.inversion.vel_obs,md.mesh.numberoflayers); end;
++			if ~isnan(md.inversion.cost_functions_coefficients), md.inversion.cost_functions_coefficients=project2d(md,md.inversion.cost_functions_coefficients,md.mesh.numberoflayers); end;
++			if numel(md.inversion.min_parameters)>1, md.inversion.min_parameters=project2d(md,md.inversion.min_parameters,md.mesh.numberoflayers); end;
++			if numel(md.inversion.max_parameters)>1, md.inversion.max_parameters=project2d(md,md.inversion.max_parameters,md.mesh.numberoflayers); end;
++			if ~isnan(md.surfaceforcings.mass_balance),
++				md.surfaceforcings.mass_balance=project2d(md,md.surfaceforcings.mass_balance,md.mesh.numberoflayers); 
++			end;
++			if ~isnan(md.balancethickness.thickening_rate), md.balancethickness.thickening_rate=project2d(md,md.balancethickness.thickening_rate,md.mesh.numberoflayers); end;
+ 
+-			 %results
+-			 if ~isnan(md.initialization.vx),md.initialization.vx=DepthAverage(md,md.initialization.vx);end;
+-			 if ~isnan(md.initialization.vy),md.initialization.vy=DepthAverage(md,md.initialization.vy);end;
+-			 if ~isnan(md.initialization.vz),md.initialization.vz=DepthAverage(md,md.initialization.vz);end;
+-			 if ~isnan(md.initialization.vel),md.initialization.vel=DepthAverage(md,md.initialization.vel);end;
+-			 if ~isnan(md.initialization.temperature),md.initialization.temperature=DepthAverage(md,md.initialization.temperature);end;
++			%results
++			if ~isnan(md.initialization.vx),md.initialization.vx=DepthAverage(md,md.initialization.vx);end;
++			if ~isnan(md.initialization.vy),md.initialization.vy=DepthAverage(md,md.initialization.vy);end;
++			if ~isnan(md.initialization.vz),md.initialization.vz=DepthAverage(md,md.initialization.vz);end;
++			if ~isnan(md.initialization.vel),md.initialization.vel=DepthAverage(md,md.initialization.vel);end;
++			if ~isnan(md.initialization.temperature),md.initialization.temperature=DepthAverage(md,md.initialization.temperature);end;
+ 
+-			 %bedinfo and surface info
+-			 md.mesh.elementonbed=ones(md.mesh.numberofelements2d,1);
+-			 md.mesh.elementonsurface=ones(md.mesh.numberofelements2d,1);
+-			 md.mesh.vertexonbed=ones(md.mesh.numberofvertices2d,1);
+-			 md.mesh.vertexonsurface=ones(md.mesh.numberofvertices2d,1);
++			%bedinfo and surface info
++			md.mesh.elementonbed=ones(md.mesh.numberofelements2d,1);
++			md.mesh.elementonsurface=ones(md.mesh.numberofelements2d,1);
++			md.mesh.vertexonbed=ones(md.mesh.numberofvertices2d,1);
++			md.mesh.vertexonsurface=ones(md.mesh.numberofvertices2d,1);
+ 
+-			 %elementstype
+-			 if ~isnan(md.flowequation.element_equation)
+-				 md.flowequation.element_equation=project2d(md,md.flowequation.element_equation,1);
+-				 md.flowequation.vertex_equation=project2d(md,md.flowequation.vertex_equation,1);
+-				 md.flowequation.bordermacayeal=project2d(md,md.flowequation.bordermacayeal,1);
+-				 md.flowequation.borderpattyn=project2d(md,md.flowequation.borderpattyn,1);
+-				 md.flowequation.borderstokes=project2d(md,md.flowequation.borderstokes,1);
+-			 end	
++			%elementstype
++			if ~isnan(md.flowequation.element_equation)
++				md.flowequation.element_equation=project2d(md,md.flowequation.element_equation,1);
++				md.flowequation.vertex_equation=project2d(md,md.flowequation.vertex_equation,1);
++				md.flowequation.bordermacayeal=project2d(md,md.flowequation.bordermacayeal,1);
++				md.flowequation.borderpattyn=project2d(md,md.flowequation.borderpattyn,1);
++				md.flowequation.borderstokes=project2d(md,md.flowequation.borderstokes,1);
++			end	
+ 
+-			 %boundary conditions
+-			 md.diagnostic.spcvx=project2d(md,md.diagnostic.spcvx,md.mesh.numberoflayers);
+-			 md.diagnostic.spcvy=project2d(md,md.diagnostic.spcvy,md.mesh.numberoflayers);
+-			 md.diagnostic.spcvz=project2d(md,md.diagnostic.spcvz,md.mesh.numberoflayers);
+-			 md.diagnostic.referential=project2d(md,md.diagnostic.referential,md.mesh.numberoflayers);
+-			 md.prognostic.spcthickness=project2d(md,md.prognostic.spcthickness,md.mesh.numberoflayers);
+-			 md.thermal.spctemperature=project2d(md,md.thermal.spctemperature,md.mesh.numberoflayers);
++			%boundary conditions
++			md.diagnostic.spcvx=project2d(md,md.diagnostic.spcvx,md.mesh.numberoflayers);
++			md.diagnostic.spcvy=project2d(md,md.diagnostic.spcvy,md.mesh.numberoflayers);
++			md.diagnostic.spcvz=project2d(md,md.diagnostic.spcvz,md.mesh.numberoflayers);
++			md.diagnostic.referential=project2d(md,md.diagnostic.referential,md.mesh.numberoflayers);
++			md.prognostic.spcthickness=project2d(md,md.prognostic.spcthickness,md.mesh.numberoflayers);
++			md.thermal.spctemperature=project2d(md,md.thermal.spctemperature,md.mesh.numberoflayers);
+ 
+-			 %Extrusion of Neumann BC
+-			 if ~isnan(md.diagnostic.icefront),
+-				 numberofneumann2d=size(md.diagnostic.icefront,1)/(md.mesh.numberoflayers-1);
+-				 md.diagnostic.icefront=[md.diagnostic.icefront(1:numberofneumann2d,1:2) md.diagnostic.icefront(1:numberofneumann2d,5:6)]; %Add two columns on the first layer 
+-			 end
++			%Extrusion of Neumann BC
++			if ~isnan(md.diagnostic.icefront),
++				numberofneumann2d=size(md.diagnostic.icefront,1)/(md.mesh.numberoflayers-1);
++				md.diagnostic.icefront=[md.diagnostic.icefront(1:numberofneumann2d,1:2) md.diagnostic.icefront(1:numberofneumann2d,5:6)]; %Add two columns on the first layer 
++			end
+ 
+-			 %materials
+-			 md.materials.rheology_B=DepthAverage(md,md.materials.rheology_B);
+-			 md.materials.rheology_n=project2d(md,md.materials.rheology_n,1);
+-			 if isa(md.materials,'matdamageice')
+-				 md.materials.rheology_Z=DepthAverage(md,md.materials.rheology_Z);
+-			 end
++			%materials
++			md.materials.rheology_B=DepthAverage(md,md.materials.rheology_B);
++			md.materials.rheology_n=project2d(md,md.materials.rheology_n,1);
++			if isa(md.materials,'matdamageice')
++				md.materials.rheology_Z=DepthAverage(md,md.materials.rheology_Z);
++			end
+ 
+-			 %special for thermal modeling:
+-			 md.basalforcings.melting_rate=project2d(md,md.basalforcings.melting_rate,1); 
+-			 md.basalforcings.geothermalflux=project2d(md,md.basalforcings.geothermalflux,1); %bedrock only gets geothermal flux
++			%special for thermal modeling:
++			md.basalforcings.melting_rate=project2d(md,md.basalforcings.melting_rate,1); 
++			md.basalforcings.geothermalflux=project2d(md,md.basalforcings.geothermalflux,1); %bedrock only gets geothermal flux
+ 
+-			 %update of connectivity matrix
+-			 md.mesh.average_vertex_connectivity=25;
++			%update of connectivity matrix
++			md.mesh.average_vertex_connectivity=25;
+ 
+-			 %Collapse the mesh
+-			 nodes2d=md.mesh.numberofvertices2d;
+-			 elements2d=md.mesh.numberofelements2d;
++			%Collapse the mesh
++			nodes2d=md.mesh.numberofvertices2d;
++			elements2d=md.mesh.numberofelements2d;
+ 
+-			 %parameters
+-			 md.geometry.surface=project2d(md,md.geometry.surface,1);
+-			 md.geometry.thickness=project2d(md,md.geometry.thickness,1);
+-			 md.geometry.bed=project2d(md,md.geometry.bed,1);
+-			 md.geometry.bathymetry=project2d(md,md.geometry.bathymetry,1);
+-			 md.mesh.vertexonboundary=project2d(md,md.mesh.vertexonboundary,1);
+-			 md.mesh.elementconnectivity=project2d(md,md.mesh.elementconnectivity,1);
+-			 md.mask.elementonfloatingice=project2d(md,md.mask.elementonfloatingice,1);
+-			 md.mask.vertexonfloatingice=project2d(md,md.mask.vertexonfloatingice,1);
+-			 md.mask.elementongroundedice=project2d(md,md.mask.elementongroundedice,1);
+-			 md.mask.vertexongroundedice=project2d(md,md.mask.vertexongroundedice,1);
+-			 md.mask.elementonwater=project2d(md,md.mask.elementonwater,1);
+-			 md.mask.vertexonwater=project2d(md,md.mask.vertexonwater,1);
++			%parameters
++			md.geometry.surface=project2d(md,md.geometry.surface,1);
++			md.geometry.thickness=project2d(md,md.geometry.thickness,1);
++			md.geometry.bed=project2d(md,md.geometry.bed,1);
++			md.geometry.bathymetry=project2d(md,md.geometry.bathymetry,1);
++			md.mesh.vertexonboundary=project2d(md,md.mesh.vertexonboundary,1);
++			md.mesh.elementconnectivity=project2d(md,md.mesh.elementconnectivity,1);
++			md.mask.elementonfloatingice=project2d(md,md.mask.elementonfloatingice,1);
++			md.mask.vertexonfloatingice=project2d(md,md.mask.vertexonfloatingice,1);
++			md.mask.elementongroundedice=project2d(md,md.mask.elementongroundedice,1);
++			md.mask.vertexongroundedice=project2d(md,md.mask.vertexongroundedice,1);
++			md.mask.elementonwater=project2d(md,md.mask.elementonwater,1);
++			md.mask.vertexonwater=project2d(md,md.mask.vertexonwater,1);
+ 
+-			 %lat long
+-			 if numel(md.mesh.lat) ==md.mesh.numberofvertices,  md.mesh.lat=project2d(md,md.mesh.lat,1); end
+-			 if numel(md.mesh.long)==md.mesh.numberofvertices, md.mesh.long=project2d(md,md.mesh.long,1); end
++			%lat long
++			if numel(md.mesh.lat) ==md.mesh.numberofvertices,  md.mesh.lat=project2d(md,md.mesh.lat,1); end
++			if numel(md.mesh.long)==md.mesh.numberofvertices, md.mesh.long=project2d(md,md.mesh.long,1); end
+ 
+-			 %Initialize with the 2d mesh
+-			 md.mesh.x=md.mesh.x2d;
+-			 md.mesh.y=md.mesh.y2d;
+-			 md.mesh.z=zeros(size(md.mesh.x2d));
+-			 md.mesh.numberofvertices=md.mesh.numberofvertices2d;
+-			 md.mesh.numberofelements=md.mesh.numberofelements2d;
+-			 md.mesh.elements=md.mesh.elements2d;
++			%Initialize with the 2d mesh
++			md.mesh.x=md.mesh.x2d;
++			md.mesh.y=md.mesh.y2d;
++			md.mesh.z=zeros(size(md.mesh.x2d));
++			md.mesh.numberofvertices=md.mesh.numberofvertices2d;
++			md.mesh.numberofelements=md.mesh.numberofelements2d;
++			md.mesh.elements=md.mesh.elements2d;
+ 
+-			 %Keep a trace of lower and upper nodes
+-			 md.mesh.lowervertex=NaN;
+-			 md.mesh.uppervertex=NaN;
+-			 md.mesh.lowerelements=NaN;
+-			 md.mesh.upperelements=NaN;
++			%Keep a trace of lower and upper nodes
++			md.mesh.lowervertex=NaN;
++			md.mesh.uppervertex=NaN;
++			md.mesh.lowerelements=NaN;
++			md.mesh.upperelements=NaN;
+ 
+-			 %Remove old mesh 
+-			 md.mesh.x2d=NaN;
+-			 md.mesh.y2d=NaN;
+-			 md.mesh.elements2d=NaN;
+-			 md.mesh.numberofelements2d=md.mesh.numberofelements;
+-			 md.mesh.numberofvertices2d=md.mesh.numberofvertices;
+-			 md.mesh.numberoflayers=0;
++			%Remove old mesh 
++			md.mesh.x2d=NaN;
++			md.mesh.y2d=NaN;
++			md.mesh.elements2d=NaN;
++			md.mesh.numberofelements2d=md.mesh.numberofelements;
++			md.mesh.numberofvertices2d=md.mesh.numberofvertices;
++			md.mesh.numberoflayers=0;
+ 
+-			 %Update mesh type
+-			 md.mesh.dimension=2;
+-		 end % }}}
+-		 function md2 = extract(md,area) % {{{
+-			 %extract - extract a model according to an Argus contour or flag list
+-			 %
+-			 %   This routine extracts a submodel from a bigger model with respect to a given contour
+-			 %   md must be followed by the corresponding exp file or flags list
+-			 %   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
+-			 %   If user wants every element outside the domain to be 
+-			 %   extract2d, add '~' to the name of the domain file (ex: '~Pattyn.exp');
+-			 %   an empty string '' will be considered as an empty domain
+-			 %   a string 'all' will be considered as the entire domain
+-			 %   add an argument 0 if you do not want the elements to be checked (faster)
+-			 %
+-			 %   Usage:
+-			 %      md2=extract(md,area);
+-			 %
+-			 %   Examples:
+-			 %      md2=extract(md,'Domain.exp');
+-			 %      md2=extract(md,md.mask.elementonfloatingice);
+-			 %
+-			 %   See also: EXTRUDE, COLLAPSE
++			%Update mesh type
++			md.mesh.dimension=2;
++		end % }}}
++		function md2 = extract(md,area) % {{{
++			%extract - extract a model according to an Argus contour or flag list
++			%
++			%   This routine extracts a submodel from a bigger model with respect to a given contour
++			%   md must be followed by the corresponding exp file or flags list
++			%   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
++			%   If user wants every element outside the domain to be 
++			%   extract2d, add '~' to the name of the domain file (ex: '~Pattyn.exp');
++			%   an empty string '' will be considered as an empty domain
++			%   a string 'all' will be considered as the entire domain
++			%   add an argument 0 if you do not want the elements to be checked (faster)
++			%
++			%   Usage:
++			%      md2=extract(md,area);
++			%
++			%   Examples:
++			%      md2=extract(md,'Domain.exp');
++			%      md2=extract(md,md.mask.elementonfloatingice);
++			%
++			%   See also: EXTRUDE, COLLAPSE
+ 
+-			 %copy model
+-			 md1=md;
++			%copy model
++			md1=md;
+ 
+-			 %some checks
+-			 if ((nargin~=2) | (nargout~=1)),
+-				 help extract
+-				 error('extract error message: bad usage');
+-			 end
++			%some checks
++			if ((nargin~=2) | (nargout~=1)),
++				help extract
++				error('extract error message: bad usage');
++			end
+ 
+-			 %get check option
+-			 if (nargin==3 & varargin{1}==0),
+-				 checkoutline=0;
+-			 else
+-				 checkoutline=1;
+-			 end
++			%get check option
++			if (nargin==3 & varargin{1}==0),
++				checkoutline=0;
++			else
++				checkoutline=1;
++			end
+ 
+-			 %get elements that are inside area
+-			 flag_elem=FlagElements(md1,area);
+-			 if ~any(flag_elem),
+-				 error('extracted model is empty');
+-			 end
++			%get elements that are inside area
++			flag_elem=FlagElements(md1,area);
++			if ~any(flag_elem),
++				error('extracted model is empty');
++			end
+ 
+-			 %kick out all elements with 3 dirichlets
+-			 spc_elem=find(~flag_elem);
+-			 spc_node=sort(unique(md1.mesh.elements(spc_elem,:)));
+-			 flag=ones(md1.mesh.numberofvertices,1);
+-			 flag(spc_node)=0;
+-			 pos=find(sum(flag(md1.mesh.elements),2)==0);
+-			 flag_elem(pos)=0;
++			%kick out all elements with 3 dirichlets
++			spc_elem=find(~flag_elem);
++			spc_node=sort(unique(md1.mesh.elements(spc_elem,:)));
++			flag=ones(md1.mesh.numberofvertices,1);
++			flag(spc_node)=0;
++			pos=find(sum(flag(md1.mesh.elements),2)==0);
++			flag_elem(pos)=0;
+ 
+-			 %extracted elements and nodes lists
+-			 pos_elem=find(flag_elem);
+-			 pos_node=sort(unique(md1.mesh.elements(pos_elem,:)));
++			%extracted elements and nodes lists
++			pos_elem=find(flag_elem);
++			pos_node=sort(unique(md1.mesh.elements(pos_elem,:)));
+ 
+-			 %keep track of some fields
+-			 numberofvertices1=md1.mesh.numberofvertices;
+-			 numberofelements1=md1.mesh.numberofelements;
+-			 numberofvertices2=length(pos_node);
+-			 numberofelements2=length(pos_elem);
+-			 flag_node=zeros(numberofvertices1,1);
+-			 flag_node(pos_node)=1;
++			%keep track of some fields
++			numberofvertices1=md1.mesh.numberofvertices;
++			numberofelements1=md1.mesh.numberofelements;
++			numberofvertices2=length(pos_node);
++			numberofelements2=length(pos_elem);
++			flag_node=zeros(numberofvertices1,1);
++			flag_node(pos_node)=1;
+ 
+-			 %Create Pelem and Pnode (transform old nodes in new nodes and same thing for the elements)
+-			 Pelem=zeros(numberofelements1,1);
+-			 Pelem(pos_elem)=[1:numberofelements2]';
+-			 Pnode=zeros(numberofvertices1,1);
+-			 Pnode(pos_node)=[1:numberofvertices2]';
++			%Create Pelem and Pnode (transform old nodes in new nodes and same thing for the elements)
++			Pelem=zeros(numberofelements1,1);
++			Pelem(pos_elem)=[1:numberofelements2]';
++			Pnode=zeros(numberofvertices1,1);
++			Pnode(pos_node)=[1:numberofvertices2]';
+ 
+-			 %renumber the elements (some node won't exist anymore)
+-			 elements_1=md1.mesh.elements;
+-			 elements_2=elements_1(pos_elem,:);
+-			 elements_2(:,1)=Pnode(elements_2(:,1));
+-			 elements_2(:,2)=Pnode(elements_2(:,2));
+-			 elements_2(:,3)=Pnode(elements_2(:,3));
+-			 if md1.mesh.dimension==3,
+-				 elements_2(:,4)=Pnode(elements_2(:,4));
+-				 elements_2(:,5)=Pnode(elements_2(:,5));
+-				 elements_2(:,6)=Pnode(elements_2(:,6));
+-			 end
++			%renumber the elements (some node won't exist anymore)
++			elements_1=md1.mesh.elements;
++			elements_2=elements_1(pos_elem,:);
++			elements_2(:,1)=Pnode(elements_2(:,1));
++			elements_2(:,2)=Pnode(elements_2(:,2));
++			elements_2(:,3)=Pnode(elements_2(:,3));
++			if md1.mesh.dimension==3,
++				elements_2(:,4)=Pnode(elements_2(:,4));
++				elements_2(:,5)=Pnode(elements_2(:,5));
++				elements_2(:,6)=Pnode(elements_2(:,6));
++			end
+ 
+-			 %OK, now create the new model !
++			%OK, now create the new model !
+ 
+-			 %take every fields from model
+-			 md2=md1;
++			%take every fields from model
++			md2=md1;
+ 
+-			 %automatically modify fields
++			%automatically modify fields
+ 
+-			 %loop over model fields
+-			 model_fields=fields(md1);
+-			 for i=1:length(model_fields),
+-				 %get field
+-				 field=md1.(model_fields{i});
+-				 fieldsize=size(field);
+-				 if isobject(field), %recursive call
+-					 object_fields=fields(md1.(model_fields{i}));
+-					 for j=1:length(object_fields),
+-						 %get field
+-						 field=md1.(model_fields{i}).(object_fields{j});
+-						 fieldsize=size(field);
+-						 %size = number of nodes * n
+-						 if fieldsize(1)==numberofvertices1
+-							 md2.(model_fields{i}).(object_fields{j})=field(pos_node,:);
+-						 elseif (fieldsize(1)==numberofvertices1+1)
+-							 md2.(model_fields{i}).(object_fields{j})=[field(pos_node,:); field(end,:)];
+-							 %size = number of elements * n
+-						 elseif fieldsize(1)==numberofelements1
+-							 md2.(model_fields{i}).(object_fields{j})=field(pos_elem,:);
+-						 end
+-					 end
+-				 else
+-					 %size = number of nodes * n
+-					 if fieldsize(1)==numberofvertices1
+-						 md2.(model_fields{i})=field(pos_node,:);
+-					 elseif (fieldsize(1)==numberofvertices1+1)
+-						 md2.(model_fields{i})=[field(pos_node,:); field(end,:)];
+-						 %size = number of elements * n
+-					 elseif fieldsize(1)==numberofelements1
+-						 md2.(model_fields{i})=field(pos_elem,:);
+-					 end
+-				 end
+-			 end
++			%loop over model fields
++			model_fields=fields(md1);
++			for i=1:length(model_fields),
++				%get field
++				field=md1.(model_fields{i});
++				fieldsize=size(field);
++				if isobject(field), %recursive call
++					object_fields=fields(md1.(model_fields{i}));
++					for j=1:length(object_fields),
++						%get field
++						field=md1.(model_fields{i}).(object_fields{j});
++						fieldsize=size(field);
++						%size = number of nodes * n
++						if fieldsize(1)==numberofvertices1
++							md2.(model_fields{i}).(object_fields{j})=field(pos_node,:);
++						elseif (fieldsize(1)==numberofvertices1+1)
++							md2.(model_fields{i}).(object_fields{j})=[field(pos_node,:); field(end,:)];
++							%size = number of elements * n
++						elseif fieldsize(1)==numberofelements1
++							md2.(model_fields{i}).(object_fields{j})=field(pos_elem,:);
++						end
++					end
++				else
++					%size = number of nodes * n
++					if fieldsize(1)==numberofvertices1
++						md2.(model_fields{i})=field(pos_node,:);
++					elseif (fieldsize(1)==numberofvertices1+1)
++						md2.(model_fields{i})=[field(pos_node,:); field(end,:)];
++						%size = number of elements * n
++					elseif fieldsize(1)==numberofelements1
++						md2.(model_fields{i})=field(pos_elem,:);
++					end
++				end
++			end
+ 
+-			 %modify some specific fields
++			%modify some specific fields
+ 
+-			 %Mesh
+-			 md2.mesh.numberofelements=numberofelements2;
+-			 md2.mesh.numberofvertices=numberofvertices2;
+-			 md2.mesh.elements=elements_2;
++			%Mesh
++			md2.mesh.numberofelements=numberofelements2;
++			md2.mesh.numberofvertices=numberofvertices2;
++			md2.mesh.elements=elements_2;
+ 
+-			 %mesh.uppervertex mesh.lowervertex
+-			 if md1.mesh.dimension==3
+-				 md2.mesh.uppervertex=md1.mesh.uppervertex(pos_node);
+-				 pos=find(~isnan(md2.mesh.uppervertex));
+-				 md2.mesh.uppervertex(pos)=Pnode(md2.mesh.uppervertex(pos));
++			%mesh.uppervertex mesh.lowervertex
++			if md1.mesh.dimension==3
++				md2.mesh.uppervertex=md1.mesh.uppervertex(pos_node);
++				pos=find(~isnan(md2.mesh.uppervertex));
++				md2.mesh.uppervertex(pos)=Pnode(md2.mesh.uppervertex(pos));
+ 
+-				 md2.mesh.lowervertex=md1.mesh.lowervertex(pos_node);
+-				 pos=find(~isnan(md2.mesh.lowervertex));
+-				 md2.mesh.lowervertex(pos)=Pnode(md2.mesh.lowervertex(pos));
++				md2.mesh.lowervertex=md1.mesh.lowervertex(pos_node);
++				pos=find(~isnan(md2.mesh.lowervertex));
++				md2.mesh.lowervertex(pos)=Pnode(md2.mesh.lowervertex(pos));
+ 
+-				 md2.mesh.upperelements=md1.mesh.upperelements(pos_elem);
+-				 pos=find(~isnan(md2.mesh.upperelements));
+-				 md2.mesh.upperelements(pos)=Pelem(md2.mesh.upperelements(pos));
++				md2.mesh.upperelements=md1.mesh.upperelements(pos_elem);
++				pos=find(~isnan(md2.mesh.upperelements));
++				md2.mesh.upperelements(pos)=Pelem(md2.mesh.upperelements(pos));
+ 
+-				 md2.mesh.lowerelements=md1.mesh.lowerelements(pos_elem);
+-				 pos=find(~isnan(md2.mesh.lowerelements));
+-				 md2.mesh.lowerelements(pos)=Pelem(md2.mesh.lowerelements(pos));
+-			 end
++				md2.mesh.lowerelements=md1.mesh.lowerelements(pos_elem);
++				pos=find(~isnan(md2.mesh.lowerelements));
++				md2.mesh.lowerelements(pos)=Pelem(md2.mesh.lowerelements(pos));
++			end
+ 
+-			 %Initial 2d mesh 
+-			 if md1.mesh.dimension==3
+-				 flag_elem_2d=flag_elem(1:md1.mesh.numberofelements2d);
+-				 pos_elem_2d=find(flag_elem_2d);
+-				 flag_node_2d=flag_node(1:md1.mesh.numberofvertices2d);
+-				 pos_node_2d=find(flag_node_2d);
++			%Initial 2d mesh 
++			if md1.mesh.dimension==3
++				flag_elem_2d=flag_elem(1:md1.mesh.numberofelements2d);
++				pos_elem_2d=find(flag_elem_2d);
++				flag_node_2d=flag_node(1:md1.mesh.numberofvertices2d);
++				pos_node_2d=find(flag_node_2d);
+ 
+-				 md2.mesh.numberofelements2d=length(pos_elem_2d);
+-				 md2.mesh.numberofvertices2d=length(pos_node_2d);
+-				 md2.mesh.elements2d=md1.mesh.elements2d(pos_elem_2d,:);
+-				 md2.mesh.elements2d(:,1)=Pnode(md2.mesh.elements2d(:,1));
+-				 md2.mesh.elements2d(:,2)=Pnode(md2.mesh.elements2d(:,2));
+-				 md2.mesh.elements2d(:,3)=Pnode(md2.mesh.elements2d(:,3));
++				md2.mesh.numberofelements2d=length(pos_elem_2d);
++				md2.mesh.numberofvertices2d=length(pos_node_2d);
++				md2.mesh.elements2d=md1.mesh.elements2d(pos_elem_2d,:);
++				md2.mesh.elements2d(:,1)=Pnode(md2.mesh.elements2d(:,1));
++				md2.mesh.elements2d(:,2)=Pnode(md2.mesh.elements2d(:,2));
++				md2.mesh.elements2d(:,3)=Pnode(md2.mesh.elements2d(:,3));
+ 
+-				 md2.mesh.x2d=md1.mesh.x(pos_node_2d);
+-				 md2.mesh.y2d=md1.mesh.y(pos_node_2d);
+-			 end
++				md2.mesh.x2d=md1.mesh.x(pos_node_2d);
++				md2.mesh.y2d=md1.mesh.y(pos_node_2d);
++			end
+ 
+-			 %Edges
+-			 if size(md2.mesh.edges,2)>1, %do not use ~isnan because there are some NaNs...
+-				 %renumber first two columns
+-				 pos=find(md2.mesh.edges(:,4)~=-1);
+-				 md2.mesh.edges(:  ,1)=Pnode(md2.mesh.edges(:,1)); 
+-				 md2.mesh.edges(:  ,2)=Pnode(md2.mesh.edges(:,2)); 
+-				 md2.mesh.edges(:  ,3)=Pelem(md2.mesh.edges(:,3));
+-				 md2.mesh.edges(pos,4)=Pelem(md2.mesh.edges(pos,4));
+-				 %remove edges when the 2 vertices are not in the domain.
+-				 md2.mesh.edges=md2.mesh.edges(find(md2.mesh.edges(:,1) & md2.mesh.edges(:,2)),:);
+-				 %Replace all zeros by -1 in the last two columns;
+-				 pos=find(md2.mesh.edges(:,3)==0);
+-				 md2.mesh.edges(pos,3)=-1;
+-				 pos=find(md2.mesh.edges(:,4)==0);
+-				 md2.mesh.edges(pos,4)=-1;
+-				 %Invert -1 on the third column with last column (Also invert first two columns!!)
+-				 pos=find(md2.mesh.edges(:,3)==-1);
+-				 md2.mesh.edges(pos,3)=md2.mesh.edges(pos,4);
+-				 md2.mesh.edges(pos,4)=-1;
+-				 values=md2.mesh.edges(pos,2);
+-				 md2.mesh.edges(pos,2)=md2.mesh.edges(pos,1);
+-				 md2.mesh.edges(pos,1)=values;
+-				 %Finally remove edges that do not belong to any element
+-				 pos=find(md2.mesh.edges(:,3)==-1 & md2.mesh.edges(:,4)==-1);
+-				 md2.mesh.edges(pos,:)=[];
+-			 end
++			%Edges
++			if size(md2.mesh.edges,2)>1, %do not use ~isnan because there are some NaNs...
++				%renumber first two columns
++				pos=find(md2.mesh.edges(:,4)~=-1);
++				md2.mesh.edges(:  ,1)=Pnode(md2.mesh.edges(:,1)); 
++				md2.mesh.edges(:  ,2)=Pnode(md2.mesh.edges(:,2)); 
++				md2.mesh.edges(:  ,3)=Pelem(md2.mesh.edges(:,3));
++				md2.mesh.edges(pos,4)=Pelem(md2.mesh.edges(pos,4));
++				%remove edges when the 2 vertices are not in the domain.
++				md2.mesh.edges=md2.mesh.edges(find(md2.mesh.edges(:,1) & md2.mesh.edges(:,2)),:);
++				%Replace all zeros by -1 in the last two columns;
++				pos=find(md2.mesh.edges(:,3)==0);
++				md2.mesh.edges(pos,3)=-1;
++				pos=find(md2.mesh.edges(:,4)==0);
++				md2.mesh.edges(pos,4)=-1;
++				%Invert -1 on the third column with last column (Also invert first two columns!!)
++				pos=find(md2.mesh.edges(:,3)==-1);
++				md2.mesh.edges(pos,3)=md2.mesh.edges(pos,4);
++				md2.mesh.edges(pos,4)=-1;
++				values=md2.mesh.edges(pos,2);
++				md2.mesh.edges(pos,2)=md2.mesh.edges(pos,1);
++				md2.mesh.edges(pos,1)=values;
++				%Finally remove edges that do not belong to any element
++				pos=find(md2.mesh.edges(:,3)==-1 & md2.mesh.edges(:,4)==-1);
++				md2.mesh.edges(pos,:)=[];
++			end
+ 
+-			 %Penalties
+-			 if ~isnan(md2.diagnostic.vertex_pairing),
+-				 for i=1:size(md1.diagnostic.vertex_pairing,1);
+-					 md2.diagnostic.vertex_pairing(i,:)=Pnode(md1.diagnostic.vertex_pairing(i,:));
+-				 end
+-				 md2.diagnostic.vertex_pairing=md2.diagnostic.vertex_pairing(find(md2.diagnostic.vertex_pairing(:,1)),:);
+-			 end
+-			 if ~isnan(md2.prognostic.vertex_pairing),
+-				 for i=1:size(md1.prognostic.vertex_pairing,1);
+-					 md2.prognostic.vertex_pairing(i,:)=Pnode(md1.prognostic.vertex_pairing(i,:));
+-				 end
+-				 md2.prognostic.vertex_pairing=md2.prognostic.vertex_pairing(find(md2.prognostic.vertex_pairing(:,1)),:);
+-			 end
++			%Penalties
++			if ~isnan(md2.diagnostic.vertex_pairing),
++				for i=1:size(md1.diagnostic.vertex_pairing,1);
++					md2.diagnostic.vertex_pairing(i,:)=Pnode(md1.diagnostic.vertex_pairing(i,:));
++				end
++				md2.diagnostic.vertex_pairing=md2.diagnostic.vertex_pairing(find(md2.diagnostic.vertex_pairing(:,1)),:);
++			end
++			if ~isnan(md2.prognostic.vertex_pairing),
++				for i=1:size(md1.prognostic.vertex_pairing,1);
++					md2.prognostic.vertex_pairing(i,:)=Pnode(md1.prognostic.vertex_pairing(i,:));
++				end
++				md2.prognostic.vertex_pairing=md2.prognostic.vertex_pairing(find(md2.prognostic.vertex_pairing(:,1)),:);
++			end
+ 
+-			 %recreate segments
+-			 if md1.mesh.dimension==2
+-				 md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices);
+-				 md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity);
+-				 md2.mesh.segments=contourenvelope(md2);
+-				 md2.mesh.vertexonboundary=zeros(numberofvertices2,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
+-			 else
+-				 %First do the connectivity for the contourenvelope in 2d
+-				 md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements2d,md2.mesh.numberofvertices2d);
+-				 md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements2d,md2.mesh.vertexconnectivity);
+-				 md2.mesh.segments=contourenvelope(md2);
+-				 md2.mesh.vertexonboundary=zeros(numberofvertices2/md2.mesh.numberoflayers,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
+-				 md2.mesh.vertexonboundary=repmat(md2.mesh.vertexonboundary,md2.mesh.numberoflayers,1);
+-				 %Then do it for 3d as usual
+-				 md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices);
+-				 md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity);
+-			 end
++			%recreate segments
++			if md1.mesh.dimension==2
++				md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices);
++				md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity);
++				md2.mesh.segments=contourenvelope(md2);
++				md2.mesh.vertexonboundary=zeros(numberofvertices2,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
++			else
++				%First do the connectivity for the contourenvelope in 2d
++				md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements2d,md2.mesh.numberofvertices2d);
++				md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements2d,md2.mesh.vertexconnectivity);
++				md2.mesh.segments=contourenvelope(md2);
++				md2.mesh.vertexonboundary=zeros(numberofvertices2/md2.mesh.numberoflayers,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
++				md2.mesh.vertexonboundary=repmat(md2.mesh.vertexonboundary,md2.mesh.numberoflayers,1);
++				%Then do it for 3d as usual
++				md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices);
++				md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity);
++			end
+ 
+-			 %Boundary conditions: Dirichlets on new boundary
+-			 %Catch the elements that have not been extracted
+-			 orphans_elem=find(~flag_elem);
+-			 orphans_node=unique(md1.mesh.elements(orphans_elem,:))';
+-			 %Figure out which node are on the boundary between md2 and md1
+-			 nodestoflag1=intersect(orphans_node,pos_node);
+-			 nodestoflag2=Pnode(nodestoflag1);
+-			 if numel(md1.diagnostic.spcvx)>1 & numel(md1.diagnostic.spcvy)>2 & numel(md1.diagnostic.spcvz)>2,
+-				 if numel(md1.inversion.vx_obs)>1 & numel(md1.inversion.vy_obs)>1
+-					 md2.diagnostic.spcvx(nodestoflag2)=md2.inversion.vx_obs(nodestoflag2); 
+-					 md2.diagnostic.spcvy(nodestoflag2)=md2.inversion.vy_obs(nodestoflag2);
+-				 else
+-					 md2.diagnostic.spcvx(nodestoflag2)=NaN;
+-					 md2.diagnostic.spcvy(nodestoflag2)=NaN;
+-					 disp(' ')
+-					 disp('!! extract warning: spc values should be checked !!')
+-					 disp(' ')
+-				 end
+-				 %put 0 for vz
+-				 md2.diagnostic.spcvz(nodestoflag2)=0;
+-			 end
+-			 if ~isnan(md1.thermal.spctemperature),
+-				 md2.thermal.spctemperature(nodestoflag2,1)=1;
+-			 end
++			%Boundary conditions: Dirichlets on new boundary
++			%Catch the elements that have not been extracted
++			orphans_elem=find(~flag_elem);
++			orphans_node=unique(md1.mesh.elements(orphans_elem,:))';
++			%Figure out which node are on the boundary between md2 and md1
++			nodestoflag1=intersect(orphans_node,pos_node);
++			nodestoflag2=Pnode(nodestoflag1);
++			if numel(md1.diagnostic.spcvx)>1 & numel(md1.diagnostic.spcvy)>2 & numel(md1.diagnostic.spcvz)>2,
++				if numel(md1.inversion.vx_obs)>1 & numel(md1.inversion.vy_obs)>1
++					md2.diagnostic.spcvx(nodestoflag2)=md2.inversion.vx_obs(nodestoflag2); 
++					md2.diagnostic.spcvy(nodestoflag2)=md2.inversion.vy_obs(nodestoflag2);
++				else
++					md2.diagnostic.spcvx(nodestoflag2)=NaN;
++					md2.diagnostic.spcvy(nodestoflag2)=NaN;
++					disp(' ')
++					disp('!! extract warning: spc values should be checked !!')
++					disp(' ')
++				end
++				%put 0 for vz
++				md2.diagnostic.spcvz(nodestoflag2)=0;
++			end
++			if ~isnan(md1.thermal.spctemperature),
++				md2.thermal.spctemperature(nodestoflag2,1)=1;
++			end
+ 
+-			 %Diagnostic
+-			 if ~isnan(md2.diagnostic.icefront)
+-				 md2.diagnostic.icefront(:,1)=Pnode(md1.diagnostic.icefront(:,1)); 
+-				 md2.diagnostic.icefront(:,2)=Pnode(md1.diagnostic.icefront(:,2)); 
+-				 md2.diagnostic.icefront(:,end-1)=Pelem(md1.diagnostic.icefront(:,end-1));
+-				 if md1.mesh.dimension==3
+-					 md2.diagnostic.icefront(:,3)=Pnode(md1.diagnostic.icefront(:,3)); 
+-					 md2.diagnostic.icefront(:,4)=Pnode(md1.diagnostic.icefront(:,4)); 
+-				 end
+-				 md2.diagnostic.icefront=md2.diagnostic.icefront(find(md2.diagnostic.icefront(:,1) & md2.diagnostic.icefront(:,2) & md2.diagnostic.icefront(:,end)),:);
+-			 end
++			%Diagnostic
++			if ~isnan(md2.diagnostic.icefront)
++				md2.diagnostic.icefront(:,1)=Pnode(md1.diagnostic.icefront(:,1)); 
++				md2.diagnostic.icefront(:,2)=Pnode(md1.diagnostic.icefront(:,2)); 
++				md2.diagnostic.icefront(:,end-1)=Pelem(md1.diagnostic.icefront(:,end-1));
++				if md1.mesh.dimension==3
++					md2.diagnostic.icefront(:,3)=Pnode(md1.diagnostic.icefront(:,3)); 
++					md2.diagnostic.icefront(:,4)=Pnode(md1.diagnostic.icefront(:,4)); 
++				end
++				md2.diagnostic.icefront=md2.diagnostic.icefront(find(md2.diagnostic.icefront(:,1) & md2.diagnostic.icefront(:,2) & md2.diagnostic.icefront(:,end)),:);
++			end
+ 
+-			 %Results fields
+-			 if isstruct(md1.results),
+-				 md2.results=struct();
+-				 solutionfields=fields(md1.results);
+-				 for i=1:length(solutionfields),
+-					 %get subfields
+-					 solutionsubfields=fields(md1.results.(solutionfields{i}));
+-					 for j=1:length(solutionsubfields),
+-						 field=md1.results.(solutionfields{i}).(solutionsubfields{j});
+-						 if length(field)==numberofvertices1,
+-							 md2.results.(solutionfields{i}).(solutionsubfields{j})=field(pos_node);
+-						 elseif length(field)==numberofelements1,
+-							 md2.results.(solutionfields{i}).(solutionsubfields{j})=field(pos_elem);
+-						 else
+-							 md2.results.(solutionfields{i}).(solutionsubfields{j})=field;
+-						 end
+-					 end
+-				 end
+-			 end
++			%Results fields
++			if isstruct(md1.results),
++				md2.results=struct();
++				solutionfields=fields(md1.results);
++				for i=1:length(solutionfields),
++					%get subfields
++					solutionsubfields=fields(md1.results.(solutionfields{i}));
++					for j=1:length(solutionsubfields),
++						field=md1.results.(solutionfields{i}).(solutionsubfields{j});
++						if length(field)==numberofvertices1,
++							md2.results.(solutionfields{i}).(solutionsubfields{j})=field(pos_node);
++						elseif length(field)==numberofelements1,
++							md2.results.(solutionfields{i}).(solutionsubfields{j})=field(pos_elem);
++						else
++							md2.results.(solutionfields{i}).(solutionsubfields{j})=field;
++						end
++					end
++				end
++			end
+ 
+-			 %Keep track of pos_node and pos_elem
+-			 md2.mesh.extractedvertices=pos_node;
+-			 md2.mesh.extractedelements=pos_elem;
+-		 end % }}}
+-		 function md = extrude(md,varargin) % {{{
+-			 %EXTRUDE - vertically extrude a 2d mesh
+-			 %
+-			 %   vertically extrude a 2d mesh and create corresponding 3d mesh.
+-			 %   The vertical distribution can:
+-			 %    - follow a polynomial law
+-			 %    - follow two polynomial laws, one for the lower part and one for the upper part of the mesh
+-			 %    - be discribed by a list of coefficients (between 0 and 1)
+-			 %   
+-			 %
+-			 %   Usage:
+-			 %      md=extrude(md,numlayers,extrusionexponent);
+-			 %      md=extrude(md,numlayers,lowerexponent,upperexponent);
+-			 %      md=extrude(md,listofcoefficients);
+-			 %
+-			 %   Example:
+-			 %      md=extrude(md,8,3);
+-			 %      md=extrude(md,8,3,2);
+-			 %      md=extrude(md,[0 0.2 0.5 0.7 0.9 0.95 1]);
+-			 %
+-			 %   See also: MODELEXTRACT, COLLAPSE
++			%Keep track of pos_node and pos_elem
++			md2.mesh.extractedvertices=pos_node;
++			md2.mesh.extractedelements=pos_elem;
++		end % }}}
++		function md = extrude(md,varargin) % {{{
++			%EXTRUDE - vertically extrude a 2d mesh
++			%
++			%   vertically extrude a 2d mesh and create corresponding 3d mesh.
++			%   The vertical distribution can:
++			%    - follow a polynomial law
++			%    - follow two polynomial laws, one for the lower part and one for the upper part of the mesh
++			%    - be discribed by a list of coefficients (between 0 and 1)
++			%   
++			%
++			%   Usage:
++			%      md=extrude(md,numlayers,extrusionexponent);
++			%      md=extrude(md,numlayers,lowerexponent,upperexponent);
++			%      md=extrude(md,listofcoefficients);
++			%
++			%   Example:
++			%      md=extrude(md,8,3);
++			%      md=extrude(md,8,3,2);
++			%      md=extrude(md,[0 0.2 0.5 0.7 0.9 0.95 1]);
++			%
++			%   See also: MODELEXTRACT, COLLAPSE
+ 
+-			 %some checks on list of arguments
+-			 if ((nargin>4) | (nargin<2) | (nargout~=1)),
+-				 help extrude;
+-				 error('extrude error message');
+-			 end
++			%some checks on list of arguments
++			if ((nargin>4) | (nargin<2) | (nargout~=1)),
++				help extrude;
++				error('extrude error message');
++			end
+ 
+-			 %Extrude the mesh
+-			 if nargin==2, %list of coefficients
+-				 clist=varargin{1};
+-				 if any(clist<0) | any(clist>1),
+-					 error('extrusioncoefficients must be between 0 and 1');
+-				 end
+-				 extrusionlist=sort(unique([clist(:);0;1]));
+-				 numlayers=length(extrusionlist);
+-			 elseif nargin==3, %one polynomial law
+-				 if varargin{2}<=0,
+-					 help extrude;
+-					 error('extrusionexponent must be >=0');
+-				 end
+-				 numlayers=varargin{1};
+-				 extrusionlist=((0:1:numlayers-1)/(numlayers-1)).^varargin{2};
+-			 elseif nargin==4, %two polynomial laws
+-				 numlayers=varargin{1};
+-				 lowerexp=varargin{2};
+-				 upperexp=varargin{3};
++			%Extrude the mesh
++			if nargin==2, %list of coefficients
++				clist=varargin{1};
++				if any(clist<0) | any(clist>1),
++					error('extrusioncoefficients must be between 0 and 1');
++				end
++				extrusionlist=sort(unique([clist(:);0;1]));
++				numlayers=length(extrusionlist);
++			elseif nargin==3, %one polynomial law
++				if varargin{2}<=0,
++					help extrude;
++					error('extrusionexponent must be >=0');
++				end
++				numlayers=varargin{1};
++				extrusionlist=((0:1:numlayers-1)/(numlayers-1)).^varargin{2};
++			elseif nargin==4, %two polynomial laws
++				numlayers=varargin{1};
++				lowerexp=varargin{2};
++				upperexp=varargin{3};
+ 
+-				 if varargin{2}<=0 | varargin{3}<=0,
+-					 help extrude;
+-					 error('lower and upper extrusionexponents must be >=0');
+-				 end
++				if varargin{2}<=0 | varargin{3}<=0,
++					help extrude;
++					error('lower and upper extrusionexponents must be >=0');
++				end
+ 
+-				 lowerextrusionlist=[(0:2/(numlayers-1):1).^lowerexp]/2;
+-				 upperextrusionlist=[(0:2/(numlayers-1):1).^upperexp]/2;
+-				 extrusionlist=sort(unique([lowerextrusionlist 1-upperextrusionlist]));
++				lowerextrusionlist=[(0:2/(numlayers-1):1).^lowerexp]/2;
++				upperextrusionlist=[(0:2/(numlayers-1):1).^upperexp]/2;
++				extrusionlist=sort(unique([lowerextrusionlist 1-upperextrusionlist]));
+ 
+-			 end
++			end
+ 
+-			 if numlayers<2,
+-				 error('number of layers should be at least 2');
+-			 end
+-			 if md.mesh.dimension==3,
+-				 error('Cannot extrude a 3d mesh (extrude cannot be called more than once)');
+-			 end
++			if numlayers<2,
++				error('number of layers should be at least 2');
++			end
++			if md.mesh.dimension==3,
++				error('Cannot extrude a 3d mesh (extrude cannot be called more than once)');
++			end
+ 
+-			 %Initialize with the 2d mesh
+-			 x3d=[]; 
+-			 y3d=[];
+-			 z3d=[];  %the lower node is on the bed
+-			 thickness3d=md.geometry.thickness; %thickness and bed for these nodes
+-			 bed3d=md.geometry.bed;
++			%Initialize with the 2d mesh
++			x3d=[]; 
++			y3d=[];
++			z3d=[];  %the lower node is on the bed
++			thickness3d=md.geometry.thickness; %thickness and bed for these nodes
++			bed3d=md.geometry.bed;
+ 
+-			 %Create the new layers
+-			 for i=1:numlayers,
+-				 x3d=[x3d; md.mesh.x]; 
+-				 y3d=[y3d; md.mesh.y];
+-				 %nodes are distributed between bed and surface accordingly to the given exponent
+-				 z3d=[z3d; bed3d+thickness3d*extrusionlist(i)]; 
+-			 end
+-			 number_nodes3d=size(x3d,1); %number of 3d nodes for the non extruded part of the mesh
++			%Create the new layers
++			for i=1:numlayers,
++				x3d=[x3d; md.mesh.x]; 
++				y3d=[y3d; md.mesh.y];
++				%nodes are distributed between bed and surface accordingly to the given exponent
++				z3d=[z3d; bed3d+thickness3d*extrusionlist(i)]; 
++			end
++			number_nodes3d=size(x3d,1); %number of 3d nodes for the non extruded part of the mesh
+ 
+-			 %Extrude elements 
+-			 elements3d=[];
+-			 for i=1:numlayers-1,
+-				 elements3d=[elements3d;[md.mesh.elements+(i-1)*md.mesh.numberofvertices md.mesh.elements+i*md.mesh.numberofvertices]]; %Create the elements of the 3d mesh for the non extruded part
+-			 end
+-			 number_el3d=size(elements3d,1); %number of 3d nodes for the non extruded part of the mesh
++			%Extrude elements 
++			elements3d=[];
++			for i=1:numlayers-1,
++				elements3d=[elements3d;[md.mesh.elements+(i-1)*md.mesh.numberofvertices md.mesh.elements+i*md.mesh.numberofvertices]]; %Create the elements of the 3d mesh for the non extruded part
++			end
++			number_el3d=size(elements3d,1); %number of 3d nodes for the non extruded part of the mesh
+ 
+-			 %Keep a trace of lower and upper nodes
+-			 mesh.lowervertex=NaN*ones(number_nodes3d,1);
+-			 mesh.uppervertex=NaN*ones(number_nodes3d,1);
+-			 mesh.lowervertex(md.mesh.numberofvertices+1:end)=1:(numlayers-1)*md.mesh.numberofvertices;
+-			 mesh.uppervertex(1:(numlayers-1)*md.mesh.numberofvertices)=md.mesh.numberofvertices+1:number_nodes3d;
+-			 md.mesh.lowervertex=mesh.lowervertex;
+-			 md.mesh.uppervertex=mesh.uppervertex;
++			%Keep a trace of lower and upper nodes
++			mesh.lowervertex=NaN*ones(number_nodes3d,1);
++			mesh.uppervertex=NaN*ones(number_nodes3d,1);
++			mesh.lowervertex(md.mesh.numberofvertices+1:end)=1:(numlayers-1)*md.mesh.numberofvertices;
++			mesh.uppervertex(1:(numlayers-1)*md.mesh.numberofvertices)=md.mesh.numberofvertices+1:number_nodes3d;
++			md.mesh.lowervertex=mesh.lowervertex;
++			md.mesh.uppervertex=mesh.uppervertex;
+ 
+-			 %same for lower and upper elements
+-			 mesh.lowerelements=NaN*ones(number_el3d,1);
+-			 mesh.upperelements=NaN*ones(number_el3d,1);
+-			 mesh.lowerelements(md.mesh.numberofelements+1:end)=1:(numlayers-2)*md.mesh.numberofelements;
+-			 mesh.upperelements(1:(numlayers-2)*md.mesh.numberofelements)=md.mesh.numberofelements+1:(numlayers-1)*md.mesh.numberofelements;
+-			 md.mesh.lowerelements=mesh.lowerelements;
+-			 md.mesh.upperelements=mesh.upperelements;
++			%same for lower and upper elements
++			mesh.lowerelements=NaN*ones(number_el3d,1);
++			mesh.upperelements=NaN*ones(number_el3d,1);
++			mesh.lowerelements(md.mesh.numberofelements+1:end)=1:(numlayers-2)*md.mesh.numberofelements;
++			mesh.upperelements(1:(numlayers-2)*md.mesh.numberofelements)=md.mesh.numberofelements+1:(numlayers-1)*md.mesh.numberofelements;
++			md.mesh.lowerelements=mesh.lowerelements;
++			md.mesh.upperelements=mesh.upperelements;
+ 
+-			 %Save old mesh 
+-			 md.mesh.x2d=md.mesh.x;
+-			 md.mesh.y2d=md.mesh.y;
+-			 md.mesh.elements2d=md.mesh.elements;
+-			 md.mesh.numberofelements2d=md.mesh.numberofelements;
+-			 md.mesh.numberofvertices2d=md.mesh.numberofvertices;
++			%Save old mesh 
++			md.mesh.x2d=md.mesh.x;
++			md.mesh.y2d=md.mesh.y;
++			md.mesh.elements2d=md.mesh.elements;
++			md.mesh.numberofelements2d=md.mesh.numberofelements;
++			md.mesh.numberofvertices2d=md.mesh.numberofvertices;
+ 
+-			 %Update mesh type
+-			 md.mesh.dimension=3;
++			%Update mesh type
++			md.mesh.dimension=3;
+ 
+-			 %Build global 3d mesh 
+-			 md.mesh.elements=elements3d;
+-			 md.mesh.x=x3d;
+-			 md.mesh.y=y3d;
+-			 md.mesh.z=z3d;
+-			 md.mesh.numberofelements=number_el3d;
+-			 md.mesh.numberofvertices=number_nodes3d;
+-			 md.mesh.numberoflayers=numlayers;
++			%Build global 3d mesh 
++			md.mesh.elements=elements3d;
++			md.mesh.x=x3d;
++			md.mesh.y=y3d;
++			md.mesh.z=z3d;
++			md.mesh.numberofelements=number_el3d;
++			md.mesh.numberofvertices=number_nodes3d;
++			md.mesh.numberoflayers=numlayers;
+ 
+-			 %Ok, now deal with the other fields from the 2d mesh:
++			%Ok, now deal with the other fields from the 2d mesh:
+ 
+-			 %lat long
+-			 md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node');
+-			 md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node');
++			%lat long
++			md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node');
++			md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node');
+ 
+-			 %drag coefficient is limited to nodes that are on the bedrock.
+-			 md.friction.coefficient=project3d(md,'vector',md.friction.coefficient,'type','node','layer',1);
++			%drag coefficient is limited to nodes that are on the bedrock.
++			md.friction.coefficient=project3d(md,'vector',md.friction.coefficient,'type','node','layer',1);
+ 
+-			 %p and q (same deal, except for element that are on the bedrock: )
+-			 md.friction.p=project3d(md,'vector',md.friction.p,'type','element');
+-			 md.friction.q=project3d(md,'vector',md.friction.q,'type','element');
++			%p and q (same deal, except for element that are on the bedrock: )
++			md.friction.p=project3d(md,'vector',md.friction.p,'type','element');
++			md.friction.q=project3d(md,'vector',md.friction.q,'type','element');
+ 
+-			 %observations
+-			 md.inversion.vx_obs=project3d(md,'vector',md.inversion.vx_obs,'type','node');
+-			 md.inversion.vy_obs=project3d(md,'vector',md.inversion.vy_obs,'type','node');
+-			 md.inversion.vel_obs=project3d(md,'vector',md.inversion.vel_obs,'type','node');
+-			 md.surfaceforcings.mass_balance=project3d(md,'vector',md.surfaceforcings.mass_balance,'type','node');
+-			 md.surfaceforcings.precipitation=project3d(md,'vector',md.surfaceforcings.precipitation,'type','node');
+-			 md.balancethickness.thickening_rate=project3d(md,'vector',md.balancethickness.thickening_rate,'type','node');
+-			 md.surfaceforcings.monthlytemperatures=project3d(md,'vector',md.surfaceforcings.monthlytemperatures,'type','node');
++			%observations
++			md.inversion.vx_obs=project3d(md,'vector',md.inversion.vx_obs,'type','node');
++			md.inversion.vy_obs=project3d(md,'vector',md.inversion.vy_obs,'type','node');
++			md.inversion.vel_obs=project3d(md,'vector',md.inversion.vel_obs,'type','node');
++			md.surfaceforcings.mass_balance=project3d(md,'vector',md.surfaceforcings.mass_balance,'type','node');
++			md.surfaceforcings.precipitation=project3d(md,'vector',md.surfaceforcings.precipitation,'type','node');
++			md.balancethickness.thickening_rate=project3d(md,'vector',md.balancethickness.thickening_rate,'type','node');
++			md.surfaceforcings.monthlytemperatures=project3d(md,'vector',md.surfaceforcings.monthlytemperatures,'type','node');
+ 
+-			 %results
+-			 if ~isnan(md.initialization.vx),md.initialization.vx=project3d(md,'vector',md.initialization.vx,'type','node');end;
+-			 if ~isnan(md.initialization.vy),md.initialization.vy=project3d(md,'vector',md.initialization.vy,'type','node');end;
+-			 if ~isnan(md.initialization.vz),md.initialization.vz=project3d(md,'vector',md.initialization.vz,'type','node');end;
+-			 if ~isnan(md.initialization.vel),md.initialization.vel=project3d(md,'vector',md.initialization.vel,'type','node');end;
+-			 if ~isnan(md.initialization.temperature),md.initialization.temperature=project3d(md,'vector',md.initialization.temperature,'type','node');end;
+-			 if ~isnan(md.initialization.waterfraction),md.initialization.waterfraction=project3d(md,'vector',md.initialization.waterfraction,'type','node');end;
++			%results
++			if ~isnan(md.initialization.vx),md.initialization.vx=project3d(md,'vector',md.initialization.vx,'type','node');end;
++			if ~isnan(md.initialization.vy),md.initialization.vy=project3d(md,'vector',md.initialization.vy,'type','node');end;
++			if ~isnan(md.initialization.vz),md.initialization.vz=project3d(md,'vector',md.initialization.vz,'type','node');end;
++			if ~isnan(md.initialization.vel),md.initialization.vel=project3d(md,'vector',md.initialization.vel,'type','node');end;
++			if ~isnan(md.initialization.temperature),md.initialization.temperature=project3d(md,'vector',md.initialization.temperature,'type','node');end;
++			if ~isnan(md.initialization.waterfraction),md.initialization.waterfraction=project3d(md,'vector',md.initialization.waterfraction,'type','node');end;
+ 
+-			 %bedinfo and surface info
+-			 md.mesh.elementonbed=project3d(md,'vector',ones(md.mesh.numberofelements2d,1),'type','element','layer',1);
+-			 md.mesh.elementonsurface=project3d(md,'vector',ones(md.mesh.numberofelements2d,1),'type','element','layer',md.mesh.numberoflayers-1);
+-			 md.mesh.vertexonbed=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',1);
+-			 md.mesh.vertexonsurface=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',md.mesh.numberoflayers);
++			%bedinfo and surface info
++			md.mesh.elementonbed=project3d(md,'vector',ones(md.mesh.numberofelements2d,1),'type','element','layer',1);
++			md.mesh.elementonsurface=project3d(md,'vector',ones(md.mesh.numberofelements2d,1),'type','element','layer',md.mesh.numberoflayers-1);
++			md.mesh.vertexonbed=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',1);
++			md.mesh.vertexonsurface=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',md.mesh.numberoflayers);
+ 
+-			 %elementstype
+-			 if ~isnan(md.flowequation.element_equation)
+-				 oldelements_type=md.flowequation.element_equation;
+-				 md.flowequation.element_equation=zeros(number_el3d,1);
+-				 md.flowequation.element_equation=project3d(md,'vector',oldelements_type,'type','element');
+-			 end
++			%elementstype
++			if ~isnan(md.flowequation.element_equation)
++				oldelements_type=md.flowequation.element_equation;
++				md.flowequation.element_equation=zeros(number_el3d,1);
++				md.flowequation.element_equation=project3d(md,'vector',oldelements_type,'type','element');
++			end
+ 
+-			 %verticestype
+-			 if ~isnan(md.flowequation.vertex_equation)
+-				 oldvertices_type=md.flowequation.vertex_equation;
+-				 md.flowequation.vertex_equation=zeros(number_nodes3d,1);
+-				 md.flowequation.vertex_equation=project3d(md,'vector',oldvertices_type,'type','node');
+-			 end
+-			 md.flowequation.bordermacayeal=project3d(md,'vector',md.flowequation.bordermacayeal,'type','node');
+-			 md.flowequation.borderpattyn=project3d(md,'vector',md.flowequation.borderpattyn,'type','node');
+-			 md.flowequation.borderstokes=project3d(md,'vector',md.flowequation.borderstokes,'type','node');
++			%verticestype
++			if ~isnan(md.flowequation.vertex_equation)
++				oldvertices_type=md.flowequation.vertex_equation;
++				md.flowequation.vertex_equation=zeros(number_nodes3d,1);
++				md.flowequation.vertex_equation=project3d(md,'vector',oldvertices_type,'type','node');
++			end
++			md.flowequation.bordermacayeal=project3d(md,'vector',md.flowequation.bordermacayeal,'type','node');
++			md.flowequation.borderpattyn=project3d(md,'vector',md.flowequation.borderpattyn,'type','node');
++			md.flowequation.borderstokes=project3d(md,'vector',md.flowequation.borderstokes,'type','node');
+ 
+-			 %boundary conditions
+-			 md.diagnostic.spcvx=project3d(md,'vector',md.diagnostic.spcvx,'type','node');
+-			 md.diagnostic.spcvy=project3d(md,'vector',md.diagnostic.spcvy,'type','node');
+-			 md.diagnostic.spcvz=project3d(md,'vector',md.diagnostic.spcvz,'type','node');
+-			 md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',NaN);
+-			 md.prognostic.spcthickness=project3d(md,'vector',md.prognostic.spcthickness,'type','node');
+-			 md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node');
+-			 md.diagnostic.referential=project3d(md,'vector',md.diagnostic.referential,'type','node');
++			%boundary conditions
++			md.diagnostic.spcvx=project3d(md,'vector',md.diagnostic.spcvx,'type','node');
++			md.diagnostic.spcvy=project3d(md,'vector',md.diagnostic.spcvy,'type','node');
++			md.diagnostic.spcvz=project3d(md,'vector',md.diagnostic.spcvz,'type','node');
++			md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',NaN);
++			md.prognostic.spcthickness=project3d(md,'vector',md.prognostic.spcthickness,'type','node');
++			md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node');
++			md.diagnostic.referential=project3d(md,'vector',md.diagnostic.referential,'type','node');
+ 
+-			 %in 3d, pressureload: [node1 node2 node3 node4 element]
+-			 pressureload_layer1=[md.diagnostic.icefront(:,1:2)  md.diagnostic.icefront(:,2)+md.mesh.numberofvertices2d  md.diagnostic.icefront(:,1)+md.mesh.numberofvertices2d  md.diagnostic.icefront(:,3:4)]; %Add two columns on the first layer 
+-			 pressureload=[];
+-			 for i=1:numlayers-1,
+-				 pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.mesh.numberofvertices2d pressureload_layer1(:,5)+(i-1)*md.mesh.numberofelements2d pressureload_layer1(:,6)];
+-			 end
+-			 md.diagnostic.icefront=pressureload;
++			%in 3d, pressureload: [node1 node2 node3 node4 element]
++			pressureload_layer1=[md.diagnostic.icefront(:,1:2)  md.diagnostic.icefront(:,2)+md.mesh.numberofvertices2d  md.diagnostic.icefront(:,1)+md.mesh.numberofvertices2d  md.diagnostic.icefront(:,3:4)]; %Add two columns on the first layer 
++			pressureload=[];
++			for i=1:numlayers-1,
++				pressureload=[pressureload ;pressureload_layer1(:,1:4)+(i-1)*md.mesh.numberofvertices2d pressureload_layer1(:,5)+(i-1)*md.mesh.numberofelements2d pressureload_layer1(:,6)];
++			end
++			md.diagnostic.icefront=pressureload;
+ 
+-			 %connectivity
+-			 md.mesh.elementconnectivity=repmat(md.mesh.elementconnectivity,numlayers-1,1);
+-			 md.mesh.elementconnectivity(find(md.mesh.elementconnectivity==0))=NaN;
+-			 for i=2:numlayers-1,
+-				 md.mesh.elementconnectivity((i-1)*md.mesh.numberofelements2d+1:(i)*md.mesh.numberofelements2d,:)...
+-					 =md.mesh.elementconnectivity((i-1)*md.mesh.numberofelements2d+1:(i)*md.mesh.numberofelements2d,:)+md.mesh.numberofelements2d;
+-			 end
+-			 md.mesh.elementconnectivity(find(isnan(md.mesh.elementconnectivity)))=0;
++			%connectivity
++			md.mesh.elementconnectivity=repmat(md.mesh.elementconnectivity,numlayers-1,1);
++			md.mesh.elementconnectivity(find(md.mesh.elementconnectivity==0))=NaN;
++			for i=2:numlayers-1,
++				md.mesh.elementconnectivity((i-1)*md.mesh.numberofelements2d+1:(i)*md.mesh.numberofelements2d,:)...
++					=md.mesh.elementconnectivity((i-1)*md.mesh.numberofelements2d+1:(i)*md.mesh.numberofelements2d,:)+md.mesh.numberofelements2d;
++			end
++			md.mesh.elementconnectivity(find(isnan(md.mesh.elementconnectivity)))=0;
+ 
+-			 %materials
+-			 md.materials.rheology_B=project3d(md,'vector',md.materials.rheology_B,'type','node');
+-			 md.materials.rheology_n=project3d(md,'vector',md.materials.rheology_n,'type','element');
+-			 if isa(md.materials,'matdamageice')
+-				 md.materials.rheology_Z=project3d(md,'vector',md.materials.rheology_Z,'type','node');
+-			 end
++			%materials
++			md.materials.rheology_B=project3d(md,'vector',md.materials.rheology_B,'type','node');
++			md.materials.rheology_n=project3d(md,'vector',md.materials.rheology_n,'type','element');
++			if isa(md.materials,'matdamageice')
++				md.materials.rheology_Z=project3d(md,'vector',md.materials.rheology_Z,'type','node');
++			end
+ 
+-			 %parameters
+-			 md.geometry.surface=project3d(md,'vector',md.geometry.surface,'type','node');
+-			 md.geometry.thickness=project3d(md,'vector',md.geometry.thickness,'type','node');
+-			 md.geometry.hydrostatic_ratio=project3d(md,'vector',md.geometry.hydrostatic_ratio,'type','node');
+-			 md.geometry.bed=project3d(md,'vector',md.geometry.bed,'type','node');
+-			 md.geometry.bathymetry=project3d(md,'vector',md.geometry.bathymetry,'type','node');
+-			 md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node');
+-			 md.mask.elementonfloatingice=project3d(md,'vector',md.mask.elementonfloatingice,'type','element');
+-			 md.mask.vertexonfloatingice=project3d(md,'vector',md.mask.vertexonfloatingice,'type','node');
+-			 md.mask.elementongroundedice=project3d(md,'vector',md.mask.elementongroundedice,'type','element');
+-			 md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node');
+-			 md.mask.elementonwater=project3d(md,'vector',md.mask.elementonwater,'type','element');
+-			 md.mask.vertexonwater=project3d(md,'vector',md.mask.vertexonwater,'type','node');
+-			 if ~isnan(md.inversion.cost_functions_coefficients),md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
+-			 if ~isnan(md.inversion.min_parameters),md.inversion.min_parameters=project3d(md,'vector',md.inversion.min_parameters,'type','node');end;
+-			 if ~isnan(md.inversion.max_parameters),md.inversion.max_parameters=project3d(md,'vector',md.inversion.max_parameters,'type','node');end;
+-			 if ~isnan(md.qmu.partition),md.qmu.partition=project3d(md,'vector',md.qmu.partition','type','node');end
+-			 if(md.surfaceforcings.isdelta18o),md.surfaceforcings.temperatures_lgm=project3d(md,'vector',md.surfaceforcings.temperatures_lgm,'type','node');end
+-			 if(md.surfaceforcings.isdelta18o),md.surfaceforcings.temperatures_presentday=project3d(md,'vector',md.surfaceforcings.temperatures_presentday,'type','node');end
+-			 if(md.surfaceforcings.isdelta18o),md.surfaceforcings.precipitations_presentday=project3d(md,'vector',md.surfaceforcings.precipitations_presentday,'type','node');end
++			%parameters
++			md.geometry.surface=project3d(md,'vector',md.geometry.surface,'type','node');
++			md.geometry.thickness=project3d(md,'vector',md.geometry.thickness,'type','node');
++			md.geometry.hydrostatic_ratio=project3d(md,'vector',md.geometry.hydrostatic_ratio,'type','node');
++			md.geometry.bed=project3d(md,'vector',md.geometry.bed,'type','node');
++			md.geometry.bathymetry=project3d(md,'vector',md.geometry.bathymetry,'type','node');
++			md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node');
++			md.mask.elementonfloatingice=project3d(md,'vector',md.mask.elementonfloatingice,'type','element');
++			md.mask.vertexonfloatingice=project3d(md,'vector',md.mask.vertexonfloatingice,'type','node');
++			md.mask.elementongroundedice=project3d(md,'vector',md.mask.elementongroundedice,'type','element');
++			md.mask.vertexongroundedice=project3d(md,'vector',md.mask.vertexongroundedice,'type','node');
++			md.mask.elementonwater=project3d(md,'vector',md.mask.elementonwater,'type','element');
++			md.mask.vertexonwater=project3d(md,'vector',md.mask.vertexonwater,'type','node');
++			if ~isnan(md.inversion.cost_functions_coefficients),md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
++			if ~isnan(md.inversion.min_parameters),md.inversion.min_parameters=project3d(md,'vector',md.inversion.min_parameters,'type','node');end;
++			if ~isnan(md.inversion.max_parameters),md.inversion.max_parameters=project3d(md,'vector',md.inversion.max_parameters,'type','node');end;
++			if ~isnan(md.qmu.partition),md.qmu.partition=project3d(md,'vector',md.qmu.partition','type','node');end
++			if(md.surfaceforcings.isdelta18o),md.surfaceforcings.temperatures_lgm=project3d(md,'vector',md.surfaceforcings.temperatures_lgm,'type','node');end
++			if(md.surfaceforcings.isdelta18o),md.surfaceforcings.temperatures_presentday=project3d(md,'vector',md.surfaceforcings.temperatures_presentday,'type','node');end
++			if(md.surfaceforcings.isdelta18o),md.surfaceforcings.precipitations_presentday=project3d(md,'vector',md.surfaceforcings.precipitations_presentday,'type','node');end
+ 
+-			 %Put lithostatic pressure if there is an existing pressure
+-			 if ~isnan(md.initialization.pressure),
+-				 md.initialization.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z);
+-			 end
++			%Put lithostatic pressure if there is an existing pressure
++			if ~isnan(md.initialization.pressure),
++				md.initialization.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z);
++			end
+ 
+-			 %special for thermal modeling:
+-			 md.basalforcings.melting_rate=project3d(md,'vector',md.basalforcings.melting_rate,'type','node','layer',1); 
+-			 if ~isnan(md.basalforcings.geothermalflux)
+-				 md.basalforcings.geothermalflux=project3d(md,'vector',md.basalforcings.geothermalflux,'type','node','layer',1); %bedrock only gets geothermal flux
+-			 end
++			%special for thermal modeling:
++			md.basalforcings.melting_rate=project3d(md,'vector',md.basalforcings.melting_rate,'type','node','layer',1); 
++			if ~isnan(md.basalforcings.geothermalflux)
++				md.basalforcings.geothermalflux=project3d(md,'vector',md.basalforcings.geothermalflux,'type','node','layer',1); %bedrock only gets geothermal flux
++			end
+ 
+-			 %increase connectivity if less than 25:
+-			 if md.mesh.average_vertex_connectivity<=25,
+-				 md.mesh.average_vertex_connectivity=100;
+-			 end
++			%increase connectivity if less than 25:
++			if md.mesh.average_vertex_connectivity<=25,
++				md.mesh.average_vertex_connectivity=100;
++			end
+ 			end % }}}
+-		 function md = structtomodel(md,structmd) % {{{
++		function md = structtomodel(md,structmd) % {{{
+ 
+-			 if ~isstruct(structmd) error('input model is not a structure'); end
++			if ~isstruct(structmd) error('input model is not a structure'); end
+ 
+-			 %loaded model is a struct, initialize output and recover all fields
+-			 md = structtoobj(model,structmd);
++			%loaded model is a struct, initialize output and recover all fields
++			md = structtoobj(model,structmd);
+ 
+-			 %Old field now classes
+-			 if (isfield(structmd,'timestepping') & isnumeric(md.timestepping)), md.timestepping=timestepping(); end
+-			 if (isfield(structmd,'mask') & isnumeric(md.mask)),md.mask=mask(); end
++			%Old field now classes
++			if (isfield(structmd,'timestepping') & isnumeric(md.timestepping)), md.timestepping=timestepping(); end
++			if (isfield(structmd,'mask') & isnumeric(md.mask)),md.mask=mask(); end
+ 
+-			 %Field name change
+-			 if isfield(structmd,'drag'), md.friction.coefficient=structmd.drag; end
+-			 if isfield(structmd,'p'), md.friction.p=structmd.p; end
+-			 if isfield(structmd,'q'), md.friction.q=structmd.p; end
+-			 if isfield(structmd,'melting'), md.basalforcings.melting_rate=structmd.melting; end
+-			 if isfield(structmd,'melting_rate'), md.basalforcings.melting_rate=structmd.melting_rate; end
+-			 if isfield(structmd,'accumulation'), md.surfaceforcings.mass_balance=structmd.accumulation; end
+-			 if isfield(structmd,'numberofgrids'), md.mesh.numberofvertices=structmd.numberofgrids; end
+-			 if isfield(structmd,'numberofgrids2d'), md.mesh.numberofvertices2d=structmd.numberofgrids2d; end
+-			 if isfield(structmd,'uppergrids'), md.mesh.uppervertex=structmd.uppergrids; end
+-			 if isfield(structmd,'lowergrids'), md.mesh.lowervertex=structmd.lowergrids; end
+-			 if isfield(structmd,'gridonbed'), md.mesh.vertexonbed=structmd.gridonbed; end
+-			 if isfield(structmd,'gridonsurface'), md.mesh.vertexonsurface=structmd.gridonsurface; end
+-			 if isfield(structmd,'extractedgrids'), md.mesh.extractedvertices=structmd.extractedgrids; end
+-			 if isfield(structmd,'gridoniceshelf'), md.mask.vertexonfloatingice=structmd.gridoniceshelf; end
+-			 if isfield(structmd,'gridonicesheet'), md.mask.vertexongroundedice=structmd.gridonicesheet; end
+-			 if isfield(structmd,'gridonwater'), md.mask.vertexonwater=structmd.gridonwater; end
+-			 if isfield(structmd,'gridonboundary'), md.mesh.vertexonboundary=structmd.gridonboundary; end
+-			 if isfield(structmd,'petscoptions') & ~isempty(structmd.petscoptions), md.solver=structmd.petscoptions; end
+-			 if isfield(structmd,'g'), md.constants.g=structmd.g; end
+-			 if isfield(structmd,'yts'), md.constants.yts=structmd.yts; end
+-			 if isfield(structmd,'surface_mass_balance'), md.surfaceforcings.mass_balance=structmd.surface_mass_balance; end
+-			 if isfield(structmd,'basal_melting_rate'), md.basalforcings.melting_rate=structmd.basal_melting_rate; end
+-			 if isfield(structmd,'basal_melting_rate_correction'), md.basalforcings.melting_rate_correction=structmd.basal_melting_rate_correction; end
+-			 if isfield(structmd,'geothermalflux'), md.basalforcings.geothermalflux=structmd.geothermalflux; end
+-			 if isfield(structmd,'drag'), md.friction.coefficient=structmd.drag; end
+-			 if isfield(structmd,'drag_coefficient'), md.friction.coefficient=structmd.drag_coefficient; end
+-			 if isfield(structmd,'drag_p'), md.friction.p=structmd.drag_p; end
+-			 if isfield(structmd,'drag_q'), md.friction.q=structmd.drag_q; end
+-			 if isfield(structmd,'riftproperties'), %old implementation
+-				 md.rifts=rifts();
+-				 md.rifts.riftproperties=structmd.riftproperties; 
+-				 md.rifts.riftstruct=structmd.rifts;
+-				 md.rifts.riftproperties=structmd.riftinfo;
+-			 end
+-			 if isfield(structmd,'bamg'), md.private.bamg=structmd.bamg; end
+-			 if isfield(structmd,'lowmem'), md.settings.lowmem=structmd.lowmem; end
+-			 if isfield(structmd,'io_gather'), md.settings.io_gather=structmd.io_gather; end
+-			 if isfield(structmd,'spcwatercolumn'), md.hydrology.spcwatercolumn=structmd.spcwatercolumn; end
+-			 if isfield(structmd,'hydro_n'), md.hydrology.n=structmd.hydro_n; end
+-			 if isfield(structmd,'hydro_p'), md.hydrology.p=structmd.hydro_p; end
+-			 if isfield(structmd,'hydro_q'), md.hydrology.q=structmd.hydro_q; end
+-			 if isfield(structmd,'hydro_CR'), md.hydrology.CR=structmd.hydro_CR; end
+-			 if isfield(structmd,'hydro_kn'), md.hydrology.kn=structmd.hydro_kn; end
+-			 if isfield(structmd,'spctemperature'), md.thermal.spctemperature=structmd.spctemperature; end
+-			 if isfield(structmd,'min_thermal_constraints'), md.thermal.penalty_threshold=structmd.min_thermal_constraints; end
+-			 if isfield(structmd,'artificial_diffusivity'), md.thermal.stabilization=structmd.artificial_diffusivity; end
+-			 if isfield(structmd,'max_nonlinear_iterations'), md.thermal.maxiter=structmd.max_nonlinear_iterations; end
+-			 if isfield(structmd,'stabilize_constraints'), md.thermal.penalty_lock=structmd.stabilize_constraints; end
+-			 if isfield(structmd,'penalty_offset'), md.thermal.penalty_factor=structmd.penalty_offset; end
+-			 if isfield(structmd,'name'), md.miscellaneous.name=structmd.name; end
+-			 if isfield(structmd,'notes'), md.miscellaneous.notes=structmd.notes; end
+-			 if isfield(structmd,'dummy'), md.miscellaneous.dummy=structmd.dummy; end
+-			 if isfield(structmd,'dt'), md.timestepping.time_step=structmd.dt; end
+-			 if isfield(structmd,'ndt'), md.timestepping.final_time=structmd.ndt; end
+-			 if isfield(structmd,'time_adapt'), md.timestepping.time_adapt=structmd.time_adapt; end
+-			 if isfield(structmd,'cfl_coefficient'), md.timestepping.cfl_coefficient=structmd.cfl_coefficient; end
+-			 if isfield(structmd,'spcthickness'), md.prognostic.spcthickness=structmd.spcthickness; end
+-			 if isfield(structmd,'artificial_diffusivity'), md.prognostic.stabilization=structmd.artificial_diffusivity; end
+-			 if isfield(structmd,'hydrostatic_adjustment'), md.prognostic.hydrostatic_adjustment=structmd.hydrostatic_adjustment; end
+-			 if isfield(structmd,'penalties'), md.prognostic.vertex_pairing=structmd.penalties; end
+-			 if isfield(structmd,'penalty_offset'), md.prognostic.penalty_factor=structmd.penalty_offset; end
+-			 if isfield(structmd,'B'), md.materials.rheology_B=structmd.B; end
+-			 if isfield(structmd,'n'), md.materials.rheology_n=structmd.n; end
+-			 if isfield(structmd,'rheology_B'), md.materials.rheology_B=structmd.rheology_B; end
+-			 if isfield(structmd,'rheology_n'), md.materials.rheology_n=structmd.rheology_n; end
+-			 if isfield(structmd,'elementoniceshelf'), md.mask.elementonfloatingice=structmd.elementoniceshelf; end
+-			 if isfield(structmd,'elementonicesheet'), md.mask.elementongroundedice=structmd.elementonicesheet; end
+-			 if isfield(structmd,'elementonwater'), md.mask.elementonwater=structmd.elementonwater; end
+-			 if isfield(structmd,'nodeoniceshelf'), md.mask.vertexonfloatingice=structmd.nodeoniceshelf; end
+-			 if isfield(structmd,'nodeonicesheet'), md.mask.vertexongroundedice=structmd.nodeonicesheet; end
+-			 if isfield(structmd,'nodeonwater'), md.mask.vertexonwater=structmd.nodeonwater; end
+-			 if isfield(structmd,'spcthickness'), md.balancethickness.spcthickness=structmd.spcthickness; end
+-			 if isfield(structmd,'artificial_diffusivity'), md.balancethickness.stabilization=structmd.artificial_diffusivity; end
+-			 if isfield(structmd,'dhdt'), md.balancethickness.thickening_rate=structmd.dhdt; end
+-			 if isfield(structmd,'ismacayealpattyn'), md.flowequation.ismacayealpattyn=structmd.ismacayealpattyn; end
+-			 if isfield(structmd,'ishutter'), md.flowequation.ishutter=structmd.ishutter; end
+-			 if isfield(structmd,'isstokes'), md.flowequation.isstokes=structmd.isstokes; end
+-			 if isfield(structmd,'elements_type'), md.flowequation.element_equation=structmd.elements_type; end
+-			 if isfield(structmd,'vertices_type'), md.flowequation.vertex_equation=structmd.vertices_type; end
+-			 if isfield(structmd,'eps_rel'), md.steadystate.reltol=structmd.eps_rel; end
+-			 if isfield(structmd,'max_steadystate_iterations'), md.steadystate.maxiter=structmd.max_steadystate_iterations; end
+-			 if isfield(structmd,'isdiagnostic'), md.transient.isdiagnostic=structmd.isdiagnostic; end
+-			 if isfield(structmd,'isprognostic'), md.transient.isprognostic=structmd.isprognostic; end
+-			 if isfield(structmd,'isthermal'), md.transient.isthermal=structmd.isthermal; end
+-			 if isfield(structmd,'control_analysis'), md.inversion.iscontrol=structmd.control_analysis; end
+-			 if isfield(structmd,'weights'), md.inversion.cost_functions_coefficients=structmd.weights; end
+-			 if isfield(structmd,'nsteps'), md.inversion.nsteps=structmd.nsteps; end
+-			 if isfield(structmd,'maxiter_per_step'), md.inversion.maxiter_per_step=structmd.maxiter_per_step; end
+-			 if isfield(structmd,'cm_min'), md.inversion.min_parameters=structmd.cm_min; end
+-			 if isfield(structmd,'cm_max'), md.inversion.max_parameters=structmd.cm_max; end
+-			 if isfield(structmd,'vx_obs'), md.inversion.vx_obs=structmd.vx_obs; end
+-			 if isfield(structmd,'vy_obs'), md.inversion.vy_obs=structmd.vy_obs; end
+-			 if isfield(structmd,'vel_obs'), md.inversion.vel_obs=structmd.vel_obs; end
+-			 if isfield(structmd,'thickness_obs'), md.inversion.thickness_obs=structmd.thickness_obs; end
+-			 if isfield(structmd,'vx'), md.initialization.vx=structmd.vx; end
+-			 if isfield(structmd,'vy'), md.initialization.vy=structmd.vy; end
+-			 if isfield(structmd,'vz'), md.initialization.vz=structmd.vz; end
+-			 if isfield(structmd,'vel'), md.initialization.vel=structmd.vel; end
+-			 if isfield(structmd,'pressure'), md.initialization.pressure=structmd.pressure; end
+-			 if isfield(structmd,'temperature'), md.initialization.temperature=structmd.temperature; end
+-			 if isfield(structmd,'waterfraction'), md.initialization.waterfraction=structmd.waterfraction; end
+-			 if isfield(structmd,'watercolumn'), md.initialization.watercolumn=structmd.watercolumn; end
+-			 if isfield(structmd,'surface'), md.geometry.surface=structmd.surface; end
+-			 if isfield(structmd,'bed'), md.geometry.bed=structmd.bed; end
+-			 if isfield(structmd,'thickness'), md.geometry.thickness=structmd.thickness; end
+-			 if isfield(structmd,'bathymetry'), md.geometry.bathymetry=structmd.bathymetry; end
+-			 if isfield(structmd,'thickness_coeff'), md.geometry.hydrostatic_ratio=structmd.thickness_coeff; end
+-			 if isfield(structmd,'connectivity'), md.mesh.average_vertex_connectivity=structmd.connectivity; end
+-			 if isfield(structmd,'extractednodes'), md.mesh.extractedvertices=structmd.extractednodes; end
+-			 if isfield(structmd,'extractedelements'), md.mesh.extractedelements=structmd.extractedelements; end
+-			 if isfield(structmd,'nodeonboundary'), md.mesh.vertexonboundary=structmd.nodeonboundary; end
+-			 if isfield(structmd,'hemisphere'), md.mesh.hemisphere=structmd.hemisphere; end
+-			 if isfield(structmd,'lat'), md.mesh.lat=structmd.lat; end
+-			 if isfield(structmd,'long'), md.mesh.long=structmd.long; end
+-			 if isfield(structmd,'segments'), md.mesh.segments=structmd.segments; end
+-			 if isfield(structmd,'segmentmarkers'), md.mesh.segmentmarkers=structmd.segmentmarkers; end
+-			 if isfield(structmd,'dim'), md.mesh.dimension=structmd.dim; end
+-			 if isfield(structmd,'numlayers'), md.mesh.numberoflayers=structmd.numlayers; end
+-			 if isfield(structmd,'numberofelements'), md.mesh.numberofelements=structmd.numberofelements; end
+-			 if isfield(structmd,'numberofvertices'), md.mesh.numberofvertices=structmd.numberofvertices; end
+-			 if isfield(structmd,'numberofnodes'), md.mesh.numberofvertices=structmd.numberofnodes; end
+-			 if isfield(structmd,'numberofedges'), md.mesh.numberofedges=structmd.numberofedges; end
+-			 if isfield(structmd,'numberofelements2d'), md.mesh.numberofelements2d=structmd.numberofelements2d; end
+-			 if isfield(structmd,'numberofnodes2d'), md.mesh.numberofvertices2d=structmd.numberofnodes2d; end
+-			 if isfield(structmd,'nodeconnectivity'), md.mesh.vertexconnectivity=structmd.nodeconnectivity; end
+-			 if isfield(structmd,'elementconnectivity'), md.mesh.elementconnectivity=structmd.elementconnectivity; end
+-			 if isfield(structmd,'uppernodes'), md.mesh.uppervertex=structmd.uppernodes; end
+-			 if isfield(structmd,'lowernodes'), md.mesh.lowervertex=structmd.lowernodes; end
+-			 if isfield(structmd,'upperelements'), md.mesh.upperelements=structmd.upperelements; end
+-			 if isfield(structmd,'lowerelements'), md.mesh.lowerelements=structmd.lowerelements; end
+-			 if isfield(structmd,'elementonbed'), md.mesh.elementonbed=structmd.elementonbed; end
+-			 if isfield(structmd,'elementonsurface'), md.mesh.elementonsurface=structmd.elementonsurface; end
+-			 if isfield(structmd,'nodeonsurface'), md.mesh.vertexonsurface=structmd.nodeonsurface; end
+-			 if isfield(structmd,'nodeonbed'), md.mesh.vertexonbed=structmd.nodeonbed; end
+-			 if isfield(structmd,'elements2d'), md.mesh.elements2d=structmd.elements2d; end
+-			 if isfield(structmd,'y2d'), md.mesh.y2d=structmd.y2d; end
+-			 if isfield(structmd,'x2d'), md.mesh.x2d=structmd.x2d; end
+-			 if isfield(structmd,'elements'), md.mesh.elements=structmd.elements; end
+-			 if isfield(structmd,'edges'), md.mesh.edges=structmd.edges; end
+-			 if isfield(structmd,'y'), md.mesh.y=structmd.y; end
+-			 if isfield(structmd,'x'), md.mesh.x=structmd.x; end
+-			 if isfield(structmd,'z'), md.mesh.z=structmd.z; end
+-			 if isfield(structmd,'mask'), md.flaim.criterion=structmd.mask; end
+-			 if isfield(structmd,'pressureload'), md.diagnostic.icefront=structmd.pressureload; end
+-			 if isfield(structmd,'diagnostic_ref'), md.diagnostic.referential=structmd.diagnostic_ref; end
+-			 if isfield(structmd,'npart'); md.qmu.numberofpartitions=structmd.npart; end
+-			 if isfield(structmd,'part'); md.qmu.partition=structmd.part; end
++			%Field name change
++			if isfield(structmd,'drag'), md.friction.coefficient=structmd.drag; end
++			if isfield(structmd,'p'), md.friction.p=structmd.p; end
++			if isfield(structmd,'q'), md.friction.q=structmd.p; end
++			if isfield(structmd,'melting'), md.basalforcings.melting_rate=structmd.melting; end
++			if isfield(structmd,'melting_rate'), md.basalforcings.melting_rate=structmd.melting_rate; end
++			if isfield(structmd,'accumulation'), md.surfaceforcings.mass_balance=structmd.accumulation; end
++			if isfield(structmd,'numberofgrids'), md.mesh.numberofvertices=structmd.numberofgrids; end
++			if isfield(structmd,'numberofgrids2d'), md.mesh.numberofvertices2d=structmd.numberofgrids2d; end
++			if isfield(structmd,'uppergrids'), md.mesh.uppervertex=structmd.uppergrids; end
++			if isfield(structmd,'lowergrids'), md.mesh.lowervertex=structmd.lowergrids; end
++			if isfield(structmd,'gridonbed'), md.mesh.vertexonbed=structmd.gridonbed; end
++			if isfield(structmd,'gridonsurface'), md.mesh.vertexonsurface=structmd.gridonsurface; end
++			if isfield(structmd,'extractedgrids'), md.mesh.extractedvertices=structmd.extractedgrids; end
++			if isfield(structmd,'gridoniceshelf'), md.mask.vertexonfloatingice=structmd.gridoniceshelf; end
++			if isfield(structmd,'gridonicesheet'), md.mask.vertexongroundedice=structmd.gridonicesheet; end
++			if isfield(structmd,'gridonwater'), md.mask.vertexonwater=structmd.gridonwater; end
++			if isfield(structmd,'gridonboundary'), md.mesh.vertexonboundary=structmd.gridonboundary; end
++			if isfield(structmd,'petscoptions') & ~isempty(structmd.petscoptions), md.solver=structmd.petscoptions; end
++			if isfield(structmd,'g'), md.constants.g=structmd.g; end
++			if isfield(structmd,'yts'), md.constants.yts=structmd.yts; end
++			if isfield(structmd,'surface_mass_balance'), md.surfaceforcings.mass_balance=structmd.surface_mass_balance; end
++			if isfield(structmd,'basal_melting_rate'), md.basalforcings.melting_rate=structmd.basal_melting_rate; end
++			if isfield(structmd,'basal_melting_rate_correction'), md.basalforcings.melting_rate_correction=structmd.basal_melting_rate_correction; end
++			if isfield(structmd,'geothermalflux'), md.basalforcings.geothermalflux=structmd.geothermalflux; end
++			if isfield(structmd,'drag'), md.friction.coefficient=structmd.drag; end
++			if isfield(structmd,'drag_coefficient'), md.friction.coefficient=structmd.drag_coefficient; end
++			if isfield(structmd,'drag_p'), md.friction.p=structmd.drag_p; end
++			if isfield(structmd,'drag_q'), md.friction.q=structmd.drag_q; end
++			if isfield(structmd,'riftproperties'), %old implementation
++				md.rifts=rifts();
++				md.rifts.riftproperties=structmd.riftproperties; 
++				md.rifts.riftstruct=structmd.rifts;
++				md.rifts.riftproperties=structmd.riftinfo;
++			end
++			if isfield(structmd,'bamg'), md.private.bamg=structmd.bamg; end
++			if isfield(structmd,'lowmem'), md.settings.lowmem=structmd.lowmem; end
++			if isfield(structmd,'io_gather'), md.settings.io_gather=structmd.io_gather; end
++			if isfield(structmd,'spcwatercolumn'), md.hydrology.spcwatercolumn=structmd.spcwatercolumn; end
++			if isfield(structmd,'hydro_n'), md.hydrology.n=structmd.hydro_n; end
++			if isfield(structmd,'hydro_p'), md.hydrology.p=structmd.hydro_p; end
++			if isfield(structmd,'hydro_q'), md.hydrology.q=structmd.hydro_q; end
++			if isfield(structmd,'hydro_CR'), md.hydrology.CR=structmd.hydro_CR; end
++			if isfield(structmd,'hydro_kn'), md.hydrology.kn=structmd.hydro_kn; end
++			if isfield(structmd,'spctemperature'), md.thermal.spctemperature=structmd.spctemperature; end
++			if isfield(structmd,'min_thermal_constraints'), md.thermal.penalty_threshold=structmd.min_thermal_constraints; end
++			if isfield(structmd,'artificial_diffusivity'), md.thermal.stabilization=structmd.artificial_diffusivity; end
++			if isfield(structmd,'max_nonlinear_iterations'), md.thermal.maxiter=structmd.max_nonlinear_iterations; end
++			if isfield(structmd,'stabilize_constraints'), md.thermal.penalty_lock=structmd.stabilize_constraints; end
++			if isfield(structmd,'penalty_offset'), md.thermal.penalty_factor=structmd.penalty_offset; end
++			if isfield(structmd,'name'), md.miscellaneous.name=structmd.name; end
++			if isfield(structmd,'notes'), md.miscellaneous.notes=structmd.notes; end
++			if isfield(structmd,'dummy'), md.miscellaneous.dummy=structmd.dummy; end
++			if isfield(structmd,'dt'), md.timestepping.time_step=structmd.dt; end
++			if isfield(structmd,'ndt'), md.timestepping.final_time=structmd.ndt; end
++			if isfield(structmd,'time_adapt'), md.timestepping.time_adapt=structmd.time_adapt; end
++			if isfield(structmd,'cfl_coefficient'), md.timestepping.cfl_coefficient=structmd.cfl_coefficient; end
++			if isfield(structmd,'spcthickness'), md.prognostic.spcthickness=structmd.spcthickness; end
++			if isfield(structmd,'artificial_diffusivity'), md.prognostic.stabilization=structmd.artificial_diffusivity; end
++			if isfield(structmd,'hydrostatic_adjustment'), md.prognostic.hydrostatic_adjustment=structmd.hydrostatic_adjustment; end
++			if isfield(structmd,'penalties'), md.prognostic.vertex_pairing=structmd.penalties; end
++			if isfield(structmd,'penalty_offset'), md.prognostic.penalty_factor=structmd.penalty_offset; end
++			if isfield(structmd,'B'), md.materials.rheology_B=structmd.B; end
++			if isfield(structmd,'n'), md.materials.rheology_n=structmd.n; end
++			if isfield(structmd,'rheology_B'), md.materials.rheology_B=structmd.rheology_B; end
++			if isfield(structmd,'rheology_n'), md.materials.rheology_n=structmd.rheology_n; end
++			if isfield(structmd,'elementoniceshelf'), md.mask.elementonfloatingice=structmd.elementoniceshelf; end
++			if isfield(structmd,'elementonicesheet'), md.mask.elementongroundedice=structmd.elementonicesheet; end
++			if isfield(structmd,'elementonwater'), md.mask.elementonwater=structmd.elementonwater; end
++			if isfield(structmd,'nodeoniceshelf'), md.mask.vertexonfloatingice=structmd.nodeoniceshelf; end
++			if isfield(structmd,'nodeonicesheet'), md.mask.vertexongroundedice=structmd.nodeonicesheet; end
++			if isfield(structmd,'nodeonwater'), md.mask.vertexonwater=structmd.nodeonwater; end
++			if isfield(structmd,'spcthickness'), md.balancethickness.spcthickness=structmd.spcthickness; end
++			if isfield(structmd,'artificial_diffusivity'), md.balancethickness.stabilization=structmd.artificial_diffusivity; end
++			if isfield(structmd,'dhdt'), md.balancethickness.thickening_rate=structmd.dhdt; end
++			if isfield(structmd,'ismacayealpattyn'), md.flowequation.ismacayealpattyn=structmd.ismacayealpattyn; end
++			if isfield(structmd,'ishutter'), md.flowequation.ishutter=structmd.ishutter; end
++			if isfield(structmd,'isstokes'), md.flowequation.isstokes=structmd.isstokes; end
++			if isfield(structmd,'elements_type'), md.flowequation.element_equation=structmd.elements_type; end
++			if isfield(structmd,'vertices_type'), md.flowequation.vertex_equation=structmd.vertices_type; end
++			if isfield(structmd,'eps_rel'), md.steadystate.reltol=structmd.eps_rel; end
++			if isfield(structmd,'max_steadystate_iterations'), md.steadystate.maxiter=structmd.max_steadystate_iterations; end
++			if isfield(structmd,'isdiagnostic'), md.transient.isdiagnostic=structmd.isdiagnostic; end
++			if isfield(structmd,'isprognostic'), md.transient.isprognostic=structmd.isprognostic; end
++			if isfield(structmd,'isthermal'), md.transient.isthermal=structmd.isthermal; end
++			if isfield(structmd,'control_analysis'), md.inversion.iscontrol=structmd.control_analysis; end
++			if isfield(structmd,'weights'), md.inversion.cost_functions_coefficients=structmd.weights; end
++			if isfield(structmd,'nsteps'), md.inversion.nsteps=structmd.nsteps; end
++			if isfield(structmd,'maxiter_per_step'), md.inversion.maxiter_per_step=structmd.maxiter_per_step; end
++			if isfield(structmd,'cm_min'), md.inversion.min_parameters=structmd.cm_min; end
++			if isfield(structmd,'cm_max'), md.inversion.max_parameters=structmd.cm_max; end
++			if isfield(structmd,'vx_obs'), md.inversion.vx_obs=structmd.vx_obs; end
++			if isfield(structmd,'vy_obs'), md.inversion.vy_obs=structmd.vy_obs; end
++			if isfield(structmd,'vel_obs'), md.inversion.vel_obs=structmd.vel_obs; end
++			if isfield(structmd,'thickness_obs'), md.inversion.thickness_obs=structmd.thickness_obs; end
++			if isfield(structmd,'vx'), md.initialization.vx=structmd.vx; end
++			if isfield(structmd,'vy'), md.initialization.vy=structmd.vy; end
++			if isfield(structmd,'vz'), md.initialization.vz=structmd.vz; end
++			if isfield(structmd,'vel'), md.initialization.vel=structmd.vel; end
++			if isfield(structmd,'pressure'), md.initialization.pressure=structmd.pressure; end
++			if isfield(structmd,'temperature'), md.initialization.temperature=structmd.temperature; end
++			if isfield(structmd,'waterfraction'), md.initialization.waterfraction=structmd.waterfraction; end
++			if isfield(structmd,'watercolumn'), md.initialization.watercolumn=structmd.watercolumn; end
++			if isfield(structmd,'surface'), md.geometry.surface=structmd.surface; end
++			if isfield(structmd,'bed'), md.geometry.bed=structmd.bed; end
++			if isfield(structmd,'thickness'), md.geometry.thickness=structmd.thickness; end
++			if isfield(structmd,'bathymetry'), md.geometry.bathymetry=structmd.bathymetry; end
++			if isfield(structmd,'thickness_coeff'), md.geometry.hydrostatic_ratio=structmd.thickness_coeff; end
++			if isfield(structmd,'connectivity'), md.mesh.average_vertex_connectivity=structmd.connectivity; end
++			if isfield(structmd,'extractednodes'), md.mesh.extractedvertices=structmd.extractednodes; end
++			if isfield(structmd,'extractedelements'), md.mesh.extractedelements=structmd.extractedelements; end
++			if isfield(structmd,'nodeonboundary'), md.mesh.vertexonboundary=structmd.nodeonboundary; end
++			if isfield(structmd,'hemisphere'), md.mesh.hemisphere=structmd.hemisphere; end
++			if isfield(structmd,'lat'), md.mesh.lat=structmd.lat; end
++			if isfield(structmd,'long'), md.mesh.long=structmd.long; end
++			if isfield(structmd,'segments'), md.mesh.segments=structmd.segments; end
++			if isfield(structmd,'segmentmarkers'), md.mesh.segmentmarkers=structmd.segmentmarkers; end
++			if isfield(structmd,'dim'), md.mesh.dimension=structmd.dim; end
++			if isfield(structmd,'numlayers'), md.mesh.numberoflayers=structmd.numlayers; end
++			if isfield(structmd,'numberofelements'), md.mesh.numberofelements=structmd.numberofelements; end
++			if isfield(structmd,'numberofvertices'), md.mesh.numberofvertices=structmd.numberofvertices; end
++			if isfield(structmd,'numberofnodes'), md.mesh.numberofvertices=structmd.numberofnodes; end
++			if isfield(structmd,'numberofedges'), md.mesh.numberofedges=structmd.numberofedges; end
++			if isfield(structmd,'numberofelements2d'), md.mesh.numberofelements2d=structmd.numberofelements2d; end
++			if isfield(structmd,'numberofnodes2d'), md.mesh.numberofvertices2d=structmd.numberofnodes2d; end
++			if isfield(structmd,'nodeconnectivity'), md.mesh.vertexconnectivity=structmd.nodeconnectivity; end
++			if isfield(structmd,'elementconnectivity'), md.mesh.elementconnectivity=structmd.elementconnectivity; end
++			if isfield(structmd,'uppernodes'), md.mesh.uppervertex=structmd.uppernodes; end
++			if isfield(structmd,'lowernodes'), md.mesh.lowervertex=structmd.lowernodes; end
++			if isfield(structmd,'upperelements'), md.mesh.upperelements=structmd.upperelements; end
++			if isfield(structmd,'lowerelements'), md.mesh.lowerelements=structmd.lowerelements; end
++			if isfield(structmd,'elementonbed'), md.mesh.elementonbed=structmd.elementonbed; end
++			if isfield(structmd,'elementonsurface'), md.mesh.elementonsurface=structmd.elementonsurface; end
++			if isfield(structmd,'nodeonsurface'), md.mesh.vertexonsurface=structmd.nodeonsurface; end
++			if isfield(structmd,'nodeonbed'), md.mesh.vertexonbed=structmd.nodeonbed; end
++			if isfield(structmd,'elements2d'), md.mesh.elements2d=structmd.elements2d; end
++			if isfield(structmd,'y2d'), md.mesh.y2d=structmd.y2d; end
++			if isfield(structmd,'x2d'), md.mesh.x2d=structmd.x2d; end
++			if isfield(structmd,'elements'), md.mesh.elements=structmd.elements; end
++			if isfield(structmd,'edges'), md.mesh.edges=structmd.edges; end
++			if isfield(structmd,'y'), md.mesh.y=structmd.y; end
++			if isfield(structmd,'x'), md.mesh.x=structmd.x; end
++			if isfield(structmd,'z'), md.mesh.z=structmd.z; end
++			if isfield(structmd,'mask'), md.flaim.criterion=structmd.mask; end
++			if isfield(structmd,'pressureload'), md.diagnostic.icefront=structmd.pressureload; end
++			if isfield(structmd,'diagnostic_ref'), md.diagnostic.referential=structmd.diagnostic_ref; end
++			if isfield(structmd,'npart'); md.qmu.numberofpartitions=structmd.npart; end
++			if isfield(structmd,'part'); md.qmu.partition=structmd.part; end
+ 
+-			 %Field changes
+-			 if (isfield(structmd,'type') & ischar(structmd.type)), 
+-				 if strcmpi(structmd.type,'2d'), md.mesh.dimension=2; end
+-				 if strcmpi(structmd.type,'3d'), md.mesh.dimension=3; end
+-			 end
+-			 if isnumeric(md.verbose),
+-				 md.verbose=verbose;
+-			 end
+-			 if size(md.diagnostic.icefront,2)==3 || size(md.diagnostic.icefront,2)==5,
+-				 front=md.diagnostic.icefront;
+-				 md.diagnostic.icefront=[front 1*md.mask.elementonfloatingice(front(:,end))];
+-			 end
+-			 if isfield(structmd,'spcvelocity'), 
+-				 md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-				 md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-				 md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+-				 pos=find(structmd.spcvelocity(:,1)); md.diagnostic.spcvx(pos)=structmd.spcvelocity(pos,4); 
+-				 pos=find(structmd.spcvelocity(:,2)); md.diagnostic.spcvy(pos)=structmd.spcvelocity(pos,5); 
+-				 pos=find(structmd.spcvelocity(:,3)); md.diagnostic.spcvz(pos)=structmd.spcvelocity(pos,6); 
+-			 end
+-			 if isfield(structmd,'spcvx'), 
+-				 md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+-				 pos=find(~isnan(structmd.spcvx)); md.diagnostic.spcvx(pos)=structmd.spcvx(pos); 
+-			 end
+-			 if isfield(structmd,'spcvy'),
+-				 md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
+-				 pos=find(~isnan(structmd.spcvy)); md.diagnostic.spcvy(pos)=structmd.spcvy(pos);     
+-			 end
+-			 if isfield(structmd,'spcvz'),
+-				 md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
+-				 pos=find(~isnan(structmd.spcvz)); md.diagnostic.spcvz(pos)=structmd.spcvz(pos);     
+-			 end
+-			 if ~isempty(structmd.pressureload) & ismember(structmd.pressureload(end,end),[118 119 120]),
+-				 pos=find(structmd.pressureload(:,end)==120); md.diagnostic.icefront(pos,end)=0;
+-				 pos=find(structmd.pressureload(:,end)==118); md.diagnostic.icefront(pos,end)=1;
+-				 pos=find(structmd.pressureload(:,end)==119); md.diagnostic.icefront(pos,end)=2;
+-			 end
+-			 if isfield(structmd,'elements_type') & structmd.elements_type(end,end)>50,
+-				 pos=find(structmd.elements_type==59); md.flowequation.element_equation(pos,end)=0;
+-				 pos=find(structmd.elements_type==55); md.flowequation.element_equation(pos,end)=1;
+-				 pos=find(structmd.elements_type==56); md.flowequation.element_equation(pos,end)=2;
+-				 pos=find(structmd.elements_type==60); md.flowequation.element_equation(pos,end)=3;
+-				 pos=find(structmd.elements_type==62); md.flowequation.element_equation(pos,end)=4;
+-				 pos=find(structmd.elements_type==57); md.flowequation.element_equation(pos,end)=5;
+-				 pos=find(structmd.elements_type==58); md.flowequation.element_equation(pos,end)=6;
+-				 pos=find(structmd.elements_type==61); md.flowequation.element_equation(pos,end)=7;
+-			 end
+-			 if isfield(structmd,'vertices_type') & structmd.vertices_type(end,end)>50,
+-				 pos=find(structmd.vertices_type==59); md.flowequation.vertex_equation(pos,end)=0;
+-				 pos=find(structmd.vertices_type==55); md.flowequation.vertex_equation(pos,end)=1;
+-				 pos=find(structmd.vertices_type==56); md.flowequation.vertex_equation(pos,end)=2;
+-				 pos=find(structmd.vertices_type==60); md.flowequation.vertex_equation(pos,end)=3;
+-				 pos=find(structmd.vertices_type==62); md.flowequation.vertex_equation(pos,end)=4;
+-				 pos=find(structmd.vertices_type==57); md.flowequation.vertex_equation(pos,end)=5;
+-				 pos=find(structmd.vertices_type==58); md.flowequation.vertex_equation(pos,end)=6;
+-				 pos=find(structmd.vertices_type==61); md.flowequation.vertex_equation(pos,end)=7;
+-			 end
+-			 if isfield(structmd,'rheology_law') & isnumeric(structmd.rheology_law),
+-				 if (structmd.rheology_law==272), md.materials.rheology_law='None';      end
+-				 if (structmd.rheology_law==368), md.materials.rheology_law='Paterson';  end
+-				 if (structmd.rheology_law==369), md.materials.rheology_law='Arrhenius'; end
+-			 end
+-			 if isfield(structmd,'groundingline_migration') & isnumeric(structmd.groundingline_migration),
+-				 if (structmd.groundingline_migration==272), md.groundingline.migration='None';      end
+-				 if (structmd.groundingline_migration==273), md.groundingline.migration='AgressiveMigration';  end
+-				 if (structmd.groundingline_migration==274), md.groundingline.migration='SoftMigration'; end
+-			 end
+-			 if isfield(structmd,'control_type') & isnumeric(structmd.control_type),
+-				 if (structmd.control_type==143), md.inversion.control_parameters={'FrictionCoefficient'}; end
+-				 if (structmd.control_type==190), md.inversion.control_parameters={'RheologyBbar'}; end
+-				 if (structmd.control_type==147), md.inversion.control_parameters={'Thickeningrate'}; end
+-			 end
+-			 if isfield(structmd,'cm_responses') & ismember(structmd.cm_responses(end,end),[165:170 383 388 389]),
+-				 pos=find(structmd.cm_responses==166); md.inversion.cost_functions(pos)=101;
+-				 pos=find(structmd.cm_responses==167); md.inversion.cost_functions(pos)=102;
+-				 pos=find(structmd.cm_responses==168); md.inversion.cost_functions(pos)=103;
+-				 pos=find(structmd.cm_responses==169); md.inversion.cost_functions(pos)=104;
+-				 pos=find(structmd.cm_responses==170); md.inversion.cost_functions(pos)=105;
+-				 pos=find(structmd.cm_responses==165); md.inversion.cost_functions(pos)=201;
+-				 pos=find(structmd.cm_responses==389); md.inversion.cost_functions(pos)=501;
+-				 pos=find(structmd.cm_responses==388); md.inversion.cost_functions(pos)=502;
+-				 pos=find(structmd.cm_responses==382); md.inversion.cost_functions(pos)=503;
+-			 end
++			%Field changes
++			if (isfield(structmd,'type') & ischar(structmd.type)), 
++				if strcmpi(structmd.type,'2d'), md.mesh.dimension=2; end
++				if strcmpi(structmd.type,'3d'), md.mesh.dimension=3; end
++			end
++			if isnumeric(md.verbose),
++				md.verbose=verbose;
++			end
++			if size(md.diagnostic.icefront,2)==3 || size(md.diagnostic.icefront,2)==5,
++				front=md.diagnostic.icefront;
++				md.diagnostic.icefront=[front 1*md.mask.elementonfloatingice(front(:,end))];
++			end
++			if isfield(structmd,'spcvelocity'), 
++				md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++				md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++				md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++				pos=find(structmd.spcvelocity(:,1)); md.diagnostic.spcvx(pos)=structmd.spcvelocity(pos,4); 
++				pos=find(structmd.spcvelocity(:,2)); md.diagnostic.spcvy(pos)=structmd.spcvelocity(pos,5); 
++				pos=find(structmd.spcvelocity(:,3)); md.diagnostic.spcvz(pos)=structmd.spcvelocity(pos,6); 
++			end
++			if isfield(structmd,'spcvx'), 
++				md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
++				pos=find(~isnan(structmd.spcvx)); md.diagnostic.spcvx(pos)=structmd.spcvx(pos); 
++			end
++			if isfield(structmd,'spcvy'),
++				md.diagnostic.spcvy=NaN*ones(md.mesh.numberofvertices,1);
++				pos=find(~isnan(structmd.spcvy)); md.diagnostic.spcvy(pos)=structmd.spcvy(pos);     
++			end
++			if isfield(structmd,'spcvz'),
++				md.diagnostic.spcvz=NaN*ones(md.mesh.numberofvertices,1);
++				pos=find(~isnan(structmd.spcvz)); md.diagnostic.spcvz(pos)=structmd.spcvz(pos);     
++			end
++			if ~isempty(structmd.pressureload) & ismember(structmd.pressureload(end,end),[118 119 120]),
++				pos=find(structmd.pressureload(:,end)==120); md.diagnostic.icefront(pos,end)=0;
++				pos=find(structmd.pressureload(:,end)==118); md.diagnostic.icefront(pos,end)=1;
++				pos=find(structmd.pressureload(:,end)==119); md.diagnostic.icefront(pos,end)=2;
++			end
++			if isfield(structmd,'elements_type') & structmd.elements_type(end,end)>50,
++				pos=find(structmd.elements_type==59); md.flowequation.element_equation(pos,end)=0;
++				pos=find(structmd.elements_type==55); md.flowequation.element_equation(pos,end)=1;
++				pos=find(structmd.elements_type==56); md.flowequation.element_equation(pos,end)=2;
++				pos=find(structmd.elements_type==60); md.flowequation.element_equation(pos,end)=3;
++				pos=find(structmd.elements_type==62); md.flowequation.element_equation(pos,end)=4;
++				pos=find(structmd.elements_type==57); md.flowequation.element_equation(pos,end)=5;
++				pos=find(structmd.elements_type==58); md.flowequation.element_equation(pos,end)=6;
++				pos=find(structmd.elements_type==61); md.flowequation.element_equation(pos,end)=7;
++			end
++			if isfield(structmd,'vertices_type') & structmd.vertices_type(end,end)>50,
++				pos=find(structmd.vertices_type==59); md.flowequation.vertex_equation(pos,end)=0;
++				pos=find(structmd.vertices_type==55); md.flowequation.vertex_equation(pos,end)=1;
++				pos=find(structmd.vertices_type==56); md.flowequation.vertex_equation(pos,end)=2;
++				pos=find(structmd.vertices_type==60); md.flowequation.vertex_equation(pos,end)=3;
++				pos=find(structmd.vertices_type==62); md.flowequation.vertex_equation(pos,end)=4;
++				pos=find(structmd.vertices_type==57); md.flowequation.vertex_equation(pos,end)=5;
++				pos=find(structmd.vertices_type==58); md.flowequation.vertex_equation(pos,end)=6;
++				pos=find(structmd.vertices_type==61); md.flowequation.vertex_equation(pos,end)=7;
++			end
++			if isfield(structmd,'rheology_law') & isnumeric(structmd.rheology_law),
++				if (structmd.rheology_law==272), md.materials.rheology_law='None';      end
++				if (structmd.rheology_law==368), md.materials.rheology_law='Paterson';  end
++				if (structmd.rheology_law==369), md.materials.rheology_law='Arrhenius'; end
++			end
++			if isfield(structmd,'groundingline_migration') & isnumeric(structmd.groundingline_migration),
++				if (structmd.groundingline_migration==272), md.groundingline.migration='None';      end
++				if (structmd.groundingline_migration==273), md.groundingline.migration='AgressiveMigration';  end
++				if (structmd.groundingline_migration==274), md.groundingline.migration='SoftMigration'; end
++			end
++			if isfield(structmd,'control_type') & isnumeric(structmd.control_type),
++				if (structmd.control_type==143), md.inversion.control_parameters={'FrictionCoefficient'}; end
++				if (structmd.control_type==190), md.inversion.control_parameters={'RheologyBbar'}; end
++				if (structmd.control_type==147), md.inversion.control_parameters={'Thickeningrate'}; end
++			end
++			if isfield(structmd,'cm_responses') & ismember(structmd.cm_responses(end,end),[165:170 383 388 389]),
++				pos=find(structmd.cm_responses==166); md.inversion.cost_functions(pos)=101;
++				pos=find(structmd.cm_responses==167); md.inversion.cost_functions(pos)=102;
++				pos=find(structmd.cm_responses==168); md.inversion.cost_functions(pos)=103;
++				pos=find(structmd.cm_responses==169); md.inversion.cost_functions(pos)=104;
++				pos=find(structmd.cm_responses==170); md.inversion.cost_functions(pos)=105;
++				pos=find(structmd.cm_responses==165); md.inversion.cost_functions(pos)=201;
++				pos=find(structmd.cm_responses==389); md.inversion.cost_functions(pos)=501;
++				pos=find(structmd.cm_responses==388); md.inversion.cost_functions(pos)=502;
++				pos=find(structmd.cm_responses==382); md.inversion.cost_functions(pos)=503;
++			end
+ 
+-			 if isfield(structmd,'artificial_diffusivity') & structmd.artificial_diffusivity==2,
+-					 md.thermal.stabilization=2;
+-					 md.prognostic.stabilization=1;
+-					 md.balancethickness.stabilization=1;
+-			 end
+-			 if isnumeric(md.prognostic.hydrostatic_adjustment)
+-				 if md.prognostic.hydrostatic_adjustment==269,
+-					 md.prognostic.hydrostatic_adjustment='Incremental';
+-				 else
+-					 md.prognostic.hydrostatic_adjustment='Absolute';
+-				 end
+-			 end
++			if isfield(structmd,'artificial_diffusivity') & structmd.artificial_diffusivity==2,
++					md.thermal.stabilization=2;
++					md.prognostic.stabilization=1;
++					md.balancethickness.stabilization=1;
++			end
++			if isnumeric(md.prognostic.hydrostatic_adjustment)
++				if md.prognostic.hydrostatic_adjustment==269,
++					md.prognostic.hydrostatic_adjustment='Incremental';
++				else
++					md.prognostic.hydrostatic_adjustment='Absolute';
++				end
++			end
+ 
+-			 %New fields
+-			 if ~isfield(structmd,'upperelements');
+-				 md.mesh.upperelements=transpose(1:md.mesh.numberofelements)+md.mesh.numberofelements2d;
+-				 md.mesh.upperelements(end-md.mesh.numberofelements2d+1:end)=NaN;
+-			 end
+-			 if ~isfield(structmd,'lowerelements');
+-				 md.mesh.lowerelements=transpose(1:md.mesh.numberofelements)-md.mesh.numberofelements2d;
+-				 md.mesh.lowerelements(1:md.mesh.numberofelements2d)=NaN;
+-			 end
++			%New fields
++			if ~isfield(structmd,'upperelements');
++				md.mesh.upperelements=transpose(1:md.mesh.numberofelements)+md.mesh.numberofelements2d;
++				md.mesh.upperelements(end-md.mesh.numberofelements2d+1:end)=NaN;
++			end
++			if ~isfield(structmd,'lowerelements');
++				md.mesh.lowerelements=transpose(1:md.mesh.numberofelements)-md.mesh.numberofelements2d;
++				md.mesh.lowerelements(1:md.mesh.numberofelements2d)=NaN;
++			end
+ 
+-			 if ~isfield(structmd,'diagnostic_ref');
+-				 md.diagnostic.referential=NaN*ones(md.mesh.numberofvertices,6);
+-			 end
++			if ~isfield(structmd,'diagnostic_ref');
++				md.diagnostic.referential=NaN*ones(md.mesh.numberofvertices,6);
++			end
+ 
+-		 end% }}}
+-		 function md = setdefaultparameters(md) % {{{
++		end% }}}
++		function md = setdefaultparameters(md) % {{{
+ 
+-			 %initialize subclasses
+-			 md.mesh             = mesh();
+-			 md.mask             = mask();
+-			 md.constants        = constants();
+-			 md.geometry         = geometry();
+-			 md.initialization   = initialization();
+-			 md.surfaceforcings  = surfaceforcings();
+-			 md.basalforcings    = basalforcings();
+-			 md.friction         = friction();
+-			 md.rifts            = rifts();
+-			 md.timestepping     = timestepping();
+-			 md.groundingline    = groundingline();
+-			 md.materials        = matice();
+-			 md.flowequation     = flowequation();
+-			 md.debug            = debug();
+-			 md.verbose          = verbose('solution',true,'qmu',true,'control',true);
+-			 md.settings         = settings();
+-			 md.solver           = solver();
+-			 if ismumps(),
+-				 md.solver           = addoptions(md.solver,DiagnosticVertAnalysisEnum(),mumpsoptions());
+-			 else
+-				 md.solver           = addoptions(md.solver,DiagnosticVertAnalysisEnum(),iluasmoptions());
+-			 end
+-			 md.cluster          = generic();
+-			 md.balancethickness = balancethickness();
+-			 md.diagnostic       = diagnostic();
+-			 md.hydrology        = hydrology();
+-			 md.prognostic       = prognostic();
+-			 md.thermal          = thermal();
+-			 md.steadystate      = steadystate();
+-			 md.transient        = transient();
+-			 md.autodiff         = autodiff();
+-			 md.flaim            = flaim();
+-			 md.inversion        = inversion();
+-			 md.qmu              = qmu();
+-			 md.radaroverlay     = radaroverlay();
+-			 md.results          = struct();
+-			 md.miscellaneous    = miscellaneous();
+-			 md.private          = private();
+-		 end
+-		 %}}}
+-		 function disp(obj) % {{{
+-			 disp(sprintf('%19s: %-22s -- %s','mesh'            ,['[1x1 ' class(obj.mesh) ']'],'mesh properties'));
+-			 disp(sprintf('%19s: %-22s -- %s','mask'            ,['[1x1 ' class(obj.mask) ']'],'defines grounded and floating elements'));
+-			 disp(sprintf('%19s: %-22s -- %s','geometry'        ,['[1x1 ' class(obj.geometry) ']'],'surface elevation, bedrock topography, ice thickness,...'));
+-			 disp(sprintf('%19s: %-22s -- %s','constants'       ,['[1x1 ' class(obj.constants) ']'],'physical constants'));
+-			 disp(sprintf('%19s: %-22s -- %s','surfaceforcings' ,['[1x1 ' class(obj.surfaceforcings) ']'],'surface forcings'));
+-			 disp(sprintf('%19s: %-22s -- %s','basalforcings'   ,['[1x1 ' class(obj.basalforcings) ']'],'bed forcings'));
+-			 disp(sprintf('%19s: %-22s -- %s','materials'       ,['[1x1 ' class(obj.materials) ']'],'material properties'));
+-			 disp(sprintf('%19s: %-22s -- %s','friction'        ,['[1x1 ' class(obj.friction) ']'],'basal friction/drag properties'));
+-			 disp(sprintf('%19s: %-22s -- %s','flowequation'    ,['[1x1 ' class(obj.flowequation) ']'],'flow equations'));
+-			 disp(sprintf('%19s: %-22s -- %s','timestepping'    ,['[1x1 ' class(obj.timestepping) ']'],'time stepping for transient models'));
+-			 disp(sprintf('%19s: %-22s -- %s','initialization'  ,['[1x1 ' class(obj.initialization) ']'],'initial guess/state'));
+-			 disp(sprintf('%19s: %-22s -- %s','rifts'           ,['[1x1 ' class(obj.rifts) ']'],'rifts properties'));
+-			 disp(sprintf('%19s: %-22s -- %s','debug'           ,['[1x1 ' class(obj.debug) ']'],'debugging tools (valgrind, gprof)'));
+-			 disp(sprintf('%19s: %-22s -- %s','verbose'         ,['[1x1 ' class(obj.verbose) ']'],'verbosity level in solve'));
+-			 disp(sprintf('%19s: %-22s -- %s','settings'        ,['[1x1 ' class(obj.settings) ']'],'settings properties'));
+-			 disp(sprintf('%19s: %-22s -- %s','solver'          ,['[1x1 ' class(obj.solver) ']'],'PETSc options for each solution'));
+-			 disp(sprintf('%19s: %-22s -- %s','cluster'         ,['[1x1 ' class(obj.cluster) ']'],'cluster parameters (number of cpus...)'));
+-			 disp(sprintf('%19s: %-22s -- %s','balancethickness',['[1x1 ' class(obj.balancethickness) ']'],'parameters for balancethickness solution'));
+-			 disp(sprintf('%19s: %-22s -- %s','diagnostic'      ,['[1x1 ' class(obj.diagnostic) ']'],'parameters for diagnostic solution'));
+-			 disp(sprintf('%19s: %-22s -- %s','groundingline'   ,['[1x1 ' class(obj.groundingline) ']'],'parameters for groundingline solution'));
+-			 disp(sprintf('%19s: %-22s -- %s','hydrology'       ,['[1x1 ' class(obj.hydrology) ']'],'parameters for hydrology solution'));
+-			 disp(sprintf('%19s: %-22s -- %s','prognostic'      ,['[1x1 ' class(obj.prognostic) ']'],'parameters for prognostic solution'));
+-			 disp(sprintf('%19s: %-22s -- %s','thermal'         ,['[1x1 ' class(obj.thermal) ']'],'parameters for thermal solution'));
+-			 disp(sprintf('%19s: %-22s -- %s','steadystate'     ,['[1x1 ' class(obj.steadystate) ']'],'parameters for steadystate solution'));
+-			 disp(sprintf('%19s: %-22s -- %s','transient'       ,['[1x1 ' class(obj.transient) ']'],'parameters for transient solution'));
+-			 disp(sprintf('%19s: %-22s -- %s','autodiff'        ,['[1x1 ' class(obj.autodiff) ']'],'automatic differentiation parameters'));
+-			 disp(sprintf('%19s: %-22s -- %s','flaim'           ,['[1x1 ' class(obj.flaim) ']'],'flaim parameters'));
+-			 disp(sprintf('%19s: %-22s -- %s','inversion'       ,['[1x1 ' class(obj.inversion) ']'],'parameters for inverse methods'));
+-			 disp(sprintf('%19s: %-22s -- %s','qmu'             ,['[1x1 ' class(obj.qmu) ']'],'dakota properties'));
+-			 disp(sprintf('%19s: %-22s -- %s','results'         ,['[1x1 ' class(obj.results) ']'],'model results'));
+-			 disp(sprintf('%19s: %-22s -- %s','radaroverlay'    ,['[1x1 ' class(obj.radaroverlay) ']'],'radar image for plot overlay'));
+-			 disp(sprintf('%19s: %-22s -- %s','miscellaneous'   ,['[1x1 ' class(obj.miscellaneous) ']'],'miscellaneous fields'));
+-		 end % }}}
+-	 end
++			%initialize subclasses
++			md.mesh             = mesh();
++			md.mask             = mask();
++			md.constants        = constants();
++			md.geometry         = geometry();
++			md.initialization   = initialization();
++			md.surfaceforcings  = surfaceforcings();
++			md.basalforcings    = basalforcings();
++			md.friction         = friction();
++			md.rifts            = rifts();
++			md.timestepping     = timestepping();
++			md.groundingline    = groundingline();
++			md.materials        = matice();
++			md.flowequation     = flowequation();
++			md.debug            = debug();
++			md.verbose          = verbose('solution',true,'qmu',true,'control',true);
++			md.settings         = settings();
++			md.solver           = solver();
++			if ismumps(),
++				md.solver           = addoptions(md.solver,DiagnosticVertAnalysisEnum(),mumpsoptions());
++			else
++				md.solver           = addoptions(md.solver,DiagnosticVertAnalysisEnum(),iluasmoptions());
++			end
++			md.cluster          = generic();
++			md.balancethickness = balancethickness();
++			md.diagnostic       = diagnostic();
++			md.hydrology        = hydrology();
++			md.prognostic       = prognostic();
++			md.thermal          = thermal();
++			md.steadystate      = steadystate();
++			md.transient        = transient();
++			md.autodiff         = autodiff();
++			md.flaim            = flaim();
++			md.inversion        = inversion();
++			md.qmu              = qmu();
++			md.radaroverlay     = radaroverlay();
++			md.results          = struct();
++			md.miscellaneous    = miscellaneous();
++			md.private          = private();
++		end
++		%}}}
++		function disp(obj) % {{{
++			disp(sprintf('%19s: %-22s -- %s','mesh'            ,['[1x1 ' class(obj.mesh) ']'],'mesh properties'));
++			disp(sprintf('%19s: %-22s -- %s','mask'            ,['[1x1 ' class(obj.mask) ']'],'defines grounded and floating elements'));
++			disp(sprintf('%19s: %-22s -- %s','geometry'        ,['[1x1 ' class(obj.geometry) ']'],'surface elevation, bedrock topography, ice thickness,...'));
++			disp(sprintf('%19s: %-22s -- %s','constants'       ,['[1x1 ' class(obj.constants) ']'],'physical constants'));
++			disp(sprintf('%19s: %-22s -- %s','surfaceforcings' ,['[1x1 ' class(obj.surfaceforcings) ']'],'surface forcings'));
++			disp(sprintf('%19s: %-22s -- %s','basalforcings'   ,['[1x1 ' class(obj.basalforcings) ']'],'bed forcings'));
++			disp(sprintf('%19s: %-22s -- %s','materials'       ,['[1x1 ' class(obj.materials) ']'],'material properties'));
++			disp(sprintf('%19s: %-22s -- %s','friction'        ,['[1x1 ' class(obj.friction) ']'],'basal friction/drag properties'));
++			disp(sprintf('%19s: %-22s -- %s','flowequation'    ,['[1x1 ' class(obj.flowequation) ']'],'flow equations'));
++			disp(sprintf('%19s: %-22s -- %s','timestepping'    ,['[1x1 ' class(obj.timestepping) ']'],'time stepping for transient models'));
++			disp(sprintf('%19s: %-22s -- %s','initialization'  ,['[1x1 ' class(obj.initialization) ']'],'initial guess/state'));
++			disp(sprintf('%19s: %-22s -- %s','rifts'           ,['[1x1 ' class(obj.rifts) ']'],'rifts properties'));
++			disp(sprintf('%19s: %-22s -- %s','debug'           ,['[1x1 ' class(obj.debug) ']'],'debugging tools (valgrind, gprof)'));
++			disp(sprintf('%19s: %-22s -- %s','verbose'         ,['[1x1 ' class(obj.verbose) ']'],'verbosity level in solve'));
++			disp(sprintf('%19s: %-22s -- %s','settings'        ,['[1x1 ' class(obj.settings) ']'],'settings properties'));
++			disp(sprintf('%19s: %-22s -- %s','solver'          ,['[1x1 ' class(obj.solver) ']'],'PETSc options for each solution'));
++			disp(sprintf('%19s: %-22s -- %s','cluster'         ,['[1x1 ' class(obj.cluster) ']'],'cluster parameters (number of cpus...)'));
++			disp(sprintf('%19s: %-22s -- %s','balancethickness',['[1x1 ' class(obj.balancethickness) ']'],'parameters for balancethickness solution'));
++			disp(sprintf('%19s: %-22s -- %s','diagnostic'      ,['[1x1 ' class(obj.diagnostic) ']'],'parameters for diagnostic solution'));
++			disp(sprintf('%19s: %-22s -- %s','groundingline'   ,['[1x1 ' class(obj.groundingline) ']'],'parameters for groundingline solution'));
++			disp(sprintf('%19s: %-22s -- %s','hydrology'       ,['[1x1 ' class(obj.hydrology) ']'],'parameters for hydrology solution'));
++			disp(sprintf('%19s: %-22s -- %s','prognostic'      ,['[1x1 ' class(obj.prognostic) ']'],'parameters for prognostic solution'));
++			disp(sprintf('%19s: %-22s -- %s','thermal'         ,['[1x1 ' class(obj.thermal) ']'],'parameters for thermal solution'));
++			disp(sprintf('%19s: %-22s -- %s','steadystate'     ,['[1x1 ' class(obj.steadystate) ']'],'parameters for steadystate solution'));
++			disp(sprintf('%19s: %-22s -- %s','transient'       ,['[1x1 ' class(obj.transient) ']'],'parameters for transient solution'));
++			disp(sprintf('%19s: %-22s -- %s','autodiff'        ,['[1x1 ' class(obj.autodiff) ']'],'automatic differentiation parameters'));
++			disp(sprintf('%19s: %-22s -- %s','flaim'           ,['[1x1 ' class(obj.flaim) ']'],'flaim parameters'));
++			disp(sprintf('%19s: %-22s -- %s','inversion'       ,['[1x1 ' class(obj.inversion) ']'],'parameters for inverse methods'));
++			disp(sprintf('%19s: %-22s -- %s','qmu'             ,['[1x1 ' class(obj.qmu) ']'],'dakota properties'));
++			disp(sprintf('%19s: %-22s -- %s','results'         ,['[1x1 ' class(obj.results) ']'],'model results'));
++			disp(sprintf('%19s: %-22s -- %s','radaroverlay'    ,['[1x1 ' class(obj.radaroverlay) ']'],'radar image for plot overlay'));
++			disp(sprintf('%19s: %-22s -- %s','miscellaneous'   ,['[1x1 ' class(obj.miscellaneous) ']'],'miscellaneous fields'));
++		end % }}}
++	end
+  end
Index: /issm/oecreview/Archive/13393-13976/ISSM-13692-13693.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13692-13693.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13692-13693.diff	(revision 13980)
@@ -0,0 +1,258 @@
+Index: ../trunk-jpl/externalpackages/android/android-sdk/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/android/android-sdk/install.sh	(revision 13692)
++++ ../trunk-jpl/externalpackages/android/android-sdk/install.sh	(revision 13693)
+@@ -1,5 +1,4 @@
+ #!/bin/bash
+-set -eu 
+ 
+ # This installs the Android SDK (Software Development Kit)
+ # which is needed for the compilation of the Java project. 
+Index: ../trunk-jpl/externalpackages/android/android-ndk/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/android/android-ndk/install.sh	(revision 13692)
++++ ../trunk-jpl/externalpackages/android/android-ndk/install.sh	(revision 13693)
+@@ -1,5 +1,4 @@
+ #!/bin/bash
+-set -eu
+ 
+ # This installs the Android NDK (Native Development Kit)
+ # which is needed for the compilation of C/C++ code into the 
+Index: ../trunk-jpl/externalpackages/distribute/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/distribute/install.sh	(revision 13692)
++++ ../trunk-jpl/externalpackages/distribute/install.sh	(revision 13693)
+@@ -3,4 +3,4 @@
+ 
+ #Download from ISSM server
+ $ISSM_DIR/scripts/DownloadExternalPackage.py 'http://python-distribute.org/distribute_setup.py' 'distribute_setup.py'
+-python distribute_setup.py
++sudo python distribute_setup.py
+Index: ../trunk-jpl/externalpackages/numpy/install-macosx-lion.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/numpy/install-macosx-lion.sh	(revision 13692)
++++ ../trunk-jpl/externalpackages/numpy/install-macosx-lion.sh	(revision 13693)
+@@ -5,10 +5,20 @@
+ export CXX=g++
+ export FFLAGS=-ff2c
+ 
++#clean up
++rm -rf numpy
++rm -rf numpy-1.7.0b2
++
+ #download numpy first
+-git clone https://github.com/numpy/numpy.git
++#export GIT_SSL_NO_VERIFY=true 
++#git clone https://github.com/numpy/numpy.git
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/numpy-1.7.0b2.tar.gz' 'numpy-1.7.0b2.tar.gz'
+ 
+ #install numpy
+-cd numpy
++tar -zxvf numpy-1.7.0b2.tar.gz
++cd numpy-1.7.0b2
+ python setup.py build
+ python setup.py install
++cd ..
++python -c "import numpy; print 'Installed NumPy', numpy.__version__"
++python -c "import numpy; numpy.test()"
+Index: ../trunk-jpl/src/c/modules/UpdateConstraintsx/UpdateConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/UpdateConstraintsx/UpdateConstraintsx.cpp	(revision 13692)
++++ ../trunk-jpl/src/c/modules/UpdateConstraintsx/UpdateConstraintsx.cpp	(revision 13693)
+@@ -1,32 +0,0 @@
+-/*!\file UpdateConstraintsx
+- * \brief: update constraints and nodes (especially degree of freedom distribution) at time t.
+- */
+-
+-#include "./UpdateConstraintsx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../modules/modules.h"
+-#include "../../io/io.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void UpdateConstraintsx(Nodes* nodes,Constraints* constraints,Parameters* parameters){
+-
+-	IssmDouble time;
+-	int    analysis_type;
+-
+-	/*retrieve parameters: */
+-	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	parameters->FindParam(&time,TimeEnum);
+-
+-	/*start module: */
+-	if(VerboseModule()) _pprintLine_("   Updating constraints for time: " << time);
+-
+-	/*First, update dof constraints in nodes, using constraints: */
+-	SpcNodesx(nodes,constraints,parameters,analysis_type); 
+-
+-	/*Now, update degrees of freedoms: */
+-	NodesDofx(nodes,parameters,analysis_type);
+-
+-}
+Index: ../trunk-jpl/src/c/modules/UpdateConstraintsx/UpdateConstraintsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/UpdateConstraintsx/UpdateConstraintsx.h	(revision 13692)
++++ ../trunk-jpl/src/c/modules/UpdateConstraintsx/UpdateConstraintsx.h	(revision 13693)
+@@ -1,15 +0,0 @@
+-/*!\file:  UpdateConstraintsx.h
+- * \brief header file for node and constraints update
+- */ 
+-
+-#ifndef _UPDATECONSTRAINTSX_H
+-#define _UPDATECONSTRAINTSX_H
+-
+-#include "../../classes/objects/objects.h"
+-#include "../../Container/Container.h"
+-#include "../../toolkits/toolkits.h"
+-
+-/* local prototypes: */
+-void UpdateConstraintsx(Nodes* nodes,Constraints* constraints,Parameters* parameters);
+-
+-#endif  /* _UPDATECONSTRAINTSX_H */
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13692)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13693)
+@@ -120,7 +120,6 @@
+ #include "./ThicknessAbsGradientx/ThicknessAbsGradientx.h"
+ #include "./ThicknessAlongGradientx/ThicknessAlongGradientx.h"
+ #include "./ThicknessAcrossGradientx/ThicknessAcrossGradientx.h"
+-#include "./UpdateConstraintsx/UpdateConstraintsx.h"
+ #include "./UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.h"
+ #include "./VerticesDofx/VerticesDofx.h"
+ #include "./VecMergex/VecMergex.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13692)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13693)
+@@ -303,8 +303,6 @@
+ 					./modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp\
+ 					./modules/SmbGradientsx/SmbGradientsx.h\
+ 					./modules/SmbGradientsx/SmbGradientsx.cpp\
+-					./modules/UpdateConstraintsx/UpdateConstraintsx.h\
+-					./modules/UpdateConstraintsx/UpdateConstraintsx.cpp\
+ 					./modules/MeshPartitionx/MeshPartitionx.h\
+ 					./modules/Reducevectorgtofx/Reducevectorgtofx.cpp\
+ 					./modules/Reducevectorgtofx/Reducevectorgtofx.h\
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13692)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13693)
+@@ -363,3 +363,23 @@
+ 	return 1;
+ }
+ /*}}}*/
++/*FUNCTION void FemModel::UpdateConstraintsx(void){{{*/
++void FemModel::UpdateConstraintsx(void){
++
++	IssmDouble time;
++	int    analysis_type;
++
++	/*retrieve parameters: */
++	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++	parameters->FindParam(&time,TimeEnum);
++
++	/*start module: */
++	if(VerboseModule()) _pprintLine_("   Updating constraints for time: " << time);
++
++	/*First, update dof constraints in nodes, using constraints: */
++	SpcNodesx(nodes,constraints,parameters,analysis_type); 
++
++	/*Now, update degrees of freedoms: */
++	NodesDofx(nodes,parameters,analysis_type);
++
++}
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13692)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13693)
+@@ -63,7 +63,7 @@
+ 		/*}}}*/
+ 		/*Modules: {{{*/
+ 		int UpdateVertexPositionsx(void);
+-
++		void UpdateConstraintsx(void);
+ 		/*}}}*/
+ 
+ };
+Index: ../trunk-jpl/src/c/solvers/solver_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_nonlinear.cpp	(revision 13692)
++++ ../trunk-jpl/src/c/solvers/solver_nonlinear.cpp	(revision 13693)
+@@ -38,7 +38,7 @@
+ 	femmodel->parameters->FindParam(&min_mechanical_constraints,DiagnosticRiftPenaltyThresholdEnum);
+ 	femmodel->parameters->FindParam(&max_nonlinear_iterations,DiagnosticMaxiterEnum);
+ 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	UpdateConstraintsx(femmodel->nodes,femmodel->constraints,femmodel->parameters);
++	femmodel->UpdateConstraintsx();
+ 
+ 	/*Were loads requested as output? : */
+ 	if(conserve_loads) loads=(Loads*)femmodel->loads->Copy(); //protect loads from being modified by the solution
+Index: ../trunk-jpl/src/c/solvers/solver_linear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_linear.cpp	(revision 13692)
++++ ../trunk-jpl/src/c/solvers/solver_linear.cpp	(revision 13693)
+@@ -21,7 +21,7 @@
+ 
+ 	/*Recover parameters: */
+ 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	UpdateConstraintsx(femmodel->nodes,femmodel->constraints,femmodel->parameters);
++	femmodel->UpdateConstraintsx();
+ 
+ 	SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ 	CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+Index: ../trunk-jpl/src/c/solvers/solver_newton.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_newton.cpp	(revision 13692)
++++ ../trunk-jpl/src/c/solvers/solver_newton.cpp	(revision 13693)
+@@ -37,7 +37,7 @@
+ 	/*Recover parameters: */
+ 	femmodel->parameters->FindParam(&max_nonlinear_iterations,DiagnosticMaxiterEnum);
+ 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	UpdateConstraintsx(femmodel->nodes,femmodel->constraints,femmodel->parameters);
++	femmodel->UpdateConstraintsx();
+ 
+ 	count=1;
+ 	converged=false;
+Index: ../trunk-jpl/src/c/solvers/solver_stokescoupling_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_stokescoupling_nonlinear.cpp	(revision 13692)
++++ ../trunk-jpl/src/c/solvers/solver_stokescoupling_nonlinear.cpp	(revision 13693)
+@@ -40,7 +40,7 @@
+ 	/*Recover parameters: */
+ 	femmodel->parameters->FindParam(&min_mechanical_constraints,DiagnosticRiftPenaltyThresholdEnum);
+ 	femmodel->parameters->FindParam(&max_nonlinear_iterations,DiagnosticMaxiterEnum);
+-	UpdateConstraintsx(femmodel->nodes,femmodel->constraints,femmodel->parameters);
++	femmodel->UpdateConstraintsx();
+ 
+ 	count=1;
+ 	converged=false;
+Index: ../trunk-jpl/src/c/solvers/solver_thermal_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_thermal_nonlinear.cpp	(revision 13692)
++++ ../trunk-jpl/src/c/solvers/solver_thermal_nonlinear.cpp	(revision 13693)
+@@ -48,7 +48,7 @@
+ 	if(VerboseSolution()) _pprintLine_("starting direct shooting method");
+ 	InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,true,ResetPenaltiesEnum);
+ 	InputUpdateFromConstantx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,false,ConvergedEnum);
+-	UpdateConstraintsx(femmodel->nodes,femmodel->constraints,femmodel->parameters);
++	femmodel->UpdateConstraintsx();
+ 
+ 	for(;;){
+ 
+Index: ../trunk-jpl/src/c/solvers/solver_adjoint_linear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_adjoint_linear.cpp	(revision 13692)
++++ ../trunk-jpl/src/c/solvers/solver_adjoint_linear.cpp	(revision 13693)
+@@ -23,7 +23,7 @@
+ 
+ 	/*Recover parameters: */
+ 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	UpdateConstraintsx(femmodel->nodes,femmodel->constraints,femmodel->parameters);
++	femmodel->UpdateConstraintsx();
+ 
+ 	SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ 	CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13693-13694.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13693-13694.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13693-13694.diff	(revision 13980)
@@ -0,0 +1,58 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-dev-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-dev-linux64.sh	(revision 13693)
++++ ../trunk-jpl/externalpackages/petsc/install-dev-linux64.sh	(revision 13694)
+@@ -1,7 +1,7 @@
+ #!/bin/bash
+ set -eu
+ 
+-STEP=2
++STEP=1
+ 
+ if [ $STEP -eq 1 ]; then
+ 	# Adapted from petsc 3.2. 
+@@ -18,11 +18,14 @@
+ #      cd config/BuildSystem
+ #      hg pull -u
+ 
+-
+ # configure script
+-# Note: using metis from externalpackages did not work...
+-#       -for now download new metis
+-#       -rename metis in externalpackages to metis2
++# Note: 
++#  Metis: -using metis from externalpackages did not work...
++#         -for now download new metis
++#         -rename metis in externalpackages to metis2
++#
++# SuperLU: -If download-..-=yes does not work try downloading from
++#    --download-superlu=http://crd.lbl.gov/~xiaoye/SuperLU/superlu_4.3.tar.gz \
+ 
+ 
+ if [ $STEP -eq 2 ]; then
+@@ -37,7 +40,6 @@
+ 	--with-debugging=0 \
+ 	--with-shared-libraries=1 \
+ 	--download-mumps=yes \
+-	--download-plapack=yes \
+ 	--download-scalapack=yes \
+ 	--download-blacs=yes  \
+ 	--download-blas=yes \
+@@ -46,14 +48,11 @@
+ 	--download-metis=yes \
+ 	--download-trilinos=yes \
+ 	--download-euclid=yes \
+-	--download-pastix=yes \
+-	--download-ptscotch=yes \
+ 	--download-spooles=yes \
+ 	--download-spai=yes \
+-	--download-superlu=yes \
+-	--download-hypre=yes \
+-	--download-prometheus=yes \
+-	--with-pic=1
++	--download-superlu=http://crd.lbl.gov/~xiaoye/SuperLU/superlu_4.3.tar.gz \
++	--download-hypre=yes 
++#	--with-pic=1
+ 
+ 	#Compile petsc and install it
+ 	make
Index: /issm/oecreview/Archive/13393-13976/ISSM-13694-13695.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13694-13695.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13694-13695.diff	(revision 13980)
@@ -0,0 +1,87 @@
+Index: ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp	(revision 13694)
++++ ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp	(revision 13695)
+@@ -327,8 +327,8 @@
+ 		SetStructureFieldi(dataref,i,"pairs"            ,riftstruct->riftsnumpairs[i]       ,2,riftstruct->riftspairs[i]);
+ 		SetStructureFieldi(dataref,i,"tips"             ,1                                  ,2,&riftstruct->riftstips[2*i]);
+ 		SetStructureFieldi(dataref,i,"penaltypairs"     ,riftstruct->riftsnumpenaltypairs[i],7,riftstruct->riftspenaltypairs[i]);
++		SetStructureFieldi(dataref,i,"fill"             ,IceEnum);
+ 		SetStructureFieldi(dataref,i,"friction"         ,0);
+-		SetStructureFieldi(dataref,i,"fill"             ,IceEnum);
+ 		SetStructureFieldi(dataref,i,"fraction"         ,0.);
+ 		SetStructureFieldi(dataref,i,"fractionincrement",0.1);
+ 		SetStructureFieldi(dataref,i,"state"            ,riftstruct->riftsnumpenaltypairs[i],1,riftstruct->state[i]);
+Index: ../trunk-jpl/src/c/python/io/WritePythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13694)
++++ ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13695)
+@@ -19,12 +19,13 @@
+ #include "../../io/io.h"
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ PyObject* PyArrayFromCopiedData(int dims[2],double* data);
++PyObject* PyArrayFromCopiedData(int dimi,int dimj,double* data);
+ 
+ /*Primitive data types*/
+ /*FUNCTION WriteData(PyObject* py_tuple,int index,int integer){{{*/
+ void WriteData(PyObject* py_tuple, int index, int integer){
+ 
+-	PyTuple_SetItem(py_tuple, index, PyInt_FromSsize_t(integer));
++	PyTuple_SetItem(py_tuple, index, PyInt_FromSsize_t((Py_ssize_t)integer));
+ 
+ }/*}}}*/
+ /*FUNCTION WriteData(PyObject* py_tuple,int index,char* string){{{*/
+@@ -135,7 +136,32 @@
+ /*FUNCTION WriteData(PyObject* py_tuple,int index,RiftStruct* riftstruct){{{*/
+ void WriteData(PyObject* py_tuple,int index,RiftStruct* riftstruct){
+ 
+-	_error_("not implemented yet... good luck John!");
++//	_error_("not implemented yet... good luck John!");
++
++	int i;
++	PyObject* list=NULL;
++	PyObject** dict=NULL;
++
++	list=PyList_New((Py_ssize_t)0);
++
++	for (i=0; i<riftstruct->numrifts; i++) {
++		dict[i]=PyDict_New();
++
++		PyDict_SetItemString(dict[i],"numsegs"          ,PyInt_FromSsize_t((Py_ssize_t)riftstruct->riftsnumsegments[i]));
++		PyDict_SetItemString(dict[i],"segments"         ,PyArrayFromCopiedData(riftstruct->riftsnumsegments[i]    ,3,riftstruct->riftssegments[i]));
++		PyDict_SetItemString(dict[i],"pairs"            ,PyArrayFromCopiedData(riftstruct->riftsnumpairs[i]       ,2,riftstruct->riftspairs[i]));
++		PyDict_SetItemString(dict[i],"tips"             ,PyArrayFromCopiedData(1                                  ,2,&riftstruct->riftstips[2*i]));
++		PyDict_SetItemString(dict[i],"penaltypairs"     ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],7,riftstruct->riftspenaltypairs[i]));
++		PyDict_SetItemString(dict[i],"fill"             ,PyInt_FromSsize_t((Py_ssize_t)IceEnum));
++		PyDict_SetItemString(dict[i],"friction"         ,PyInt_FromSsize_t((Py_ssize_t)0));
++		PyDict_SetItemString(dict[i],"fraction"         ,PyFloat_FromDouble(0.));
++		PyDict_SetItemString(dict[i],"fractionincrement",PyFloat_FromDouble(0.1));
++		PyDict_SetItemString(dict[i],"state"            ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],1,riftstruct->state[i]));
++
++		PyList_Append(list, dict[i]);
++	}
++
++	PyTuple_SetItem(py_tuple, index, list);
+ }
+ /*}}}*/
+ 
+@@ -156,3 +182,19 @@
+ 	return PyArray_SimpleNewFromData(2,pydims,NPY_DOUBLE,pydata);
+ }
+ /*}}}*/
++/*FUNCTION PyArrayFromCopiedData(int dimi,int dimj,double* data){{{*/
++PyObject* PyArrayFromCopiedData(int dimi,int dimj,double* data){
++
++	double* pydata;
++	npy_intp pydims[2]={0,0};
++
++	/*  note that PyArray_SimpleNewFromData does not copy the data, so that when the original
++		 object (e.g. bamggeom,bamgmesh) is deleted, the data is gone.  */
++
++	pydims[0]=(npy_intp)dimi;
++	pydims[1]=(npy_intp)dimj;
++	pydata=xNew<IssmDouble>(dimi*dimj);
++	memcpy(pydata,data,dimi*dimj*sizeof(double));
++	return PyArray_SimpleNewFromData(2,pydims,NPY_DOUBLE,pydata);
++}
++/*}}}*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13695-13696.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13695-13696.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13695-13696.diff	(revision 13980)
@@ -0,0 +1,186 @@
+Index: ../trunk-jpl/src/c/solutions/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/transient_core.cpp	(revision 13695)
++++ ../trunk-jpl/src/c/solutions/transient_core.cpp	(revision 13696)
+@@ -77,7 +77,7 @@
+ 
+ 		/*Increment*/
+ 		if(time_adapt){
+-			TimeAdaptx(&dt,femmodel->elements, femmodel->nodes,femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters); 
++			femmodel->TimeAdaptx(&dt);
+ 			if(time+dt>finaltime) dt=finaltime-time;
+ 			femmodel->parameters->SetParam(dt,TimesteppingTimeStepEnum);
+ 		}
+Index: ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.cpp	(revision 13695)
++++ ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.cpp	(revision 13696)
+@@ -1,42 +0,0 @@
+-/*!\file TimeAdaptx
+-*\brief: update time steps to respect CFL condition
+- */
+-
+-#include "./TimeAdaptx.h"
+-#include "../modules.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-#include "../../Container/Container.h"
+-
+-void TimeAdaptx(IssmDouble* pdt, Elements* elements, Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials, Parameters* parameters){
+-
+-	int      i;
+-
+-	/*output: */
+-	IssmDouble   dt;
+-
+-	/*intermediary: */
+-	Element *element     = NULL;
+-	IssmDouble   min_dt      = 0;
+-	IssmDouble   node_min_dt = 0;
+-
+-	/*Go through elements, and figure out the minimum of the time steps for each element (using CFL criterion): */
+-	element=(Element*)elements->GetObjectByOffset(0); min_dt=element->TimeAdapt();
+-
+-	for (i=1;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
+-		dt=element->TimeAdapt();
+-		if(dt<min_dt)min_dt=dt;
+-	}
+-
+-	/*Figure out minimum across the cluster: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&min_dt,&node_min_dt,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_min_dt,1,MPI_DOUBLE,0,IssmComm::GetComm());
+-	min_dt=node_min_dt;
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pdt=min_dt;
+-}
+Index: ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.h	(revision 13695)
++++ ../trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.h	(revision 13696)
+@@ -1,13 +0,0 @@
+-/*!\file:  TimeAdaptx.h
+- */ 
+-
+-#ifndef _TIMEADAPTX_H
+-#define _TIMEADAPTX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void TimeAdaptx(IssmDouble* pdt, Elements* elements, Nodes* nodes,Vertices* vertices,Loads* loads, Materials* materials, Parameters* parameters);
+-
+-#endif  /* _TIMEADAPTX_H */
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13695)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13696)
+@@ -112,7 +112,6 @@
+ #include "./SurfaceAreax/SurfaceAreax.h"
+ #include "./SystemMatricesx/SystemMatricesx.h"
+ #include "./CreateJacobianMatrixx/CreateJacobianMatrixx.h"
+-#include "./TimeAdaptx/TimeAdaptx.h"
+ #include "./TriaSearchx/TriaSearchx.h"
+ #include "./TriMeshx/TriMeshx.h"
+ #include "./TriMeshProcessRiftsx/TriMeshProcessRiftsx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13695)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13696)
+@@ -287,8 +287,6 @@
+ 					./modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp\
+ 					./modules/InputArtificialNoisex/InputArtificialNoisex.h\
+ 					./modules/InputArtificialNoisex/InputArtificialNoisex.cpp\
+-					./modules/TimeAdaptx/TimeAdaptx.h\
+-					./modules/TimeAdaptx/TimeAdaptx.cpp\
+ 					./modules/ConfigureObjectsx/ConfigureObjectsx.h\
+ 					./modules/ConfigureObjectsx/ConfigureObjectsx.cpp\
+ 					./modules/ComputeBasalStressx/ComputeBasalStressx.h\
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13695)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13696)
+@@ -38,9 +38,6 @@
+ 	this->comm=incomm;
+ 	this->SetStaticComm();
+ 
+-	/*Print starting banner:*/
+-	this->PrintBanner();
+-
+ 	/*Start profiler: */
+ 	this->profiler=new Profiler();
+ 	profiler->Tag(Start);
+@@ -328,8 +325,7 @@
+ /*}}}*/
+ 
+ /*Modules:*/
+-/*FUNCTION FemModel::UpdateVertexPositionsx(void){{{*/
+-int FemModel::UpdateVertexPositionsx(void){
++int FemModel::UpdateVertexPositionsx(void){ /*{{{*/
+ 
+ 	int     i;
+ 	Vector<IssmDouble>*     vz        = NULL;
+@@ -363,8 +359,7 @@
+ 	return 1;
+ }
+ /*}}}*/
+-/*FUNCTION void FemModel::UpdateConstraintsx(void){{{*/
+-void FemModel::UpdateConstraintsx(void){
++void FemModel::UpdateConstraintsx(void){ /*{{{*/
+ 
+ 	IssmDouble time;
+ 	int    analysis_type;
+@@ -383,3 +378,36 @@
+ 	NodesDofx(nodes,parameters,analysis_type);
+ 
+ }
++/*}}}*/
++void FemModel::TimeAdaptx(IssmDouble* pdt){/*{{{*/
++
++	int      i;
++
++	/*output: */
++	IssmDouble   dt;
++
++	/*intermediary: */
++	Element *element     = NULL;
++	IssmDouble   min_dt      = 0;
++	IssmDouble   node_min_dt = 0;
++
++	/*Go through elements, and figure out the minimum of the time steps for each element (using CFL criterion): */
++	element=(Element*)elements->GetObjectByOffset(0); min_dt=element->TimeAdapt();
++
++	for (i=1;i<elements->Size();i++){
++		element=(Element*)elements->GetObjectByOffset(i);
++		dt=element->TimeAdapt();
++		if(dt<min_dt)min_dt=dt;
++	}
++
++	/*Figure out minimum across the cluster: */
++	#ifdef _HAVE_MPI_
++	MPI_Reduce (&min_dt,&node_min_dt,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_min_dt,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	min_dt=node_min_dt;
++	#endif
++
++	/*Assign output pointers:*/
++	*pdt=min_dt;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13695)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13696)
+@@ -64,6 +64,7 @@
+ 		/*Modules: {{{*/
+ 		int UpdateVertexPositionsx(void);
+ 		void UpdateConstraintsx(void);
++		void TimeAdaptx(IssmDouble* pdt);
+ 		/*}}}*/
+ 
+ };
Index: /issm/oecreview/Archive/13393-13976/ISSM-13696-13697.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13696-13697.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13696-13697.diff	(revision 13980)
@@ -0,0 +1,63 @@
+Index: ../trunk-jpl/src/c/python/io/WritePythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13696)
++++ ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13697)
+@@ -140,28 +140,45 @@
+ 
+ 	int i;
+ 	PyObject* list=NULL;
+-	PyObject** dict=NULL;
++	PyObject* dict=NULL;
+ 
++	_printf_(1,"point 0\n");
+ 	list=PyList_New((Py_ssize_t)0);
++	_printf_(1,"point 1\n");
+ 
+ 	for (i=0; i<riftstruct->numrifts; i++) {
+-		dict[i]=PyDict_New();
++		_printf_(1,"point 2\n");
++		dict=PyDict_New();
++		_printf_(1,"point 2a\n");
+ 
+-		PyDict_SetItemString(dict[i],"numsegs"          ,PyInt_FromSsize_t((Py_ssize_t)riftstruct->riftsnumsegments[i]));
+-		PyDict_SetItemString(dict[i],"segments"         ,PyArrayFromCopiedData(riftstruct->riftsnumsegments[i]    ,3,riftstruct->riftssegments[i]));
+-		PyDict_SetItemString(dict[i],"pairs"            ,PyArrayFromCopiedData(riftstruct->riftsnumpairs[i]       ,2,riftstruct->riftspairs[i]));
+-		PyDict_SetItemString(dict[i],"tips"             ,PyArrayFromCopiedData(1                                  ,2,&riftstruct->riftstips[2*i]));
+-		PyDict_SetItemString(dict[i],"penaltypairs"     ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],7,riftstruct->riftspenaltypairs[i]));
+-		PyDict_SetItemString(dict[i],"fill"             ,PyInt_FromSsize_t((Py_ssize_t)IceEnum));
+-		PyDict_SetItemString(dict[i],"friction"         ,PyInt_FromSsize_t((Py_ssize_t)0));
+-		PyDict_SetItemString(dict[i],"fraction"         ,PyFloat_FromDouble(0.));
+-		PyDict_SetItemString(dict[i],"fractionincrement",PyFloat_FromDouble(0.1));
+-		PyDict_SetItemString(dict[i],"state"            ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],1,riftstruct->state[i]));
++		PyDict_SetItemString(dict,"numsegs"          ,PyInt_FromSsize_t((Py_ssize_t)riftstruct->riftsnumsegments[i]));
++		_printf_(1,"point 2b\n");
++		PyDict_SetItemString(dict,"segments"         ,PyArrayFromCopiedData(riftstruct->riftsnumsegments[i]    ,3,riftstruct->riftssegments[i]));
++		_printf_(1,"point 2c\n");
++		PyDict_SetItemString(dict,"pairs"            ,PyArrayFromCopiedData(riftstruct->riftsnumpairs[i]       ,2,riftstruct->riftspairs[i]));
++		_printf_(1,"point 2d\n");
++		PyDict_SetItemString(dict,"tips"             ,PyArrayFromCopiedData(1                                  ,2,&riftstruct->riftstips[2*i]));
++		_printf_(1,"point 2e\n");
++		PyDict_SetItemString(dict,"penaltypairs"     ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],7,riftstruct->riftspenaltypairs[i]));
++		_printf_(1,"point 2f\n");
++		PyDict_SetItemString(dict,"fill"             ,PyInt_FromSsize_t((Py_ssize_t)IceEnum));
++		_printf_(1,"point 2g\n");
++		PyDict_SetItemString(dict,"friction"         ,PyInt_FromSsize_t((Py_ssize_t)0));
++		_printf_(1,"point 2h\n");
++		PyDict_SetItemString(dict,"fraction"         ,PyFloat_FromDouble(0.));
++		_printf_(1,"point 2i\n");
++		PyDict_SetItemString(dict,"fractionincrement",PyFloat_FromDouble(0.1));
++		_printf_(1,"point 2j\n");
++		PyDict_SetItemString(dict,"state"            ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],1,riftstruct->state[i]));
++		_printf_(1,"point 2k\n");
+ 
+-		PyList_Append(list, dict[i]);
++		PyList_Append(list, dict);
++		_printf_(1,"point 3\n");
+ 	}
++	_printf_(1,"point 4\n");
+ 
+ 	PyTuple_SetItem(py_tuple, index, list);
++	_printf_(1,"point 5\n");
+ }
+ /*}}}*/
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13697-13698.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13697-13698.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13697-13698.diff	(revision 13980)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/c/python/io/WritePythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13697)
++++ ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13698)
+@@ -136,49 +136,30 @@
+ /*FUNCTION WriteData(PyObject* py_tuple,int index,RiftStruct* riftstruct){{{*/
+ void WriteData(PyObject* py_tuple,int index,RiftStruct* riftstruct){
+ 
+-//	_error_("not implemented yet... good luck John!");
+-
+ 	int i;
+ 	PyObject* list=NULL;
+ 	PyObject* dict=NULL;
+ 
+-	_printf_(1,"point 0\n");
+ 	list=PyList_New((Py_ssize_t)0);
+-	_printf_(1,"point 1\n");
+ 
+ 	for (i=0; i<riftstruct->numrifts; i++) {
+-		_printf_(1,"point 2\n");
+ 		dict=PyDict_New();
+-		_printf_(1,"point 2a\n");
+ 
+ 		PyDict_SetItemString(dict,"numsegs"          ,PyInt_FromSsize_t((Py_ssize_t)riftstruct->riftsnumsegments[i]));
+-		_printf_(1,"point 2b\n");
+ 		PyDict_SetItemString(dict,"segments"         ,PyArrayFromCopiedData(riftstruct->riftsnumsegments[i]    ,3,riftstruct->riftssegments[i]));
+-		_printf_(1,"point 2c\n");
+ 		PyDict_SetItemString(dict,"pairs"            ,PyArrayFromCopiedData(riftstruct->riftsnumpairs[i]       ,2,riftstruct->riftspairs[i]));
+-		_printf_(1,"point 2d\n");
+ 		PyDict_SetItemString(dict,"tips"             ,PyArrayFromCopiedData(1                                  ,2,&riftstruct->riftstips[2*i]));
+-		_printf_(1,"point 2e\n");
+ 		PyDict_SetItemString(dict,"penaltypairs"     ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],7,riftstruct->riftspenaltypairs[i]));
+-		_printf_(1,"point 2f\n");
+ 		PyDict_SetItemString(dict,"fill"             ,PyInt_FromSsize_t((Py_ssize_t)IceEnum));
+-		_printf_(1,"point 2g\n");
+ 		PyDict_SetItemString(dict,"friction"         ,PyInt_FromSsize_t((Py_ssize_t)0));
+-		_printf_(1,"point 2h\n");
+ 		PyDict_SetItemString(dict,"fraction"         ,PyFloat_FromDouble(0.));
+-		_printf_(1,"point 2i\n");
+ 		PyDict_SetItemString(dict,"fractionincrement",PyFloat_FromDouble(0.1));
+-		_printf_(1,"point 2j\n");
+ 		PyDict_SetItemString(dict,"state"            ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],1,riftstruct->state[i]));
+-		_printf_(1,"point 2k\n");
+ 
+ 		PyList_Append(list, dict);
+-		_printf_(1,"point 3\n");
+ 	}
+-	_printf_(1,"point 4\n");
+ 
+ 	PyTuple_SetItem(py_tuple, index, list);
+-	_printf_(1,"point 5\n");
+ }
+ /*}}}*/
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13698-13699.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13698-13699.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13698-13699.diff	(revision 13980)
@@ -0,0 +1,943 @@
+Index: ../trunk-jpl/src/c/solutions/prognostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/prognostic_core.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/solutions/prognostic_core.cpp	(revision 13699)
+@@ -50,7 +50,7 @@
+ 	if(save_results){
+ 		if(VerboseSolution()) _pprintLine_("   saving results");
+ 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum);
+-		RequestedOutputsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs);
++		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 	}
+ 
+ 	if(solution_type==PrognosticSolutionEnum)RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+Index: ../trunk-jpl/src/c/solutions/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/transient_core.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/solutions/transient_core.cpp	(revision 13699)
+@@ -139,7 +139,7 @@
+ 			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedEnum);
+ 			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsMassBalanceEnum);
+ 			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,MaskElementonfloatingiceEnum);
+-			RequestedOutputsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs);
++			femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 
+ 			if(isdelta18o){
+ 			        InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsMonthlytemperaturesEnum);
+Index: ../trunk-jpl/src/c/solutions/objectivefunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/objectivefunction.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/solutions/objectivefunction.cpp	(revision 13699)
+@@ -69,7 +69,7 @@
+ 	}
+ 
+ 	/*Compute misfit for this velocity field.*/
+-	CostFunctionx(&J, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
++	femmodel->CostFunctionx(&J);
+ 
+ 	/*Free ressources:*/
+ 	return J;
+Index: ../trunk-jpl/src/c/solutions/steadystate_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/steadystate_core.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/solutions/steadystate_core.cpp	(revision 13699)
+@@ -88,7 +88,7 @@
+ 		if(isenthalpy) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WaterfractionEnum);
+ 		if(isenthalpy) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EnthalpyEnum);
+ 		if(!isenthalpy) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalforcingsMeltingRateEnum);
+-		RequestedOutputsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs);
++		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 	}
+ 
+ 	/*Free ressources:*/
+Index: ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13699)
+@@ -85,7 +85,7 @@
+ 
+ 	/*compute responses: */
+ 	if(VerboseQmu()) _pprintLine_("compute dakota responses:");
+-	DakotaResponsesx(d_responses,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,responses_descriptors,numresponsedescriptors,d_numresponses);
++	femmodel->DakotaResponsesx(d_responses,responses_descriptors,numresponsedescriptors,d_numresponses);
+ 
+ 	/*Free ressources:*/
+ 	DakotaFree(&d_variables,&d_variables_descriptors,&responses_descriptors, d_numvariables, numresponsedescriptors);
+Index: ../trunk-jpl/src/c/solutions/diagnostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/diagnostic_core.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/solutions/diagnostic_core.cpp	(revision 13699)
+@@ -101,7 +101,7 @@
+ 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VelEnum);
+ 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,PressureEnum);
+ 		if(dim==3) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VzEnum);
+-		RequestedOutputsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs);
++		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 	}
+ 
+ 	if(solution_type==DiagnosticSolutionEnum)RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+Index: ../trunk-jpl/src/c/solutions/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13699)
+@@ -140,7 +140,7 @@
+ 	adjointcore(femmodel);
+ 
+ 	/*Compute objective function*/
+-	CostFunctionx(fcn,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	femmodel->CostFunctionx(fcn);
+ 
+ 	/*Compute gradient*/
+ 	Gradjx(&gradient,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+Index: ../trunk-jpl/src/c/modules/Responsex/Responsex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Responsex/Responsex.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/modules/Responsex/Responsex.cpp	(revision 13699)
+@@ -1,67 +0,0 @@
+-/*!\file Responsex
+- * \brief: compute response according to a response descriptor
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../../Container/Container.h"    
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-#include "../../toolkits/toolkits.h"
+-#include "./Responsex.h"
+-#include "../modules.h"
+-
+-void Responsex(IssmDouble* responses,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,const char* response_descriptor,bool process_units,int weight_index){
+-
+-	int response_descriptor_enum;
+-
+-	response_descriptor_enum=StringToEnumx(response_descriptor);
+-	Responsex(responses, elements, nodes,  vertices, loads, materials,  parameters,response_descriptor_enum, process_units, weight_index);
+-
+-}
+-
+-void Responsex(IssmDouble* responses,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,int response_descriptor_enum,bool process_units,int weight_index){
+-
+-	switch (response_descriptor_enum){
+-
+-		#ifdef _HAVE_RESPONSES_
+-		case IceVolumeEnum:              IceVolumex(               responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MinVelEnum:                 MinVelx(                  responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxVelEnum:                 MaxVelx(                  responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MinVxEnum:                  MinVxx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxVxEnum:                  MaxVxx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxAbsVxEnum:               MaxAbsVxx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MinVyEnum:                  MinVyx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxVyEnum:                  MaxVyx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxAbsVyEnum:               MaxAbsVyx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MinVzEnum:                  MinVzx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxVzEnum:                  MaxVzx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxAbsVzEnum:               MaxAbsVzx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MassFluxEnum:               MassFluxx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case SurfaceAbsVelMisfitEnum:    SurfaceAbsVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case SurfaceRelVelMisfitEnum:    SurfaceRelVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case SurfaceLogVelMisfitEnum:    SurfaceLogVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case SurfaceLogVxVyMisfitEnum:   SurfaceLogVxVyMisfitx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case SurfaceAverageVelMisfitEnum:SurfaceAverageVelMisfitx( responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case ThicknessAbsMisfitEnum:     ThicknessAbsMisfitx(      responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case ThicknessAbsGradientEnum:   ThicknessAbsGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case ThicknessAlongGradientEnum:   ThicknessAlongGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case ThicknessAcrossGradientEnum:   ThicknessAcrossGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case TotalSmbEnum:					TotalSmbx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case RheologyBbarAbsGradientEnum:RheologyBbarAbsGradientx( responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case MaterialsRheologyBbarEnum:ElementResponsex(responses, elements,nodes, vertices, loads, materials, parameters,MaterialsRheologyBbarEnum,process_units); break;
+-		case VelEnum:ElementResponsex(responses, elements,nodes, vertices, loads, materials, parameters,VelEnum,process_units); break;
+-		case FrictionCoefficientEnum:NodalValuex(responses, FrictionCoefficientEnum,elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		default: _error_("response descriptor \"" << EnumToStringx(response_descriptor_enum) << "\" not supported yet!"); break;
+-		#else
+-		default: _error_("ISSM was not compiled with responses capabilities, exiting!");
+-		#endif
+-	}
+-
+-}
+Index: ../trunk-jpl/src/c/modules/Responsex/Responsex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Responsex/Responsex.h	(revision 13698)
++++ ../trunk-jpl/src/c/modules/Responsex/Responsex.h	(revision 13699)
+@@ -1,14 +0,0 @@
+-/*!\file:  Responsesx.h
+- * \brief header file for computing dakota responses
+- */ 
+-
+-#ifndef _RESPONSESX_H
+-#define _RESPONSESX_H
+-
+-#include "../../classes/objects/objects.h"
+-#include "../../Container/Container.h"
+-
+-void Responsex(IssmDouble* presponse,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,const char* response_descriptor,bool process_units,int weight_index);
+-void Responsex(IssmDouble* presponse,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,int response_descriptor_enum,bool process_units,int weight_index);
+-
+-#endif  /* _RESPONSESXX_H */
+Index: ../trunk-jpl/src/c/modules/ThicknessAbsGradientx/ThicknessAbsGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAbsGradientx/ThicknessAbsGradientx.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/modules/ThicknessAbsGradientx/ThicknessAbsGradientx.cpp	(revision 13699)
+@@ -1,37 +0,0 @@
+-/*!\file ThicknessAbsGradientx
+- * \brief: compute misfit between observations and model
+- */
+-
+-#include "./ThicknessAbsGradientx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void ThicknessAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units, int weight_index){
+-
+-	/*Intermediary*/
+-	int i;
+-	Element* element=NULL;
+-
+-	/*output: */
+-	IssmDouble J=0;
+-	IssmDouble J_sum;
+-
+-	/*Compute Misfit: */
+-	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
+-		J+=element->ThicknessAbsGradient(process_units,weight_index);
+-	}
+-
+-	/*Sum all J from all cpus of the cluster:*/
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
+-	J=J_sum;
+-	#endif
+-
+-	/*Assign output pointers: */
+-	*pJ=J;
+-}
+Index: ../trunk-jpl/src/c/modules/ThicknessAbsGradientx/ThicknessAbsGradientx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAbsGradientx/ThicknessAbsGradientx.h	(revision 13698)
++++ ../trunk-jpl/src/c/modules/ThicknessAbsGradientx/ThicknessAbsGradientx.h	(revision 13699)
+@@ -1,14 +0,0 @@
+-/*!\file:  ThicknessAbsGradientx.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _THICKNESSABSGRADIENT_H
+-#define _THICKNESSABSGRADIENT_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void ThicknessAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units,int weight_index);
+-
+-#endif
+Index: ../trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.h	(revision 13698)
++++ ../trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.h	(revision 13699)
+@@ -1,13 +0,0 @@
+-/*!\file:  RequestedOutputsx.h
+- * \brief header file for  requesting outputs
+- */ 
+-
+-#ifndef _REQUESTED_OUTPUTSX_H_
+-#define _REQUESTED_OUTPUTSX_H_
+-
+-#include "../../Container/Container.h"
+-
+-/* local prototypes: */
+-void RequestedOutputsx(Results* results,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters, int* requested_outputs, int numoutputs);
+-
+-#endif  /* _INPUTTORESULTX_H */
+Index: ../trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp	(revision 13699)
+@@ -1,52 +0,0 @@
+-/*!\file RequestedOutputsx
+- * \brief: compute outputs that were requested specifically for this solution, such as BasalStress, StrainHeating, etc ...
+- */
+-
+-#include "../../modules/modules.h"
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void RequestedOutputsx(Results* results,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters, int* requested_outputs, int numoutputs){
+-
+-	int      output_enum;
+-	int      step;
+-	IssmDouble   time;
+-	IssmDouble   output_value;
+-	Element *element      = NULL;
+-
+-	/*Get time and step*/
+-	parameters->FindParam(&step,StepEnum);
+-	parameters->FindParam(&time,TimeEnum);
+-
+-	/*retrieve Inputs*/
+-	if(numoutputs){
+-		for(int i=0;i<numoutputs;i++){
+-			output_enum=requested_outputs[i];
+-
+-			switch(output_enum){
+-
+-				case IceVolumeEnum:
+-					Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters,"IceVolume",false,0);
+-					results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeEnum,reCast<IssmPDouble>(output_value),step,time));
+-					break;
+-				case TotalSmbEnum:
+-					Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters,"TotalSmb",false,0);
+-					results->AddObject(new GenericExternalResult<double>(results->Size()+1,TotalSmbEnum,reCast<IssmPDouble>(output_value),step,time));
+-					break;
+-				case MaxVelEnum:
+-					Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters,"MaxVel",false,0);
+-					results->AddObject(new GenericExternalResult<double>(results->Size()+1,MaxVelEnum,reCast<IssmPDouble>(output_value),step,time));
+-					break;
+-				default:
+-					/*create this output in the element inputs, and then transfer to results:*/
+-					for(int j=0;j<elements->Size();j++){
+-						element=(Element*)elements->GetObjectByOffset(j);
+-						element->RequestedOutput(output_enum,step,time);
+-					}
+-					break;
+-			}
+-		}
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/CostFunctionx/CostFunctionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/CostFunctionx/CostFunctionx.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/modules/CostFunctionx/CostFunctionx.cpp	(revision 13699)
+@@ -1,38 +0,0 @@
+-/*!\file CostFunctionx
+- * \brief: compute misfit between observations and model
+- */
+-
+-#include "./CostFunctionx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-#include "../Responsex/Responsex.h"
+-
+-void CostFunctionx(IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
+-
+-	/*Intermediary*/
+-	int      i;
+-	int      num_responses;
+-	Element *element       = NULL;
+-	int     *responses     = NULL;
+-
+-	/*output: */
+-	IssmDouble J,Jplus;
+-
+-	/*Recover parameters*/
+-	parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
+-	parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
+-
+-	/*Get response*/
+-	J=0;
+-	for(int i=0;i<num_responses;i++){
+-		Responsex(&Jplus,elements,nodes,vertices,loads,materials,parameters,EnumToStringx(responses[i]),false,i); //False means DO NOT process units
+-		J+=Jplus;
+-	}
+-
+-	/*Assign output pointers: */
+-	xDelete<int>(responses);
+-	*pJ=J;
+-}
+Index: ../trunk-jpl/src/c/modules/CostFunctionx/CostFunctionx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/CostFunctionx/CostFunctionx.h	(revision 13698)
++++ ../trunk-jpl/src/c/modules/CostFunctionx/CostFunctionx.h	(revision 13699)
+@@ -1,14 +0,0 @@
+-/*!\file:  CostFunctionx.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _COSTFUNCTIONX_H
+-#define _COSTFUNCTIONX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void CostFunctionx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters);
+-
+-#endif
+Index: ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.h	(revision 13698)
++++ ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.h	(revision 13699)
+@@ -1,13 +0,0 @@
+-/*!\file:  DakotaResponsesx.h
+- * \brief header file for computing dakota responses
+- */ 
+-
+-#ifndef _DAKOTARESPONSESXX_H
+-#define _DAKOTARESPONSESXX_H
+-
+-#include "../../classes/objects/objects.h"
+-#include "../../Container/Container.h"
+-
+-void DakotaResponsesx(double* d_responses,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
+-
+-#endif  /* _DAKOTARESPONSESXX_H */
+Index: ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp	(revision 13699)
+@@ -1,118 +0,0 @@
+-/*!\file DakotaResponsesx
+- * \brief: update datasets using  parameter inputs
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "./DakotaResponsesx.h"
+-#include "../../Container/Container.h"    
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../modules.h"
+-
+-void DakotaResponsesx(double* d_responses,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){
+-
+-	int        i,j,k;
+-	int        my_rank;
+-	bool       process_units = true;
+-
+-	/*intermediary: */
+-	char   root[50];
+-	int    index;
+-	int    npart;
+-	double femmodel_response;
+-	int    flag;
+-	double *vertex_response   = NULL;
+-	double *qmu_response      = NULL;
+-	double *responses_pointer = NULL;
+-
+-	/*retrieve npart: */
+-	parameters->FindParam(&npart,QmuNumberofpartitionsEnum);
+-	my_rank=IssmComm::GetRank();
+-
+-	/*save the d_responses pointer: */
+-	responses_pointer=d_responses;
+-
+-	//watch out, we have more d_numresponses than numresponsedescriptors, because the responses have been expanded if they were scaled. 
+-	//because we don't know the d_responses descriptors (the scaled ones) we can't key off them, so we will key off the responses_descriptors: */
+-
+-	for(i=0;i<numresponsedescriptors;i++){
+-
+-		flag=DescriptorIndex(root,&index,responses_descriptors[i]);
+-
+-		if(flag==ScaledEnum){
+-
+-			/*this response was scaled. pick up the response from the inputs: */
+-			GetVectorFromInputsx(&vertex_response,elements,nodes, vertices, loads, materials, parameters, StringToEnumx(root),VertexEnum);
+-
+-			/*Now, average it onto the partition nodes: */
+-			AverageOntoPartitionx(&qmu_response,elements,nodes,vertices,loads,materials,parameters,vertex_response);
+-
+-			/*Copy onto our dakota responses: */
+-			if(my_rank==0){
+-				/*plug response: */
+-				for(i=0;i<npart;i++)responses_pointer[i]=qmu_response[i];
+-
+-				/*increment response_pointer :*/
+-				responses_pointer+=npart;
+-			}
+-
+-			/*Free ressources:*/
+-			xDelete<double>(vertex_response);
+-			xDelete<double>(qmu_response);
+-
+-		}
+-		else if (flag==IndexedEnum){
+-
+-			/*indexed response: plug index into parameters and call response module: */
+-			parameters->SetParam(index,IndexEnum);
+-
+-			//Responsex(responses_pointer,elements,nodes, vertices,loads,materials, parameters,root,process_units);
+-			Responsex(&femmodel_response,elements,nodes, vertices,loads,materials, parameters,root,process_units,0);//0 is the index for weights
+-
+-			if(my_rank==0){
+-				/*plug response: */
+-				responses_pointer[0]=femmodel_response;
+-
+-				/*increment response_pointer :*/
+-				responses_pointer++;
+-			}
+-		}
+-		else if (flag==NodalEnum){
+-			_error_("nodal response functions not supported yet!");
+-
+-			/*increment response_pointer :*/
+-			responses_pointer++;
+-		}
+-		else if (flag==RegularEnum){
+-
+-			/*perfectly normal response function: */
+-			Responsex(&femmodel_response,elements,nodes, vertices,loads,materials, parameters,root,process_units,0);//0 is the weight index
+-
+-			if(my_rank==0){
+-				/*plug response: */
+-				responses_pointer[0]=femmodel_response;
+-
+-				/*increment response_pointer :*/
+-				responses_pointer++;
+-			}
+-		}
+-		else _error_("flag type " << flag << " not supported yet for response analysis");
+-	}
+-
+-	/*Synthesize echo: {{{*/
+-	if(my_rank==0){
+-		_printString_("   responses: " << d_numresponses << ": ");
+-		for(i=0;i<d_numresponses-1;i++)_printString_(d_responses[i] << "|");
+-		_printString_(d_responses[d_numresponses-1]);
+-		_printLine_("");
+-	}
+-	/*}}}*/
+-
+-}
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13698)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13699)
+@@ -20,9 +20,7 @@
+ #include "./ControlInputGetGradientx/ControlInputGetGradientx.h"
+ #include "./ControlInputSetGradientx/ControlInputSetGradientx.h"
+ #include "./ControlInputScaleGradientx/ControlInputScaleGradientx.h"
+-#include "./CostFunctionx/CostFunctionx.h"
+ #include "./CreateNodalConstraintsx/CreateNodalConstraintsx.h"
+-#include "./DakotaResponsesx/DakotaResponsesx.h"
+ #include "./Delta18oParameterizationx/Delta18oParameterizationx.h"
+ #include "./DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h"
+ #include "./ElementConnectivityx/ElementConnectivityx.h"
+@@ -99,11 +97,9 @@
+ #include "./Reduceloadx/Reduceloadx.h"
+ #include "./Reducevectorgtosx/Reducevectorgtosx.h"
+ #include "./Reducevectorgtofx/Reducevectorgtofx.h"
+-#include "./RequestedOutputsx/RequestedOutputsx.h"
+ #include "./RequestedDependentsx/RequestedDependentsx.h"
+ #include "./ResetConstraintsx/ResetConstraintsx.h"
+ #include "./ResetCoordinateSystemx/ResetCoordinateSystemx.h"
+-#include "./Responsex/Responsex.h"
+ #include "./RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h"
+ #include "./Scotchx/Scotchx.h"
+ #include "./SmbGradientsx/SmbGradientsx.h"
+@@ -116,7 +112,6 @@
+ #include "./TriMeshx/TriMeshx.h"
+ #include "./TriMeshProcessRiftsx/TriMeshProcessRiftsx.h"
+ #include "./ThicknessAbsMisfitx/ThicknessAbsMisfitx.h"
+-#include "./ThicknessAbsGradientx/ThicknessAbsGradientx.h"
+ #include "./ThicknessAlongGradientx/ThicknessAlongGradientx.h"
+ #include "./ThicknessAcrossGradientx/ThicknessAcrossGradientx.h"
+ #include "./UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13698)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13699)
+@@ -317,10 +317,6 @@
+ 					./modules/ConstraintsStatex/ConstraintsStatex.cpp\
+ 					./modules/ConstraintsStatex/ConstraintsStatex.h\
+ 					./modules/ConstraintsStatex/ConstraintsStateLocal.h\
+-					./modules/Responsex/Responsex.h\
+-					./modules/Responsex/Responsex.cpp\
+-					./modules/RequestedOutputsx/RequestedOutputsx.h\
+-					./modules/RequestedOutputsx/RequestedOutputsx.cpp\
+ 					./modules/RequestedDependentsx/RequestedDependentsx.h\
+ 					./modules/RequestedDependentsx/RequestedDependentsx.cpp\
+ 					./modules/ResetConstraintsx/ResetConstraintsx.h\
+@@ -362,8 +358,6 @@
+ 					  ./classes/dakota/DakotaPlugin.cpp\
+ 					  ./modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h\
+ 					  ./modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp\
+-					  ./modules/DakotaResponsesx/DakotaResponsesx.h\
+-					  ./modules/DakotaResponsesx/DakotaResponsesx.cpp\
+ 					  ./modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h\
+ 					  ./modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp\
+ 					  ./modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h\
+@@ -436,16 +430,12 @@
+ 					  ./modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp\
+ 					  ./modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.h\
+ 					  ./modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp\
+-					  ./modules/CostFunctionx/CostFunctionx.h\
+-					  ./modules/CostFunctionx/CostFunctionx.cpp\
+ 					  ./modules/Orthx/Orthx.h\
+ 					  ./modules/Orthx/Orthx.cpp\
+ 					  ./modules/Gradjx/Gradjx.h\
+ 					  ./modules/Gradjx/Gradjx.cpp\
+ 					  ./modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp\
+ 					  ./modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.h\
+-					  ./modules/ThicknessAbsGradientx/ThicknessAbsGradientx.cpp\
+-					  ./modules/ThicknessAbsGradientx/ThicknessAbsGradientx.h\
+ 					  ./modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp\
+ 					  ./modules/ThicknessAlongGradientx/ThicknessAlongGradientx.h\
+ 					  ./modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp\
+Index: ../trunk-jpl/src/c/classes/objects/DependentObject.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/DependentObject.h	(revision 13698)
++++ ../trunk-jpl/src/c/classes/objects/DependentObject.h	(revision 13699)
+@@ -16,6 +16,7 @@
+ class Loads;
+ class Materials;
+ class Parameters;
++class FemModel;
+ 
+ class DependentObject: public Object{
+ 
+@@ -40,7 +41,7 @@
+ 
+ 		/*DependentObject methods: */
+ 		int  NumDependents(void);
+-		void Responsex(IssmDouble* poutput_value,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters);
++		void Responsex(IssmDouble* poutput_value,FemModel* femmodel);
+ 
+ };
+ #endif //ifndef _DEPENDENTOBJECT_H_
+Index: ../trunk-jpl/src/c/classes/objects/DependentObject.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/DependentObject.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/classes/objects/DependentObject.cpp	(revision 13699)
+@@ -15,7 +15,6 @@
+ #include "../../shared/shared.h"
+ #include "../../Container/Container.h"
+ #include "../../include/include.h"
+-#include "../../modules/Responsex/Responsex.h"
+ 
+ /*DependentObject constructors and destructor*/
+ /*FUNCTION DependentObject::DependentObject(){{{*/
+@@ -91,15 +90,15 @@
+ }
+ /*}}}*/
+ /*FUNCTION DependentObject::Responsex{{{*/
+-void  DependentObject::Responsex(IssmDouble* poutput_value,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters){
++void  DependentObject::Responsex(IssmDouble* poutput_value,FemModel* femmodel){
+ 
+ 	if(this->name==MassFluxEnum){
+ 
+ 		/*to identify the mass flux that will be computed, we need the index of the profile: */
+-		parameters->SetParam(this->index,IndexEnum);
++		femmodel->parameters->SetParam(this->index,IndexEnum);
+ 	}
+ 
+-	::Responsex(poutput_value,elements,nodes,vertices,loads,materials,parameters,this->name,false,0);
++	femmodel->Responsex(poutput_value,this->name,false,0);
+ 
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13698)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13699)
+@@ -411,3 +411,261 @@
+ 	*pdt=min_dt;
+ }
+ /*}}}*/
++void FemModel::Responsex(IssmDouble* responses,const char* response_descriptor,bool process_units,int weight_index){/*{{{*/
++
++
++	int response_descriptor_enum;
++
++	response_descriptor_enum=StringToEnumx(response_descriptor);
++	this->Responsex(responses, response_descriptor_enum, process_units, weight_index);
++
++}
++/*}}}*/
++void FemModel::Responsex(IssmDouble* responses,int response_descriptor_enum,bool process_units,int weight_index){/*{{{*/
++
++
++	switch (response_descriptor_enum){
++
++		#ifdef _HAVE_RESPONSES_
++		case IceVolumeEnum:              IceVolumex(               responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MinVelEnum:                 MinVelx(                  responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MaxVelEnum:                 MaxVelx(                  responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MinVxEnum:                  MinVxx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MaxVxEnum:                  MaxVxx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MaxAbsVxEnum:               MaxAbsVxx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MinVyEnum:                  MinVyx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MaxVyEnum:                  MaxVyx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MaxAbsVyEnum:               MaxAbsVyx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MinVzEnum:                  MinVzx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MaxVzEnum:                  MaxVzx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MaxAbsVzEnum:               MaxAbsVzx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MassFluxEnum:               MassFluxx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case SurfaceAbsVelMisfitEnum:    SurfaceAbsVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case SurfaceRelVelMisfitEnum:    SurfaceRelVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case SurfaceLogVelMisfitEnum:    SurfaceLogVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case SurfaceLogVxVyMisfitEnum:   SurfaceLogVxVyMisfitx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case SurfaceAverageVelMisfitEnum:SurfaceAverageVelMisfitx( responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case ThicknessAbsMisfitEnum:     ThicknessAbsMisfitx(      responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case ThicknessAbsGradientEnum:   this->ThicknessAbsGradientx(    responses, process_units,weight_index); break;
++		case ThicknessAlongGradientEnum:   ThicknessAlongGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case ThicknessAcrossGradientEnum:   ThicknessAcrossGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case TotalSmbEnum:					TotalSmbx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case RheologyBbarAbsGradientEnum:RheologyBbarAbsGradientx( responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case MaterialsRheologyBbarEnum:ElementResponsex(responses, elements,nodes, vertices, loads, materials, parameters,MaterialsRheologyBbarEnum,process_units); break;
++		case VelEnum:ElementResponsex(responses, elements,nodes, vertices, loads, materials, parameters,VelEnum,process_units); break;
++		case FrictionCoefficientEnum:NodalValuex(responses, FrictionCoefficientEnum,elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		default: _error_("response descriptor \"" << EnumToStringx(response_descriptor_enum) << "\" not supported yet!"); break;
++		#else
++		default: _error_("ISSM was not compiled with responses capabilities, exiting!");
++		#endif
++	}
++
++}
++/*}}}*/
++void FemModel::RequestedOutputsx(int* requested_outputs, int numoutputs){/*{{{*/
++
++
++	int      output_enum;
++	int      step;
++	IssmDouble   time;
++	IssmDouble   output_value;
++	Element *element      = NULL;
++
++	/*Get time and step*/
++	parameters->FindParam(&step,StepEnum);
++	parameters->FindParam(&time,TimeEnum);
++
++	/*retrieve Inputs*/
++	if(numoutputs){
++		for(int i=0;i<numoutputs;i++){
++			output_enum=requested_outputs[i];
++
++			switch(output_enum){
++
++				case IceVolumeEnum:
++					Responsex(&output_value,"IceVolume",false,0);
++					results->AddObject(new GenericExternalResult<double>(results->Size()+1,IceVolumeEnum,reCast<IssmPDouble>(output_value),step,time));
++					break;
++				case TotalSmbEnum:
++					Responsex(&output_value,"TotalSmb",false,0);
++					results->AddObject(new GenericExternalResult<double>(results->Size()+1,TotalSmbEnum,reCast<IssmPDouble>(output_value),step,time));
++					break;
++				case MaxVelEnum:
++					Responsex(&output_value,"MaxVel",false,0);
++					results->AddObject(new GenericExternalResult<double>(results->Size()+1,MaxVelEnum,reCast<IssmPDouble>(output_value),step,time));
++					break;
++				default:
++					/*create this output in the element inputs, and then transfer to results:*/
++					for(int j=0;j<elements->Size();j++){
++						element=(Element*)elements->GetObjectByOffset(j);
++						element->RequestedOutput(output_enum,step,time);
++					}
++					break;
++			}
++		}
++	}
++}
++/*}}}*/
++#ifdef _HAVE_CONTROL_
++void FemModel::ThicknessAbsGradientx( IssmDouble* pJ, bool process_units, int weight_index){/*{{{*/
++
++
++	/*Intermediary*/
++	int i;
++	Element* element=NULL;
++
++	/*output: */
++	IssmDouble J=0;
++	IssmDouble J_sum;
++
++	/*Compute Misfit: */
++	for (i=0;i<elements->Size();i++){
++		element=(Element*)elements->GetObjectByOffset(i);
++		J+=element->ThicknessAbsGradient(process_units,weight_index);
++	}
++
++	/*Sum all J from all cpus of the cluster:*/
++	#ifdef _HAVE_MPI_
++	MPI_Reduce (&J,&J_sum,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&J_sum,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	J=J_sum;
++	#endif
++
++	/*Assign output pointers: */
++	*pJ=J;
++}
++/*}}}*/
++#endif
++
++#ifdef  _HAVE_DAKOTA_
++void FemModel::CostFunctionx(IssmDouble* pJ){/*{{{*/
++
++
++	/*Intermediary*/
++	int      i;
++	int      num_responses;
++	Element *element       = NULL;
++	int     *responses     = NULL;
++
++	/*output: */
++	IssmDouble J,Jplus;
++
++	/*Recover parameters*/
++	parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum);
++	parameters->FindParam(&responses,NULL,NULL,StepResponsesEnum);
++
++	/*Get response*/
++	J=0;
++	for(int i=0;i<num_responses;i++){
++		this->Responsex(&Jplus,EnumToStringx(responses[i]),false,i); //False means DO NOT process units
++		J+=Jplus;
++	}
++
++	/*Assign output pointers: */
++	xDelete<int>(responses);
++	*pJ=J;
++}
++/*}}}*/
++void FemModel::DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){/*{{{*/
++
++
++	int        i,j,k;
++	int        my_rank;
++	bool       process_units = true;
++
++	/*intermediary: */
++	char   root[50];
++	int    index;
++	int    npart;
++	double femmodel_response;
++	int    flag;
++	double *vertex_response   = NULL;
++	double *qmu_response      = NULL;
++	double *responses_pointer = NULL;
++
++	/*retrieve npart: */
++	parameters->FindParam(&npart,QmuNumberofpartitionsEnum);
++	my_rank=IssmComm::GetRank();
++
++	/*save the d_responses pointer: */
++	responses_pointer=d_responses;
++
++	//watch out, we have more d_numresponses than numresponsedescriptors, because the responses have been expanded if they were scaled. 
++	//because we don't know the d_responses descriptors (the scaled ones) we can't key off them, so we will key off the responses_descriptors: */
++
++	for(i=0;i<numresponsedescriptors;i++){
++
++		flag=DescriptorIndex(root,&index,responses_descriptors[i]);
++
++		if(flag==ScaledEnum){
++
++			/*this response was scaled. pick up the response from the inputs: */
++			GetVectorFromInputsx(&vertex_response,elements,nodes, vertices, loads, materials, parameters, StringToEnumx(root),VertexEnum);
++
++			/*Now, average it onto the partition nodes: */
++			AverageOntoPartitionx(&qmu_response,elements,nodes,vertices,loads,materials,parameters,vertex_response);
++
++			/*Copy onto our dakota responses: */
++			if(my_rank==0){
++				/*plug response: */
++				for(i=0;i<npart;i++)responses_pointer[i]=qmu_response[i];
++
++				/*increment response_pointer :*/
++				responses_pointer+=npart;
++			}
++
++			/*Free ressources:*/
++			xDelete<double>(vertex_response);
++			xDelete<double>(qmu_response);
++
++		}
++		else if (flag==IndexedEnum){
++
++			/*indexed response: plug index into parameters and call response module: */
++			parameters->SetParam(index,IndexEnum);
++
++			this->Responsex(&femmodel_response,root,process_units,0);//0 is the index for weights
++
++			if(my_rank==0){
++				/*plug response: */
++				responses_pointer[0]=femmodel_response;
++
++				/*increment response_pointer :*/
++				responses_pointer++;
++			}
++		}
++		else if (flag==NodalEnum){
++			_error_("nodal response functions not supported yet!");
++
++			/*increment response_pointer :*/
++			responses_pointer++;
++		}
++		else if (flag==RegularEnum){
++
++			/*perfectly normal response function: */
++			this->Responsex(&femmodel_response,root,process_units,0);//0 is the weight index
++
++			if(my_rank==0){
++				/*plug response: */
++				responses_pointer[0]=femmodel_response;
++
++				/*increment response_pointer :*/
++				responses_pointer++;
++			}
++		}
++		else _error_("flag type " << flag << " not supported yet for response analysis");
++	}
++
++	/*Synthesize echo: {{{*/
++	if(my_rank==0){
++		_printString_("   responses: " << d_numresponses << ": ");
++		for(i=0;i<d_numresponses-1;i++)_printString_(d_responses[i] << "|");
++		_printString_(d_responses[d_numresponses-1]);
++		_printLine_("");
++	}
++	/*}}}*/
++
++}
++/*}}}*/
++#endif
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13698)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13699)
+@@ -62,9 +62,22 @@
+ 		void  SetCurrentConfiguration(int configuration_type,int analysis_type);
+ 		/*}}}*/
+ 		/*Modules: {{{*/
+-		int UpdateVertexPositionsx(void);
++		 #ifdef  _HAVE_DAKOTA_
++		void CostFunctionx( IssmDouble* pJ);
++		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
++		#endif
++
++		void RequestedOutputsx(int* requested_outputs, int numoutputs);
++		void Responsex(IssmDouble* presponse,int response_descriptor_enum,bool process_units,int weight_index);
++		void Responsex(IssmDouble* presponse,const char* response_descriptor,bool process_units,int weight_index);
++		#ifdef _HAVE_CONTROL_
++		void ThicknessAbsGradientx( IssmDouble* pJ, bool process_units,int weight_index);
++		#endif
++		void TimeAdaptx(IssmDouble* pdt);
+ 		void UpdateConstraintsx(void);
+-		void TimeAdaptx(IssmDouble* pdt);
++		int  UpdateVertexPositionsx(void);
++
++
+ 		/*}}}*/
+ 
+ };
Index: /issm/oecreview/Archive/13393-13976/ISSM-13699-13700.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13699-13700.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13699-13700.diff	(revision 13980)
@@ -0,0 +1,217 @@
+Index: ../trunk-jpl/src/c/solutions/prognostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/prognostic_core.cpp	(revision 13699)
++++ ../trunk-jpl/src/c/solutions/prognostic_core.cpp	(revision 13700)
+@@ -53,7 +53,7 @@
+ 		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 	}
+ 
+-	if(solution_type==PrognosticSolutionEnum)RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	if(solution_type==PrognosticSolutionEnum)femmodel->RequestedDependentsx();
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(requested_outputs);
+Index: ../trunk-jpl/src/c/solutions/transient_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/transient_core.cpp	(revision 13699)
++++ ../trunk-jpl/src/c/solutions/transient_core.cpp	(revision 13700)
+@@ -151,7 +151,7 @@
+ 		}
+ 	}
+ 
+-	RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	femmodel->RequestedDependentsx();
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(requested_outputs);
+Index: ../trunk-jpl/src/c/solutions/diagnostic_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/diagnostic_core.cpp	(revision 13699)
++++ ../trunk-jpl/src/c/solutions/diagnostic_core.cpp	(revision 13700)
+@@ -104,7 +104,7 @@
+ 		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
+ 	}
+ 
+-	if(solution_type==DiagnosticSolutionEnum)RequestedDependentsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	if(solution_type==DiagnosticSolutionEnum)femmodel->RequestedDependentsx();
+ 
+ 	/*Free ressources:*/
+ 	xDelete<int>(requested_outputs);
+Index: ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp	(revision 13699)
++++ ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp	(revision 13700)
+@@ -1,43 +0,0 @@
+-/*!\file RequestedDependentsx
+- * \brief: compute outputs that were requested specifically for this solution, such as BasalStress, StrainHeating, etc ...
+- */
+-
+-#include "../../modules/modules.h"
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void RequestedDependentsx(Results* results,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters){
+-
+-	int         i;
+-	bool        isautodiff      = false;
+-	IssmDouble  output_value;
+-
+-	int         num_dependents;
+-	IssmPDouble *dependents;
+-	DataSet*    dependent_objects=NULL;
+-
+-	/*AD mode on?: */
+-	parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
+-
+-	if(isautodiff){
+-		#ifdef _HAVE_ADOLC_
+-		parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
+-		parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
+-		if(num_dependents){
+-			dependents=xNew<IssmPDouble>(num_dependents);
+-
+-			/*Go through our dependent variables, and compute the response:*/
+-			for(i=0;i<dependent_objects->Size();i++){
+-				DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
+-				dep->Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters);
+-				output_value>>=dependents[i];
+-			}
+-		}
+-		delete dependent_objects;
+-		#else
+-		_error_("Should not be requesting dependents when an AD library is not available!");
+-		#endif
+-	}
+-}
+Index: ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.h	(revision 13699)
++++ ../trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.h	(revision 13700)
+@@ -1,13 +0,0 @@
+-/*!\file:  RequestedDependentsx.h
+- * \brief header file for  requesting AD dependents
+- */ 
+-
+-#ifndef _REQUESTED_DEPENDENTSX_H_
+-#define _REQUESTED_DEPENDENTSX_H_
+-
+-#include "../../Container/Container.h"
+-
+-/* local prototypes: */
+-void RequestedDependentsx(Results* results,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters);
+-
+-#endif  /* _INPUTTORESULTX_H */
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13699)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13700)
+@@ -97,7 +97,6 @@
+ #include "./Reduceloadx/Reduceloadx.h"
+ #include "./Reducevectorgtosx/Reducevectorgtosx.h"
+ #include "./Reducevectorgtofx/Reducevectorgtofx.h"
+-#include "./RequestedDependentsx/RequestedDependentsx.h"
+ #include "./ResetConstraintsx/ResetConstraintsx.h"
+ #include "./ResetCoordinateSystemx/ResetCoordinateSystemx.h"
+ #include "./RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13699)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13700)
+@@ -317,8 +317,6 @@
+ 					./modules/ConstraintsStatex/ConstraintsStatex.cpp\
+ 					./modules/ConstraintsStatex/ConstraintsStatex.h\
+ 					./modules/ConstraintsStatex/ConstraintsStateLocal.h\
+-					./modules/RequestedDependentsx/RequestedDependentsx.h\
+-					./modules/RequestedDependentsx/RequestedDependentsx.cpp\
+ 					./modules/ResetConstraintsx/ResetConstraintsx.h\
+ 					./modules/ResetConstraintsx/ResetConstraintsx.cpp\
+ 					./modules/ResetCoordinateSystemx/ResetCoordinateSystemx.h\
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13699)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13700)
+@@ -507,6 +507,41 @@
+ 	}
+ }
+ /*}}}*/
++void FemModel::RequestedDependentsx(void){/*{{{*/
++
++
++	int         i;
++	bool        isautodiff      = false;
++	IssmDouble  output_value;
++
++	int         num_dependents;
++	IssmPDouble *dependents;
++	DataSet*    dependent_objects=NULL;
++
++	/*AD mode on?: */
++	parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
++
++	if(isautodiff){
++		#ifdef _HAVE_ADOLC_
++		parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
++		parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
++		if(num_dependents){
++			dependents=xNew<IssmPDouble>(num_dependents);
++
++			/*Go through our dependent variables, and compute the response:*/
++			for(i=0;i<dependent_objects->Size();i++){
++				DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
++				dep->Responsex(&output_value,this);
++				output_value>>=dependents[i];
++			}
++		}
++		delete dependent_objects;
++		#else
++		_error_("Should not be requesting dependents when an AD library is not available!");
++		#endif
++	}
++}
++/*}}}*/
+ #ifdef _HAVE_CONTROL_
+ void FemModel::ThicknessAbsGradientx( IssmDouble* pJ, bool process_units, int weight_index){/*{{{*/
+ 
+@@ -536,9 +571,6 @@
+ 	*pJ=J;
+ }
+ /*}}}*/
+-#endif
+-
+-#ifdef  _HAVE_DAKOTA_
+ void FemModel::CostFunctionx(IssmDouble* pJ){/*{{{*/
+ 
+ 
+@@ -567,6 +599,9 @@
+ 	*pJ=J;
+ }
+ /*}}}*/
++#endif
++
++#ifdef  _HAVE_DAKOTA_
+ void FemModel::DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){/*{{{*/
+ 
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13699)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13700)
+@@ -63,14 +63,15 @@
+ 		/*}}}*/
+ 		/*Modules: {{{*/
+ 		 #ifdef  _HAVE_DAKOTA_
+-		void CostFunctionx( IssmDouble* pJ);
+ 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
+ 		#endif
+ 
+ 		void RequestedOutputsx(int* requested_outputs, int numoutputs);
++		void RequestedDependentsx(void);
+ 		void Responsex(IssmDouble* presponse,int response_descriptor_enum,bool process_units,int weight_index);
+ 		void Responsex(IssmDouble* presponse,const char* response_descriptor,bool process_units,int weight_index);
+ 		#ifdef _HAVE_CONTROL_
++		void CostFunctionx( IssmDouble* pJ);
+ 		void ThicknessAbsGradientx( IssmDouble* pJ, bool process_units,int weight_index);
+ 		#endif
+ 		void TimeAdaptx(IssmDouble* pdt);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13700-13701.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13700-13701.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13700-13701.diff	(revision 13980)
@@ -0,0 +1,282 @@
+Index: ../trunk-jpl/src/c/matlab/include/matlab_macros.h
+===================================================================
+--- ../trunk-jpl/src/c/matlab/include/matlab_macros.h	(revision 13700)
++++ ../trunk-jpl/src/c/matlab/include/matlab_macros.h	(revision 13701)
+@@ -19,11 +19,12 @@
+ /*The following macros hide the error exception handling in a matlab module. Just put 
+  * MODULEBOOT(); and MODULEEND(); at the beginning and end of a module, and c++ exceptions 
+  * will be trapped*/
+-#define MODULEBOOT(); try{ 
++#define MODULEBOOT(); try{ \
++	IssmComm::SetComm(-1);
+ 
+ #define MODULEEND(); }\
+ 	catch(ErrorException &exception){\
+-		mexErrMsgTxt("ISSM Error"); \
++		mexErrMsgTxt(exception.MatlabReport()); \
+ 	}\
+ 	catch (exception &e){\
+ 		mexErrMsgTxt(exprintf("Standard exception: %s\n",e.what()));\
+Index: ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp	(revision 13700)
++++ ../trunk-jpl/src/c/matlab/io/PrintfFunction.cpp	(revision 13701)
+@@ -1,60 +0,0 @@
+-/*\file PrintfFunction.c
+- *\brief: this function is used by the _printf_ macro, to take into account the 
+- *fact we may be running on a cluster. 
+- */
+-
+-#include <stdarg.h>
+-#include <stdio.h>
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-
+-#include "mex.h"
+-
+-int PrintfFunction(char* format,...){
+-	/*http://linux.die.net/man/3/vsnprintf*/
+-
+-	/*string to be printed: */
+-	char *buffer = NULL;
+-	int   n,size = 100;
+-	int         string_size;
+-	int  my_rank;
+-
+-	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-
+-	//variable list of arguments
+-	va_list args;
+-
+-	while(true){
+-
+-		/*allocate buffer for given string size*/
+-		buffer=xNew<char>(size);
+-
+-		/* Try to print in the allocated space. */
+-		va_start(args, format);
+-#ifndef WIN32
+-		n=vsnprintf(buffer,size,format,args);
+-#else
+-		n=vsnprintf(buffer,size,format,args);
+-#endif
+-		va_end(args);
+-
+-		/* If that worked, return the string. */
+-		if(n>-1 && n<size) break;
+-
+-		/* Else try again with more space. */
+-		if(n>-1)   /* glibc 2.1 */
+-		 size=n+1; /* precisely what is needed */
+-		else       /* glibc 2.0 */
+-		 size*=2;  /* twice the old size */
+-
+-		xDelete<char>(buffer);
+-	}
+-
+-	/*Ok, if we are running in parallel, get node 0 to print*/
+-	if(my_rank==0)_printString_(buffer);
+-
+-	/*Clean up and return*/
+-	xDelete<char>(buffer);
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/python/include/python_macros.h
+===================================================================
+--- ../trunk-jpl/src/c/python/include/python_macros.h	(revision 13700)
++++ ../trunk-jpl/src/c/python/include/python_macros.h	(revision 13701)
+@@ -21,14 +21,15 @@
+  * MODULEBOOT(); and MODULEEND(); at the beginning and end of a module, and c++ exceptions 
+  * will be trapped*/
+ #define MODULEBOOT(); \
+-	PyObject *output = PyTuple_New(NLHS);        \
++	PyObject *output = PyTuple_New(NLHS); \
+ 	int       nrhs   = (int)PyTuple_Size(args);  \
+ 	if(!output) return NULL;\
+-	 try{ \
++	try{ \
++	IssmComm::SetComm(-1);
+ 
+ #define MODULEEND(); }\
+   catch(ErrorException &exception){\
+-	  PyErr_SetString(PyExc_TypeError,"ISSM Error"); \
++	  PyErr_SetString(PyExc_TypeError,exception.PythonReport()); \
+ 	  return NULL;\
+   } \
+ 	catch (exception &e){\
+Index: ../trunk-jpl/src/c/include/macros.h
+===================================================================
+--- ../trunk-jpl/src/c/include/macros.h	(revision 13700)
++++ ../trunk-jpl/src/c/include/macros.h	(revision 13701)
+@@ -22,7 +22,7 @@
+ /*Printing macro: only cpu number 0 */
+ #define _printf_(flag,...) do{if(flag) PrintfFunction(__VA_ARGS__);}while(0)
+ /*}}}*/
+-/* _error2_ {{{*/
++/* _error_ {{{*/
+ /*new Error exception macro*/
+ #ifdef _INTEL_WIN_
+ #define _error_(StreamArgs)\
+@@ -81,7 +81,6 @@
+ 
+ #define ExceptionTrapEnd(); }\
+ 	catch(ErrorException &exception){\
+-		exception.Report(); \
+ 		return 1;\
+ 	}\
+ 	catch (exception& e) {\
+Index: ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 13700)
++++ ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 13701)
+@@ -11,40 +11,27 @@
+ #include "../shared.h"
+ #include "../../include/include.h"
+ 
+-ErrorException::ErrorException(const string &what_arg){
++ErrorException::ErrorException(const string &what_arg){/*{{{*/
+ 
+ 	what_str=what_arg;
+ 	file_name="";
+ 	function_name="";
+ 	file_line=0;
+-}
++}/*}}}*/
++ErrorException::ErrorException(const string& what_file, const string& what_function,int what_line, const string& what_arg){/*{{{*/
+ 
+-ErrorException::ErrorException(const string& what_file, const string& what_function,int what_line, const string& what_arg){
+-
+ 	what_str=what_arg;
+ 	file_name=what_file;
+ 	function_name=what_function;
+ 	file_line=what_line;
+-}
+-
+-ErrorException::~ErrorException() throw(){
+-
+-	int num_procs;
+-
+-	/*recover num_procs:*/
+-	num_procs=IssmComm::GetSize();
+-
+-	/*We want the report only for matlab modules, otherwise we get twice the report
+-	 * We assume that if num_procs==1, it is a module (FIXME)*/
+-	if(num_procs==1) this->Report();
+-}
+-
+-const char* ErrorException::what() const throw(){
++}/*}}}*/
++ErrorException::~ErrorException() throw(){/*{{{*/
++}/*}}}*/
++const char* ErrorException::what() const throw(){/*{{{*/
+ 	return what_str.c_str();
+-}
++}/*}}}*/
++void ErrorException::Report() const{/*{{{*/
+ 
+-void ErrorException::Report() const{
+-
+ 	int my_rank;
+ 	int num_procs;
+ 
+@@ -57,13 +44,43 @@
+ 	}
+ 	else{
+ 		if(num_procs==1){
+-			_printLine_("\n??? Error using ==> " << file_name.c_str() << ":" << file_line);
++			_printLine_("\n??? Error in ==> " << file_name.c_str() << ":" << file_line);
+ 			_printLine_(function_name.c_str() << " error message: " << what() << "\n");
+ 		}
+ 		else{
+ 			_printLine_("\n[" << my_rank<< "] ??? Error using ==> " << file_name.c_str() << ":" << file_line);
+-			_printLine_("[" << my_rank << "] " << function_name.c_str() << " error message: " << what() << "\n");
++			_printLine_(  "[" << my_rank << "] " << function_name.c_str() << " error message: " << what() << "\n");
+ 		}
+ 	}
+ 	return;
+-}
++}/*}}}*/
++const char* ErrorException::MatlabReport() const{/*{{{*/
++
++	/*Output*/
++	std::ostringstream buffer;
++
++	if (this->file_line==0){ //WINDOWS
++		 buffer << " error message: " << (this->what_str).c_str();
++	}
++	else{
++		buffer << "\nError in ==> " << (this->file_name).c_str() << ":" << file_line << "\n";
++		buffer << (this->function_name).c_str() << " error message: " << (this->what_str).c_str();
++	}
++
++	return buffer.str().c_str();
++}/*}}}*/
++const char* ErrorException::PythonReport() const{/*{{{*/
++
++	/*Output*/
++	std::ostringstream buffer;
++
++	if (this->file_line==0){ //WINDOWS
++		buffer << " error message: " << (this->what_str).c_str();
++	}
++	else{
++		buffer << "\nError in ==> " << (this->file_name).c_str() << ":" << file_line << "\n";
++		buffer << (this->function_name).c_str() << " error message: " << (this->what_str).c_str();
++	}
++
++	return buffer.str().c_str();
++}/*}}}*/
+Index: ../trunk-jpl/src/c/shared/Exceptions/exceptions.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 13700)
++++ ../trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 13701)
+@@ -27,6 +27,8 @@
+ 	~ErrorException() throw();
+ 	virtual const char *what() const throw();
+ 	void Report() const;
++	const char* MatlabReport() const;
++	const char* PythonReport() const;
+ 
+ };
+ 
+Index: ../trunk-jpl/src/c/classes/IssmComm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IssmComm.cpp	(revision 13700)
++++ ../trunk-jpl/src/c/classes/IssmComm.cpp	(revision 13701)
+@@ -18,22 +18,29 @@
+ 	return comm;
+ }/*}}}*/
+ int IssmComm::GetRank(){  /*{{{*/
+-	int my_rank;
++	int my_rank = 0;
++
++	/*for matlab and python modules, comm == -1*/
++	if((int)comm==-1) return my_rank;
++
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Comm_rank(comm,&my_rank);
+-	#else
+-	my_rank=0;
+ 	#endif
++
+ 	return my_rank;
+ 
+ }/*}}}*/
+ int IssmComm::GetSize(){  /*{{{*/
+-	int size;
++
++	int size = 1;
++
++	/*for matlab and python modules, comm == -1*/
++	if((int)comm==-1) return size;
++
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Comm_size(comm,&size);
+-	#else
+-	size=1;
+ 	#endif
++
+ 	return size;
+ 
+ }/*}}}*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13701-13702.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13701-13702.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13701-13702.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/include/macros.h
+===================================================================
+--- ../trunk-jpl/src/c/include/macros.h	(revision 13701)
++++ ../trunk-jpl/src/c/include/macros.h	(revision 13702)
+@@ -81,6 +81,7 @@
+ 
+ #define ExceptionTrapEnd(); }\
+ 	catch(ErrorException &exception){\
++		exception.Report();\
+ 		return 1;\
+ 	}\
+ 	catch (exception& e) {\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13702-13703.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13702-13703.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13702-13703.diff	(revision 13980)
@@ -0,0 +1,301 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/colors/issm_black.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/colors/issm_black.vim	(revision 13702)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/colors/issm_black.vim	(revision 13703)
+@@ -1,227 +1,86 @@
+-" ir_black color scheme
+-" More at: http://blog.infinitered.com/entries/show/8
++" issm_black color scheme
++" table http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html
+ 
+-
+-" ********************************************************************************
+-" Standard colors used in all ir_black themes:
+-" Note, x:x:x are RGB values
+-"
+-"  normal: #f6f3e8
+-" 
+-"  string: #A8FF60  168:255:96                   
+-"    string inner (punc, code, etc): #00A0A0  0:160:160
+-"  number: #FF73FD  255:115:253                 
+-"  comments: #7C7C7C  124:124:124
+-"  keywords: #96CBFE  150:203:254             
+-"  operators: white
+-"  class: #FFFFB6  255:255:182
+-"  method declaration name: #FFD2A7  255:210:167
+-"  regular expression: #E9C062  233:192:98
+-"    regexp alternate: #FF8000  255:128:0
+-"    regexp alternate 2: #B18A3D  177:138:61
+-"  variable: #C6C5FE  198:197:254
+-"  
+-" Misc colors:
+-"  red color (used for whatever): #FF6C60   255:108:96 
+-"     light red: #FFB6B0   255:182:176
+-"
+-"  brown: #E18964  good for special
+-"
+-"  lightpurpleish: #FFCCFF
+-" 
+-" Interface colors:
+-"  background color: black
+-"  cursor (where underscore is used): #FFA560  255:165:96
+-"  cursor (where block is used): white
+-"  visual selection: #1D1E2C  
+-"  current line: #151515  21:21:21
+-"  search selection: #07281C  7:40:28
+-"  line number: #3D3D3D  61:61:61
+-
+-
+-" ********************************************************************************
+-" The following are the preferred 16 colors for your terminal
+-"           Colors      Bright Colors
+-" Black     #4E4E4E     #7C7C7C
+-" Red       #FF6C60     #FFB6B0
+-" Green     #A8FF60     #CEFFAB
+-" Yellow    #FFFFB6     #FFFFCB
+-" Blue      #96CBFE     #FFFFCB
+-" Magenta   #FF73FD     #FF9CFE
+-" Cyan      #C6C5FE     #DFDFFE
+-" White     #EEEEEE     #FFFFFF
+-
+-
+-" ********************************************************************************
++"Set up coloring
+ hi clear
+-
+ if exists("syntax_on")
+   syntax reset
+ endif
+ syntax on
+-
+ let colors_name = "issm_black"
+ 
+-"                   GUI not used in terminal mode                     forground           background          style (reverse,bold,..)
+-"hi Example         guifg=NONE        guibg=NONE        gui=NONE      ctermfg=NONE        ctermbg=NONE        cterm=NONE
++"preferred colors:
++"  0  : black
++"  9  : red
++" 15  : white
++" 69  : blue
++" 87  : cyan
++" 129 : dark purple
++" 202 : orange
++" 214 : light orange
++" 227 : yellow
++" 234 : very dark gray
++" 241 : dark gray
++" 244 : gray
++" 255 : light gray
+ 
++"                forground    background   style (reverse,bold,..)
+ " General colors
+-hi Normal           guifg=#f6f3e8     guibg=black       gui=NONE      ctermfg=NONE       ctermbg=NONE        cterm=NONE
+-hi NonText          guifg=#070707     guibg=black       gui=NONE      ctermfg=129        ctermbg=NONE        cterm=NONE         "214 =orange
++hi Normal        ctermfg=NONE ctermbg=NONE cterm=NONE
++hi NonText       ctermfg=129  ctermbg=NONE cterm=NONE
++hi Cursor        ctermfg=NONE ctermbg=NONE cterm=reverse
++hi LineNr        ctermfg=15   ctermbg=241  cterm=NONE
++hi VertSplit     ctermfg=241  ctermbg=241  cterm=NONE
++hi StatusLine    ctermfg=241  ctermbg=87   cterm=NONE
++hi StatusLineNC  ctermfg=87   ctermbg=241  cterm=NONE
++hi Folded        ctermfg=141  ctermbg=236  cterm=NONE
++hi Title         ctermfg=NONE ctermbg=NONE cterm=NONE
++hi Visual        ctermfg=NONE ctermbg=NONE cterm=reverse
++hi SpecialKey    ctermfg=NONE ctermbg=NONE cterm=NONE
++hi WildMenu      ctermfg=0    ctermbg=227  cterm=NONE
++hi PmenuSbar     ctermfg=0    ctermbg=129  cterm=NONE
++hi Error         ctermfg=15   ctermbg=129  cterm=NONE
++hi ErrorMsg      ctermfg=15   ctermbg=129  cterm=NONE
++hi WarningMsg    ctermfg=15   ctermbg=129  cterm=NONE
+ 
+-hi Cursor           guifg=black       guibg=white       gui=NONE      ctermfg=NONE       ctermbg=NONE        cterm=reverse      "cursor (mouse)
+-hi LineNr           guifg=#3D3D3D     guibg=black       gui=NONE      ctermfg=249        ctermbg=232         cterm=NONE         "line numbering gray/blak 
+-
+-hi VertSplit        guifg=#202020     guibg=#202020     gui=NONE      ctermfg=241        ctermbg=241         cterm=NONE         "vertical split
+-hi StatusLine       guifg=#CCCCCC     guibg=#202020     gui=italic    ctermfg=241        ctermbg=87          cterm=NONE         "87 = cyan
+-hi StatusLineNC     guifg=black       guibg=#202020     gui=NONE      ctermfg=87         ctermbg=241         cterm=NONE         "241 = dark gray
+-
+-hi Folded           guifg=#a0a8b0     guibg=#384048     gui=NONE      ctermfg=135        ctermbg=234         cterm=NONE         "folded 129 = violet ,234 Gray
+-hi Title            guifg=#f6f3e8     guibg=NONE        gui=bold      ctermfg=NONE       ctermbg=NONE        cterm=NONE
+-hi Visual           guifg=NONE        guibg=#262D51     gui=NONE      ctermfg=NONE       ctermbg=NONE        cterm=reverse "visual 255 = white
+-
+-hi SpecialKey       guifg=#808080     guibg=#343434     gui=NONE      ctermfg=NONE       ctermbg=NONE        cterm=NONE
+-
+-hi WildMenu         guifg=green       guibg=yellow      gui=NONE      ctermfg=black      ctermbg=yellow      cterm=NONE          "?????
+-hi PmenuSbar        guifg=black       guibg=white       gui=NONE      ctermfg=black      ctermbg=magenta     cterm=NONE          "????
+-"hi Ignore           guifg=gray        guibg=black       gui=NONE      ctermfg=NONE       ctermbg=NONE        cterm=NONE
+-
+-hi Error            guifg=white        guibg=NONE        gui=none ctermfg=255      ctermbg=129         cterm=NONE
+-hi ErrorMsg         guifg=white       guibg=#FF6C60     gui=BOLD      ctermfg=255      ctermbg=129         cterm=NONE                   " 196 = red
+-hi WarningMsg       guifg=white       guibg=#FF6C60     gui=BOLD      ctermfg=255      ctermbg=201         cterm=NONE                   "201 = magenta
+-
+ " Message displayed in lower left, such as --INSERT--
+-hi ModeMsg          guifg=black       guibg=#C6C5FE     gui=BOLD      ctermfg=241      ctermbg=87        cterm=BOLD
+-
++hi ModeMsg       ctermfg=0  ctermbg=87   cterm=BOLD
+ if version >= 700 " Vim 7.x specific colors
+-  hi CursorLine     guifg=NONE        guibg=#121212     gui=NONE      ctermfg=NONE       ctermbg=NONE        cterm=BOLD
+-  hi CursorColumn   guifg=NONE        guibg=#121212     gui=NONE      ctermfg=NONE       ctermbg=NONE        cterm=BOLD
+-  hi MatchParen     guifg=#f6f3e8     guibg=#857b6f     gui=BOLD      ctermfg=87         ctermbg=241         cterm=BOLD,reverse  "matching parenthesis
+-  hi Pmenu          guifg=#f6f3e8     guibg=#444444     gui=NONE      ctermfg=black      ctermbg=white         cterm=NONE "auto completion panel
+-  hi PmenuSel       guifg=#000000     guibg=#cae682     gui=NONE      ctermfg=255        ctermbg=darkgray    cterm=NONE
+-  hi Search         guifg=NONE        guibg=NONE        gui=underline ctermfg=black      ctermbg=220         cterm=NONE  "227 = yellow
++  hi CursorLine   ctermfg=NONE ctermbg=NONE cterm=BOLD
++  hi CursorColumn ctermfg=NONE ctermbg=NONE cterm=BOLD
++  hi MatchParen   ctermfg=87   ctermbg=241  cterm=reverse "matching parenthesis
++  hi Pmenu        ctermfg=0    ctermbg=15   cterm=NONE    "auto completion panel
++  hi PmenuSel     ctermfg=255  ctermbg=241  cterm=NONE
++  hi Search       ctermfg=0    ctermbg=220  cterm=NONE
+ endif
+ 
+ " Syntax highlighting
+-hi Comment          guifg=#7C7C7C     guibg=NONE        gui=NONE      ctermfg=243         ctermbg=NONE        cterm=NONE
+-hi String           guifg=#A8FF60     guibg=NONE        gui=NONE      ctermfg=120         ctermbg=NONE        cterm=NONE
+-hi Number           guifg=#FF73FD     guibg=NONE        gui=NONE      ctermfg=201         ctermbg=NONE        cterm=NONE
++hi Comment      ctermfg=244  ctermbg=NONE cterm=NONE
++hi String       ctermfg=120  ctermbg=NONE cterm=NONE
++hi Number       ctermfg=201  ctermbg=NONE cterm=NONE
++hi Keyword      ctermfg=9    ctermbg=NONE cterm=NONE  " matlab function
++hi PreProc      ctermfg=9    ctermbg=NONE cterm=NONE  " def undef include
++hi Conditional  ctermfg=220  ctermbg=NONE cterm=NONE  " if else end
++hi Todo         ctermfg=214  ctermbg=NONE cterm=NONE
++hi Constant     ctermfg=196  ctermbg=NONE cterm=NONE
++hi Identifier   ctermfg=9    ctermbg=NONE cterm=NONE
++hi Function     ctermfg=69   ctermbg=NONE cterm=NONE "functions 69 = pastel blue
++hi Type         ctermfg=87   ctermbg=NONE cterm=NONE "cterm matlab global
++hi Statement    ctermfg=69   ctermbg=NONE cterm=NONE "cd ls sed mv
++hi Special      ctermfg=202  ctermbg=NONE cterm=NONE " matlab '...'
++hi Delimiter    ctermfg=NONE ctermbg=NONE cterm=NONE " [ ]
++hi Operator     ctermfg=202  ctermbg=NONE cterm=NONE " == &
++hi Directory    ctermfg=87   ctermbg=NONE cterm=NONE " == & 
+ 
+-hi Keyword          guifg=#96CBFE     guibg=NONE        gui=NONE      ctermfg=red         ctermbg=NONE        cterm=NONE  " matlab function
+-hi PreProc          guifg=#96CBFE     guibg=NONE        gui=NONE      ctermfg=red         ctermbg=NONE        cterm=NONE   " def undef include
+-hi Conditional      guifg=#6699CC     guibg=NONE        gui=NONE      ctermfg=220         ctermbg=NONE        cterm=NONE  " if else end
+-
+-hi Todo             guifg=#8f8f8f     guibg=NONE        gui=NONE      ctermfg=214          ctermbg=NONE        cterm=NONE
+-hi Constant         guifg=#99CC99     guibg=NONE        gui=NONE      ctermfg=196         ctermbg=NONE        cterm=NONE
+-
+-hi Identifier       guifg=#C6C5FE     guibg=NONE        gui=NONE      ctermfg=red         ctermbg=NONE        cterm=NONE
+-hi Function         guifg=#FFD2A7     guibg=NONE        gui=NONE      ctermfg=69          ctermbg=NONE        cterm=NONE "functions 69 = pastel blue
+-hi Type             guifg=#FFFFB6     guibg=NONE        gui=NONE      ctermfg=87         ctermbg=NONE        cterm=NONE "cterm matlab global
+-hi Statement        guifg=#6699CC     guibg=NONE        gui=NONE      ctermfg=69          ctermbg=NONE        cterm=NONE " cd ls sed mv
+-
+-hi Special          guifg=#E18964     guibg=NONE        gui=NONE      ctermfg=202         ctermbg=NONE        cterm=NONE  " ; 202  = orange 
+-hi Delimiter        guifg=#00A0A0     guibg=NONE        gui=NONE      ctermfg=NONE        ctermbg=NONE        cterm=NONE  " [ ]
+-hi Operator         guifg=white       guibg=NONE        gui=NONE      ctermfg=202         ctermbg=NONE        cterm=NONE  " == &  178 = darkyellow
+-
+-hi Directory        guifg=white       guibg=NONE        gui=NONE      ctermfg=87          ctermbg=NONE        cterm=NONE  " == &  178 = darkyellow
+-
+- "Specific for diff
+- hi DiffAdd      guifg=#ffff33 guibg=#404010 gui=bold term=none cterm=none ctermfg=black ctermbg=119
+- hi DiffChange                 guibg=#202020 gui=bold term=none cterm=none ctermfg=black ctermbg=228
+- hi DiffText     guifg=#3333ff guibg=#100040 gui=bold term=none cterm=none ctermfg=black ctermbg=178
+- hi DiffDelete   guifg=#ff0000 guibg=#401010 gui=bold term=none cterm=none ctermfg=black ctermbg=197
+- hi diffLine     guifg=#444444 guibg=bg gui=bold term=none cterm=bold ctermfg=darkgrey
+- hi diffOldLine  guifg=#444444 guibg=bg gui=none term=none cterm=none ctermfg=darkgrey
+- hi diffOldFile  guifg=#444444 guibg=bg gui=none term=none cterm=none ctermfg=darkgrey
+- hi diffNewFile  guifg=#444444 guibg=bg gui=none term=none cterm=none ctermfg=darkgrey
+- hi diffAdded    guifg=#80ff80 guibg=bg gui=none term=none cterm=none
+- hi diffRemoved  guifg=#ff0000 guibg=bg gui=none term=none cterm=none ctermfg=red
+- hi diffChanged  guifg=#0000ff guibg=bg gui=none term=none cterm=none ctermfg=blue
+-
+-hi link Character       Constant
+-hi link Boolean         Constant
+-hi link Float           Number
+-hi link Repeat          Statement
+-hi link Label           Statement
+-hi link Exception       Statement
+-hi link Include         PreProc
+-hi link Define          PreProc
+-hi link Macro           PreProc
+-hi link PreCondit       PreProc
+-hi link StorageClass    Type
+-hi link Structure       Type
+-hi link Typedef         Type
+-hi link Tag             Special
+-hi link SpecialChar     Special
+-hi link SpecialComment  Special
+-hi link Debug           Special
+-
+-
+-" Special for Ruby
+-hi rubyRegexp                  guifg=#B18A3D      guibg=NONE      gui=NONE      ctermfg=brown          ctermbg=NONE      cterm=NONE
+-hi rubyRegexpDelimiter         guifg=#FF8000      guibg=NONE      gui=NONE      ctermfg=brown          ctermbg=NONE      cterm=NONE
+-hi rubyEscape                  guifg=white        guibg=NONE      gui=NONE      ctermfg=cyan           ctermbg=NONE      cterm=NONE
+-hi rubyInterpolationDelimiter  guifg=#00A0A0      guibg=NONE      gui=NONE      ctermfg=blue           ctermbg=NONE      cterm=NONE
+-hi rubyControl                 guifg=#6699CC      guibg=NONE      gui=NONE      ctermfg=blue           ctermbg=NONE      cterm=NONE  "and break, etc
+-"hi rubyGlobalVariable          guifg=#FFCCFF      guibg=NONE      gui=NONE      ctermfg=lightblue      ctermbg=NONE      cterm=NONE  "yield
+-hi rubyStringDelimiter         guifg=#336633      guibg=NONE      gui=NONE      ctermfg=lightgreen     ctermbg=NONE      cterm=NONE
+-"rubyInclude
+-"rubySharpBang
+-"rubyAccess
+-"rubyPredefinedVariable
+-"rubyBoolean
+-"rubyClassVariable
+-"rubyBeginEnd
+-"rubyRepeatModifier
+-"hi link rubyArrayDelimiter    Special  " [ , , ]
+-"rubyCurlyBlock  { , , }
+-
+-hi link rubyClass             Keyword 
+-hi link rubyModule            Keyword 
+-hi link rubyKeyword           Keyword 
+-hi link rubyOperator          Operator
+-hi link rubyIdentifier        Identifier
+-hi link rubyInstanceVariable  Identifier
+-hi link rubyGlobalVariable    Identifier
+-hi link rubyClassVariable     Identifier
+-hi link rubyConstant          Type  
+-
+-
+-" Special for Java
+-" hi link javaClassDecl    Type
+-hi link javaScopeDecl         Identifier 
+-hi link javaCommentTitle      javaDocSeeTag 
+-hi link javaDocTags           javaDocSeeTag 
+-hi link javaDocParam          javaDocSeeTag 
+-hi link javaDocSeeTagParam    javaDocSeeTag 
+-
+-hi javaDocSeeTag              guifg=#CCCCCC     guibg=NONE        gui=NONE      ctermfg=darkgray    ctermbg=NONE        cterm=NONE
+-hi javaDocSeeTag              guifg=#CCCCCC     guibg=NONE        gui=NONE      ctermfg=darkgray    ctermbg=NONE        cterm=NONE
+-"hi javaClassDecl              guifg=#CCFFCC     guibg=NONE        gui=NONE      ctermfg=white       ctermbg=NONE        cterm=NONE
+-
+-
+-" Special for XML
+-hi link xmlTag          Keyword 
+-hi link xmlTagName      Conditional 
+-hi link xmlEndTag       Identifier 
+-
+-
+-" Special for HTML
+-hi link htmlTag         Keyword 
+-hi link htmlTagName     Conditional 
+-hi link htmlEndTag      Identifier 
+-
+-
+-" Special for Javascript
+-hi link javaScriptNumber      Number 
+-
+-
+-" Special for Python
+-"hi  link pythonEscape         Keyword      
+-
+-
+-" Special for CSharp
+-hi  link csXmlTag             Keyword      
+-
+-
+-" Special for PHP
++"Specific for diff
++hi DiffAdd      cterm=none ctermfg=0 ctermbg=119
++hi DiffChange   cterm=none ctermfg=0 ctermbg=228
++hi DiffText     cterm=none ctermfg=0 ctermbg=178
++hi DiffDelete   cterm=none ctermfg=0 ctermbg=197
++hi diffLine     cterm=bold ctermfg=241
++hi diffOldLine  cterm=none ctermfg=241
++hi diffOldFile  cterm=none ctermfg=241
++hi diffNewFile  cterm=none ctermfg=241
++hi diffAdded    cterm=none
++hi diffRemoved  cterm=none ctermfg=9
++hi diffChanged  cterm=none ctermfg=69
Index: /issm/oecreview/Archive/13393-13976/ISSM-13703-13704.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13703-13704.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13703-13704.diff	(revision 13980)
@@ -0,0 +1,287 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/colors/issm_white.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/colors/issm_white.vim	(revision 13703)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/colors/issm_white.vim	(revision 13704)
+@@ -1,212 +1,86 @@
+-" ir_black color scheme
+-" More at: http://blog.infinitered.com/entries/show/8
++" issm_white scheme
++" table http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html
+ 
+-
+-" ********************************************************************************
+-" Standard colors used in all ir_black themes:
+-" Note, x:x:x are RGB values
+-"
+-"  normal: #f6f3e8
+-" 
+-"  string: #A8FF60  168:255:96                   
+-"    string inner (punc, code, etc): #00A0A0  0:160:160
+-"  number: #FF73FD  255:115:253                 
+-"  comments: #7C7C7C  124:124:124
+-"  keywords: #96CBFE  150:203:254             
+-"  operators: white
+-"  class: #FFFFB6  255:255:182
+-"  method declaration name: #FFD2A7  255:210:167
+-"  regular expression: #E9C062  233:192:98
+-"    regexp alternate: #FF8000  255:128:0
+-"    regexp alternate 2: #B18A3D  177:138:61
+-"  variable: #C6C5FE  198:197:254
+-"  
+-" Misc colors:
+-"  red color (used for whatever): #FF6C60   255:108:96 
+-"     light red: #FFB6B0   255:182:176
+-"
+-"  brown: #E18964  good for special
+-"
+-"  lightpurpleish: #FFCCFF
+-" 
+-" Interface colors:
+-"  background color: black
+-"  cursor (where underscore is used): #FFA560  255:165:96
+-"  cursor (where block is used): white
+-"  visual selection: #1D1E2C  
+-"  current line: #151515  21:21:21
+-"  search selection: #07281C  7:40:28
+-"  line number: #3D3D3D  61:61:61
+-
+-
+-" ********************************************************************************
+-" The following are the preferred 16 colors for your terminal
+-"           Colors      Bright Colors
+-" Black     #4E4E4E     #7C7C7C
+-" Red       #FF6C60     #FFB6B0
+-" Green     #A8FF60     #CEFFAB
+-" Yellow    #FFFFB6     #FFFFCB
+-" Blue      #96CBFE     #FFFFCB
+-" Magenta   #FF73FD     #FF9CFE
+-" Cyan      #C6C5FE     #DFDFFE
+-" White     #EEEEEE     #FFFFFF
+-
+-
+-" ********************************************************************************
++"Set up coloring
+ hi clear
+-
+ if exists("syntax_on")
+   syntax reset
+ endif
+ syntax on
++let colors_name = "issm_black"
+ 
+-let colors_name = "issm_white"
++"preferred colors:
++"  0  : black
++"  9  : red
++" 15  : white
++" 20  : blue
++" 33  : cyan
++" 129 : dark purple
++" 202 : orange
++" 204 : light orange
++" 227 : yellow
++" 234 : very dark gray
++" 241 : dark gray
++" 244 : gray
++" 255 : light gray
+ 
+-"                   GUI not used in terminal mode                     forground           background          style (reverse,bold,..)
+-"hi Example         guifg=NONE        guibg=NONE        gui=NONE      ctermfg=NONE        ctermbg=NONE        cterm=NONE
+-
++"                forground    background   style (reverse,bold,..)
+ " General colors
+-hi Normal           guifg=#f6f3e8     guibg=black       gui=NONE      ctermfg=NONE       ctermbg=NONE        cterm=NONE
+-hi NonText          guifg=#070707     guibg=black       gui=NONE      ctermfg=129        ctermbg=NONE        cterm=NONE         "214 =orange
++hi Normal        ctermfg=NONE ctermbg=NONE cterm=NONE
++hi NonText       ctermfg=129  ctermbg=NONE cterm=NONE
++hi Cursor        ctermfg=NONE ctermbg=NONE cterm=reverse
++hi LineNr        ctermfg=15   ctermbg=241  cterm=NONE
++hi VertSplit     ctermfg=241  ctermbg=241  cterm=NONE
++hi StatusLine    ctermfg=241  ctermbg=33   cterm=NONE
++hi StatusLineNC  ctermfg=33   ctermbg=241  cterm=NONE
++hi Folded        ctermfg=93   ctermbg=254  cterm=NONE
++hi Title         ctermfg=NONE ctermbg=NONE cterm=NONE
++hi Visual        ctermfg=NONE ctermbg=NONE cterm=reverse
++hi SpecialKey    ctermfg=NONE ctermbg=NONE cterm=NONE
++hi WildMenu      ctermfg=0    ctermbg=227  cterm=NONE
++hi PmenuSbar     ctermfg=0    ctermbg=129  cterm=NONE
++hi Error         ctermfg=15   ctermbg=129  cterm=NONE
++hi ErrorMsg      ctermfg=15   ctermbg=129  cterm=NONE
++hi WarningMsg    ctermfg=15   ctermbg=129  cterm=NONE
+ 
+-hi Cursor           guifg=black       guibg=white       gui=NONE      ctermfg=NONE       ctermbg=NONE        cterm=reverse      "cursor (mouse)
+-hi LineNr           guifg=#3D3D3D     guibg=black       gui=NONE      ctermfg=249        ctermbg=232         cterm=NONE         "line numbering gray/blak 
+-
+-hi VertSplit        guifg=#202020     guibg=#202020     gui=NONE      ctermfg=241        ctermbg=241         cterm=NONE         "vertical split
+-hi StatusLine       guifg=#CCCCCC     guibg=#202020     gui=italic    ctermfg=241        ctermbg=87          cterm=NONE         "87 = cyan
+-hi StatusLineNC     guifg=black       guibg=#202020     gui=NONE      ctermfg=87         ctermbg=241         cterm=NONE         "241 = dark gray
+-
+-hi Folded           guifg=#a0a8b0     guibg=#384048     gui=NONE      ctermfg=NONE       ctermbg=129         cterm=NONE         "folded 129 = violet
+-hi Title            guifg=#f6f3e8     guibg=NONE        gui=bold      ctermfg=NONE       ctermbg=NONE        cterm=NONE
+-hi Visual           guifg=NONE        guibg=#262D51     gui=NONE                         ctermbg=255         cterm=bold,reverse "visual 255 = white
+-
+-hi SpecialKey       guifg=#808080     guibg=#343434     gui=NONE      ctermfg=NONE       ctermbg=NONE        cterm=NONE
+-
+-hi WildMenu         guifg=green       guibg=yellow      gui=NONE      ctermfg=black      ctermbg=yellow      cterm=NONE          "?????
+-hi PmenuSbar        guifg=black       guibg=white       gui=NONE      ctermfg=black      ctermbg=magenta     cterm=NONE          "????
+-"hi Ignore           guifg=gray        guibg=black       gui=NONE      ctermfg=NONE       ctermbg=NONE        cterm=NONE
+-
+-hi Error            guifg=NONE        guibg=black       gui=NONE ctermfg=255      ctermbg=129         cterm=NONE
+-hi ErrorMsg         guifg=white       guibg=#FF6C60     gui=BOLD      ctermfg=255      ctermbg=129         cterm=NONE                   " 196 = red
+-hi WarningMsg       guifg=white       guibg=#FF6C60     gui=BOLD      ctermfg=255      ctermbg=201         cterm=NONE                   "201 = magenta
+-
+ " Message displayed in lower left, such as --INSERT--
+-hi ModeMsg          guifg=black       guibg=#C6C5FE     gui=BOLD      ctermfg=241      ctermbg=87        cterm=BOLD
+-
++hi ModeMsg       ctermfg=0  ctermbg=33   cterm=BOLD
+ if version >= 700 " Vim 7.x specific colors
+-  hi CursorLine     guifg=NONE        guibg=#121212     gui=NONE      ctermfg=NONE       ctermbg=NONE        cterm=BOLD
+-  hi CursorColumn   guifg=NONE        guibg=#121212     gui=NONE      ctermfg=NONE       ctermbg=NONE        cterm=BOLD
+-  hi MatchParen     guifg=#f6f3e8     guibg=#857b6f     gui=BOLD      ctermfg=87         ctermbg=241         cterm=BOLD,reverse  "matching parenthesis
+-  hi Pmenu          guifg=#f6f3e8     guibg=#444444     gui=NONE      ctermfg=232        ctermbg=254         cterm=NONE "auto completion panel
+-  hi PmenuSel       guifg=#000000     guibg=#cae682     gui=NONE      ctermfg=255        ctermbg=201        cterm=NONE
+-  hi Search         guifg=NONE        guibg=NONE        gui=underline ctermfg=NONE       ctermbg=227         cterm=NONE  "227 = yellow
++  hi CursorLine   ctermfg=NONE ctermbg=NONE cterm=BOLD
++  hi CursorColumn ctermfg=NONE ctermbg=NONE cterm=BOLD
++  hi MatchParen   ctermfg=33   ctermbg=241  cterm=reverse "matching parenthesis
++  hi Pmenu        ctermfg=0    ctermbg=15   cterm=NONE    "auto completion panel
++  hi PmenuSel     ctermfg=255  ctermbg=241  cterm=NONE
++  hi Search       ctermfg=0    ctermbg=220  cterm=NONE
+ endif
+ 
+ " Syntax highlighting
+-hi Comment          guifg=#7C7C7C     guibg=NONE        gui=NONE      ctermfg=243         ctermbg=NONE        cterm=NONE
+-hi String           guifg=#A8FF60     guibg=NONE        gui=NONE      ctermfg=40          ctermbg=NONE        cterm=NONE
+-hi Number           guifg=#FF73FD     guibg=NONE        gui=NONE      ctermfg=201         ctermbg=NONE        cterm=NONE
++hi Comment      ctermfg=241  ctermbg=NONE cterm=NONE
++hi String       ctermfg=28   ctermbg=NONE cterm=NONE
++hi Number       ctermfg=201  ctermbg=NONE cterm=NONE
++hi Keyword      ctermfg=9    ctermbg=NONE cterm=NONE  " matlab function
++hi PreProc      ctermfg=9    ctermbg=NONE cterm=NONE  " def undef include
++hi Conditional  ctermfg=220  ctermbg=NONE cterm=NONE  " if else end
++hi Todo         ctermfg=204  ctermbg=NONE cterm=NONE
++hi Constant     ctermfg=196  ctermbg=NONE cterm=NONE
++hi Identifier   ctermfg=9    ctermbg=NONE cterm=NONE
++hi Function     ctermfg=20   ctermbg=NONE cterm=NONE "functions 20 = pastel blue
++hi Type         ctermfg=33   ctermbg=NONE cterm=NONE "cterm matlab global
++hi Statement    ctermfg=20   ctermbg=NONE cterm=NONE "cd ls sed mv
++hi Special      ctermfg=202  ctermbg=NONE cterm=NONE " matlab '...'
++hi Delimiter    ctermfg=NONE ctermbg=NONE cterm=NONE " [ ]
++hi Operator     ctermfg=202  ctermbg=NONE cterm=NONE " == &
++hi Directory    ctermfg=33   ctermbg=NONE cterm=NONE " == & 
+ 
+-hi Keyword          guifg=#96CBFE     guibg=NONE        gui=NONE      ctermfg=196          ctermbg=NONE        cterm=NONE  " matlab function
+-hi PreProc          guifg=#96CBFE     guibg=NONE        gui=NONE      ctermfg=196         ctermbg=NONE        cterm=NONE   " def undef include
+-hi Conditional      guifg=#6699CC     guibg=NONE        gui=NONE      ctermfg=93         ctermbg=NONE        cterm=NONE  " if else end
+-
+-hi Todo             guifg=#8f8f8f     guibg=NONE        gui=NONE      ctermfg=18         ctermbg=NONE        cterm=NONE
+-hi Constant         guifg=#99CC99     guibg=NONE        gui=NONE      ctermfg=21         ctermbg=NONE        cterm=NONE
+-
+-hi Identifier       guifg=#C6C5FE     guibg=NONE        gui=NONE      ctermfg=21          ctermbg=NONE        cterm=NONE
+-hi Function         guifg=#FFD2A7     guibg=NONE        gui=NONE      ctermfg=69          ctermbg=NONE        cterm=NONE "functions 69 = pastel blue
+-hi Type             guifg=#FFFFB6     guibg=NONE        gui=NONE      ctermfg=165         ctermbg=NONE        cterm=NONE
+-hi Statement        guifg=#6699CC     guibg=NONE        gui=NONE      ctermfg=69         ctermbg=NONE        cterm=NONE " cd ls sed mv
+-
+-hi Special          guifg=#E18964     guibg=NONE        gui=NONE      ctermfg=43          ctermbg=NONE        cterm=NONE  " ; 202  = orange 
+-hi Delimiter        guifg=#00A0A0     guibg=NONE        gui=NONE      ctermfg=NONE        ctermbg=NONE        cterm=NONE  " [ ]
+-hi Operator         guifg=white       guibg=NONE        gui=NONE      ctermfg=43          ctermbg=NONE        cterm=NONE  " == &  178 = darkyellow
+-
+-hi link Character       Constant
+-hi link Boolean         Constant
+-hi link Float           Number
+-hi link Repeat          Statement
+-hi link Label           Statement
+-hi link Exception       Statement
+-hi link Include         PreProc
+-hi link Define          PreProc
+-hi link Macro           PreProc
+-hi link PreCondit       PreProc
+-hi link StorageClass    Type
+-hi link Structure       Type
+-hi link Typedef         Type
+-hi link Tag             Special
+-hi link SpecialChar     Special
+-hi link SpecialComment  Special
+-hi link Debug           Special
+-
+-
+-" Special for Ruby
+-hi rubyRegexp                  guifg=#B18A3D      guibg=NONE      gui=NONE      ctermfg=brown          ctermbg=NONE      cterm=NONE
+-hi rubyRegexpDelimiter         guifg=#FF8000      guibg=NONE      gui=NONE      ctermfg=brown          ctermbg=NONE      cterm=NONE
+-hi rubyEscape                  guifg=white        guibg=NONE      gui=NONE      ctermfg=cyan           ctermbg=NONE      cterm=NONE
+-hi rubyInterpolationDelimiter  guifg=#00A0A0      guibg=NONE      gui=NONE      ctermfg=blue           ctermbg=NONE      cterm=NONE
+-hi rubyControl                 guifg=#6699CC      guibg=NONE      gui=NONE      ctermfg=blue           ctermbg=NONE      cterm=NONE  "and break, etc
+-"hi rubyGlobalVariable          guifg=#FFCCFF      guibg=NONE      gui=NONE      ctermfg=lightblue      ctermbg=NONE      cterm=NONE  "yield
+-hi rubyStringDelimiter         guifg=#336633      guibg=NONE      gui=NONE      ctermfg=lightgreen     ctermbg=NONE      cterm=NONE
+-"rubyInclude
+-"rubySharpBang
+-"rubyAccess
+-"rubyPredefinedVariable
+-"rubyBoolean
+-"rubyClassVariable
+-"rubyBeginEnd
+-"rubyRepeatModifier
+-"hi link rubyArrayDelimiter    Special  " [ , , ]
+-"rubyCurlyBlock  { , , }
+-
+-hi link rubyClass             Keyword 
+-hi link rubyModule            Keyword 
+-hi link rubyKeyword           Keyword 
+-hi link rubyOperator          Operator
+-hi link rubyIdentifier        Identifier
+-hi link rubyInstanceVariable  Identifier
+-hi link rubyGlobalVariable    Identifier
+-hi link rubyClassVariable     Identifier
+-hi link rubyConstant          Type  
+-
+-
+-" Special for Java
+-" hi link javaClassDecl    Type
+-hi link javaScopeDecl         Identifier 
+-hi link javaCommentTitle      javaDocSeeTag 
+-hi link javaDocTags           javaDocSeeTag 
+-hi link javaDocParam          javaDocSeeTag 
+-hi link javaDocSeeTagParam    javaDocSeeTag 
+-
+-hi javaDocSeeTag              guifg=#CCCCCC     guibg=NONE        gui=NONE      ctermfg=darkgray    ctermbg=NONE        cterm=NONE
+-hi javaDocSeeTag              guifg=#CCCCCC     guibg=NONE        gui=NONE      ctermfg=darkgray    ctermbg=NONE        cterm=NONE
+-"hi javaClassDecl              guifg=#CCFFCC     guibg=NONE        gui=NONE      ctermfg=white       ctermbg=NONE        cterm=NONE
+-
+-
+-" Special for XML
+-hi link xmlTag          Keyword 
+-hi link xmlTagName      Conditional 
+-hi link xmlEndTag       Identifier 
+-
+-
+-" Special for HTML
+-hi link htmlTag         Keyword 
+-hi link htmlTagName     Conditional 
+-hi link htmlEndTag      Identifier 
+-
+-
+-" Special for Javascript
+-hi link javaScriptNumber      Number 
+-
+-
+-" Special for Python
+-"hi  link pythonEscape         Keyword      
+-
+-
+-" Special for CSharp
+-hi  link csXmlTag             Keyword      
+-
+-
+-" Special for PHP
++"Specific for diff
++hi DiffAdd      cterm=none ctermfg=0 ctermbg=119
++hi DiffChange   cterm=none ctermfg=0 ctermbg=228
++hi DiffText     cterm=none ctermfg=0 ctermbg=178
++hi DiffDelete   cterm=none ctermfg=0 ctermbg=197
++hi diffLine     cterm=bold ctermfg=241
++hi diffOldLine  cterm=none ctermfg=241
++hi diffOldFile  cterm=none ctermfg=241
++hi diffNewFile  cterm=none ctermfg=241
++hi diffAdded    cterm=none
++hi diffRemoved  cterm=none ctermfg=9
++hi diffChanged  cterm=none ctermfg=20
Index: /issm/oecreview/Archive/13393-13976/ISSM-13704-13705.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13704-13705.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13704-13705.diff	(revision 13980)
@@ -0,0 +1,314 @@
+Index: ../trunk-jpl/externalpackages/vim/addons/vimrc
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vimrc	(revision 13704)
++++ ../trunk-jpl/externalpackages/vim/addons/vimrc	(revision 13705)
+@@ -1,5 +1,5 @@
+ 
+-" General setup{{{1
++" General setup{{{
+ " ----------------------------------------------------------------------
+ " Use Vim settings, rather then Vi settings (much better!).
+ " This must be first, because it changes other options as a side effect.
+@@ -17,7 +17,7 @@
+ " display curent mode
+ set showmode
+ "----------------------------------------------------------------------}}}
+-" Text-Formatting, Identing, Tabbing{{{1
++" Text-Formatting, Identing, Tabbing{{{
+ " ----------------------------------------------------------------------
+ " allow backspacing (to delete) over everything in insert mode
+ set backspace=indent,eol,start
+@@ -38,14 +38,14 @@
+ set foldmethod=marker
+ set foldtext=IssmFoldText()
+ " -----------------------------------------------------------}}}
+-" Backups {{{1
++" Backups {{{
+ " -----------------------------------------------------------
+ " updatecount   number of characters typed to cause a swap file update (0->disable)
+ set uc=0
+ " make no backups
+ set nobackup
+ " -----------------------------------------------------------}}}
+-" Searching, Substituting {{{1
++" Searching, Substituting {{{
+ " -----------------------------------------------------------
+ " select case-insenitive search
+ "set ignorecase 
+@@ -74,7 +74,7 @@
+ " some filetypes got lower priority
+ set su=.h,.bak,~,.o,.info,.swp,.obj
+ " ----------------------------------------------------------------------}}}
+-" Colors and theme {{{1
++" Colors and theme {{{
+ " ----------------------------------------------------------------------
+ " use 256 colors
+ "set t_Co=8
+@@ -87,7 +87,7 @@
+ colorscheme issm_black
+ " ----------------------------------------------------------------------}}}
+ 
+-" Mappings{{{1
++" Mappings{{{
+ " ----------------------------------------------------------------------
+ "stop highlightings when spce is pressed
+ nnoremap <silent> <Space> :silent noh<Bar>echo<CR> 
+@@ -110,7 +110,7 @@
+ " Don't use Ex mode, use Q for formatting
+ map Q gq
+ " ----------------------------------------------------------------------}}}
+-" Autocommands {{{1
++" Autocommands {{{
+ " ----------------------------------------------------------------------
+ " Only do this part when compiled with support for autocommands.
+ if has("autocmd")
+@@ -139,20 +139,20 @@
+ 
+ endif " has("autocmd")
+ " ----------------------------------------------------------------------}}}
+-" Matlab special {{{1
++" Matlab special {{{
+ " ----------------------------------------------------------------------
+ "" associate *.par with matlab filetype
+ au BufRead,BufNewFile *.par setfiletype matlab
+ au BufRead,BufNewFile *.tpl setfiletype html
+ " ----------------------------------------------------------------------}}}
+-" C special{{{1
++" C special{{{
+ " ----------------------------------------------------------------------
+ "indenting for C-code
+ set cindent
+ " and here some nice options for cindenting
+ set cinoptions={.5s,+.5s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s 
+ " ----------------------------------------------------------------------}}}
+-" TEX special{{{1
++" TEX special{{{
+ " ----------------------------------------------------------------------
+ au BufRead,BufNewFile *.tex,*.html set textwidth=100     "100 caracters max (See gq command)
+ au BufRead,BufNewFile *.tex,*.html set formatoptions=cqt "automatic wraping
+@@ -164,11 +164,11 @@
+ " The following changes the default filetype back to 'tex':
+ let g:tex_flavor='latex'
+ " ----------------------------------------------------------------------}}}
+-" FORTRAN special{{{1
++" FORTRAN special{{{
+ " ----------------------------------------------------------------------
+ au BufRead,BufNewFile *.src setfiletype fortran
+ " ----------------------------------------------------------------------}}}
+-" InsertTabWrapper{{{1
++" InsertTabWrapper{{{
+ " ----------------------------------------------------------------------
+ function! InsertTabWrapper(direction) 
+ let col = col('.') - 1 
+@@ -191,7 +191,7 @@
+ autocmd BufEnter * lcd %:p:h
+ " ----------------------------------------------------------------------}}}
+ 
+-" Abbreviations {{{1
++" Abbreviations {{{
+ " ----------------------------------------------------------------------
+ "func Eatchar(pat)
+ "	let c = nr2char(getchar())
+@@ -224,7 +224,7 @@
+ "			\<CR>\end{enumerate}<up><C-R>=Eatchar('\s')<CR>
+ "au BufRead,BufNewFile *.tex ab (()) \left( \right)
+ "}}}
+-" Skeletons {{{1
++" Skeletons {{{
+ au BufNewFile letter.tex   0r ~/.vim/xtr/skeleton/letter.tex
+ "}}}
+ " Copy and Paste{{{
+Index: ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim
+===================================================================
+--- ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 13704)
++++ ../trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim	(revision 13705)
+@@ -568,9 +568,26 @@
+ syn keyword cType FemModel
+ "ISSM's objects end
+ "ISSM's Enums begin
+-syn keyword cConstant AutodiffForwardEnum
+ syn keyword cConstant AutodiffIsautodiffEnum
+-syn keyword cConstant AutodiffReverseEnum
++syn keyword cConstant AutodiffNumDependentsEnum
++syn keyword cConstant AutodiffNumDependentObjectsEnum
++syn keyword cConstant AutodiffDependentObjectNamesEnum
++syn keyword cConstant AutodiffDependentObjectTypesEnum
++syn keyword cConstant AutodiffDependentObjectIndicesEnum
++syn keyword cConstant AutodiffDependentObjectsEnum
++syn keyword cConstant AutodiffNumIndependentsEnum
++syn keyword cConstant AutodiffNumIndependentObjectsEnum
++syn keyword cConstant AutodiffIndependentObjectNamesEnum
++syn keyword cConstant AutodiffIndependentObjectTypesEnum
++syn keyword cConstant AutodiffIndependentObjectsEnum
++syn keyword cConstant AutodiffJacobianEnum
++syn keyword cConstant AutodiffXpEnum
++syn keyword cConstant AutodiffDriverEnum
++syn keyword cConstant AutodiffFosForwardIndexEnum
++syn keyword cConstant AutodiffFovForwardIndicesEnum
++syn keyword cConstant AutodiffFosReverseIndexEnum
++syn keyword cConstant AutodiffMassFluxSegmentsPresentEnum
++syn keyword cConstant AutodiffKeepEnum
+ syn keyword cConstant BalancethicknessSpcthicknessEnum
+ syn keyword cConstant BalancethicknessStabilizationEnum
+ syn keyword cConstant BalancethicknessThickeningRateEnum
+@@ -582,6 +599,7 @@
+ syn keyword cConstant ConstantsGEnum
+ syn keyword cConstant ConstantsReferencetemperatureEnum
+ syn keyword cConstant ConstantsYtsEnum
++syn keyword cConstant DependentObjectEnum
+ syn keyword cConstant DiagnosticAbstolEnum
+ syn keyword cConstant DiagnosticIcefrontEnum
+ syn keyword cConstant DiagnosticIsnewtonEnum
+@@ -606,6 +624,7 @@
+ syn keyword cConstant FlowequationBorderstokesEnum
+ syn keyword cConstant FlowequationElementEquationEnum
+ syn keyword cConstant FlowequationIshutterEnum
++syn keyword cConstant FlowequationIsl1l2Enum
+ syn keyword cConstant FlowequationIsmacayealpattynEnum
+ syn keyword cConstant FlowequationIsstokesEnum
+ syn keyword cConstant FlowequationVertexEquationEnum
+@@ -620,6 +639,7 @@
+ syn keyword cConstant HydrologyQEnum
+ syn keyword cConstant HydrologySpcwatercolumnEnum
+ syn keyword cConstant HydrologyStabilizationEnum
++syn keyword cConstant IndependentObjectEnum
+ syn keyword cConstant InversionControlParametersEnum
+ syn keyword cConstant InversionCostFunctionEnum
+ syn keyword cConstant InversionCostFunctionThresholdEnum
+@@ -657,6 +677,8 @@
+ syn keyword cConstant MaterialsRheologyBbarEnum
+ syn keyword cConstant MaterialsRheologyLawEnum
+ syn keyword cConstant MaterialsRheologyNEnum
++syn keyword cConstant MaterialsRheologyZEnum
++syn keyword cConstant MaterialsRheologyZbarEnum
+ syn keyword cConstant MaterialsRhoIceEnum
+ syn keyword cConstant MaterialsRhoWaterEnum
+ syn keyword cConstant MaterialsRhoFreshwaterEnum
+@@ -691,8 +713,12 @@
+ syn keyword cConstant PrognosticSpcthicknessEnum
+ syn keyword cConstant PrognosticStabilizationEnum
+ syn keyword cConstant PrognosticVertexPairingEnum
++syn keyword cConstant PrognosticNumRequestedOutputsEnum
++syn keyword cConstant PrognosticRequestedOutputsEnum
+ syn keyword cConstant QmuIsdakotaEnum
+-syn keyword cConstant QmuMassFluxSegmentsEnum
++syn keyword cConstant MassFluxSegmentsEnum
++syn keyword cConstant MassFluxSegmentsPresentEnum
++syn keyword cConstant QmuMassFluxSegmentsPresentEnum
+ syn keyword cConstant QmuNumberofpartitionsEnum
+ syn keyword cConstant QmuNumberofresponsesEnum
+ syn keyword cConstant QmuPartitionEnum
+@@ -727,6 +753,8 @@
+ syn keyword cConstant SurfaceforcingsIssmbgradientsEnum
+ syn keyword cConstant SurfaceforcingsMonthlytemperaturesEnum
+ syn keyword cConstant SurfaceforcingsHcEnum
++syn keyword cConstant SurfaceforcingsHrefEnum
++syn keyword cConstant SurfaceforcingsSmbrefEnum
+ syn keyword cConstant SurfaceforcingsSmbPosMaxEnum
+ syn keyword cConstant SurfaceforcingsSmbPosMinEnum
+ syn keyword cConstant SurfaceforcingsAPosEnum
+@@ -788,11 +816,12 @@
+ syn keyword cConstant ThermalSolutionEnum
+ syn keyword cConstant TransientSolutionEnum
+ syn keyword cConstant ApproximationEnum
++syn keyword cConstant NoneApproximationEnum
+ syn keyword cConstant HutterApproximationEnum
+ syn keyword cConstant MacAyealApproximationEnum
+ syn keyword cConstant MacAyealPattynApproximationEnum
+ syn keyword cConstant MacAyealStokesApproximationEnum
+-syn keyword cConstant NoneApproximationEnum
++syn keyword cConstant L1L2ApproximationEnum
+ syn keyword cConstant PattynApproximationEnum
+ syn keyword cConstant PattynStokesApproximationEnum
+ syn keyword cConstant StokesApproximationEnum
+@@ -803,6 +832,8 @@
+ syn keyword cConstant ParametersEnum
+ syn keyword cConstant VerticesEnum
+ syn keyword cConstant ResultsEnum
++syn keyword cConstant GenericParamEnum
++syn keyword cConstant AdolcParamEnum
+ syn keyword cConstant BoolInputEnum
+ syn keyword cConstant BoolParamEnum
+ syn keyword cConstant ContourEnum
+@@ -810,6 +841,7 @@
+ syn keyword cConstant DatasetInputEnum
+ syn keyword cConstant DofIndexingEnum
+ syn keyword cConstant DoubleInputEnum
++syn keyword cConstant DataSetParamEnum
+ syn keyword cConstant DoubleMatArrayParamEnum
+ syn keyword cConstant DoubleMatParamEnum
+ syn keyword cConstant DoubleParamEnum
+@@ -828,15 +860,18 @@
+ syn keyword cConstant MacAyeal2dIceFrontEnum
+ syn keyword cConstant MacAyeal3dIceFrontEnum
+ syn keyword cConstant MaticeEnum
++syn keyword cConstant MatdamageiceEnum
+ syn keyword cConstant MatparEnum
+ syn keyword cConstant NodeEnum
+ syn keyword cConstant NumericalfluxEnum
+ syn keyword cConstant ParamEnum
++syn keyword cConstant L1L2IceFrontEnum
+ syn keyword cConstant PattynIceFrontEnum
+ syn keyword cConstant PengridEnum
+ syn keyword cConstant PenpairEnum
+ syn keyword cConstant PentaEnum
+ syn keyword cConstant PentaP1InputEnum
++syn keyword cConstant ProfilerEnum
+ syn keyword cConstant MatrixParamEnum
+ syn keyword cConstant VectorParamEnum
+ syn keyword cConstant RiftfrontEnum
+@@ -902,6 +937,8 @@
+ syn keyword cConstant TemperatureEnum
+ syn keyword cConstant TemperatureOldEnum
+ syn keyword cConstant TemperaturePicardEnum
++syn keyword cConstant TemperatureSurfaceEnum
++syn keyword cConstant TemperatureBasalEnum
+ syn keyword cConstant ThicknessAbsMisfitEnum
+ syn keyword cConstant TypeEnum
+ syn keyword cConstant VelEnum
+@@ -923,6 +960,8 @@
+ syn keyword cConstant EnthalpyEnum
+ syn keyword cConstant EnthalpyPicardEnum
+ syn keyword cConstant ThicknessAbsGradientEnum
++syn keyword cConstant ThicknessAlongGradientEnum
++syn keyword cConstant ThicknessAcrossGradientEnum
+ syn keyword cConstant StepResponsesEnum
+ syn keyword cConstant IntMatParamEnum
+ syn keyword cConstant RheologyBbarAbsGradientEnum
+@@ -943,10 +982,6 @@
+ syn keyword cConstant StressTensoryyEnum
+ syn keyword cConstant StressTensoryzEnum
+ syn keyword cConstant StressTensorzzEnum
+-syn keyword cConstant IceVolumeEnum
+-syn keyword cConstant TotalSmbEnum
+-syn keyword cConstant ThicknessAlongGradientEnum
+-syn keyword cConstant ThicknessAcrossGradientEnum
+ syn keyword cConstant P0Enum
+ syn keyword cConstant P1Enum
+ syn keyword cConstant P1DGEnum
+@@ -980,6 +1015,8 @@
+ syn keyword cConstant MinVzEnum
+ syn keyword cConstant MaxVzEnum
+ syn keyword cConstant MaxAbsVzEnum
++syn keyword cConstant IceVolumeEnum
++syn keyword cConstant TotalSmbEnum
+ syn keyword cConstant RelativeEnum
+ syn keyword cConstant AbsoluteEnum
+ syn keyword cConstant IncrementalEnum
+@@ -1003,6 +1040,8 @@
+ syn keyword cConstant NodalEnum
+ syn keyword cConstant OldGradientEnum
+ syn keyword cConstant OutputFilePointerEnum
++syn keyword cConstant OutputFileNameEnum
++syn keyword cConstant LockFileNameEnum
+ syn keyword cConstant PetscOptionsAnalysesEnum
+ syn keyword cConstant PetscOptionsStringsEnum
+ syn keyword cConstant QmuErrNameEnum
+@@ -1019,6 +1058,7 @@
+ syn keyword cConstant XYEnum
+ syn keyword cConstant XYZPEnum
+ syn keyword cConstant OptionEnum
++syn keyword cConstant GenericOptionEnum
+ syn keyword cConstant OptionCellEnum
+ syn keyword cConstant OptionCharEnum
+ syn keyword cConstant OptionStructEnum
Index: /issm/oecreview/Archive/13393-13976/ISSM-13705-13706.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13705-13706.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13705-13706.diff	(revision 13980)
@@ -0,0 +1,157 @@
+Index: ../trunk-jpl/externalpackages/cmake
+===================================================================
+--- ../trunk-jpl/externalpackages/cmake	(revision 13705)
++++ ../trunk-jpl/externalpackages/cmake	(revision 13706)
+
+Property changes on: ../trunk-jpl/externalpackages/cmake
+___________________________________________________________________
+Modified: svn:ignore
+## -1,2 +1,3 ##
++*.gz
+ install
+ src
+Index: ../trunk-jpl/externalpackages/dakota/install-linux64-cloud.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-linux64-cloud.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/dakota/install-linux64-cloud.sh	(revision 13706)
+@@ -0,0 +1,97 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf Dakota
++rm -rf src 
++rm -rf install 
++mkdir src install 
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/Dakota_4_3.src.tar.gz' 'Dakota_4_3.src.tar.gz'
++
++#Untar 
++tar -zxvf  Dakota_4_3.src.tar.gz
++
++#Move Dakota to src directory
++mv Dakota/* src
++rm -rf Dakota
++
++#Apply patches
++patch src/src/ParallelLibrary.C ./ParallelLibrary.C.patch
++patch src/src/ParallelLibrary.H ./ParallelLibrary.H.patch
++patch src/src/NIDRProblemDescDB.C ./NIDRProblemDescDB.C.patch
++patch src/src/NonDSampling.C ./NonDSampling.C.patch
++patch src/src/NonDLocalReliability.C ./NonDLocalReliability.C.patch
++patch src/src/NonDUnilevelRBDO.C ./NonDUnilevelRBDO.C.patch    #  source not even used?
++#patch -R src/packages/Pecos/src/LHSDriver.cpp ./LHSDriver.cpp.patch
++
++#Configure dakota
++cd src
++./configure \
++	--prefix="$ISSM_DIR/externalpackages/dakota/install" \
++	--without-graphics  \
++	--with-pic \
++	--disable-mpi \
++	--with-blas=/usr/lib/libblas.so \
++	--with-lapack=/usr/lib/liblapack.so
++cd ..
++
++#Before compiling, if running on 64 bits, we need to active fPIC compilation. Some packages 
++#do not register -fPIC in Dakota, which is a problem. Edit the faulty Makefiles and add the -fPIC 
++#flag to the compilation.
++cat ./src/methods/NCSUOpt/Makefile | sed 's/FFLAGS = -g -O2/FFLAGS = -g -O2 -fPIC/g' >  temp
++mv temp ./src/methods/NCSUOpt/Makefile
++
++cat ./src/methods/acro/packages/pebbl/src/Makefile | sed 's/CXXFLAGS = -O2 -fpermissive/CXXFLAGS = -O2 -fpermissive -fPIC/g' > temp
++mv temp ./src/methods/acro/packages/pebbl/src/Makefile
++
++cat ./src/methods/hopspack/src-nappspack/Makefile | sed 's/CXXFLAGS = -g -O2/CXXFLAGS = -g -O2  -fPIC/g' > temp
++mv temp ./src/methods/hopspack/src-nappspack/Makefile
++
++cat ./src/methods/hopspack/src-cddlib/Makefile | sed 's/CFLAGS = -g -O2/CFLAGS = -g -O2 -fPIC/g' > temp
++mv temp  ./src/methods/hopspack/src-cddlib/Makefile 
++
++cat ./src/methods/hopspack/src-shared/Makefile | sed 's/CFLAGS = -g -O2/CFLAGS = -g -O2 -fPIC/g' > temp
++mv temp  ./src/methods/hopspack/src-shared/Makefile 
++
++cat ./src/methods/hopspack/src-shared/Makefile | sed 's/CXXFLAGS = -g -O2/CXXFLAGS = -g -O2  -fPIC/g' > temp
++mv temp  ./src/methods/hopspack/src-shared/Makefile 
++
++cat ./src/methods/hopspack/src-conveyor/Makefile | sed 's/CXXFLAGS = -g -O2/CXXFLAGS = -g -O2 -fPIC/g' > temp
++mv temp  ./src/methods/hopspack/src-conveyor/Makefile 
++
++cat ./src/methods/hopspack/src-appspack/Makefile | sed 's/CXXFLAGS = -g -O2/CXXFLAGS = -g -O2  -fPIC/g' > temp
++mv temp ./src/methods/hopspack/src-appspack/Makefile 
++
++cat ./src/methods/acro/packages/colin/src/Makefile | sed 's/CXXFLAGS = -O2 -fpermissive/CXXFLAGS = -O2 -fpermissive -fPIC/g' > temp
++mv temp ./src/methods/acro/packages/colin/src/Makefile
++
++cat ./src/methods/acro/packages/coliny/src/Makefile | sed 's/CXXFLAGS = -O2 -fpermissive/CXXFLAGS = -O2 -fpermissive -fPIC/g' > temp
++mv temp ./src/methods/acro/packages/coliny/src/Makefile
++
++cat ./src/methods/acro/packages/tpl/3po/Makefile | sed 's/CFLAGS = -O2/CFLAGS = -O2 -fPIC/g' > temp
++mv temp  ./src/methods/acro/packages/tpl/3po/Makefile 
++
++cat ./src/methods/acro/packages/tpl/3po/Makefile | sed 's/CXXFLAGS = -O2 -fpermissive/CFLAGS = -O2 -fpermissive -fPIC/g' > temp
++mv temp  ./src/methods/acro/packages/tpl/3po/Makefile 
++
++cat ./src/packages/ampl/Makefile | sed 's/CFLAGS = -g -O2/CFLAGS = -g -O2 -fPIC/g' > temp
++mv temp  ./src/packages/ampl/Makefile 
++
++#Compile and install dakota
++cd src 
++if [ $# -eq 0 ];
++then
++	make
++	make install
++else
++	make -j $1
++	make -j $1 install
++fi
++cd ..
++
++#Weird behaviour of Dakota: libamplsolver.a and amplsolver.a are not the same thing!
++cd install/lib
++mv libamplsolver.a libamplsolver.a.bak
++ln -s ../../src/packages/ampl/amplsolver.a ./libamplsolver.a
+
+Property changes on: ../trunk-jpl/externalpackages/dakota/install-linux64-cloud.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/externalpackages/petsc/install-dev-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-dev-linux64.sh	(revision 13705)
++++ ../trunk-jpl/externalpackages/petsc/install-dev-linux64.sh	(revision 13706)
+@@ -1,7 +1,6 @@
+ #!/bin/bash
+-set -eu
+ 
+-STEP=1
++STEP=2
+ 
+ if [ $STEP -eq 1 ]; then
+ 	# Adapted from petsc 3.2. 
+@@ -51,7 +50,8 @@
+ 	--download-spooles=yes \
+ 	--download-spai=yes \
+ 	--download-superlu=http://crd.lbl.gov/~xiaoye/SuperLU/superlu_4.3.tar.gz \
+-	--download-hypre=yes 
++	--download-hypre=yes \
++	--download-c2html=yes
+ #	--with-pic=1
+ 
+ 	#Compile petsc and install it
+Index: ../trunk-jpl/externalpackages/petsc
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc	(revision 13705)
++++ ../trunk-jpl/externalpackages/petsc	(revision 13706)
+
+Property changes on: ../trunk-jpl/externalpackages/petsc
+___________________________________________________________________
+Modified: svn:ignore
+## -1,3 +1,5 ##
++install-3.2
++install-dev
+ *.tgz
+ *.gz
+ install
Index: /issm/oecreview/Archive/13393-13976/ISSM-13706-13707.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13706-13707.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13706-13707.diff	(revision 13980)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/configs/config-linux64-cloud.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-cloud.sh	(revision 0)
++++ ../trunk-jpl/configs/config-linux64-cloud.sh	(revision 13707)
+@@ -0,0 +1,20 @@
++#!/bin/sh
++
++#External packages versions:
++#petsc 3.1 or 3.2
++#mpich 1.4
++
++./configure \
++ --prefix=$ISSM_DIR \
++ --without-wrappers \
++ --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
++ --with-metis-dir=$ISSM_DIR/externalpackages/petsc/src/externalpackages/metis-5.0.2-p3 \
++ --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
++ --with-tao-dir=$ISSM_DIR/externalpackages/tao/install \
++ --with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
++ --with-mpi-lib="-L$ISSM_DIR/externalpackages/mpich2/install/lib/ -lmpich -lmpl " \
++ --with-petsc-arch=$ISSM_ARCH \
++ --with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++ --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++ --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++ --with-cxxoptflags=" -O2 -fpermissive" 
+
+Property changes on: ../trunk-jpl/configs/config-linux64-cloud.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13707-13708.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13707-13708.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13707-13708.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/scripts/report.sh
+===================================================================
+--- ../trunk-jpl/scripts/report.sh	(revision 13707)
++++ ../trunk-jpl/scripts/report.sh	(revision 13708)
+@@ -103,7 +103,7 @@
+ <table $SECTION_STYLE><tr><td $SECTION_FONT>Matlab tests</td></tr></table>
+ <table $(echo $BODY_STYLE) style="border-collapse:collapse;">
+ $(if [ $CRASH_MATLAB -eq 0 ]; then
+-echo "<tr><td $BODY_FONTL>Status: <span style=\"color:#008000\">all test desks have been run</span></td></tr>"
++echo "<tr><td $BODY_FONTL>Status: <span style=\"color:#008000\">all tests have been run</span></td></tr>"
+ else
+ 	echo "<tr><td $BODY_FONTL>Status: <span style=\"color:#ff0000\">Matlab crashed</span></td></tr>"
+ fi)
+@@ -132,7 +132,7 @@
+ <table $SECTION_STYLE><tr><td $SECTION_FONT>Python tests</td></tr></table>
+ <table $(echo $BODY_STYLE) style="border-collapse:collapse;">
+ $(if [ $CRASH_PYTHON -eq 0 ]; then
+-	echo "<tr><td $BODY_FONTL>Status: <span style=\"color:#008000\">all test desks have been run</span></td></tr>"
++	echo "<tr><td $BODY_FONTL>Status: <span style=\"color:#008000\">all tests have been run</span></td></tr>"
+ else
+ 	echo "<tr><td $BODY_FONTL>Status: <span style=\"color:#ff0000\">Python crashed</span></td></tr>"
+ fi)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13708-13709.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13708-13709.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13708-13709.diff	(revision 13980)
@@ -0,0 +1,117 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 13708)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 13709)
+@@ -1401,6 +1401,24 @@
+ 	AM_CONDITIONAL([RIFTS], [test x$HAVE_RIFTS = xyes])
+ 	AC_MSG_RESULT($HAVE_RIFTS)
+ 	dnl }}}
++	dnl with-android{{{
++	AC_ARG_WITH([android],
++		AS_HELP_STRING([--with-android = YES], [compile with android capabilities (default is no)]),
++		[ANDROID=$withval],[ANDROID=no]) 
++	AC_MSG_CHECKING(for android capability compilation)
++
++	if test "x$ANDROID" = "xyes"; then
++
++		dnl defaults
++		HAVE_ANDROID=yes
++
++		AC_DEFINE([_HAVE_ANDROID_],[1],[with android capability])
++	else
++		HAVE_ANDROID=no
++	fi
++	AM_CONDITIONAL([ANDROID], [test x$HAVE_ANDROID = xyes])
++	AC_MSG_RESULT($HAVE_ANDROID)
++	dnl }}}
+ 	dnl with-3d{{{
+ 	AC_ARG_WITH([3d],
+ 		AS_HELP_STRING([--with-3d = YES], [compile with 3d capabilities (default is yes)]),
+Index: ../trunk-jpl/src/c/android/fac.h
+===================================================================
+--- ../trunk-jpl/src/c/android/fac.h	(revision 0)
++++ ../trunk-jpl/src/c/android/fac.h	(revision 13709)
+@@ -0,0 +1,14 @@
++/*
++ * fac.h:  prototype fac class with a simple factorial routine
++ */
++
++#ifndef _FAC_H_
++#define _FAC_H_
++
++class fac {
++
++	public:
++		long factorial(long n);
++};
++
++#endif
+Index: ../trunk-jpl/src/c/android/fac.cpp
+===================================================================
+--- ../trunk-jpl/src/c/android/fac.cpp	(revision 0)
++++ ../trunk-jpl/src/c/android/fac.cpp	(revision 13709)
+@@ -0,0 +1,26 @@
++/*!\file fac.cpp
++ * \brief: implementation of the fac class
++ */
++
++/*Headers{{{*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./fac.h"
++
++/*}}}*/
++
++long fac::factorial(long n) {
++	long f = 1;
++	long i;
++	
++	for(i = 1; i <= n; i++){
++		f *= i;
++	}
++	
++	return f;
++}
++
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13708)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13709)
+@@ -545,6 +545,10 @@
+ 				    ./classes/objects/Loads/Riftfront.h\
+ 				    ./modules/ConstraintsStatex/RiftConstraintsState.cpp
+ #}}}
++#Android sources  {{{
++android_sources = ./android/fac.h\
++				  ./android/fac.cpp
++#}}}
+ #3D sources  {{{
+ threed_sources = ./classes/gauss/GaussPenta.h\
+ 				     ./classes/gauss/GaussPenta.cpp\
+@@ -940,6 +944,10 @@
+ issm_sources +=  $(rifts_sources)
+ endif
+ 
++if ANDROID
++issm_sources +=  $(android_sources)
++endif
++
+ if THREED
+ issm_sources +=  $(threed_sources)
+ endif
+Index: ../trunk-jpl/configs/config-arm-linux.sh
+===================================================================
+--- ../trunk-jpl/configs/config-arm-linux.sh	(revision 13708)
++++ ../trunk-jpl/configs/config-arm-linux.sh	(revision 13709)
+@@ -5,6 +5,7 @@
+     --build="i386-apple-darwin10.8.0" \
+     --host="arm-linux-androideabi" \
+     --enable-shared \
++    --with-android\
+     --without-fortran \
+ 	--without-wrappers \
+ 	--without-kriging \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13709-13710.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13709-13710.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13709-13710.diff	(revision 13980)
@@ -0,0 +1,118 @@
+Index: ../trunk-jpl/src/m/mesh/rifts/meshprocessrifts.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/meshprocessrifts.py	(revision 13709)
++++ ../trunk-jpl/src/m/mesh/rifts/meshprocessrifts.py	(revision 13710)
+@@ -1,5 +1,5 @@
+ import numpy
+-#from TriMeshProcessRifts import *
++from TriMeshProcessRifts import *
+ from ContourToMesh import *
+ from meshprocessoutsiderifts import *
+ from GetAreas import *
+@@ -22,7 +22,9 @@
+ 
+ 	#Call MEX file
+ 	[md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers,md.rifts.riftstruct]=TriMeshProcessRifts(md.mesh.elements,md.mesh.x,md.mesh.y,md.mesh.segments,md.mesh.segmentmarkers)
+-	if not isinstance(md.rifts.riftstruct,'list') or not md.rifts.riftstruct:
++	md.mesh.x=md.mesh.x.reshape(-1)
++	md.mesh.y=md.mesh.y.reshape(-1)
++	if not isinstance(md.rifts.riftstruct,list) or not md.rifts.riftstruct:
+ 		raise RuntimeError("TriMeshProcessRifts did not find any rift")
+ 
+ 	#Fill in rest of fields:
+@@ -39,17 +41,17 @@
+ 
+ 	#get coordinates of rift tips
+ 	for rift in md.rifts.riftstruct:
+-		rift.tip1coordinates=numpy.hstack((md.mesh.x[rift.tips[0].astype(int)-1].reshape(-1,1),md.mesh.y[rift.tips[0].astype(int)-1].reshape(-1,1)))
+-		rift.tip2coordinates=numpy.hstack((md.mesh.x[rift.tips[1].astype(int)-1].reshape(-1,1),md.mesh.y[rift.tips[1].astype(int)-1].reshape(-1,1)))
++		rift['tip1coordinates']=numpy.hstack((md.mesh.x[rift['tips'][0,0].astype(int)-1].reshape(-1,1),md.mesh.y[rift['tips'][0,0].astype(int)-1].reshape(-1,1)))
++		rift['tip2coordinates']=numpy.hstack((md.mesh.x[rift['tips'][0,1].astype(int)-1].reshape(-1,1),md.mesh.y[rift['tips'][0,1].astype(int)-1].reshape(-1,1)))
+ 
+ 	#In case we have rifts that open up the domain outline, we need to open them: 
+-	flags=ContourToMesh(md.mesh.elements,md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),domainoutline,'node',0)
++	[flags,dum]=ContourToMesh(md.mesh.elements,md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),domainoutline,'node',0)
+ 	found=0
+ 	for rift in md.rifts.riftstruct:
+-		if flags[rift.tips[0].astype(int)-1]==0:
++		if flags[rift['tips'][0,0].astype(int)-1]==0:
+ 			found=1
+ 			break
+-		if flags[rift.tips[1].astype(int)-1]==0:
++		if flags[rift['tips'][0,1].astype(int)-1]==0:
+ 			found=1
+ 			break
+ 	if found:
+@@ -58,7 +60,7 @@
+ 	#get elements that are not correctly oriented in the correct direction:
+ 	aires=GetAreas(md.mesh.elements,md.mesh.x,md.mesh.y)
+ 	pos=numpy.nonzero(aires<0)[0]
+-	md.mesh.elements[pos,:]=numpy.array([[md.mesh.elements[pos,1],md.mesh.elements[pos,0],md.mesh.elements[pos,2]]])
++	md.mesh.elements[pos,:]=numpy.hstack((md.mesh.elements[pos,1].reshape(-1,1),md.mesh.elements[pos,0].reshape(-1,1),md.mesh.elements[pos,2].reshape(-1,1)))
+ 
+ 	return md
+ 
+Index: ../trunk-jpl/src/m/classes/rifts.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/rifts.py	(revision 13709)
++++ ../trunk-jpl/src/m/classes/rifts.py	(revision 13710)
+@@ -52,10 +52,11 @@
+ 			if numpy.any(md.mesh.segmentmarkers>=2):
+ 				#We have segments with rift markers, but no rift structure!
+ 				md.checkmessage("model should be processed for rifts (run meshprocessrifts)!")
+-			md = checkfield(md,'rifts.riftstruct.fill','values',[WaterEnum(),AirEnum(),IceEnum(),MelangeEnum()])
++			for i,rift in enumerate(self.riftstruct):
++				md = checkfield(md,"rifts.riftstruct[%d]['fill']" % i,'values',[WaterEnum(),AirEnum(),IceEnum(),MelangeEnum()])
+ 		else:
+ 			if numpy.any(numpy.logical_not(isnans(self.riftstruct))):
+-				md.checkmessage("riftstruct shoud be NaN since numrifts is 0!")
++				md.checkmessage("riftstruct should be NaN since numrifts is 0!")
+ 
+ 		return md
+ 	# }}}
+@@ -69,20 +70,20 @@
+ 			numrifts=len(self.riftstruct)
+ 
+ 		numpairs=0
+-		for i in xrange(0,numrifts):
+-			numpairs+=numpy.size(self.riftstruct[i].penaltypairs,0)
++		for rift in self.riftstruct:
++			numpairs+=numpy.size(rift['penaltypairs'],axis=0)
+ 
+ 		# 2 for nodes + 2 for elements+ 2 for  normals + 1 for length + 1 for fill + 1 for friction + 1 for fraction + 1 for fractionincrement + 1 for state.
+ 		data=numpy.zeros((numpairs,12))
+ 		count=0
+-		for i in xrange(0,numrifts):
+-			numpairsforthisrift=numpy.size(self.riftstruct[i]['penaltypairs'],0)
+-			data[count:count+numpairsforthisrift-1,0:6]=self.riftstruct[i]['penaltypairs']
+-			data[count:count+numpairsforthisrift-1,7]=self.riftstruct[i]['fill']
+-			data[count:count+numpairsforthisrift-1,8]=self.riftstruct[i]['friction']
+-			data[count:count+numpairsforthisrift-1,9]=self.riftstruct[i]['fraction']
+-			data[count:count+numpairsforthisrift-1,10]=self.riftstruct[i]['fractionincrement']
+-			data[count:count+numpairsforthisrift-1,11]=self.riftstruct[i]['state']
++		for rift in self.riftstruct:
++			numpairsforthisrift=numpy.size(rift['penaltypairs'],0)
++			data[count:count+numpairsforthisrift,0:7]=rift['penaltypairs']
++			data[count:count+numpairsforthisrift,7]=rift['fill']
++			data[count:count+numpairsforthisrift,8]=rift['friction']
++			data[count:count+numpairsforthisrift,9]=rift['fraction']
++			data[count:count+numpairsforthisrift,10]=rift['fractionincrement']
++			data[count:count+numpairsforthisrift,11]=rift['state'].reshape(-1)
+ 			count+=numpairsforthisrift
+ 
+ 		WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum(),'format','Integer')
+Index: ../trunk-jpl/src/m/classes/rifts.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/rifts.m	(revision 13709)
++++ ../trunk-jpl/src/m/classes/rifts.m	(revision 13710)
+@@ -37,7 +37,9 @@
+ 					%We have segments with rift markers, but no rift structure!
+ 					md = checkmessage(md,['model should be processed for rifts (run meshprocessrifts)!']);
+ 				end
+-				md = checkfield(md,'rifts.riftstruct.fill','values',[WaterEnum() AirEnum() IceEnum() MelangeEnum()]);
++				for i=1:numrifts,
++					md = checkfield(md,sprintf('rifts.riftstruct(%d).fill',i),'values',[WaterEnum() AirEnum() IceEnum() MelangeEnum()]);
++				end
+ 			else
+ 				if ~isnans(obj.riftstruct),
+ 					md = checkmessage(md,['riftstruct shoud be NaN since numrifts is 0!']);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13710-13711.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13710-13711.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13710-13711.diff	(revision 13980)
@@ -0,0 +1,149 @@
+Index: ../trunk-jpl/test/NightlyRun/test216.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test216.py	(revision 13711)
+@@ -0,0 +1,49 @@
++"""
++== == == == == == == == == == == == == == == == == == ==
++Auto generated python script for ISSM:   test216.m
++Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
++== == == == == == == == == == == == == == == == == == ==
++
++Matlab script conversion into python
++translateToPy.py Author: Michael Pellegrin
++translateToPy.py Date: 09/24/12
++== == == == == == == == == == == == == == == == == == ==
++"""
++
++from MatlabFuncs import *
++from model import *
++from EnumDefinitions import *
++from numpy import *
++from triangle import *
++from meshprocessrifts import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from solve import *
++
++md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000.)
++md=meshprocessrifts(md,'../Exp/Square.exp')
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++
++# rift settings
++
++md.rifts.riftstruct[0]['fill']=MelangeEnum()
++md.rifts.riftstruct[0]['fraction']=0
++md.diagnostic.rift_penalty_lock=2
++md.diagnostic.rift_penalty_threshold=0
++md.rifts.riftstruct[0]['fractionincrement']=0.1
++md=solve(md,DiagnosticSolutionEnum())
++
++# Fields and tolerances to track changes
++
++field_names     =['Vx','Vy','Vel','Pressure']
++field_tolerances=[1e-11,1e-11,1e-11,1e-11]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	]
+Index: ../trunk-jpl/test/NightlyRun/test274.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test274.py	(revision 13711)
+@@ -0,0 +1,35 @@
++import numpy
++from model import *
++from triangle import *
++from meshprocessrifts import *
++from setmask import *
++from parameterize import *
++from matdamageice import *
++from paterson import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000.)
++md=meshprocessrifts(md,'../Exp/Square.exp')
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md.materials=matdamageice()
++md.materials.rheology_B=paterson(md.initialization.temperature)
++md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
++md.materials.rheology_Z=0.5*numpy.ones((md.mesh.numberofvertices,1))
++md=setflowequation(md,'macayeal','all')
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Vx','Vy','Vel','Pressure']
++field_tolerances=[1e-11,1e-11,1e-11,1e-11]
++field_values=[\
++	   md.results['DiagnosticSolution'][1]['Vx'],\
++	   md.results['DiagnosticSolution'][1]['Vy'],\
++	   md.results['DiagnosticSolution'][1]['Vel'],\
++	   md.results['DiagnosticSolution'][1]['Pressure'],\
++	   ]
+Index: ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test216.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test216.py	(revision 13710)
++++ ../trunk-jpl/test/NightlyRun/InNeedOfDebugging/test216.py	(revision 13711)
+@@ -1,50 +0,0 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test216.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+-from MatlabFuncs import *
+-from model import *
+-from EnumDefinitions import *
+-from numpy import *
+-from triangle import *
+-from setmask import *
+-from parameterize import *
+-from setflowequation import *
+-from solve import *
+-
+-md=triangle(model(),'../Exp/SquareHole.exp','../Exp/Rifts.exp',50000)
+-md=meshprocessrifts(md,'../Exp/Square.exp')
+-md=setmask(md,'all','')
+-md=parameterize(md,'../Par/SquareShelf.py')
+-md=setflowequation(md,'macayeal','all')
+-md.cluster=generic('name',oshostname(),'np',3)
+-
+-
+-# rift settings
+-
+-md.rifts.riftstruct.fill=MelangeEnum()
+-md.rifts.riftstruct.fraction=0
+-md.diagnostic.rift_penalty_lock=2
+-md.diagnostic.rift_penalty_threshold=0
+-md.rifts.riftstruct.fractionincrement=.1
+-md=solve(md,DiagnosticSolutionEnum())
+-
+-
+-# Fields and tolerances to track changes
+-
+-field_names     =['Vx','Vy','Vel','Pressure']
+-field_tolerances=[1e-11,1e-11,1e-11,1e-11]
+-field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13711-13712.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13711-13712.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13711-13712.diff	(revision 13980)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 13711)
++++ ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 13712)
+@@ -1,11 +1,9 @@
+ %Get full list with:
+ %  for i in test*.m; do NAME=$(echo $i | sed -e "s/\.m//"); %if [ ! -f $NAME.py ]; then echo $NAME; fi; done
+ 
+-test216    needs TriMeshProcessRifts module in meshprocessrifts.py (skip, per Eric, 10/03/12)
+ test218    needs Dakota
+ test234    needs Dakota
+ test235    needs Dakota
+-test274    needs TriMeshProcessRifts module in meshprocessrifts.py
+ test412    needs Dakota
+ test413    needs Dakota
+ test414    needs Dakota
Index: /issm/oecreview/Archive/13393-13976/ISSM-13712-13713.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13712-13713.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13712-13713.diff	(revision 13980)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/scripts/report.sh
+===================================================================
+--- ../trunk-jpl/scripts/report.sh	(revision 13712)
++++ ../trunk-jpl/scripts/report.sh	(revision 13713)
+@@ -274,6 +274,22 @@
+ END
+ #}}}
+ fi
++if [ $IS_PYTHON -eq 1 ] && [ -s pythonerror.log ]; then
++	#Python {{{
++	cat << END >> report.html
++	<table $SECTION_STYLE><tr><td $SECTION_FONT>Python errors</td></tr></table>
++	<table $PYTHON_STYLE><tr><td $PYTHON_FONT>
++	<pre style="
++	white-space: -moz-pre-wrap;
++	white-space: -pre-wrap;
++	white-space: -o-pre-wrap;
++	white-space: pre-wrap;
++	word-wrap: break-word;
++	">$(cat pythonerror.log)</pre>
++	</td></tr></table>
++	END
++	#}}}
++fi
+ if [ -s petscerror.log ]; then
+ 	#PETSc{{{
+ cat << END >> report.html
Index: /issm/oecreview/Archive/13393-13976/ISSM-13713-13714.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13713-13714.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13713-13714.diff	(revision 13980)
@@ -0,0 +1,61 @@
+Index: ../trunk-jpl/scripts/report.sh
+===================================================================
+--- ../trunk-jpl/scripts/report.sh	(revision 13713)
++++ ../trunk-jpl/scripts/report.sh	(revision 13714)
+@@ -9,8 +9,8 @@
+ SECTION_FONT='style="color:#6495ed; font-family:Arial, Verdana, Tahoma; font-size:20px; font-weight: bold;" align="left"'
+ TABLE_STYLE='width="680px" rules=none bgcolor="#ffffdd" border=1 bordercolor="#000000" cellpadding="3"'
+ TABLE_FONT='style="color:#404040; font-family:Arial, Verdana, Tahoma; font-size:14px; font-weight: normal;" align="left"'
+-MATLAB_STYLE='width="700px" rules=none'
+-MATLAB_FONT='style="color:#404040; font-family:Arial, Verdana, Tahoma; font-size:12px; font-weight: normal;" align="left"'
++CODE_STYLE='width="700px" rules=none'
++CODE_FONT='style="color:#404040; font-family:Arial, Verdana, Tahoma; font-size:12px; font-weight: normal;" align="left"'
+ BODY_STYLE='width="700px"'
+ BODY_FONT='style="color:#404040; font-family:Arial, Verdana, Tahoma; font-size:14px;"'
+ BODY_FONTC=$(echo $BODY_FONT | sed -e "s/style=\"/style=\"text-align:center; /g")
+@@ -262,7 +262,7 @@
+ #Matlab {{{
+ cat << END >> report.html
+ <table $SECTION_STYLE><tr><td $SECTION_FONT>Matlab errors</td></tr></table>
+-<table $MATLAB_STYLE><tr><td $MATLAB_FONT>
++<table $CODE_STYLE><tr><td $CODE_FONT>
+ <pre style="
+ white-space: -moz-pre-wrap;
+ white-space: -pre-wrap;
+@@ -277,24 +277,24 @@
+ if [ $IS_PYTHON -eq 1 ] && [ -s pythonerror.log ]; then
+ 	#Python {{{
+ 	cat << END >> report.html
+-	<table $SECTION_STYLE><tr><td $SECTION_FONT>Python errors</td></tr></table>
+-	<table $PYTHON_STYLE><tr><td $PYTHON_FONT>
+-	<pre style="
+-	white-space: -moz-pre-wrap;
+-	white-space: -pre-wrap;
+-	white-space: -o-pre-wrap;
+-	white-space: pre-wrap;
+-	word-wrap: break-word;
+-	">$(cat pythonerror.log)</pre>
+-	</td></tr></table>
+-	END
++<table $SECTION_STYLE><tr><td $SECTION_FONT>Python errors</td></tr></table>
++<table $CODE_STYLE><tr><td $CODE_FONT>
++<pre style="
++white-space: -moz-pre-wrap;
++white-space: -pre-wrap;
++white-space: -o-pre-wrap;
++white-space: pre-wrap;
++word-wrap: break-word;
++">$(cat pythonerror.log)</pre>
++</td></tr></table>
++END
+ 	#}}}
+ fi
+ if [ -s petscerror.log ]; then
+ 	#PETSc{{{
+ cat << END >> report.html
+ <table $SECTION_STYLE><tr><td $SECTION_FONT>PETSc errors</td></tr></table>
+-<table $MATLAB_STYLE><tr><td $MATLAB_FONT>
++<table $CODE_STYLE><tr><td $CODE_FONT>
+ <pre style="
+ white-space: -moz-pre-wrap;
+ white-space: -pre-wrap;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13714-13715.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13714-13715.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13714-13715.diff	(revision 13980)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/src/m/classes/rifts.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/rifts.py	(revision 13714)
++++ ../trunk-jpl/src/m/classes/rifts.py	(revision 13715)
+@@ -70,21 +70,23 @@
+ 			numrifts=len(self.riftstruct)
+ 
+ 		numpairs=0
+-		for rift in self.riftstruct:
+-			numpairs+=numpy.size(rift['penaltypairs'],axis=0)
++		if numrifts:
++			for rift in self.riftstruct:
++				numpairs+=numpy.size(rift['penaltypairs'],axis=0)
+ 
+ 		# 2 for nodes + 2 for elements+ 2 for  normals + 1 for length + 1 for fill + 1 for friction + 1 for fraction + 1 for fractionincrement + 1 for state.
+ 		data=numpy.zeros((numpairs,12))
+-		count=0
+-		for rift in self.riftstruct:
+-			numpairsforthisrift=numpy.size(rift['penaltypairs'],0)
+-			data[count:count+numpairsforthisrift,0:7]=rift['penaltypairs']
+-			data[count:count+numpairsforthisrift,7]=rift['fill']
+-			data[count:count+numpairsforthisrift,8]=rift['friction']
+-			data[count:count+numpairsforthisrift,9]=rift['fraction']
+-			data[count:count+numpairsforthisrift,10]=rift['fractionincrement']
+-			data[count:count+numpairsforthisrift,11]=rift['state'].reshape(-1)
+-			count+=numpairsforthisrift
++		if numrifts:
++			count=0
++			for rift in self.riftstruct:
++				numpairsforthisrift=numpy.size(rift['penaltypairs'],0)
++				data[count:count+numpairsforthisrift,0:7]=rift['penaltypairs']
++				data[count:count+numpairsforthisrift,7]=rift['fill']
++				data[count:count+numpairsforthisrift,8]=rift['friction']
++				data[count:count+numpairsforthisrift,9]=rift['fraction']
++				data[count:count+numpairsforthisrift,10]=rift['fractionincrement']
++				data[count:count+numpairsforthisrift,11]=rift['state'].reshape(-1)
++				count+=numpairsforthisrift
+ 
+ 		WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum(),'format','Integer')
+ 		WriteData(fid,'data',data,'enum',RiftsRiftstructEnum(),'format','DoubleMat','mattype',3)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13715-13716.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13715-13716.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13715-13716.diff	(revision 13980)
@@ -0,0 +1,73 @@
+Index: ../trunk-jpl/src/m/classes/rifts.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/rifts.py	(revision 13715)
++++ ../trunk-jpl/src/m/classes/rifts.py	(revision 13716)
+@@ -17,8 +17,8 @@
+ 	#properties
+ 	def __init__(self):
+ 		# {{{ Properties
+-		self.riftstruct     = float('NaN')
+-		self.riftproperties = float('NaN')
++		self.riftstruct     = []
++		self.riftproperties = []
+ 
+ 		#set defaults
+ 		self.setdefaultparameters()
+@@ -55,7 +55,7 @@
+ 			for i,rift in enumerate(self.riftstruct):
+ 				md = checkfield(md,"rifts.riftstruct[%d]['fill']" % i,'values',[WaterEnum(),AirEnum(),IceEnum(),MelangeEnum()])
+ 		else:
+-			if numpy.any(numpy.logical_not(isnans(self.riftstruct))):
++			if self.riftstruct and numpy.any(numpy.logical_not(isnans(self.riftstruct))):
+ 				md.checkmessage("riftstruct should be NaN since numrifts is 0!")
+ 
+ 		return md
+@@ -70,23 +70,21 @@
+ 			numrifts=len(self.riftstruct)
+ 
+ 		numpairs=0
+-		if numrifts:
+-			for rift in self.riftstruct:
+-				numpairs+=numpy.size(rift['penaltypairs'],axis=0)
++		for rift in self.riftstruct:
++			numpairs+=numpy.size(rift['penaltypairs'],axis=0)
+ 
+ 		# 2 for nodes + 2 for elements+ 2 for  normals + 1 for length + 1 for fill + 1 for friction + 1 for fraction + 1 for fractionincrement + 1 for state.
+ 		data=numpy.zeros((numpairs,12))
+-		if numrifts:
+-			count=0
+-			for rift in self.riftstruct:
+-				numpairsforthisrift=numpy.size(rift['penaltypairs'],0)
+-				data[count:count+numpairsforthisrift,0:7]=rift['penaltypairs']
+-				data[count:count+numpairsforthisrift,7]=rift['fill']
+-				data[count:count+numpairsforthisrift,8]=rift['friction']
+-				data[count:count+numpairsforthisrift,9]=rift['fraction']
+-				data[count:count+numpairsforthisrift,10]=rift['fractionincrement']
+-				data[count:count+numpairsforthisrift,11]=rift['state'].reshape(-1)
+-				count+=numpairsforthisrift
++		count=0
++		for rift in self.riftstruct:
++			numpairsforthisrift=numpy.size(rift['penaltypairs'],0)
++			data[count:count+numpairsforthisrift,0:7]=rift['penaltypairs']
++			data[count:count+numpairsforthisrift,7]=rift['fill']
++			data[count:count+numpairsforthisrift,8]=rift['friction']
++			data[count:count+numpairsforthisrift,9]=rift['fraction']
++			data[count:count+numpairsforthisrift,10]=rift['fractionincrement']
++			data[count:count+numpairsforthisrift,11]=rift['state'].reshape(-1)
++			count+=numpairsforthisrift
+ 
+ 		WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum(),'format','Integer')
+ 		WriteData(fid,'data',data,'enum',RiftsRiftstructEnum(),'format','DoubleMat','mattype',3)
+Index: ../trunk-jpl/src/m/classes/rifts.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/rifts.m	(revision 13715)
++++ ../trunk-jpl/src/m/classes/rifts.m	(revision 13716)
+@@ -42,7 +42,7 @@
+ 				end
+ 			else
+ 				if ~isnans(obj.riftstruct),
+-					md = checkmessage(md,['riftstruct shoud be NaN since numrifts is 0!']);
++					md = checkmessage(md,['riftstruct should be NaN since numrifts is 0!']);
+ 				end
+ 			end
+ 		end % }}}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13716-13717.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13716-13717.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13716-13717.diff	(revision 13980)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 13716)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 13717)
+@@ -76,11 +76,15 @@
+ 			if isa(md.materials,'materials'),
+ 				disp('Recovering old materials');
+ 				if numel(md.materials.rheology_Z)==1 & isnan(md.materials.rheology_Z),
+-					md.materials=matice(md.materials);
+-				else
++
+ 					md.materials=matdamageice(md.materials);
+ 				end
+ 			end
++			%2012 June 28th
++			if sum(sum(isnan(md.mesh.edges)))>0
++				disp('Update model edges from previous version');
++				md.mesh.edges(isnan(md.mesh.edges))=-1;
++			end
+ 
+ 		end% }}}
+ 	end
+@@ -920,7 +924,10 @@
+ 			if isfield(structmd,'y2d'), md.mesh.y2d=structmd.y2d; end
+ 			if isfield(structmd,'x2d'), md.mesh.x2d=structmd.x2d; end
+ 			if isfield(structmd,'elements'), md.mesh.elements=structmd.elements; end
+-			if isfield(structmd,'edges'), md.mesh.edges=structmd.edges; end
++			if isfield(structmd,'edges'), 
++				md.mesh.edges=structmd.edges; 
++				md.mesh.edges(isnan(md.mesh.edges))=-1;
++			end
+ 			if isfield(structmd,'y'), md.mesh.y=structmd.y; end
+ 			if isfield(structmd,'x'), md.mesh.x=structmd.x; end
+ 			if isfield(structmd,'z'), md.mesh.z=structmd.z; end
Index: /issm/oecreview/Archive/13393-13976/ISSM-13717-13718.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13717-13718.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13717-13718.diff	(revision 13980)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 13717)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 13718)
+@@ -76,9 +76,11 @@
+ 			if isa(md.materials,'materials'),
+ 				disp('Recovering old materials');
+ 				if numel(md.materials.rheology_Z)==1 & isnan(md.materials.rheology_Z),
+-
++					md.materials=matice(md.materials);
++				else
+ 					md.materials=matdamageice(md.materials);
+ 				end
++				md.materials=matdamageice(md.materials);
+ 			end
+ 			%2012 June 28th
+ 			if sum(sum(isnan(md.mesh.edges)))>0
Index: /issm/oecreview/Archive/13393-13976/ISSM-13718-13719.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13718-13719.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13718-13719.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 13718)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 13719)
+@@ -80,7 +80,6 @@
+ 				else
+ 					md.materials=matdamageice(md.materials);
+ 				end
+-				md.materials=matdamageice(md.materials);
+ 			end
+ 			%2012 June 28th
+ 			if sum(sum(isnan(md.mesh.edges)))>0
Index: /issm/oecreview/Archive/13393-13976/ISSM-13719-13720.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13719-13720.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13719-13720.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.py	(revision 13719)
++++ ../trunk-jpl/test/NightlyRun/runme.py	(revision 13720)
+@@ -261,5 +261,7 @@
+ 
+ 	md = runme(args.id, args.exclude, args.benchmark, args.procedure, args.output, args.rank, args.numprocs)
+ 
++	if strcmpi(args.output,'nightly'):
++		print "PYTHONEXITEDCORRECTLY"
++
+ 	exit(md)
+-
Index: /issm/oecreview/Archive/13393-13976/ISSM-13720-13721.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13720-13721.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13720-13721.diff	(revision 13980)
@@ -0,0 +1,443 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13720)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13721)
+@@ -227,6 +227,49 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION FemModel::SetCurrentConfiguration(int configuration_type,int analysis_type){{{*/
++void FemModel::SetCurrentConfiguration(int configuration_type,int analysis_type){
++
++	/*Use configuration_type to setup the analysis counter, the configurations of objects etc ... but use 
++	 * analysis_type to drive the element numerics. This allows for use of 1 configuration_type for several 
++	 * analyses. For example: do a SurfaceSlopeX, SurfaceSlopeY, BedSlopeX and BedSlopeY analysis using the 
++	 * Slope configuration.*/
++
++	int found=-1;
++	for(int i=0;i<nummodels;i++){
++		if (analysis_type_list[i]==configuration_type){
++			found=i;
++			break;
++		}
++	}
++	if(found!=-1) analysis_counter=found;
++	else _error_("Could not find alias for analysis_type " << EnumToStringx(configuration_type) << " in list of FemModel analyses");
++
++	/*Now, plug analysis_counter and analysis_type inside the parameters: */
++	this->parameters->SetParam(analysis_counter,AnalysisCounterEnum);
++	this->parameters->SetParam(analysis_type,AnalysisTypeEnum);
++	this->parameters->SetParam(configuration_type,ConfigurationTypeEnum);
++
++	/*configure elements, loads and nodes, for this new analysis: */
++	this->elements->SetCurrentConfiguration(elements,loads, nodes,vertices, materials,parameters);
++	this->nodes->SetCurrentConfiguration(elements,loads, nodes,vertices, materials,parameters);
++	this->loads->SetCurrentConfiguration(elements, loads, nodes,vertices, materials,parameters);
++
++	#ifdef _HAVE_PETSC_
++	/*take care of petsc options, that depend on this analysis type (present only after model processor)*/
++	if(this->parameters->Exist(PetscOptionsStringsEnum)){
++		PetscOptionsFromAnalysis(this->parameters,analysis_type);
++		if(VerboseSolver()) _pprintLine_("      petsc Options set for analysis type: " << EnumToStringx(analysis_type));
++	}
++	#endif
++
++}
++/*}}}*/
++/*FUNCTION FemModel::SetCurrentConfiguration(int configuration_type){{{*/
++void FemModel::SetCurrentConfiguration(int configuration_type){
++	this->SetCurrentConfiguration(configuration_type,configuration_type);
++}
++/*}}}*/
+ /*FUNCTION FemModel::Solve {{{*/
+ void FemModel::Solve(void){
+ 
+@@ -279,53 +322,8 @@
+ }
+ /*}}}*/
+ 
+-/*Numerics: */
+-/*FUNCTION FemModel::SetCurrentConfiguration(int configuration_type,int analysis_type){{{*/
+-void FemModel::SetCurrentConfiguration(int configuration_type,int analysis_type){
+-
+-	/*Use configuration_type to setup the analysis counter, the configurations of objects etc ... but use 
+-	 * analysis_type to drive the element numerics. This allows for use of 1 configuration_type for several 
+-	 * analyses. For example: do a SurfaceSlopeX, SurfaceSlopeY, BedSlopeX and BedSlopeY analysis using the 
+-	 * Slope configuration.*/
+-
+-	int found=-1;
+-	for(int i=0;i<nummodels;i++){
+-		if (analysis_type_list[i]==configuration_type){
+-			found=i;
+-			break;
+-		}
+-	}
+-	if(found!=-1) analysis_counter=found;
+-	else _error_("Could not find alias for analysis_type " << EnumToStringx(configuration_type) << " in list of FemModel analyses");
+-
+-	/*Now, plug analysis_counter and analysis_type inside the parameters: */
+-	this->parameters->SetParam(analysis_counter,AnalysisCounterEnum);
+-	this->parameters->SetParam(analysis_type,AnalysisTypeEnum);
+-	this->parameters->SetParam(configuration_type,ConfigurationTypeEnum);
+-
+-	/*configure elements, loads and nodes, for this new analysis: */
+-	this->elements->SetCurrentConfiguration(elements,loads, nodes,vertices, materials,parameters);
+-	this->nodes->SetCurrentConfiguration(elements,loads, nodes,vertices, materials,parameters);
+-	this->loads->SetCurrentConfiguration(elements, loads, nodes,vertices, materials,parameters);
+-
+-	#ifdef _HAVE_PETSC_
+-	/*take care of petsc options, that depend on this analysis type (present only after model processor)*/
+-	if(this->parameters->Exist(PetscOptionsStringsEnum)){
+-		PetscOptionsFromAnalysis(this->parameters,analysis_type);
+-		if(VerboseSolver()) _pprintLine_("      petsc Options set for analysis type: " << EnumToStringx(analysis_type));
+-	}
+-	#endif
+-
+-}
+-/*}}}*/
+-/*FUNCTION FemModel::SetCurrentConfiguration(int configuration_type){{{*/
+-void FemModel::SetCurrentConfiguration(int configuration_type){
+-	this->SetCurrentConfiguration(configuration_type,configuration_type);
+-}
+-/*}}}*/
+-
+ /*Modules:*/
+-int FemModel::UpdateVertexPositionsx(void){ /*{{{*/
++int  FemModel::UpdateVertexPositionsx(void){ /*{{{*/
+ 
+ 	int     i;
+ 	Vector<IssmDouble>*     vz        = NULL;
+@@ -379,38 +377,6 @@
+ 
+ }
+ /*}}}*/
+-void FemModel::TimeAdaptx(IssmDouble* pdt){/*{{{*/
+-
+-	int      i;
+-
+-	/*output: */
+-	IssmDouble   dt;
+-
+-	/*intermediary: */
+-	Element *element     = NULL;
+-	IssmDouble   min_dt      = 0;
+-	IssmDouble   node_min_dt = 0;
+-
+-	/*Go through elements, and figure out the minimum of the time steps for each element (using CFL criterion): */
+-	element=(Element*)elements->GetObjectByOffset(0); min_dt=element->TimeAdapt();
+-
+-	for (i=1;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
+-		dt=element->TimeAdapt();
+-		if(dt<min_dt)min_dt=dt;
+-	}
+-
+-	/*Figure out minimum across the cluster: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&min_dt,&node_min_dt,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_min_dt,1,MPI_DOUBLE,0,IssmComm::GetComm());
+-	min_dt=node_min_dt;
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pdt=min_dt;
+-}
+-/*}}}*/
+ void FemModel::Responsex(IssmDouble* responses,const char* response_descriptor,bool process_units,int weight_index){/*{{{*/
+ 
+ 
+@@ -439,7 +405,7 @@
+ 		case MinVzEnum:                  MinVzx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+ 		case MaxVzEnum:                  MaxVzx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+ 		case MaxAbsVzEnum:               MaxAbsVzx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MassFluxEnum:               MassFluxx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MassFluxEnum:               this->MassFluxx(          responses,process_units); break;
+ 		case SurfaceAbsVelMisfitEnum:    SurfaceAbsVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+ 		case SurfaceRelVelMisfitEnum:    SurfaceRelVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+ 		case SurfaceLogVelMisfitEnum:    SurfaceLogVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+@@ -542,6 +508,100 @@
+ 	}
+ }
+ /*}}}*/
++void FemModel::TimeAdaptx(IssmDouble* pdt){/*{{{*/
++
++	int      i;
++
++	/*output: */
++	IssmDouble   dt;
++
++	/*intermediary: */
++	Element *element     = NULL;
++	IssmDouble   min_dt      = 0;
++	IssmDouble   node_min_dt = 0;
++
++	/*Go through elements, and figure out the minimum of the time steps for each element (using CFL criterion): */
++	element=(Element*)elements->GetObjectByOffset(0); min_dt=element->TimeAdapt();
++
++	for (i=1;i<elements->Size();i++){
++		element=(Element*)elements->GetObjectByOffset(i);
++		dt=element->TimeAdapt();
++		if(dt<min_dt)min_dt=dt;
++	}
++
++	/*Figure out minimum across the cluster: */
++#ifdef _HAVE_MPI_
++	MPI_Reduce (&min_dt,&node_min_dt,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_min_dt,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	min_dt=node_min_dt;
++#endif
++
++	/*Assign output pointers:*/
++	*pdt=min_dt;
++}
++/*}}}*/
++#ifdef _HAVE_RESPONSES_
++void FemModel::MassFluxx(IssmDouble* pmass_flux,bool process_units){/*{{{*/
++
++	int          i,j;
++	Element     *element       = NULL;
++	int          element_id;
++	bool         ispresent     = false;
++	IssmDouble   mass_flux     = 0;
++	IssmDouble   all_mass_flux = 0;
++	int          counter;
++	IssmDouble **array         = NULL;
++	int          M;
++	int         *mdims_array   = NULL;
++	int         *ndims_array   = NULL;
++	IssmDouble  *segments      = NULL;
++	int          num_segments;
++
++	/*First, figure out which segment to compute our mass flux on. Start with retrieving qmu_mass_flux_segments: */
++	this->parameters->FindParam(&ispresent,MassFluxSegmentsPresentEnum);
++	if(!ispresent)_error_("no mass flux segments available!");
++	this->parameters->FindParam(&array,&M,&mdims_array,&ndims_array,MassFluxSegmentsEnum);
++
++	/*Retrieve index of segments being used for MassFlux computation: */
++	parameters->FindParam(&counter,IndexEnum);
++
++	/*retrieve segments from array: */
++	segments     = array[counter-1]; //matlab to "C" indexing
++	num_segments = mdims_array[counter-1];
++
++	/*Go through segments, and then elements, and figure out which elements belong to a segment. 
++	 * When we find one, use the element to compute the mass flux on the segment: */
++	for(i=0;i<num_segments;i++){
++		element_id=reCast<int,IssmDouble>(*(segments+5*i+4));
++		for(j=0;j<elements->Size();j++){
++			element=(Element*)this->elements->GetObjectByOffset(j);
++			if (element->Id()==element_id){
++				/*We found the element which owns this segment, use it to compute the mass flux: */
++				mass_flux+=element->MassFlux(segments+5*i+0,process_units);
++				break;
++			}
++		}
++	}
++
++#ifdef _HAVE_MPI_
++	MPI_Allreduce ( (void*)&mass_flux,(void*)&all_mass_flux,1,MPI_DOUBLE,MPI_SUM,IssmComm::GetComm());
++	mass_flux=all_mass_flux;
++#endif
++
++	/*Free ressources:*/
++	for(i=0;j<M;i++){
++		IssmDouble* matrix=array[j];
++		xDelete<IssmDouble>(matrix);
++	}
++	xDelete<int>(mdims_array);
++	xDelete<int>(ndims_array);
++	xDelete<IssmDouble*>(array);
++
++	/*Assign output pointers: */
++	*pmass_flux=mass_flux;
++
++}/*}}}*/
++#endif
+ #ifdef _HAVE_CONTROL_
+ void FemModel::ThicknessAbsGradientx( IssmDouble* pJ, bool process_units, int weight_index){/*{{{*/
+ 
+@@ -600,7 +660,6 @@
+ }
+ /*}}}*/
+ #endif
+-
+ #ifdef  _HAVE_DAKOTA_
+ void FemModel::DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){/*{{{*/
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13720)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13721)
+@@ -49,23 +49,23 @@
+ 		FemModel(int argc,char** argv,COMM comm_init);
+ 		FemModel(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
+ 		~FemModel();
+-		void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
+ 
+-		/*Methods: {{{*/
++		/*Methods:*/
+ 		void Echo();
++		void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
+ 		void Solve(void);
+ 		void OutputResults(void);
+ 		void SetStaticComm();
+-		/*}}}*/
+-		/*Fem: {{{*/
+-		void  SetCurrentConfiguration(int configuration_type);
+-		void  SetCurrentConfiguration(int configuration_type,int analysis_type);
+-		/*}}}*/
+-		/*Modules: {{{*/
+-		 #ifdef  _HAVE_DAKOTA_
++		void SetCurrentConfiguration(int configuration_type);
++		void SetCurrentConfiguration(int configuration_type,int analysis_type);
++
++		/*Modules*/ 
++		#ifdef _HAVE_RESPONSES_
++		void MassFluxx(IssmDouble* pmass_flux,bool process_units);
++		#endif
++		#ifdef  _HAVE_DAKOTA_
+ 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
+ 		#endif
+-
+ 		void RequestedOutputsx(int* requested_outputs, int numoutputs);
+ 		void RequestedDependentsx(void);
+ 		void Responsex(IssmDouble* presponse,int response_descriptor_enum,bool process_units,int weight_index);
+@@ -77,10 +77,6 @@
+ 		void TimeAdaptx(IssmDouble* pdt);
+ 		void UpdateConstraintsx(void);
+ 		int  UpdateVertexPositionsx(void);
+-
+-
+-		/*}}}*/
+-
+ };
+ 
+ #endif
+Index: ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.h	(revision 13720)
++++ ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.h	(revision 13721)
+@@ -1,14 +0,0 @@
+-/*!\file:  MassFluxx.h
+- * \brief header file for degree of freedoms distribution routines.
+- */ 
+-
+-#ifndef _MASSFLUXX_H
+-#define _MASSFLUXX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void MassFluxx(IssmDouble* pmass_flux, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif  /* _MASSFLUXX_H */
+Index: ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp	(revision 13720)
++++ ../trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp	(revision 13721)
+@@ -1,77 +0,0 @@
+-/*!\file MassFluxx
+- * \brief: compute mass flux along a profile.
+- */
+-
+-#include "./MassFluxx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void MassFluxx(IssmDouble* pmass_flux, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,bool process_units){
+-
+-	int      i,j;
+-	Element *element    = NULL;
+-	int      element_id;
+-	bool     ispresent=false;
+-
+-	/*output: */
+-	IssmDouble mass_flux=0;
+-	IssmDouble all_mass_flux=0;
+-	int  counter;
+-
+-	/*all segments: */
+-	IssmDouble **array       = NULL;
+-	int          M;
+-	int         *mdims_array = NULL;
+-	int         *ndims_array = NULL;
+-
+-	/*our segments of interest: */
+-	IssmDouble *segments     = NULL;
+-	int         num_segments;
+-
+-	/*First, figure out which segment to compute our mass flux on. Start with retrieving qmu_mass_flux_segments: */
+-	parameters->FindParam(&ispresent,MassFluxSegmentsPresentEnum);
+-	if(!ispresent)_error_("no mass flux segments available!");
+-
+-	parameters->FindParam(&array,&M,&mdims_array,&ndims_array,MassFluxSegmentsEnum);
+-
+-	/*Retrieve index of segments being used for MassFlux computation: */
+-	parameters->FindParam(&counter,IndexEnum);
+-
+-	/*retrieve segments from array: */
+-	segments=array[counter-1]; //matlab to "C" indexing
+-	num_segments=mdims_array[counter-1];
+-
+-	/*Go through segments, and then elements, and figure out which elements belong to a segment. 
+-	 * When we find one, use the element to compute the mass flux on the segment: */
+-	for(i=0;i<num_segments;i++){
+-		element_id=reCast<int,IssmDouble>(*(segments+5*i+4));
+-		for(j=0;j<elements->Size();j++){
+-			element=(Element*)elements->GetObjectByOffset(j);
+-			if (element->Id()==element_id){
+-				/*We found the element which owns this segment, use it to compute the mass flux: */
+-				mass_flux+=element->MassFlux(segments+5*i+0,process_units);
+-				break;
+-			}
+-		}
+-	}
+-
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)&mass_flux,(void*)&all_mass_flux,1,MPI_DOUBLE,MPI_SUM,IssmComm::GetComm());
+-	mass_flux=all_mass_flux;
+-	#endif
+-
+-	/*Free ressources:*/
+-	for(j=0;j<M;j++){
+-		IssmDouble* matrix=array[j];
+-		xDelete<IssmDouble>(matrix);
+-	}
+-	xDelete<int>(mdims_array);
+-	xDelete<int>(ndims_array);
+-	xDelete<IssmDouble*>(array);
+-
+-	/*Assign output pointers: */
+-	*pmass_flux=mass_flux;
+-}
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13720)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13721)
+@@ -62,7 +62,6 @@
+ #include "./Kml2Expx/Kml2Expx.h"
+ #include "./Krigingx/Krigingx.h"
+ #include "./Shp2Kmlx/Shp2Kmlx.h"
+-#include "./MassFluxx/MassFluxx.h"
+ #include "./MaxAbsVxx/MaxAbsVxx.h"
+ #include "./MaxAbsVyx/MaxAbsVyx.h"
+ #include "./MaxAbsVzx/MaxAbsVzx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13720)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13721)
+@@ -520,9 +520,7 @@
+ 					     ./modules/IceVolumex/IceVolumex.h\
+ 					     ./modules/IceVolumex/IceVolumex.cpp\
+ 					     ./modules/ElementResponsex/ElementResponsex.h\
+-					     ./modules/ElementResponsex/ElementResponsex.cpp\
+-					     ./modules/MassFluxx/MassFluxx.cpp\
+-					     ./modules/MassFluxx/MassFluxx.h
++					     ./modules/ElementResponsex/ElementResponsex.cpp
+ #}}}
+ #Slope sources  {{{
+ slope_sources =  ./modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13721-13722.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13721-13722.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13721-13722.diff	(revision 13980)
@@ -0,0 +1,779 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13721)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13722)
+@@ -379,10 +379,7 @@
+ /*}}}*/
+ void FemModel::Responsex(IssmDouble* responses,const char* response_descriptor,bool process_units,int weight_index){/*{{{*/
+ 
+-
+-	int response_descriptor_enum;
+-
+-	response_descriptor_enum=StringToEnumx(response_descriptor);
++	int response_descriptor_enum=StringToEnumx(response_descriptor);
+ 	this->Responsex(responses, response_descriptor_enum, process_units, weight_index);
+ 
+ }
+@@ -395,16 +392,16 @@
+ 		#ifdef _HAVE_RESPONSES_
+ 		case IceVolumeEnum:              IceVolumex(               responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+ 		case MinVelEnum:                 MinVelx(                  responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxVelEnum:                 MaxVelx(                  responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MaxVelEnum:                 this->MaxVelx(                  responses,process_units); break;
+ 		case MinVxEnum:                  MinVxx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxVxEnum:                  MaxVxx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxAbsVxEnum:               MaxAbsVxx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MaxVxEnum:                  this->MaxVxx(                   responses,process_units); break;
++		case MaxAbsVxEnum:               this->MaxAbsVxx(                responses,process_units); break;
+ 		case MinVyEnum:                  MinVyx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxVyEnum:                  MaxVyx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxAbsVyEnum:               MaxAbsVyx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MaxVyEnum:                  this->MaxVyx(                   responses,process_units); break;
++		case MaxAbsVyEnum:               this->MaxAbsVyx(                responses,process_units); break;
+ 		case MinVzEnum:                  MinVzx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxVzEnum:                  MaxVzx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MaxAbsVzEnum:               MaxAbsVzx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MaxVzEnum:                  this->MaxVzx(                   responses,process_units); break;
++		case MaxAbsVzEnum:               this->MaxAbsVzx(                responses,process_units); break;
+ 		case MassFluxEnum:               this->MassFluxx(          responses,process_units); break;
+ 		case SurfaceAbsVelMisfitEnum:    SurfaceAbsVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+ 		case SurfaceRelVelMisfitEnum:    SurfaceRelVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+@@ -413,8 +410,8 @@
+ 		case SurfaceAverageVelMisfitEnum:SurfaceAverageVelMisfitx( responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+ 		case ThicknessAbsMisfitEnum:     ThicknessAbsMisfitx(      responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+ 		case ThicknessAbsGradientEnum:   this->ThicknessAbsGradientx(    responses, process_units,weight_index); break;
+-		case ThicknessAlongGradientEnum:   ThicknessAlongGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case ThicknessAcrossGradientEnum:   ThicknessAcrossGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case ThicknessAlongGradientEnum: ThicknessAlongGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case ThicknessAcrossGradientEnum:ThicknessAcrossGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+ 		case TotalSmbEnum:					TotalSmbx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+ 		case RheologyBbarAbsGradientEnum:RheologyBbarAbsGradientx( responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+ 		case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+@@ -589,8 +586,8 @@
+ #endif
+ 
+ 	/*Free ressources:*/
+-	for(i=0;j<M;i++){
+-		IssmDouble* matrix=array[j];
++	for(i=0;i<M;i++){
++		IssmDouble* matrix=array[i];
+ 		xDelete<IssmDouble>(matrix);
+ 	}
+ 	xDelete<int>(mdims_array);
+@@ -601,7 +598,189 @@
+ 	*pmass_flux=mass_flux;
+ 
+ }/*}}}*/
++void FemModel::MaxAbsVxx(IssmDouble* pmaxabsvx,bool process_units){/*{{{*/
++
++	int i;
++	IssmDouble maxabsvx;
++	IssmDouble node_maxabsvx;
++	IssmDouble element_maxabsvx;
++
++	/*Go through elements, and request velocity: */
++	maxabsvx=-INFINITY;
++	for(i=0;i<this->elements->Size();i++){
++		Element* element=(Element*)this->elements->GetObjectByOffset(i);
++		element->MaxAbsVx(&element_maxabsvx,process_units);
++		if(element_maxabsvx>maxabsvx) maxabsvx=element_maxabsvx;
++	}
++
++	/*Figure out maximum across the cluster: */
++#ifdef _HAVE_MPI_
++	MPI_Reduce(&maxabsvx,&node_maxabsvx,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxabsvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	maxabsvx=node_maxabsvx;
+ #endif
++
++	/*Assign output pointers:*/
++	*pmaxabsvx=maxabsvx;
++
++}/*}}}*/
++void FemModel::MaxAbsVyx(IssmDouble* pmaxabsvy,bool process_units){/*{{{*/
++
++	int i;
++	IssmDouble maxabsvy;
++	IssmDouble node_maxabsvy;
++	IssmDouble element_maxabsvy;
++
++	/*Go through elements, and request velocity: */
++	maxabsvy=-INFINITY;
++	for(i=0;i<this->elements->Size();i++){
++		Element* element=(Element*)this->elements->GetObjectByOffset(i);
++		element->MaxAbsVy(&element_maxabsvy,process_units);
++		if(element_maxabsvy>maxabsvy) maxabsvy=element_maxabsvy;
++	}
++
++	/*Figure out maximum across the cluster: */
++#ifdef _HAVE_MPI_
++	MPI_Reduce(&maxabsvy,&node_maxabsvy,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxabsvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	maxabsvy=node_maxabsvy;
++#endif
++
++	/*Assign output pointers:*/
++	*pmaxabsvy=maxabsvy;
++
++}/*}}}*/
++void FemModel::MaxAbsVzx(IssmDouble* pmaxabsvz,bool process_units){/*{{{*/
++
++	int i;
++	IssmDouble maxabsvz;
++	IssmDouble node_maxabsvz;
++	IssmDouble element_maxabsvz;
++
++	/*Go through elements, and request velocity: */
++	maxabsvz=-INFINITY;
++	for(i=0;i<this->elements->Size();i++){
++		Element* element=(Element*)this->elements->GetObjectByOffset(i);
++		element->MaxAbsVz(&element_maxabsvz,process_units);
++		if(element_maxabsvz>maxabsvz) maxabsvz=element_maxabsvz;
++	}
++
++	/*Figure out maximum across the cluster: */
++#ifdef _HAVE_MPI_
++	MPI_Reduce(&maxabsvz,&node_maxabsvz,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxabsvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	maxabsvz=node_maxabsvz;
++#endif
++
++	/*Assign output pointers:*/
++	*pmaxabsvz=maxabsvz;
++
++}/*}}}*/
++void FemModel::MaxVelx(IssmDouble* pmaxvel,bool process_units){/*{{{*/
++
++	int i;
++	IssmDouble maxvel;
++	IssmDouble node_maxvel;
++	IssmDouble element_maxvel;
++
++	/*Go through elements, and request velocity: */
++	maxvel=-INFINITY;
++	for(i=0;i<this->elements->Size();i++){
++		Element* element=(Element*)this->elements->GetObjectByOffset(i);
++		element->MaxVel(&element_maxvel,process_units);
++		if(element_maxvel>maxvel) maxvel=element_maxvel;
++	}
++
++	/*Figure out maximum across the cluster: */
++#ifdef _HAVE_MPI_
++	MPI_Reduce(&maxvel,&node_maxvel,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxvel,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	maxvel=node_maxvel;
++#endif
++
++	/*Assign output pointers:*/
++	*pmaxvel=maxvel;
++
++}/*}}}*/
++void FemModel::MaxVxx(IssmDouble* pmaxvx,bool process_units){/*{{{*/
++
++	int i;
++	IssmDouble maxvx;
++	IssmDouble node_maxvx;
++	IssmDouble element_maxvx;
++
++	/*Go through elements, and request velocity: */
++	maxvx=-INFINITY;
++	for(i=0;i<this->elements->Size();i++){
++		Element* element=(Element*)this->elements->GetObjectByOffset(i);
++		element->MaxVx(&element_maxvx,process_units);
++		if(element_maxvx>maxvx) maxvx=element_maxvx;
++	}
++
++	/*Figure out maximum across the cluster: */
++#ifdef _HAVE_MPI_
++	MPI_Reduce(&maxvx,&node_maxvx,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	maxvx=node_maxvx;
++#endif
++
++	/*Assign output pointers:*/
++	*pmaxvx=maxvx;
++
++}/*}}}*/
++void FemModel::MaxVyx(IssmDouble* pmaxvy,bool process_units){/*{{{*/
++
++	int i;
++	IssmDouble maxvy;
++	IssmDouble node_maxvy;
++	IssmDouble element_maxvy;
++
++	/*Go through elements, and request velocity: */
++	maxvy=-INFINITY;
++	for(i=0;i<this->elements->Size();i++){
++		Element* element=(Element*)this->elements->GetObjectByOffset(i);
++		element->MaxVy(&element_maxvy,process_units);
++		if(element_maxvy>maxvy) maxvy=element_maxvy;
++	}
++
++	/*Figure out maximum across the cluster: */
++#ifdef _HAVE_MPI_
++	MPI_Reduce(&maxvy,&node_maxvy,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	maxvy=node_maxvy;
++#endif
++
++	/*Assign output pointers:*/
++	*pmaxvy=maxvy;
++
++}/*}}}*/
++void FemModel::MaxVzx(IssmDouble* pmaxvz,bool process_units){/*{{{*/
++
++	int i;
++	IssmDouble maxvz;
++	IssmDouble node_maxvz;
++	IssmDouble element_maxvz;
++
++	/*Go through elements, and request velocity: */
++	maxvz=-INFINITY;
++	for(i=0;i<this->elements->Size();i++){
++		Element* element=(Element*)this->elements->GetObjectByOffset(i);
++		element->MaxVz(&element_maxvz,process_units);
++		if(element_maxvz>maxvz) maxvz=element_maxvz;
++	}
++
++	/*Figure out maximum across the cluster: */
++#ifdef _HAVE_MPI_
++	MPI_Reduce(&maxvz,&node_maxvz,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_maxvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	maxvz=node_maxvz;
++#endif
++
++	/*Assign output pointers:*/
++	*pmaxvz=maxvz;
++
++}/*}}}*/
++#endif
+ #ifdef _HAVE_CONTROL_
+ void FemModel::ThicknessAbsGradientx( IssmDouble* pJ, bool process_units, int weight_index){/*{{{*/
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13721)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13722)
+@@ -61,7 +61,14 @@
+ 
+ 		/*Modules*/ 
+ 		#ifdef _HAVE_RESPONSES_
+-		void MassFluxx(IssmDouble* pmass_flux,bool process_units);
++		void MassFluxx(IssmDouble* presponse,bool process_units);
++		void MaxAbsVxx(IssmDouble* presponse,bool process_units);
++		void MaxAbsVyx(IssmDouble* presponse,bool process_units);
++		void MaxAbsVzx(IssmDouble* presponse,bool process_units);
++		void MaxVelx(IssmDouble* presponse,bool process_units);
++		void MaxVxx(IssmDouble* presponse,bool process_units);
++		void MaxVyx(IssmDouble* presponse,bool process_units);
++		void MaxVzx(IssmDouble* presponse,bool process_units);
+ 		#endif
+ 		#ifdef  _HAVE_DAKOTA_
+ 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
+Index: ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.h	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.h	(revision 13722)
+@@ -1,13 +0,0 @@
+-/*!\file:  MaxVxx.h
+- */ 
+-
+-#ifndef _MAXVXX_H
+-#define _MAXVXX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void MaxVxx( IssmDouble* pmaxvx, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif  /* _MAXVXX_H */
+Index: ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.cpp	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxVxx/MaxVxx.cpp	(revision 13722)
+@@ -1,42 +0,0 @@
+-/*!\file MaxVxx
+- */
+-
+-#include "./MaxVxx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void MaxVxx( IssmDouble* pmaxvx, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-
+-	int i;
+-	IssmDouble maxvx;
+-	IssmDouble node_maxvx;
+-	IssmDouble element_maxvx;
+-
+-	/*Go through elements, and request velocity: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
+-		element->MaxVx(&element_maxvx,process_units); //go pick up the minimum velocity in the inputs
+-
+-		if(i==0)maxvx=element_maxvx; //initialize maxvx
+-		else{
+-			if(element_maxvx>maxvx)maxvx=element_maxvx;
+-		}
+-	}
+-	/*A safeguard in case: */
+-	if(elements->Size()==0){
+-		maxvx=-INFINITY;
+-	}
+-
+-	/*Figure out minimum across the cluster: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxvx,&node_maxvx,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+-	maxvx=node_maxvx;
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pmaxvx=maxvx;
+-}
+Index: ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.cpp	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.cpp	(revision 13722)
+@@ -1,42 +0,0 @@
+-/*!\file MaxAbsVxx
+- */
+-
+-#include "./MaxAbsVxx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void MaxAbsVxx( IssmDouble* pmaxabsvx, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-
+-	int i;
+-	IssmDouble maxabsvx;
+-	IssmDouble node_maxabsvx;
+-	IssmDouble element_maxabsvx;
+-
+-	/*Go through elements, and request velocity: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
+-		element->MaxAbsVx(&element_maxabsvx,process_units); //go pick up the maximum velocity in the inputs
+-
+-		if(i==0)maxabsvx=element_maxabsvx; //initialize maxabsvx
+-		else{
+-			if(element_maxabsvx>maxabsvx)maxabsvx=element_maxabsvx;
+-		}
+-	}
+-	/*A safeguard in case: */
+-	if(elements->Size()==0){
+-		maxabsvx=-INFINITY;
+-	}
+-
+-	/*Figure out maximum across the cluster: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxabsvx,&node_maxabsvx,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxabsvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+-	maxabsvx=node_maxabsvx;
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pmaxabsvx=maxabsvx;
+-}
+Index: ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.h	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.h	(revision 13722)
+@@ -1,14 +0,0 @@
+-/*!\file:  MaxAbsVxx.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _MAXABSVXX_H
+-#define _MAXABSVXX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void MaxAbsVxx( IssmDouble* pmaxabsvx, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif  /* _MAXABSVXX_H */
+Index: ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.cpp	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.cpp	(revision 13722)
+@@ -1,43 +0,0 @@
+-/*!\file MaxVelx
+- * \brief: compute misfit between observations and model
+- */
+-
+-#include "./MaxVelx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void MaxVelx( IssmDouble* pmaxvel, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-
+-	int i;
+-	IssmDouble maxvel;
+-	IssmDouble node_maxvel;
+-	IssmDouble element_maxvel;
+-
+-	/*Go through elements, and request velocity: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
+-		element->MaxVel(&element_maxvel,process_units); //go pick up the maximum velocity in the inputs
+-
+-		if(i==0)maxvel=element_maxvel; //initialize maxvel
+-		else{
+-			if(element_maxvel>maxvel)maxvel=element_maxvel;
+-		}
+-	}
+-	/*A safeguard in case: */
+-	if(elements->Size()==0){
+-		maxvel=-INFINITY;
+-	}
+-
+-	/*Figure out maximum across the cluster: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxvel,&node_maxvel,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxvel,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+-	maxvel=node_maxvel;
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pmaxvel=maxvel;
+-}
+Index: ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.h	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxVelx/MaxVelx.h	(revision 13722)
+@@ -1,14 +0,0 @@
+-/*!\file:  MaxVelx.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _MAXVELX_H
+-#define _MAXVELX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void MaxVelx( IssmDouble* pmaxvel, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif  /* _MAXVELX_H */
+Index: ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.h	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.h	(revision 13722)
+@@ -1,14 +0,0 @@
+-/*!\file:  MaxVyx.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _MAXVYX_H
+-#define _MAXVYX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void MaxVyx( IssmDouble* pmaxvy, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif  /* _MAXVYX_H */
+Index: ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.cpp	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxVyx/MaxVyx.cpp	(revision 13722)
+@@ -1,42 +0,0 @@
+-/*!\file MaxVyx
+-*/
+-
+-#include "./MaxVyx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void MaxVyx( IssmDouble* pmaxvy, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-
+-	int i;
+-	IssmDouble maxvy;
+-	IssmDouble node_maxvy;
+-	IssmDouble element_maxvy;
+-
+-	/*Go through elements, and request velocity: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
+-		element->MaxVy(&element_maxvy,process_units); //go pick up the minimum velocity in the inputs
+-
+-		if(i==0)maxvy=element_maxvy; //initialize maxvy
+-		else{
+-			if(element_maxvy>maxvy)maxvy=element_maxvy;
+-		}
+-	}
+-	/*A safeguard in case: */
+-	if(elements->Size()==0){
+-		maxvy=-INFINITY;
+-	}
+-
+-	/*Figure out minimum across the cluster: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxvy,&node_maxvy,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+-	maxvy=node_maxvy;
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pmaxvy=maxvy;
+-}
+Index: ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.cpp	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.cpp	(revision 13722)
+@@ -1,42 +0,0 @@
+-/*!\file MaxAbsVyx
+- */
+-
+-#include "./MaxAbsVyx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void MaxAbsVyx( IssmDouble* pmaxabsvy, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-
+-	int i;
+-	IssmDouble maxabsvy;
+-	IssmDouble node_maxabsvy;
+-	IssmDouble element_maxabsvy;
+-
+-	/*Go through elements, and request velocity: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
+-		element->MaxAbsVy(&element_maxabsvy,process_units); //go pick up the maximum velocity in the inputs
+-
+-		if(i==0)maxabsvy=element_maxabsvy; //initialize maxabsvy
+-		else{
+-			if(element_maxabsvy>maxabsvy)maxabsvy=element_maxabsvy;
+-		}
+-	}
+-	/*A safeguard in case: */
+-	if(elements->Size()==0){
+-		maxabsvy=-INFINITY;
+-	}
+-
+-	/*Figure out maximum across the cluster: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxabsvy,&node_maxabsvy,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxabsvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+-	maxabsvy=node_maxabsvy;
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pmaxabsvy=maxabsvy;
+-}
+Index: ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.h	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.h	(revision 13722)
+@@ -1,14 +0,0 @@
+-/*!\file:  MaxAbsVyx.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _MAXABSVYX_H
+-#define _MAXABSVYX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void MaxAbsVyx( IssmDouble* pmaxabsvy, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif  /* _MAXABSVYX_H */
+Index: ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.h	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.h	(revision 13722)
+@@ -1,14 +0,0 @@
+-/*!\file:  MaxVzx.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _MAXVZX_H
+-#define _MAXVZX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void MaxVzx( IssmDouble* pmaxvz, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif  /* _MAXVZX_H */
+Index: ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.cpp	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxVzx/MaxVzx.cpp	(revision 13722)
+@@ -1,43 +0,0 @@
+-/*!\file MaxVzx
+- * \brief: compute misfit between observations and model
+- */
+-
+-#include "./MaxVzx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void MaxVzx( IssmDouble* pmaxvz, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-
+-	int i;
+-	IssmDouble maxvz;
+-	IssmDouble node_maxvz;
+-	IssmDouble element_maxvz;
+-
+-	/*Go through elements, and request velocity: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
+-		element->MaxVz(&element_maxvz,process_units); //go pick up the minimum velocity in the inputs
+-
+-		if(i==0)maxvz=element_maxvz; //initialize maxvz
+-		else{
+-			if(element_maxvz>maxvz)maxvz=element_maxvz;
+-		}
+-	}
+-	/*A safeguard in case: */
+-	if(elements->Size()==0){
+-		maxvz=-INFINITY;
+-	}
+-
+-	/*Figure out minimum across the cluster: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxvz,&node_maxvz,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+-	maxvz=node_maxvz;
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pmaxvz=maxvz;
+-}
+Index: ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.cpp	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.cpp	(revision 13722)
+@@ -1,42 +0,0 @@
+-/*!\file MaxAbsVzx
+- */
+-
+-#include "./MaxAbsVzx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void MaxAbsVzx( IssmDouble* pmaxabsvz, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-
+-	int i;
+-	IssmDouble maxabsvz;
+-	IssmDouble node_maxabsvz;
+-	IssmDouble element_maxabsvz;
+-
+-	/*Go through elements, and request velocity: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
+-		element->MaxAbsVz(&element_maxabsvz,process_units); //go pick up the minimum velocity in the inputs
+-
+-		if(i==0)maxabsvz=element_maxabsvz; //initialize maxabsvz
+-		else{
+-			if(element_maxabsvz>maxabsvz)maxabsvz=element_maxabsvz;
+-		}
+-	}
+-	/*A safeguard in case: */
+-	if(elements->Size()==0){
+-		maxabsvz=-INFINITY;
+-	}
+-
+-	/*Figure out minimum across the cluster: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&maxabsvz,&node_maxabsvz,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_maxabsvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+-	maxabsvz=node_maxabsvz;
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pmaxabsvz=maxabsvz;
+-}
+Index: ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.h	(revision 13721)
++++ ../trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.h	(revision 13722)
+@@ -1,14 +0,0 @@
+-/*!\file:  MaxAbsVzx.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _MAXABSVZX_H
+-#define _MAXABSVZX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void MaxAbsVzx( IssmDouble* pmaxabsvz, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif  /* _MAXABSVZX_H */
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13721)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13722)
+@@ -62,14 +62,7 @@
+ #include "./Kml2Expx/Kml2Expx.h"
+ #include "./Krigingx/Krigingx.h"
+ #include "./Shp2Kmlx/Shp2Kmlx.h"
+-#include "./MaxAbsVxx/MaxAbsVxx.h"
+-#include "./MaxAbsVyx/MaxAbsVyx.h"
+-#include "./MaxAbsVzx/MaxAbsVzx.h"
+-#include "./MaxVelx/MaxVelx.h"
+ #include "./ElementResponsex/ElementResponsex.h"
+-#include "./MaxVxx/MaxVxx.h"
+-#include "./MaxVyx/MaxVyx.h"
+-#include "./MaxVzx/MaxVzx.h"
+ #include "./Mergesolutionfromftogx/Mergesolutionfromftogx.h"
+ #include "./MeshPartitionx/MeshPartitionx.h"
+ #include "./MeshProfileIntersectionx/MeshProfileIntersectionx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13721)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13722)
+@@ -495,20 +495,6 @@
+ #Responses sources  {{{
+ responses_sources = ./modules/MinVelx/MinVelx.h\
+ 					     ./modules/MinVelx/MinVelx.cpp\
+-					     ./modules/MaxVelx/MaxVelx.h\
+-					     ./modules/MaxVelx/MaxVelx.cpp\
+-					     ./modules/MaxAbsVxx/MaxAbsVxx.h\
+-					     ./modules/MaxAbsVxx/MaxAbsVxx.cpp\
+-					     ./modules/MaxAbsVyx/MaxAbsVyx.h\
+-					     ./modules/MaxAbsVyx/MaxAbsVyx.cpp\
+-					     ./modules/MaxAbsVzx/MaxAbsVzx.h\
+-					     ./modules/MaxAbsVzx/MaxAbsVzx.cpp\
+-					     ./modules/MaxVxx/MaxVxx.h\
+-					     ./modules/MaxVxx/MaxVxx.cpp\
+-					     ./modules/MaxVyx/MaxVyx.h\
+-					     ./modules/MaxVyx/MaxVyx.cpp\
+-					     ./modules/MaxVzx/MaxVzx.h\
+-					     ./modules/MaxVzx/MaxVzx.cpp\
+ 					     ./modules/MinVxx/MinVxx.h\
+ 					     ./modules/MinVxx/MinVxx.cpp\
+ 					     ./modules/MinVyx/MinVyx.h\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13722-13723.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13722-13723.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13722-13723.diff	(revision 13980)
@@ -0,0 +1,192 @@
+Index: ../trunk-jpl/externalpackages/mpich2/install-1.3.1-linux64-berg.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich2/install-1.3.1-linux64-berg.sh	(revision 13722)
++++ ../trunk-jpl/externalpackages/mpich2/install-1.3.1-linux64-berg.sh	(revision 13723)
+@@ -35,14 +35,6 @@
+ 	patch -R ./src/include/mpicxx.h ../mpicxx.h.patch
+ fi
+ 
+-#Compile mpich2
+-if [ $# -eq 0 ];
+-then
+-	make
+-else
+-	make -j $1
+-fi
++#Compile mpich2 (parallel make not supported)
++make
+ make install 
+-
+-cd ../install/lib
+-rm -rf *.so
+Index: ../trunk-jpl/externalpackages/mpich2/install-1.4-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich2/install-1.4-macosx64.sh	(revision 13722)
++++ ../trunk-jpl/externalpackages/mpich2/install-1.4-macosx64.sh	(revision 13723)
+@@ -27,10 +27,6 @@
+ 	--enable-shared \
+ 	--enable-fc
+ 
+-#Compile mpich2
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
++#Compile mpich2 (parallel make not supported)
++make
+ make install 
+Index: ../trunk-jpl/externalpackages/mpich2/install-1.0.2-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich2/install-1.0.2-linux64.sh	(revision 13722)
++++ ../trunk-jpl/externalpackages/mpich2/install-1.0.2-linux64.sh	(revision 13723)
+@@ -29,10 +29,6 @@
+ patch -R ./src/binding/cxx/mpicxx.h ../configs/1.0.2/linux64/mpicxx.h.patch
+ patch -R ./src/include/mpicxx.h ../configs/1.0.2/linux64/mpicxx.h.patch
+ 
+-#Compile mpich2
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
++#Compile mpich2 (parallel make not supported)
++make
+ make install 
+Index: ../trunk-jpl/externalpackages/mpich2/install-1.0.2-altix64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich2/install-1.0.2-altix64.sh	(revision 13722)
++++ ../trunk-jpl/externalpackages/mpich2/install-1.0.2-altix64.sh	(revision 13723)
+@@ -29,12 +29,8 @@
+ patch -R ./src/binding/cxx/mpicxx.h ../configs/1.0.2/altix64/mpicxx.h.patch
+ patch -R ./src/include/mpicxx.h ../configs/1.0.2/altix64/mpicxx.h.patch
+ 
+-#Compile mpich2
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
++#Compile mpich2 (parallel make not supported)
++make
+ make install 
+ 
+ #remove so files
+Index: ../trunk-jpl/externalpackages/mpich2/install-1.4-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich2/install-1.4-linux64.sh	(revision 13722)
++++ ../trunk-jpl/externalpackages/mpich2/install-1.4-linux64.sh	(revision 13723)
+@@ -25,10 +25,6 @@
+ 	--enable-sharedlibs=gcc \
+ 	--enable-f91=gfortran 
+ 
+-#Compile mpich2
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
++#Compile mpich2 (parallel make not supported)
++make
+ make install 
+Index: ../trunk-jpl/externalpackages/mpich2/install-1.5-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich2/install-1.5-linux64.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/mpich2/install-1.5-linux64.sh	(revision 13723)
+@@ -0,0 +1,35 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf src install mpich2-1.5
++mkdir src install
++
++#Download from ISSM server
++#$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/mpich2-1.5.tar.gz' 'mpich2-1.5.tar.gz'
++
++#Untar 
++tar -zxvf  mpich2-1.5.tar.gz
++
++#Move mpich2 into src directory
++mv mpich2-1.5/* src
++rm -rf mpich2-1.5
++
++#Configure mpich2
++cd src
++#export -n F90 
++#export CFLAGS="$CFLAGS -fPIC"
++#export FFLAGS="$FFLAGS -fPIC"
++./configure \
++	--prefix="$ISSM_DIR/externalpackages/mpich2/install" \
++	--enable-shared \
++	--enable-sharedlibs=gcc \
++	--enable-f91=gfortran 
++
++#Compile mpich2 (this new version supports parallel make)
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install 
+
+Property changes on: ../trunk-jpl/externalpackages/mpich2/install-1.5-linux64.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/externalpackages/mpich2/install-1.0.2-macosx32.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich2/install-1.0.2-macosx32.sh	(revision 13722)
++++ ../trunk-jpl/externalpackages/mpich2/install-1.0.2-macosx32.sh	(revision 13723)
+@@ -28,12 +28,8 @@
+ patch -R ./src/binding/cxx/mpicxx.h ../configs/1.0.2/macosx32/mpicxx.h.patch
+ patch -R ./src/include/mpicxx.h ../configs/1.0.2/macosx32/mpicxx.h.patch
+ 
+-#Compile mpich2
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
++#Compile mpich2 (parallel make not supported)
++make
+ make install 
+ 
+ #remove so files
+Index: ../trunk-jpl/externalpackages/mpich2/install-1.0.2-win32.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich2/install-1.0.2-win32.sh	(revision 13722)
++++ ../trunk-jpl/externalpackages/mpich2/install-1.0.2-win32.sh	(revision 13723)
+@@ -26,12 +26,8 @@
+ patch -R ./src/binding/cxx/mpicxx.h ../configs/1.0.2/win32/mpicxx.h.patch
+ patch -R ./src/include/mpicxx.h ../configs/1.0.2/win32/mpicxx.h.patch
+ 
+-#Compile mpich2
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
++#Compile mpich2 (parallel make not supported)
++make
+ make install 
+ 
+ #remove so files
+Index: ../trunk-jpl/externalpackages/mpich2/install-1.4-macosx32.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich2/install-1.4-macosx32.sh	(revision 13722)
++++ ../trunk-jpl/externalpackages/mpich2/install-1.4-macosx32.sh	(revision 13723)
+@@ -27,10 +27,6 @@
+ 	--enable-shared \
+ 	--enable-fc
+ 
+-#Compile mpich2
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
++#Compile mpich2 (parallel make not supported)
++make
+ make install 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13723-13724.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13723-13724.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13723-13724.diff	(revision 13980)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/externalpackages/mpich2/install-1.5-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich2/install-1.5-linux64.sh	(revision 13723)
++++ ../trunk-jpl/externalpackages/mpich2/install-1.5-linux64.sh	(revision 13724)
+@@ -6,7 +6,7 @@
+ mkdir src install
+ 
+ #Download from ISSM server
+-#$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/mpich2-1.5.tar.gz' 'mpich2-1.5.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/mpich2-1.5.tar.gz' 'mpich2-1.5.tar.gz'
+ 
+ #Untar 
+ tar -zxvf  mpich2-1.5.tar.gz
+@@ -16,10 +16,6 @@
+ rm -rf mpich2-1.5
+ 
+ #Configure mpich2
+-cd src
+-#export -n F90 
+-#export CFLAGS="$CFLAGS -fPIC"
+-#export FFLAGS="$FFLAGS -fPIC"
+ ./configure \
+ 	--prefix="$ISSM_DIR/externalpackages/mpich2/install" \
+ 	--enable-shared \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13724-13725.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13724-13725.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13724-13725.diff	(revision 13980)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/solve/WriteData.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/WriteData.m	(revision 13724)
++++ ../trunk-jpl/src/m/solve/WriteData.m	(revision 13725)
+@@ -230,7 +230,7 @@
+ 	string(1)=upper(string(1));
+ 
+ 	%Get Enum
+-	enum=eval([string 'Enum();']); 
++	enum=StringToEnum(string); 
+ end % }}}
+ function code=FormatToCode(format) % {{{
+ %This routine takes the format string, and hardcodes it into an integer, which 
+Index: ../trunk-jpl/src/m/solve/WriteData.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/WriteData.py	(revision 13724)
++++ ../trunk-jpl/src/m/solve/WriteData.py	(revision 13725)
+@@ -275,7 +275,7 @@
+ 		string=string[0].upper()+string[1:]
+ 
+ 	#Get Enum
+-	exec('enum='+string+'Enum()',globals())
++	enum=StringToEnum(string)[0]
+ 
+ 	return enum
+ # }}}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13725-13726.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13725-13726.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13725-13726.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/externalpackages/mpich2/install-1.5-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich2/install-1.5-linux64.sh	(revision 13725)
++++ ../trunk-jpl/externalpackages/mpich2/install-1.5-linux64.sh	(revision 13726)
+@@ -16,6 +16,7 @@
+ rm -rf mpich2-1.5
+ 
+ #Configure mpich2
++cd src
+ ./configure \
+ 	--prefix="$ISSM_DIR/externalpackages/mpich2/install" \
+ 	--enable-shared \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13726-13727.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13726-13727.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13726-13727.diff	(revision 13980)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/solve/marshall.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/marshall.m	(revision 13726)
++++ ../trunk-jpl/src/m/solve/marshall.m	(revision 13727)
+@@ -35,11 +35,7 @@
+ 
+ 	%Marshall current object
+ 	%disp(['marshalling ' field '...']);
+-	if verLessThan('matlab', '7.6')
+-		marshall(md.(field),fid);
+-	else
+-		md.(field).marshall(fid);
+-	end
++	marshall(md.(field),fid);
+ end
+ 
+ %close file
Index: /issm/oecreview/Archive/13393-13976/ISSM-13727-13728.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13727-13728.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13727-13728.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/solve/waitonlock.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/waitonlock.m	(revision 13727)
++++ ../trunk-jpl/src/m/solve/waitonlock.m	(revision 13728)
+@@ -11,7 +11,7 @@
+ executionpath=md.cluster.executionpath;
+ cluster=md.cluster.name;
+ login=md.cluster.login;
+-if any(strcmp(properties(md.cluster), 'port')) 
++if isprop(md.cluster,'port') 
+ 	port=md.cluster.port;
+ end
+ timelimit=md.settings.waitonlock;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13728-13729.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13728-13729.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13728-13729.diff	(revision 13980)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m
+===================================================================
+--- ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 13728)
++++ ../trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 13729)
+@@ -27,11 +27,7 @@
+ 	end
+ 
+ 	%Check consistency of the object
+-	if verLessThan('matlab', '7.6')
+-		md=checkconsistency(md.(field),md,solution,analyses);
+-	else
+-		md=md.(field).checkconsistency(md,solution,analyses);
+-	end
++	md=checkconsistency(md.(field),md,solution,analyses);
+ end
+ 
+ %error message if mode is not consistent
Index: /issm/oecreview/Archive/13393-13976/ISSM-13729-13730.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13729-13730.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13729-13730.diff	(revision 13980)
@@ -0,0 +1,914 @@
+Index: ../trunk-jpl/src/m/solve/MatlabProcessPatch.m
+===================================================================
+--- ../trunk-jpl/src/m/solve/MatlabProcessPatch.m	(revision 13729)
++++ ../trunk-jpl/src/m/solve/MatlabProcessPatch.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function structure=MatlabProcessPatch(structure);
++function structure=MatlabProcessPatch(structure)
+ %PROCESSPATCH - create a structure from a patch
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/mesh/NodeInElement.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/NodeInElement.m	(revision 13729)
++++ ../trunk-jpl/src/m/mesh/NodeInElement.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function node_in_element=NodeInElement(newx,newy,elements,x,y,nodeconnectivity);
++function node_in_element=NodeInElement(newx,newy,elements,x,y,nodeconnectivity)
+ % NODEINELEMENT - find for a list of nodes (in newx,newy), which elements in the mesh (elements,x,y) they belong to.
+ %
+ %    Usage:
+Index: ../trunk-jpl/src/m/mesh/rifts/meshplug.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/meshplug.m	(revision 13729)
++++ ../trunk-jpl/src/m/mesh/rifts/meshplug.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [elements,x,y,z,numberofelements,numberofnodes,elconv,nodeconv,elconv2,nodeconv2]=meshplug(elements,x,y,z,elements2,x2,y2,z2,extractednodes,extractedelements,domain);
++function [elements,x,y,z,numberofelements,numberofnodes,elconv,nodeconv,elconv2,nodeconv2]=meshplug(elements,x,y,z,elements2,x2,y2,z2,extractednodes,extractedelements,domain)
+ %MESHPLUG - embed mesh into another one
+ %     See also meshaddrifts
+ 
+Index: ../trunk-jpl/src/m/mesh/rifts/meshaddrifts.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/meshaddrifts.m	(revision 13729)
++++ ../trunk-jpl/src/m/mesh/rifts/meshaddrifts.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function md=meshaddrifts(md,riftname);
++function md=meshaddrifts(md,riftname)
+ %MESHADDRIFTS - add rifts to a preloaded mesh (typically, an argus mesh)
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/mesh/rifts/rifttipsrefine.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/rifttipsrefine.m	(revision 13729)
++++ ../trunk-jpl/src/m/mesh/rifts/rifttipsrefine.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function md=rifttipsrefine(md,filename,resolution,circleradius);
++function md=rifttipsrefine(md,filename,resolution,circleradius)
+ %RIFTTIPSREFINE - refine mesh near rift tips
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/mesh/MeshQuality.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/MeshQuality.m	(revision 13729)
++++ ../trunk-jpl/src/m/mesh/MeshQuality.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function quality=MeshQuality(md,epsilon,hmin,hmax);
++function quality=MeshQuality(md,epsilon,hmin,hmax)
+ %MESHQUALITY - compute mesh quality
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/mesh/bamg.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.m	(revision 13729)
++++ ../trunk-jpl/src/m/mesh/bamg.m	(revision 13730)
+@@ -338,7 +338,7 @@
+ end
+ end 
+ 
+-function geom=processgeometry(geom,tol,outline); % {{{
++function geom=processgeometry(geom,tol,outline) % {{{
+ 
+ %Deal with edges
+ disp('Checking Edge crossing...');
+Index: ../trunk-jpl/src/m/exp/expread.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expread.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/expread.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function Struct=expread(filename);
++function Struct=expread(filename)
+ %EXPREAD - read a file exp and build a Structure
+ %
+ %   This routine reads a file .exp and build a Structure containing the 
+Index: ../trunk-jpl/src/m/exp/expcreatecontour.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expcreatecontour.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/expcreatecontour.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function expcreatecontour(filename);
++function expcreatecontour(filename)
+ %EXPCREATECONTOUR - create a contour from a list of points
+ %
+ %   expcreatecontour: from a list of (x,y) points (retrieve using ginput on an undetermined
+Index: ../trunk-jpl/src/m/exp/expcreateprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expcreateprofile.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/expcreateprofile.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function expcreateprofile(filename);
++function expcreateprofile(filename)
+ %EXPCREATEPROFILE - create an Argus file from a list of points
+ %
+ %   expcreateprofile: from a list of (x,y) points (retrieve using ginput on an undetermined
+Index: ../trunk-jpl/src/m/exp/manipulation/cutarea.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/cutarea.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/manipulation/cutarea.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [A,numprofiles,numpoints,closed]=cutarea(A,numprofiles,numpoints,closed,prevplot,root,options);
++function [A,numprofiles,numpoints,closed]=cutarea(A,numprofiles,numpoints,closed,prevplot,root,options)
+ %CUTAREA - cut several point of a profile
+ %
+ %
+Index: ../trunk-jpl/src/m/exp/manipulation/closeprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/closeprofile.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/manipulation/closeprofile.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [A,numprofiles,numpoints,closed]=closeprofile(A,numprofiles,numpoints,closed,prevplot,root,options);
++function [A,numprofiles,numpoints,closed]=closeprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+ %CLOSEPROFILE - close one or several profile
+ %
+ %   this script is used by exptool as an elementary operation
+Index: ../trunk-jpl/src/m/exp/manipulation/removepoints.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/removepoints.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/manipulation/removepoints.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [A,numprofiles,numpoints,closed]=removepoints(A,numprofiles,numpoints,closed,prevplot,root,options);
++function [A,numprofiles,numpoints,closed]=removepoints(A,numprofiles,numpoints,closed,prevplot,root,options)
+ %REMOVEPOINTS - remove a point from a profile
+ %
+ %   this script is used by exptool as an elementary operation
+Index: ../trunk-jpl/src/m/exp/manipulation/addendprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/addendprofile.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/manipulation/addendprofile.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [A,numprofiles,numpoints,closed]=addendprofile(A,numprofiles,numpoints,closed,prevplot,root,options);
++function [A,numprofiles,numpoints,closed]=addendprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+ %ADDENDPROFILE - add point at the end of a n existing profile
+ %
+ %   this script is used by exptool as an elementary operation
+Index: ../trunk-jpl/src/m/exp/manipulation/addcontour.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/addcontour.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/manipulation/addcontour.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [A,numprofiles,numpoints,closed]=addcontour(A,numprofiles,numpoints,closed,prevplot,root,options);
++function [A,numprofiles,numpoints,closed]=addcontour(A,numprofiles,numpoints,closed,prevplot,root,options)
+ %ADDCONTOUR - add a closed contour
+ %
+ %   this script is used by exptool as an elementary operation
+Index: ../trunk-jpl/src/m/exp/manipulation/mergeprofiles.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/mergeprofiles.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/manipulation/mergeprofiles.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [A,numprofiles,numpoints,closed]=mergeprofiles(A,numprofiles,numpoints,closed,prevplot,root,options);
++function [A,numprofiles,numpoints,closed]=mergeprofiles(A,numprofiles,numpoints,closed,prevplot,root,options)
+ %MERGEPROFILES - merge profiles
+ %
+ %   this script is used by exptool as an elementary operation
+Index: ../trunk-jpl/src/m/exp/manipulation/addinsideprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/addinsideprofile.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/manipulation/addinsideprofile.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [A,numprofiles,numpoints,closed]=addinsideprofile(A,numprofiles,numpoints,closed,prevplot,root,options);
++function [A,numprofiles,numpoints,closed]=addinsideprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+ %ADDINSIDEPROFILE - add apoint inside a profile
+ %
+ %   this script is used by exptool as an elementary operation
+Index: ../trunk-jpl/src/m/exp/manipulation/addprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/addprofile.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/manipulation/addprofile.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [A,numprofiles,numpoints,closed]=addprofile(A,numprofiles,numpoints,closed,prevplot,root,options);
++function [A,numprofiles,numpoints,closed]=addprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+ %ADDPROFILE - add a profile
+ %
+ %   this script is used by exptool as an elementary operation
+Index: ../trunk-jpl/src/m/exp/manipulation/cutprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/cutprofile.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/manipulation/cutprofile.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [A,numprofiles,numpoints,closed]=cutprofile(A,numprofiles,numpoints,closed,prevplot,root,options);
++function [A,numprofiles,numpoints,closed]=cutprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+ %CUTPROFILE - cut a profile
+ %
+ %   this script is used by exptool as an elementary operation
+Index: ../trunk-jpl/src/m/exp/manipulation/modifyposition.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/modifyposition.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/manipulation/modifyposition.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [A,numprofiles,numpoints,closed]=modifyposition(A,numprofiles,numpoints,closed,prevplot,root,options);
++function [A,numprofiles,numpoints,closed]=modifyposition(A,numprofiles,numpoints,closed,prevplot,root,options)
+ %MODIFYPOSITION - modify the prosition of a point of a profile
+ %
+ %   this script is used by exptool as an elementary operation
+Index: ../trunk-jpl/src/m/exp/manipulation/removeseveralpoints.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/removeseveralpoints.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/manipulation/removeseveralpoints.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [A,numprofiles,numpoints,closed]=removeseveralpoints(A,numprofiles,numpoints,closed,prevplot,root,options);
++function [A,numprofiles,numpoints,closed]=removeseveralpoints(A,numprofiles,numpoints,closed,prevplot,root,options)
+ %REMOVESEVERALPOINTS - remove several point
+ %
+ %   this script is used by exptool as an elementary operation
+Index: ../trunk-jpl/src/m/exp/manipulation/removeprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/removeprofile.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/manipulation/removeprofile.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [A,numprofiles,numpoints,closed]=removeprofile(A,numprofiles,numpoints,closed,prevplot,root,options);
++function [A,numprofiles,numpoints,closed]=removeprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+ %REMOVEPROFILE - delete a profile
+ %
+ %   this script is used by exptool as an elementary operation
+Index: ../trunk-jpl/src/m/exp/manipulation/orientprofile.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/manipulation/orientprofile.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/manipulation/orientprofile.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [A,numprofiles,numpoints,closed]=orientprofile(A,numprofiles,numpoints,closed,prevplot,root,options);
++function [A,numprofiles,numpoints,closed]=orientprofile(A,numprofiles,numpoints,closed,prevplot,root,options)
+ %ORIENTPROFILE - cahnge profile orientation
+ %
+ %   this script is used by exptool as an elementary operation
+Index: ../trunk-jpl/src/m/exp/expcoarsen.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expcoarsen.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/expcoarsen.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function expcoarsen(newfile,oldfile,resolution);
++function expcoarsen(newfile,oldfile,resolution)
+ %EXPCOARSEN - coarsen an exp contour
+ %
+ %   This routine read an Argus file and remove points with respect to
+Index: ../trunk-jpl/src/m/exp/expwrite.m
+===================================================================
+--- ../trunk-jpl/src/m/exp/expwrite.m	(revision 13729)
++++ ../trunk-jpl/src/m/exp/expwrite.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function expwrite(a,filename);
++function expwrite(a,filename)
+ %EXPWRITE - write an Argus file from a structure given in input
+ %
+ %   This routine write an Argus file form a structure containing the fields:
+Index: ../trunk-jpl/src/m/classes/modellist.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/modellist.m	(revision 13729)
++++ ../trunk-jpl/src/m/classes/modellist.m	(revision 13730)
+@@ -300,7 +300,7 @@
+ disp('building queueing script');
+ 
+ %First try and figure out if there is a special script for this particular cluster
+-function_name=['BuildMultipleQueueingScript' cluster];
++function_name=['BuildMultipleQueueingScript' cluster]
+ 
+ %some specific treatment of identical cluster, gemini, castor and pollux
+ if strcmpi(cluster,'castor') || strcmpi(cluster,'pollux'),
+@@ -346,7 +346,7 @@
+ %      LaunchMultipleQueueJob(executionpath)
+ 
+ %First try and figure out if there is a special script for thie particular cluster
+-function_name=['LaunchMultipleQueueJob' cluster];
++function_name=['LaunchMultipleQueueJob' cluster]
+ 
+ %some specific treatment of identical cluster, gemini, castor and pollux
+ if strcmpi(cluster,'castor') || strcmpi(cluster,'pollux'),
+Index: ../trunk-jpl/src/m/regional/BasinConstrain.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/BasinConstrain.m	(revision 13729)
++++ ../trunk-jpl/src/m/regional/BasinConstrain.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function md=BasinConstrain(md,domain);
++function md=BasinConstrain(md,domain)
+ %BASINCONSTRAIN - constrain basin
+ %
+ %   Constrain basin using a constraint domain outline, 
+Index: ../trunk-jpl/src/m/regional/BasinConstrainShelf.m
+===================================================================
+--- ../trunk-jpl/src/m/regional/BasinConstrainShelf.m	(revision 13729)
++++ ../trunk-jpl/src/m/regional/BasinConstrainShelf.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function md=BasinConstrainShelf(md,domain);
++function md=BasinConstrainShelf(md,domain)
+ %BASINCONSTRAIN - constrain basin
+ %
+ %   Constrain basin using a constraint domain outline, 
+Index: ../trunk-jpl/src/m/contrib/gslib/varmap.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/gslib/varmap.m	(revision 13729)
++++ ../trunk-jpl/src/m/contrib/gslib/varmap.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function output = varmap(x,y,data,varargin);
++function output = varmap(x,y,data,varargin)
+ %VARMAP - use gslib for Kriging
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/contrib/gslib/gamv.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/gslib/gamv.m	(revision 13729)
++++ ../trunk-jpl/src/m/contrib/gslib/gamv.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function output = gamv(x,y,data,varargin);
++function output = gamv(x,y,data,varargin)
+ %GAMV - use gslib for Kriging
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/contrib/gslib/pkriging.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/gslib/pkriging.m	(revision 13729)
++++ ../trunk-jpl/src/m/contrib/gslib/pkriging.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [B E]=pkriging(x,y,observations,x_interp,y_interp,varargin);
++function [B E]=pkriging(x,y,observations,x_interp,y_interp,varargin)
+ %PKRIGING - parallel Kriging
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/contrib/gslib/gslib.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/gslib/gslib.m	(revision 13729)
++++ ../trunk-jpl/src/m/contrib/gslib/gslib.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function output = gslib(x,y,data,varargin);
++function output = gslib(x,y,data,varargin)
+ %GSLIB - use gslib for Kriging
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/contrib/bamg/meshread.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/bamg/meshread.m	(revision 13729)
++++ ../trunk-jpl/src/m/contrib/bamg/meshread.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function Struct=meshread(filename);
++function Struct=meshread(filename)
+ 
+ %some checks
+ if ~exist(filename),
+Index: ../trunk-jpl/src/m/contrib/bamg/yams.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/bamg/yams.m	(revision 13729)
++++ ../trunk-jpl/src/m/contrib/bamg/yams.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function md=yams(md,varargin);
++function md=yams(md,varargin)
+ %MESHYAMS - Build model of Antarctica by refining according to observed velocity error estimator
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/contrib/massbalance/outflow.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/massbalance/outflow.m	(revision 13729)
++++ ../trunk-jpl/src/m/contrib/massbalance/outflow.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function flag=outflow(md);
++function flag=outflow(md)
+ %OUTFLOW - flag nodes on outflux boundary
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/extrusion/project3d.m
+===================================================================
+--- ../trunk-jpl/src/m/extrusion/project3d.m	(revision 13729)
++++ ../trunk-jpl/src/m/extrusion/project3d.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function projected_vector=project3d(md,varargin);
++function projected_vector=project3d(md,varargin)
+ %PROJECT3D - vertically project a vector from 2d mesh
+ %
+ %   vertically project a vector from 2d mesh (split in noncoll and coll areas) into a 3d mesh.
+Index: ../trunk-jpl/src/m/extrusion/DepthAverage.m
+===================================================================
+--- ../trunk-jpl/src/m/extrusion/DepthAverage.m	(revision 13729)
++++ ../trunk-jpl/src/m/extrusion/DepthAverage.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function  vector_average=DepthAverage(md,vector);
++function  vector_average=DepthAverage(md,vector)
+ %DEPTHAVERAGE - computes depth average of 3d vector, and return value on 2d mesh. 
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/interp/PatchToVec.m
+===================================================================
+--- ../trunk-jpl/src/m/interp/PatchToVec.m	(revision 13729)
++++ ../trunk-jpl/src/m/interp/PatchToVec.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function vec=PatchToVec(Patch);
++function vec=PatchToVec(Patch)
+ %PATCHTOVEC - converts a patch to a vector by averaging over each vertex
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/qmu/qmumarshall.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/qmumarshall.m	(revision 13729)
++++ ../trunk-jpl/src/m/qmu/qmumarshall.m	(revision 13730)
+@@ -69,7 +69,7 @@
+ 
+ end
+ 
+-function qmumarshallusage();
++function qmumarshallusage()
+ disp(' ');
+ disp('function qmumarshall(md.qmu.variables,responses)');
+ end
+Index: ../trunk-jpl/src/m/qmu/MassFluxProcessProfile.m
+===================================================================
+--- ../trunk-jpl/src/m/qmu/MassFluxProcessProfile.m	(revision 13729)
++++ ../trunk-jpl/src/m/qmu/MassFluxProcessProfile.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function segments=MassFluxProcessProfile(md,directory,profilename);
++function segments=MassFluxProcessProfile(md,directory,profilename)
+ %MASSFLUXPROCESSPROFILE: process an argus domain outlien profile into a list of segments.
+ %
+ % Usage: segments=MassFluxProcessProfile(md);
+Index: ../trunk-jpl/src/m/miscellaneous/fielddisplay.m
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/fielddisplay.m	(revision 13729)
++++ ../trunk-jpl/src/m/miscellaneous/fielddisplay.m	(revision 13730)
+@@ -12,7 +12,7 @@
+ 
+ end %function
+ 
+-function parsedisplay(offset,name,field,comment); %{{{
++function parsedisplay(offset,name,field,comment) %{{{
+ 
+ 	%string
+ 	if ischar(field),
+Index: ../trunk-jpl/src/m/partition/adjacency.m
+===================================================================
+--- ../trunk-jpl/src/m/partition/adjacency.m	(revision 13729)
++++ ../trunk-jpl/src/m/partition/adjacency.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function md=adjacency(md);
++function md=adjacency(md)
+ %ADJACENCY -  compute adjacency matrix, list of vertices and list of weights.
+ %
+ %  function to create the adjacency matrix from the connectivity table.
+Index: ../trunk-jpl/src/m/partition/flagedges.m
+===================================================================
+--- ../trunk-jpl/src/m/partition/flagedges.m	(revision 13729)
++++ ../trunk-jpl/src/m/partition/flagedges.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [xsegments ysegments]=flagedges(elements,x,y,partition);
++function [xsegments ysegments]=flagedges(elements,x,y,partition)
+ %FLAGEDGES - return pairs of x,y segments, delimiting partitions.
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/mech/cfl_step.m
+===================================================================
+--- ../trunk-jpl/src/m/mech/cfl_step.m	(revision 13729)
++++ ../trunk-jpl/src/m/mech/cfl_step.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function maxtime=cfl_step(md,vx,vy);
++function maxtime=cfl_step(md,vx,vy)
+ %CFL_STEP - return the maximum time step for the model in years
+ %
+ %   Dt < 0.5 / ( u/Dx +v/Dy )
+Index: ../trunk-jpl/src/m/array/str2int.m
+===================================================================
+--- ../trunk-jpl/src/m/array/str2int.m	(revision 13729)
++++ ../trunk-jpl/src/m/array/str2int.m	(revision 13730)
+@@ -4,7 +4,7 @@
+ %
+ %  function [aint]=str2int(astr,cfl)
+ %
+-function [aint]=str2int(astr,cfl);
++function [aint]=str2int(astr,cfl)
+ 
+ aint=[];
+ 
+Index: ../trunk-jpl/src/m/plot/plot_rifts.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_rifts.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_rifts.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_rifts(md,options,nlines,ncols,index);
++function plot_rifts(md,options,nlines,ncols,index)
+ %PLOT_RIFTS - plot rifts in a mesh
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_contour.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_contour.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_contour.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_contour(md,datain,options);
++function plot_contour(md,datain,options)
+ %PLOT_CONTOUR - plot contours of a given field
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/processmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/processmesh.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/processmesh.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [x y z elements is2d isplanet]=processmesh(md,data,options);
++function [x y z elements is2d isplanet]=processmesh(md,data,options)
+ %PROCESSMESH - process mesh to be plotted
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_parthist.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_parthist.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_parthist.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_parthist(md,options,nlines,ncols,i);
++function plot_parthist(md,options,nlines,ncols,i)
+ %PLOT_PARTHIST - plot partitioning histogram
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_qmumean.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_qmumean.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_qmumean.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_qmumean(md,options,nlines,ncols,i);
++function plot_qmumean(md,options,nlines,ncols,i)
+ %PLOT_QMUMEAN - plot mean of a scaled response 
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_icefront.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_icefront.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_icefront.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_icefront(md,options,width,i,data);
++function plot_icefront(md,options,width,i,data)
+ %PLOT_ICEFRONT - plot segment on neumann BC
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/subplotmodel.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/subplotmodel.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/subplotmodel.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function ha=subplotmodel(nlines,ncols,num,options);
++function ha=subplotmodel(nlines,ncols,num,options)
+ %SUBPLOTMODEL -  tight subplot that includes margins
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_parthistn.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_parthistn.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_parthistn.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_parthist(md,options,nlines,ncols,i);
++function plot_parthist(md,options,nlines,ncols,i)
+ %PLOT_PARTHIST - plot partitioning histogram
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_highlightvertices.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_highlightvertices.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_highlightvertices.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_highlightvertices(md,options,width,i);
++function plot_highlightvertices(md,options,width,i)
+ %PLOT_HIGHLIGHTVERTICES - plot selected vertices
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_riftrelvel.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_riftrelvel.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_riftrelvel.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_riftrelvel(md,options,nlines,ncols,index);
++function plot_riftrelvel(md,options,nlines,ncols,index)
+ %PLOT_RIFTRELVEL - plot rift relative velocities
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_sarpwr.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_sarpwr.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_sarpwr.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_sarpwr(md,options,width,i);
++function plot_sarpwr(md,options,width,i)
+ %PLOT_SARPWR - plot radar image
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_vertexnumbering.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_vertexnumbering.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_vertexnumbering.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_vertexnumbering(md,options,width,i);
++function plot_vertexnumbering(md,options,width,i)
+ %PLOT_VERTEXNUMBERING - plot vertex numbering
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_boundaries.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_boundaries.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_boundaries.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_boundaries(md,options,width,i);
++function plot_boundaries(md,options,width,i)
+ %PLOT_BOUNDARIES - plot mesh boundaries
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_mesh.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_mesh.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_mesh.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_mesh(md,options,nlines,ncols,i);
++function plot_mesh(md,options,nlines,ncols,i)
+ %PLOT_MESH - plot model mesh
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_none.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_none.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_none.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_none(md,options,nlines,ncols,i);
++function plot_none(md,options,nlines,ncols,i)
+ %PLOT_NONE - plot nothing, just apply options
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_tensor_principalaxis.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_tensor_principalaxis.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_tensor_principalaxis.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_tensor_principalaxis(md,options,width,i,tensor,type,plot_options);
++function plot_tensor_principalaxis(md,options,width,i,tensor,type,plot_options)
+ %PLOT_TENSOR_PRINCIPALAXIS - plot ytensor principal axis
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_elementnumbering.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_elementnumbering.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_elementnumbering.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_elementnumbering(md,options,width,i);
++function plot_elementnumbering(md,options,width,i)
+ %PLOT_ELEMENTNUMBERING - plot element numbering
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_manager.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_manager.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_manager.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_manager(md,options,subplotwidth,nlines,ncols,i);
++function plot_manager(md,options,subplotwidth,nlines,ncols,i)
+ %PLOT__MANAGER - distribute the plots, called by plotmodel
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_tensor_principal.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_tensor_principal.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_tensor_principal.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_tensor_principal(md,options,width,i,tensor,type,plot_options);
++function plot_tensor_principal(md,options,width,i,tensor,type,plot_options)
+ %PLOT_TENSOR_PRINCIPAL - plot principal values
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_riftvel.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_riftvel.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_riftvel.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_riftvel(md,options,nlines,ncols,index);
++function plot_riftvel(md,options,nlines,ncols,index)
+ %PLOT_RIFTVEL - plot rift velocity
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_qmustddev.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_qmustddev.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_qmustddev.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_qmustddev(md,options,nlines,ncols,i);
++function plot_qmustddev(md,options,nlines,ncols,i)
+ %PLOT_QMUMEAN - plot stddev of a scaled response 
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_elementstype.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_elementstype.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_elementstype.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_elementstype(md,options,width,i);
++function plot_elementstype(md,options,width,i)
+ %PLOT_ELEMENTSTYPE - plot elements type
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_basaldrag.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_basaldrag.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_basaldrag.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_basaldrag(md,options,width,i,type);
++function plot_basaldrag(md,options,width,i,type)
+ 
+ %PLOT_BASALDRAG - plot basal drag
+ %
+Index: ../trunk-jpl/src/m/plot/plot_BC.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_BC.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_BC.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_BC(md,options,width,i,data);
++function plot_BC(md,options,width,i,data)
+ 
+ %plot neuman
+ plot_icefront(md,options,width,i,data)
+Index: ../trunk-jpl/src/m/plot/plot_segments.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_segments.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_segments.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_segments(md,options,width,i,datai);
++function plot_segments(md,options,width,i,datai)
+ %PLOT_SEGMENTS - plot segments, with different colors according to segment markers.
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_qmuhistnorm.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_qmuhistnorm.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_qmuhistnorm.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_qmuhistnorm(md,options,nlines,ncols,index);
++function plot_qmuhistnorm(md,options,nlines,ncols,index)
+ 
+ %prepare plot
+ subplot(nlines,ncols,index); 
+Index: ../trunk-jpl/src/m/plot/plot_qmu_mass_flux_segments.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_qmu_mass_flux_segments.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_qmu_mass_flux_segments.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_qmu_mass_flux_segments(md,options,nlines,ncols,i);
++function plot_qmu_mass_flux_segments(md,options,nlines,ncols,i)
+ %PLOT_QMU_MASS_FLUX_SEGMENTS - plot segments from the qmu analysis of mass fluxes
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_riftfraction.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_riftfraction.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_riftfraction.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_riftfraction(md,options,nlines,ncols,index);
++function plot_riftfraction(md,options,nlines,ncols,index)
+ %PLOT_RIFTFRACTION - plot rift fractions
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_referential.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_referential.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_referential.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_referential(md,options,width,i,data);
++function plot_referential(md,options,width,i,data)
+ %PLOT_PRESSURELOAD - plot segment on neumann BC
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/kmlgroundoverlay.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/kmlgroundoverlay.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/kmlgroundoverlay.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function kmlgroundoverlay(md,options);
++function kmlgroundoverlay(md,options)
+ %KMLGROUNDOVERLAY: create ground overlay image in kml format
+ %
+ %
+Index: ../trunk-jpl/src/m/plot/plot_drivingstress.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_drivingstress.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_drivingstress.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_drivingstress(md,options,width,i);
++function plot_drivingstress(md,options,width,i)
+ %PLOT_DRIVINGSTRESS - plot driving stress
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_transient_movie.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_transient_movie.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_transient_movie.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_transient_movie(md,options,width,i);
++function plot_transient_movie(md,options,width,i)
+ %PLOT_TRANSIENT_MOVIE - plot a transient result as a movie
+ %   Usage:
+ %      plot_transient_movie(md,options,width,i);
+Index: ../trunk-jpl/src/m/plot/plot_riftpenetration.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_riftpenetration.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_riftpenetration.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_rifpenetration(md,options,nlines,ncols,index);
++function plot_rifpenetration(md,options,nlines,ncols,index)
+ %PLOT_RIFTPENETRATION - plot rift penetration
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_importancefactors.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_importancefactors.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_importancefactors.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_importancefactors(md,options,width,ii);
++function plot_importancefactors(md,options,width,ii)
+ %PLOT_IMPORTANCEFACTORS - plot importance factors
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_penalties.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_penalties.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_penalties.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_penalties(md,options,width,i);
++function plot_penalties(md,options,width,i)
+ %PLOT_PENALTIES - plot penalties
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_parthistw.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_parthistw.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_parthistw.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_parthist(md,options,nlines,ncols,i);
++function plot_parthist(md,options,nlines,ncols,i)
+ %PLOT_PARTHIST - plot partitioning histogram
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_edges.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_edges.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_edges.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_edges(md,options,width,i,datai);
++function plot_edges(md,options,width,i,datai)
+ %PLOT_SEGMENTS - plot edges, with different colors according to segment markers.
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/checkplotoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/checkplotoptions.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/checkplotoptions.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function options=checkplotoptions(md,options);
++function options=checkplotoptions(md,options)
+ %PARSE_OPTIONS - build a structure that holds all plot options
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_highlightelements.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_highlightelements.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_highlightelements.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_highlightelements(md,options,width,i);
++function plot_highlightelements(md,options,width,i)
+ %PLOT_HIGHLIGHTELEMENTS - plot selected elements
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/colormaps/haxby.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/colormaps/haxby.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/colormaps/haxby.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function map = haxby(m);
++function map = haxby(m)
+ %HAXBY - Haxby color map
+ %   HAXBY(M) returns an M-by-3 matrix containing a colormap with Haxby's
+ %   colors, commonly used for displaying bathymetry data.
+Index: ../trunk-jpl/src/m/plot/plot_tensor.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_tensor.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_tensor.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_tensor(md,options,width,i,type);
++function plot_tensor(md,options,width,i,type)
+ %PLOT_TENSOR - plot tensor components
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/processdata.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/processdata.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/processdata.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function [data datatype]=processdata(md,data,options);
++function [data datatype]=processdata(md,data,options)
+ %PROCESSDATA - process data to be plotted
+ %
+ %   datatype = 1 -> elements
+Index: ../trunk-jpl/src/m/plot/plot_riftnumbering.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_riftnumbering.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_riftnumbering.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_riftnumbering(md,options,nlines,ncols,index);
++function plot_riftnumbering(md,options,nlines,ncols,index)
+ %PLOT_RIFTNUMBERING - plot rift penetration + numbering of all rift vertices, as well as rift numbers.
+ %
+ %   Usage:
+Index: ../trunk-jpl/src/m/plot/plot_tensor_components.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_tensor_components.m	(revision 13729)
++++ ../trunk-jpl/src/m/plot/plot_tensor_components.m	(revision 13730)
+@@ -1,4 +1,4 @@
+-function plot_tensor_components(md,options,width,i,tensor,type,plot_options);
++function plot_tensor_components(md,options,width,i,tensor,type,plot_options)
+ %PLOT_TENSOR_COMPONENT - plot component of a tensor
+ %
+ %   Usage:
Index: /issm/oecreview/Archive/13393-13976/ISSM-13730-13731.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13730-13731.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13730-13731.diff	(revision 13980)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/src/m/classes/pairoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/pairoptions.m	(revision 13730)
++++ ../trunk-jpl/src/m/classes/pairoptions.m	(revision 13731)
+@@ -174,7 +174,7 @@
+ 		%      value=getfieldvalue(options,'caxis',[0 2]);
+ 
+ 			%some argument checking: 
+-			if nargin~=2 & nargin~=3,
++			if nargin~=2 && nargin~=3,
+ 				help getfieldvalue
+ 				error('getfieldvalue error message: bad usage');
+ 			end
+@@ -184,11 +184,10 @@
+ 			end
+ 
+ 			%Recover option
+-			for i=1:size(obj.list,1),
+-				if strcmpi(obj.list{i,1},field)
+-					value=obj.list{i,2};
+-					return
+-				end
++			pos=find(strcmpi(obj.list(:,1),field));
++			if ~isempty(pos),
++				value=obj.list{pos(1),2}; %ignore extra entry
++				return;
+ 			end
+ 
+ 			%The option has not been found, output default if provided
Index: /issm/oecreview/Archive/13393-13976/ISSM-13731-13732.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13731-13732.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13731-13732.diff	(revision 13980)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/m/os/oshostname.m
+===================================================================
+--- ../trunk-jpl/src/m/os/oshostname.m	(revision 13731)
++++ ../trunk-jpl/src/m/os/oshostname.m	(revision 13732)
+@@ -6,17 +6,18 @@
+ %
+ 
+ if ispc(),
+-	[status,hostname]=system('hostname | sed ''s/-//g''');hostname=hostname(1:end-1);
+-
++	[status,hostname]=system('hostname | sed ''s/-//g''');
+ 	if status, 
+ 		error('oshostname error message: could not run hostname command on windows os');
+ 	end
+-
+ else
+ 	[status,hostname]=system(['hostname -s | sed ''s/-//g''']);
+ 	if status, 
+ 		error('oshostname error message: could not run hostname command on *nix os');
+ 	end
+-	hostname=hostname(1:end-1);
+-	hostname=ddewhite(hostname);
++
+ end
++
++%remove carriage return and blank spaces
++hostname=hostname(1:end-1);
++hostname=ddewhite(hostname);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13732-13733.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13732-13733.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13732-13733.diff	(revision 13980)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/externalpackages/git/install-nopython.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/git/install-nopython.sh	(revision 13732)
++++ ../trunk-jpl/externalpackages/git/install-nopython.sh	(revision 13733)
+@@ -1,23 +0,0 @@
+-#!/bin/bash
+-set -eu
+-
+-#Some cleanup
+-rm -rf src install git-1.7.10.2
+-mkdir install src
+-
+-#Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/git-1.7.10.2.tar.gz' 'git-1.7.10.2.tar.gz'
+-
+-#Untar 
+-tar -zxvf  git-1.7.10.2.tar.gz
+-
+-#Move git into install directory
+-mv git-1.7.10.2/* src
+-rm -rf git-1.7.10.2
+-
+-#install
+-cd src 
+-./configure  --prefix="$ISSM_DIR/externalpackages/git/install"
+-	
+-#Compile
+-make install
+Index: ../trunk-jpl/externalpackages/git/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/git/install.sh	(revision 13732)
++++ ../trunk-jpl/externalpackages/git/install.sh	(revision 13733)
+@@ -18,6 +18,7 @@
+ #install
+ cd src 
+ ./configure  --prefix="$ISSM_DIR/externalpackages/git/install" --with-python="$ISSM_DIR/externalpackages/python/install/bin/python"
++#--with-python="$ISSM_DIR/externalpackages/python/install/bin/python" #Do we really need this line?
+ 	
+ #Compile
+ make install
Index: /issm/oecreview/Archive/13393-13976/ISSM-13733-13734.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13733-13734.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13733-13734.diff	(revision 13980)
@@ -0,0 +1,108 @@
+Index: ../trunk-jpl/externalpackages/netcdf/install-4.2.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/netcdf/install-4.2.sh	(revision 13733)
++++ ../trunk-jpl/externalpackages/netcdf/install-4.2.sh	(revision 13734)
+@@ -1,30 +0,0 @@
+-#!/bin/bash
+-set -eu
+-#you need hdf5 compiled
+-
+-#Some cleanup
+-rm -rf src install netcdf-4.2
+-mkdir install src
+-
+-#Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py "http://issm.jpl.nasa.gov/files/externalpackages/netcdf-4.2.tar.gz" "netcdf-4.2.tar.gz"
+-
+-#Untar 
+-tar -zxvf  netcdf-4.2.tar.gz
+-
+-#Move netcdf to install directory
+-rm -rf src/*
+-mv netcdf-4.2/* src/
+-rm -rf netcdf-4.2
+-
+-#Configure and compile
+-cd src
+-./configure \
+- --prefix="$ISSM_DIR/externalpackages/netcdf/install"  \
+- --disable-doxygen
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
+-make install
+Index: ../trunk-jpl/externalpackages/netcdf/install-4.0.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/netcdf/install-4.0.sh	(revision 13733)
++++ ../trunk-jpl/externalpackages/netcdf/install-4.0.sh	(revision 13734)
+@@ -1,27 +0,0 @@
+-#!/bin/bash
+-set -eu
+-
+-#Some cleanup
+-rm -rf src install netcdf-4.0.1
+-mkdir install src
+-
+-#Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py "http://issm.jpl.nasa.gov/files/externalpackages/netcdf-4.0.1.tar.gz" "netcdf-4.0.1.tar.gz"
+-
+-#Untar 
+-tar -zxvf  netcdf-4.0.1.tar.gz
+-
+-#Move netcdf to install directory
+-rm -rf src/*
+-mv netcdf-4.0.1/* src/
+-rm -rf netcdf-4.0.1
+-
+-#Configure and compile
+-cd src
+-./configure  --prefix="$ISSM_DIR/externalpackages/netcdf/install"  
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
+-make install
+Index: ../trunk-jpl/externalpackages/netcdf/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/netcdf/install.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/netcdf/install.sh	(revision 13734)
+@@ -0,0 +1,30 @@
++#!/bin/bash
++set -eu
++#you need hdf5 compiled
++
++#Some cleanup
++rm -rf src install netcdf-4.2
++mkdir install src
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py "http://issm.jpl.nasa.gov/files/externalpackages/netcdf-4.2.tar.gz" "netcdf-4.2.tar.gz"
++
++#Untar 
++tar -zxvf  netcdf-4.2.tar.gz
++
++#Move netcdf to install directory
++rm -rf src/*
++mv netcdf-4.2/* src/
++rm -rf netcdf-4.2
++
++#Configure and compile
++cd src
++./configure \
++ --prefix="$ISSM_DIR/externalpackages/netcdf/install"  \
++ --disable-doxygen
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/netcdf/install.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13734-13735.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13734-13735.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13734-13735.diff	(revision 13980)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.cpp	(revision 13734)
++++ ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.cpp	(revision 13735)
+@@ -10,17 +10,22 @@
+ #include "../../toolkits/toolkits.h"
+ #include "../../EnumDefinitions/EnumDefinitions.h"
+ /*ANSI_DECLARATORS needed to call triangle library: */
+-#ifndef ANSI_DECLARATORS
+-#define ANSI_DECLARATORS
+-#include "triangle.h"
+-#undef ANSI_DECLARATORS
+-#else
+-#include "triangle.h"
++#if defined(_HAVE_TRIANGLE_)
++	#ifndef ANSI_DECLARATORS
++	#define ANSI_DECLARATORS
++	#include "triangle.h"
++	#undef ANSI_DECLARATORS
++	#else
++	#include "triangle.h"
++	#endif
+ #endif
+ /*}}}*/
+ 
+ void TriMeshx(SeqMat<IssmPDouble>** pindex,SeqVec<IssmPDouble>** px,SeqVec<IssmPDouble>** py,SeqMat<IssmPDouble>** psegments,SeqVec<IssmPDouble>** psegmentmarkerlist,DataSet* domain,DataSet* rifts,double area){
+ 
++#if !defined(_HAVE_TRIANGLE_)
++	_error_("triangle has not been installed");
++#else
+ 	/*indexing: */
+ 	int i,j;
+ 
+@@ -200,4 +205,5 @@
+ 	*px=new SeqVec<IssmPDouble>(x,out.numberofpoints);
+ 	*py=new SeqVec<IssmPDouble>(y,out.numberofpoints);
+ 	*psegmentmarkerlist=new SeqVec<IssmPDouble>(segmentmarkerlist,out.numberofsegments);
++#endif
+ }
Index: /issm/oecreview/Archive/13393-13976/ISSM-13735-13736.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13735-13736.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13735-13736.diff	(revision 13980)
@@ -0,0 +1,83 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13735)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13736)
+@@ -26,6 +26,7 @@
+ 	int* analyses=NULL;
+ 	int  numanalyses;
+ 	int  solution_type;
++	int  ierr;
+ 
+ 	/*File names*/
+ 	char *lockfilename   = NULL;
+@@ -37,6 +38,10 @@
+ 	/*First things first, store the communicator, and set it as a global variable: */
+ 	this->comm=incomm;
+ 	this->SetStaticComm();
++	
++	/*Now, initialize PETSC: */
++	PETSC_COMM_WORLD=this->comm;
++	ierr=PetscInitialize(&argc,&argv,(char*)0,"");  if(ierr) _error_("Could not initialize Petsc");
+ 
+ 	/*Start profiler: */
+ 	this->profiler=new Profiler();
+@@ -121,6 +126,11 @@
+ 
+ 	/*Now delete: */
+ 	delete profiler;
++	
++	/*Finalize PETSC for this model: */
++	_pprintLine_("closing Petsc");
++	PetscFinalize(); 
++
+ }
+ /*}}}*/
+ 
+Index: ../trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp	(revision 13735)
++++ ../trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp	(revision 13736)
+@@ -12,13 +12,18 @@
+ 
+ void EnvironmentFinalize(void){
+ 
+-	#ifdef _HAVE_PETSC_
+-	_pprintLine_("closing MPI and Petsc");
+-	PetscFinalize(); 
+-	#else
++	int my_rank=0;
+ 	#ifdef _HAVE_MPI_
+-	_pprintLine_("closing MPI");
++	/*Make sure we are all here!)*/
++	MPI_Barrier(MPI_COMM_WORLD);
++	
++	/*Print closing statement: */
++	#ifdef _HAVE_MPI_
++	MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
++	#endif
++	if(!my_rank) printf("closing MPI\n");
++
++	/*Finalize: */
+ 	MPI_Finalize();
+ 	#endif
+-	#endif
+ }
+Index: ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13735)
++++ ../trunk-jpl/src/c/solutions/EnvironmentInit.cpp	(revision 13736)
+@@ -15,12 +15,8 @@
+ 	/*Output*/
+ 	COMM comm = 0;
+ 
+-	/*Initialize environments: Petsc, MPI, etc...: */
+-	#if defined (_HAVE_PETSC_)
+-	int ierr=PetscInitialize(&argc,&argv,(char*)0,"");  
+-	if(ierr) _error_("Could not initialize Petsc");
+-	comm = MPI_COMM_WORLD;
+-	#elif defined(_HAVE_MPI_)
++	/*Initialize MPI environment: */
++	#if defined(_HAVE_MPI_)
+ 	MPI_Init(&argc,&argv);
+ 	comm = MPI_COMM_WORLD;
+ 	#else
Index: /issm/oecreview/Archive/13393-13976/ISSM-13736-13737.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13736-13737.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13736-13737.diff	(revision 13980)
@@ -0,0 +1,126 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 13736)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 13737)
+@@ -110,75 +110,9 @@
+ 	AC_MSG_RESULT($HAVE_MATLAB)
+ 	AM_CONDITIONAL([MATLAB], [test x$HAVE_MATLAB = xyes])
+ 
+-	dnl 2. if matlab is provided, get version number
++	dnl 2. Get Matlab libraries
+ 	if test x$HAVE_MATLAB = xyes; then
+-		AC_MSG_CHECKING([for matlab version])
+-		MATLAB_VERSION=""
+ 
+-		dnl For Matlab R2008a and more, the version number is stored in .VERSION
+-		if test -f "$MATLAB_ROOT/.VERSION" ; then
+-			MATLAB_VERSION=$(cat $MATLAB_ROOT/.VERSION)
+-		fi
+-		dnl Otherwise find version in file stored in bin/util/mex/version.txt
+-		if test -f "$MATLAB_ROOT/bin/util/mex/version.txt" ; then
+-			MATLAB_VERSION=$(cat $MATLAB_ROOT/bin/util/mex/version.txt)
+-		fi
+-
+-		dnl check that we found the version
+-		if test -z "$MATLAB_VERSION" ; then
+-			AC_MSG_ERROR([Matlab version not found])
+-		fi
+-
+-		case $MATLAB_VERSION in
+-			@<:@1-9@:>@.@<:@0-9@:>@ | @<:@1-9@:>@@<:@0-9@:>@.@<:@0-9@:>@ | @<:@1-9@:>@.@<:@1-9@:>@@<:@0-9@:>@)
+-				MATLAB_MAJOR=$(echo $MATLAB_VERSION | sed -e "s/^\(@<:@0-9@:>@*\)\.@<:@0-9@:>@*.*/\1/")
+-				MATLAB_MINOR=$(echo $MATLAB_VERSION | sed -e "s/^@<:@0-9@:>@*\.\(@<:@0-9@:>@*\).*/\1/")
+-				;;
+-			R2007a)
+-			  MATLAB_MAJOR=7
+-			  MATLAB_MINOR=4
+-			  ;;
+-			R2008a)
+-			  MATLAB_MAJOR=7
+-			  MATLAB_MINOR=6
+-			  ;;
+-			R2009a)
+-			  MATLAB_MAJOR=7
+-			  MATLAB_MINOR=8
+-			  ;;
+-			R2010a)
+-			  MATLAB_MAJOR=7
+-			  MATLAB_MINOR=10
+-			  ;;
+-			R2010b)
+-			  MATLAB_MAJOR=7
+-			  MATLAB_MINOR=11
+-			  ;;
+-			R2011a)
+-			  MATLAB_MAJOR=7
+-			  MATLAB_MINOR=12
+-			  ;;
+-			R2011b)
+-			  MATLAB_MAJOR=7
+-			  MATLAB_MINOR=13
+-			  ;;
+-			R2012a)
+-			  MATLAB_MAJOR=7
+-			  MATLAB_MINOR=14
+-			  ;;
+-			R2012b)
+-			  MATLAB_MAJOR=7
+-			  MATLAB_MINOR=15
+-			  ;;
+-			*)
+-			  AC_MSG_ERROR([can not determine Matlab version number])
+-			esac
+-		AC_SUBST([MATLAB_VERSION])
+-		AC_SUBST([MATLAB_MAJOR])
+-		AC_SUBST([MATLAB_MINOR])
+-		AC_MSG_RESULT($MATLAB_VERSION ($MATLAB_MAJOR.$MATLAB_MINOR))
+-
+-		dnl 3. Get Matlab libraries
+ 		AC_MSG_CHECKING(for matlab headers and libraries in $MATLAB_ROOT)
+ 		MATLABINCL=-I"$MATLAB_ROOT/extern/include";
+ 		
+@@ -186,44 +120,6 @@
+ 		MEXLINK=$(mex -v 2>&1 < /dev/null | grep LDFLAGS     | sed -e "s/         LDFLAGS            = //g")
+ 		MEXLIB=$( mex -v 2>&1 < /dev/null | grep CXXLIBS     | sed -e "s/         CXXLIBS            = //g")
+ 		MEXEXT=$( mex -v 2>&1 < /dev/null | grep LDEXTENSION | sed -e "s/         LDEXTENSION        = //g")
+-		dnl dnl OS-dependent variables and checks (old stuff)
+-		dnl case "${host_os}" in
+-		dnl 	*linux*)
+-		dnl 		if test "${host_cpu}" = "x86_64";
+-		dnl 		then
+-		dnl 			MEXLIB="-Wl,-rpath-link,$MATLAB_ROOT/bin/glnxa64 -L$MATLAB_ROOT/bin/glnxa64/ -lmx -lmex -lmat -lm"
+-		dnl 			MEXLINK="-pthread -shared -W2,--version-script,${MATLAB_ROOT}/extern/lib/glnxa64/mexFunction.map";
+-		dnl 		else
+-		dnl 			MEXLIB=-L"$MATLAB_ROOT/bin/glnx86/ -lmex"
+-		dnl 			MEXLINK="-pthread -shared -W2,--version-script,${MATLAB_ROOT}/extern/lib/glnx86/mexFunction.map";
+-		dnl 		fi
+-		dnl 		MEXEXT=`$MATLAB_ROOT/bin/mexext`
+-		dnl 		MEXEXT=".$MEXEXT"
+-		dnl 	;;
+-		dnl 	*darwin*)
+-		dnl 		dnl mex -v gives all the flags for compilation of mex files
+-		dnl 		dnl if matlab version is 7.9 or more, we must use mexmaci64 (64 bits)
+-		dnl 		MEXLINK="-O -Wl,-flat_namespace -undefined suppress -arch i386 -bundle -Wl,-exported_symbols_list,$MATLAB_ROOT/extern/lib/maci/mexFunction.map"
+-		dnl 		MEXLIB=" -L$MATLAB_ROOT/bin/maci/ -lmx -lmex -lmat -lstdc++ -largeArrayDims"
+-		dnl 		if test $MATLAB_MAJOR -ge 7; then 
+-		dnl 			 if test $MATLAB_MINOR -ge 9; then 
+-		dnl 				  MEXLINK="-O -Wl,-flat_namespace -undefined suppress -bundle -Wl,-exported_symbols_list,$MATLAB_ROOT/extern/lib/maci64/mexFunction.map"
+-		dnl 					 MEXLIB=" -L$MATLAB_ROOT/bin/maci64/ -lmx -lmex -lmat -lstdc++"
+-		dnl 			 fi
+-		dnl 		fi
+-		dnl 		MEXEXT=`$MATLAB_ROOT/bin/mexext`
+-		dnl 		MEXEXT=".$MEXEXT"
+-		dnl 	;;
+-		dnl 	*cygwin*) 
+-		dnl 		if  test $VENDOR = intel-win7-32; then
+-		dnl 			MEXLIB="-dll -export:mexFunction -LIBPATH:\"$MATLAB_ROOT\extern\lib\win32\microsoft\" libmx.lib libmex.lib libmat.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  -NOLOGO -INCREMENTAL:NO -manifest" 
+-		dnl 		elif  test $VENDOR = intel-win7-64; then
+-		dnl 			MEXLIB="-dll -export:mexFunction -LIBPATH:\"$MATLAB_ROOT\extern\lib\win64\microsoft\" libmx.lib libmex.lib libmat.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  -NOLOGO -INCREMENTAL:NO -manifest" 
+-		dnl 		fi
+-		dnl 		MEXEXT=`$MATLAB_ROOT/bin/mexext.bat`
+-		dnl 		MEXEXT=".$MEXEXT"
+-		dnl 	;;
+-		dnl esac
+ 	   AC_MSG_RESULT(done)
+ 
+ 		AC_SUBST([MATLABINCL])
Index: /issm/oecreview/Archive/13393-13976/ISSM-13737-13738.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13737-13738.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13737-13738.diff	(revision 13980)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/externalpackages/distribute/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/distribute/install.sh	(revision 13737)
++++ ../trunk-jpl/externalpackages/distribute/install.sh	(revision 13738)
+@@ -3,4 +3,4 @@
+ 
+ #Download from ISSM server
+ $ISSM_DIR/scripts/DownloadExternalPackage.py 'http://python-distribute.org/distribute_setup.py' 'distribute_setup.py'
+-sudo python distribute_setup.py
++python distribute_setup.py
Index: /issm/oecreview/Archive/13393-13976/ISSM-13738-13739.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13738-13739.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13738-13739.diff	(revision 13980)
@@ -0,0 +1,60 @@
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13738)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13739)
+@@ -48,12 +48,6 @@
+ AM_CXXFLAGS +=  -DNPY_NO_DEPRECATED_API 
+ endif
+ 
+-if SHAREDLIBS
+-deps +=
+-else
+-deps += ../../c/libISSMWrappers.a ../../c/libISSMCore.a
+-endif
+-
+ #Optimization flags:
+ AM_CXXFLAGS += $(CXXOPTFLAGS) 
+ #}}}
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13738)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13739)
+@@ -53,11 +53,11 @@
+ else
+ deps = ../../c/libISSMCore.a ../../c/libISSMWrappers.a
+ endif
+-
++if ADOLC
++deps += $(ADOLCLIB)
++endif
+ deps +=  $(MATHLIB) ${MEXLIB}
+ 
+-#$(TRIANGLELIB) $(PETSCLIB) $(FLIBS) $(PLAPACKLIB) $(SPOOLESLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MPILIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(SHAPELIBLIB) $(GSLLIB) 
+-
+ #Triangle library
+ AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER
+ 
+@@ -77,23 +77,6 @@
+ 
+ AM_CXXFLAGS +=  -D_HAVE_MATLAB_MODULES_ -D_GNU_SOURCE -fPIC -fno-omit-frame-pointer -pthread 
+ 
+-######################################################################################
+-# Circular dependencies may not be necessary here.
+-#deps += ../../c/libISSMCore.a 
+-#if CIRCULAR_DEPENDENCIES
+-#deps += $(TRIANGLELIB) $(PETSCLIB) $(FLIBS) $(PLAPACKLIB) $(SPOOLESLIB) $(MUMPSLIB) $(SUPERLULIB) $(SPAILIB) $(PROMETHEUSLIB) $(PASTIXLIB) $(SCALAPACKLIB) $(BLACSLIB) $(HYPRELIB) $(MLLIB) $(DAKOTALIB) $(METISLIB) $(CHACOLIB) $(SCOTCHLIB) $(BLASLAPACKLIB) $(MPILIB) $(MATHLIB) $(FORTRANLIB) $(GRAPHICSLIB) $(MULTITHREADINGLIB) $(SHAPELIBLIB) $(GSLLIB)
+-#endif
+-######################################################################################
+-
+-if SHAREDLIBS
+-deps +=
+-else
+-deps += ../../c/libISSMWrappers.a ../../c/libISSMCore.a  
+-if ADOLC
+-deps += $(ADOLCLIB)
+-endif
+-endif
+-
+ #Optimization flags:
+ AM_CXXFLAGS += $(CXXOPTFLAGS) 
+ #}}}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13739-13740.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13739-13740.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13739-13740.diff	(revision 13980)
@@ -0,0 +1,98 @@
+Index: ../trunk-jpl/src/m/classes/diagnostic.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/diagnostic.py	(revision 13739)
++++ ../trunk-jpl/src/m/classes/diagnostic.py	(revision 13740)
+@@ -1,6 +1,7 @@
+ #module imports
+ import numpy
+ import sys
++import copy
+ from fielddisplay import fielddisplay
+ from EnumDefinitions import *
+ from checkfield import *
+@@ -185,7 +186,7 @@
+ 		WriteData(fid,'object',self,'fieldname','requested_outputs','format','DoubleMat','mattype',3)
+ 
+ 		#marshall ice front
+-		data=self.icefront
++		data=copy.deepcopy(self.icefront)
+ 		data[numpy.nonzero(data[:,-1]==0),-1]=AirEnum()
+ 		data[numpy.nonzero(data[:,-1]==1),-1]=WaterEnum()
+ 		data[numpy.nonzero(data[:,-1]==2),-1]=IceEnum()
+Index: ../trunk-jpl/src/m/classes/verbose.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/verbose.py	(revision 13739)
++++ ../trunk-jpl/src/m/classes/verbose.py	(revision 13740)
+@@ -124,6 +124,6 @@
+ 	# }}}
+ 
+ 	def marshall(self,fid):    # {{{
+-			WriteData(fid,'data',self.VerboseToBinary(),'enum',VerboseEnum(),'format','Integer')
++		WriteData(fid,'data',self.VerboseToBinary(),'enum',VerboseEnum(),'format','Integer')
+ 	# }}}
+ 
+Index: ../trunk-jpl/src/m/classes/inversion.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.py	(revision 13739)
++++ ../trunk-jpl/src/m/classes/inversion.py	(revision 13740)
+@@ -1,5 +1,6 @@
+ #module imports
+ import numpy
++import copy
+ from fielddisplay import fielddisplay
+ from EnumDefinitions import *
+ from StringToEnum import StringToEnum
+@@ -177,7 +178,7 @@
+ 
+ 		#process cost functions
+ 		num_cost_functions=numpy.size(self.cost_functions,axis=1)
+-		data=self.cost_functions
++		data=copy.deepcopy(self.cost_functions)
+ 		data[numpy.nonzero(data==101)]=SurfaceAbsVelMisfitEnum()
+ 		data[numpy.nonzero(data==102)]=SurfaceRelVelMisfitEnum()
+ 		data[numpy.nonzero(data==103)]=SurfaceLogVelMisfitEnum()
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 13739)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 13740)
+@@ -1,6 +1,6 @@
+ #module imports
++import numpy
+ import copy
+-import numpy
+ from fielddisplay import fielddisplay
+ from EnumDefinitions import *
+ from checkfield import *
+@@ -81,8 +81,6 @@
+ 	# }}}
+ 
+ 	def marshall(self,fid):    # {{{
+-		#print "marshalling flowequation-1"
+-		#print self.vertex_equation
+ 		WriteData(fid,'object',self,'fieldname','ismacayealpattyn','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','ishutter','format','Boolean')
+ 		WriteData(fid,'object',self,'fieldname','isl1l2','format','Boolean')
+@@ -91,7 +89,6 @@
+ 		WriteData(fid,'object',self,'fieldname','borderpattyn','format','DoubleMat','mattype',1)
+ 		WriteData(fid,'object',self,'fieldname','borderstokes','format','DoubleMat','mattype',1)
+ 		#convert approximations to enums
+-		## data=list(self.vertex_equation)
+ 		data=copy.deepcopy(self.vertex_equation)
+ 		data[numpy.nonzero(data==0)]=NoneApproximationEnum()
+ 		data[numpy.nonzero(data==1)]=HutterApproximationEnum()
+@@ -103,7 +100,6 @@
+ 		data[numpy.nonzero(data==7)]=PattynStokesApproximationEnum()
+ 		data[numpy.nonzero(data==8)]=L1L2ApproximationEnum()
+ 		WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1)
+-		########data=self.element_equation
+ 		data=copy.deepcopy(self.element_equation)
+ 		data[numpy.nonzero(data==0)]=NoneApproximationEnum()
+ 		data[numpy.nonzero(data==1)]=HutterApproximationEnum()
+@@ -115,7 +111,5 @@
+ 		data[numpy.nonzero(data==7)]=PattynStokesApproximationEnum()
+ 		data[numpy.nonzero(data==8)]=L1L2ApproximationEnum()
+ 		WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2)
+-		#print "marshalling flowequation-4"
+-		#print self.vertex_equation
+ 	# }}}
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13740-13741.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13740-13741.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13740-13741.diff	(revision 13980)
@@ -0,0 +1,101 @@
+Index: ../trunk-jpl/src/m/geometry/FlagElements.py
+===================================================================
+--- ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 13740)
++++ ../trunk-jpl/src/m/geometry/FlagElements.py	(revision 13741)
+@@ -51,7 +51,7 @@
+ 		if invert:
+ 			flag=numpy.logical_not(flag)
+ 
+-	elif isinstance(region,numpy.nparray) or isinstance(region,bool):
++	elif isinstance(region,numpy.ndarray) or isinstance(region,bool):
+ 		if not numpy.size(region,0)==md.mesh.numberofelements:
+ 			raise TypeError("Flaglist for region must be of same size as number of elements in model.")
+ 		flag=region
+Index: ../trunk-jpl/src/m/mesh/roundmesh.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/roundmesh.py	(revision 0)
++++ ../trunk-jpl/src/m/mesh/roundmesh.py	(revision 13741)
+@@ -0,0 +1,50 @@
++import numpy
++import os
++from collections import OrderedDict
++from expwrite import *
++from triangle import *
++#from bamg import *
++
++def roundmesh(md,radius,resolution):
++	"""
++	ROUNDMESH - create an unstructured round mesh 
++
++	   This script will generate a structured round mesh
++	   - radius     : specifies the radius of the circle in meters
++	   - resolution : specifies the resolution in meters
++
++	   Usage:
++	      md=roundmesh(md,radius,resolution)
++	"""
++
++	#First we have to create the domain outline 
++
++	#Get number of points on the circle
++	pointsonedge=numpy.floor((2.*numpy.pi*radius) / resolution)
++
++	#Calculate the cartesians coordinates of the points
++	x_list=numpy.ones(pointsonedge)
++	y_list=numpy.ones(pointsonedge)
++	theta=numpy.linspace(0.,2.*numpy.pi,num=pointsonedge,endpoint=False)
++	x_list=radius*x_list*numpy.cos(theta)
++	y_list=radius*y_list*numpy.sin(theta)
++	A=OrderedDict()
++	A['x']=x_list
++	A['y']=y_list
++	A['density']=1.
++	expwrite([A],'RoundDomainOutline.exp')
++
++	#Call Bamg
++	md=triangle(md,'RoundDomainOutline.exp',resolution)
++	#md=bamg(md,'domain','RoundDomainOutline.exp','hmin',resolution)
++
++	#move the closest node to the center
++	pos=numpy.argmin(md.mesh.x**2+md.mesh.y**2)
++	md.mesh.x[pos]=0.
++	md.mesh.y[pos]=0.
++
++	#delete domain
++	os.remove('RoundDomainOutline.exp')
++
++	return md
++
+Index: ../trunk-jpl/src/m/mesh/roundmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/roundmesh.m	(revision 13740)
++++ ../trunk-jpl/src/m/mesh/roundmesh.m	(revision 13741)
+@@ -11,14 +11,14 @@
+ %First we have to create the domain outline 
+ 
+ %Get number of points on the circle
+-pointsonedge=floor((2*pi*radius) / resolution);
++pointsonedge=floor((2.*pi*radius) / resolution);
+ 
+ %Calculate the cartesians coordinates of the points
+ x_list=ones(pointsonedge,1); y_list=ones(pointsonedge,1);
+-theta=(0:2*pi/pointsonedge:2*pi*(1-1/pointsonedge))';
++theta=(0.:2.*pi/pointsonedge:2.*pi*(1.-1./pointsonedge))';
+ x_list=radius*x_list.*cos(theta);
+ y_list=radius*y_list.*sin(theta);
+-A=struct('x',x_list,'y',y_list,'density',1);
++A=struct('x',x_list,'y',y_list,'density',1.);
+ expwrite(A,'RoundDomainOutline.exp');
+ 
+ %Call Bamg
+@@ -27,8 +27,8 @@
+ 
+ %move the closest node to the center
+ [mini pos]=min(md.mesh.x.^2+md.mesh.y.^2);
+-md.mesh.x(pos)=0;
+-md.mesh.y(pos)=0;
++md.mesh.x(pos)=0.;
++md.mesh.y(pos)=0.;
+ 
+ %delete domain
+ delete('RoundDomainOutline.exp')
Index: /issm/oecreview/Archive/13393-13976/ISSM-13741-13742.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13741-13742.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13741-13742.diff	(revision 13980)
@@ -0,0 +1,43 @@
+Index: ../trunk-jpl/externalpackages/mpich2/install-1.5-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich2/install-1.5-macosx64.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/mpich2/install-1.5-macosx64.sh	(revision 13742)
+@@ -0,0 +1,32 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf src install mpich2-1.5
++mkdir src install
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/mpich2-1.5.tar.gz' 'mpich2-1.5.tar.gz'
++
++#Untar 
++tar -zxvf  mpich2-1.5.tar.gz
++
++#Move mpich2 into src directory
++mv mpich2-1.5/* src
++rm -rf mpich2-1.5
++
++#Configure mpich2
++cd src
++./configure \
++	--prefix="$ISSM_DIR/externalpackages/mpich2/install" \
++	--enable-shared \
++	--enable-sharedlibs=gcc \
++	--enable-f91=gfortran 
++
++#Compile mpich2 (this new version supports parallel make)
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install 
+
+Property changes on: ../trunk-jpl/externalpackages/mpich2/install-1.5-macosx64.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13742-13743.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13742-13743.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13742-13743.diff	(revision 13980)
@@ -0,0 +1,81 @@
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13742)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13743)
+@@ -18,14 +18,14 @@
+ endif 
+ #}}}
+ #Flags and libraries {{{
+-if SHAREDLIBS
+-deps = ../../c/libISSMCore.la ../../c/libISSMWrappers.la
+-else
+-deps = ../../c/libISSMCore.a ../../c/libISSMWrappers.a
+-endif
++#if SHAREDLIBS
++#deps = ../../c/libISSMCore.la ../../c/libISSMWrappers.la
++#else
++#deps = ../../c/libISSMCore.a ../../c/libISSMWrappers.a
++#endif
++#deps +=  $(MATHLIB) ${PYTHONLIB}
++deps =  $(MATHLIB) ${PYTHONLIB}
+ 
+-deps +=  $(MATHLIB) ${PYTHONLIB}
+-
+ #Triangle library
+ AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER
+ 
+@@ -48,6 +48,12 @@
+ AM_CXXFLAGS +=  -DNPY_NO_DEPRECATED_API 
+ endif
+ 
++if SHAREDLIBS 	 	 
++deps += 	 	 
++else 	 	 
++deps += ../../c/libISSMWrappers.a ../../c/libISSMCore.a 	 	 
++endif 
++
+ #Optimization flags:
+ AM_CXXFLAGS += $(CXXOPTFLAGS) 
+ #}}}
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13742)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13743)
+@@ -48,15 +48,13 @@
+ 
+ #}}}
+ #Flags and libraries {{{
+-if SHAREDLIBS
+-deps = ../../c/libISSMCore.la ../../c/libISSMWrappers.la
+-else
+-deps = ../../c/libISSMCore.a ../../c/libISSMWrappers.a
+-endif
+-if ADOLC
+-deps += $(ADOLCLIB)
+-endif
+-deps +=  $(MATHLIB) ${MEXLIB}
++#if SHAREDLIBS
++#deps = ../../c/libISSMCore.la ../../c/libISSMWrappers.la
++#else
++#deps = ../../c/libISSMCore.a ../../c/libISSMWrappers.a
++#endif
++#deps +=  $(MATHLIB) ${MEXLIB}
++deps =  $(MATHLIB) ${MEXLIB}
+ 
+ #Triangle library
+ AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER
+@@ -77,6 +75,14 @@
+ 
+ AM_CXXFLAGS +=  -D_HAVE_MATLAB_MODULES_ -D_GNU_SOURCE -fPIC -fno-omit-frame-pointer -pthread 
+ 
++if SHAREDLIBS
++deps +=
++else
++deps += ../../c/libISSMWrappers.a ../../c/libISSMCore.a  
++if ADOLC
++deps += $(ADOLCLIB)
++endif
++endif
+ #Optimization flags:
+ AM_CXXFLAGS += $(CXXOPTFLAGS) 
+ #}}}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13743-13744.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13743-13744.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13743-13744.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/startup.py
+===================================================================
+--- ../trunk-jpl/startup.py	(revision 13743)
++++ ../trunk-jpl/startup.py	(revision 13744)
+@@ -84,6 +84,8 @@
+ from private import *
+ from triangle import *
+ from setmask import *
++from plotoptions import *
++from plotmodel import *
+ #}}}
+ 
+ print("\n  To get started with ISSM, type issmdoc at the command prompt.\n\n")
Index: /issm/oecreview/Archive/13393-13976/ISSM-13744-13745.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13744-13745.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13744-13745.diff	(revision 13980)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/src/py/README
+===================================================================
+--- ../trunk-jpl/src/py/README	(revision 13744)
++++ ../trunk-jpl/src/py/README	(revision 13745)
+@@ -1,24 +0,0 @@
+-# add in your bashrc 
+-# export PYTHONSTARTUP="$ISSM_TIER/startup.py"
+-# so that all python tools are loaded
+-#
+-# launch python
+-
+->>> md=model();
+->>> md
+->>> md.mesh
+->>> md.mesh.x
+-
+-# to try the hello module:
+-
+->>> import hello
+->>> hello.say_hello("Mathieu")
+-
+-#to try test TriMesh (which converts a python list to a double pointer and echoes
+-#its values:
+-
+->>> import TriMesh
+->>> TriMesh.mesh([1,2,3])
+-1
+-2
+-3
Index: /issm/oecreview/Archive/13393-13976/ISSM-13745-13746.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13745-13746.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13745-13746.diff	(revision 13980)
@@ -0,0 +1,37 @@
+Index: ../trunk-jpl/configs/config-macosx64-larour-bothapis.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-larour-bothapis.sh	(revision 13745)
++++ ../trunk-jpl/configs/config-macosx64-larour-bothapis.sh	(revision 13746)
+@@ -1,32 +0,0 @@
+-#!/bin/sh
+-
+-#petsc 3.2
+-#mpich 1.4
+-
+-pythonversion=2.7
+-
+-./configure \
+-	--prefix=$ISSM_DIR \
+-	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+-	--with-matlab-dir=$MATLAB_DIR \
+-	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
+-	--with-python-version=$pythonversion \
+-	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
+-	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+-	--with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+-	--with-mpi-lib=" $ISSM_DIR/externalpackages/mpich2/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpl.a " \
+-	--with-chaco-dir=$ISSM_DIR/externalpackages/chaco/install \
+-	--with-fortran-lib="/usr/local/gfortran/lib/libgfortran.a" \
+-	--with-math-lib="/usr/lib/libm.dylib" \
+-	--with-graphics-lib="/usr/X11R6/lib/libX11.dylib" \
+-	--with-cxxoptflags=" -fno-common -no-cpp-precomp -fexceptions -arch x86_64 -mmacosx-version-min=10.5  -O3 -DNDEBUG -w "\
+-	--with-numthreads=8 \
+-	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
+-	--with-petsc-arch=$ISSM_ARCH \
+-	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-plapack-lib="-L$ISSM_DIR/externalpackages/petsc/install/ -lPLAPACK" \
+-	--with-plapack-include="-I$ISSM_DIR/externalpackages/petsc/install/include/ " \
+-	--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+-	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+-	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13746-13747.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13746-13747.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13746-13747.diff	(revision 13980)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/c/toolkits/python/pythonincludes.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/python/pythonincludes.h	(revision 13746)
++++ ../trunk-jpl/src/c/toolkits/python/pythonincludes.h	(revision 13747)
+@@ -21,13 +21,4 @@
+ #include "Python.h"
+ #include "arrayobject.h"
+ 
+-#ifdef _HAVE_BOOST_
+-using namespace std;
+-#include <boost/python/def.hpp>
+-#include <boost/python.hpp>
+-#include <boost/python/module.hpp>
+-using namespace boost::python;
+-typedef boost::python::numeric::array pyArray;
+ #endif
+-
+-#endif
Index: /issm/oecreview/Archive/13393-13976/ISSM-13747-13748.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13747-13748.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13747-13748.diff	(revision 13980)
@@ -0,0 +1,94 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 13747)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 13748)
+@@ -91,7 +91,7 @@
+ 	AC_SUBST([OSLIBS]) 
+ 	AC_MSG_RESULT(done)
+ 	dnl }}}
+-	dnl Matlab{{{
++	dnl matlab{{{
+ 
+ 	dnl 1. See if matlab has been provided
+ 	AC_ARG_WITH([matlab-dir],
+@@ -232,9 +232,11 @@
+ 	AC_MSG_CHECKING(for python)
+ 	
+ 	if test -d "$PYTHON_ROOT"; then
++	 AC_MSG_RESULT($HAVE_PYTHON)
+ 		dnl defaults
+ 		HAVE_PYTHON3="no"
+-		HAVE_PYTHON=yes
++		HAVE_PYTHON="yes"
++		AC_MSG_RESULT($HAVE_PYTHON)
+ 		
+ 		AC_ARG_WITH([python-version],
+ 		  AS_HELP_STRING([--with-python-version = PYTHONVERSION],[python version.]),
+@@ -275,11 +277,10 @@
+ 		AC_SUBST([PYTHONLINK])
+ 	else
+ 		HAVE_PYTHON=no
++		AC_MSG_RESULT($HAVE_PYTHON)
+ 	fi
+ 	AM_CONDITIONAL([PYTHON], [test x$HAVE_PYTHON = xyes])
+ 	AM_CONDITIONAL([PYTHON3], [test x$HAVE_PYTHON3 = xyes])
+-	AC_MSG_RESULT($HAVE_PYTHON)
+-
+ 	dnl }}}
+ 	dnl python-numpy{{{
+ 	AC_ARG_WITH([python-numpy-dir],
+@@ -578,36 +579,41 @@
+ 	dnl make getlinklibs
+ 	if test -d "$PETSC_ROOT"; then
+ 
+-		PETSCINCL="-I$PETSC_ROOT/$PETSC_ARCH/include -I$PETSC_ROOT/include/$PETSC_ARCH/ -I$PETSC_ROOT/include -I$PETSC_ROOT/ -I$PETSC_ROOT/bmake/$PETSC_ARCH -I$PETSC_ROOT/src/mat/impls/dense/mpi/plapack/"
++	 PETSCINCL=" -I$PETSC_ROOT/include"
++	 dnl Add other location (maybe not needed anymore)
++	 if test -d "$PETSC_ROOT/$PETSC_ARCH/include"; then
++	  PETSCINCL+=" $PETSC_ROOT/$PETSC_ARCH/include"
++	 fi
++	 if test -d "$PETSC_ROOT/include/$PETSC_ARCH"; then
++	  PETSCINCL+=" $PETSC_ROOT/include/$PETSC_ARCH"
++	 fi
+ 	
+-		case "${host_os}" in
++	 case "${host_os}" in
+ 			*cygwin*)
+-			if test "$PETSC_MAJOR" = "2" ; then
+-				PETSCLIB="-link -LIBPATH:\"$PETSC_ROOT/lib\" -LIBPATH:\"$PETSC_ROOT/lib\" -LIBPATH:\"$PETSC_ROOT/lib/$PETSC_ARCH\" libpetscksp.lib  libpetscdm.lib  libpetscmat.lib  libpetscvec.lib libpetscsnes.lib libpetscts.lib libmpiuni.lib libpetsc.lib"
++			if test $PETSC_MAJOR -lt 3 ; then
++				PETSCLIB="-link -LIBPATH:\"$PETSC_ROOT/lib\" libpetscksp.lib libpetscdm.lib libpetscmat.lib libpetscvec.lib libpetscsnes.lib libpetscts.lib libmpiuni.lib libpetsc.lib"
+ 			else
+-				PETSCLIB="-link -LIBPATH:\"$PETSC_ROOT/lib\" -LIBPATH:\"$PETSC_ROOT/lib\" -LIBPATH:\"$PETSC_ROOT/lib/$PETSC_ARCH\" libpetsc.lib"
++				PETSCLIB="-link -LIBPATH:\"$PETSC_ROOT/lib\" libpetsc.lib"
+ 			fi
+ 			;;
+ 			*linux*)
+-			if test "$PETSC_MAJOR" = "2" ; then
+-			PETSCLIB="-L$PETSC_ROOT/lib -L$PETSC_ROOT/lib -L$PETSC_ROOT/lib/$PETSC_ARCH -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetsc  -lpetscsnes -lpetscts"
++			if test $PETSC_MAJOR -lt 3 ; then
++				PETSCLIB="-L$PETSC_ROOT/lib -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetsc  -lpetscsnes -lpetscts"
+ 			else
+-			PETSCLIB="-L$PETSC_ROOT/lib -L$PETSC_ROOT/lib -L$PETSC_ROOT/lib/$PETSC_ARCH -lpetsc -ldl"
++				PETSCLIB="-L$PETSC_ROOT/lib -lpetsc -ldl"
+ 			fi
+ 			;;
+ 			*darwin*)
+-			if test "$PETSC_MAJOR" = "2" ; then
+-			PETSCLIB="-L$PETSC_ROOT/lib -L$PETSC_ROOT/lib/$PETSC_ARCH/ -L$PETSC_ROOT/lib -L$PETSC_ROOT/lib/$PETSC_ARCH -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetscsnes -lpetscts -lpetsc"
++			if test $PETSC_MAJOR -lt 3 ; then
++				PETSCLIB="-L$PETSC_ROOT/lib -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetscsnes -lpetscts -lpetsc"
+ 			else
+-			PETSCLIB="-L$PETSC_ROOT/lib -L$PETSC_ROOT/lib/$PETSC_ARCH/ -L$PETSC_ROOT/lib -L$PETSC_ROOT/lib/$PETSC_ARCH -lpetsc"
++				PETSCLIB="-L$PETSC_ROOT/lib -lpetsc"
+ 			fi
+ 			;;
+ 		esac
+-
+ 		AC_DEFINE([_HAVE_PETSC_],[1],[with PETSc in ISSM src])
+ 		AC_SUBST([PETSCINCL])
+ 		AC_SUBST([PETSCLIB])
+-
+ 		HAVE_PETSC=yes
+ 	else
+ 		HAVE_PETSC=no
Index: /issm/oecreview/Archive/13393-13976/ISSM-13748-13749.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13748-13749.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13748-13749.diff	(revision 13980)
@@ -0,0 +1,7079 @@
+Index: ../trunk-jpl/src/c/python/python-binding.h
+===================================================================
+--- ../trunk-jpl/src/c/python/python-binding.h	(revision 13748)
++++ ../trunk-jpl/src/c/python/python-binding.h	(revision 13749)
+@@ -1,7 +0,0 @@
+-#ifndef _PYTHON_BINDING_H_
+-#define _PYTHON_BINDING_H_
+-
+-#include "./io/pythonio.h"
+-#include "./include/python_macros.h"
+-
+-#endif
+Index: ../trunk-jpl/src/c/python/include/python_macros.h
+===================================================================
+--- ../trunk-jpl/src/c/python/include/python_macros.h	(revision 13748)
++++ ../trunk-jpl/src/c/python/include/python_macros.h	(revision 13749)
+@@ -1,96 +0,0 @@
+-/* \file python_macros.h
+- * \brief: macros used for the python bindings
+- */
+-
+-#ifndef _PYTHON_MACROS_H_
+-#define _PYTHON_MACROS_H_
+-
+-/*Header {{{*/
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-/*}}}*/
+-
+-#ifdef _HAVE_PYTHON_
+-/* MODULEBOOT/MODULEEND {{{*/
+-
+-/*The following macros hide the error exception handling in a matlab module. Just put 
+- * MODULEBOOT(); and MODULEEND(); at the beginning and end of a module, and c++ exceptions 
+- * will be trapped*/
+-#define MODULEBOOT(); \
+-	PyObject *output = PyTuple_New(NLHS); \
+-	int       nrhs   = (int)PyTuple_Size(args);  \
+-	if(!output) return NULL;\
+-	try{ \
+-	IssmComm::SetComm(-1);
+-
+-#define MODULEEND(); }\
+-  catch(ErrorException &exception){\
+-	  PyErr_SetString(PyExc_TypeError,exception.PythonReport()); \
+-	  return NULL;\
+-  } \
+-	catch (exception &e){\
+-		PyErr_SetString(PyExc_TypeError,exprintf("Standard exception: %s\n",e.what()));\
+-		return NULL;\
+-	}\
+-	catch(...){\
+-		PyErr_SetString(PyExc_TypeError,"An unexpected error occurred");\
+-		return NULL;\
+-	}\
+-	return output;
+-//}}}
+-#if _PYTHON_MAJOR_ >=3
+-/* WRAPPER 3.2 {{{*/
+-#define WRAPPER(modulename,...)  \
+-\
+-static PyObject* modulename(PyObject* self,PyObject* args);\
+-static PyMethodDef modulename##_funcs[] = {\
+-	{#modulename, (PyCFunction)modulename, METH_VARARGS, ""},\
+-	{NULL,NULL,0,NULL}\
+-};\
+-\
+-static struct PyModuleDef modulename##module= {\
+-	PyModuleDef_HEAD_INIT,\
+-	#modulename,   /* name of module */\
+-	NULL, /* module documentation, may be NULL */\
+-	-1,       /* size of per-interpreter state of the module,\
+-				 or -1 if the module keeps state in global variables. */\
+-	modulename##_funcs\
+-};\
+-\
+-PyMODINIT_FUNC PyInit_##modulename(void){\
+-\
+-	import_array();\
+-	return PyModule_Create(&modulename##module);\
+-}\
+-\
+-static PyObject* modulename(PyObject* self,PyObject* args)
+-/*}}}*/
+-#else
+-/* WRAPPER 2.7 {{{*/
+-#define WRAPPER(modulename,...)  \
+-\
+-static PyObject* modulename(PyObject* self,PyObject* args);\
+-static PyMethodDef modulename##_funcs[] = {\
+-	{#modulename, (PyCFunction)modulename, METH_VARARGS, ""},\
+-	{NULL,NULL,0,NULL}\
+-};\
+-\
+-PyMODINIT_FUNC init##modulename(void){\
+-\
+-	import_array();\
+-	(void) Py_InitModule(#modulename, modulename##_funcs);\
+-}\
+-\
+-static PyObject* modulename(PyObject* self,PyObject* args)
+-/*}}}*/
+-#endif
+-/* CHECKARGUMENTS {{{*/
+-#define CHECKARGUMENTS(NLHS,NRHS,functionpointer) CheckNumPythonArguments(args, NRHS,functionpointer)
+-/*}}}*/
+-#endif
+-
+-#endif
+Index: ../trunk-jpl/src/c/python/io/pythonio.h
+===================================================================
+--- ../trunk-jpl/src/c/python/io/pythonio.h	(revision 13748)
++++ ../trunk-jpl/src/c/python/io/pythonio.h	(revision 13749)
+@@ -1,43 +0,0 @@
+-/*\file pythonio.h
+- *\brief: I/O for ISSM in python mode
+- */
+-
+-#ifndef _PYTHON_IO_H_
+-#define _PYTHON_IO_H_
+-
+-#ifdef HAVE_CONFIG_H
+-#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif 
+-
+-#include "../../classes/classes.h"
+-#include "../../Container/Container.h"
+-#include "../../include/include.h"
+-
+-void WriteData(PyObject* py_tuple,int index, double* matrix, int M,int N);
+-void WriteData(PyObject* py_tuple,int index, int integer);
+-void WriteData(PyObject* py_tuple,int index, char* string);
+-void WriteData(PyObject* py_tuple,int index);
+-void WriteData(PyObject* py_tuple,int index, SeqMat<double>* matrix);
+-void WriteData(PyObject* py_tuple,int index, SeqVec<double>* vector);
+-void WriteData(PyObject* py_tuple,int index, BamgGeom* bamggeom);
+-void WriteData(PyObject* py_tuple,int index, BamgMesh* bamgmesh);
+-void WriteData(PyObject* py_tuple,int index, RiftStruct* riftstruct);
+-
+-void FetchData(double** pvector,int* pM,PyObject* py_ref);
+-void FetchData(double** pmatrix,int* pM,int *pN,PyObject* py_array);
+-void FetchData(int** pmatrix,int* pM,int *pN,PyObject* py_matrix);
+-void FetchData(char** pstring,PyObject* py_unicode);
+-void FetchData(double* pscalar,PyObject* py_float);
+-void FetchData(int* pinteger,PyObject* py_long);
+-void FetchData(bool* pbool,PyObject* py_boolean);
+-void FetchData(BamgGeom** bamggeom,PyObject* py_dict);
+-void FetchData(BamgMesh** bamgmesh,PyObject* py_dict);
+-void FetchData(BamgOpts** bamgopts,PyObject* py_dict);
+-void FetchData(Options** poptions,int istart, int nrhs,PyObject* py_tuple);
+-void FetchData(DataSet** pcontours,PyObject* py_list);
+-
+-int CheckNumPythonArguments(PyObject* inputs,int NRHS, void (*function)( void ));
+-
+-#endif	/* _IO_H_ */
+Index: ../trunk-jpl/src/c/python/io/CheckNumPythonArguments.cpp
+===================================================================
+--- ../trunk-jpl/src/c/python/io/CheckNumPythonArguments.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/python/io/CheckNumPythonArguments.cpp	(revision 13749)
+@@ -1,35 +0,0 @@
+-/*!\file CheckNumPythonArguments.cpp:
+- * \brief: check number of arguments and report an usage error message.
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#define NO_IMPORT
+-
+-#include "../../toolkits/toolkits.h"
+-#include "../../shared/Exceptions/exceptions.h"
+-#include "../../include/include.h"
+-
+-int CheckNumPythonArguments(PyObject* inputs,int NRHS, void (*function)( void )){
+-
+-	Py_ssize_t size=0;
+-
+-	/*figure out size of tuple in input: */
+-	size=PyTuple_Size(inputs);
+-
+-	/*check on requested size: */
+-	if (size==0){
+-		function();
+-		_error_("usage: see above");
+-	}
+-	else if (size!=NRHS ) {
+-		function(); 
+-		_error_("usage error.");
+-	}
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/python/io/FetchPythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/python/io/FetchPythonData.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/python/io/FetchPythonData.cpp	(revision 13749)
+@@ -1,356 +0,0 @@
+-/*\file FetchData.cpp:
+- * \brief: general I/O interface to fetch data in python
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#define NO_IMPORT
+-
+-#include "../../toolkits/toolkits.h"
+-#include "../../include/include.h"
+-#include "../../shared/shared.h"
+-#include "../../io/io.h"
+-void FetchData(char** pstring,PyObject* py_string);
+-
+-/*Primitive data types*/
+-/*FUNCTION FetchData(double* pscalar,PyObject* py_float){{{*/
+-void FetchData(double* pscalar,PyObject* py_float){
+-
+-	double scalar;
+-
+-	/*return internal value: */
+-	scalar=PyFloat_AsDouble(py_float);
+-
+-	/*output: */
+-	*pscalar=scalar;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(int* pinteger,PyObject* py_long){{{*/
+-void FetchData(int* pinteger, PyObject* py_long){
+-
+-	int integer;
+-
+-	/*return internal value: */
+-	integer=(int)PyLong_AsLong(py_long);
+-
+-	/*output: */
+-	*pinteger=integer;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(bool* pboolean,PyObject* py_boolean){{{*/
+-void FetchData(bool* pboolean,PyObject* py_boolean){
+-
+-	bool boolean;
+-
+-	/*check this is indeed a subtype of long type: */
+-	if(!PyBool_Check(py_boolean))_error_("expecting a boolean in input!");
+-
+-	/*extract boolean: */
+-	boolean=(bool)PyLong_AsLong(py_boolean);
+-
+-	/*simple copy: */
+-	*pboolean=boolean;
+-
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(double** pmatrix,int* pM, int* pN, PyObject* py_matrix){{{*/
+-void FetchData(double** pmatrix,int* pM,int *pN,PyObject* py_matrix){
+-
+-	/*output: */
+-	double* dmatrix=NULL;
+-	double* matrix=NULL;
+-	int M,N;
+-	int ndim;
+-	npy_intp*  dims=NULL;
+-
+-	/*retrive dimensions: */
+-	ndim=PyArray_NDIM((const PyArrayObject*)py_matrix);
+-	if(ndim!=2)_error_("expecting an MxN matrix in input!");
+-	dims=PyArray_DIMS((PyArrayObject*)py_matrix);
+-	M=dims[0]; N=dims[1];
+-
+-	if (M && N) {
+-		/*retrieve internal value: */
+-		dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
+-
+-		/*copy matrix: */
+-		matrix=xNew<double>(M*N);
+-		memcpy(matrix,dmatrix,(M*N)*sizeof(double));
+-	}
+-	else
+-		matrix=NULL;
+-
+-	/*output: */
+-	if(pM)*pM=M;
+-	if(pN)*pN=N;
+-	if(pmatrix)*pmatrix=matrix;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(int** pmatrix,int* pM, int* pN, PyObject* py_matrix){{{*/
+-void FetchData(int** pmatrix,int* pM,int *pN,PyObject* py_matrix){
+-
+-	/*output: */
+-	double* dmatrix=NULL;
+-	int* matrix=NULL;
+-	int M,N;
+-
+-	/*intermediary:*/
+-	int i;
+-	int ndim;
+-	npy_intp*  dims=NULL;
+-
+-	/*retrive dimensions: */
+-	ndim=PyArray_NDIM((const PyArrayObject*)py_matrix);
+-	if(ndim!=2)_error_("expecting an MxN matrix in input!");
+-	dims=PyArray_DIMS((PyArrayObject*)py_matrix);
+-	M=dims[0]; N=dims[1];
+-
+-	if (M && N) {
+-		/*retrieve internal value: */
+-		dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
+-
+-		/*transform into integer matrix: */
+-		matrix=xNew<int>(M*N);
+-		for(i=0;i<M*N;i++)matrix[i]=(int)dmatrix[i];
+-	}
+-	else
+-		matrix=NULL;
+-
+-	/*output: */
+-	if(pM)*pM=M;
+-	if(pN)*pN=N;
+-	if(pmatrix)*pmatrix=matrix;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(double** pvector,int* pM, PyObject* py_vector){{{*/
+-void FetchData(double** pvector,int* pM,PyObject* py_vector){
+-
+-	/*output: */
+-	double* dvector=NULL;
+-	double* vector=NULL;
+-	int M;
+-	int ndim;
+-	npy_intp*  dims=NULL;
+-
+-	/*retrive dimensions: */
+-	ndim=PyArray_NDIM((const PyArrayObject*)py_vector);
+-	if(ndim!=1)_error_("expecting an Mx1 vector in input!");
+-	dims=PyArray_DIMS((PyArrayObject*)py_vector);
+-	M=dims[0]; 
+-
+-	if (M) {
+-		/*retrieve internal value: */
+-		dvector=(double*)PyArray_DATA((PyArrayObject*)py_vector);
+-
+-		/*copy vector: */
+-		vector=xNew<double>(M);
+-		memcpy(vector,dvector,(M)*sizeof(double));
+-	}
+-	else
+-		vector=NULL;
+-
+-	/*output: */
+-	if(pM)*pM=M;
+-	if(pvector)*pvector=vector;
+-}
+-/*}}}*/
+-
+-/*ISSM objects*/
+-/*FUNCTION FetchData(BamgGeom** pbamggeom,PyObject* py_dict){{{*/
+-void FetchData(BamgGeom** pbamggeom,PyObject* py_dict){
+-
+-	/*Initialize output*/
+-	BamgGeom* bamggeom=new BamgGeom();
+-
+-	/*Fetch all fields*/
+-	FetchData(&bamggeom->Vertices,&bamggeom->VerticesSize[0],&bamggeom->VerticesSize[1],PyDict_GetItemString(py_dict,"Vertices"));
+-	FetchData(&bamggeom->Edges, &bamggeom->EdgesSize[0], &bamggeom->EdgesSize[1], PyDict_GetItemString(py_dict,"Edges"));
+-	FetchData(&bamggeom->Corners, &bamggeom->CornersSize[0], &bamggeom->CornersSize[1], PyDict_GetItemString(py_dict,"Corners"));
+-	FetchData(&bamggeom->RequiredVertices,&bamggeom->RequiredVerticesSize[0],&bamggeom->RequiredVerticesSize[1],PyDict_GetItemString(py_dict,"RequiredVertices"));
+-	FetchData(&bamggeom->RequiredEdges, &bamggeom->RequiredEdgesSize[0], &bamggeom->RequiredEdgesSize[1], PyDict_GetItemString(py_dict,"RequiredEdges"));
+-	FetchData(&bamggeom->CrackedEdges,&bamggeom->CrackedEdgesSize[0],&bamggeom->CrackedEdgesSize[1],PyDict_GetItemString(py_dict,"CrackedEdges"));
+-	FetchData(&bamggeom->SubDomains,&bamggeom->SubDomainsSize[0],&bamggeom->SubDomainsSize[1],PyDict_GetItemString(py_dict,"SubDomains"));
+-
+-	/*Assign output pointers:*/
+-	*pbamggeom=bamggeom;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(BamgMesh** pbamgmesh,PyObject* py_dict){{{*/
+-void FetchData(BamgMesh** pbamgmesh,PyObject* py_dict){
+-
+-	/*Initialize output*/
+-	BamgMesh* bamgmesh=new BamgMesh();
+-
+-	/*Fetch all fields*/
+-	FetchData(&bamgmesh->Vertices,&bamgmesh->VerticesSize[0],&bamgmesh->VerticesSize[1],PyDict_GetItemString(py_dict,"Vertices"));
+-	FetchData(&bamgmesh->Edges, &bamgmesh->EdgesSize[0], &bamgmesh->EdgesSize[1], PyDict_GetItemString(py_dict,"Edges"));
+-	FetchData(&bamgmesh->Triangles, &bamgmesh->TrianglesSize[0], &bamgmesh->TrianglesSize[1], PyDict_GetItemString(py_dict,"Triangles"));
+-	FetchData(&bamgmesh->CrackedEdges,&bamgmesh->CrackedEdgesSize[0],&bamgmesh->CrackedEdgesSize[1],PyDict_GetItemString(py_dict,"CrackedEdges"));
+-	FetchData(&bamgmesh->VerticesOnGeomEdge,&bamgmesh->VerticesOnGeomEdgeSize[0],&bamgmesh->VerticesOnGeomEdgeSize[1],PyDict_GetItemString(py_dict,"VerticesOnGeomEdge"));
+-	FetchData(&bamgmesh->VerticesOnGeomVertex,&bamgmesh->VerticesOnGeomVertexSize[0],&bamgmesh->VerticesOnGeomVertexSize[1],PyDict_GetItemString(py_dict,"VerticesOnGeomVertex"));
+-	FetchData(&bamgmesh->EdgesOnGeomEdge, &bamgmesh->EdgesOnGeomEdgeSize[0], &bamgmesh->EdgesOnGeomEdgeSize[1], PyDict_GetItemString(py_dict,"EdgesOnGeomEdge"));
+-	FetchData(&bamgmesh->IssmSegments,&bamgmesh->IssmSegmentsSize[0],&bamgmesh->IssmSegmentsSize[1],PyDict_GetItemString(py_dict,"IssmSegments"));
+-
+-	/*Assign output pointers:*/
+-	*pbamgmesh=bamgmesh;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(BamgOpts** pbamgopts,PyObject* py_dict){{{*/
+-void FetchData(BamgOpts** pbamgopts,PyObject* py_dict){
+-
+-	/*Initialize output*/
+-	BamgOpts* bamgopts=new BamgOpts();
+-
+-	/*Fetch all fields*/
+-	FetchData(&bamgopts->anisomax,PyDict_GetItemString(py_dict,"anisomax"));
+-	FetchData(&bamgopts->cutoff,PyDict_GetItemString(py_dict,"cutoff"));
+-	FetchData(&bamgopts->coeff,PyDict_GetItemString(py_dict,"coeff"));
+-	FetchData(&bamgopts->errg,PyDict_GetItemString(py_dict,"errg"));
+-	FetchData(&bamgopts->gradation,PyDict_GetItemString(py_dict,"gradation"));
+-	FetchData(&bamgopts->Hessiantype,PyDict_GetItemString(py_dict,"Hessiantype"));
+-	FetchData(&bamgopts->MaxCornerAngle,PyDict_GetItemString(py_dict,"MaxCornerAngle"));
+-	FetchData(&bamgopts->maxnbv,PyDict_GetItemString(py_dict,"maxnbv"));
+-	FetchData(&bamgopts->maxsubdiv,PyDict_GetItemString(py_dict,"maxsubdiv"));
+-	FetchData(&bamgopts->Metrictype,PyDict_GetItemString(py_dict,"Metrictype"));
+-	FetchData(&bamgopts->nbjacobi,PyDict_GetItemString(py_dict,"nbjacobi"));
+-	FetchData(&bamgopts->nbsmooth,PyDict_GetItemString(py_dict,"nbsmooth"));
+-	FetchData(&bamgopts->omega,PyDict_GetItemString(py_dict,"omega"));
+-	FetchData(&bamgopts->power,PyDict_GetItemString(py_dict,"power"));
+-	FetchData(&bamgopts->verbose,PyDict_GetItemString(py_dict,"verbose"));
+-
+-	FetchData(&bamgopts->Crack,PyDict_GetItemString(py_dict,"Crack"));
+-	FetchData(&bamgopts->geometricalmetric,PyDict_GetItemString(py_dict,"geometricalmetric"));
+-	FetchData(&bamgopts->KeepVertices,PyDict_GetItemString(py_dict,"KeepVertices"));
+-	FetchData(&bamgopts->splitcorners,PyDict_GetItemString(py_dict,"splitcorners"));
+-
+-	FetchData(&bamgopts->hmin,PyDict_GetItemString(py_dict,"hmin"));
+-	FetchData(&bamgopts->hmax,PyDict_GetItemString(py_dict,"hmax"));
+-	FetchData(&bamgopts->hminVertices,&bamgopts->hminVerticesSize[0],&bamgopts->hminVerticesSize[1],PyDict_GetItemString(py_dict,"hminVertices"));
+-	FetchData(&bamgopts->hmaxVertices,&bamgopts->hmaxVerticesSize[0],&bamgopts->hmaxVerticesSize[1],PyDict_GetItemString(py_dict,"hmaxVertices"));
+-	FetchData(&bamgopts->hVertices,&bamgopts->hVerticesSize[0],&bamgopts->hVerticesSize[1],PyDict_GetItemString(py_dict,"hVertices"));
+-	FetchData(&bamgopts->metric,&bamgopts->metricSize[0],&bamgopts->metricSize[1],PyDict_GetItemString(py_dict,"metric"));
+-	FetchData(&bamgopts->field,&bamgopts->fieldSize[0],&bamgopts->fieldSize[1],PyDict_GetItemString(py_dict,"field"));
+-	FetchData(&bamgopts->err,&bamgopts->errSize[0],&bamgopts->errSize[1],PyDict_GetItemString(py_dict,"err"));
+-
+-	/*Additional checks*/
+-	bamgopts->Check();
+-
+-	/*Assign output pointers:*/
+-	*pbamgopts=bamgopts;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(Options** poptions,int istart, int nrhs,PyObject* py_tuple){{{*/
+-void FetchData(Options** poptions,int istart, int nrhs,PyObject* py_tuple){
+-
+-	char   *name   = NULL;
+-	Option *option = NULL;
+-
+-	/*Initialize output*/
+-	Options* options=new Options();
+-
+-	/*Fetch all options*/
+-	for (int i=istart; i<nrhs; i=i+2){
+-		if (!PyString_Check(PyTuple_GetItem(py_tuple,(Py_ssize_t)i))) _error_("Argument " << i+1 << " must be name of option");
+-
+-		FetchData(&name,PyTuple_GetItem(py_tuple,(Py_ssize_t)i));
+-		if(i+1 == nrhs) _error_("Argument " << i+2 << " must exist and be value of option \"" << name << "\".");
+-
+-		_pprintLine_("FetchData for Options not implemented yet, ignoring option \"" << name << "\"!");
+-
+-//		option=(Option*)OptionParse(name,&PyTuple_GetItem(py_tuple,(Py_ssize_t)(i+1)));
+-//		options->AddOption(option);
+-//		option=NULL;
+-	}
+-
+-	/*Assign output pointers:*/
+-	*poptions=options;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(DataSet** pcontours,PyObject* py_list){{{*/
+-void FetchData(DataSet** pcontours,PyObject* py_list){
+-
+-	int              numcontours,test1,test2;
+-	char            *contourname = NULL;
+-	DataSet         *contours    = NULL;
+-	Contour<double> *contouri    = NULL;
+-	PyObject        *py_dicti    = NULL;
+-	PyObject        *py_item     = NULL;
+-
+-	if (PyString_Check(py_list)){
+-		FetchData(&contourname,py_list);
+-		contours=DomainOutlineRead<double>(contourname);
+-	}
+-	else if(PyList_Check(py_list)){
+-
+-		contours=new DataSet(0);
+-		numcontours=(int)PyList_Size(py_list);
+-
+-		for(int i=0;i<numcontours;i++){
+-
+-			contouri=xNew<Contour<double> >(1);
+-			py_dicti=PyList_GetItem(py_list,(Py_ssize_t)i);
+-
+-			py_item = PyDict_GetItemString(py_dicti,"nods");
+-			if(!py_item) _error_("input structure does not have a 'nods' field");
+-			FetchData(&contouri->nods,py_item);
+-
+-			py_item = PyDict_GetItemString(py_dicti,"x");
+-			if(!py_item) _error_("input structure does not have a 'x' field");
+-			FetchData(&contouri->x,&test1,&test2,py_item);
+-			if(test1!=contouri->nods || test2!=1) _error_("field x should be of size ["<<contouri->nods<<" 1]");
+-
+-			py_item = PyDict_GetItemString(py_dicti,"y");
+-			if(!py_item) _error_("input structure does not have a 'y' field");
+-			FetchData(&contouri->y,&test1,&test2,py_item);
+-			if(test1!=contouri->nods || test2!=1) _error_("field y should be of size ["<<contouri->nods<<" 1]");
+-
+-			contours->AddObject(contouri);
+-		}
+-	}
+-	else{
+-		_error_("Contour is neither a string nor a structure and cannot be loaded");
+-	}
+-
+-	/*clean-up and assign output pointer*/
+-	xDelete<char>(contourname);
+-	*pcontours=contours;
+-}
+-/*}}}*/
+-
+-/*Python version dependent: */
+-#if _PYTHON_MAJOR_ >= 3 
+-/*FUNCTION FetchData(char** pstring,PyObject* py_unicode){{{*/
+-void FetchData(char** pstring,PyObject* py_unicode){
+-
+-	PyObject* py_bytes;
+-	char* string=NULL;
+-
+-	/*convert to bytes format: */
+-	PyUnicode_FSConverter(py_unicode,&py_bytes);
+-
+-	/*convert from bytes to string: */
+-	string=PyBytes_AS_STRING(py_bytes);
+-
+-	*pstring=string;
+-}
+-/*}}}*/
+-#else
+-/*FUNCTION FetchData(char** pstring,PyObject* py_string){{{*/
+-void FetchData(char** pstring,PyObject* py_string){
+-
+-	char* string=NULL;
+-
+-	/*extract internal string: */
+-	string=PyString_AsString(py_string);
+-
+-	/*copy string (note strlen does not include trailing NULL): */
+-	*pstring=xNew<char>(strlen(string)+1);
+-	memcpy(*pstring,string,(strlen(string)+1)*sizeof(char));
+-}
+-/*}}}*/
+-#endif
+Index: ../trunk-jpl/src/c/python/io/WritePythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/python/io/WritePythonData.cpp	(revision 13749)
+@@ -1,198 +0,0 @@
+-/* \file WriteData.c:
+- * \brief: general interface for writing data
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
+-#define NO_IMPORT
+-
+-#include "../../toolkits/toolkits.h"
+-#include "../../include/include.h"
+-#include "../../modules/modules.h"
+-#include "../../Container/Container.h"
+-#include "../../shared/shared.h"
+-#include "../../io/io.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-PyObject* PyArrayFromCopiedData(int dims[2],double* data);
+-PyObject* PyArrayFromCopiedData(int dimi,int dimj,double* data);
+-
+-/*Primitive data types*/
+-/*FUNCTION WriteData(PyObject* py_tuple,int index,int integer){{{*/
+-void WriteData(PyObject* py_tuple, int index, int integer){
+-
+-	PyTuple_SetItem(py_tuple, index, PyInt_FromSsize_t((Py_ssize_t)integer));
+-
+-}/*}}}*/
+-/*FUNCTION WriteData(PyObject* py_tuple,int index,char* string){{{*/
+-void WriteData(PyObject* py_tuple, int index, char* string){
+-
+-	PyTuple_SetItem(py_tuple, index, PyUnicode_FromString(string));
+-
+-}/*}}}*/
+-/*FUNCTION WriteData(PyObject* py_tuple,int index, double* matrix, int M, int N){{{*/
+-void WriteData(PyObject* tuple, int index, double* matrix, int M,int N){
+-
+-	npy_intp dims[2]={0,0};
+-	PyObject* array=NULL;
+-
+-	dims[0]=(npy_intp)M;
+-	dims[1]=(npy_intp)N;
+-	array=PyArray_SimpleNewFromData(2,dims,NPY_DOUBLE,matrix);
+-
+-	PyTuple_SetItem(tuple, index, array);
+-}/*}}}*/
+-/*FUNCTION WriteData(PyObject* py_tuple,int index){{{*/
+-void WriteData(PyObject* py_tuple, int index){
+-
+-	PyTuple_SetItem(py_tuple, index, Py_None);
+-
+-}/*}}}*/
+-
+-/*ISSM objects*/
+-/*FUNCTION WriteData(PyObject* py_tuple,int index,BamgGeom* bamggeom){{{*/
+-void WriteData(PyObject* py_tuple,int index,BamgGeom* bamggeom){
+-
+-	PyObject* dict=NULL;
+-
+-	dict=PyDict_New();
+-
+-	PyDict_SetItemString(dict,"Vertices",PyArrayFromCopiedData(bamggeom->VerticesSize,bamggeom->Vertices));
+-	PyDict_SetItemString(dict,"Edges",PyArrayFromCopiedData(bamggeom->EdgesSize,bamggeom->Edges));
+-	PyDict_SetItemString(dict,"TangentAtEdges",PyArrayFromCopiedData(bamggeom->TangentAtEdgesSize,bamggeom->TangentAtEdges));
+-	PyDict_SetItemString(dict,"Corners",PyArrayFromCopiedData(bamggeom->CornersSize,bamggeom->Corners));
+-	PyDict_SetItemString(dict,"RequiredVertices",PyArrayFromCopiedData(bamggeom->RequiredVerticesSize,bamggeom->RequiredVertices));
+-	PyDict_SetItemString(dict,"RequiredEdges",PyArrayFromCopiedData(bamggeom->RequiredEdgesSize,bamggeom->RequiredEdges));
+-	PyDict_SetItemString(dict,"CrackedEdges",PyArrayFromCopiedData(bamggeom->CrackedEdgesSize,bamggeom->CrackedEdges));
+-	PyDict_SetItemString(dict,"SubDomains",PyArrayFromCopiedData(bamggeom->SubDomainsSize,bamggeom->SubDomains));
+-
+-	PyTuple_SetItem(py_tuple, index, dict);
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(PyObject* py_tuple,int index,BamgMesh* bamgmesh){{{*/
+-void WriteData(PyObject* py_tuple,int index,BamgMesh* bamgmesh){
+-
+-	PyObject* dict=NULL;
+-
+-	dict=PyDict_New();
+-
+-	PyDict_SetItemString(dict,"Vertices",PyArrayFromCopiedData(bamgmesh->VerticesSize,bamgmesh->Vertices));
+-	PyDict_SetItemString(dict,"Edges",PyArrayFromCopiedData(bamgmesh->EdgesSize,bamgmesh->Edges));
+-	PyDict_SetItemString(dict,"Triangles",PyArrayFromCopiedData(bamgmesh->TrianglesSize,bamgmesh->Triangles));
+-	PyDict_SetItemString(dict,"Quadrilaterals",PyArrayFromCopiedData(bamgmesh->QuadrilateralsSize,bamgmesh->Quadrilaterals));
+-	PyDict_SetItemString(dict,"IssmEdges",PyArrayFromCopiedData(bamgmesh->IssmEdgesSize,bamgmesh->IssmEdges));
+-	PyDict_SetItemString(dict,"IssmSegments",PyArrayFromCopiedData(bamgmesh->IssmSegmentsSize,bamgmesh->IssmSegments));
+-	PyDict_SetItemString(dict,"VerticesOnGeomVertex",PyArrayFromCopiedData(bamgmesh->VerticesOnGeomVertexSize,bamgmesh->VerticesOnGeomVertex));
+-	PyDict_SetItemString(dict,"VerticesOnGeomEdge",PyArrayFromCopiedData(bamgmesh->VerticesOnGeomEdgeSize,bamgmesh->VerticesOnGeomEdge));
+-	PyDict_SetItemString(dict,"EdgesOnGeomEdge",PyArrayFromCopiedData(bamgmesh->EdgesOnGeomEdgeSize,bamgmesh->EdgesOnGeomEdge));
+-	PyDict_SetItemString(dict,"SubDomains",PyArrayFromCopiedData(bamgmesh->SubDomainsSize,bamgmesh->SubDomains));
+-	PyDict_SetItemString(dict,"SubDomainsFromGeom",PyArrayFromCopiedData(bamgmesh->SubDomainsFromGeomSize,bamgmesh->SubDomainsFromGeom));
+-	PyDict_SetItemString(dict,"ElementConnectivity",PyArrayFromCopiedData(bamgmesh->ElementConnectivitySize,bamgmesh->ElementConnectivity));
+-	PyDict_SetItemString(dict,"NodalConnectivity",PyArrayFromCopiedData(bamgmesh->NodalConnectivitySize,bamgmesh->NodalConnectivity));
+-	PyDict_SetItemString(dict,"NodalElementConnectivity",PyArrayFromCopiedData(bamgmesh->NodalElementConnectivitySize,bamgmesh->NodalElementConnectivity));
+-	PyDict_SetItemString(dict,"CrackedVertices",PyArrayFromCopiedData(bamgmesh->CrackedVerticesSize,bamgmesh->CrackedVertices));
+-	PyDict_SetItemString(dict,"CrackedEdges",PyArrayFromCopiedData(bamgmesh->CrackedEdgesSize,bamgmesh->CrackedEdges));
+-
+-	PyTuple_SetItem(py_tuple, index, dict);
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(PyObject* py_tuple,int index,SeqMat<double>* matrix){{{*/
+-void WriteData(PyObject* py_tuple,int index,SeqMat<double>* matrix){
+-
+-	int M,N;
+-	double* buffer=NULL;
+-	npy_intp dims[2]={0,0};
+-	PyObject* array=NULL;
+-
+-	buffer=matrix->ToSerial();
+-	matrix->GetSize(&M,&N);
+-	dims[0]=(npy_intp)M;
+-	dims[1]=(npy_intp)N;
+-	array=PyArray_SimpleNewFromData(2,dims,NPY_DOUBLE,buffer);
+-
+-	PyTuple_SetItem(py_tuple, index, array);
+-
+-}/*}}}*/
+-/*FUNCTION WriteData(PyObject* py_tuple,int index,SeqVec<double>* vector){{{*/
+-void WriteData(PyObject* py_tuple,int index,SeqVec<double>* vector){
+-
+-	int M;
+-	double* buffer=NULL;
+-	npy_intp dim=10;
+-	PyObject* array=NULL;
+-
+-	buffer=vector->ToMPISerial();
+-	vector->GetSize(&M);
+-	dim=(npy_intp)M;
+-	array=PyArray_SimpleNewFromData(1,&dim,NPY_DOUBLE,buffer);
+-
+-	PyTuple_SetItem(py_tuple, index, array);
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(PyObject* py_tuple,int index,RiftStruct* riftstruct){{{*/
+-void WriteData(PyObject* py_tuple,int index,RiftStruct* riftstruct){
+-
+-	int i;
+-	PyObject* list=NULL;
+-	PyObject* dict=NULL;
+-
+-	list=PyList_New((Py_ssize_t)0);
+-
+-	for (i=0; i<riftstruct->numrifts; i++) {
+-		dict=PyDict_New();
+-
+-		PyDict_SetItemString(dict,"numsegs"          ,PyInt_FromSsize_t((Py_ssize_t)riftstruct->riftsnumsegments[i]));
+-		PyDict_SetItemString(dict,"segments"         ,PyArrayFromCopiedData(riftstruct->riftsnumsegments[i]    ,3,riftstruct->riftssegments[i]));
+-		PyDict_SetItemString(dict,"pairs"            ,PyArrayFromCopiedData(riftstruct->riftsnumpairs[i]       ,2,riftstruct->riftspairs[i]));
+-		PyDict_SetItemString(dict,"tips"             ,PyArrayFromCopiedData(1                                  ,2,&riftstruct->riftstips[2*i]));
+-		PyDict_SetItemString(dict,"penaltypairs"     ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],7,riftstruct->riftspenaltypairs[i]));
+-		PyDict_SetItemString(dict,"fill"             ,PyInt_FromSsize_t((Py_ssize_t)IceEnum));
+-		PyDict_SetItemString(dict,"friction"         ,PyInt_FromSsize_t((Py_ssize_t)0));
+-		PyDict_SetItemString(dict,"fraction"         ,PyFloat_FromDouble(0.));
+-		PyDict_SetItemString(dict,"fractionincrement",PyFloat_FromDouble(0.1));
+-		PyDict_SetItemString(dict,"state"            ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],1,riftstruct->state[i]));
+-
+-		PyList_Append(list, dict);
+-	}
+-
+-	PyTuple_SetItem(py_tuple, index, list);
+-}
+-/*}}}*/
+-
+-/*Utils*/
+-/*FUNCTION PyArrayFromCopiedData(int dims[2],double* data){{{*/
+-PyObject* PyArrayFromCopiedData(int dims[2],double* data){
+-
+-	double* pydata;
+-	npy_intp pydims[2]={0,0};
+-
+-	/*  note that PyArray_SimpleNewFromData does not copy the data, so that when the original
+-		 object (e.g. bamggeom,bamgmesh) is deleted, the data is gone.  */
+-
+-	pydims[0]=(npy_intp)dims[0];
+-	pydims[1]=(npy_intp)dims[1];
+-	pydata=xNew<IssmDouble>(dims[0]*dims[1]);
+-	memcpy(pydata,data,dims[0]*dims[1]*sizeof(double));
+-	return PyArray_SimpleNewFromData(2,pydims,NPY_DOUBLE,pydata);
+-}
+-/*}}}*/
+-/*FUNCTION PyArrayFromCopiedData(int dimi,int dimj,double* data){{{*/
+-PyObject* PyArrayFromCopiedData(int dimi,int dimj,double* data){
+-
+-	double* pydata;
+-	npy_intp pydims[2]={0,0};
+-
+-	/*  note that PyArray_SimpleNewFromData does not copy the data, so that when the original
+-		 object (e.g. bamggeom,bamgmesh) is deleted, the data is gone.  */
+-
+-	pydims[0]=(npy_intp)dimi;
+-	pydims[1]=(npy_intp)dimj;
+-	pydata=xNew<IssmDouble>(dimi*dimj);
+-	memcpy(pydata,data,dimi*dimj*sizeof(double));
+-	return PyArray_SimpleNewFromData(2,pydims,NPY_DOUBLE,pydata);
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/issm-binding.h
+===================================================================
+--- ../trunk-jpl/src/c/issm-binding.h	(revision 13748)
++++ ../trunk-jpl/src/c/issm-binding.h	(revision 13749)
+@@ -1,18 +0,0 @@
+-#ifndef _ISSM_BINDING_H_
+-#define _ISSM_BINDING_H_
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#ifdef  _HAVE_MATLAB_MODULES_
+-#include "./matlab/matlab-binding.h"
+-#endif
+-
+-#ifdef  _HAVE_PYTHON_MODULES_
+-#include "./python/python-binding.h"
+-#endif
+-
+-#endif
+Index: ../trunk-jpl/src/c/matlab/include/matlab_macros.h
+===================================================================
+--- ../trunk-jpl/src/c/matlab/include/matlab_macros.h	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/include/matlab_macros.h	(revision 13749)
+@@ -1,44 +0,0 @@
+-/* \file matlab macros.h
+- * \brief: macros used for the matlab bindings
+- */
+-
+-/*Header {{{*/
+-#ifndef _MATLAB_MACROS_H_
+-#define _MATLAB_MACROS_H_
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-/*}}}*/
+-
+-#ifdef _HAVE_MATLAB_
+-/* MODULEBOOT/MODULEEND {{{*/
+-
+-/*The following macros hide the error exception handling in a matlab module. Just put 
+- * MODULEBOOT(); and MODULEEND(); at the beginning and end of a module, and c++ exceptions 
+- * will be trapped*/
+-#define MODULEBOOT(); try{ \
+-	IssmComm::SetComm(-1);
+-
+-#define MODULEEND(); }\
+-	catch(ErrorException &exception){\
+-		mexErrMsgTxt(exception.MatlabReport()); \
+-	}\
+-	catch (exception &e){\
+-		mexErrMsgTxt(exprintf("Standard exception: %s\n",e.what()));\
+-	}\
+-	catch(...){\
+-		mexErrMsgTxt("An unexpected error occurred");\
+-	}
+-/*}}}*/
+-/* WRAPPER {{{*/
+-#define WRAPPER(modulename,...) void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) 
+-/*}}}*/
+-/* CHECKARGUMENTS {{{*/
+-#define CHECKARGUMENTS(NLHS,NRHS,functionpointer) CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,functionpointer)
+-/*}}}*/
+-#endif
+-
+-#endif
+Index: ../trunk-jpl/src/c/matlab/io/OptionParse.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/OptionParse.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/OptionParse.cpp	(revision 13749)
+@@ -1,203 +0,0 @@
+-/*\file OptionParse.c
+- *\brief: functions to parse the mex options.
+- */
+-#ifdef HAVE_CONFIG_H
+-    #include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <cstring> 
+-#include <mex.h>
+-#include "../../shared/shared.h"
+-#include "../../io/io.h"
+-#include "../../include/include.h"
+-#include "./matlabio.h"
+-
+-GenericOption<double>* OptionDoubleParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	GenericOption<double> *odouble = NULL;
+-
+-	/*check and parse the name  */
+-	odouble=new GenericOption<double>();
+-	odouble->name =xNew<char>(strlen(name)+1);
+-	memcpy(odouble->name,name,(strlen(name)+1)*sizeof(char));
+-	FetchData(&odouble->value,prhs[0]);
+-	odouble->numel=1;
+-	odouble->ndims=1;
+-	odouble->size=NULL;
+-
+-	return(odouble);
+-}/*}}}*/
+-GenericOption<double*>* OptionDoubleArrayParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	GenericOption<double*> *odouble = NULL;
+-
+-	/*check and parse the name  */
+-	odouble=new GenericOption<double*>();
+-	odouble->name =xNew<char>(strlen(name)+1);
+-	memcpy(odouble->name,name,(strlen(name)+1)*sizeof(char));
+-
+-	/*check and parse the value  */
+-	if (!mxIsClass(prhs[0],"double")){
+-		_error_("Value of option \"" << odouble->name  << "\" must be class \"double\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
+-	}
+-	FetchData(&odouble->value,&odouble->numel,&odouble->ndims,&odouble->size,prhs[0]);
+-
+-	return(odouble);
+-}/*}}}*/
+-GenericOption<bool*>* OptionLogicalParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	GenericOption<bool*> *ological = NULL;
+-
+-	/*check and parse the name  */
+-	ological=new GenericOption<bool*>();
+-	ological->name =xNew<char>(strlen(name)+1);
+-	memcpy(ological->name,name,(strlen(name)+1)*sizeof(char));
+-
+-	/*check and parse the value  */
+-	if (!mxIsClass(prhs[0],"logical")){
+-		_error_("Value of option \"" << ological->name  << "\" must be class \"logical\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
+-	}
+-	FetchData(&ological->value,&ological->numel,&ological->ndims,&ological->size,prhs[0]);
+-
+-	return(ological);
+-}/*}}}*/
+-GenericOption<char*>* OptionCharParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	GenericOption<char*>  *ochar = NULL;
+-
+-	/*check and parse the name  */
+-	ochar=new GenericOption<char*>();
+-	ochar->name =xNew<char>(strlen(name)+1);
+-	memcpy(ochar->name,name,(strlen(name)+1)*sizeof(char));
+-
+-	/*check and parse the value  */
+-	if (!mxIsClass(prhs[0],"char")){
+-		_error_("Value of option \"" << ochar->name  << "\" must be class \"char\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
+-	}
+-	FetchData(&ochar->value,&ochar->numel,&ochar->ndims,&ochar->size,prhs[0]);
+-
+-	return(ochar);
+-}/*}}}*/
+-GenericOption<Options**>* OptionStructParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	int            i;
+-	char           namei[161];
+-	Option*                   option      = NULL;
+-	GenericOption<Options**>  *ostruct    = NULL;
+-	const mwSize  *ipt        = NULL;
+-	const mxArray *structi;
+-	mwIndex        sindex;
+-
+-	/*check and parse the name  */
+-	ostruct=new GenericOption<Options**>();
+-	ostruct->name =xNew<char>(strlen(name)+1);
+-	memcpy(ostruct->name,name,(strlen(name)+1)*sizeof(char));
+-
+-	/*check and parse the value  */
+-	if (!mxIsClass(prhs[0],"struct")){
+-		_error_("Value of option \"" << ostruct->name  << "\" must be class \"struct\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
+-	}
+-	ostruct->numel=mxGetNumberOfElements(prhs[0]);
+-	ostruct->ndims=mxGetNumberOfDimensions(prhs[0]);
+-	ipt           =mxGetDimensions(prhs[0]);
+-	ostruct->size =xNew<int>(ostruct->ndims);
+-	for (i=0; i<ostruct->ndims; i++) ostruct->size[i]=(int)ipt[i];
+-	if (ostruct->numel) ostruct->value=xNew<Options*>(ostruct->numel);
+-
+-	/*loop through and process each element of the struct array  */
+-	for (sindex=0; sindex<ostruct->numel; sindex++) {
+-		ostruct->value[sindex]=new Options;
+-
+-		/*loop through and process each field for the element  */
+-		for (i=0; i<mxGetNumberOfFields(prhs[0]); i++) {
+-			sprintf(namei,"%s.%s",name,mxGetFieldNameByNumber(prhs[0],i));
+-			structi=mxGetFieldByNumber(prhs[0],sindex,i);
+-
+-			option=(Option*)OptionParse(namei,&structi);
+-			ostruct->value[sindex]->AddObject((Object*)option);
+-			option=NULL;
+-		}
+-	}
+-
+-	return(ostruct);
+-}/*}}}*/
+-GenericOption<Options*>* OptionCellParse( char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	int            i;
+-	int           *dims;
+-	char           namei[161];
+-	char           cstr[81];
+-	GenericOption<Options*> *ocell      = NULL;
+-	Option        *option     = NULL;
+-	const mwSize  *ipt        = NULL;
+-	const mxArray *celli;
+-	mwIndex        cindex;
+-
+-	/*check and parse the name  */
+-	ocell=new GenericOption<Options*>();
+-	ocell->name =xNew<char>(strlen(name)+1);
+-	memcpy(ocell->name,name,(strlen(name)+1)*sizeof(char));
+-
+-	/*check and parse the value  */
+-	if (!mxIsClass(prhs[0],"cell")){
+-		_error_("Value of option \"" << ocell->name  << "\" must be class \"cell\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
+-	}
+-
+-	ocell->numel=mxGetNumberOfElements(prhs[0]);
+-	ocell->ndims=mxGetNumberOfDimensions(prhs[0]);
+-	ipt         =mxGetDimensions(prhs[0]);
+-	ocell->size =xNew<int>(ocell->ndims);
+-	for (i=0; i<ocell->ndims; i++) ocell->size[i]=(int)ipt[i];
+-	ocell->value=new Options;
+-
+-	/*loop through and process each element of the cell array  */
+-	dims=xNew<int>(ocell->ndims);
+-	for (cindex=0; cindex<ocell->numel; cindex++) {
+-		ColumnWiseDimsFromIndex(dims,(int)cindex,ocell->size,ocell->ndims);
+-		StringFromDims(cstr,dims,ocell->ndims);
+-		#ifdef _INTEL_WIN_
+-			_snprintf(namei,161,"%s%s",name,cstr);
+-		#else
+-			snprintf(namei,161,"%s%s",name,cstr);
+-		#endif
+-		celli=mxGetCell(prhs[0],cindex);
+-
+-		option=(Option*)OptionParse(namei,&celli);
+-		ocell->value->AddObject((Object*)option);
+-		option=NULL;
+-	}
+-	xDelete<int>(dims);
+-
+-	return(ocell);
+-}/*}}}*/
+-Option* OptionParse(char* name, const mxArray* prhs[]){ /*{{{*/
+-
+-	Option  *option = NULL;
+-	mxArray *lhs[1];
+-
+-	/*parse the value according to the matlab data type  */
+-	if     (mxIsClass(prhs[0],"double")  && (mxGetNumberOfElements(prhs[0])==1))
+-	 option=(Option*)OptionDoubleParse(name,prhs);
+-	else if(mxIsClass(prhs[0],"double")  && (mxGetNumberOfElements(prhs[0])!=1))
+-	 option=(Option*)OptionDoubleArrayParse(name,prhs);
+-	else if(mxIsClass(prhs[0],"logical"))
+-	 option=(Option*)OptionLogicalParse(name,prhs);
+-	else if(mxIsClass(prhs[0],"char"))
+-	 option=(Option*)OptionCharParse(name,prhs);
+-	else if(mxIsClass(prhs[0],"struct"))
+-	 option=(Option*)OptionStructParse(name,prhs);
+-	else if(mxIsClass(prhs[0],"cell"))
+-	 option=(Option*)OptionCellParse(name,prhs);
+-	else {
+-		_pprintLine_("  Converting value of option \"" << name << "\" from unrecognized class \"" << mxGetClassName(prhs[0]) << "\" to class \"" << "struct" << "\".");
+-		if (!mexCallMATLAB(1,lhs,1,(mxArray**)prhs,"struct")) {
+-			option=(Option*)OptionStructParse(name,(const mxArray**)lhs);
+-			mxDestroyArray(lhs[0]);
+-		}
+-		else _error_("Second argument value of option \""<< name <<"\" is of unrecognized class \""<< mxGetClassName(prhs[0]) <<"\".");
+-	}
+-
+-	return(option);
+-}/*}}}*/
+Index: ../trunk-jpl/src/c/matlab/io/MatlabMatrixToSeqMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabMatrixToSeqMat.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/MatlabMatrixToSeqMat.cpp	(revision 13749)
+@@ -1,29 +0,0 @@
+-/*!\file MatlabMatrixToSeqMat.cpp
+- */
+-
+-/*Headers:*/
+-/*{{{*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <mex.h>
+-#include <stdio.h>
+-#include <string.h>
+-#include "../../toolkits/toolkits.h"
+-#include "../../shared/shared.h"
+-#include "./matlabio.h"
+-
+-/*}}}*/
+-
+-SeqMat<double>* MatlabMatrixToSeqMat(const mxArray* dataref){
+-
+-	SeqMat<double>* output=NULL;
+-
+-	output=new SeqMat<double>();
+-	MatlabMatrixToDoubleMatrix(&output->matrix,&output->M,&output->N,dataref);
+-	return output;
+-
+-}
+Index: ../trunk-jpl/src/c/matlab/io/MatlabVectorToPetscVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabVectorToPetscVec.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/MatlabVectorToPetscVec.cpp	(revision 13749)
+@@ -1,108 +0,0 @@
+-/* \file MatlabVectorToPetscVector.cpp
+- * \brief: convert a sparse or dense matlab vector to a serial Petsc vector:
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
+-
+-/*Matlab includes: */
+-#include "mex.h"
+-
+-#include "../../shared/shared.h"
+-#include "matlabio.h"
+-
+-PetscVec* MatlabVectorToPetscVec(const mxArray* mxvector){
+-
+-	int dummy;
+-	PetscVec* vector=new PetscVec();
+-
+-	MatlabVectorToPetscVec(&vector->vector,&dummy, mxvector);
+-
+-	return vector;
+-}
+-
+-int MatlabVectorToPetscVec(Vec* pvector,int* pvector_rows,const mxArray* mxvector){
+-
+-	int rows, cols;
+-	double* mxvector_ptr=NULL;
+-	int ierr;
+-	int i,j;
+-
+-	/*output: */
+-	Vec vector=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex*    ir=NULL;
+-	mwIndex*    jc=NULL;
+-	double* pr=NULL;
+-	int     count;
+-	int     nnz;
+-	int     nz;
+-
+-	/*petsc indices: */
+-	int* idxm=NULL;
+-
+-	/*Ok, first check if we are dealing with a sparse or full vector: */
+-	if (mxIsSparse(mxvector)){
+-
+-		/*Dealing with sparse vector: recover size first: */
+-		mxvector_ptr=(double*)mxGetPr(mxvector);
+-		rows=mxGetM(mxvector);
+-		cols=mxGetN(mxvector);
+-		nnz=mxGetNzmax(mxvector);
+-		nz=(int)((double)nnz/(double)rows);
+-
+-		ierr=VecCreateSeq(PETSC_COMM_SELF,rows,&vector);CHKERRQ(ierr);
+-
+-		/*Now, get ir,jc and pr: */
+-		pr=mxGetPr(mxvector);
+-		ir=mxGetIr(mxvector);
+-		jc=mxGetJc(mxvector);
+-
+-		/*Now, start inserting data into sparse vector: */
+-		count=0;
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<(jc[i+1]-jc[i]);j++){
+-				VecSetValue(vector,ir[count],pr[count],INSERT_VALUES);
+-				count++;
+-			}
+-		}
+-
+-	}
+-	else{
+-
+-		/*Dealing with dense vector: recover pointer and size: */
+-		mxvector_ptr=(double*)mxGetPr(mxvector);
+-		rows=mxGetM(mxvector);
+-		cols=mxGetN(mxvector);
+-
+-		/*Create serial vector: */
+-		ierr=VecCreateSeq(PETSC_COMM_SELF,rows,&vector);CHKERRQ(ierr);
+-
+-		/*Insert mxvector_ptr values into petsc vector: */
+-		idxm=xNew<int>(rows);
+-
+-		for(i=0;i<rows;i++)idxm[i]=i;
+-
+-		ierr=VecSetValues(vector,rows,idxm,mxvector_ptr,INSERT_VALUES);CHKERRQ(ierr);
+-
+-	}
+-
+-	/*Assemble vector: */
+-	VecAssemblyBegin(vector);
+-	VecAssemblyEnd(vector);
+-
+-	/*Assign output pointer: */
+-	*pvector=vector;
+-	*pvector_rows=rows;
+-
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/matlab/io/MatlabVectorToDoubleVector.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabVectorToDoubleVector.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/MatlabVectorToDoubleVector.cpp	(revision 13749)
+@@ -1,94 +0,0 @@
+-/* \file MatlabVectorToDoubleVector.cpp
+- * \brief: convert a sparse or dense matlab vector to a serial vector:
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <string.h>
+-
+-/*Matlab includes: */
+-#include "mex.h"
+-
+-#include "../../shared/shared.h"
+-
+-int MatlabVectorToDoubleVector(double** pvector,int* pvector_rows,const mxArray* mxvector){
+-
+-	int rows,cols;
+-	double* mxvector_ptr=NULL;
+-	int ierr;
+-	int i,j;
+-
+-	/*output: */
+-	double* vector=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex*    ir=NULL;
+-	mwIndex*    jc=NULL;
+-	double* pr=NULL;
+-	int     count;
+-	int     nnz;
+-	int     nz;
+-
+-	/*Ok, first check if we are dealing with a sparse or full vector: */
+-	if (mxIsSparse(mxvector)){
+-
+-		/*Dealing with sparse vector: recover size first: */
+-		mxvector_ptr=(double*)mxGetPr(mxvector);
+-		rows=mxGetM(mxvector);
+-		cols=mxGetN(mxvector);
+-		nnz=mxGetNzmax(mxvector);
+-
+-		/*Check that input is actualy a vector*/
+-		if (cols!=1) _error_("input vector of size " << rows << "x" << cols << " should have only one column");
+-
+-		nz=(int)((double)nnz/(double)rows);
+-
+-		if(rows){
+-			vector=xNewZeroInit<double>(rows);
+-
+-			/*Now, get ir,jc and pr: */
+-			pr=mxGetPr(mxvector);
+-			ir=mxGetIr(mxvector);
+-			jc=mxGetJc(mxvector);
+-
+-			/*Now, start inserting data into sparse vector: */
+-			count=0;
+-			for(i=0;i<cols;i++){
+-				for(j=0;j<(jc[i+1]-jc[i]);j++){
+-					vector[ir[count]]=pr[count];
+-					count++;
+-				}
+-			}
+-		}
+-
+-	}
+-	else{
+-
+-		/*Dealing with dense vector: recover pointer and size: */
+-		mxvector_ptr=(double*)mxGetPr(mxvector);
+-		rows=mxGetM(mxvector);
+-		cols=mxGetN(mxvector);
+-
+-		/*Check that input is actualy a vector*/
+-		if (cols!=1) _error_("input vector of size " << rows << "x" << cols << " should have only one column");
+-
+-		/*allocate and memcpy*/
+-		if(rows){
+-			vector=xNew<double>(rows);
+-			memcpy(vector,mxvector_ptr,rows*sizeof(double));
+-		}
+-		else{
+-			vector=NULL;
+-		}
+-	}
+-
+-	/*Assign output pointer: */
+-	*pvector=vector;
+-	*pvector_rows=rows;
+-
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/FetchMatlabData.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/FetchMatlabData.cpp	(revision 13749)
+@@ -1,693 +0,0 @@
+-/*\file FetchData.cpp:
+- * \brief: general I/O interface to fetch data in matlab
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <mex.h>
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "./matlabio.h"
+-
+-/*Primitive data types*/
+-/*FUNCTION FetchData(double** pmatrix,int* pM,int *pN,const mxArray* dataref){{{*/
+-void FetchData(double** pmatrix,int* pM,int *pN,const mxArray* dataref){
+-
+-	double*  outmatrix=NULL;
+-	int      outmatrix_rows,outmatrix_cols;
+-
+-	if(mxIsEmpty(dataref) ){
+-		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
+-		outmatrix_rows=0;
+-		outmatrix_cols=0;
+-		outmatrix=NULL;
+-	}
+-	else if( mxIsClass(dataref,"double") || 
+-				mxIsClass(dataref,"single") || 
+-				mxIsClass(dataref,"int16") || 
+-				mxIsClass(dataref,"int8") || 
+-				mxIsClass(dataref,"uint8")){
+-		/*Check dataref is not pointing to NaN: */
+-		if ( mxIsNaN(*(mxGetPr(dataref))) && (mxGetM(dataref)==1) && (mxGetN(dataref)==1) ){
+-			outmatrix_rows=0;
+-			outmatrix_cols=0;
+-			outmatrix=NULL;
+-		}
+-		else{
+-			if(!mxIsClass(dataref,"double") && !mxIsClass(dataref,"single")){
+-				_printLine_("Warning: converting matlab data from '" << mxGetClassName(dataref) << "' to 'double'");
+-			}
+-			/*Convert matlab matrix to double* matrix: */
+-			MatlabMatrixToDoubleMatrix(&outmatrix,&outmatrix_rows,&outmatrix_cols,dataref);
+-		}
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pmatrix=outmatrix;
+-	if (pM)*pM=outmatrix_rows;
+-	if (pN)*pN=outmatrix_cols;
+-
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(double** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref){{{*/
+-void FetchData(double** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref){
+-
+-	int     outmatrix_numel,outmatrix_ndims;
+-	double *outmatrix       = NULL;
+-	int    *outmatrix_size  = NULL;
+-
+-	if(mxIsEmpty(dataref) ){
+-		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
+-		outmatrix_numel = 0;
+-		outmatrix_ndims = 0;
+-		outmatrix_size  = NULL;
+-		outmatrix       = NULL;
+-	}
+-	else if( mxIsClass(dataref,"double") || 
+-				mxIsClass(dataref,"single") || 
+-				mxIsClass(dataref,"int16") || 
+-				mxIsClass(dataref,"int8") || 
+-				mxIsClass(dataref,"uint8")){
+-
+-		/*Check dataref is not pointing to NaN: */
+-		if (mxIsNaN(*(mxGetPr(dataref))) && (mxGetNumberOfElements(dataref)==1)){
+-			outmatrix_numel = 0;
+-			outmatrix_ndims = 0;
+-			outmatrix_size  = NULL;
+-			outmatrix       = NULL;
+-		}
+-		else{
+-			if(!mxIsClass(dataref,"double") && !mxIsClass(dataref,"single")){
+-				_printLine_("Warning: converting matlab data from '" << mxGetClassName(dataref) << "' to 'double'");
+-			}
+-			/*Convert matlab n-dim array to double* matrix: */
+-			MatlabNArrayToNArray(&outmatrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
+-		}
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pmatrix=outmatrix;
+-	if (pnumel)*pnumel=outmatrix_numel;
+-	if (pndims)*pndims=outmatrix_ndims;
+-	if (psize )*psize =outmatrix_size;
+-	else xDelete<int>(outmatrix_size);
+-
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(int** pmatrix,int* pM,int *pN,const mxArray* dataref){{{*/
+-void FetchData(int** pmatrix,int* pM,int *pN,const mxArray* dataref){
+-
+-	int     i,outmatrix_rows,outmatrix_cols;
+-	double *doublematrix=NULL;
+-	int    *outmatrix=NULL;
+-
+-	if(mxIsEmpty(dataref) ){
+-		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
+-		outmatrix_rows=0;
+-		outmatrix_cols=0;
+-		outmatrix=NULL;
+-	}
+-	else if( mxIsClass(dataref,"double") || 
+-				mxIsClass(dataref,"single") || 
+-				mxIsClass(dataref,"int16") || 
+-				mxIsClass(dataref,"int8") || 
+-				mxIsClass(dataref,"uint8")){
+-
+-		/*Check dataref is not pointing to NaN: */
+-		if ( mxIsNaN(*(mxGetPr(dataref))) && (mxGetM(dataref)==1) && (mxGetN(dataref)==1) ){
+-			outmatrix_rows=0;
+-			outmatrix_cols=0;
+-			outmatrix=NULL;
+-		}
+-		else{
+-			if(!mxIsClass(dataref,"double") && !mxIsClass(dataref,"single")){
+-				_printLine_("Warning: converting matlab data from '" << mxGetClassName(dataref) << "' to 'double'");
+-			}
+-			/*Convert matlab matrix to double* matrix: */
+-			MatlabMatrixToDoubleMatrix(&doublematrix,&outmatrix_rows,&outmatrix_cols,dataref);
+-
+-			/*Convert double matrix into integer matrix: */
+-			outmatrix=xNew<int>(outmatrix_rows*outmatrix_cols);
+-			for(i=0;i<outmatrix_rows*outmatrix_cols;i++)outmatrix[i]=(int)doublematrix[i];
+-		}
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pmatrix=outmatrix;
+-	if (pM)*pM=outmatrix_rows;
+-	if (pN)*pN=outmatrix_cols;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(bool** pmatrix,int* pM,int *pN,const mxArray* dataref){{{*/
+-void FetchData(bool** pmatrix,int* pM,int *pN,const mxArray* dataref){
+-
+-	int     i,outmatrix_rows,outmatrix_cols;
+-	double *doublematrix=NULL;
+-	bool   *outmatrix=NULL;
+-
+-	if(mxIsEmpty(dataref) ){
+-		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
+-		outmatrix_rows=0;
+-		outmatrix_cols=0;
+-		outmatrix=NULL;
+-	}
+-	else if (mxIsClass(dataref,"double") ){
+-
+-		/*Check dataref is not pointing to NaN: */
+-		if ( mxIsNaN(*(mxGetPr(dataref))) && (mxGetM(dataref)==1) && (mxGetN(dataref)==1) ){
+-			outmatrix_rows=0;
+-			outmatrix_cols=0;
+-			outmatrix=NULL;
+-		}
+-		else{
+-
+-			/*Convert matlab matrix to double* matrix: */
+-			MatlabMatrixToDoubleMatrix(&doublematrix,&outmatrix_rows,&outmatrix_cols,dataref);
+-
+-			/*Convert double matrix into integer matrix: */
+-			outmatrix=xNew<bool>(outmatrix_rows*outmatrix_cols);
+-			for(i=0;i<outmatrix_rows;i++)outmatrix[i]=(bool)doublematrix[i];
+-		}
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pmatrix=outmatrix;
+-	if (pM)*pM=outmatrix_rows;
+-	if (pN)*pN=outmatrix_cols;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(bool** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref){{{*/
+-void FetchData(bool** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref){
+-
+-	int      i;
+-	int      outmatrix_numel,outmatrix_ndims;
+-	int*     outmatrix_size=NULL;
+-	double*  doublematrix=NULL;
+-	bool*    outmatrix=NULL;
+-
+-	if(mxIsEmpty(dataref) ){
+-		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
+-		outmatrix_numel=0;
+-		outmatrix_ndims=0;
+-		outmatrix_size =NULL;
+-		outmatrix=NULL;
+-	}
+-	else if (mxIsClass(dataref,"logical") ){
+-
+-		/*Check dataref is not pointing to NaN: */
+-		if ( mxIsNaN(*((bool*)mxGetData(dataref))) && (mxGetNumberOfElements(dataref)==1) ){
+-			outmatrix_numel=0;
+-			outmatrix_ndims=0;
+-			outmatrix_size =NULL;
+-			outmatrix=NULL;
+-		}
+-		else{
+-
+-			/*Convert matlab n-dim array to bool* matrix: */
+-			MatlabNArrayToNArray(&outmatrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
+-		}
+-	}
+-	else if (mxIsClass(dataref,"double") ){
+-
+-		/*Check dataref is not pointing to NaN: */
+-		if ( mxIsNaN(*(mxGetPr(dataref))) && (mxGetNumberOfElements(dataref)==1) ){
+-			outmatrix_numel=0;
+-			outmatrix_ndims=0;
+-			outmatrix_size =NULL;
+-			outmatrix=NULL;
+-		}
+-		else{
+-
+-			/*Convert matlab n-dim array to double* matrix: */
+-			MatlabNArrayToNArray(&doublematrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
+-
+-			/*Convert double matrix into bool matrix: */
+-			outmatrix=xNew<bool>(outmatrix_numel);
+-			for(i=0;i<outmatrix_numel;i++)outmatrix[i]=(bool)doublematrix[i];
+-			xDelete<double>(doublematrix);
+-		}
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pmatrix=outmatrix;
+-	if (pnumel)*pnumel=outmatrix_numel;
+-	if (pndims)*pndims=outmatrix_ndims;
+-	if (psize )*psize =outmatrix_size;
+-	else xDelete<int>(outmatrix_size);
+-
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(double** pvector,int* pM,const mxArray* dataref){{{*/
+-void FetchData(double** pvector,int* pM,const mxArray* dataref){
+-
+-	double* outvector=NULL;
+-	int outvector_rows;
+-
+-	if(mxIsEmpty(dataref)){
+-		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
+-		outvector_rows=0;
+-		outvector=NULL;
+-	}
+-	else if (mxIsClass(dataref,"double") ){
+-
+-		/*Convert matlab vector to double*  vector: */
+-		MatlabVectorToDoubleVector(&outvector,&outvector_rows,dataref);
+-
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pvector=outvector;
+-	if (pM)*pM=outvector_rows;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(int** pvector,int* pM,const mxArray* dataref){{{*/
+-void FetchData(int** pvector,int* pM,const mxArray* dataref){
+-
+-	int    i;
+-	double *doublevector   = NULL;
+-	int    *outvector      = NULL;
+-	int     outvector_rows;
+-
+-	if(mxIsEmpty(dataref)){
+-		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
+-		outvector_rows=0;
+-		outvector=NULL;
+-	}
+-	else if (mxIsClass(dataref,"double") ){
+-
+-		/*Convert matlab vector to double*  vector: */
+-		MatlabVectorToDoubleVector(&doublevector,&outvector_rows,dataref);
+-
+-		/*Convert double vector into integer vector: */
+-		outvector=xNew<int>(outvector_rows);
+-		for(i=0;i<outvector_rows;i++)outvector[i]=(int)doublevector[i];
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pvector=outvector;
+-	if (pM)*pM=outvector_rows;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(bool** pvector,int* pM,const mxArray* dataref){{{*/
+-void FetchData(bool** pvector,int* pM,const mxArray* dataref){
+-
+-	int    i;
+-	double *doublevector   = NULL;
+-	bool   *outvector      = NULL;
+-	int     outvector_rows;
+-
+-	if(mxIsEmpty(dataref)){
+-		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
+-		outvector_rows=0;
+-		outvector=NULL;
+-	}
+-	else if (mxIsClass(dataref,"double") ){
+-
+-		/*Convert matlab vector to double*  vector: */
+-		MatlabVectorToDoubleVector(&doublevector,&outvector_rows,dataref);
+-
+-		/*Convert double vector into integer vector: */
+-		outvector=xNew<bool>(outvector_rows);
+-		for(i=0;i<outvector_rows;i++)outvector[i]=(bool)doublevector[i];
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pvector=outvector;
+-	if (pM)*pM=outvector_rows;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(float** pvector,int* pM,const mxArray* dataref){{{*/
+-void FetchData(float** pvector,int* pM,const mxArray* dataref){
+-
+-	int    i;
+-	double *doublevector   = NULL;
+-	float  *outvector      = NULL;
+-	int     outvector_rows;
+-
+-	if(mxIsEmpty(dataref)){
+-		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
+-		outvector_rows=0;
+-		outvector=NULL;
+-	}
+-	else if (mxIsClass(dataref,"double") ){
+-
+-		/*Convert matlab vector to double*  vector: */
+-		MatlabVectorToDoubleVector(&doublevector,&outvector_rows,dataref);
+-
+-		/*Convert double vector into float vector: */
+-		outvector=xNew<float>(outvector_rows);
+-		for(i=0;i<outvector_rows;i++)outvector[i]=(float)doublevector[i];
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pvector=outvector;
+-	if (pM)*pM=outvector_rows;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(char** pstring,const mxArray* dataref){{{*/
+-void FetchData(char** pstring,const mxArray* dataref){
+-
+-	char* outstring=NULL;
+-
+-	/*Ok, the string should be coming directly from the matlab workspace: */
+-	if (!mxIsClass(dataref,"char")){
+-		_error_("input data_type is not a string!");
+-	}
+-	else{
+-		/*Recover the string:*/
+-		int stringlen;
+-
+-		stringlen = mxGetM(dataref)*mxGetN(dataref)+1;
+-		outstring =xNew<char>(stringlen);
+-		mxGetString(dataref,outstring,stringlen);
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pstring=outstring;
+-}/*}}}*/
+-/*FUNCTION FetchData(char** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref){{{*/
+-void FetchData(char** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref){
+-
+-	int      outmatrix_numel,outmatrix_ndims;
+-	int*     outmatrix_size=NULL;
+-	char*    outmatrix=NULL;
+-
+-	if(mxIsEmpty(dataref) ){
+-		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
+-		outmatrix_numel=0;
+-		outmatrix_ndims=0;
+-		outmatrix_size =NULL;
+-		outmatrix=NULL;
+-	}
+-	else if (mxIsClass(dataref,"char") ){
+-
+-		/*Convert matlab n-dim array to char* matrix: */
+-		MatlabNArrayToNArray(&outmatrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pmatrix=outmatrix;
+-	if (pnumel)*pnumel=outmatrix_numel;
+-	if (pndims)*pndims=outmatrix_ndims;
+-	if (psize )*psize =outmatrix_size;
+-	else xDelete<int>(outmatrix_size);
+-
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(double* pscalar,const mxArray* dataref){{{*/
+-void FetchData(double* pscalar,const mxArray* dataref){
+-
+-	double scalar;
+-
+-	if (!mxIsClass(dataref,"double")){
+-		_error_("input data_type is not a double!");
+-	}
+-	else{
+-		/*Recover the double: */
+-		scalar=mxGetScalar(dataref);
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pscalar=scalar;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(int* pinteger,const mxArray* dataref){{{*/
+-void FetchData(int* pinteger,const mxArray* dataref){
+-
+-	int integer;
+-
+-	if (!mxIsClass(dataref,"double")){
+-		_error_("input data_type is not a scalar!");
+-	}
+-	else{
+-		/*Recover the double: */
+-		integer=(int)mxGetScalar(dataref);
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pinteger=integer;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(bool* pboolean,const mxArray* dataref){{{*/
+-void FetchData(bool* pboolean,const mxArray* dataref){
+-
+-	bool* mxbool_ptr=NULL;
+-
+-	if (mxIsClass(dataref,"logical")){
+-		if(mxGetM(dataref)!=1) _error_("input data is not of size 1x1");
+-		if(mxGetN(dataref)!=1) _error_("input data is not of size 1x1");
+-		mxbool_ptr=mxGetLogicals(dataref);
+-	}
+-	else{
+-		_error_("input data_type is not a bool!");
+-	}
+-
+-	*pboolean=*mxbool_ptr;
+-}
+-/*}}}*/
+-
+-/*ISSM objects*/
+-/*FUNCTION FetchData(Matrix<double>** pmatrix,const mxArray* dataref){{{*/
+-void FetchData(Matrix<double>** pmatrix,const mxArray* dataref){
+-
+-	Matrix<double>* outmatrix=NULL;
+-	int dummy=0;
+-
+-	if (mxIsClass(dataref,"double") ){
+-
+-		/*Convert matlab matrix to matrix: */
+-		outmatrix=MatlabMatrixToMatrix(dataref);
+-
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pmatrix=outmatrix;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(Vector<double>** pvector,const mxArray* dataref){{{*/
+-void FetchData(Vector<double>** pvector,const mxArray* dataref){
+-
+-	Vector<double>* vector=NULL;
+-	int dummy;
+-
+-	if(mxIsEmpty(dataref)){
+-		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
+-		vector=new Vector<double>(0);
+-	}
+-	else if (mxIsClass(dataref,"double") ){
+-
+-		/*Convert matlab vector to petsc vector: */
+-		vector=MatlabVectorToVector(dataref);
+-	}
+-	else{
+-		/*This is an error: we don't have the correct input!: */
+-		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
+-	}
+-
+-	/*Assign output pointers:*/
+-	*pvector=vector;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(BamgGeom** pbamggeom,const mxArray* dataref){{{*/
+-void FetchData(BamgGeom** pbamggeom,const mxArray* dataref){
+-
+-	/*Initialize output*/
+-	BamgGeom* bamggeom=new BamgGeom();
+-
+-	/*Fetch all fields*/
+-	FetchData(&bamggeom->Vertices,&bamggeom->VerticesSize[0],&bamggeom->VerticesSize[1],mxGetAssignedField(dataref,0,"Vertices"));
+-	FetchData(&bamggeom->Edges, &bamggeom->EdgesSize[0], &bamggeom->EdgesSize[1], mxGetAssignedField(dataref,0,"Edges"));
+-	FetchData(&bamggeom->Corners, &bamggeom->CornersSize[0], &bamggeom->CornersSize[1], mxGetAssignedField(dataref,0,"Corners"));
+-	FetchData(&bamggeom->RequiredVertices,&bamggeom->RequiredVerticesSize[0],&bamggeom->RequiredVerticesSize[1],mxGetAssignedField(dataref,0,"RequiredVertices"));
+-	FetchData(&bamggeom->RequiredEdges, &bamggeom->RequiredEdgesSize[0], &bamggeom->RequiredEdgesSize[1], mxGetAssignedField(dataref,0,"RequiredEdges"));
+-	FetchData(&bamggeom->CrackedEdges,&bamggeom->CrackedEdgesSize[0],&bamggeom->CrackedEdgesSize[1],mxGetAssignedField(dataref,0,"CrackedEdges"));
+-	FetchData(&bamggeom->SubDomains,&bamggeom->SubDomainsSize[0],&bamggeom->SubDomainsSize[1],mxGetAssignedField(dataref,0,"SubDomains"));
+-
+-	/*Assign output pointers:*/
+-	*pbamggeom=bamggeom;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(BamgMesh** pbamgmesh,const mxArray* dataref){{{*/
+-void FetchData(BamgMesh** pbamgmesh,const mxArray* dataref){
+-
+-	/*Initialize output*/
+-	BamgMesh* bamgmesh=new BamgMesh();
+-
+-	/*Fetch all fields*/
+-	FetchData(&bamgmesh->Vertices,&bamgmesh->VerticesSize[0],&bamgmesh->VerticesSize[1],mxGetAssignedField(dataref,0,"Vertices"));
+-	FetchData(&bamgmesh->Edges, &bamgmesh->EdgesSize[0], &bamgmesh->EdgesSize[1], mxGetAssignedField(dataref,0,"Edges"));
+-	FetchData(&bamgmesh->Triangles, &bamgmesh->TrianglesSize[0], &bamgmesh->TrianglesSize[1], mxGetAssignedField(dataref,0,"Triangles"));
+-	FetchData(&bamgmesh->CrackedEdges,&bamgmesh->CrackedEdgesSize[0],&bamgmesh->CrackedEdgesSize[1],mxGetAssignedField(dataref,0,"CrackedEdges"));
+-	FetchData(&bamgmesh->VerticesOnGeomEdge,&bamgmesh->VerticesOnGeomEdgeSize[0],&bamgmesh->VerticesOnGeomEdgeSize[1],mxGetAssignedField(dataref,0,"VerticesOnGeomEdge"));
+-	FetchData(&bamgmesh->VerticesOnGeomVertex,&bamgmesh->VerticesOnGeomVertexSize[0],&bamgmesh->VerticesOnGeomVertexSize[1],mxGetAssignedField(dataref,0,"VerticesOnGeomVertex"));
+-	FetchData(&bamgmesh->EdgesOnGeomEdge, &bamgmesh->EdgesOnGeomEdgeSize[0], &bamgmesh->EdgesOnGeomEdgeSize[1], mxGetAssignedField(dataref,0,"EdgesOnGeomEdge"));
+-	FetchData(&bamgmesh->IssmSegments,&bamgmesh->IssmSegmentsSize[0],&bamgmesh->IssmSegmentsSize[1],mxGetAssignedField(dataref,0,"IssmSegments"));
+-
+-	/*Assign output pointers:*/
+-	*pbamgmesh=bamgmesh;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(BamgOpts** pbamgopts,const mxArray* dataref){{{*/
+-void FetchData(BamgOpts** pbamgopts,const mxArray* dataref){
+-
+-	/*Initialize output*/
+-	BamgOpts* bamgopts=new BamgOpts();
+-
+-	/*Fetch all fields*/
+-	FetchData(&bamgopts->anisomax,mxGetField(dataref,0,"anisomax"));
+-	FetchData(&bamgopts->cutoff,mxGetField(dataref,0,"cutoff"));
+-	FetchData(&bamgopts->coeff,mxGetField(dataref,0,"coeff"));
+-	FetchData(&bamgopts->errg,mxGetField(dataref,0,"errg"));
+-	FetchData(&bamgopts->gradation,mxGetField(dataref,0,"gradation"));
+-	FetchData(&bamgopts->Hessiantype,mxGetField(dataref,0,"Hessiantype"));
+-	FetchData(&bamgopts->MaxCornerAngle,mxGetField(dataref,0,"MaxCornerAngle"));
+-	FetchData(&bamgopts->maxnbv,mxGetField(dataref,0,"maxnbv"));
+-	FetchData(&bamgopts->maxsubdiv,mxGetField(dataref,0,"maxsubdiv"));
+-	FetchData(&bamgopts->Metrictype,mxGetField(dataref,0,"Metrictype"));
+-	FetchData(&bamgopts->nbjacobi,mxGetField(dataref,0,"nbjacobi"));
+-	FetchData(&bamgopts->nbsmooth,mxGetField(dataref,0,"nbsmooth"));
+-	FetchData(&bamgopts->omega,mxGetField(dataref,0,"omega"));
+-	FetchData(&bamgopts->power,mxGetField(dataref,0,"power"));
+-	FetchData(&bamgopts->verbose,mxGetField(dataref,0,"verbose"));
+-
+-	FetchData(&bamgopts->Crack,mxGetField(dataref,0,"Crack"));
+-	FetchData(&bamgopts->geometricalmetric,mxGetField(dataref,0,"geometricalmetric"));
+-	FetchData(&bamgopts->KeepVertices,mxGetField(dataref,0,"KeepVertices"));
+-	FetchData(&bamgopts->splitcorners,mxGetField(dataref,0,"splitcorners"));
+-
+-	FetchData(&bamgopts->hmin,mxGetField(dataref,0,"hmin"));
+-	FetchData(&bamgopts->hmax,mxGetField(dataref,0,"hmax"));
+-	FetchData(&bamgopts->hminVertices,&bamgopts->hminVerticesSize[0],&bamgopts->hminVerticesSize[1],mxGetField(dataref,0,"hminVertices"));
+-	FetchData(&bamgopts->hmaxVertices,&bamgopts->hmaxVerticesSize[0],&bamgopts->hmaxVerticesSize[1],mxGetField(dataref,0,"hmaxVertices"));
+-	FetchData(&bamgopts->hVertices,&bamgopts->hVerticesSize[0],&bamgopts->hVerticesSize[1],mxGetField(dataref,0,"hVertices"));
+-	FetchData(&bamgopts->metric,&bamgopts->metricSize[0],&bamgopts->metricSize[1],mxGetField(dataref,0,"metric"));
+-	FetchData(&bamgopts->field,&bamgopts->fieldSize[0],&bamgopts->fieldSize[1],mxGetField(dataref,0,"field"));
+-	FetchData(&bamgopts->err,&bamgopts->errSize[0],&bamgopts->errSize[1],mxGetField(dataref,0,"err"));
+-
+-	/*Additional checks*/
+-	bamgopts->Check();
+-
+-	/*Assign output pointers:*/
+-	*pbamgopts=bamgopts;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(Options** poptions,const mxArray** pdataref){{{*/
+-void FetchData(Options** poptions,int istart, int nrhs,const mxArray** pdataref){
+-
+-	char   *name   = NULL;
+-	Option *option = NULL;
+-
+-	/*Initialize output*/
+-	Options* options=new Options();
+-
+-	/*Fetch all options*/
+-	for (int i=istart; i<nrhs; i=i+2){
+-		if (!mxIsClass(pdataref[i],"char")) _error_("Argument " << i+1 << " must be name of option");
+-
+-		FetchData(&name,pdataref[i]);
+-		if(i+1 == nrhs) _error_("Argument " << i+2 << " must exist and be value of option \"" << name << "\".");
+-
+-		option=(Option*)OptionParse(name,&pdataref[i+1]);
+-		options->AddOption(option);
+-		option=NULL;
+-	}
+-
+-	/*Assign output pointers:*/
+-	*poptions=options;
+-}
+-/*}}}*/
+-/*FUNCTION FetchData(DataSet** pcontours,const mxArray* dataref){{{*/
+-void FetchData(DataSet** pcontours,const mxArray* dataref){
+-
+-	int              numcontours,index,test1,test2;
+-	char            *contourname = NULL;
+-	DataSet         *contours    = NULL;
+-	Contour<double> *contouri    = NULL;
+-
+-	if (mxIsClass(dataref,"char")){
+-		FetchData(&contourname,dataref);
+-		contours=DomainOutlineRead<double>(contourname);
+-	}
+-	else if(mxIsClass(dataref,"struct")){
+-
+-		contours=new DataSet(0);
+-		numcontours=mxGetNumberOfElements(dataref);
+-
+-		for(int i=0;i<numcontours;i++){
+-
+-			contouri=xNew<Contour<double> >(1);
+-
+-			index = mxGetFieldNumber(dataref,"nods");
+-			if(index==-1) _error_("input structure does not have a 'nods' field");
+-			FetchData(&contouri->nods,mxGetFieldByNumber(dataref,i,index));
+-
+-			index = mxGetFieldNumber(dataref,"x");
+-			if(index==-1) _error_("input structure does not have a 'x' field");
+-			FetchData(&contouri->x,&test1,&test2,mxGetFieldByNumber(dataref,i,index));
+-			if(test1!=contouri->nods || test2!=1) _error_("field x should be of size ["<<contouri->nods<<" 1]");
+-
+-			index = mxGetFieldNumber(dataref,"y");
+-			if(index==-1) _error_("input structure does not have a 'y' field");
+-			FetchData(&contouri->y,&test1,&test2,mxGetFieldByNumber(dataref,i,index));
+-			if(test1!=contouri->nods || test2!=1) _error_("field y should be of size ["<<contouri->nods<<" 1]");
+-
+-			contours->AddObject(contouri);
+-		}
+-	}
+-	else{
+-		_error_("Contour is neither a string nor a structure and cannot be loaded ("<<mxGetClassName(dataref)<<" not supported)");
+-	}
+-
+-	/*clean-up and assign output pointer*/
+-	xDelete<char>(contourname);
+-	*pcontours=contours;
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/matlab/io/CheckNumMatlabArguments.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/CheckNumMatlabArguments.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/CheckNumMatlabArguments.cpp	(revision 13749)
+@@ -1,30 +0,0 @@
+-/*!\file CheckNumMatlabArguments.cpp:
+- * \brief: check number of arguments and report an usage error message.
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../../shared/Exceptions/exceptions.h"
+-#include "../../include/include.h"
+-#include "mex.h"
+-
+-int CheckNumMatlabArguments(int nlhs,int NLHS, int nrhs,int NRHS, const char* __FUNCT__, void (*function)( void )){
+-
+-	/*checks on arguments on the matlab side: */
+-	if (nrhs==0 && nlhs==0) {
+-		/*unless NLHS=0 and NRHS=0, we are just asking for documentation: */
+-		if (NRHS==0 && NLHS==0)return 1;
+-		/* special case: */
+-		function();
+-		_error_("usage: see above");
+-	}
+-	else if (nlhs!=NLHS || nrhs!=NRHS ) {
+-		function(); 
+-		_error_("usage error.");
+-	}
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp	(revision 13749)
+@@ -1,390 +0,0 @@
+-/* \file WriteData.c:
+- * \brief: general interface for writing data
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <mex.h>
+-#include "../../include/include.h"
+-#include "../../shared/shared.h"
+-#include "./matlabio.h"
+-
+-/*Primitive data types*/
+-/*FUNCTION WriteData(mxArray** pdataref,double* matrix, int M,int N){{{*/
+-void WriteData(mxArray** pdataref,double* matrix, int M,int N){
+-
+-	mxArray *dataref  = NULL;
+-	double  *tmatrix  = NULL;
+-
+-	if(matrix){
+-		/*create the matlab matrixwith Matlab's memory manager */   
+-		tmatrix=(double*)mxMalloc(M*N*sizeof(double));
+-		for(int i=0;i<M;i++){
+-			for(int j=0;j<N;j++){
+-				tmatrix[j*M+i]=matrix[i*N+j];
+-			}
+-		}
+-		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
+-		mxSetM(dataref,(mwSize)M);
+-		mxSetN(dataref,(mwSize)N);
+-		mxSetPr(dataref,(double*)tmatrix);
+-	}
+-	else{
+-		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
+-	}
+-	*pdataref=dataref;
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(mxArray** pdataref,int* matrix, int M,int N){{{*/
+-void WriteData(mxArray** pdataref,int* matrix, int M,int N){
+-
+-	mxArray* dataref = NULL;
+-	double*  tmatrix = NULL;
+-
+-	if(matrix){
+-		/*convert to double matrix using Matlab's memory manager*/
+-		double* tmatrix=(double*)mxMalloc(M*N*sizeof(double));
+-		for(int i=0;i<M;i++){
+-			for(int j=0;j<N;j++){
+-				tmatrix[j*M+i]=(double)matrix[i*N+j];
+-			}
+-		}
+-		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
+-		mxSetM(dataref,(mwSize)M);
+-		mxSetN(dataref,(mwSize)N);
+-		mxSetPr(dataref,(double*)tmatrix);
+-	}
+-	else{
+-		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
+-	}
+-	*pdataref=dataref;
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(mxArray** pdataref,double* vector, int M){{{*/
+-void WriteData(mxArray** pdataref,double* vector, int M){
+-
+-	mxArray* dataref       = NULL;
+-	double*  vector_matlab = NULL;
+-
+-	if(vector){
+-
+-		/*create the matlab vector with Matlab's memory manager */
+-		vector_matlab=(double*)mxMalloc(M*sizeof(double));
+-		for(int i=0;i<M;i++) vector_matlab[i]=vector[i];
+-		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
+-		mxSetM(dataref,(mwSize)M);
+-		mxSetN(dataref,(mwSize)1);
+-		mxSetPr(dataref,vector_matlab);
+-	}
+-	else{
+-		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
+-	}
+-
+-	*pdataref=dataref;
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(mxArray** pdataref,double scalar){{{*/
+-void WriteData(mxArray** pdataref,double scalar){
+-
+-	*pdataref=mxCreateDoubleScalar(scalar);
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(mxArray** pdataref,int integer){{{*/
+-void WriteData(mxArray** pdataref,int integer){
+-
+-		*pdataref=mxCreateDoubleScalar((double)integer);
+-
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(mxArray** pdataref,int boolean){{{*/
+-void WriteData(mxArray** pdataref,bool boolean){
+-
+-	*pdataref=mxCreateDoubleScalar((double)boolean);
+-
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(mxArray** pdataref,char* string){{{*/
+-void WriteData(mxArray** pdataref,char* string){
+-
+-		*pdataref=mxCreateString(string);
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(mxArray** pdataref){{{*/
+-void WriteData(mxArray** pdataref){
+-
+-		;
+-
+-}
+-/*}}}*/
+-
+-/*ISSM objects*/
+-/*FUNCTION WriteData(mxArray** pdataref,BamgGeom* bamggeom){{{*/
+-void WriteData(mxArray** pdataref,BamgGeom* bamggeom){
+-
+-	/*Intermediary*/
+-	int         i;
+-	mxArray    *dataref           = NULL;
+-	const int   numfields         = 8;
+-	const char *fnames[numfields];
+-	mwSize      ndim              = 2;
+-	mwSize      dimensions[2]     = {1,1};
+-
+-	/*Initialize field names*/
+-	i=0;
+-	fnames[i++] = "Vertices";
+-	fnames[i++] = "Edges";
+-	fnames[i++] = "TangentAtEdges";
+-	fnames[i++] = "Corners";
+-	fnames[i++] = "RequiredVertices";
+-	fnames[i++] = "RequiredEdges";
+-	fnames[i++] = "CrackedEdges";
+-	fnames[i++] = "SubDomains";
+-	_assert_(i==numfields);
+-
+-	/*Initialize Matlab structure*/
+-	dataref=mxCreateStructArray(ndim,dimensions,numfields,fnames);
+-
+-	/*set each matlab each field*/
+-	i=0;
+-	i++; SetStructureField(dataref,"Vertices",        bamggeom->VerticesSize[0],        bamggeom->VerticesSize[1],        bamggeom->Vertices);
+-	i++; SetStructureField(dataref,"Edges",           bamggeom->EdgesSize[0],           bamggeom->EdgesSize[1],           bamggeom->Edges);
+-	i++; SetStructureField(dataref,"TangentAtEdges",  bamggeom->TangentAtEdgesSize[0],  bamggeom->TangentAtEdgesSize[1],  bamggeom->TangentAtEdges);
+-	i++; SetStructureField(dataref,"Corners",         bamggeom->CornersSize[0],         bamggeom->CornersSize[1],         bamggeom->Corners);
+-	i++; SetStructureField(dataref,"RequiredVertices",bamggeom->RequiredVerticesSize[0],bamggeom->RequiredVerticesSize[1],bamggeom->RequiredVertices);
+-	i++; SetStructureField(dataref,"RequiredEdges",   bamggeom->RequiredEdgesSize[0],   bamggeom->RequiredEdgesSize[1],   bamggeom->RequiredEdges);
+-	i++; SetStructureField(dataref,"CrackedEdges",    bamggeom->CrackedEdgesSize[0],    bamggeom->CrackedEdgesSize[1],    bamggeom->CrackedEdges);
+-	i++; SetStructureField(dataref,"SubDomains",      bamggeom->SubDomainsSize[0],      bamggeom->SubDomainsSize[1],      bamggeom->SubDomains);
+-	_assert_(i==numfields);
+-
+-	/*Assign output*/
+-	*pdataref=dataref;
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(mxArray** pdataref,BamgMesh* bamgmesh){{{*/
+-void WriteData(mxArray** pdataref,BamgMesh* bamgmesh){
+-
+-	/*Intermediary*/
+-	int         i;
+-	mxArray    *dataref           = NULL;
+-	const int   numfields         = 16;
+-	const char *fnames[numfields];
+-	mwSize      ndim              = 2;
+-	mwSize      dimensions[2]     = {1,1};
+-
+-	/*Initialize field names*/
+-	i=0;
+-	fnames[i++] = "Vertices";
+-	fnames[i++] = "Edges";
+-	fnames[i++] = "Triangles";
+-	fnames[i++] = "Quadrilaterals";
+-	fnames[i++] = "IssmEdges";
+-	fnames[i++] = "IssmSegments";
+-	fnames[i++] = "VerticesOnGeomVertex";
+-	fnames[i++] = "VerticesOnGeomEdge";
+-	fnames[i++] = "EdgesOnGeomEdge";
+-	fnames[i++] = "SubDomains";
+-	fnames[i++] = "SubDomainsFromGeom";
+-	fnames[i++] = "ElementConnectivity";
+-	fnames[i++] = "NodalConnectivity";
+-	fnames[i++] = "NodalElementConnectivity";
+-	fnames[i++] = "CrackedVertices";
+-	fnames[i++] = "CrackedEdges";
+-	_assert_(i==numfields);
+-
+-	/*Initialize Matlab structure*/
+-	dataref=mxCreateStructArray(ndim,dimensions,numfields,fnames);
+-
+-	/*set each matlab each field*/
+-	i=0;
+-	i++; SetStructureField(dataref,"Vertices",bamgmesh->VerticesSize[0], bamgmesh->VerticesSize[1],bamgmesh->Vertices);
+-	i++; SetStructureField(dataref,"Edges", bamgmesh->EdgesSize[0],bamgmesh->EdgesSize[1], bamgmesh->Edges);
+-	i++; SetStructureField(dataref,"Triangles", bamgmesh->TrianglesSize[0],bamgmesh->TrianglesSize[1], bamgmesh->Triangles);
+-	i++; SetStructureField(dataref,"Quadrilaterals",bamgmesh->QuadrilateralsSize[0], bamgmesh->QuadrilateralsSize[1],bamgmesh->Quadrilaterals);
+-	i++; SetStructureField(dataref,"IssmEdges", bamgmesh->IssmEdgesSize[0],bamgmesh->IssmEdgesSize[1], bamgmesh->IssmEdges);
+-	i++; SetStructureField(dataref,"IssmSegments",bamgmesh->IssmSegmentsSize[0], bamgmesh->IssmSegmentsSize[1],bamgmesh->IssmSegments);
+-	i++; SetStructureField(dataref,"VerticesOnGeomVertex",bamgmesh->VerticesOnGeomVertexSize[0],bamgmesh->VerticesOnGeomVertexSize[1], bamgmesh->VerticesOnGeomVertex);
+-	i++; SetStructureField(dataref,"VerticesOnGeomEdge",bamgmesh->VerticesOnGeomEdgeSize[0],bamgmesh->VerticesOnGeomEdgeSize[1], bamgmesh->VerticesOnGeomEdge);
+-	i++; SetStructureField(dataref,"EdgesOnGeomEdge", bamgmesh->EdgesOnGeomEdgeSize[0], bamgmesh->EdgesOnGeomEdgeSize[1],bamgmesh->EdgesOnGeomEdge);
+-	i++; SetStructureField(dataref,"SubDomains",bamgmesh->SubDomainsSize[0], bamgmesh->SubDomainsSize[1],bamgmesh->SubDomains);
+-	i++; SetStructureField(dataref,"SubDomainsFromGeom", bamgmesh->SubDomainsFromGeomSize[0], bamgmesh->SubDomainsFromGeomSize[1],bamgmesh->SubDomainsFromGeom);
+-	i++; SetStructureField(dataref,"ElementConnectivity",bamgmesh->ElementConnectivitySize[0],bamgmesh->ElementConnectivitySize[1], bamgmesh->ElementConnectivity);
+-	i++; SetStructureField(dataref,"NodalConnectivity",bamgmesh->NodalConnectivitySize[0],bamgmesh->NodalConnectivitySize[1], bamgmesh->NodalConnectivity);
+-	i++; SetStructureField(dataref,"NodalElementConnectivity", bamgmesh->NodalElementConnectivitySize[0], bamgmesh->NodalElementConnectivitySize[1],bamgmesh->NodalElementConnectivity);
+-	i++; SetStructureField(dataref,"CrackedVertices", bamgmesh->CrackedVerticesSize[0],bamgmesh->CrackedVerticesSize[1], bamgmesh->CrackedVertices);
+-	i++; SetStructureField(dataref,"CrackedEdges",bamgmesh->CrackedEdgesSize[0], bamgmesh->CrackedEdgesSize[1],bamgmesh->CrackedEdges);
+-	_assert_(i==numfields);
+-
+-	/*Assign output*/
+-	*pdataref=dataref;
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(mxArray** pdataref,SeqMat<double>* matrix){{{*/
+-void WriteData(mxArray** pdataref,SeqMat<double>* matrix){
+-
+-	int      i,j;
+-	int      rows,cols;
+-	mxArray *dataref     = NULL;
+-	double  *matrix_ptr  = NULL;
+-	double  *tmatrix_ptr = NULL;
+-
+-	if(matrix){
+-
+-		matrix_ptr=matrix->ToSerial();
+-		matrix->GetSize(&rows,&cols);
+-
+-		/*Now transpose the matrix and allocate with Matlab's memory manager: */
+-		tmatrix_ptr=(double*)mxMalloc(rows*cols*sizeof(double));
+-		for(i=0;i<rows;i++){
+-			for(j=0;j<cols;j++){
+-				tmatrix_ptr[j*rows+i]=matrix_ptr[i*cols+j];
+-			}
+-		}
+-
+-		/*create matlab matrix: */
+-		dataref=mxCreateDoubleMatrix(0,0,mxREAL);
+-		mxSetM(dataref,rows); 
+-		mxSetN(dataref,cols);
+-		mxSetPr(dataref,tmatrix_ptr);
+-
+-		/*Free ressources:*/
+-		xDelete<double>(matrix_ptr);
+-	}
+-	else{
+-		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
+-	}
+-
+-	*pdataref=dataref;
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(mxArray** pdataref,SeqVec<double>* vector){{{*/
+-void WriteData(mxArray** pdataref,SeqVec<double>* vector){
+-
+-	mxArray* dataref=NULL;
+-	double*  vector_ptr=NULL;
+-	double*  vector_matlab=NULL;
+-	int      rows;
+-
+-	if(vector){
+-		/*call toolkit routine: */
+-		vector_ptr=vector->ToMPISerial();
+-		vector->GetSize(&rows);
+-
+-		/*now create the matlab vector with Matlab's memory manager */
+-		vector_matlab=(double*)mxMalloc(rows*sizeof(double));
+-		for(int i=0;i<rows;i++) vector_matlab[i]=vector_ptr[i];
+-
+-		dataref = mxCreateDoubleMatrix(0,0,mxREAL);                         
+-		mxSetM(dataref,rows);
+-		mxSetN(dataref,1);                                                                                          
+-		mxSetPr(dataref,vector_matlab);           
+-	}
+-	else{
+-		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
+-	}
+-
+-	/*Clean-up and return*/
+-	xDelete<double>(vector_ptr);
+-	*pdataref=dataref;
+-}
+-/*}}}*/
+-/*FUNCTION WriteData(mxArray** pdataref,RiftStruct* riftstruct){{{*/
+-void WriteData(mxArray** pdataref,RiftStruct* riftstruct){
+-
+-	/*Intermediary*/
+-	int         i;
+-	mxArray    *dataref           = NULL;
+-	const int   numfields         = 10;
+-	const char *fnames[numfields];
+-	mwSize      ndim              = 2;
+-	mwSize      dimensions[2]     = {1,1};
+-
+-	/*Initialize field names*/
+-	i=0;
+-	fnames[i++] = "numsegs";
+-	fnames[i++] = "segments";
+-	fnames[i++] = "pairs";
+-	fnames[i++] = "tips";
+-	fnames[i++] = "penaltypairs";
+-	fnames[i++] = "fill";
+-	fnames[i++] = "friction";
+-	fnames[i++] = "fraction";
+-	fnames[i++] = "fractionincrement";
+-	fnames[i++] = "state";
+-	_assert_(i==numfields);
+-
+-	/*Initialize matlab structure of dimension numrifts*/
+-	dimensions[0]=riftstruct->numrifts;
+-	dataref=mxCreateStructArray(ndim,dimensions,numfields,fnames);
+-
+-	/*set each matlab each field*/
+-	for(int i=0;i<riftstruct->numrifts;i++){
+-		SetStructureFieldi(dataref,i,"numsegs"          ,riftstruct->riftsnumsegments[i]);
+-		SetStructureFieldi(dataref,i,"segments"         ,riftstruct->riftsnumsegments[i]    ,3,riftstruct->riftssegments[i]);
+-		SetStructureFieldi(dataref,i,"pairs"            ,riftstruct->riftsnumpairs[i]       ,2,riftstruct->riftspairs[i]);
+-		SetStructureFieldi(dataref,i,"tips"             ,1                                  ,2,&riftstruct->riftstips[2*i]);
+-		SetStructureFieldi(dataref,i,"penaltypairs"     ,riftstruct->riftsnumpenaltypairs[i],7,riftstruct->riftspenaltypairs[i]);
+-		SetStructureFieldi(dataref,i,"fill"             ,IceEnum);
+-		SetStructureFieldi(dataref,i,"friction"         ,0);
+-		SetStructureFieldi(dataref,i,"fraction"         ,0.);
+-		SetStructureFieldi(dataref,i,"fractionincrement",0.1);
+-		SetStructureFieldi(dataref,i,"state"            ,riftstruct->riftsnumpenaltypairs[i],1,riftstruct->state[i]);
+-	}
+-
+-	/*Assign output*/
+-	*pdataref=dataref;
+-}
+-/*}}}*/
+-
+-/*Toolkit*/
+-/*FUNCTION SetStructureField{{{*/
+-void SetStructureField(mxArray* dataref,const char* fieldname,int M,int N,double* fieldpointer){
+-
+-	mxArray* field = NULL;
+-
+-	/*Convert field*/
+-	WriteData(&field,fieldpointer,M,N);
+-
+-	/*Assign to structure*/
+-	mxSetField(dataref,0,fieldname,field);
+-}
+-/*}}}*/
+-/*FUNCTION SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int M,int N,double* fieldpointer){{{*/
+-void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int M,int N,double* fieldpointer){
+-
+-	mxArray* field = NULL;
+-
+-	/*Convert field*/
+-	WriteData(&field,fieldpointer,M,N);
+-
+-	/*Assign to structure*/
+-	mxSetField(dataref,i,fieldname,field);
+-}
+-/*}}}*/
+-/*FUNCTION SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int field){{{*/
+-void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int fieldin){
+-
+-	mxArray* field = NULL;
+-
+-	/*Convert field*/
+-	WriteData(&field,fieldin);
+-
+-	/*Assign to structure*/
+-	mxSetField(dataref,i,fieldname,field);
+-}
+-/*}}}*/
+-/*FUNCTION SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,double field){{{*/
+-void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,double fieldin){
+-
+-	mxArray* field = NULL;
+-
+-	/*Convert field*/
+-	WriteData(&field,fieldin);
+-
+-	/*Assign to structure*/
+-	mxSetField(dataref,i,fieldname,field);
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/matlab/io/mxGetAssignedField.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/mxGetAssignedField.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/mxGetAssignedField.cpp	(revision 13749)
+@@ -1,45 +0,0 @@
+-/*!\file: mxGetAssignedField.c: 
+- * \brief: abstract interface on parallel side for i/o, so it ressembles the serial i/o.
+- *
+- * In serial mode, this routine takes care of returning the field coming 
+- * from the model. If largesize is 1, we are running out of core models in 
+- * matlab, and we need to call the subsref private method from the model object
+- * in order to correctly load the data from disk.
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-#include <config.h>
+-#else
+-#error "Cannot compile without HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "mex.h"
+-
+-mxArray* mxGetAssignedField(const mxArray* pmxa_array,int number,const char* field){
+-
+-	//output
+-	mxArray* mxfield=NULL;
+-
+-	//input
+-	mxArray    *inputs[2];
+-	mxArray    *pindex      = NULL;
+-	const char *fnames[2];
+-	mwSize      ndim        = 2;
+-	mwSize      onebyone[2] = {1,1};
+-
+-	//We want to call the subsasgn method, and get the returned array.This ensures that if we are running 
+-	//large sized problems, the data is truly loaded from disk by the model subsasgn class method.
+-	inputs[0]=(mxArray*)pmxa_array; //this is the model
+-
+-	//create index structure used in the assignment (index.type='.' and index.subs='x' for field x for ex)
+-	fnames[0] = "type";
+-	fnames[1] = "subs";
+-	pindex=mxCreateStructArray( ndim,onebyone,2,fnames);
+-	mxSetField( pindex, 0, "type",mxCreateString("."));
+-	mxSetField( pindex, 0, "subs",mxCreateString(field));
+-	inputs[1]=pindex;
+-
+-	mexCallMATLAB( 1, &mxfield, 2, (mxArray**)inputs, "subsref");
+-
+-	return mxfield;
+-}
+Index: ../trunk-jpl/src/c/matlab/io/MatlabMatrixToDoubleMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabMatrixToDoubleMatrix.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/MatlabMatrixToDoubleMatrix.cpp	(revision 13749)
+@@ -1,130 +0,0 @@
+-/* \file MatlabMatrixToDoubleMatrix.cpp
+- * \brief: convert a sparse or dense matlab matrix to a double* pointer
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-/*Matlab includes: */
+-#include "mex.h"
+-#include "../../shared/shared.h"
+-
+-int MatlabMatrixToDoubleMatrix(double** pmatrix,int* pmatrix_rows,int* pmatrix_cols,const mxArray* mxmatrix){
+-
+-	int        i,j,count,rows,cols;
+-
+-	/*output: */
+-	double* matrix=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex*    ir=NULL;
+-	mwIndex*    jc=NULL;
+-
+-	/*Ok, first check if we are dealing with a sparse or full matrix: */
+-	if (mxIsSparse(mxmatrix)){
+-
+-		/*Dealing with sparse matrix: recover size first: */
+-		double* pmxmatrix=(double*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-
+-		if(rows*cols){
+-			matrix=xNewZeroInit<double>(rows*cols);
+-
+-			/*Now, get ir,jc and pr: */
+-			ir=mxGetIr(mxmatrix);
+-			jc=mxGetJc(mxmatrix);
+-
+-			/*Now, start inserting data into double* matrix: */
+-			count=0;
+-			for(i=0;i<cols;i++){
+-				for(j=0;j<(jc[i+1]-jc[i]);j++){
+-					matrix[rows*ir[count]+i]=pmxmatrix[count];
+-					count++;
+-				}
+-			}
+-		}
+-
+-	}
+-	else if(mxIsClass(mxmatrix,"double")){
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		double* pmxmatrix=(double*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		if(rows*cols){
+-			matrix=xNewZeroInit<double>(rows*cols);
+-
+-			for(i=0;i<rows;i++){
+-				for(j=0;j<cols;j++){
+-					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
+-				}
+-			}
+-		}
+-	}
+-	else if(mxIsClass(mxmatrix,"single")){
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		float *pmxmatrix=(float*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		if(rows*cols){
+-			matrix=xNewZeroInit<double>(rows*cols);
+-
+-			for(i=0;i<rows;i++){
+-				for(j=0;j<cols;j++){
+-					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
+-				}
+-			}
+-		}
+-	}
+-	else if(mxIsClass(mxmatrix,"int16")){
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		short int *pmxmatrix=(short*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		if(rows*cols){
+-			matrix=xNewZeroInit<double>(rows*cols);
+-
+-			for(i=0;i<rows;i++){
+-				for(j=0;j<cols;j++){
+-					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
+-				}
+-			}
+-		}
+-	}
+-	else if(mxIsClass(mxmatrix,"uint8")){
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		char *pmxmatrix=(char*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		if(rows*cols){
+-			matrix=xNewZeroInit<double>(rows*cols);
+-
+-			for(i=0;i<rows;i++){
+-				for(j=0;j<cols;j++){
+-					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
+-				}
+-			}
+-		}
+-	}
+-	else{
+-		_error_("Matlab matrix type Not implemented yet");
+-	}
+-
+-	/*Assign output pointer: */
+-	*pmatrix=matrix;
+-	*pmatrix_rows=rows;
+-	*pmatrix_cols=cols;
+-
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/matlab/io/MatlabVectorToVector.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabVectorToVector.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/MatlabVectorToVector.cpp	(revision 13749)
+@@ -1,39 +0,0 @@
+-/*!\file MatlabVectorToVector.cpp
+- */
+-
+-/*Headers:*/
+-/*{{{*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <mex.h>
+-#include <stdio.h>
+-#include <string.h>
+-#include "./matlabio.h"
+-#include "../../classes/classes.h"
+-#include "../../shared/shared.h"
+-#include "../../Container/Container.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-
+-/*}}}*/
+-
+-Vector<double>* MatlabVectorToVector(const mxArray* mxvector){
+-
+-	int dummy;
+-	Vector<double>* vector=NULL;
+-
+-	/*allocate vector object: */
+-	vector=new Vector<double>();
+-
+-	#ifdef _HAVE_PETSC_
+-	vector->pvector=MatlabVectorToPetscVec(mxvector);
+-	#else
+-	vector->svector=MatlabVectorToSeqVec(mxvector);
+-	#endif
+-
+-	return vector;
+-}
+Index: ../trunk-jpl/src/c/matlab/io/MatlabMatrixToPetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabMatrixToPetscMat.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/MatlabMatrixToPetscMat.cpp	(revision 13749)
+@@ -1,123 +0,0 @@
+-/* \file MatlabMatrixToPetscMatrix.cpp
+- * \brief: convert a sparse or dense matlab matrix to a serial Petsc matrix:
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-#include "../../shared/shared.h"
+-
+-/*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
+-
+-/*Matlab includes: */
+-#include "mex.h"
+-#include "matlabio.h"
+-
+-PetscMat* MatlabMatrixToPetscMat(const mxArray* mxmatrix){
+-
+-	int dummy;
+-	PetscMat* matrix=new PetscMat();
+-
+-	MatlabMatrixToPetscMat(&matrix->matrix, &dummy, &dummy, mxmatrix);
+-
+-	return matrix;
+-}
+-int MatlabMatrixToPetscMat(Mat* pmatrix,int* pmatrix_rows,int* pmatrix_cols,const mxArray* mxmatrix){
+-
+-	int rows, cols;
+-	double *mxmatrix_ptr = NULL;
+-	double *tmatrix      = NULL;
+-	int ierr;
+-	int i,j;
+-
+-	/*output: */
+-	Mat matrix = NULL;
+-
+-	/*matlab indices: */
+-	mwIndex *ir = NULL;
+-	mwIndex *jc = NULL;
+-	double  *pr = NULL;
+-	int     count;
+-	int     nnz;
+-	int     nz;
+-
+-	/*petsc indices: */
+-	int *idxm = NULL;
+-	int *idxn = NULL;
+-
+-	/*Ok, first check if we are dealing with a sparse or full matrix: */
+-	if (mxIsSparse(mxmatrix)){
+-
+-		/*Dealing with sparse matrix: recover size first: */
+-		mxmatrix_ptr=(double*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-		nnz=mxGetNzmax(mxmatrix);
+-		if(rows){
+-			nz=(int)((double)nnz/(double)rows);
+-		}
+-		else{
+-			nz=0;
+-		}
+-
+-		ierr=MatCreateSeqAIJ(PETSC_COMM_SELF,rows,cols,nz,PETSC_NULL,&matrix);CHKERRQ(ierr);
+-
+-		/*Now, get ir,jc and pr: */
+-		pr=mxGetPr(mxmatrix);
+-		ir=mxGetIr(mxmatrix);
+-		jc=mxGetJc(mxmatrix);
+-
+-		/*Now, start inserting data into sparse matrix: */
+-		count=0;
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<(jc[i+1]-jc[i]);j++){
+-				MatSetValue(matrix,ir[count],i,pr[count],INSERT_VALUES);
+-				count++;
+-			}
+-		}
+-	}
+-	else{
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		mxmatrix_ptr=(double*)mxGetPr(mxmatrix);
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-
+-		/*transpose, as Petsc now does not allows MAT_COLUMN_ORIENTED matrices in MatSetValues: */
+-		tmatrix=xNew<double>(rows*cols);
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<rows;j++){
+-				*(tmatrix+rows*i+j)=*(mxmatrix_ptr+cols*j+i);
+-			}
+-		}
+-
+-		/*Create serial matrix: */
+-		ierr=MatCreateSeqDense(PETSC_COMM_SELF,rows,cols,NULL,&matrix);CHKERRQ(ierr);
+-
+-		/*Insert mxmatrix_ptr values into petsc matrix: */
+-		idxm=xNew<int>(rows);
+-		idxn=xNew<int>(cols);
+-
+-		for(i=0;i<rows;i++)idxm[i]=i;
+-		for(i=0;i<cols;i++)idxn[i]=i;
+-
+-		ierr=MatSetValues(matrix,rows,idxm,cols,idxn,tmatrix,INSERT_VALUES); CHKERRQ(ierr);
+-
+-		xDelete<double>(tmatrix);
+-	}
+-
+-	/*Assemble matrix: */
+-	MatAssemblyBegin(matrix,MAT_FINAL_ASSEMBLY); 
+-	MatAssemblyEnd(matrix,MAT_FINAL_ASSEMBLY);
+-
+-	/*Assign output pointer: */
+-	*pmatrix=matrix;
+-	if(pmatrix_rows) *pmatrix_rows=rows;
+-	if(pmatrix_cols) *pmatrix_cols=cols;
+-
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/matlab/io/matlabio.h
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/matlabio.h	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/matlabio.h	(revision 13749)
+@@ -1,93 +0,0 @@
+-/*\file matlabio.h
+- *\brief: I/O for ISSM in matlab mode
+- */
+-
+-#ifndef _MATLAB_IO_H_
+-#define _MATLAB_IO_H_
+-
+-#ifdef HAVE_CONFIG_H
+-#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif 
+-
+-#include <mex.h>
+-#include "../../classes/classes.h"
+-#include "../../Container/Container.h"
+-#include "../../include/include.h"
+-
+-void WriteData(mxArray** pdataref,SeqMat<double>* matrix);
+-void WriteData(mxArray** pdataref,double* matrix, int M,int N);
+-void WriteData(mxArray** pdataref,int*    matrix, int M,int N);
+-void WriteData(mxArray** pdataref,SeqVec<double>* vector);
+-void WriteData(mxArray** pdataref,double* vector, int M);
+-void WriteData(mxArray** pdataref,int integer);
+-void WriteData(mxArray** pdataref,bool boolean);
+-void WriteData(mxArray** pdataref,double scalar);
+-void WriteData(mxArray** pdataref,char* string);
+-void WriteData(mxArray** pdataref);
+-void WriteData(mxArray** pdataref,BamgGeom* bamggeom);
+-void WriteData(mxArray** pdataref,BamgMesh* bamgmesh);
+-void WriteData(mxArray** pdataref,RiftStruct* riftstruct);
+-
+-void FetchData(double** pmatrix,int* pM,int *pN,const mxArray* dataref);
+-void FetchData(double** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref);
+-void FetchData(int** pmatrix,int* pM,int *pN,const mxArray* dataref);
+-void FetchData(bool** pmatrix,int* pM,int *pN,const mxArray* dataref);
+-void FetchData(bool** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref);
+-void FetchData(Matrix<double>** pmatrix,const mxArray* dataref);
+-void FetchData(int** pvector,int* pM,const mxArray* dataref);
+-void FetchData(float** pvector,int* pM,const mxArray* dataref);
+-void FetchData(double** pvector,int* pM,const mxArray* dataref);
+-void FetchData(bool** pvector,int* pM,const mxArray* dataref);
+-void FetchData(Vector<double>** pvector,const mxArray* dataref);
+-void FetchData(char** pstring,const mxArray* dataref);
+-void FetchData(char** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref);
+-void FetchData(double* pscalar,const mxArray* dataref);
+-void FetchData(int* pinteger,const mxArray* dataref);
+-void FetchData(bool* pbool,const mxArray* dataref);
+-void FetchData(BamgGeom** bamggeom,const mxArray* dataref);
+-void FetchData(BamgMesh** bamgmesh,const mxArray* dataref);
+-void FetchData(BamgOpts** bamgopts,const mxArray* dataref);
+-void FetchData(Options** poptions,int istart, int nrhs,const mxArray** pdataref);
+-void FetchData(DataSet** pcontours,const mxArray* dataref);
+-
+-Option* OptionParse(char* name, const mxArray* prhs[]);
+-GenericOption<double>*    OptionDoubleParse( char* name, const mxArray* prhs[]);
+-GenericOption<double*>*   OptionDoubleArrayParse( char* name, const mxArray* prhs[]);
+-GenericOption<bool*>*     OptionLogicalParse( char* name, const mxArray* prhs[]);
+-GenericOption<char*>*     OptionCharParse( char* name, const mxArray* prhs[]);
+-GenericOption<Options**>* OptionStructParse( char* name, const mxArray* prhs[]);
+-GenericOption<Options*>*  OptionCellParse( char* name, const mxArray* prhs[]);
+-
+-mxArray* mxGetAssignedField(const mxArray* pmxa_array,int number, const char* field);
+-void SetStructureField(mxArray* dataref,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer);
+-void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer);
+-void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int field);
+-void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,double field);
+-int CheckNumMatlabArguments(int nlhs,int NLHS, int nrhs,int NRHS, const char* THISFUNCTION, void (*function)( void ));
+-
+-/*Matlab to Matrix routines: */
+-Matrix<double>* MatlabMatrixToMatrix(const mxArray* mxmatrix);
+-Vector<double>* MatlabVectorToVector(const mxArray* mxvector);
+-
+-/*Matlab to double* routines: */
+-int MatlabVectorToDoubleVector(double** pvector,int* pvector_rows,const mxArray* mxvector);
+-int MatlabMatrixToDoubleMatrix(double** pmatrix,int* pmatrix_rows,int* pmatrix_cols,const mxArray* mxmatrix);
+-int MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix);
+-int MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix);
+-int MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix);
+-
+-/*Matlab to SeqMat routines: */
+-SeqMat<double>* MatlabMatrixToSeqMat(const mxArray* dataref);
+-SeqVec<double>* MatlabVectorToSeqVec(const mxArray* dataref);
+-
+-/*Matlab to Petsc routines: */
+-#ifdef _HAVE_PETSC_
+-int MatlabMatrixToPetscMat(Mat* matrix,int* prows,int* pcols, const mxArray* mxmatrix);
+-PetscMat* MatlabMatrixToPetscMat(const mxArray* mxmatrix);
+-int MatlabVectorToPetscVec(Vec* pvector,int* pvector_rows,const mxArray* mxvector);
+-PetscVec* MatlabVectorToPetscVec(const mxArray* mxvector);
+-#endif
+-
+-#endif	/* _IO_H_ */
+Index: ../trunk-jpl/src/c/matlab/io/MatlabVectorToSeqVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabVectorToSeqVec.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/MatlabVectorToSeqVec.cpp	(revision 13749)
+@@ -1,29 +0,0 @@
+-/*!\file MatlabVectorToSeqVec.cpp
+- */
+-
+-/*Headers:*/
+-/*{{{*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <mex.h>
+-#include <stdio.h>
+-#include <string.h>
+-#include "../../toolkits/toolkits.h"
+-#include "../../shared/shared.h"
+-#include "./matlabio.h"
+-
+-/*}}}*/
+-
+-SeqVec<double>* MatlabVectorToSeqVec(const mxArray* dataref){
+-
+-	SeqVec<double>* output=NULL;
+-
+-	output=new SeqVec<double>();
+-	MatlabVectorToDoubleVector(&output->vector,&output->M,dataref);
+-	return output;
+-
+-}
+Index: ../trunk-jpl/src/c/matlab/io/MatlabNArrayToNArray.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabNArrayToNArray.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/MatlabNArrayToNArray.cpp	(revision 13749)
+@@ -1,251 +0,0 @@
+-/* \file MatlabNArrayToNArray.cpp
+- * \brief: convert a sparse or dense matlab n-dimensional array to cpp n-dimensional array
+- */
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-
+-#include <mex.h>
+-
+-/*FUNCTION MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
+-int MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
+-
+-	int  i,j,rows,cols;
+-	int  numel,ndims;
+-	int *size,*dims;
+-	double* mxmatrix_ptr=NULL;
+-	const mwSize* ipt=NULL;
+-
+-	/*output: */
+-	double* matrix=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex *ir    = NULL;
+-	mwIndex *jc    = NULL;
+-	double  *pr    = NULL;
+-	int      count;
+-
+-	/*get Matlab matrix information: */
+-	numel=mxGetNumberOfElements(mxmatrix);
+-	ndims=mxGetNumberOfDimensions(mxmatrix);
+-	ipt  =mxGetDimensions(mxmatrix);
+-	size =xNew<int>(ndims);
+-	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
+-
+-	/*Ok, first check if we are dealing with a sparse or full matrix: */
+-	if (mxIsSparse(mxmatrix)){
+-
+-		/*Dealing with sparse matrix: recover size first: */
+-		rows = mxGetM(mxmatrix);
+-		cols = mxGetN(mxmatrix);
+-
+-		matrix=xNewZeroInit<double>(rows*cols);
+-
+-		/*Now, get ir,jc and pr: */
+-		ir = mxGetIr(mxmatrix);
+-		jc = mxGetJc(mxmatrix);
+-		pr = mxGetPr(mxmatrix);
+-
+-		/*Now, start inserting data into double* matrix: */
+-		count=0;
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<(jc[i+1]-jc[i]);j++){
+-				*(matrix+rows*ir[count]+i)=pr[count];
+-				count++;
+-			}
+-		}
+-
+-	}
+-	else{
+-
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		mxmatrix_ptr=(double*)mxGetPr(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		matrix=xNewZeroInit<double>(numel);
+-
+-		dims=xNew<int>(ndims);
+-		for(i=0;i<numel;i++){
+-			ColumnWiseDimsFromIndex(dims,i,size,ndims);
+-			j = IndexFromRowWiseDims(dims,size,ndims);
+-			matrix[j]=(double)mxmatrix_ptr[i];
+-		}
+-		xDelete<int>(dims);
+-	}
+-
+-	/*Assign output pointer: */
+-	*pmatrix       = matrix;
+-	*pmatrix_numel = numel;
+-	*pmatrix_ndims = ndims;
+-	*pmatrix_size  = size;
+-
+-	return 1;
+-}
+-/*}}}*/
+-/*FUNCTION MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
+-int MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
+-
+-	int  i,j,rows,cols;
+-	int  numel,ndims;
+-	int *size,*dims;
+-	bool* mxmatrix_ptr=NULL;
+-	const mwSize* ipt=NULL;
+-
+-	/*output: */
+-	bool* matrix=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex *ir    = NULL;
+-	mwIndex *jc    = NULL;
+-	bool    *pm    = NULL;
+-	int      count;
+-
+-	/*get Matlab matrix information: */
+-	numel = mxGetNumberOfElements(mxmatrix);
+-	ndims = mxGetNumberOfDimensions(mxmatrix);
+-	ipt   = mxGetDimensions(mxmatrix);
+-	size  = xNew<int>(ndims);
+-	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
+-
+-	/*Ok, first check if we are dealing with a sparse or full matrix: */
+-	if (mxIsSparse(mxmatrix)){
+-
+-		/*Dealing with sparse matrix: recover size first: */
+-		rows=mxGetM(mxmatrix);
+-		cols=mxGetN(mxmatrix);
+-		matrix=xNewZeroInit<bool>(rows*cols);
+-
+-		/*Now, get ir,jc and pm: */
+-		ir=mxGetIr(mxmatrix);
+-		jc=mxGetJc(mxmatrix);
+-		pm=(bool*)mxGetData(mxmatrix);
+-
+-		/*Now, start inserting data into bool* matrix: */
+-		count=0;
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<(jc[i+1]-jc[i]);j++){
+-				matrix[rows*ir[count]+i]=pm[count];
+-				count++;
+-			}
+-		}
+-	}
+-	else{
+-
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		mxmatrix_ptr=(bool*)mxGetData(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		matrix=xNew<bool>(numel);
+-		dims=xNew<int>(ndims);
+-		for(i=0;i<numel;i++){
+-			ColumnWiseDimsFromIndex(dims,i,size,ndims);
+-			j=IndexFromRowWiseDims(dims,size,ndims);
+-			matrix[j]=(bool)mxmatrix_ptr[i];
+-		}
+-		xDelete<int>(dims);
+-	}
+-
+-	/*Assign output pointer: */
+-	*pmatrix       = matrix;
+-	*pmatrix_numel = numel;
+-	*pmatrix_ndims = ndims;
+-	*pmatrix_size  = size;
+-
+-	return 1;
+-}
+-/*}}}*/
+-/*FUNCTION MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
+-int MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
+-
+-	int           i,j,rows,cols;
+-	int           numel,ndims;
+-	int          *size , *dims;
+-	mxChar       *mxmatrix_ptr = NULL;
+-	const mwSize *ipt          = NULL;
+-
+-	/*output: */
+-	char* matrix=NULL;
+-
+-	/*matlab indices: */
+-	mwIndex *ir    = NULL;
+-	mwIndex *jc    = NULL;
+-	char    *pm    = NULL;
+-	int      count;
+-
+-	/*get Matlab matrix information: */
+-	numel = mxGetNumberOfElements(mxmatrix);
+-	ndims = mxGetNumberOfDimensions(mxmatrix);
+-	ipt   = mxGetDimensions(mxmatrix);
+-	size  = xNew<int>(ndims);
+-	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
+-
+-	/*Ok, first check if we are dealing with a sparse or full matrix: */
+-	if (mxIsSparse(mxmatrix)){
+-
+-		/*Dealing with sparse matrix: recover size first: */
+-		rows = mxGetM(mxmatrix);
+-		cols = mxGetN(mxmatrix);
+-		matrix=xNew<char>(rows*cols);
+-
+-		/*Now, get ir,jc and pm: */
+-		ir = mxGetIr(mxmatrix);
+-		jc = mxGetJc(mxmatrix);
+-		pm = (char*)mxGetData(mxmatrix);
+-
+-		/*Now, start inserting data into char* matrix: */
+-		count=0;
+-		for(i=0;i<cols;i++){
+-			for(j=0;j<(jc[i+1]-jc[i]);j++){
+-				matrix[rows*ir[count]+i]=(char)pm[count];
+-				count++;
+-			}
+-		}
+-	}
+-	else{
+-		/*Dealing with dense matrix: recover pointer and size: */
+-		mxmatrix_ptr=mxGetChars(mxmatrix);
+-
+-		/*Create serial matrix: */
+-		matrix=xNew<char>(numel+1);
+-		matrix[numel]='\0';
+-
+-		/*looping code adapted from Matlab example explore.c: */
+-		int elements_per_page = size[0] * size[1];
+-		/* total_number_of_pages = size[2] x size[3] x ... x size[N-1] */
+-		int total_number_of_pages = 1;
+-		for (i=2; i<ndims; i++) {
+-			total_number_of_pages *= size[i];
+-		}
+-
+-		i=0;
+-		for (int page=0; page < total_number_of_pages; page++) {
+-			int row;
+-			/* On each page, walk through each row. */
+-			for (row=0; row<size[0]; row++)  {
+-				int column;
+-				j = (page * elements_per_page) + row;
+-
+-				/* Walk along each column in the current row. */
+-				for (column=0; column<size[1]; column++) {
+-					*(matrix+i++)=(char)*(mxmatrix_ptr+j);
+-					j += size[0];
+-				}
+-			}
+-		}
+-	}
+-
+-	/*Assign output pointer: */
+-	*pmatrix       = matrix;
+-	*pmatrix_numel = numel;
+-	*pmatrix_ndims = ndims;
+-	*pmatrix_size  = size;
+-
+-	return 1;
+-}
+-/*}}}*/
+Index: ../trunk-jpl/src/c/matlab/io/MatlabMatrixToMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/matlab/io/MatlabMatrixToMatrix.cpp	(revision 13748)
++++ ../trunk-jpl/src/c/matlab/io/MatlabMatrixToMatrix.cpp	(revision 13749)
+@@ -1,39 +0,0 @@
+-/*!\file MatlabMatrixToMatrix.cpp
+- */
+-
+-/*Headers:*/
+-/*{{{*/
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include <mex.h>
+-#include <stdio.h>
+-#include <string.h>
+-#include "./matlabio.h"
+-#include "../../classes/classes.h"
+-#include "../../shared/shared.h"
+-#include "../../Container/Container.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-
+-/*}}}*/
+-
+-Matrix<double>* MatlabMatrixToMatrix(const mxArray* mxmatrix){
+-
+-	int dummy;
+-	Matrix<double>* matrix=NULL;
+-
+-	/*allocate matrix object: */
+-	matrix=new Matrix<double>();
+-
+-	#ifdef _HAVE_PETSC_
+-	matrix->pmatrix=MatlabMatrixToPetscMat(mxmatrix);
+-	#else
+-	matrix->smatrix=MatlabMatrixToSeqMat(mxmatrix);
+-	#endif
+-
+-	return matrix;
+-}
+Index: ../trunk-jpl/src/c/toolkits/python/pythonincludes.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/python/pythonincludes.h	(revision 13748)
++++ ../trunk-jpl/src/c/toolkits/python/pythonincludes.h	(revision 13749)
+@@ -1,24 +0,0 @@
+-/* \file pythonincludes.h
+- * \brief all includes for PYTHON layer
+- */
+-
+-#ifndef _PYTHON_INCLUDES_H_
+-#define _PYTHON_INCLUDES_H_
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#if _PYTHON_MAJOR_ == 2
+-#undef NPY_NO_DEPRECATED_API
+-#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
+-#else
+-#define NPY_NO_DEPRECATED_API 
+-#endif
+-
+-#include "Python.h"
+-#include "arrayobject.h"
+-
+-#endif
+Index: ../trunk-jpl/src/c/toolkits/toolkits.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/toolkits.h	(revision 13748)
++++ ../trunk-jpl/src/c/toolkits/toolkits.h	(revision 13749)
+@@ -11,10 +11,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-#ifdef _HAVE_PYTHON_
+-#include "./python/pythonincludes.h"
+-#endif
+-
+ #ifdef _HAVE_PETSC_
+ #include "./petsc/petscincludes.h"
+ #endif
+@@ -30,5 +26,4 @@
+ #include "./triangle/triangleincludes.h"
+ #include "./toolkitsenums.h"
+ #include "./issm/issmtoolkit.h"
+-
+ #endif
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13748)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13749)
+@@ -1,4 +1,4 @@
+-AM_CPPFLAGS = @DAKOTAINCL@ @SHAPELIBINCL@ @PETSCINCL@ @SLEPCINCL@ @MPIINCL@ @MATLABINCL@ @METISINCL@ @CHACOINCL@ @SCOTCHINCL@ @PLAPACKINCL@ @BLASLAPACKINCL@ @MKLINCL@ @MUMPSINCL@ @TRIANGLEINCL@ @SPAIINCL@ @HYPREINCL@ @PROMETHEUSINCL@ @SUPERLUINCL@ @SPOOLESINCL@ @PASTIXINCL@ @MLINCL@ @TAOINCL@ @ADIC2INCL@ @ADOLCINCL@ @GSLINCL@ @BOOSTINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@
++AM_CPPFLAGS = @DAKOTAINCL@ @SHAPELIBINCL@ @PETSCINCL@ @SLEPCINCL@ @MPIINCL@ @METISINCL@ @CHACOINCL@ @SCOTCHINCL@ @PLAPACKINCL@ @BLASLAPACKINCL@ @MKLINCL@ @MUMPSINCL@ @TRIANGLEINCL@ @SPAIINCL@ @HYPREINCL@ @PROMETHEUSINCL@ @SUPERLUINCL@ @SPOOLESINCL@ @PASTIXINCL@ @MLINCL@ @TAOINCL@ @ADIC2INCL@ @ADOLCINCL@ @GSLINCL@ @BOOSTINCL@
+ 
+ EXEEXT=$(ISSMEXT)
+ 
+@@ -8,15 +8,6 @@
+ if SHAREDLIBS
+ lib_LTLIBRARIES = libISSMCore.la libISSMOverload.la libISSM.la
+ endif
+-if PYTHON
+-lib_LIBRARIES += libISSMPython.a 
+-endif
+-if MATLAB
+-if SHAREDLIBS
+-lib_LTLIBRARIES += libISSMMatlab.la
+-endif
+-lib_LIBRARIES += libISSMMatlab.a 
+-endif
+ if WRAPPERS
+ if SHAREDLIBS
+ lib_LTLIBRARIES += libISSMWrappers.la
+@@ -763,36 +754,6 @@
+ metis_sources= ./toolkits/metis/patches/metispatches.h\
+ 					./toolkits/metis/patches/METIS_PartMeshNodalPatch.cpp
+ #}}}
+-#Python sources  {{{
+-python_sources=     ./python/io/pythonio.h\
+-					./python/python-binding.h\
+-				    ./python/io/WritePythonData.cpp\
+-				    ./python/io/CheckNumPythonArguments.cpp\
+-				    ./python/io/FetchPythonData.cpp
+-
+-#}}}
+-#Matlab sources  {{{
+-matlab_sources= ./toolkits/matlab/matlabincludes.h\
+-				    ./matlab/matlab-binding.h\
+-				    ./matlab/io/matlabio.h\
+-				    ./matlab/io/MatlabNArrayToNArray.cpp\
+-				    ./matlab/io/CheckNumMatlabArguments.cpp\
+-				    ./matlab/io/mxGetAssignedField.cpp\
+-				    ./matlab/io/WriteMatlabData.cpp\
+-				    ./matlab/io/FetchMatlabData.cpp\
+-				    ./matlab/io/OptionParse.cpp\
+-				    ./matlab/io/MatlabMatrixToMatrix.cpp\
+-				    ./matlab/io/MatlabVectorToVector.cpp\
+-					 ./matlab/io/MatlabVectorToDoubleVector.cpp\
+-					 ./matlab/io/MatlabMatrixToDoubleMatrix.cpp\
+-					 ./matlab/io/MatlabMatrixToSeqMat.cpp\
+-					 ./matlab/io/MatlabVectorToSeqVec.cpp
+-#}}}
+-#Matlab and Petsc sources  {{{
+-matlabpetsc_sources= ./matlab/io/MatlabMatrixToPetscMat.cpp\
+-					 ./matlab/io/MatlabVectorToPetscVec.cpp
+-
+-#}}}
+ #Wrappers sources{{{
+ wrapper_sources= ./shared/Threads/issm_threads.h\
+ 			./shared/Threads/LaunchThread.cpp\
+@@ -944,12 +905,6 @@
+ issm_sources +=  $(metis_sources)
+ endif
+ 
+-if PETSC
+-if MATLAB
+-issm_sources +=  $(matlabpetsc_sources)
+-endif
+-endif
+-
+ if KRIGING
+ issm_sources +=  $(pkriging_sources)
+ endif
+@@ -986,19 +941,6 @@
+ endif
+ endif
+ 
+-if PYTHON
+-libISSMPython_a_SOURCES = $(python_sources)
+-libISSMPython_a_CXXFLAGS= $(ALLCXXFLAGS)
+-endif
+-
+-if MATLAB
+-libISSMMatlab_a_SOURCES = $(matlab_sources)
+-libISSMMatlab_a_CXXFLAGS= $(ALLCXXFLAGS)
+-if SHAREDLIBS
+-libISSMMatlab_la_SOURCES = $(libISSMMatlab_a_SOURCES)
+-endif
+-endif
+-
+ if VERSION
+ AM_LDFLAGS =
+ else
+Index: ../trunk-jpl/src/wrappers/python/include/wrapper_macros.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/include/wrapper_macros.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/python/include/wrapper_macros.h	(revision 13749)
+@@ -0,0 +1,92 @@
++/* \file python_macros.h
++ * \brief: macros used for the python bindings
++ */
++
++#ifndef _PY_WRAPPER_MACROS_H_
++#define _PY_WRAPPER_MACROS_H_
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#ifdef _HAVE_PYTHON_
++/* MODULEBOOT/MODULEEND {{{*/
++
++/*The following macros hide the error exception handling in a matlab module. Just put 
++ * MODULEBOOT(); and MODULEEND(); at the beginning and end of a module, and c++ exceptions 
++ * will be trapped*/
++#define MODULEBOOT(); \
++	PyObject *output = PyTuple_New(NLHS); \
++	int       nrhs   = (int)PyTuple_Size(args);  \
++	if(!output) return NULL;\
++	try{ \
++	IssmComm::SetComm(-1);
++
++#define MODULEEND(); }\
++  catch(ErrorException &exception){\
++	  PyErr_SetString(PyExc_TypeError,exception.PythonReport()); \
++	  return NULL;\
++  } \
++	catch (exception &e){\
++		PyErr_SetString(PyExc_TypeError,exprintf("Standard exception: %s\n",e.what()));\
++		return NULL;\
++	}\
++	catch(...){\
++		PyErr_SetString(PyExc_TypeError,"An unexpected error occurred");\
++		return NULL;\
++	}\
++	return output;
++//}}}
++#if _PYTHON_MAJOR_ >=3
++/* WRAPPER 3.2 {{{*/
++#define WRAPPER(modulename,...)  \
++\
++static PyObject* modulename(PyObject* self,PyObject* args);\
++static PyMethodDef modulename##_funcs[] = {\
++	{#modulename, (PyCFunction)modulename, METH_VARARGS, ""},\
++	{NULL,NULL,0,NULL}\
++};\
++\
++static struct PyModuleDef modulename##module= {\
++	PyModuleDef_HEAD_INIT,\
++	#modulename,   /* name of module */\
++	NULL, /* module documentation, may be NULL */\
++	-1,       /* size of per-interpreter state of the module,\
++				 or -1 if the module keeps state in global variables. */\
++	modulename##_funcs\
++};\
++\
++PyMODINIT_FUNC PyInit_##modulename(void){\
++\
++	import_array();\
++	return PyModule_Create(&modulename##module);\
++}\
++\
++static PyObject* modulename(PyObject* self,PyObject* args)
++/*}}}*/
++#else
++/* WRAPPER 2.7 {{{*/
++#define WRAPPER(modulename,...)  \
++\
++static PyObject* modulename(PyObject* self,PyObject* args);\
++static PyMethodDef modulename##_funcs[] = {\
++	{#modulename, (PyCFunction)modulename, METH_VARARGS, ""},\
++	{NULL,NULL,0,NULL}\
++};\
++\
++PyMODINIT_FUNC init##modulename(void){\
++\
++	import_array();\
++	(void) Py_InitModule(#modulename, modulename##_funcs);\
++}\
++\
++static PyObject* modulename(PyObject* self,PyObject* args)
++/*}}}*/
++#endif
++/* CHECKARGUMENTS {{{*/
++#define CHECKARGUMENTS(NLHS,NRHS,functionpointer) CheckNumPythonArguments(args, NRHS,functionpointer)
++/*}}}*/
++#endif
++#endif
+Index: ../trunk-jpl/src/wrappers/python/io/pythonio.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/io/pythonio.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/python/io/pythonio.h	(revision 13749)
+@@ -0,0 +1,48 @@
++/*\file pythonio.h
++ *\brief: I/O for ISSM in python mode
++ */
++
++#ifndef _PYTHON_IO_H_
++#define _PYTHON_IO_H_
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif 
++
++#include "../include/pythonincludes.h"
++#include "../../c/classes/classes.h"
++#include "../../c/Container/Container.h"
++#include "../../c/include/include.h"
++
++void WriteData(PyObject* py_tuple,int index, double* matrix, int M,int N);
++void WriteData(PyObject* py_tuple,int index, int integer);
++void WriteData(PyObject* py_tuple,int index, char* string);
++void WriteData(PyObject* py_tuple,int index);
++void WriteData(PyObject* py_tuple,int index, SeqMat<double>* matrix);
++void WriteData(PyObject* py_tuple,int index, SeqVec<double>* vector);
++void WriteData(PyObject* py_tuple,int index, BamgGeom* bamggeom);
++void WriteData(PyObject* py_tuple,int index, BamgMesh* bamgmesh);
++void WriteData(PyObject* py_tuple,int index, RiftStruct* riftstruct);
++
++void FetchData(double** pvector,int* pM,PyObject* py_ref);
++void FetchData(double** pmatrix,int* pM,int *pN,PyObject* py_array);
++void FetchData(int** pmatrix,int* pM,int *pN,PyObject* py_matrix);
++void FetchData(char** pstring,PyObject* py_unicode);
++void FetchData(double* pscalar,PyObject* py_float);
++void FetchData(int* pinteger,PyObject* py_long);
++void FetchData(bool* pbool,PyObject* py_boolean);
++void FetchData(BamgGeom** bamggeom,PyObject* py_dict);
++void FetchData(BamgMesh** bamgmesh,PyObject* py_dict);
++void FetchData(BamgOpts** bamgopts,PyObject* py_dict);
++void FetchData(Options** poptions,int istart, int nrhs,PyObject* py_tuple);
++void FetchData(DataSet** pcontours,PyObject* py_list);
++
++int CheckNumPythonArguments(PyObject* inputs,int NRHS, void (*function)( void ));
++
++/*Utils*/
++PyObject* PyArrayFromCopiedData(int dims[2],double* data);
++PyObject* PyArrayFromCopiedData(int dimi,int dimj,double* data);
++
++#endif	/* _IO_H_ */
+Index: ../trunk-jpl/src/wrappers/python/io/CheckNumPythonArguments.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/io/CheckNumPythonArguments.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/python/io/CheckNumPythonArguments.cpp	(revision 13749)
+@@ -0,0 +1,29 @@
++/*!\file CheckNumPythonArguments.cpp:
++ * \brief: check number of arguments and report an usage error message.
++ */
++
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#define NO_IMPORT
++
++#include "./pythonio.h"
++#include "../../c/shared/Exceptions/exceptions.h"
++#include "../../c/include/include.h"
++
++int CheckNumPythonArguments(PyObject* inputs,int NRHS, void (*function)( void )){
++
++	Py_ssize_t size=0;
++
++	/*figure out size of tuple in input: */
++	size=PyTuple_Size(inputs);
++
++	/*check on requested size: */
++	if (size==0){
++		function();
++		_error_("usage: see above");
++	}
++	else if (size!=NRHS ) {
++		function(); 
++		_error_("usage error.");
++	}
++	return 1;
++}
+Index: ../trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 13749)
+@@ -0,0 +1,354 @@
++/*\file FetchData.cpp:
++ * \brief: general I/O interface to fetch data in python
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#define NO_IMPORT
++
++#include "./pythonio.h"
++#include "../../c/include/include.h"
++#include "../../c/shared/shared.h"
++
++/*Primitive data types*/
++/*FUNCTION FetchData(double* pscalar,PyObject* py_float){{{*/
++void FetchData(double* pscalar,PyObject* py_float){
++
++	double scalar;
++
++	/*return internal value: */
++	scalar=PyFloat_AsDouble(py_float);
++
++	/*output: */
++	*pscalar=scalar;
++}
++/*}}}*/
++/*FUNCTION FetchData(int* pinteger,PyObject* py_long){{{*/
++void FetchData(int* pinteger, PyObject* py_long){
++
++	int integer;
++
++	/*return internal value: */
++	integer=(int)PyLong_AsLong(py_long);
++
++	/*output: */
++	*pinteger=integer;
++}
++/*}}}*/
++/*FUNCTION FetchData(bool* pboolean,PyObject* py_boolean){{{*/
++void FetchData(bool* pboolean,PyObject* py_boolean){
++
++	bool boolean;
++
++	/*check this is indeed a subtype of long type: */
++	if(!PyBool_Check(py_boolean))_error_("expecting a boolean in input!");
++
++	/*extract boolean: */
++	boolean=(bool)PyLong_AsLong(py_boolean);
++
++	/*simple copy: */
++	*pboolean=boolean;
++
++}
++/*}}}*/
++/*FUNCTION FetchData(double** pmatrix,int* pM, int* pN, PyObject* py_matrix){{{*/
++void FetchData(double** pmatrix,int* pM,int *pN,PyObject* py_matrix){
++
++	/*output: */
++	double* dmatrix=NULL;
++	double* matrix=NULL;
++	int M,N;
++	int ndim;
++	npy_intp*  dims=NULL;
++
++	/*retrive dimensions: */
++	ndim=PyArray_NDIM((const PyArrayObject*)py_matrix);
++	if(ndim!=2)_error_("expecting an MxN matrix in input!");
++	dims=PyArray_DIMS((PyArrayObject*)py_matrix);
++	M=dims[0]; N=dims[1];
++
++	if (M && N) {
++		/*retrieve internal value: */
++		dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
++
++		/*copy matrix: */
++		matrix=xNew<double>(M*N);
++		memcpy(matrix,dmatrix,(M*N)*sizeof(double));
++	}
++	else
++		matrix=NULL;
++
++	/*output: */
++	if(pM)*pM=M;
++	if(pN)*pN=N;
++	if(pmatrix)*pmatrix=matrix;
++}
++/*}}}*/
++/*FUNCTION FetchData(int** pmatrix,int* pM, int* pN, PyObject* py_matrix){{{*/
++void FetchData(int** pmatrix,int* pM,int *pN,PyObject* py_matrix){
++
++	/*output: */
++	double* dmatrix=NULL;
++	int* matrix=NULL;
++	int M,N;
++
++	/*intermediary:*/
++	int i;
++	int ndim;
++	npy_intp*  dims=NULL;
++
++	/*retrive dimensions: */
++	ndim=PyArray_NDIM((const PyArrayObject*)py_matrix);
++	if(ndim!=2)_error_("expecting an MxN matrix in input!");
++	dims=PyArray_DIMS((PyArrayObject*)py_matrix);
++	M=dims[0]; N=dims[1];
++
++	if (M && N) {
++		/*retrieve internal value: */
++		dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
++
++		/*transform into integer matrix: */
++		matrix=xNew<int>(M*N);
++		for(i=0;i<M*N;i++)matrix[i]=(int)dmatrix[i];
++	}
++	else
++		matrix=NULL;
++
++	/*output: */
++	if(pM)*pM=M;
++	if(pN)*pN=N;
++	if(pmatrix)*pmatrix=matrix;
++}
++/*}}}*/
++/*FUNCTION FetchData(double** pvector,int* pM, PyObject* py_vector){{{*/
++void FetchData(double** pvector,int* pM,PyObject* py_vector){
++
++	/*output: */
++	double* dvector=NULL;
++	double* vector=NULL;
++	int M;
++	int ndim;
++	npy_intp*  dims=NULL;
++
++	/*retrive dimensions: */
++	ndim=PyArray_NDIM((const PyArrayObject*)py_vector);
++	if(ndim!=1)_error_("expecting an Mx1 vector in input!");
++	dims=PyArray_DIMS((PyArrayObject*)py_vector);
++	M=dims[0]; 
++
++	if (M) {
++		/*retrieve internal value: */
++		dvector=(double*)PyArray_DATA((PyArrayObject*)py_vector);
++
++		/*copy vector: */
++		vector=xNew<double>(M);
++		memcpy(vector,dvector,(M)*sizeof(double));
++	}
++	else
++		vector=NULL;
++
++	/*output: */
++	if(pM)*pM=M;
++	if(pvector)*pvector=vector;
++}
++/*}}}*/
++
++/*ISSM objects*/
++/*FUNCTION FetchData(BamgGeom** pbamggeom,PyObject* py_dict){{{*/
++void FetchData(BamgGeom** pbamggeom,PyObject* py_dict){
++
++	/*Initialize output*/
++	BamgGeom* bamggeom=new BamgGeom();
++
++	/*Fetch all fields*/
++	FetchData(&bamggeom->Vertices,&bamggeom->VerticesSize[0],&bamggeom->VerticesSize[1],PyDict_GetItemString(py_dict,"Vertices"));
++	FetchData(&bamggeom->Edges, &bamggeom->EdgesSize[0], &bamggeom->EdgesSize[1], PyDict_GetItemString(py_dict,"Edges"));
++	FetchData(&bamggeom->Corners, &bamggeom->CornersSize[0], &bamggeom->CornersSize[1], PyDict_GetItemString(py_dict,"Corners"));
++	FetchData(&bamggeom->RequiredVertices,&bamggeom->RequiredVerticesSize[0],&bamggeom->RequiredVerticesSize[1],PyDict_GetItemString(py_dict,"RequiredVertices"));
++	FetchData(&bamggeom->RequiredEdges, &bamggeom->RequiredEdgesSize[0], &bamggeom->RequiredEdgesSize[1], PyDict_GetItemString(py_dict,"RequiredEdges"));
++	FetchData(&bamggeom->CrackedEdges,&bamggeom->CrackedEdgesSize[0],&bamggeom->CrackedEdgesSize[1],PyDict_GetItemString(py_dict,"CrackedEdges"));
++	FetchData(&bamggeom->SubDomains,&bamggeom->SubDomainsSize[0],&bamggeom->SubDomainsSize[1],PyDict_GetItemString(py_dict,"SubDomains"));
++
++	/*Assign output pointers:*/
++	*pbamggeom=bamggeom;
++}
++/*}}}*/
++/*FUNCTION FetchData(BamgMesh** pbamgmesh,PyObject* py_dict){{{*/
++void FetchData(BamgMesh** pbamgmesh,PyObject* py_dict){
++
++	/*Initialize output*/
++	BamgMesh* bamgmesh=new BamgMesh();
++
++	/*Fetch all fields*/
++	FetchData(&bamgmesh->Vertices,&bamgmesh->VerticesSize[0],&bamgmesh->VerticesSize[1],PyDict_GetItemString(py_dict,"Vertices"));
++	FetchData(&bamgmesh->Edges, &bamgmesh->EdgesSize[0], &bamgmesh->EdgesSize[1], PyDict_GetItemString(py_dict,"Edges"));
++	FetchData(&bamgmesh->Triangles, &bamgmesh->TrianglesSize[0], &bamgmesh->TrianglesSize[1], PyDict_GetItemString(py_dict,"Triangles"));
++	FetchData(&bamgmesh->CrackedEdges,&bamgmesh->CrackedEdgesSize[0],&bamgmesh->CrackedEdgesSize[1],PyDict_GetItemString(py_dict,"CrackedEdges"));
++	FetchData(&bamgmesh->VerticesOnGeomEdge,&bamgmesh->VerticesOnGeomEdgeSize[0],&bamgmesh->VerticesOnGeomEdgeSize[1],PyDict_GetItemString(py_dict,"VerticesOnGeomEdge"));
++	FetchData(&bamgmesh->VerticesOnGeomVertex,&bamgmesh->VerticesOnGeomVertexSize[0],&bamgmesh->VerticesOnGeomVertexSize[1],PyDict_GetItemString(py_dict,"VerticesOnGeomVertex"));
++	FetchData(&bamgmesh->EdgesOnGeomEdge, &bamgmesh->EdgesOnGeomEdgeSize[0], &bamgmesh->EdgesOnGeomEdgeSize[1], PyDict_GetItemString(py_dict,"EdgesOnGeomEdge"));
++	FetchData(&bamgmesh->IssmSegments,&bamgmesh->IssmSegmentsSize[0],&bamgmesh->IssmSegmentsSize[1],PyDict_GetItemString(py_dict,"IssmSegments"));
++
++	/*Assign output pointers:*/
++	*pbamgmesh=bamgmesh;
++}
++/*}}}*/
++/*FUNCTION FetchData(BamgOpts** pbamgopts,PyObject* py_dict){{{*/
++void FetchData(BamgOpts** pbamgopts,PyObject* py_dict){
++
++	/*Initialize output*/
++	BamgOpts* bamgopts=new BamgOpts();
++
++	/*Fetch all fields*/
++	FetchData(&bamgopts->anisomax,PyDict_GetItemString(py_dict,"anisomax"));
++	FetchData(&bamgopts->cutoff,PyDict_GetItemString(py_dict,"cutoff"));
++	FetchData(&bamgopts->coeff,PyDict_GetItemString(py_dict,"coeff"));
++	FetchData(&bamgopts->errg,PyDict_GetItemString(py_dict,"errg"));
++	FetchData(&bamgopts->gradation,PyDict_GetItemString(py_dict,"gradation"));
++	FetchData(&bamgopts->Hessiantype,PyDict_GetItemString(py_dict,"Hessiantype"));
++	FetchData(&bamgopts->MaxCornerAngle,PyDict_GetItemString(py_dict,"MaxCornerAngle"));
++	FetchData(&bamgopts->maxnbv,PyDict_GetItemString(py_dict,"maxnbv"));
++	FetchData(&bamgopts->maxsubdiv,PyDict_GetItemString(py_dict,"maxsubdiv"));
++	FetchData(&bamgopts->Metrictype,PyDict_GetItemString(py_dict,"Metrictype"));
++	FetchData(&bamgopts->nbjacobi,PyDict_GetItemString(py_dict,"nbjacobi"));
++	FetchData(&bamgopts->nbsmooth,PyDict_GetItemString(py_dict,"nbsmooth"));
++	FetchData(&bamgopts->omega,PyDict_GetItemString(py_dict,"omega"));
++	FetchData(&bamgopts->power,PyDict_GetItemString(py_dict,"power"));
++	FetchData(&bamgopts->verbose,PyDict_GetItemString(py_dict,"verbose"));
++
++	FetchData(&bamgopts->Crack,PyDict_GetItemString(py_dict,"Crack"));
++	FetchData(&bamgopts->geometricalmetric,PyDict_GetItemString(py_dict,"geometricalmetric"));
++	FetchData(&bamgopts->KeepVertices,PyDict_GetItemString(py_dict,"KeepVertices"));
++	FetchData(&bamgopts->splitcorners,PyDict_GetItemString(py_dict,"splitcorners"));
++
++	FetchData(&bamgopts->hmin,PyDict_GetItemString(py_dict,"hmin"));
++	FetchData(&bamgopts->hmax,PyDict_GetItemString(py_dict,"hmax"));
++	FetchData(&bamgopts->hminVertices,&bamgopts->hminVerticesSize[0],&bamgopts->hminVerticesSize[1],PyDict_GetItemString(py_dict,"hminVertices"));
++	FetchData(&bamgopts->hmaxVertices,&bamgopts->hmaxVerticesSize[0],&bamgopts->hmaxVerticesSize[1],PyDict_GetItemString(py_dict,"hmaxVertices"));
++	FetchData(&bamgopts->hVertices,&bamgopts->hVerticesSize[0],&bamgopts->hVerticesSize[1],PyDict_GetItemString(py_dict,"hVertices"));
++	FetchData(&bamgopts->metric,&bamgopts->metricSize[0],&bamgopts->metricSize[1],PyDict_GetItemString(py_dict,"metric"));
++	FetchData(&bamgopts->field,&bamgopts->fieldSize[0],&bamgopts->fieldSize[1],PyDict_GetItemString(py_dict,"field"));
++	FetchData(&bamgopts->err,&bamgopts->errSize[0],&bamgopts->errSize[1],PyDict_GetItemString(py_dict,"err"));
++
++	/*Additional checks*/
++	bamgopts->Check();
++
++	/*Assign output pointers:*/
++	*pbamgopts=bamgopts;
++}
++/*}}}*/
++/*FUNCTION FetchData(Options** poptions,int istart, int nrhs,PyObject* py_tuple){{{*/
++void FetchData(Options** poptions,int istart, int nrhs,PyObject* py_tuple){
++
++	char   *name   = NULL;
++	Option *option = NULL;
++
++	/*Initialize output*/
++	Options* options=new Options();
++
++	/*Fetch all options*/
++	for (int i=istart; i<nrhs; i=i+2){
++		if (!PyString_Check(PyTuple_GetItem(py_tuple,(Py_ssize_t)i))) _error_("Argument " << i+1 << " must be name of option");
++
++		FetchData(&name,PyTuple_GetItem(py_tuple,(Py_ssize_t)i));
++		if(i+1 == nrhs) _error_("Argument " << i+2 << " must exist and be value of option \"" << name << "\".");
++
++		_pprintLine_("FetchData for Options not implemented yet, ignoring option \"" << name << "\"!");
++
++//		option=(Option*)OptionParse(name,&PyTuple_GetItem(py_tuple,(Py_ssize_t)(i+1)));
++//		options->AddOption(option);
++//		option=NULL;
++	}
++
++	/*Assign output pointers:*/
++	*poptions=options;
++}
++/*}}}*/
++/*FUNCTION FetchData(DataSet** pcontours,PyObject* py_list){{{*/
++void FetchData(DataSet** pcontours,PyObject* py_list){
++
++	int              numcontours,test1,test2;
++	char            *contourname = NULL;
++	DataSet         *contours    = NULL;
++	Contour<double> *contouri    = NULL;
++	PyObject        *py_dicti    = NULL;
++	PyObject        *py_item     = NULL;
++
++	if (PyString_Check(py_list)){
++		FetchData(&contourname,py_list);
++		contours=DomainOutlineRead<double>(contourname);
++	}
++	else if(PyList_Check(py_list)){
++
++		contours=new DataSet(0);
++		numcontours=(int)PyList_Size(py_list);
++
++		for(int i=0;i<numcontours;i++){
++
++			contouri=xNew<Contour<double> >(1);
++			py_dicti=PyList_GetItem(py_list,(Py_ssize_t)i);
++
++			py_item = PyDict_GetItemString(py_dicti,"nods");
++			if(!py_item) _error_("input structure does not have a 'nods' field");
++			FetchData(&contouri->nods,py_item);
++
++			py_item = PyDict_GetItemString(py_dicti,"x");
++			if(!py_item) _error_("input structure does not have a 'x' field");
++			FetchData(&contouri->x,&test1,&test2,py_item);
++			if(test1!=contouri->nods || test2!=1) _error_("field x should be of size ["<<contouri->nods<<" 1]");
++
++			py_item = PyDict_GetItemString(py_dicti,"y");
++			if(!py_item) _error_("input structure does not have a 'y' field");
++			FetchData(&contouri->y,&test1,&test2,py_item);
++			if(test1!=contouri->nods || test2!=1) _error_("field y should be of size ["<<contouri->nods<<" 1]");
++
++			contours->AddObject(contouri);
++		}
++	}
++	else{
++		_error_("Contour is neither a string nor a structure and cannot be loaded");
++	}
++
++	/*clean-up and assign output pointer*/
++	xDelete<char>(contourname);
++	*pcontours=contours;
++}
++/*}}}*/
++
++/*Python version dependent: */
++#if _PYTHON_MAJOR_ >= 3 
++/*FUNCTION FetchData(char** pstring,PyObject* py_unicode){{{*/
++void FetchData(char** pstring,PyObject* py_unicode){
++
++	PyObject* py_bytes;
++	char* string=NULL;
++
++	/*convert to bytes format: */
++	PyUnicode_FSConverter(py_unicode,&py_bytes);
++
++	/*convert from bytes to string: */
++	string=PyBytes_AS_STRING(py_bytes);
++
++	*pstring=string;
++}
++/*}}}*/
++#else
++/*FUNCTION FetchData(char** pstring,PyObject* py_string){{{*/
++void FetchData(char** pstring,PyObject* py_string){
++
++	char* string=NULL;
++
++	/*extract internal string: */
++	string=PyString_AsString(py_string);
++
++	/*copy string (note strlen does not include trailing NULL): */
++	*pstring=xNew<char>(strlen(string)+1);
++	memcpy(*pstring,string,(strlen(string)+1)*sizeof(char));
++}
++/*}}}*/
++#endif
+Index: ../trunk-jpl/src/wrappers/python/io/WritePythonData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/io/WritePythonData.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/python/io/WritePythonData.cpp	(revision 13749)
+@@ -0,0 +1,194 @@
++/* \file WriteData.c:
++ * \brief: general interface for writing data
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
++#define NO_IMPORT
++
++#include "./pythonio.h"
++#include "../../c/include/include.h"
++#include "../../c/Container/Container.h"
++#include "../../c/shared/shared.h"
++#include "../../c/EnumDefinitions/EnumDefinitions.h"
++
++/*Primitive data types*/
++/*FUNCTION WriteData(PyObject* py_tuple,int index,int integer){{{*/
++void WriteData(PyObject* py_tuple, int index, int integer){
++
++	PyTuple_SetItem(py_tuple, index, PyInt_FromSsize_t((Py_ssize_t)integer));
++
++}/*}}}*/
++/*FUNCTION WriteData(PyObject* py_tuple,int index,char* string){{{*/
++void WriteData(PyObject* py_tuple, int index, char* string){
++
++	PyTuple_SetItem(py_tuple, index, PyUnicode_FromString(string));
++
++}/*}}}*/
++/*FUNCTION WriteData(PyObject* py_tuple,int index, double* matrix, int M, int N){{{*/
++void WriteData(PyObject* tuple, int index, double* matrix, int M,int N){
++
++	npy_intp dims[2]={0,0};
++	PyObject* array=NULL;
++
++	dims[0]=(npy_intp)M;
++	dims[1]=(npy_intp)N;
++	array=PyArray_SimpleNewFromData(2,dims,NPY_DOUBLE,matrix);
++
++	PyTuple_SetItem(tuple, index, array);
++}/*}}}*/
++/*FUNCTION WriteData(PyObject* py_tuple,int index){{{*/
++void WriteData(PyObject* py_tuple, int index){
++
++	PyTuple_SetItem(py_tuple, index, Py_None);
++
++}/*}}}*/
++
++/*ISSM objects*/
++/*FUNCTION WriteData(PyObject* py_tuple,int index,BamgGeom* bamggeom){{{*/
++void WriteData(PyObject* py_tuple,int index,BamgGeom* bamggeom){
++
++	PyObject* dict=NULL;
++
++	dict=PyDict_New();
++
++	PyDict_SetItemString(dict,"Vertices",PyArrayFromCopiedData(bamggeom->VerticesSize,bamggeom->Vertices));
++	PyDict_SetItemString(dict,"Edges",PyArrayFromCopiedData(bamggeom->EdgesSize,bamggeom->Edges));
++	PyDict_SetItemString(dict,"TangentAtEdges",PyArrayFromCopiedData(bamggeom->TangentAtEdgesSize,bamggeom->TangentAtEdges));
++	PyDict_SetItemString(dict,"Corners",PyArrayFromCopiedData(bamggeom->CornersSize,bamggeom->Corners));
++	PyDict_SetItemString(dict,"RequiredVertices",PyArrayFromCopiedData(bamggeom->RequiredVerticesSize,bamggeom->RequiredVertices));
++	PyDict_SetItemString(dict,"RequiredEdges",PyArrayFromCopiedData(bamggeom->RequiredEdgesSize,bamggeom->RequiredEdges));
++	PyDict_SetItemString(dict,"CrackedEdges",PyArrayFromCopiedData(bamggeom->CrackedEdgesSize,bamggeom->CrackedEdges));
++	PyDict_SetItemString(dict,"SubDomains",PyArrayFromCopiedData(bamggeom->SubDomainsSize,bamggeom->SubDomains));
++
++	PyTuple_SetItem(py_tuple, index, dict);
++}
++/*}}}*/
++/*FUNCTION WriteData(PyObject* py_tuple,int index,BamgMesh* bamgmesh){{{*/
++void WriteData(PyObject* py_tuple,int index,BamgMesh* bamgmesh){
++
++	PyObject* dict=NULL;
++
++	dict=PyDict_New();
++
++	PyDict_SetItemString(dict,"Vertices",PyArrayFromCopiedData(bamgmesh->VerticesSize,bamgmesh->Vertices));
++	PyDict_SetItemString(dict,"Edges",PyArrayFromCopiedData(bamgmesh->EdgesSize,bamgmesh->Edges));
++	PyDict_SetItemString(dict,"Triangles",PyArrayFromCopiedData(bamgmesh->TrianglesSize,bamgmesh->Triangles));
++	PyDict_SetItemString(dict,"Quadrilaterals",PyArrayFromCopiedData(bamgmesh->QuadrilateralsSize,bamgmesh->Quadrilaterals));
++	PyDict_SetItemString(dict,"IssmEdges",PyArrayFromCopiedData(bamgmesh->IssmEdgesSize,bamgmesh->IssmEdges));
++	PyDict_SetItemString(dict,"IssmSegments",PyArrayFromCopiedData(bamgmesh->IssmSegmentsSize,bamgmesh->IssmSegments));
++	PyDict_SetItemString(dict,"VerticesOnGeomVertex",PyArrayFromCopiedData(bamgmesh->VerticesOnGeomVertexSize,bamgmesh->VerticesOnGeomVertex));
++	PyDict_SetItemString(dict,"VerticesOnGeomEdge",PyArrayFromCopiedData(bamgmesh->VerticesOnGeomEdgeSize,bamgmesh->VerticesOnGeomEdge));
++	PyDict_SetItemString(dict,"EdgesOnGeomEdge",PyArrayFromCopiedData(bamgmesh->EdgesOnGeomEdgeSize,bamgmesh->EdgesOnGeomEdge));
++	PyDict_SetItemString(dict,"SubDomains",PyArrayFromCopiedData(bamgmesh->SubDomainsSize,bamgmesh->SubDomains));
++	PyDict_SetItemString(dict,"SubDomainsFromGeom",PyArrayFromCopiedData(bamgmesh->SubDomainsFromGeomSize,bamgmesh->SubDomainsFromGeom));
++	PyDict_SetItemString(dict,"ElementConnectivity",PyArrayFromCopiedData(bamgmesh->ElementConnectivitySize,bamgmesh->ElementConnectivity));
++	PyDict_SetItemString(dict,"NodalConnectivity",PyArrayFromCopiedData(bamgmesh->NodalConnectivitySize,bamgmesh->NodalConnectivity));
++	PyDict_SetItemString(dict,"NodalElementConnectivity",PyArrayFromCopiedData(bamgmesh->NodalElementConnectivitySize,bamgmesh->NodalElementConnectivity));
++	PyDict_SetItemString(dict,"CrackedVertices",PyArrayFromCopiedData(bamgmesh->CrackedVerticesSize,bamgmesh->CrackedVertices));
++	PyDict_SetItemString(dict,"CrackedEdges",PyArrayFromCopiedData(bamgmesh->CrackedEdgesSize,bamgmesh->CrackedEdges));
++
++	PyTuple_SetItem(py_tuple, index, dict);
++}
++/*}}}*/
++/*FUNCTION WriteData(PyObject* py_tuple,int index,SeqMat<double>* matrix){{{*/
++void WriteData(PyObject* py_tuple,int index,SeqMat<double>* matrix){
++
++	int M,N;
++	double* buffer=NULL;
++	npy_intp dims[2]={0,0};
++	PyObject* array=NULL;
++
++	buffer=matrix->ToSerial();
++	matrix->GetSize(&M,&N);
++	dims[0]=(npy_intp)M;
++	dims[1]=(npy_intp)N;
++	array=PyArray_SimpleNewFromData(2,dims,NPY_DOUBLE,buffer);
++
++	PyTuple_SetItem(py_tuple, index, array);
++
++}/*}}}*/
++/*FUNCTION WriteData(PyObject* py_tuple,int index,SeqVec<double>* vector){{{*/
++void WriteData(PyObject* py_tuple,int index,SeqVec<double>* vector){
++
++	int M;
++	double* buffer=NULL;
++	npy_intp dim=10;
++	PyObject* array=NULL;
++
++	buffer=vector->ToMPISerial();
++	vector->GetSize(&M);
++	dim=(npy_intp)M;
++	array=PyArray_SimpleNewFromData(1,&dim,NPY_DOUBLE,buffer);
++
++	PyTuple_SetItem(py_tuple, index, array);
++}
++/*}}}*/
++/*FUNCTION WriteData(PyObject* py_tuple,int index,RiftStruct* riftstruct){{{*/
++void WriteData(PyObject* py_tuple,int index,RiftStruct* riftstruct){
++
++	int i;
++	PyObject* list=NULL;
++	PyObject* dict=NULL;
++
++	list=PyList_New((Py_ssize_t)0);
++
++	for (i=0; i<riftstruct->numrifts; i++) {
++		dict=PyDict_New();
++
++		PyDict_SetItemString(dict,"numsegs"          ,PyInt_FromSsize_t((Py_ssize_t)riftstruct->riftsnumsegments[i]));
++		PyDict_SetItemString(dict,"segments"         ,PyArrayFromCopiedData(riftstruct->riftsnumsegments[i]    ,3,riftstruct->riftssegments[i]));
++		PyDict_SetItemString(dict,"pairs"            ,PyArrayFromCopiedData(riftstruct->riftsnumpairs[i]       ,2,riftstruct->riftspairs[i]));
++		PyDict_SetItemString(dict,"tips"             ,PyArrayFromCopiedData(1                                  ,2,&riftstruct->riftstips[2*i]));
++		PyDict_SetItemString(dict,"penaltypairs"     ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],7,riftstruct->riftspenaltypairs[i]));
++		PyDict_SetItemString(dict,"fill"             ,PyInt_FromSsize_t((Py_ssize_t)IceEnum));
++		PyDict_SetItemString(dict,"friction"         ,PyInt_FromSsize_t((Py_ssize_t)0));
++		PyDict_SetItemString(dict,"fraction"         ,PyFloat_FromDouble(0.));
++		PyDict_SetItemString(dict,"fractionincrement",PyFloat_FromDouble(0.1));
++		PyDict_SetItemString(dict,"state"            ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],1,riftstruct->state[i]));
++
++		PyList_Append(list, dict);
++	}
++
++	PyTuple_SetItem(py_tuple, index, list);
++}
++/*}}}*/
++
++/*Utils*/
++/*FUNCTION PyArrayFromCopiedData(int dims[2],double* data){{{*/
++PyObject* PyArrayFromCopiedData(int dims[2],double* data){
++
++	double* pydata;
++	npy_intp pydims[2]={0,0};
++
++	/*  note that PyArray_SimpleNewFromData does not copy the data, so that when the original
++		 object (e.g. bamggeom,bamgmesh) is deleted, the data is gone.  */
++
++	pydims[0]=(npy_intp)dims[0];
++	pydims[1]=(npy_intp)dims[1];
++	pydata=xNew<IssmDouble>(dims[0]*dims[1]);
++	memcpy(pydata,data,dims[0]*dims[1]*sizeof(double));
++	return PyArray_SimpleNewFromData(2,pydims,NPY_DOUBLE,pydata);
++}
++/*}}}*/
++/*FUNCTION PyArrayFromCopiedData(int dimi,int dimj,double* data){{{*/
++PyObject* PyArrayFromCopiedData(int dimi,int dimj,double* data){
++
++	double* pydata;
++	npy_intp pydims[2]={0,0};
++
++	/*  note that PyArray_SimpleNewFromData does not copy the data, so that when the original
++		 object (e.g. bamggeom,bamgmesh) is deleted, the data is gone.  */
++
++	pydims[0]=(npy_intp)dimi;
++	pydims[1]=(npy_intp)dimj;
++	pydata=xNew<IssmDouble>(dimi*dimj);
++	memcpy(pydata,data,dimi*dimj*sizeof(double));
++	return PyArray_SimpleNewFromData(2,pydims,NPY_DOUBLE,pydata);
++}
++/*}}}*/
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13748)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13749)
+@@ -1,7 +1,28 @@
+-AM_CPPFLAGS = @DAKOTAINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @BOOSTINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@
++AM_CPPFLAGS = @DAKOTAINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@
+ 
+ EXEEXT=$(PYTHONWRAPPEREXT)
+ 
++#python io{{{
++lib_LIBRARIES = libISSMPython.a 
++if SHAREDLIBS
++lib_LTLIBRARIES = libISSMPython.la
++else
++	lib_LTLIBRARIES =
++endif
++
++io_sources= ./include/pythonincludes.h\
++				./io/pythonio.h\
++				./io/WritePythonData.cpp\
++				./io/CheckNumPythonArguments.cpp\
++				./io/FetchPythonData.cpp
++
++ALLCXXFLAGS= -fPIC -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_  $(CXXFLAGS) $(CXXOPTFLAGS) 
++libISSMPython_a_SOURCES = $(io_sources)
++libISSMPython_a_CXXFLAGS= $(ALLCXXFLAGS)
++if SHAREDLIBS
++libISSMPython_la_SOURCES = $(io_sources)
++endif
++#}}}
+ #Wrappers {{{
+ if WRAPPERS
+ lib_LTLIBRARIES = BamgConvertMesh.la\
+@@ -37,9 +58,9 @@
+ AM_LDFLAGS += -avoid-version
+ endif
+ if SHAREDLIBS
+-deps += ../../c/libISSMPython.la 
++deps += ./libISSMPython.la 
+ else
+-deps += ../../c/libISSMPython.a
++deps += ./libISSMPython.a
+ AM_LDFLAGS += --no-warnings 
+ endif
+ 
+Index: ../trunk-jpl/src/wrappers/Scotch/Scotch.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Scotch/Scotch.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/Scotch/Scotch.h	(revision 13749)
+@@ -12,7 +12,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+     
+ #undef __FUNCT__ 
+ #define __FUNCT__  "Scotch"
+Index: ../trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.h	(revision 13749)
+@@ -26,7 +26,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ #include "../../c/io/io.h"
+ #include "../../c/EnumDefinitions/EnumDefinitions.h"
+ 
+Index: ../trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ #include "../../c/io/io.h"
+ 
+ #undef __FUNCT__ 
+Index: ../trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "KMLOverlay"
+Index: ../trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__
+ #define __FUNCT__ "ContourToNodes"
+Index: ../trunk-jpl/src/wrappers/HoleFiller/HoleFiller.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/HoleFiller/HoleFiller.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/HoleFiller/HoleFiller.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "HoleFiller"
+Index: ../trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__
+ #define __FUNCT__ "MeshProfileIntersection"
+Index: ../trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "InterpFromMeshToMesh3d"
+Index: ../trunk-jpl/src/wrappers/Ll2xy/Ll2xy.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Ll2xy/Ll2xy.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/Ll2xy/Ll2xy.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "Ll2xy"
+Index: ../trunk-jpl/src/wrappers/BamgMesher/BamgMesher.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/BamgMesher/BamgMesher.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/BamgMesher/BamgMesher.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "BamgMesher"
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "InterpFromGridToMesh"
+Index: ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "InterpFromMeshToGrid"
+Index: ../trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "KMLFileRead"
+Index: ../trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "Shp2Kml"
+Index: ../trunk-jpl/src/wrappers/AverageFilter/AverageFilter.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/AverageFilter/AverageFilter.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/AverageFilter/AverageFilter.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "AverageFilter"
+Index: ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "TriMeshProcessRifts"
+Index: ../trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "Exp2Kml"
+Index: ../trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "Kml2Exp"
+Index: ../trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__
+ #define __FUNCT__ "PointCloudFindNeighbors"
+Index: ../trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "PropagateFlagsFromConnectivity"
+Index: ../trunk-jpl/src/wrappers/include/issm-binding.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/include/issm-binding.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/include/issm-binding.h	(revision 13749)
+@@ -0,0 +1,18 @@
++#ifndef _ISSM_BINDING_H_
++#define _ISSM_BINDING_H_
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#ifdef  _HAVE_MATLAB_MODULES_
++#include "../matlab/include/matlab-macros.h"
++#endif
++
++#ifdef  _HAVE_PYTHON_MODULES_
++#include "../python/include/python-macros.h"
++#endif
++
++#endif
+Index: ../trunk-jpl/src/wrappers/bindings.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/bindings.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/bindings.h	(revision 13749)
+@@ -0,0 +1,22 @@
++#ifndef _BINDINGS_H_
++#define _BINDINGS_H_
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#ifdef  _HAVE_MATLAB_MODULES_
++#include "./matlab/include/matlabincludes.h"
++#include "./matlab/include/wrapper_macros.h"
++#include "./matlab/io/matlabio.h"
++#endif
++
++#ifdef  _HAVE_PYTHON_MODULES_
++#include "./python/include/pythonincludes.h"
++#include "./python/include/wrapper_macros.h"
++#include "./python/io/pythonio.h"
++#endif
++
++#endif
+Index: ../trunk-jpl/src/wrappers/TriaSearch/TriaSearch.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriaSearch/TriaSearch.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/TriaSearch/TriaSearch.h	(revision 13749)
+@@ -19,7 +19,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "TriaSearch"
+Index: ../trunk-jpl/src/wrappers/InternalFront/InternalFront.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InternalFront/InternalFront.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/InternalFront/InternalFront.h	(revision 13749)
+@@ -18,7 +18,7 @@
+ 
+ #include "../../c/include/globals.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ #include "../../c/io/io.h"
+ 
+ #undef __FUNCT__ 
+Index: ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "MeshPartition"
+Index: ../trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "InterpFromMesh2d"
+Index: ../trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.h	(revision 13749)
+@@ -23,7 +23,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ #include "../../c/io/io.h"
+ #include "../../c/EnumDefinitions/EnumDefinitions.h"
+ 
+Index: ../trunk-jpl/src/wrappers/Kriging/Kriging.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Kriging/Kriging.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/Kriging/Kriging.h	(revision 13749)
+@@ -19,7 +19,7 @@
+ #include "../../c/include/globals.h"
+ #include "../../c/modules/modules.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "Kriging"
+Index: ../trunk-jpl/src/wrappers/EnumToString/EnumToString.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/EnumToString/EnumToString.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/EnumToString/EnumToString.h	(revision 13749)
+@@ -21,7 +21,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "EnumToString"
+Index: ../trunk-jpl/src/wrappers/StringToEnum/StringToEnum.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/StringToEnum/StringToEnum.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/StringToEnum/StringToEnum.h	(revision 13749)
+@@ -21,7 +21,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "StringToEnum"
+Index: ../trunk-jpl/src/wrappers/matlab/include/wrapper_macros.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/include/wrapper_macros.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/include/wrapper_macros.h	(revision 13749)
+@@ -0,0 +1,42 @@
++/* \file matlab macros.h
++ * \brief: macros used for the matlab bindings
++ */
++
++#ifndef _MATLAB_MACROS_H_
++#define _MATLAB_MACROS_H_
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#ifdef _HAVE_MATLAB_
++/* MODULEBOOT/MODULEEND {{{*/
++
++/*The following macros hide the error exception handling in a matlab module. Just put 
++ * MODULEBOOT(); and MODULEEND(); at the beginning and end of a module, and c++ exceptions 
++ * will be trapped*/
++#define MODULEBOOT(); try{ \
++	IssmComm::SetComm(-1);
++
++#define MODULEEND(); }\
++	catch(ErrorException &exception){\
++		mexErrMsgTxt(exception.MatlabReport()); \
++	}\
++	catch (exception &e){\
++		mexErrMsgTxt(exprintf("Standard exception: %s\n",e.what()));\
++	}\
++	catch(...){\
++		mexErrMsgTxt("An unexpected error occurred");\
++	}
++/*}}}*/
++/* WRAPPER {{{*/
++#define WRAPPER(modulename,...) void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) 
++/*}}}*/
++/* CHECKARGUMENTS {{{*/
++#define CHECKARGUMENTS(NLHS,NRHS,functionpointer) CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,functionpointer)
++/*}}}*/
++#endif
++
++#endif
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToSeqMat.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToSeqMat.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToSeqMat.cpp	(revision 13749)
+@@ -0,0 +1,25 @@
++/*!\file MatlabMatrixToSeqMat.cpp
++ */
++
++/*Headers:*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include <stdio.h>
++#include <string.h>
++#include "./matlabio.h"
++#include "../../c/toolkits/toolkits.h"
++#include "../../c/shared/shared.h"
++
++SeqMat<double>* MatlabMatrixToSeqMat(const mxArray* dataref){
++
++	SeqMat<double>* output=NULL;
++
++	output=new SeqMat<double>();
++	MatlabMatrixToDoubleMatrix(&output->matrix,&output->M,&output->N,dataref);
++	return output;
++
++}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToPetscVec.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToPetscVec.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToPetscVec.cpp	(revision 13749)
+@@ -0,0 +1,106 @@
++/* \file MatlabVectorToPetscVector.cpp
++ * \brief: convert a sparse or dense matlab vector to a serial Petsc vector:
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*Petsc includes: */
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
++
++/*Matlab includes: */
++#include "./matlabio.h"
++#include "../../c/shared/shared.h"
++
++PetscVec* MatlabVectorToPetscVec(const mxArray* mxvector){
++
++	int dummy;
++	PetscVec* vector=new PetscVec();
++
++	MatlabVectorToPetscVec(&vector->vector,&dummy, mxvector);
++
++	return vector;
++}
++
++int MatlabVectorToPetscVec(Vec* pvector,int* pvector_rows,const mxArray* mxvector){
++
++	int rows, cols;
++	double* mxvector_ptr=NULL;
++	int ierr;
++	int i,j;
++
++	/*output: */
++	Vec vector=NULL;
++
++	/*matlab indices: */
++	mwIndex*    ir=NULL;
++	mwIndex*    jc=NULL;
++	double* pr=NULL;
++	int     count;
++	int     nnz;
++	int     nz;
++
++	/*petsc indices: */
++	int* idxm=NULL;
++
++	/*Ok, first check if we are dealing with a sparse or full vector: */
++	if (mxIsSparse(mxvector)){
++
++		/*Dealing with sparse vector: recover size first: */
++		mxvector_ptr=(double*)mxGetPr(mxvector);
++		rows=mxGetM(mxvector);
++		cols=mxGetN(mxvector);
++		nnz=mxGetNzmax(mxvector);
++		nz=(int)((double)nnz/(double)rows);
++
++		ierr=VecCreateSeq(PETSC_COMM_SELF,rows,&vector);CHKERRQ(ierr);
++
++		/*Now, get ir,jc and pr: */
++		pr=mxGetPr(mxvector);
++		ir=mxGetIr(mxvector);
++		jc=mxGetJc(mxvector);
++
++		/*Now, start inserting data into sparse vector: */
++		count=0;
++		for(i=0;i<cols;i++){
++			for(j=0;j<(jc[i+1]-jc[i]);j++){
++				VecSetValue(vector,ir[count],pr[count],INSERT_VALUES);
++				count++;
++			}
++		}
++
++	}
++	else{
++
++		/*Dealing with dense vector: recover pointer and size: */
++		mxvector_ptr=(double*)mxGetPr(mxvector);
++		rows=mxGetM(mxvector);
++		cols=mxGetN(mxvector);
++
++		/*Create serial vector: */
++		ierr=VecCreateSeq(PETSC_COMM_SELF,rows,&vector);CHKERRQ(ierr);
++
++		/*Insert mxvector_ptr values into petsc vector: */
++		idxm=xNew<int>(rows);
++
++		for(i=0;i<rows;i++)idxm[i]=i;
++
++		ierr=VecSetValues(vector,rows,idxm,mxvector_ptr,INSERT_VALUES);CHKERRQ(ierr);
++
++	}
++
++	/*Assemble vector: */
++	VecAssemblyBegin(vector);
++	VecAssemblyEnd(vector);
++
++	/*Assign output pointer: */
++	*pvector=vector;
++	*pvector_rows=rows;
++
++	return 1;
++}
+Index: ../trunk-jpl/src/wrappers/matlab/io/OptionParse.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/OptionParse.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/OptionParse.cpp	(revision 13749)
+@@ -0,0 +1,201 @@
++/*\file OptionParse.c
++ *\brief: functions to parse the mex options.
++ */
++#ifdef HAVE_CONFIG_H
++    #include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include <cstring> 
++#include "./matlabio.h"
++#include "../../c/shared/shared.h"
++#include "../../c/io/io.h"
++
++GenericOption<double>* OptionDoubleParse( char* name, const mxArray* prhs[]){ /*{{{*/
++
++	GenericOption<double> *odouble = NULL;
++
++	/*check and parse the name  */
++	odouble=new GenericOption<double>();
++	odouble->name =xNew<char>(strlen(name)+1);
++	memcpy(odouble->name,name,(strlen(name)+1)*sizeof(char));
++	FetchData(&odouble->value,prhs[0]);
++	odouble->numel=1;
++	odouble->ndims=1;
++	odouble->size=NULL;
++
++	return(odouble);
++}/*}}}*/
++GenericOption<double*>* OptionDoubleArrayParse( char* name, const mxArray* prhs[]){ /*{{{*/
++
++	GenericOption<double*> *odouble = NULL;
++
++	/*check and parse the name  */
++	odouble=new GenericOption<double*>();
++	odouble->name =xNew<char>(strlen(name)+1);
++	memcpy(odouble->name,name,(strlen(name)+1)*sizeof(char));
++
++	/*check and parse the value  */
++	if (!mxIsClass(prhs[0],"double")){
++		_error_("Value of option \"" << odouble->name  << "\" must be class \"double\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
++	}
++	FetchData(&odouble->value,&odouble->numel,&odouble->ndims,&odouble->size,prhs[0]);
++
++	return(odouble);
++}/*}}}*/
++GenericOption<bool*>* OptionLogicalParse( char* name, const mxArray* prhs[]){ /*{{{*/
++
++	GenericOption<bool*> *ological = NULL;
++
++	/*check and parse the name  */
++	ological=new GenericOption<bool*>();
++	ological->name =xNew<char>(strlen(name)+1);
++	memcpy(ological->name,name,(strlen(name)+1)*sizeof(char));
++
++	/*check and parse the value  */
++	if (!mxIsClass(prhs[0],"logical")){
++		_error_("Value of option \"" << ological->name  << "\" must be class \"logical\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
++	}
++	FetchData(&ological->value,&ological->numel,&ological->ndims,&ological->size,prhs[0]);
++
++	return(ological);
++}/*}}}*/
++GenericOption<char*>* OptionCharParse( char* name, const mxArray* prhs[]){ /*{{{*/
++
++	GenericOption<char*>  *ochar = NULL;
++
++	/*check and parse the name  */
++	ochar=new GenericOption<char*>();
++	ochar->name =xNew<char>(strlen(name)+1);
++	memcpy(ochar->name,name,(strlen(name)+1)*sizeof(char));
++
++	/*check and parse the value  */
++	if (!mxIsClass(prhs[0],"char")){
++		_error_("Value of option \"" << ochar->name  << "\" must be class \"char\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
++	}
++	FetchData(&ochar->value,&ochar->numel,&ochar->ndims,&ochar->size,prhs[0]);
++
++	return(ochar);
++}/*}}}*/
++GenericOption<Options**>* OptionStructParse( char* name, const mxArray* prhs[]){ /*{{{*/
++
++	int            i;
++	char           namei[161];
++	Option*                   option      = NULL;
++	GenericOption<Options**>  *ostruct    = NULL;
++	const mwSize  *ipt        = NULL;
++	const mxArray *structi;
++	mwIndex        sindex;
++
++	/*check and parse the name  */
++	ostruct=new GenericOption<Options**>();
++	ostruct->name =xNew<char>(strlen(name)+1);
++	memcpy(ostruct->name,name,(strlen(name)+1)*sizeof(char));
++
++	/*check and parse the value  */
++	if (!mxIsClass(prhs[0],"struct")){
++		_error_("Value of option \"" << ostruct->name  << "\" must be class \"struct\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
++	}
++	ostruct->numel=mxGetNumberOfElements(prhs[0]);
++	ostruct->ndims=mxGetNumberOfDimensions(prhs[0]);
++	ipt           =mxGetDimensions(prhs[0]);
++	ostruct->size =xNew<int>(ostruct->ndims);
++	for (i=0; i<ostruct->ndims; i++) ostruct->size[i]=(int)ipt[i];
++	if (ostruct->numel) ostruct->value=xNew<Options*>(ostruct->numel);
++
++	/*loop through and process each element of the struct array  */
++	for (sindex=0; sindex<ostruct->numel; sindex++) {
++		ostruct->value[sindex]=new Options;
++
++		/*loop through and process each field for the element  */
++		for (i=0; i<mxGetNumberOfFields(prhs[0]); i++) {
++			sprintf(namei,"%s.%s",name,mxGetFieldNameByNumber(prhs[0],i));
++			structi=mxGetFieldByNumber(prhs[0],sindex,i);
++
++			option=(Option*)OptionParse(namei,&structi);
++			ostruct->value[sindex]->AddObject((Object*)option);
++			option=NULL;
++		}
++	}
++
++	return(ostruct);
++}/*}}}*/
++GenericOption<Options*>* OptionCellParse( char* name, const mxArray* prhs[]){ /*{{{*/
++
++	int            i;
++	int           *dims;
++	char           namei[161];
++	char           cstr[81];
++	GenericOption<Options*> *ocell      = NULL;
++	Option        *option     = NULL;
++	const mwSize  *ipt        = NULL;
++	const mxArray *celli;
++	mwIndex        cindex;
++
++	/*check and parse the name  */
++	ocell=new GenericOption<Options*>();
++	ocell->name =xNew<char>(strlen(name)+1);
++	memcpy(ocell->name,name,(strlen(name)+1)*sizeof(char));
++
++	/*check and parse the value  */
++	if (!mxIsClass(prhs[0],"cell")){
++		_error_("Value of option \"" << ocell->name  << "\" must be class \"cell\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
++	}
++
++	ocell->numel=mxGetNumberOfElements(prhs[0]);
++	ocell->ndims=mxGetNumberOfDimensions(prhs[0]);
++	ipt         =mxGetDimensions(prhs[0]);
++	ocell->size =xNew<int>(ocell->ndims);
++	for (i=0; i<ocell->ndims; i++) ocell->size[i]=(int)ipt[i];
++	ocell->value=new Options;
++
++	/*loop through and process each element of the cell array  */
++	dims=xNew<int>(ocell->ndims);
++	for (cindex=0; cindex<ocell->numel; cindex++) {
++		ColumnWiseDimsFromIndex(dims,(int)cindex,ocell->size,ocell->ndims);
++		StringFromDims(cstr,dims,ocell->ndims);
++		#ifdef _INTEL_WIN_
++			_snprintf(namei,161,"%s%s",name,cstr);
++		#else
++			snprintf(namei,161,"%s%s",name,cstr);
++		#endif
++		celli=mxGetCell(prhs[0],cindex);
++
++		option=(Option*)OptionParse(namei,&celli);
++		ocell->value->AddObject((Object*)option);
++		option=NULL;
++	}
++	xDelete<int>(dims);
++
++	return(ocell);
++}/*}}}*/
++Option* OptionParse(char* name, const mxArray* prhs[]){ /*{{{*/
++
++	Option  *option = NULL;
++	mxArray *lhs[1];
++
++	/*parse the value according to the matlab data type  */
++	if     (mxIsClass(prhs[0],"double")  && (mxGetNumberOfElements(prhs[0])==1))
++	 option=(Option*)OptionDoubleParse(name,prhs);
++	else if(mxIsClass(prhs[0],"double")  && (mxGetNumberOfElements(prhs[0])!=1))
++	 option=(Option*)OptionDoubleArrayParse(name,prhs);
++	else if(mxIsClass(prhs[0],"logical"))
++	 option=(Option*)OptionLogicalParse(name,prhs);
++	else if(mxIsClass(prhs[0],"char"))
++	 option=(Option*)OptionCharParse(name,prhs);
++	else if(mxIsClass(prhs[0],"struct"))
++	 option=(Option*)OptionStructParse(name,prhs);
++	else if(mxIsClass(prhs[0],"cell"))
++	 option=(Option*)OptionCellParse(name,prhs);
++	else {
++		_pprintLine_("  Converting value of option \"" << name << "\" from unrecognized class \"" << mxGetClassName(prhs[0]) << "\" to class \"" << "struct" << "\".");
++		if (!mexCallMATLAB(1,lhs,1,(mxArray**)prhs,"struct")) {
++			option=(Option*)OptionStructParse(name,(const mxArray**)lhs);
++			mxDestroyArray(lhs[0]);
++		}
++		else _error_("Second argument value of option \""<< name <<"\" is of unrecognized class \""<< mxGetClassName(prhs[0]) <<"\".");
++	}
++
++	return(option);
++}/*}}}*/
+Index: ../trunk-jpl/src/wrappers/matlab/io/CheckNumMatlabArguments.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/CheckNumMatlabArguments.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/CheckNumMatlabArguments.cpp	(revision 13749)
+@@ -0,0 +1,23 @@
++/*!\file CheckNumMatlabArguments.cpp:
++ * \brief: check number of arguments and report an usage error message.
++ */
++
++#include "./matlabio.h"
++#include "../../c/shared/Exceptions/exceptions.h"
++
++int CheckNumMatlabArguments(int nlhs,int NLHS, int nrhs,int NRHS, const char* THISFUNCTION, void (*function)( void )){
++
++	/*checks on arguments on the matlab side: */
++	if (nrhs==0 && nlhs==0) {
++		/*unless NLHS=0 and NRHS=0, we are just asking for documentation: */
++		if (NRHS==0 && NLHS==0)return 1;
++		/* special case: */
++		function();
++		_error_("usage: see above");
++	}
++	else if (nlhs!=NLHS || nrhs!=NRHS ) {
++		function(); 
++		_error_("usage error.");
++	}
++	return 1;
++}
+Index: ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 13749)
+@@ -0,0 +1,691 @@
++/*\file FetchData.cpp:
++ * \brief: general I/O interface to fetch data in matlab
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./matlabio.h"
++#include "../../c/shared/shared.h"
++
++/*Primitive data types*/
++/*FUNCTION FetchData(double** pmatrix,int* pM,int *pN,const mxArray* dataref){{{*/
++void FetchData(double** pmatrix,int* pM,int *pN,const mxArray* dataref){
++
++	double*  outmatrix=NULL;
++	int      outmatrix_rows,outmatrix_cols;
++
++	if(mxIsEmpty(dataref) ){
++		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
++		outmatrix_rows=0;
++		outmatrix_cols=0;
++		outmatrix=NULL;
++	}
++	else if( mxIsClass(dataref,"double") || 
++				mxIsClass(dataref,"single") || 
++				mxIsClass(dataref,"int16") || 
++				mxIsClass(dataref,"int8") || 
++				mxIsClass(dataref,"uint8")){
++		/*Check dataref is not pointing to NaN: */
++		if ( mxIsNaN(*(mxGetPr(dataref))) && (mxGetM(dataref)==1) && (mxGetN(dataref)==1) ){
++			outmatrix_rows=0;
++			outmatrix_cols=0;
++			outmatrix=NULL;
++		}
++		else{
++			if(!mxIsClass(dataref,"double") && !mxIsClass(dataref,"single")){
++				_printLine_("Warning: converting matlab data from '" << mxGetClassName(dataref) << "' to 'double'");
++			}
++			/*Convert matlab matrix to double* matrix: */
++			MatlabMatrixToDoubleMatrix(&outmatrix,&outmatrix_rows,&outmatrix_cols,dataref);
++		}
++	}
++	else{
++		/*This is an error: we don't have the correct input!: */
++		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
++	}
++
++	/*Assign output pointers:*/
++	*pmatrix=outmatrix;
++	if (pM)*pM=outmatrix_rows;
++	if (pN)*pN=outmatrix_cols;
++
++}
++/*}}}*/
++/*FUNCTION FetchData(double** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref){{{*/
++void FetchData(double** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref){
++
++	int     outmatrix_numel,outmatrix_ndims;
++	double *outmatrix       = NULL;
++	int    *outmatrix_size  = NULL;
++
++	if(mxIsEmpty(dataref) ){
++		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
++		outmatrix_numel = 0;
++		outmatrix_ndims = 0;
++		outmatrix_size  = NULL;
++		outmatrix       = NULL;
++	}
++	else if( mxIsClass(dataref,"double") || 
++				mxIsClass(dataref,"single") || 
++				mxIsClass(dataref,"int16") || 
++				mxIsClass(dataref,"int8") || 
++				mxIsClass(dataref,"uint8")){
++
++		/*Check dataref is not pointing to NaN: */
++		if (mxIsNaN(*(mxGetPr(dataref))) && (mxGetNumberOfElements(dataref)==1)){
++			outmatrix_numel = 0;
++			outmatrix_ndims = 0;
++			outmatrix_size  = NULL;
++			outmatrix       = NULL;
++		}
++		else{
++			if(!mxIsClass(dataref,"double") && !mxIsClass(dataref,"single")){
++				_printLine_("Warning: converting matlab data from '" << mxGetClassName(dataref) << "' to 'double'");
++			}
++			/*Convert matlab n-dim array to double* matrix: */
++			MatlabNArrayToNArray(&outmatrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
++		}
++	}
++	else{
++		/*This is an error: we don't have the correct input!: */
++		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
++	}
++
++	/*Assign output pointers:*/
++	*pmatrix=outmatrix;
++	if (pnumel)*pnumel=outmatrix_numel;
++	if (pndims)*pndims=outmatrix_ndims;
++	if (psize )*psize =outmatrix_size;
++	else xDelete<int>(outmatrix_size);
++
++}
++/*}}}*/
++/*FUNCTION FetchData(int** pmatrix,int* pM,int *pN,const mxArray* dataref){{{*/
++void FetchData(int** pmatrix,int* pM,int *pN,const mxArray* dataref){
++
++	int     i,outmatrix_rows,outmatrix_cols;
++	double *doublematrix=NULL;
++	int    *outmatrix=NULL;
++
++	if(mxIsEmpty(dataref) ){
++		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
++		outmatrix_rows=0;
++		outmatrix_cols=0;
++		outmatrix=NULL;
++	}
++	else if( mxIsClass(dataref,"double") || 
++				mxIsClass(dataref,"single") || 
++				mxIsClass(dataref,"int16") || 
++				mxIsClass(dataref,"int8") || 
++				mxIsClass(dataref,"uint8")){
++
++		/*Check dataref is not pointing to NaN: */
++		if ( mxIsNaN(*(mxGetPr(dataref))) && (mxGetM(dataref)==1) && (mxGetN(dataref)==1) ){
++			outmatrix_rows=0;
++			outmatrix_cols=0;
++			outmatrix=NULL;
++		}
++		else{
++			if(!mxIsClass(dataref,"double") && !mxIsClass(dataref,"single")){
++				_printLine_("Warning: converting matlab data from '" << mxGetClassName(dataref) << "' to 'double'");
++			}
++			/*Convert matlab matrix to double* matrix: */
++			MatlabMatrixToDoubleMatrix(&doublematrix,&outmatrix_rows,&outmatrix_cols,dataref);
++
++			/*Convert double matrix into integer matrix: */
++			outmatrix=xNew<int>(outmatrix_rows*outmatrix_cols);
++			for(i=0;i<outmatrix_rows*outmatrix_cols;i++)outmatrix[i]=(int)doublematrix[i];
++		}
++	}
++	else{
++		/*This is an error: we don't have the correct input!: */
++		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
++	}
++
++	/*Assign output pointers:*/
++	*pmatrix=outmatrix;
++	if (pM)*pM=outmatrix_rows;
++	if (pN)*pN=outmatrix_cols;
++}
++/*}}}*/
++/*FUNCTION FetchData(bool** pmatrix,int* pM,int *pN,const mxArray* dataref){{{*/
++void FetchData(bool** pmatrix,int* pM,int *pN,const mxArray* dataref){
++
++	int     i,outmatrix_rows,outmatrix_cols;
++	double *doublematrix=NULL;
++	bool   *outmatrix=NULL;
++
++	if(mxIsEmpty(dataref) ){
++		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
++		outmatrix_rows=0;
++		outmatrix_cols=0;
++		outmatrix=NULL;
++	}
++	else if (mxIsClass(dataref,"double") ){
++
++		/*Check dataref is not pointing to NaN: */
++		if ( mxIsNaN(*(mxGetPr(dataref))) && (mxGetM(dataref)==1) && (mxGetN(dataref)==1) ){
++			outmatrix_rows=0;
++			outmatrix_cols=0;
++			outmatrix=NULL;
++		}
++		else{
++
++			/*Convert matlab matrix to double* matrix: */
++			MatlabMatrixToDoubleMatrix(&doublematrix,&outmatrix_rows,&outmatrix_cols,dataref);
++
++			/*Convert double matrix into integer matrix: */
++			outmatrix=xNew<bool>(outmatrix_rows*outmatrix_cols);
++			for(i=0;i<outmatrix_rows;i++)outmatrix[i]=(bool)doublematrix[i];
++		}
++	}
++	else{
++		/*This is an error: we don't have the correct input!: */
++		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
++	}
++
++	/*Assign output pointers:*/
++	*pmatrix=outmatrix;
++	if (pM)*pM=outmatrix_rows;
++	if (pN)*pN=outmatrix_cols;
++}
++/*}}}*/
++/*FUNCTION FetchData(bool** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref){{{*/
++void FetchData(bool** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref){
++
++	int      i;
++	int      outmatrix_numel,outmatrix_ndims;
++	int*     outmatrix_size=NULL;
++	double*  doublematrix=NULL;
++	bool*    outmatrix=NULL;
++
++	if(mxIsEmpty(dataref) ){
++		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
++		outmatrix_numel=0;
++		outmatrix_ndims=0;
++		outmatrix_size =NULL;
++		outmatrix=NULL;
++	}
++	else if (mxIsClass(dataref,"logical") ){
++
++		/*Check dataref is not pointing to NaN: */
++		if ( mxIsNaN(*((bool*)mxGetData(dataref))) && (mxGetNumberOfElements(dataref)==1) ){
++			outmatrix_numel=0;
++			outmatrix_ndims=0;
++			outmatrix_size =NULL;
++			outmatrix=NULL;
++		}
++		else{
++
++			/*Convert matlab n-dim array to bool* matrix: */
++			MatlabNArrayToNArray(&outmatrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
++		}
++	}
++	else if (mxIsClass(dataref,"double") ){
++
++		/*Check dataref is not pointing to NaN: */
++		if ( mxIsNaN(*(mxGetPr(dataref))) && (mxGetNumberOfElements(dataref)==1) ){
++			outmatrix_numel=0;
++			outmatrix_ndims=0;
++			outmatrix_size =NULL;
++			outmatrix=NULL;
++		}
++		else{
++
++			/*Convert matlab n-dim array to double* matrix: */
++			MatlabNArrayToNArray(&doublematrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
++
++			/*Convert double matrix into bool matrix: */
++			outmatrix=xNew<bool>(outmatrix_numel);
++			for(i=0;i<outmatrix_numel;i++)outmatrix[i]=(bool)doublematrix[i];
++			xDelete<double>(doublematrix);
++		}
++	}
++	else{
++		/*This is an error: we don't have the correct input!: */
++		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
++	}
++
++	/*Assign output pointers:*/
++	*pmatrix=outmatrix;
++	if (pnumel)*pnumel=outmatrix_numel;
++	if (pndims)*pndims=outmatrix_ndims;
++	if (psize )*psize =outmatrix_size;
++	else xDelete<int>(outmatrix_size);
++
++}
++/*}}}*/
++/*FUNCTION FetchData(double** pvector,int* pM,const mxArray* dataref){{{*/
++void FetchData(double** pvector,int* pM,const mxArray* dataref){
++
++	double* outvector=NULL;
++	int outvector_rows;
++
++	if(mxIsEmpty(dataref)){
++		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
++		outvector_rows=0;
++		outvector=NULL;
++	}
++	else if (mxIsClass(dataref,"double") ){
++
++		/*Convert matlab vector to double*  vector: */
++		MatlabVectorToDoubleVector(&outvector,&outvector_rows,dataref);
++
++	}
++	else{
++		/*This is an error: we don't have the correct input!: */
++		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
++	}
++
++	/*Assign output pointers:*/
++	*pvector=outvector;
++	if (pM)*pM=outvector_rows;
++}
++/*}}}*/
++/*FUNCTION FetchData(int** pvector,int* pM,const mxArray* dataref){{{*/
++void FetchData(int** pvector,int* pM,const mxArray* dataref){
++
++	int    i;
++	double *doublevector   = NULL;
++	int    *outvector      = NULL;
++	int     outvector_rows;
++
++	if(mxIsEmpty(dataref)){
++		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
++		outvector_rows=0;
++		outvector=NULL;
++	}
++	else if (mxIsClass(dataref,"double") ){
++
++		/*Convert matlab vector to double*  vector: */
++		MatlabVectorToDoubleVector(&doublevector,&outvector_rows,dataref);
++
++		/*Convert double vector into integer vector: */
++		outvector=xNew<int>(outvector_rows);
++		for(i=0;i<outvector_rows;i++)outvector[i]=(int)doublevector[i];
++	}
++	else{
++		/*This is an error: we don't have the correct input!: */
++		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
++	}
++
++	/*Assign output pointers:*/
++	*pvector=outvector;
++	if (pM)*pM=outvector_rows;
++}
++/*}}}*/
++/*FUNCTION FetchData(bool** pvector,int* pM,const mxArray* dataref){{{*/
++void FetchData(bool** pvector,int* pM,const mxArray* dataref){
++
++	int    i;
++	double *doublevector   = NULL;
++	bool   *outvector      = NULL;
++	int     outvector_rows;
++
++	if(mxIsEmpty(dataref)){
++		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
++		outvector_rows=0;
++		outvector=NULL;
++	}
++	else if (mxIsClass(dataref,"double") ){
++
++		/*Convert matlab vector to double*  vector: */
++		MatlabVectorToDoubleVector(&doublevector,&outvector_rows,dataref);
++
++		/*Convert double vector into integer vector: */
++		outvector=xNew<bool>(outvector_rows);
++		for(i=0;i<outvector_rows;i++)outvector[i]=(bool)doublevector[i];
++	}
++	else{
++		/*This is an error: we don't have the correct input!: */
++		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
++	}
++
++	/*Assign output pointers:*/
++	*pvector=outvector;
++	if (pM)*pM=outvector_rows;
++}
++/*}}}*/
++/*FUNCTION FetchData(float** pvector,int* pM,const mxArray* dataref){{{*/
++void FetchData(float** pvector,int* pM,const mxArray* dataref){
++
++	int    i;
++	double *doublevector   = NULL;
++	float  *outvector      = NULL;
++	int     outvector_rows;
++
++	if(mxIsEmpty(dataref)){
++		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
++		outvector_rows=0;
++		outvector=NULL;
++	}
++	else if (mxIsClass(dataref,"double") ){
++
++		/*Convert matlab vector to double*  vector: */
++		MatlabVectorToDoubleVector(&doublevector,&outvector_rows,dataref);
++
++		/*Convert double vector into float vector: */
++		outvector=xNew<float>(outvector_rows);
++		for(i=0;i<outvector_rows;i++)outvector[i]=(float)doublevector[i];
++	}
++	else{
++		/*This is an error: we don't have the correct input!: */
++		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
++	}
++
++	/*Assign output pointers:*/
++	*pvector=outvector;
++	if (pM)*pM=outvector_rows;
++}
++/*}}}*/
++/*FUNCTION FetchData(char** pstring,const mxArray* dataref){{{*/
++void FetchData(char** pstring,const mxArray* dataref){
++
++	char* outstring=NULL;
++
++	/*Ok, the string should be coming directly from the matlab workspace: */
++	if (!mxIsClass(dataref,"char")){
++		_error_("input data_type is not a string!");
++	}
++	else{
++		/*Recover the string:*/
++		int stringlen;
++
++		stringlen = mxGetM(dataref)*mxGetN(dataref)+1;
++		outstring =xNew<char>(stringlen);
++		mxGetString(dataref,outstring,stringlen);
++	}
++
++	/*Assign output pointers:*/
++	*pstring=outstring;
++}/*}}}*/
++/*FUNCTION FetchData(char** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref){{{*/
++void FetchData(char** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref){
++
++	int      outmatrix_numel,outmatrix_ndims;
++	int*     outmatrix_size=NULL;
++	char*    outmatrix=NULL;
++
++	if(mxIsEmpty(dataref) ){
++		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
++		outmatrix_numel=0;
++		outmatrix_ndims=0;
++		outmatrix_size =NULL;
++		outmatrix=NULL;
++	}
++	else if (mxIsClass(dataref,"char") ){
++
++		/*Convert matlab n-dim array to char* matrix: */
++		MatlabNArrayToNArray(&outmatrix,&outmatrix_numel,&outmatrix_ndims,&outmatrix_size,dataref);
++	}
++	else{
++		/*This is an error: we don't have the correct input!: */
++		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
++	}
++
++	/*Assign output pointers:*/
++	*pmatrix=outmatrix;
++	if (pnumel)*pnumel=outmatrix_numel;
++	if (pndims)*pndims=outmatrix_ndims;
++	if (psize )*psize =outmatrix_size;
++	else xDelete<int>(outmatrix_size);
++
++}
++/*}}}*/
++/*FUNCTION FetchData(double* pscalar,const mxArray* dataref){{{*/
++void FetchData(double* pscalar,const mxArray* dataref){
++
++	double scalar;
++
++	if (!mxIsClass(dataref,"double")){
++		_error_("input data_type is not a double!");
++	}
++	else{
++		/*Recover the double: */
++		scalar=mxGetScalar(dataref);
++	}
++
++	/*Assign output pointers:*/
++	*pscalar=scalar;
++}
++/*}}}*/
++/*FUNCTION FetchData(int* pinteger,const mxArray* dataref){{{*/
++void FetchData(int* pinteger,const mxArray* dataref){
++
++	int integer;
++
++	if (!mxIsClass(dataref,"double")){
++		_error_("input data_type is not a scalar!");
++	}
++	else{
++		/*Recover the double: */
++		integer=(int)mxGetScalar(dataref);
++	}
++
++	/*Assign output pointers:*/
++	*pinteger=integer;
++}
++/*}}}*/
++/*FUNCTION FetchData(bool* pboolean,const mxArray* dataref){{{*/
++void FetchData(bool* pboolean,const mxArray* dataref){
++
++	bool* mxbool_ptr=NULL;
++
++	if (mxIsClass(dataref,"logical")){
++		if(mxGetM(dataref)!=1) _error_("input data is not of size 1x1");
++		if(mxGetN(dataref)!=1) _error_("input data is not of size 1x1");
++		mxbool_ptr=mxGetLogicals(dataref);
++	}
++	else{
++		_error_("input data_type is not a bool!");
++	}
++
++	*pboolean=*mxbool_ptr;
++}
++/*}}}*/
++
++/*ISSM objects*/
++/*FUNCTION FetchData(Matrix<double>** pmatrix,const mxArray* dataref){{{*/
++void FetchData(Matrix<double>** pmatrix,const mxArray* dataref){
++
++	Matrix<double>* outmatrix=NULL;
++	int dummy=0;
++
++	if (mxIsClass(dataref,"double") ){
++
++		/*Convert matlab matrix to matrix: */
++		outmatrix=MatlabMatrixToMatrix(dataref);
++
++	}
++	else{
++		/*This is an error: we don't have the correct input!: */
++		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
++	}
++
++	/*Assign output pointers:*/
++	*pmatrix=outmatrix;
++}
++/*}}}*/
++/*FUNCTION FetchData(Vector<double>** pvector,const mxArray* dataref){{{*/
++void FetchData(Vector<double>** pvector,const mxArray* dataref){
++
++	Vector<double>* vector=NULL;
++	int dummy;
++
++	if(mxIsEmpty(dataref)){
++		/*Nothing to pick up. Just initialize matrix pointer to NULL: */
++		vector=new Vector<double>(0);
++	}
++	else if (mxIsClass(dataref,"double") ){
++
++		/*Convert matlab vector to petsc vector: */
++		vector=MatlabVectorToVector(dataref);
++	}
++	else{
++		/*This is an error: we don't have the correct input!: */
++		_error_("Input parameter of class " << mxGetClassName(dataref) << " not supported yet");
++	}
++
++	/*Assign output pointers:*/
++	*pvector=vector;
++}
++/*}}}*/
++/*FUNCTION FetchData(BamgGeom** pbamggeom,const mxArray* dataref){{{*/
++void FetchData(BamgGeom** pbamggeom,const mxArray* dataref){
++
++	/*Initialize output*/
++	BamgGeom* bamggeom=new BamgGeom();
++
++	/*Fetch all fields*/
++	FetchData(&bamggeom->Vertices,&bamggeom->VerticesSize[0],&bamggeom->VerticesSize[1],mxGetAssignedField(dataref,0,"Vertices"));
++	FetchData(&bamggeom->Edges, &bamggeom->EdgesSize[0], &bamggeom->EdgesSize[1], mxGetAssignedField(dataref,0,"Edges"));
++	FetchData(&bamggeom->Corners, &bamggeom->CornersSize[0], &bamggeom->CornersSize[1], mxGetAssignedField(dataref,0,"Corners"));
++	FetchData(&bamggeom->RequiredVertices,&bamggeom->RequiredVerticesSize[0],&bamggeom->RequiredVerticesSize[1],mxGetAssignedField(dataref,0,"RequiredVertices"));
++	FetchData(&bamggeom->RequiredEdges, &bamggeom->RequiredEdgesSize[0], &bamggeom->RequiredEdgesSize[1], mxGetAssignedField(dataref,0,"RequiredEdges"));
++	FetchData(&bamggeom->CrackedEdges,&bamggeom->CrackedEdgesSize[0],&bamggeom->CrackedEdgesSize[1],mxGetAssignedField(dataref,0,"CrackedEdges"));
++	FetchData(&bamggeom->SubDomains,&bamggeom->SubDomainsSize[0],&bamggeom->SubDomainsSize[1],mxGetAssignedField(dataref,0,"SubDomains"));
++
++	/*Assign output pointers:*/
++	*pbamggeom=bamggeom;
++}
++/*}}}*/
++/*FUNCTION FetchData(BamgMesh** pbamgmesh,const mxArray* dataref){{{*/
++void FetchData(BamgMesh** pbamgmesh,const mxArray* dataref){
++
++	/*Initialize output*/
++	BamgMesh* bamgmesh=new BamgMesh();
++
++	/*Fetch all fields*/
++	FetchData(&bamgmesh->Vertices,&bamgmesh->VerticesSize[0],&bamgmesh->VerticesSize[1],mxGetAssignedField(dataref,0,"Vertices"));
++	FetchData(&bamgmesh->Edges, &bamgmesh->EdgesSize[0], &bamgmesh->EdgesSize[1], mxGetAssignedField(dataref,0,"Edges"));
++	FetchData(&bamgmesh->Triangles, &bamgmesh->TrianglesSize[0], &bamgmesh->TrianglesSize[1], mxGetAssignedField(dataref,0,"Triangles"));
++	FetchData(&bamgmesh->CrackedEdges,&bamgmesh->CrackedEdgesSize[0],&bamgmesh->CrackedEdgesSize[1],mxGetAssignedField(dataref,0,"CrackedEdges"));
++	FetchData(&bamgmesh->VerticesOnGeomEdge,&bamgmesh->VerticesOnGeomEdgeSize[0],&bamgmesh->VerticesOnGeomEdgeSize[1],mxGetAssignedField(dataref,0,"VerticesOnGeomEdge"));
++	FetchData(&bamgmesh->VerticesOnGeomVertex,&bamgmesh->VerticesOnGeomVertexSize[0],&bamgmesh->VerticesOnGeomVertexSize[1],mxGetAssignedField(dataref,0,"VerticesOnGeomVertex"));
++	FetchData(&bamgmesh->EdgesOnGeomEdge, &bamgmesh->EdgesOnGeomEdgeSize[0], &bamgmesh->EdgesOnGeomEdgeSize[1], mxGetAssignedField(dataref,0,"EdgesOnGeomEdge"));
++	FetchData(&bamgmesh->IssmSegments,&bamgmesh->IssmSegmentsSize[0],&bamgmesh->IssmSegmentsSize[1],mxGetAssignedField(dataref,0,"IssmSegments"));
++
++	/*Assign output pointers:*/
++	*pbamgmesh=bamgmesh;
++}
++/*}}}*/
++/*FUNCTION FetchData(BamgOpts** pbamgopts,const mxArray* dataref){{{*/
++void FetchData(BamgOpts** pbamgopts,const mxArray* dataref){
++
++	/*Initialize output*/
++	BamgOpts* bamgopts=new BamgOpts();
++
++	/*Fetch all fields*/
++	FetchData(&bamgopts->anisomax,mxGetField(dataref,0,"anisomax"));
++	FetchData(&bamgopts->cutoff,mxGetField(dataref,0,"cutoff"));
++	FetchData(&bamgopts->coeff,mxGetField(dataref,0,"coeff"));
++	FetchData(&bamgopts->errg,mxGetField(dataref,0,"errg"));
++	FetchData(&bamgopts->gradation,mxGetField(dataref,0,"gradation"));
++	FetchData(&bamgopts->Hessiantype,mxGetField(dataref,0,"Hessiantype"));
++	FetchData(&bamgopts->MaxCornerAngle,mxGetField(dataref,0,"MaxCornerAngle"));
++	FetchData(&bamgopts->maxnbv,mxGetField(dataref,0,"maxnbv"));
++	FetchData(&bamgopts->maxsubdiv,mxGetField(dataref,0,"maxsubdiv"));
++	FetchData(&bamgopts->Metrictype,mxGetField(dataref,0,"Metrictype"));
++	FetchData(&bamgopts->nbjacobi,mxGetField(dataref,0,"nbjacobi"));
++	FetchData(&bamgopts->nbsmooth,mxGetField(dataref,0,"nbsmooth"));
++	FetchData(&bamgopts->omega,mxGetField(dataref,0,"omega"));
++	FetchData(&bamgopts->power,mxGetField(dataref,0,"power"));
++	FetchData(&bamgopts->verbose,mxGetField(dataref,0,"verbose"));
++
++	FetchData(&bamgopts->Crack,mxGetField(dataref,0,"Crack"));
++	FetchData(&bamgopts->geometricalmetric,mxGetField(dataref,0,"geometricalmetric"));
++	FetchData(&bamgopts->KeepVertices,mxGetField(dataref,0,"KeepVertices"));
++	FetchData(&bamgopts->splitcorners,mxGetField(dataref,0,"splitcorners"));
++
++	FetchData(&bamgopts->hmin,mxGetField(dataref,0,"hmin"));
++	FetchData(&bamgopts->hmax,mxGetField(dataref,0,"hmax"));
++	FetchData(&bamgopts->hminVertices,&bamgopts->hminVerticesSize[0],&bamgopts->hminVerticesSize[1],mxGetField(dataref,0,"hminVertices"));
++	FetchData(&bamgopts->hmaxVertices,&bamgopts->hmaxVerticesSize[0],&bamgopts->hmaxVerticesSize[1],mxGetField(dataref,0,"hmaxVertices"));
++	FetchData(&bamgopts->hVertices,&bamgopts->hVerticesSize[0],&bamgopts->hVerticesSize[1],mxGetField(dataref,0,"hVertices"));
++	FetchData(&bamgopts->metric,&bamgopts->metricSize[0],&bamgopts->metricSize[1],mxGetField(dataref,0,"metric"));
++	FetchData(&bamgopts->field,&bamgopts->fieldSize[0],&bamgopts->fieldSize[1],mxGetField(dataref,0,"field"));
++	FetchData(&bamgopts->err,&bamgopts->errSize[0],&bamgopts->errSize[1],mxGetField(dataref,0,"err"));
++
++	/*Additional checks*/
++	bamgopts->Check();
++
++	/*Assign output pointers:*/
++	*pbamgopts=bamgopts;
++}
++/*}}}*/
++/*FUNCTION FetchData(Options** poptions,const mxArray** pdataref){{{*/
++void FetchData(Options** poptions,int istart, int nrhs,const mxArray** pdataref){
++
++	char   *name   = NULL;
++	Option *option = NULL;
++
++	/*Initialize output*/
++	Options* options=new Options();
++
++	/*Fetch all options*/
++	for (int i=istart; i<nrhs; i=i+2){
++		if (!mxIsClass(pdataref[i],"char")) _error_("Argument " << i+1 << " must be name of option");
++
++		FetchData(&name,pdataref[i]);
++		if(i+1 == nrhs) _error_("Argument " << i+2 << " must exist and be value of option \"" << name << "\".");
++
++		option=(Option*)OptionParse(name,&pdataref[i+1]);
++		options->AddOption(option);
++		option=NULL;
++	}
++
++	/*Assign output pointers:*/
++	*poptions=options;
++}
++/*}}}*/
++/*FUNCTION FetchData(DataSet** pcontours,const mxArray* dataref){{{*/
++void FetchData(DataSet** pcontours,const mxArray* dataref){
++
++	int              numcontours,index,test1,test2;
++	char            *contourname = NULL;
++	DataSet         *contours    = NULL;
++	Contour<double> *contouri    = NULL;
++
++	if (mxIsClass(dataref,"char")){
++		FetchData(&contourname,dataref);
++		contours=DomainOutlineRead<double>(contourname);
++	}
++	else if(mxIsClass(dataref,"struct")){
++
++		contours=new DataSet(0);
++		numcontours=mxGetNumberOfElements(dataref);
++
++		for(int i=0;i<numcontours;i++){
++
++			contouri=xNew<Contour<double> >(1);
++
++			index = mxGetFieldNumber(dataref,"nods");
++			if(index==-1) _error_("input structure does not have a 'nods' field");
++			FetchData(&contouri->nods,mxGetFieldByNumber(dataref,i,index));
++
++			index = mxGetFieldNumber(dataref,"x");
++			if(index==-1) _error_("input structure does not have a 'x' field");
++			FetchData(&contouri->x,&test1,&test2,mxGetFieldByNumber(dataref,i,index));
++			if(test1!=contouri->nods || test2!=1) _error_("field x should be of size ["<<contouri->nods<<" 1]");
++
++			index = mxGetFieldNumber(dataref,"y");
++			if(index==-1) _error_("input structure does not have a 'y' field");
++			FetchData(&contouri->y,&test1,&test2,mxGetFieldByNumber(dataref,i,index));
++			if(test1!=contouri->nods || test2!=1) _error_("field y should be of size ["<<contouri->nods<<" 1]");
++
++			contours->AddObject(contouri);
++		}
++	}
++	else{
++		_error_("Contour is neither a string nor a structure and cannot be loaded ("<<mxGetClassName(dataref)<<" not supported)");
++	}
++
++	/*clean-up and assign output pointer*/
++	xDelete<char>(contourname);
++	*pcontours=contours;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToDoubleVector.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToDoubleVector.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToDoubleVector.cpp	(revision 13749)
+@@ -0,0 +1,93 @@
++/* \file MatlabVectorToDoubleVector.cpp
++ * \brief: convert a sparse or dense matlab vector to a serial vector:
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include <string.h>
++
++/*Matlab includes: */
++#include "./matlabio.h"
++#include "../../c/shared/shared.h"
++
++int MatlabVectorToDoubleVector(double** pvector,int* pvector_rows,const mxArray* mxvector){
++
++	int rows,cols;
++	double* mxvector_ptr=NULL;
++	int ierr;
++	int i,j;
++
++	/*output: */
++	double* vector=NULL;
++
++	/*matlab indices: */
++	mwIndex*    ir=NULL;
++	mwIndex*    jc=NULL;
++	double* pr=NULL;
++	int     count;
++	int     nnz;
++	int     nz;
++
++	/*Ok, first check if we are dealing with a sparse or full vector: */
++	if (mxIsSparse(mxvector)){
++
++		/*Dealing with sparse vector: recover size first: */
++		mxvector_ptr=(double*)mxGetPr(mxvector);
++		rows=mxGetM(mxvector);
++		cols=mxGetN(mxvector);
++		nnz=mxGetNzmax(mxvector);
++
++		/*Check that input is actualy a vector*/
++		if (cols!=1) _error_("input vector of size " << rows << "x" << cols << " should have only one column");
++
++		nz=(int)((double)nnz/(double)rows);
++
++		if(rows){
++			vector=xNewZeroInit<double>(rows);
++
++			/*Now, get ir,jc and pr: */
++			pr=mxGetPr(mxvector);
++			ir=mxGetIr(mxvector);
++			jc=mxGetJc(mxvector);
++
++			/*Now, start inserting data into sparse vector: */
++			count=0;
++			for(i=0;i<cols;i++){
++				for(j=0;j<(jc[i+1]-jc[i]);j++){
++					vector[ir[count]]=pr[count];
++					count++;
++				}
++			}
++		}
++
++	}
++	else{
++
++		/*Dealing with dense vector: recover pointer and size: */
++		mxvector_ptr=(double*)mxGetPr(mxvector);
++		rows=mxGetM(mxvector);
++		cols=mxGetN(mxvector);
++
++		/*Check that input is actualy a vector*/
++		if (cols!=1) _error_("input vector of size " << rows << "x" << cols << " should have only one column");
++
++		/*allocate and memcpy*/
++		if(rows){
++			vector=xNew<double>(rows);
++			memcpy(vector,mxvector_ptr,rows*sizeof(double));
++		}
++		else{
++			vector=NULL;
++		}
++	}
++
++	/*Assign output pointer: */
++	*pvector=vector;
++	*pvector_rows=rows;
++
++	return 1;
++}
+Index: ../trunk-jpl/src/wrappers/matlab/io/WriteMatlabData.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/WriteMatlabData.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/WriteMatlabData.cpp	(revision 13749)
+@@ -0,0 +1,388 @@
++/* \file WriteData.c:
++ * \brief: general interface for writing data
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./matlabio.h"
++#include "../../c/shared/shared.h"
++
++/*Primitive data types*/
++/*FUNCTION WriteData(mxArray** pdataref,double* matrix, int M,int N){{{*/
++void WriteData(mxArray** pdataref,double* matrix, int M,int N){
++
++	mxArray *dataref  = NULL;
++	double  *tmatrix  = NULL;
++
++	if(matrix){
++		/*create the matlab matrixwith Matlab's memory manager */   
++		tmatrix=(double*)mxMalloc(M*N*sizeof(double));
++		for(int i=0;i<M;i++){
++			for(int j=0;j<N;j++){
++				tmatrix[j*M+i]=matrix[i*N+j];
++			}
++		}
++		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
++		mxSetM(dataref,(mwSize)M);
++		mxSetN(dataref,(mwSize)N);
++		mxSetPr(dataref,(double*)tmatrix);
++	}
++	else{
++		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
++	}
++	*pdataref=dataref;
++}
++/*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref,int* matrix, int M,int N){{{*/
++void WriteData(mxArray** pdataref,int* matrix, int M,int N){
++
++	mxArray* dataref = NULL;
++	double*  tmatrix = NULL;
++
++	if(matrix){
++		/*convert to double matrix using Matlab's memory manager*/
++		double* tmatrix=(double*)mxMalloc(M*N*sizeof(double));
++		for(int i=0;i<M;i++){
++			for(int j=0;j<N;j++){
++				tmatrix[j*M+i]=(double)matrix[i*N+j];
++			}
++		}
++		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
++		mxSetM(dataref,(mwSize)M);
++		mxSetN(dataref,(mwSize)N);
++		mxSetPr(dataref,(double*)tmatrix);
++	}
++	else{
++		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
++	}
++	*pdataref=dataref;
++}
++/*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref,double* vector, int M){{{*/
++void WriteData(mxArray** pdataref,double* vector, int M){
++
++	mxArray* dataref       = NULL;
++	double*  vector_matlab = NULL;
++
++	if(vector){
++
++		/*create the matlab vector with Matlab's memory manager */
++		vector_matlab=(double*)mxMalloc(M*sizeof(double));
++		for(int i=0;i<M;i++) vector_matlab[i]=vector[i];
++		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
++		mxSetM(dataref,(mwSize)M);
++		mxSetN(dataref,(mwSize)1);
++		mxSetPr(dataref,vector_matlab);
++	}
++	else{
++		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
++	}
++
++	*pdataref=dataref;
++}
++/*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref,double scalar){{{*/
++void WriteData(mxArray** pdataref,double scalar){
++
++	*pdataref=mxCreateDoubleScalar(scalar);
++}
++/*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref,int integer){{{*/
++void WriteData(mxArray** pdataref,int integer){
++
++		*pdataref=mxCreateDoubleScalar((double)integer);
++
++}
++/*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref,int boolean){{{*/
++void WriteData(mxArray** pdataref,bool boolean){
++
++	*pdataref=mxCreateDoubleScalar((double)boolean);
++
++}
++/*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref,char* string){{{*/
++void WriteData(mxArray** pdataref,char* string){
++
++		*pdataref=mxCreateString(string);
++}
++/*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref){{{*/
++void WriteData(mxArray** pdataref){
++
++		;
++
++}
++/*}}}*/
++
++/*ISSM objects*/
++/*FUNCTION WriteData(mxArray** pdataref,BamgGeom* bamggeom){{{*/
++void WriteData(mxArray** pdataref,BamgGeom* bamggeom){
++
++	/*Intermediary*/
++	int         i;
++	mxArray    *dataref           = NULL;
++	const int   numfields         = 8;
++	const char *fnames[numfields];
++	mwSize      ndim              = 2;
++	mwSize      dimensions[2]     = {1,1};
++
++	/*Initialize field names*/
++	i=0;
++	fnames[i++] = "Vertices";
++	fnames[i++] = "Edges";
++	fnames[i++] = "TangentAtEdges";
++	fnames[i++] = "Corners";
++	fnames[i++] = "RequiredVertices";
++	fnames[i++] = "RequiredEdges";
++	fnames[i++] = "CrackedEdges";
++	fnames[i++] = "SubDomains";
++	_assert_(i==numfields);
++
++	/*Initialize Matlab structure*/
++	dataref=mxCreateStructArray(ndim,dimensions,numfields,fnames);
++
++	/*set each matlab each field*/
++	i=0;
++	i++; SetStructureField(dataref,"Vertices",        bamggeom->VerticesSize[0],        bamggeom->VerticesSize[1],        bamggeom->Vertices);
++	i++; SetStructureField(dataref,"Edges",           bamggeom->EdgesSize[0],           bamggeom->EdgesSize[1],           bamggeom->Edges);
++	i++; SetStructureField(dataref,"TangentAtEdges",  bamggeom->TangentAtEdgesSize[0],  bamggeom->TangentAtEdgesSize[1],  bamggeom->TangentAtEdges);
++	i++; SetStructureField(dataref,"Corners",         bamggeom->CornersSize[0],         bamggeom->CornersSize[1],         bamggeom->Corners);
++	i++; SetStructureField(dataref,"RequiredVertices",bamggeom->RequiredVerticesSize[0],bamggeom->RequiredVerticesSize[1],bamggeom->RequiredVertices);
++	i++; SetStructureField(dataref,"RequiredEdges",   bamggeom->RequiredEdgesSize[0],   bamggeom->RequiredEdgesSize[1],   bamggeom->RequiredEdges);
++	i++; SetStructureField(dataref,"CrackedEdges",    bamggeom->CrackedEdgesSize[0],    bamggeom->CrackedEdgesSize[1],    bamggeom->CrackedEdges);
++	i++; SetStructureField(dataref,"SubDomains",      bamggeom->SubDomainsSize[0],      bamggeom->SubDomainsSize[1],      bamggeom->SubDomains);
++	_assert_(i==numfields);
++
++	/*Assign output*/
++	*pdataref=dataref;
++}
++/*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref,BamgMesh* bamgmesh){{{*/
++void WriteData(mxArray** pdataref,BamgMesh* bamgmesh){
++
++	/*Intermediary*/
++	int         i;
++	mxArray    *dataref           = NULL;
++	const int   numfields         = 16;
++	const char *fnames[numfields];
++	mwSize      ndim              = 2;
++	mwSize      dimensions[2]     = {1,1};
++
++	/*Initialize field names*/
++	i=0;
++	fnames[i++] = "Vertices";
++	fnames[i++] = "Edges";
++	fnames[i++] = "Triangles";
++	fnames[i++] = "Quadrilaterals";
++	fnames[i++] = "IssmEdges";
++	fnames[i++] = "IssmSegments";
++	fnames[i++] = "VerticesOnGeomVertex";
++	fnames[i++] = "VerticesOnGeomEdge";
++	fnames[i++] = "EdgesOnGeomEdge";
++	fnames[i++] = "SubDomains";
++	fnames[i++] = "SubDomainsFromGeom";
++	fnames[i++] = "ElementConnectivity";
++	fnames[i++] = "NodalConnectivity";
++	fnames[i++] = "NodalElementConnectivity";
++	fnames[i++] = "CrackedVertices";
++	fnames[i++] = "CrackedEdges";
++	_assert_(i==numfields);
++
++	/*Initialize Matlab structure*/
++	dataref=mxCreateStructArray(ndim,dimensions,numfields,fnames);
++
++	/*set each matlab each field*/
++	i=0;
++	i++; SetStructureField(dataref,"Vertices",bamgmesh->VerticesSize[0], bamgmesh->VerticesSize[1],bamgmesh->Vertices);
++	i++; SetStructureField(dataref,"Edges", bamgmesh->EdgesSize[0],bamgmesh->EdgesSize[1], bamgmesh->Edges);
++	i++; SetStructureField(dataref,"Triangles", bamgmesh->TrianglesSize[0],bamgmesh->TrianglesSize[1], bamgmesh->Triangles);
++	i++; SetStructureField(dataref,"Quadrilaterals",bamgmesh->QuadrilateralsSize[0], bamgmesh->QuadrilateralsSize[1],bamgmesh->Quadrilaterals);
++	i++; SetStructureField(dataref,"IssmEdges", bamgmesh->IssmEdgesSize[0],bamgmesh->IssmEdgesSize[1], bamgmesh->IssmEdges);
++	i++; SetStructureField(dataref,"IssmSegments",bamgmesh->IssmSegmentsSize[0], bamgmesh->IssmSegmentsSize[1],bamgmesh->IssmSegments);
++	i++; SetStructureField(dataref,"VerticesOnGeomVertex",bamgmesh->VerticesOnGeomVertexSize[0],bamgmesh->VerticesOnGeomVertexSize[1], bamgmesh->VerticesOnGeomVertex);
++	i++; SetStructureField(dataref,"VerticesOnGeomEdge",bamgmesh->VerticesOnGeomEdgeSize[0],bamgmesh->VerticesOnGeomEdgeSize[1], bamgmesh->VerticesOnGeomEdge);
++	i++; SetStructureField(dataref,"EdgesOnGeomEdge", bamgmesh->EdgesOnGeomEdgeSize[0], bamgmesh->EdgesOnGeomEdgeSize[1],bamgmesh->EdgesOnGeomEdge);
++	i++; SetStructureField(dataref,"SubDomains",bamgmesh->SubDomainsSize[0], bamgmesh->SubDomainsSize[1],bamgmesh->SubDomains);
++	i++; SetStructureField(dataref,"SubDomainsFromGeom", bamgmesh->SubDomainsFromGeomSize[0], bamgmesh->SubDomainsFromGeomSize[1],bamgmesh->SubDomainsFromGeom);
++	i++; SetStructureField(dataref,"ElementConnectivity",bamgmesh->ElementConnectivitySize[0],bamgmesh->ElementConnectivitySize[1], bamgmesh->ElementConnectivity);
++	i++; SetStructureField(dataref,"NodalConnectivity",bamgmesh->NodalConnectivitySize[0],bamgmesh->NodalConnectivitySize[1], bamgmesh->NodalConnectivity);
++	i++; SetStructureField(dataref,"NodalElementConnectivity", bamgmesh->NodalElementConnectivitySize[0], bamgmesh->NodalElementConnectivitySize[1],bamgmesh->NodalElementConnectivity);
++	i++; SetStructureField(dataref,"CrackedVertices", bamgmesh->CrackedVerticesSize[0],bamgmesh->CrackedVerticesSize[1], bamgmesh->CrackedVertices);
++	i++; SetStructureField(dataref,"CrackedEdges",bamgmesh->CrackedEdgesSize[0], bamgmesh->CrackedEdgesSize[1],bamgmesh->CrackedEdges);
++	_assert_(i==numfields);
++
++	/*Assign output*/
++	*pdataref=dataref;
++}
++/*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref,SeqMat<double>* matrix){{{*/
++void WriteData(mxArray** pdataref,SeqMat<double>* matrix){
++
++	int      i,j;
++	int      rows,cols;
++	mxArray *dataref     = NULL;
++	double  *matrix_ptr  = NULL;
++	double  *tmatrix_ptr = NULL;
++
++	if(matrix){
++
++		matrix_ptr=matrix->ToSerial();
++		matrix->GetSize(&rows,&cols);
++
++		/*Now transpose the matrix and allocate with Matlab's memory manager: */
++		tmatrix_ptr=(double*)mxMalloc(rows*cols*sizeof(double));
++		for(i=0;i<rows;i++){
++			for(j=0;j<cols;j++){
++				tmatrix_ptr[j*rows+i]=matrix_ptr[i*cols+j];
++			}
++		}
++
++		/*create matlab matrix: */
++		dataref=mxCreateDoubleMatrix(0,0,mxREAL);
++		mxSetM(dataref,rows); 
++		mxSetN(dataref,cols);
++		mxSetPr(dataref,tmatrix_ptr);
++
++		/*Free ressources:*/
++		xDelete<double>(matrix_ptr);
++	}
++	else{
++		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
++	}
++
++	*pdataref=dataref;
++}
++/*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref,SeqVec<double>* vector){{{*/
++void WriteData(mxArray** pdataref,SeqVec<double>* vector){
++
++	mxArray* dataref=NULL;
++	double*  vector_ptr=NULL;
++	double*  vector_matlab=NULL;
++	int      rows;
++
++	if(vector){
++		/*call toolkit routine: */
++		vector_ptr=vector->ToMPISerial();
++		vector->GetSize(&rows);
++
++		/*now create the matlab vector with Matlab's memory manager */
++		vector_matlab=(double*)mxMalloc(rows*sizeof(double));
++		for(int i=0;i<rows;i++) vector_matlab[i]=vector_ptr[i];
++
++		dataref = mxCreateDoubleMatrix(0,0,mxREAL);                         
++		mxSetM(dataref,rows);
++		mxSetN(dataref,1);                                                                                          
++		mxSetPr(dataref,vector_matlab);           
++	}
++	else{
++		dataref = mxCreateDoubleMatrix(0,0,mxREAL);
++	}
++
++	/*Clean-up and return*/
++	xDelete<double>(vector_ptr);
++	*pdataref=dataref;
++}
++/*}}}*/
++/*FUNCTION WriteData(mxArray** pdataref,RiftStruct* riftstruct){{{*/
++void WriteData(mxArray** pdataref,RiftStruct* riftstruct){
++
++	/*Intermediary*/
++	int         i;
++	mxArray    *dataref           = NULL;
++	const int   numfields         = 10;
++	const char *fnames[numfields];
++	mwSize      ndim              = 2;
++	mwSize      dimensions[2]     = {1,1};
++
++	/*Initialize field names*/
++	i=0;
++	fnames[i++] = "numsegs";
++	fnames[i++] = "segments";
++	fnames[i++] = "pairs";
++	fnames[i++] = "tips";
++	fnames[i++] = "penaltypairs";
++	fnames[i++] = "fill";
++	fnames[i++] = "friction";
++	fnames[i++] = "fraction";
++	fnames[i++] = "fractionincrement";
++	fnames[i++] = "state";
++	_assert_(i==numfields);
++
++	/*Initialize matlab structure of dimension numrifts*/
++	dimensions[0]=riftstruct->numrifts;
++	dataref=mxCreateStructArray(ndim,dimensions,numfields,fnames);
++
++	/*set each matlab each field*/
++	for(int i=0;i<riftstruct->numrifts;i++){
++		SetStructureFieldi(dataref,i,"numsegs"          ,riftstruct->riftsnumsegments[i]);
++		SetStructureFieldi(dataref,i,"segments"         ,riftstruct->riftsnumsegments[i]    ,3,riftstruct->riftssegments[i]);
++		SetStructureFieldi(dataref,i,"pairs"            ,riftstruct->riftsnumpairs[i]       ,2,riftstruct->riftspairs[i]);
++		SetStructureFieldi(dataref,i,"tips"             ,1                                  ,2,&riftstruct->riftstips[2*i]);
++		SetStructureFieldi(dataref,i,"penaltypairs"     ,riftstruct->riftsnumpenaltypairs[i],7,riftstruct->riftspenaltypairs[i]);
++		SetStructureFieldi(dataref,i,"fill"             ,IceEnum);
++		SetStructureFieldi(dataref,i,"friction"         ,0);
++		SetStructureFieldi(dataref,i,"fraction"         ,0.);
++		SetStructureFieldi(dataref,i,"fractionincrement",0.1);
++		SetStructureFieldi(dataref,i,"state"            ,riftstruct->riftsnumpenaltypairs[i],1,riftstruct->state[i]);
++	}
++
++	/*Assign output*/
++	*pdataref=dataref;
++}
++/*}}}*/
++
++/*Toolkit*/
++/*FUNCTION SetStructureField{{{*/
++void SetStructureField(mxArray* dataref,const char* fieldname,int M,int N,double* fieldpointer){
++
++	mxArray* field = NULL;
++
++	/*Convert field*/
++	WriteData(&field,fieldpointer,M,N);
++
++	/*Assign to structure*/
++	mxSetField(dataref,0,fieldname,field);
++}
++/*}}}*/
++/*FUNCTION SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int M,int N,double* fieldpointer){{{*/
++void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int M,int N,double* fieldpointer){
++
++	mxArray* field = NULL;
++
++	/*Convert field*/
++	WriteData(&field,fieldpointer,M,N);
++
++	/*Assign to structure*/
++	mxSetField(dataref,i,fieldname,field);
++}
++/*}}}*/
++/*FUNCTION SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int field){{{*/
++void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int fieldin){
++
++	mxArray* field = NULL;
++
++	/*Convert field*/
++	WriteData(&field,fieldin);
++
++	/*Assign to structure*/
++	mxSetField(dataref,i,fieldname,field);
++}
++/*}}}*/
++/*FUNCTION SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,double field){{{*/
++void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,double fieldin){
++
++	mxArray* field = NULL;
++
++	/*Convert field*/
++	WriteData(&field,fieldin);
++
++	/*Assign to structure*/
++	mxSetField(dataref,i,fieldname,field);
++}
++/*}}}*/
+Index: ../trunk-jpl/src/wrappers/matlab/io/mxGetAssignedField.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/mxGetAssignedField.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/mxGetAssignedField.cpp	(revision 13749)
+@@ -0,0 +1,39 @@
++/*!\file: mxGetAssignedField.c: 
++ * \brief: abstract interface on parallel side for i/o, so it ressembles the serial i/o.
++ *
++ * In serial mode, this routine takes care of returning the field coming 
++ * from the model. If largesize is 1, we are running out of core models in 
++ * matlab, and we need to call the subsref private method from the model object
++ * in order to correctly load the data from disk.
++ */
++
++#include "./matlabio.h"
++
++mxArray* mxGetAssignedField(const mxArray* pmxa_array,int number,const char* field){
++
++	//output
++	mxArray* mxfield=NULL;
++
++	//input
++	mxArray    *inputs[2];
++	mxArray    *pindex      = NULL;
++	const char *fnames[2];
++	mwSize      ndim        = 2;
++	mwSize      onebyone[2] = {1,1};
++
++	//We want to call the subsasgn method, and get the returned array.This ensures that if we are running 
++	//large sized problems, the data is truly loaded from disk by the model subsasgn class method.
++	inputs[0]=(mxArray*)pmxa_array; //this is the model
++
++	//create index structure used in the assignment (index.type='.' and index.subs='x' for field x for ex)
++	fnames[0] = "type";
++	fnames[1] = "subs";
++	pindex=mxCreateStructArray( ndim,onebyone,2,fnames);
++	mxSetField( pindex, 0, "type",mxCreateString("."));
++	mxSetField( pindex, 0, "subs",mxCreateString(field));
++	inputs[1]=pindex;
++
++	mexCallMATLAB( 1, &mxfield, 2, (mxArray**)inputs, "subsref");
++
++	return mxfield;
++}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToDoubleMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToDoubleMatrix.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToDoubleMatrix.cpp	(revision 13749)
+@@ -0,0 +1,130 @@
++/* \file MatlabMatrixToDoubleMatrix.cpp
++ * \brief: convert a sparse or dense matlab matrix to a double* pointer
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++/*Matlab includes: */
++#include "./matlabio.h"
++#include "../../c/shared/shared.h"
++
++int MatlabMatrixToDoubleMatrix(double** pmatrix,int* pmatrix_rows,int* pmatrix_cols,const mxArray* mxmatrix){
++
++	int        i,j,count,rows,cols;
++
++	/*output: */
++	double* matrix=NULL;
++
++	/*matlab indices: */
++	mwIndex*    ir=NULL;
++	mwIndex*    jc=NULL;
++
++	/*Ok, first check if we are dealing with a sparse or full matrix: */
++	if (mxIsSparse(mxmatrix)){
++
++		/*Dealing with sparse matrix: recover size first: */
++		double* pmxmatrix=(double*)mxGetPr(mxmatrix);
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++
++		if(rows*cols){
++			matrix=xNewZeroInit<double>(rows*cols);
++
++			/*Now, get ir,jc and pr: */
++			ir=mxGetIr(mxmatrix);
++			jc=mxGetJc(mxmatrix);
++
++			/*Now, start inserting data into double* matrix: */
++			count=0;
++			for(i=0;i<cols;i++){
++				for(j=0;j<(jc[i+1]-jc[i]);j++){
++					matrix[rows*ir[count]+i]=pmxmatrix[count];
++					count++;
++				}
++			}
++		}
++
++	}
++	else if(mxIsClass(mxmatrix,"double")){
++		/*Dealing with dense matrix: recover pointer and size: */
++		double* pmxmatrix=(double*)mxGetPr(mxmatrix);
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++
++		/*Create serial matrix: */
++		if(rows*cols){
++			matrix=xNewZeroInit<double>(rows*cols);
++
++			for(i=0;i<rows;i++){
++				for(j=0;j<cols;j++){
++					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
++				}
++			}
++		}
++	}
++	else if(mxIsClass(mxmatrix,"single")){
++		/*Dealing with dense matrix: recover pointer and size: */
++		float *pmxmatrix=(float*)mxGetPr(mxmatrix);
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++
++		/*Create serial matrix: */
++		if(rows*cols){
++			matrix=xNewZeroInit<double>(rows*cols);
++
++			for(i=0;i<rows;i++){
++				for(j=0;j<cols;j++){
++					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
++				}
++			}
++		}
++	}
++	else if(mxIsClass(mxmatrix,"int16")){
++		/*Dealing with dense matrix: recover pointer and size: */
++		short int *pmxmatrix=(short*)mxGetPr(mxmatrix);
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++
++		/*Create serial matrix: */
++		if(rows*cols){
++			matrix=xNewZeroInit<double>(rows*cols);
++
++			for(i=0;i<rows;i++){
++				for(j=0;j<cols;j++){
++					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
++				}
++			}
++		}
++	}
++	else if(mxIsClass(mxmatrix,"uint8")){
++		/*Dealing with dense matrix: recover pointer and size: */
++		char *pmxmatrix=(char*)mxGetPr(mxmatrix);
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++
++		/*Create serial matrix: */
++		if(rows*cols){
++			matrix=xNewZeroInit<double>(rows*cols);
++
++			for(i=0;i<rows;i++){
++				for(j=0;j<cols;j++){
++					matrix[cols*i+j]=(double)pmxmatrix[rows*j+i];
++				}
++			}
++		}
++	}
++	else{
++		_error_("Matlab matrix type Not implemented yet");
++	}
++
++	/*Assign output pointer: */
++	*pmatrix=matrix;
++	*pmatrix_rows=rows;
++	*pmatrix_cols=cols;
++
++	return 1;
++}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToPetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToPetscMat.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToPetscMat.cpp	(revision 13749)
+@@ -0,0 +1,122 @@
++/* \file MatlabMatrixToPetscMatrix.cpp
++ * \brief: convert a sparse or dense matlab matrix to a serial Petsc matrix:
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++#include "../../c/shared/shared.h"
++
++/*Petsc includes: */
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
++
++/*Matlab includes: */
++#include "./matlabio.h"
++
++PetscMat* MatlabMatrixToPetscMat(const mxArray* mxmatrix){
++
++	int dummy;
++	PetscMat* matrix=new PetscMat();
++
++	MatlabMatrixToPetscMat(&matrix->matrix, &dummy, &dummy, mxmatrix);
++
++	return matrix;
++}
++int MatlabMatrixToPetscMat(Mat* pmatrix,int* pmatrix_rows,int* pmatrix_cols,const mxArray* mxmatrix){
++
++	int rows, cols;
++	double *mxmatrix_ptr = NULL;
++	double *tmatrix      = NULL;
++	int ierr;
++	int i,j;
++
++	/*output: */
++	Mat matrix = NULL;
++
++	/*matlab indices: */
++	mwIndex *ir = NULL;
++	mwIndex *jc = NULL;
++	double  *pr = NULL;
++	int     count;
++	int     nnz;
++	int     nz;
++
++	/*petsc indices: */
++	int *idxm = NULL;
++	int *idxn = NULL;
++
++	/*Ok, first check if we are dealing with a sparse or full matrix: */
++	if (mxIsSparse(mxmatrix)){
++
++		/*Dealing with sparse matrix: recover size first: */
++		mxmatrix_ptr=(double*)mxGetPr(mxmatrix);
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++		nnz=mxGetNzmax(mxmatrix);
++		if(rows){
++			nz=(int)((double)nnz/(double)rows);
++		}
++		else{
++			nz=0;
++		}
++
++		ierr=MatCreateSeqAIJ(PETSC_COMM_SELF,rows,cols,nz,PETSC_NULL,&matrix);CHKERRQ(ierr);
++
++		/*Now, get ir,jc and pr: */
++		pr=mxGetPr(mxmatrix);
++		ir=mxGetIr(mxmatrix);
++		jc=mxGetJc(mxmatrix);
++
++		/*Now, start inserting data into sparse matrix: */
++		count=0;
++		for(i=0;i<cols;i++){
++			for(j=0;j<(jc[i+1]-jc[i]);j++){
++				MatSetValue(matrix,ir[count],i,pr[count],INSERT_VALUES);
++				count++;
++			}
++		}
++	}
++	else{
++		/*Dealing with dense matrix: recover pointer and size: */
++		mxmatrix_ptr=(double*)mxGetPr(mxmatrix);
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++
++		/*transpose, as Petsc now does not allows MAT_COLUMN_ORIENTED matrices in MatSetValues: */
++		tmatrix=xNew<double>(rows*cols);
++		for(i=0;i<cols;i++){
++			for(j=0;j<rows;j++){
++				*(tmatrix+rows*i+j)=*(mxmatrix_ptr+cols*j+i);
++			}
++		}
++
++		/*Create serial matrix: */
++		ierr=MatCreateSeqDense(PETSC_COMM_SELF,rows,cols,NULL,&matrix);CHKERRQ(ierr);
++
++		/*Insert mxmatrix_ptr values into petsc matrix: */
++		idxm=xNew<int>(rows);
++		idxn=xNew<int>(cols);
++
++		for(i=0;i<rows;i++)idxm[i]=i;
++		for(i=0;i<cols;i++)idxn[i]=i;
++
++		ierr=MatSetValues(matrix,rows,idxm,cols,idxn,tmatrix,INSERT_VALUES); CHKERRQ(ierr);
++
++		xDelete<double>(tmatrix);
++	}
++
++	/*Assemble matrix: */
++	MatAssemblyBegin(matrix,MAT_FINAL_ASSEMBLY); 
++	MatAssemblyEnd(matrix,MAT_FINAL_ASSEMBLY);
++
++	/*Assign output pointer: */
++	*pmatrix=matrix;
++	if(pmatrix_rows) *pmatrix_rows=rows;
++	if(pmatrix_cols) *pmatrix_cols=cols;
++
++	return 1;
++}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToVector.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToVector.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToVector.cpp	(revision 13749)
+@@ -0,0 +1,31 @@
++/*!\file MatlabVectorToVector.cpp
++ */
++
++/*Headers:*/
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++#include <stdio.h>
++#include <string.h>
++#include "./matlabio.h"
++#include "../../c/shared/shared.h"
++#include "../../c/toolkits/toolkits.h"
++
++Vector<double>* MatlabVectorToVector(const mxArray* mxvector){
++
++	int dummy;
++	Vector<double>* vector=NULL;
++
++	/*allocate vector object: */
++	vector=new Vector<double>();
++
++	#ifdef _HAVE_PETSC_
++	vector->pvector=MatlabVectorToPetscVec(mxvector);
++	#else
++	vector->svector=MatlabVectorToSeqVec(mxvector);
++	#endif
++
++	return vector;
++}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToMatrix.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToMatrix.cpp	(revision 13749)
+@@ -0,0 +1,31 @@
++/*!\file MatlabMatrixToMatrix.cpp
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include <stdio.h>
++#include <string.h>
++#include "./matlabio.h"
++#include "../../c/shared/shared.h"
++#include "../../c/toolkits/toolkits.h"
++
++Matrix<double>* MatlabMatrixToMatrix(const mxArray* mxmatrix){
++
++	int dummy;
++	Matrix<double>* matrix=NULL;
++
++	/*allocate matrix object: */
++	matrix=new Matrix<double>();
++
++	#ifdef _HAVE_PETSC_
++	matrix->pmatrix=MatlabMatrixToPetscMat(mxmatrix);
++	#else
++	matrix->smatrix=MatlabMatrixToSeqMat(mxmatrix);
++	#endif
++
++	return matrix;
++}
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabNArrayToNArray.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabNArrayToNArray.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabNArrayToNArray.cpp	(revision 13749)
+@@ -0,0 +1,250 @@
++/* \file MatlabNArrayToNArray.cpp
++ * \brief: convert a sparse or dense matlab n-dimensional array to cpp n-dimensional array
++ */
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "./matlabio.h"
++#include "../../c/shared/shared.h"
++#include "../../c/include/include.h"
++
++/*FUNCTION MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
++int MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
++
++	int  i,j,rows,cols;
++	int  numel,ndims;
++	int *size,*dims;
++	double* mxmatrix_ptr=NULL;
++	const mwSize* ipt=NULL;
++
++	/*output: */
++	double* matrix=NULL;
++
++	/*matlab indices: */
++	mwIndex *ir    = NULL;
++	mwIndex *jc    = NULL;
++	double  *pr    = NULL;
++	int      count;
++
++	/*get Matlab matrix information: */
++	numel=mxGetNumberOfElements(mxmatrix);
++	ndims=mxGetNumberOfDimensions(mxmatrix);
++	ipt  =mxGetDimensions(mxmatrix);
++	size =xNew<int>(ndims);
++	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
++
++	/*Ok, first check if we are dealing with a sparse or full matrix: */
++	if (mxIsSparse(mxmatrix)){
++
++		/*Dealing with sparse matrix: recover size first: */
++		rows = mxGetM(mxmatrix);
++		cols = mxGetN(mxmatrix);
++
++		matrix=xNewZeroInit<double>(rows*cols);
++
++		/*Now, get ir,jc and pr: */
++		ir = mxGetIr(mxmatrix);
++		jc = mxGetJc(mxmatrix);
++		pr = mxGetPr(mxmatrix);
++
++		/*Now, start inserting data into double* matrix: */
++		count=0;
++		for(i=0;i<cols;i++){
++			for(j=0;j<(jc[i+1]-jc[i]);j++){
++				*(matrix+rows*ir[count]+i)=pr[count];
++				count++;
++			}
++		}
++
++	}
++	else{
++
++		/*Dealing with dense matrix: recover pointer and size: */
++		mxmatrix_ptr=(double*)mxGetPr(mxmatrix);
++
++		/*Create serial matrix: */
++		matrix=xNewZeroInit<double>(numel);
++
++		dims=xNew<int>(ndims);
++		for(i=0;i<numel;i++){
++			ColumnWiseDimsFromIndex(dims,i,size,ndims);
++			j = IndexFromRowWiseDims(dims,size,ndims);
++			matrix[j]=(double)mxmatrix_ptr[i];
++		}
++		xDelete<int>(dims);
++	}
++
++	/*Assign output pointer: */
++	*pmatrix       = matrix;
++	*pmatrix_numel = numel;
++	*pmatrix_ndims = ndims;
++	*pmatrix_size  = size;
++
++	return 1;
++}
++/*}}}*/
++/*FUNCTION MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
++int MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
++
++	int  i,j,rows,cols;
++	int  numel,ndims;
++	int *size,*dims;
++	bool* mxmatrix_ptr=NULL;
++	const mwSize* ipt=NULL;
++
++	/*output: */
++	bool* matrix=NULL;
++
++	/*matlab indices: */
++	mwIndex *ir    = NULL;
++	mwIndex *jc    = NULL;
++	bool    *pm    = NULL;
++	int      count;
++
++	/*get Matlab matrix information: */
++	numel = mxGetNumberOfElements(mxmatrix);
++	ndims = mxGetNumberOfDimensions(mxmatrix);
++	ipt   = mxGetDimensions(mxmatrix);
++	size  = xNew<int>(ndims);
++	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
++
++	/*Ok, first check if we are dealing with a sparse or full matrix: */
++	if (mxIsSparse(mxmatrix)){
++
++		/*Dealing with sparse matrix: recover size first: */
++		rows=mxGetM(mxmatrix);
++		cols=mxGetN(mxmatrix);
++		matrix=xNewZeroInit<bool>(rows*cols);
++
++		/*Now, get ir,jc and pm: */
++		ir=mxGetIr(mxmatrix);
++		jc=mxGetJc(mxmatrix);
++		pm=(bool*)mxGetData(mxmatrix);
++
++		/*Now, start inserting data into bool* matrix: */
++		count=0;
++		for(i=0;i<cols;i++){
++			for(j=0;j<(jc[i+1]-jc[i]);j++){
++				matrix[rows*ir[count]+i]=pm[count];
++				count++;
++			}
++		}
++	}
++	else{
++
++		/*Dealing with dense matrix: recover pointer and size: */
++		mxmatrix_ptr=(bool*)mxGetData(mxmatrix);
++
++		/*Create serial matrix: */
++		matrix=xNew<bool>(numel);
++		dims=xNew<int>(ndims);
++		for(i=0;i<numel;i++){
++			ColumnWiseDimsFromIndex(dims,i,size,ndims);
++			j=IndexFromRowWiseDims(dims,size,ndims);
++			matrix[j]=(bool)mxmatrix_ptr[i];
++		}
++		xDelete<int>(dims);
++	}
++
++	/*Assign output pointer: */
++	*pmatrix       = matrix;
++	*pmatrix_numel = numel;
++	*pmatrix_ndims = ndims;
++	*pmatrix_size  = size;
++
++	return 1;
++}
++/*}}}*/
++/*FUNCTION MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){{{*/
++int MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix){
++
++	int           i,j,rows,cols;
++	int           numel,ndims;
++	int          *size , *dims;
++	mxChar       *mxmatrix_ptr = NULL;
++	const mwSize *ipt          = NULL;
++
++	/*output: */
++	char* matrix=NULL;
++
++	/*matlab indices: */
++	mwIndex *ir    = NULL;
++	mwIndex *jc    = NULL;
++	char    *pm    = NULL;
++	int      count;
++
++	/*get Matlab matrix information: */
++	numel = mxGetNumberOfElements(mxmatrix);
++	ndims = mxGetNumberOfDimensions(mxmatrix);
++	ipt   = mxGetDimensions(mxmatrix);
++	size  = xNew<int>(ndims);
++	for (i=0;i<ndims;i++) size[i]=(int)ipt[i];
++
++	/*Ok, first check if we are dealing with a sparse or full matrix: */
++	if (mxIsSparse(mxmatrix)){
++
++		/*Dealing with sparse matrix: recover size first: */
++		rows = mxGetM(mxmatrix);
++		cols = mxGetN(mxmatrix);
++		matrix=xNew<char>(rows*cols);
++
++		/*Now, get ir,jc and pm: */
++		ir = mxGetIr(mxmatrix);
++		jc = mxGetJc(mxmatrix);
++		pm = (char*)mxGetData(mxmatrix);
++
++		/*Now, start inserting data into char* matrix: */
++		count=0;
++		for(i=0;i<cols;i++){
++			for(j=0;j<(jc[i+1]-jc[i]);j++){
++				matrix[rows*ir[count]+i]=(char)pm[count];
++				count++;
++			}
++		}
++	}
++	else{
++		/*Dealing with dense matrix: recover pointer and size: */
++		mxmatrix_ptr=mxGetChars(mxmatrix);
++
++		/*Create serial matrix: */
++		matrix=xNew<char>(numel+1);
++		matrix[numel]='\0';
++
++		/*looping code adapted from Matlab example explore.c: */
++		int elements_per_page = size[0] * size[1];
++		/* total_number_of_pages = size[2] x size[3] x ... x size[N-1] */
++		int total_number_of_pages = 1;
++		for (i=2; i<ndims; i++) {
++			total_number_of_pages *= size[i];
++		}
++
++		i=0;
++		for (int page=0; page < total_number_of_pages; page++) {
++			int row;
++			/* On each page, walk through each row. */
++			for (row=0; row<size[0]; row++)  {
++				int column;
++				j = (page * elements_per_page) + row;
++
++				/* Walk along each column in the current row. */
++				for (column=0; column<size[1]; column++) {
++					*(matrix+i++)=(char)*(mxmatrix_ptr+j);
++					j += size[0];
++				}
++			}
++		}
++	}
++
++	/*Assign output pointer: */
++	*pmatrix       = matrix;
++	*pmatrix_numel = numel;
++	*pmatrix_ndims = ndims;
++	*pmatrix_size  = size;
++
++	return 1;
++}
++/*}}}*/
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToSeqVec.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToSeqVec.cpp	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabVectorToSeqVec.cpp	(revision 13749)
+@@ -0,0 +1,20 @@
++/*!\file MatlabVectorToSeqVec.cpp
++ */
++
++/*Headers:*/
++#include <mex.h>
++#include <stdio.h>
++#include <string.h>
++#include "./matlabio.h"
++#include "../../c/toolkits/toolkits.h"
++#include "../../c/shared/shared.h"
++
++SeqVec<double>* MatlabVectorToSeqVec(const mxArray* dataref){
++
++	SeqVec<double>* output=NULL;
++
++	output=new SeqVec<double>();
++	MatlabVectorToDoubleVector(&output->vector,&output->M,dataref);
++	return output;
++
++}
+Index: ../trunk-jpl/src/wrappers/matlab/io/matlabio.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/matlabio.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/io/matlabio.h	(revision 13749)
+@@ -0,0 +1,93 @@
++/*\file matlabio.h
++ *\brief: I/O for ISSM in matlab mode
++ */
++
++#ifndef _MATLAB_IO_H_
++#define _MATLAB_IO_H_
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif 
++
++#include "../include/matlabincludes.h"
++#include "../../c/classes/classes.h"
++#include "../../c/Container/Container.h"
++#include "../../c/include/include.h"
++
++void WriteData(mxArray** pdataref,SeqMat<double>* matrix);
++void WriteData(mxArray** pdataref,double* matrix, int M,int N);
++void WriteData(mxArray** pdataref,int*    matrix, int M,int N);
++void WriteData(mxArray** pdataref,SeqVec<double>* vector);
++void WriteData(mxArray** pdataref,double* vector, int M);
++void WriteData(mxArray** pdataref,int integer);
++void WriteData(mxArray** pdataref,bool boolean);
++void WriteData(mxArray** pdataref,double scalar);
++void WriteData(mxArray** pdataref,char* string);
++void WriteData(mxArray** pdataref);
++void WriteData(mxArray** pdataref,BamgGeom* bamggeom);
++void WriteData(mxArray** pdataref,BamgMesh* bamgmesh);
++void WriteData(mxArray** pdataref,RiftStruct* riftstruct);
++
++void FetchData(double** pmatrix,int* pM,int *pN,const mxArray* dataref);
++void FetchData(double** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref);
++void FetchData(int** pmatrix,int* pM,int *pN,const mxArray* dataref);
++void FetchData(bool** pmatrix,int* pM,int *pN,const mxArray* dataref);
++void FetchData(bool** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref);
++void FetchData(Matrix<double>** pmatrix,const mxArray* dataref);
++void FetchData(int** pvector,int* pM,const mxArray* dataref);
++void FetchData(float** pvector,int* pM,const mxArray* dataref);
++void FetchData(double** pvector,int* pM,const mxArray* dataref);
++void FetchData(bool** pvector,int* pM,const mxArray* dataref);
++void FetchData(Vector<double>** pvector,const mxArray* dataref);
++void FetchData(char** pstring,const mxArray* dataref);
++void FetchData(char** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref);
++void FetchData(double* pscalar,const mxArray* dataref);
++void FetchData(int* pinteger,const mxArray* dataref);
++void FetchData(bool* pbool,const mxArray* dataref);
++void FetchData(BamgGeom** bamggeom,const mxArray* dataref);
++void FetchData(BamgMesh** bamgmesh,const mxArray* dataref);
++void FetchData(BamgOpts** bamgopts,const mxArray* dataref);
++void FetchData(Options** poptions,int istart, int nrhs,const mxArray** pdataref);
++void FetchData(DataSet** pcontours,const mxArray* dataref);
++
++Option* OptionParse(char* name, const mxArray* prhs[]);
++GenericOption<double>*    OptionDoubleParse( char* name, const mxArray* prhs[]);
++GenericOption<double*>*   OptionDoubleArrayParse( char* name, const mxArray* prhs[]);
++GenericOption<bool*>*     OptionLogicalParse( char* name, const mxArray* prhs[]);
++GenericOption<char*>*     OptionCharParse( char* name, const mxArray* prhs[]);
++GenericOption<Options**>* OptionStructParse( char* name, const mxArray* prhs[]);
++GenericOption<Options*>*  OptionCellParse( char* name, const mxArray* prhs[]);
++
++mxArray* mxGetAssignedField(const mxArray* pmxa_array,int number, const char* field);
++void SetStructureField(mxArray* dataref,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer);
++void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int fieldrows,int fieldcols,double* fieldpointer);
++void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,int field);
++void SetStructureFieldi(mxArray* dataref,int i,const char* fieldname,double field);
++int CheckNumMatlabArguments(int nlhs,int NLHS, int nrhs,int NRHS, const char* THISFUNCTION, void (*function)( void ));
++
++/*Matlab to Matrix routines: */
++Matrix<double>* MatlabMatrixToMatrix(const mxArray* mxmatrix);
++Vector<double>* MatlabVectorToVector(const mxArray* mxvector);
++
++/*Matlab to double* routines: */
++int MatlabVectorToDoubleVector(double** pvector,int* pvector_rows,const mxArray* mxvector);
++int MatlabMatrixToDoubleMatrix(double** pmatrix,int* pmatrix_rows,int* pmatrix_cols,const mxArray* mxmatrix);
++int MatlabNArrayToNArray(double** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix);
++int MatlabNArrayToNArray(bool** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix);
++int MatlabNArrayToNArray(char** pmatrix,int* pmatrix_numel,int* pmatrix_ndims,int** pmatrix_size,const mxArray* mxmatrix);
++
++/*Matlab to SeqMat routines: */
++SeqMat<double>* MatlabMatrixToSeqMat(const mxArray* dataref);
++SeqVec<double>* MatlabVectorToSeqVec(const mxArray* dataref);
++
++/*Matlab to Petsc routines: */
++#ifdef _HAVE_PETSC_
++int MatlabMatrixToPetscMat(Mat* matrix,int* prows,int* pcols, const mxArray* mxmatrix);
++PetscMat* MatlabMatrixToPetscMat(const mxArray* mxmatrix);
++int MatlabVectorToPetscVec(Vec* pvector,int* pvector_rows,const mxArray* mxvector);
++PetscVec* MatlabVectorToPetscVec(const mxArray* mxvector);
++#endif
++
++#endif	/* _IO_H_ */
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13748)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13749)
+@@ -1,10 +1,40 @@
+-AM_CPPFLAGS = @DAKOTAINCL@ @MATLABINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@ @BOOSTINCL@ @PYTHONINCL@ @PYTHON_NUMPYINCL@ @ADOLCINCL@
++AM_CPPFLAGS = @DAKOTAINCL@ @MATLABINCL@ @PETSCINCL@ @MPIINCL@ @SPOOLESINCL@ @METISINCL@ @TRIANGLEINCL@ @CHACOINCL@ @SCOTCHINCL@ @SHAPELIBINCL@
+ 
+ EXEEXT=$(MATLABWRAPPEREXT)
+ 
++#matlab io{{{
++lib_LIBRARIES = libISSMMatlab.a 
++if SHAREDLIBS
++lib_LTLIBRARIES = libISSMMatlab.la
++else
++lib_LTLIBRARIES =
++endif
++
++io_sources= ./include/matlabincludes.h\
++				./io/matlabio.h\
++				./io/MatlabNArrayToNArray.cpp\
++				./io/CheckNumMatlabArguments.cpp\
++				./io/mxGetAssignedField.cpp\
++				./io/WriteMatlabData.cpp\
++				./io/FetchMatlabData.cpp\
++				./io/OptionParse.cpp\
++				./io/MatlabMatrixToMatrix.cpp\
++				./io/MatlabVectorToVector.cpp\
++				./io/MatlabVectorToDoubleVector.cpp\
++				./io/MatlabMatrixToDoubleMatrix.cpp\
++				./io/MatlabMatrixToSeqMat.cpp\
++				./io/MatlabVectorToSeqVec.cpp
++
++ALLCXXFLAGS= -fPIC -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_  $(CXXFLAGS) $(CXXOPTFLAGS) 
++libISSMMatlab_a_SOURCES = $(io_sources)
++libISSMMatlab_a_CXXFLAGS= $(ALLCXXFLAGS)
++if SHAREDLIBS
++libISSMMatlab_la_SOURCES = $(io_sources)
++endif
++#}}}
+ #Wrappers {{{
+ if WRAPPERS
+-lib_LTLIBRARIES =  AverageFilter.la\
++lib_LTLIBRARIES +=  AverageFilter.la\
+ 						 BamgMesher.la\
+ 						 BamgConvertMesh.la\
+ 						 BamgTriangulate.la\
+@@ -45,7 +75,6 @@
+ 				   Kml2Exp.la
+ endif
+ endif 
+-
+ #}}}
+ #Flags and libraries {{{
+ #if SHAREDLIBS
+@@ -67,9 +96,9 @@
+ AM_LDFLAGS += -avoid-version
+ endif
+ if SHAREDLIBS
+-deps += ../../c/libISSMMatlab.la 
++deps += ./libISSMMatlab.la 
+ else
+-deps += ../../c/libISSMMatlab.a
++deps += ./libISSMMatlab.a
+ AM_LDFLAGS += --no-warnings 
+ endif
+ 
+Index: ../trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "BamgTriangulate"
+Index: ../trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h	(revision 13749)
+@@ -23,7 +23,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ #include "../../c/io/io.h"
+ #include "../../c/EnumDefinitions/EnumDefinitions.h"
+ 
+Index: ../trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.h	(revision 13749)
+@@ -23,7 +23,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ #include "../../c/io/io.h"
+ #include "../../c/EnumDefinitions/EnumDefinitions.h"
+ 
+Index: ../trunk-jpl/src/wrappers/Xy2ll/Xy2ll.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Xy2ll/Xy2ll.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/Xy2ll/Xy2ll.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "Xy2ll"
+Index: ../trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.h	(revision 13749)
+@@ -20,7 +20,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "KMLMeshWrite"
+Index: ../trunk-jpl/src/wrappers/TriMesh/TriMesh.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/TriMesh/TriMesh.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/TriMesh/TriMesh.h	(revision 13749)
+@@ -23,7 +23,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ #include "../../c/io/io.h"
+ #include "../../c/EnumDefinitions/EnumDefinitions.h"
+ 
+Index: ../trunk-jpl/src/wrappers/Chaco/Chaco.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/Chaco/Chaco.h	(revision 13748)
++++ ../trunk-jpl/src/wrappers/Chaco/Chaco.h	(revision 13749)
+@@ -24,7 +24,7 @@
+ #include "../../c/modules/modules.h"
+ #include "../../c/Container/Container.h"
+ #include "../../c/shared/shared.h"
+-#include "../../c/issm-binding.h"
++#include "../bindings.h"
+ 
+ #undef __FUNCT__ 
+ #define __FUNCT__  "Chaco"
Index: /issm/oecreview/Archive/13393-13976/ISSM-13749-13750.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13749-13750.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13749-13750.diff	(revision 13980)
@@ -0,0 +1,49 @@
+Index: ../trunk-jpl/src/wrappers/python/include/pythonincludes.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/include/pythonincludes.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/python/include/pythonincludes.h	(revision 13750)
+@@ -0,0 +1,24 @@
++
++#ifndef _PYTHON_INCLUDES_H_
++#define _PYTHON_INCLUDES_H_
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#ifdef _HAVE_PYTHON_
++
++#if _PYTHON_MAJOR_ == 2
++#undef NPY_NO_DEPRECATED_API
++#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
++#else
++#define NPY_NO_DEPRECATED_API 
++#endif
++
++#include <Python.h>
++#include <arrayobject.h>
++
++#endif
++#endif /*_PYTHON_INCLUDES_H_*/
+Index: ../trunk-jpl/src/wrappers/matlab/include/matlabincludes.h
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/include/matlabincludes.h	(revision 0)
++++ ../trunk-jpl/src/wrappers/matlab/include/matlabincludes.h	(revision 13750)
+@@ -0,0 +1,15 @@
++
++#ifndef _MATLAB_INCLUDES_H_
++#define _MATLAB_INCLUDES_H_
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#ifdef _HAVE_MATLAB_
++#include <mex.h>
++#endif
++
++#endif /*_MATLAB_INCLUDES_H_*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13750-13751.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13750-13751.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13750-13751.diff	(revision 13980)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/configs/config-macosx64-larour.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-larour.sh	(revision 13750)
++++ ../trunk-jpl/configs/config-macosx64-larour.sh	(revision 13751)
+@@ -3,9 +3,14 @@
+ #petsc 3.2
+ #mpich 1.4
+ 
++pythonversion=2.7
++
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+ 	--with-matlab-dir=$MATLAB_DIR \
++	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
++	--with-python-version=$pythonversion \
++	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13751-13752.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13751-13752.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13751-13752.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/matlab/matlab-binding.h
+===================================================================
+--- ../trunk-jpl/src/c/matlab/matlab-binding.h	(revision 13751)
++++ ../trunk-jpl/src/c/matlab/matlab-binding.h	(revision 13752)
+@@ -1,7 +0,0 @@
+-#ifndef _MATLAB_BINDING_H_
+-#define _MATLAB_BINDING_H_
+-
+-#include "./io/matlabio.h"
+-#include "./include/matlab_macros.h"
+-
+-#endif
Index: /issm/oecreview/Archive/13393-13976/ISSM-13752-13753.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13752-13753.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13752-13753.diff	(revision 13980)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13752)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13753)
+@@ -23,7 +23,9 @@
+ 				./io/MatlabVectorToDoubleVector.cpp\
+ 				./io/MatlabMatrixToDoubleMatrix.cpp\
+ 				./io/MatlabMatrixToSeqMat.cpp\
+-				./io/MatlabVectorToSeqVec.cpp
++				./io/MatlabVectorToSeqVec.cpp\
++				./io/MatlabMatrixToPetscMat.cpp\
++				./io/MatlabVectorToPetscVec.cpp
+ 
+ ALLCXXFLAGS= -fPIC -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_  $(CXXFLAGS) $(CXXOPTFLAGS) 
+ libISSMMatlab_a_SOURCES = $(io_sources)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13753-13754.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13753-13754.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13753-13754.diff	(revision 13980)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscMatrixType.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscMatrixType.cpp	(revision 13753)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscMatrixType.cpp	(revision 13754)
+@@ -17,7 +17,7 @@
+ #include "../../toolkitsenums.h"
+ #include "../../../shared/shared.h"
+ 
+-MatType ISSMToPetscMatrixType(MatrixType type){
++const MatType ISSMToPetscMatrixType(MatrixType type){
+ 
+ 	switch(type){
+ 		case DENSE_SEQUENTIAL:  
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13753)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13754)
+@@ -37,7 +37,7 @@
+ Vec  SerialToVec(double* vector,int vector_size);
+ InsertMode ISSMToPetscInsertMode(InsMode mode);
+ NormType ISSMToPetscNormMode(NormMode mode);
+-MatType ISSMToPetscMatrixType(MatrixType type);
++const MatType ISSMToPetscMatrixType(MatrixType type);
+ 
+ void PetscMatrixToDoubleMatrix(double** pmatrix, int* prows, int* pcols,Mat matrix);
+ void PetscVectorToDoubleVector(double** pvector, int* prows, Vec vector);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13754-13755.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13754-13755.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13754-13755.diff	(revision 13980)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13754)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13755)
+@@ -1974,6 +1974,7 @@
+ 
+ 	/*Recover info at the vertices: */
+ 	parameters->FindParam(&migration_style,GroundinglineMigrationEnum);
++	parameters->FindParam(&gl_melting_rate,GroundinglineMeltingRateEnum);
+ 	parameters->FindParam(&yts,ConstantsYtsEnum);
+ 	GetInputListOnVertices(&h[0],ThicknessEnum);
+ 	GetInputListOnVertices(&s[0],SurfaceEnum);
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13754)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13755)
+@@ -2159,6 +2159,7 @@
+ 
+ 	/*Recover info at the vertices: */
+ 	parameters->FindParam(&migration_style,GroundinglineMigrationEnum);
++	parameters->FindParam(&gl_melting_rate,GroundinglineMeltingRateEnum);
+ 	parameters->FindParam(&yts,ConstantsYtsEnum);
+ 	GetInputListOnVertices(&h[0],ThicknessEnum);
+ 	GetInputListOnVertices(&s[0],SurfaceEnum);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13755-13756.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13755-13756.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13755-13756.diff	(revision 13980)
@@ -0,0 +1,272 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 13755)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 13756)
+@@ -229,29 +229,32 @@
+ 	AC_ARG_WITH([python-dir],
+ 	  AS_HELP_STRING([--with-python-dir=DIR], [python root directory.]),
+ 	  [PYTHON_ROOT=$withval],[PYTHON_ROOT=""]) 
++
+ 	AC_MSG_CHECKING(for python)
+-	
+ 	if test -d "$PYTHON_ROOT"; then
+-	 AC_MSG_RESULT($HAVE_PYTHON)
+-		dnl defaults
+-		HAVE_PYTHON3="no"
+ 		HAVE_PYTHON="yes"
+-		AC_MSG_RESULT($HAVE_PYTHON)
+-		
+-		AC_ARG_WITH([python-version],
+-		  AS_HELP_STRING([--with-python-version = PYTHONVERSION],[python version.]),
+-		  [PYTHONVERSION=$withval],[PYTHONVERSION=""])
++		AC_DEFINE([_HAVE_PYTHON_],[1],[with Python in ISSM src])
++	else
++	 HAVE_PYTHON=no
++	fi
++	AC_MSG_RESULT($HAVE_PYTHON)
++
++	dnl get python version
++	if test "$HAVE_PYTHON" = "yes"; then
+ 		AC_MSG_CHECKING(for python version)
++		dnl Query Python for its version number.  Getting [:3] seems to be
++		dnl the best way to do this; it's what "site.py" does in the standard
++		dnl library.
++		PYTHON_VERSION=$($PYTHON_ROOT/bin/python -c "import sys; print sys.version[[:3]]")
++		AC_MSG_RESULT($PYTHON_VERSION)
+ 
+ 		dnl recover major: 
+-		PYTHON_MAJOR=${PYTHONVERSION%.*}
+-
++		PYTHON_MAJOR=${PYTHON_VERSION%.*}
+ 		if test x$PYTHON_MAJOR = x3; then
+ 			dnl are we running python 3?
+ 			HAVE_PYTHON3="yes"
+ 		fi
+ 		AC_DEFINE_UNQUOTED([_PYTHON_MAJOR_],$PYTHON_MAJOR,[python version major])
+-		AC_MSG_RESULT($PYTHON_MAJOR)
+ 
+ 		PYTHONINCL=-I$PYTHON_ROOT/include
+ 		PYTHONLIB="-L$PYTHON_ROOT/lib -lpython$PYTHONVERSION"
+@@ -269,15 +272,11 @@
+ 			;;
+ 		esac
+ 
+-		AC_DEFINE([_HAVE_PYTHON_],[1],[with Python in ISSM src])
+ 		AC_SUBST([PYTHONINCL])
+ 		AC_SUBST([PYTHONLIB])
+ 		PYTHONWRAPPEREXT=$PYTHONEXT
+ 		AC_SUBST([PYTHONWRAPPEREXT])
+ 		AC_SUBST([PYTHONLINK])
+-	else
+-		HAVE_PYTHON=no
+-		AC_MSG_RESULT($HAVE_PYTHON)
+ 	fi
+ 	AM_CONDITIONAL([PYTHON], [test x$HAVE_PYTHON = xyes])
+ 	AM_CONDITIONAL([PYTHON3], [test x$HAVE_PYTHON3 = xyes])
+@@ -455,69 +454,6 @@
+ 	AM_CONDITIONAL([ROSE], [test x$HAVE_ROSE = xyes])
+ 	AC_MSG_RESULT($HAVE_ROSE)
+ 	dnl }}}
+-	dnl metis{{{
+-	AC_ARG_WITH([metis-dir],
+-	  AS_HELP_STRING([--with-metis-dir=DIR],[metis root directory. necessary for serial build]),
+-	  [METIS_ROOT=$withval],[METIS_ROOT=""])
+-
+-   AC_MSG_CHECKING(for metis headers and libraries in $METIS_ROOT)
+-
+-	if test -d "$METIS_ROOT"; then
+-
+-		dnl first figure out version of metis: does the VERSION file exist?
+-		if test -e "$METIS_ROOT/VERSION"; then
+-			METIS_VERSION=4
+-		else
+-			METIS_VERSION=5
+-		fi
+-
+-		dnl defaults
+-		HAVE_METIS=yes
+-
+-		if test "$METIS_VERSION" = "4" ; then
+-   			
+-			METISINCL=-I"$METIS_ROOT/Lib" 
+-			case "${host_os}" in
+-				*cygwin*)
+-				METISLIB="-LIBPATH:\"$METIS_ROOT\" libmetis.lib"
+-				;;
+-				*linux*)
+-				METISLIB=-L"$METIS_ROOT/ -lmetis"
+-				;;
+-				*darwin*)
+-				METISLIB=-L"$METIS_ROOT/ -lmetis"
+-				;;
+-			esac
+-
+-   			AC_DEFINE([_METIS_VERSION_],[4],[ Metis version number])
+-		fi
+-		if test "$METIS_VERSION" = "5" ; then
+-	
+-			case "${host_os}" in
+-				*cygwin*)
+-				METISLIB="-LIBPATH:\"$METIS_ROOT\" libmetis.lib"
+-				;;
+-				*linux*)
+-				METISLIB=-L"$METIS_ROOT/lib -lmetis"
+-				;;
+-				*darwin*)
+-				METISLIB=-L"$METIS_ROOT/lib -lmetis"
+-				;;
+-			esac
+-
+-			METISINCL=-I"$METIS_ROOT/include" 
+-			AC_DEFINE([_METIS_VERSION_],[5],[ Metis version number])
+-		fi
+-
+-		AC_DEFINE([_HAVE_METIS_],[1],[with Metis in ISSM src])
+-		AC_SUBST([METISINCL])
+-		AC_SUBST([METISLIB])
+-	else
+-		HAVE_METIS=no
+-	fi
+-	AM_CONDITIONAL([METIS], [test x$HAVE_METIS = xyes])
+-	AC_MSG_RESULT($HAVE_METIS)
+-	dnl }}}
+ 	dnl mpi{{{
+ 	AC_MSG_CHECKING(for mpi)
+ 	AC_ARG_WITH([mpi-lib],
+@@ -594,6 +530,7 @@
+ 				PETSCLIB="-link -LIBPATH:\"$PETSC_ROOT/lib\" libpetscksp.lib libpetscdm.lib libpetscmat.lib libpetscvec.lib libpetscsnes.lib libpetscts.lib libmpiuni.lib libpetsc.lib"
+ 			else
+ 				PETSCLIB="-link -LIBPATH:\"$PETSC_ROOT/lib\" libpetsc.lib"
++				if test $PETSC_MAJOR -gt 3 || test $PETSC_MINOR -ge 3; then PETSCLIB+=" libmetis.lib"; fi
+ 			fi
+ 			;;
+ 			*linux*)
+@@ -601,6 +538,7 @@
+ 				PETSCLIB="-L$PETSC_ROOT/lib -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetsc  -lpetscsnes -lpetscts"
+ 			else
+ 				PETSCLIB="-L$PETSC_ROOT/lib -lpetsc -ldl"
++				if test $PETSC_MAJOR -gt 3 || test $PETSC_MINOR -ge 3; then PETSCLIB+=" -lmetis"; fi
+ 			fi
+ 			;;
+ 			*darwin*)
+@@ -608,6 +546,7 @@
+ 				PETSCLIB="-L$PETSC_ROOT/lib -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetscsnes -lpetscts -lpetsc"
+ 			else
+ 				PETSCLIB="-L$PETSC_ROOT/lib -lpetsc"
++				if test $PETSC_MAJOR -gt 3 || test $PETSC_MINOR -ge 3; then PETSCLIB+=" -lmetis"; fi
+ 			fi
+ 			;;
+ 		esac
+@@ -622,6 +561,77 @@
+ 	AM_CONDITIONAL([PETSC], [test x$HAVE_PETSC = xyes])
+ 	AC_MSG_RESULT($HAVE_PETSC)
+ 	dnl }}}
++	dnl metis{{{
++	if test "$HAVE_PETSC" = "yes" && test "x$PETSC_MAJOR" = "x3" && test $PETSC_MINOR -ge 3; then
++
++		dnl in petsc >=3.3, metis is provided
++		HAVE_METIS="yes"
++		AC_DEFINE([_METIS_VERSION_],[5],[ Metis version number])
++		AC_DEFINE([_HAVE_METIS_],[1],[with Metis in ISSM src])
++	else
++		AC_ARG_WITH([metis-dir],
++		  AS_HELP_STRING([--with-metis-dir=DIR],[metis root directory. necessary for serial build]),
++		  [METIS_ROOT=$withval],[METIS_ROOT=""])
++
++		AC_MSG_CHECKING(for metis headers and libraries in $METIS_ROOT)
++
++		if test -d "$METIS_ROOT"; then
++
++			dnl first figure out version of metis: does the VERSION file exist?
++			if test -e "$METIS_ROOT/VERSION"; then
++				METIS_VERSION=4
++			else
++				METIS_VERSION=5
++			fi
++
++			dnl defaults
++			HAVE_METIS=yes
++
++			if test "$METIS_VERSION" = "4" ; then
++					
++				METISINCL=-I"$METIS_ROOT/Lib" 
++				case "${host_os}" in
++					*cygwin*)
++					METISLIB="-LIBPATH:\"$METIS_ROOT\" libmetis.lib"
++					;;
++					*linux*)
++					METISLIB=-L"$METIS_ROOT/ -lmetis"
++					;;
++					*darwin*)
++					METISLIB=-L"$METIS_ROOT/ -lmetis"
++					;;
++				esac
++
++					AC_DEFINE([_METIS_VERSION_],[4],[ Metis version number])
++			fi
++			if test "$METIS_VERSION" = "5" ; then
++		
++				case "${host_os}" in
++					*cygwin*)
++					METISLIB="-LIBPATH:\"$METIS_ROOT\" libmetis.lib"
++					;;
++					*linux*)
++					METISLIB=-L"$METIS_ROOT/lib -lmetis"
++					;;
++					*darwin*)
++					METISLIB=-L"$METIS_ROOT/lib -lmetis"
++					;;
++				esac
++
++				METISINCL=-I"$METIS_ROOT/include" 
++				AC_DEFINE([_METIS_VERSION_],[5],[ Metis version number])
++			fi
++
++			AC_DEFINE([_HAVE_METIS_],[1],[with Metis in ISSM src])
++			AC_SUBST([METISINCL])
++			AC_SUBST([METISLIB])
++		else
++			HAVE_METIS=no
++		fi
++		AC_MSG_RESULT($HAVE_METIS)
++	fi
++	AM_CONDITIONAL([METIS], [test x$HAVE_METIS = xyes])
++	dnl }}}
+ 	dnl tao{{{
+ 	AC_ARG_WITH([tao-dir],
+ 		AS_HELP_STRING([--with-tao-dir=DIR], [tao root directory.]),
+@@ -1354,20 +1364,11 @@
+ 		AC_MSG_ERROR([need at least python or matlab support to compile modules (or use --with-modules=no)]);
+ 	fi
+ 
+-	dnl check that we have python version if python compile is specified
+-	if test "$HAVE_PYTHON" = "yes"  && test "$PYTHONVERSION" = "" ; then
+-	AC_MSG_ERROR([need python-version if python compile is required!]);
+-	fi
+-
+ 	dnl check that if we have MPI, we have metis
+ 	if test "$HAVE_METIS" = "yes"  && test "$HAVE_MPI" = "no" ; then
+ 	AC_MSG_ERROR([need mpi if using the metis partitioner!]);
+ 	fi
+ 
+-
+-
+-
+-
+ 	AC_MSG_RESULT(done)
+ 	dnl }}}
+ 
+@@ -1424,13 +1425,4 @@
+ 	fi
+ 	AC_MSG_RESULT($USE_64BIT_INDICES)
+ 	dnl }}}
+-	dnl circular-dependency{{{
+-	AC_ARG_WITH([circular-dependency],
+-	  AS_HELP_STRING([--with-circular-dependency = bool],[do we look for circular dependencies, default "yes", ex: --with-circular-dependency="no"]),
+-	  [CIRCULAR_DEPENDENCIES=$withval],[CIRCULAR_DEPENDENCIES=yes]) 
+-	AC_MSG_CHECKING(for circular dependencies)
+-	AM_CONDITIONAL([CIRCULAR_DEPENDENCIES], [test x$CIRCULAR_DEPENDENCIES = xyes])
+-	AC_MSG_RESULT($CIRCULAR_DEPENDENCIES) 
+-
+-	dnl }}}
+ ])
Index: /issm/oecreview/Archive/13393-13976/ISSM-13756-13757.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13756-13757.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13756-13757.diff	(revision 13980)
@@ -0,0 +1,29 @@
+Index: ../trunk-jpl/src/c/io/PrintfFunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/io/PrintfFunction.cpp	(revision 13756)
++++ ../trunk-jpl/src/c/io/PrintfFunction.cpp	(revision 13757)
+@@ -14,7 +14,6 @@
+ 	/*string to be printed: */
+ 	char *buffer = NULL;
+ 	int   n,size = 100;
+-	int   string_size;
+ 	int   my_rank;
+ 	//variable list of arguments
+ 	va_list args;
+Index: ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp
+===================================================================
+--- ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp	(revision 13756)
++++ ../trunk-jpl/src/c/io/Disk/WriteLockFile.cpp	(revision 13757)
+@@ -7,11 +7,8 @@
+ 
+ void WriteLockFile(char* filename){
+ 
+-	int i;
+-	int my_rank;
+-
+ 	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
++	int my_rank=IssmComm::GetRank();
+ 
+ 	/* output: */
+ 	FILE* fid=NULL;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13757-13758.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13757-13758.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13757-13758.diff	(revision 13980)
@@ -0,0 +1,148 @@
+Index: ../trunk-jpl/src/c/shared/Exceptions/exprintf.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/exprintf.cpp	(revision 13757)
++++ ../trunk-jpl/src/c/shared/Exceptions/exprintf.cpp	(revision 13758)
+@@ -15,7 +15,6 @@
+ 	/*returned string: */
+ 	char *buffer = NULL;
+ 	int   n,size = 100;
+-	int   string_size;
+ 
+ 	//variable list of arguments
+ 	va_list args;
+Index: ../trunk-jpl/src/c/shared/Numerics/XZvectorsToCoordinateSystem.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/XZvectorsToCoordinateSystem.cpp	(revision 13757)
++++ ../trunk-jpl/src/c/shared/Numerics/XZvectorsToCoordinateSystem.cpp	(revision 13758)
+@@ -6,11 +6,10 @@
+ 
+ void XZvectorsToCoordinateSystem(IssmDouble* T,IssmDouble* xzvectors){
+ 
+-	int		i,j;
+ 	IssmDouble	x[3],y[3],z[3];
+ 	IssmDouble	x_norm, y_norm, z_norm;
+ 
+-	for(i=0;i<6;i++){
++	for(int i=0;i<6;i++){
+ 		if(xIsNan<IssmDouble>(xzvectors[i])){
+ 			/*At least one NaN found: default to Id*/
+ 			T[0*3+0] = 1.0;	T[0*3+1] = 0.0;	T[0*3+2] = 0.0;
+Index: ../trunk-jpl/src/c/shared/Elements/TransformSolutionCoord.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/TransformSolutionCoord.cpp	(revision 13757)
++++ ../trunk-jpl/src/c/shared/Elements/TransformSolutionCoord.cpp	(revision 13758)
+@@ -20,7 +20,7 @@
+ 
+ void TransformSolutionCoord(IssmDouble* solution,Node** nodes,int numnodes,int* cs_array){
+ 
+-	int     i,j;
++	int     i;
+ 	int     numdofs   = 0;
+ 	IssmDouble *transform = NULL;
+ 	IssmDouble *values    = NULL;
+Index: ../trunk-jpl/src/c/shared/Elements/TransformLoadVectorCoord.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/TransformLoadVectorCoord.cpp	(revision 13757)
++++ ../trunk-jpl/src/c/shared/Elements/TransformLoadVectorCoord.cpp	(revision 13758)
+@@ -19,7 +19,7 @@
+ 
+ void TransformLoadVectorCoord(ElementVector* pe,Node** nodes,int numnodes,int* cs_array){
+ 
+-	int     i,j;
++	int     i;
+ 	int     numdofs   = 0;
+ 	IssmDouble *transform = NULL;
+ 	IssmDouble *values    = NULL;
+Index: ../trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp	(revision 13757)
++++ ../trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp	(revision 13758)
+@@ -9,7 +9,7 @@
+   // output:
+   IssmDouble B;    // surface mass balance, melt+accumulation
+ 
+-  int    iqj,imonth, j;
++  int    iqj,imonth;
+ 
+   IssmDouble saccu;     // yearly surface accumulation
+   IssmDouble smelt;     // yearly melt
+@@ -19,7 +19,6 @@
+   IssmDouble runoff; //meltwater only, does not include rain 
+   IssmDouble sconv; //rhow_rain/rhoi / 12 months
+ 
+-  IssmDouble density;
+   IssmDouble lapser=6.5/1000., sealev=0.;    // lapse rate. degrees per meter. 7.5 lev's 99 paper, 9 Marshall 99 paper
+   IssmDouble desfac = 0.5;                 // desert elevation factor
+   IssmDouble s0p=0.;         // should be set to elevation from precip source
+Index: ../trunk-jpl/src/c/shared/Elements/Paterson.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/Paterson.cpp	(revision 13757)
++++ ../trunk-jpl/src/c/shared/Elements/Paterson.cpp	(revision 13758)
+@@ -59,7 +59,7 @@
+ 	else if((T>=-5.0) && (T<=-2.0)){
+ 		B=pow((IssmPDouble)10,(IssmPDouble)8)*(-0.003748937622487*pow(T+5,3)+0.015290593619213*pow(T+5,2)  -0.048160403003748*(T+5)+  0.854987973338348);
+ 	}
+-	else if(T>=-2.0){
++	else{
+ 		B=pow((IssmPDouble)10,(IssmPDouble)8)*(-0.003748937622488*pow(T+2,3)-0.018449844983174*pow(T+2,2)  -0.057638157095631*(T+2)+  0.746900791092860);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/shared/Exp/exp.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exp/exp.h	(revision 13757)
++++ ../trunk-jpl/src/c/shared/Exp/exp.h	(revision 13758)
+@@ -89,11 +89,11 @@
+ 	/*Do a first pass through the domainname file, to figure out how many profiles we need to read: */
+ 	nprof=1;
+ 	for(;;){
+-		fscanf(fid,"%256s %256s\n",chardummy,chardummy);
+-		fscanf(fid,"%256s %256s\n",chardummy,chardummy);
+-		fscanf(fid,"%256s %256s %256s %256s\n",chardummy,chardummy,chardummy,chardummy);
+-		fscanf(fid,"%20u %256s\n",&n,chardummy);
+-		fscanf(fid,"%256s %256s %256s %256s %256s\n",chardummy,chardummy,chardummy,chardummy,chardummy);
++		fscanf(fid,"%255s %255s\n",chardummy,chardummy);
++		fscanf(fid,"%255s %255s\n",chardummy,chardummy);
++		fscanf(fid,"%255s %255s %255s %255s\n",chardummy,chardummy,chardummy,chardummy);
++		fscanf(fid,"%20u %255s\n",&n,chardummy);
++		fscanf(fid,"%255s %255s %255s %255s %255s\n",chardummy,chardummy,chardummy,chardummy,chardummy);
+ 		for (i=0;i<n;i++) fscanf(fid,"%20lf %20lf\n",&ddummy,&ddummy);
+ 		/*check whether we are at the end of the file, otherwise, keep reading next profile:*/
+ 		if (feof(fid)) break;
+@@ -117,15 +117,15 @@
+ 	for(counter=0;counter<nprof;counter++){
+ 
+ 		/*Skip header: */
+-		fscanf(fid,"%256s %256s\n",chardummy,chardummy);
+-		fscanf(fid,"%256s %256s\n",chardummy,chardummy);
+-		fscanf(fid,"%256s %256s %256s %256s\n",chardummy,chardummy,chardummy,chardummy);
++		fscanf(fid,"%255s %255s\n",chardummy,chardummy);
++		fscanf(fid,"%255s %255s\n",chardummy,chardummy);
++		fscanf(fid,"%255s %255s %255s %255s\n",chardummy,chardummy,chardummy,chardummy);
+ 
+ 		/*Get number of profile vertices: */
+-		fscanf(fid,"%20u %256s\n",&n,chardummy);
++		fscanf(fid,"%20u %255s\n",&n,chardummy);
+ 
+ 		/*Skip next line: */
+-		fscanf(fid,"%256s %256s %256s %256s %256s\n",chardummy,chardummy,chardummy,chardummy,chardummy);
++		fscanf(fid,"%255s %255s %255s %255s %255s\n",chardummy,chardummy,chardummy,chardummy,chardummy);
+ 
+ 		/*Allocate vertices: */
+ 		x=xNew<doubletype>(n);
+Index: ../trunk-jpl/src/c/shared/Exp/IsInPolySerial.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exp/IsInPolySerial.cpp	(revision 13757)
++++ ../trunk-jpl/src/c/shared/Exp/IsInPolySerial.cpp	(revision 13758)
+@@ -8,11 +8,10 @@
+ 
+ int IsInPolySerial(double* in,double* xc,double* yc,int numvertices,double* x,double* y,int nods, int edgevalue){
+ 
+-	int i,j;
+ 	double x0,y0;
+ 
+ 	/*Go through all vertices of the mesh:*/
+-	for (i=0;i<nods;i++){
++	for(int i=0;i<nods;i++){
+ 		if (in[i]){
+ 			/*this vertex already is inside one of the contours, continue*/
+ 			continue;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13758-13759.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13758-13759.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13758-13759.diff	(revision 13980)
@@ -0,0 +1,54 @@
+Index: ../trunk-jpl/src/c/solvers/solver_newton.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_newton.cpp	(revision 13758)
++++ ../trunk-jpl/src/c/solvers/solver_newton.cpp	(revision 13759)
+@@ -14,7 +14,6 @@
+ 
+ 	/*intermediary: */
+ 	bool   converged;
+-	int    num_unstable_constraints;
+ 	int    count;
+ 	IssmDouble kmax;
+ 	Matrix<IssmDouble>* Kff = NULL;
+Index: ../trunk-jpl/src/c/solvers/solver_stokescoupling_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_stokescoupling_nonlinear.cpp	(revision 13758)
++++ ../trunk-jpl/src/c/solvers/solver_stokescoupling_nonlinear.cpp	(revision 13759)
+@@ -13,23 +13,21 @@
+ void solver_stokescoupling_nonlinear(FemModel* femmodel,bool conserve_loads){
+ 
+ 	/*intermediary: */
+-	Matrix<IssmDouble>*  Kff_horiz = NULL;
+-	Matrix<IssmDouble>* Kfs_horiz   = NULL;
+-	Vector<IssmDouble>*  ug_horiz  = NULL;
+-	Vector<IssmDouble>*  uf_horiz  = NULL;
+-	Vector<IssmDouble>*  old_uf_horiz = NULL;
+-	Vector<IssmDouble>*  pf_horiz  = NULL;
+-	Vector<IssmDouble>*  df_horiz  = NULL;
+-	Matrix<IssmDouble>*  Kff_vert  = NULL;
+-	Matrix<IssmDouble>*  Kfs_vert  = NULL;
+-	Vector<IssmDouble>*  ug_vert   = NULL;
+-	Vector<IssmDouble>*  uf_vert   = NULL;
+-	Vector<IssmDouble>*  pf_vert   = NULL;
+-	Vector<IssmDouble>*  df_vert   = NULL;
+-	Vector<IssmDouble>*  ys   = NULL;
++	Matrix<IssmDouble> *Kff_horiz    = NULL;
++	Matrix<IssmDouble> *Kfs_horiz    = NULL;
++	Vector<IssmDouble> *ug_horiz     = NULL;
++	Vector<IssmDouble> *uf_horiz     = NULL;
++	Vector<IssmDouble> *old_uf_horiz = NULL;
++	Vector<IssmDouble> *pf_horiz     = NULL;
++	Vector<IssmDouble> *df_horiz     = NULL;
++	Matrix<IssmDouble> *Kff_vert     = NULL;
++	Matrix<IssmDouble> *Kfs_vert     = NULL;
++	Vector<IssmDouble> *ug_vert      = NULL;
++	Vector<IssmDouble> *uf_vert      = NULL;
++	Vector<IssmDouble> *pf_vert      = NULL;
++	Vector<IssmDouble> *df_vert      = NULL;
++	Vector<IssmDouble> *ys           = NULL;
+ 	bool converged;
+-	int  constraints_converged;
+-	int  num_unstable_constraints;
+ 	int  count;
+ 
+ 	/*parameters:*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13759-13760.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13759-13760.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13759-13760.diff	(revision 13980)
@@ -0,0 +1,125 @@
+Index: ../trunk-jpl/src/c/toolkits/issm/SeqMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/SeqMat.h	(revision 13759)
++++ ../trunk-jpl/src/c/toolkits/issm/SeqMat.h	(revision 13760)
+@@ -63,8 +63,6 @@
+ 		/*FUNCTION SeqMat(doubletype* serial_mat,int M,int N,doubletype sparsity){{{*/
+ 		SeqMat(doubletype* serial_mat,int pM,int pN,doubletype sparsity){
+ 
+-			int i,j;
+-
+ 			this->M=pM;
+ 			this->N=pN;
+ 			this->matrix=NULL;
+Index: ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp	(revision 13759)
++++ ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp	(revision 13760)
+@@ -18,12 +18,12 @@
+ 	/*inv_A does not yet exist, inv_A was just allocated, that's all*/
+ 
+ 	/*Error management*/
+-	int i,j;
++	int i;
+ 
+ 	/*input*/
+ 	int mA,nA;
+ 	int local_mA,local_nA;
+-	int lower_row,upper_row,range,this_range,this_lower_row;
++	int lower_row,upper_row,range;
+ 	MatType type;
+ 
+ 	/*Plapack: */
+@@ -40,11 +40,7 @@
+ 	/*Petsc to Plapack: */
+ 	double    *arrayA=NULL;
+ 	int* idxnA=NULL;
+-	int d_nz,o_nz;
+ 
+-	/*Feedback to client*/
+-	int computation_status;  
+-
+ 	/*Verify that A is square*/
+ 	MatGetSize(*A,&mA,&nA);
+ 	MatGetLocalSize(*A,&local_mA,&local_nA);
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13759)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13760)
+@@ -46,7 +46,7 @@
+ 	/*error management*/
+ 
+ 	int local_m,local_n;
+-	int lower_row,upper_row,range;
++	int range;
+ 	int result=1;
+ 	int sumresult;
+ 	int num_procs;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp	(revision 13759)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp	(revision 13760)
+@@ -30,7 +30,6 @@
+ 	char* second=NULL;
+ 	char* final=NULL;
+ 	size_t len;
+-	int ignore_second;
+ 	int first_token=1;
+ 
+ 	PetscTokenCreate(options_string,' ',&token);
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp	(revision 13759)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp	(revision 13760)
+@@ -20,13 +20,12 @@
+ 
+ void PetscMatrixToDoubleMatrix(double** pmatrix, int* prows, int* pcols,Mat petsc_matrix){
+ 
+-	int i,j,k;
+-
+ 	/*output: */
+ 	double* matrix=NULL;
+ 	int     rows,cols;
+ 
+ 	/*intermediary: */
++	int     i;
+ 	int*    idxm=NULL;
+ 	int*    idxn=NULL;
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 13759)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp	(revision 13760)
+@@ -18,7 +18,6 @@
+ 
+ Vec NewVec(int size,COMM comm,bool fromlocalsize){
+ 
+-	int ierr;
+ 	int local_size;
+ 
+ 	/*output: */
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13759)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13760)
+@@ -89,7 +89,6 @@
+ 	/*parameters: */
+ 	int    m,n;
+ 	int    d_nz,o_nz;
+-	int    nnz;
+ 
+ 	#if _PETSC_MAJOR_ >= 3 
+ 	const MatType type;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp	(revision 13759)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp	(revision 13760)
+@@ -28,7 +28,7 @@
+ 	double* values=NULL;
+ 
+ 	/*Vector sizes: */
+-	int MA,MB;
++	int MB;
+ 
+ 	VecGetSize(B,&MB);
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13760-13761.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13760-13761.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13760-13761.diff	(revision 13980)
@@ -0,0 +1,917 @@
+Index: ../trunk-jpl/src/c/classes/DofIndexing.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 13761)
+@@ -146,8 +146,6 @@
+ /*FUNCTION DofIndexing::Echo{{{*/
+ void DofIndexing::Echo(void){
+ 
+-	int i;
+-
+ 	_printLine_("DofIndexing:");
+ 	_printLine_("   gsize: " << gsize);
+ 	_printLine_("   clone: " << clone);
+Index: ../trunk-jpl/src/c/classes/Patch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Patch.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/Patch.cpp	(revision 13761)
+@@ -108,7 +108,6 @@
+ /*FUNCTION Patch::Gather{{{*/
+ void Patch::Gather(void){
+ 
+-	int         i;
+ 	int         count;
+ 	int         my_rank;
+ 	int         num_procs;
+@@ -146,7 +145,7 @@
+ 
+ 	/*Now, ask other nodes to send their values: */
+ 	#ifdef _HAVE_MPI_
+-	for (i=1;i<num_procs;i++){
++	for(int i=1;i<num_procs;i++){
+ 		if (my_rank==i){ 
+ 			MPI_Send(&this->numrows,1,MPI_INT,0,1,IssmComm::GetComm());   
+ 			if (this->numrows)MPI_Send(this->values,this->numrows*this->numcols,MPI_DOUBLE,0,1,IssmComm::GetComm()); 
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp	(revision 13761)
+@@ -27,7 +27,6 @@
+ Matdamageice::Matdamageice(int matice_mid,int index, IoModel* iomodel){
+ 
+ 	/*Intermediaries:*/
+-	int    i;
+ 	int    matice_eid;
+ 
+ 	/*Initialize id*/
+@@ -582,7 +581,7 @@
+ 	IssmDouble mu,n,eff2;
+ 
+ 	/*input strain rate: */
+-	IssmDouble exx,eyy,exy,exz;
++	IssmDouble exx,eyy,exy;
+ 
+ 	/*Get visocisty and n*/
+ 	GetViscosity2d(&mu,epsilon);
+Index: ../trunk-jpl/src/c/classes/objects/Materials/Matice.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Materials/Matice.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Materials/Matice.cpp	(revision 13761)
+@@ -27,7 +27,6 @@
+ Matice::Matice(int matice_mid,int index, IoModel* iomodel){
+ 
+ 	/*Intermediaries:*/
+-	int    i;
+ 	int    matice_eid;
+ 
+ 	/*Initialize id*/
+@@ -502,7 +501,7 @@
+ 	IssmDouble mu,n,eff2;
+ 
+ 	/*input strain rate: */
+-	IssmDouble exx,eyy,exy,exz;
++	IssmDouble exx,eyy,exy;
+ 
+ 	/*Get visocisty and n*/
+ 	GetViscosity2d(&mu,epsilon);
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp	(revision 13761)
+@@ -515,18 +515,16 @@
+ 	PentaP1Input* outinput=NULL;
+ 
+ 	/*Intermediaries*/
+-	int               i;
+-	PentaP1Input *xinputB     = NULL;
+-	int               B_numvalues;
+-	const int         numnodes    = 6;
+-	IssmDouble            AdotBvalues[numnodes];
++	PentaP1Input *xinputB  = NULL;
++	const int     numnodes = 6;
++	IssmDouble    AdotBvalues[numnodes];
+ 
+ 	/*Check that inputB is of the same type*/
+ 	if (inputB->ObjectEnum()!=PentaP1InputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
+ 	xinputB=(PentaP1Input*)inputB;
+ 
+ 	/*Create point wise sum*/
+-	for(i=0;i<numnodes;i++){
++	for(int i=0;i<numnodes;i++){
+ 		_assert_(xinputB->values[i]!=0);
+ 		AdotBvalues[i]=this->values[i]/xinputB->values[i];
+ 	}
+@@ -548,7 +546,6 @@
+ 	/*Intermediaries*/
+ 	int               i;
+ 	PentaP1Input *xinputB     = NULL;
+-	int               B_numvalues;
+ 	const int         numnodes    = 6;
+ 	IssmDouble            minvalues[numnodes];
+ 
+@@ -579,7 +576,6 @@
+ 	/*Intermediaries*/
+ 	int               i;
+ 	PentaP1Input *xinputB     = NULL;
+-	int               B_numvalues;
+ 	const int         numnodes    = 6;
+ 	IssmDouble            maxvalues[numnodes];
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp	(revision 13761)
+@@ -56,7 +56,6 @@
+ /*FUNCTION VectorParam::DeepEcho{{{*/
+ void VectorParam::DeepEcho(void){
+ 
+-	int i;
+ 	_printLine_("VectorParam:");
+ 	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+ 	value->Echo();
+Index: ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp	(revision 13761)
+@@ -54,7 +54,6 @@
+ /*FUNCTION MatrixParam::DeepEcho{{{*/
+ void MatrixParam::DeepEcho(void){
+ 
+-	int i;
+ 	_printLine_("MatrixParam:");
+ 	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+ 	this->value->Echo();
+Index: ../trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp	(revision 13761)
+@@ -60,12 +60,10 @@
+ /*FUNCTION TransientParam::DeepEcho{{{*/
+ void TransientParam::DeepEcho(void){
+ 
+-	int i,j;
+-
+ 	_printLine_("TransientParam:");
+ 	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+ 	_printLine_("   size: " << this->N);
+-	for(i=0;i<this->N;i++){
++	for(int i=0;i<this->N;i++){
+ 		_printLine_(   "time: " << this->timesteps[i] << " value: " << this->values[i]);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_LineStyle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_LineStyle.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_LineStyle.cpp	(revision 13761)
+@@ -62,7 +62,6 @@
+ /*FUNCTION KML_LineStyle::DeepEcho {{{*/
+ void  KML_LineStyle::DeepEcho(const char* indent){
+ 
+-	int   i;
+ 	bool  flag=true;
+ 
+ 	if(flag) _pprintLine_(indent << "KML_LineStyle:");
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_File.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_File.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_File.cpp	(revision 13761)
+@@ -89,7 +89,6 @@
+ 	char*        kstri;
+ 	int          ncom=0;
+ 	char**       pcom=NULL;
+-	KML_Object*  kobj;
+ 
+ /*  get object attributes and check for solo tag  */
+ 
+Index: ../trunk-jpl/src/c/classes/objects/KML/KML_PolyStyle.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KML_PolyStyle.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/KML/KML_PolyStyle.cpp	(revision 13761)
+@@ -64,7 +64,6 @@
+ /*FUNCTION KML_PolyStyle::DeepEcho {{{*/
+ void  KML_PolyStyle::DeepEcho(const char* indent){
+ 
+-	int   i;
+ 	bool  flag=true;
+ 
+ 	if(flag) _pprintLine_(indent << "KML_PolyStyle:");
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 13761)
+@@ -695,7 +695,7 @@
+ 	const int numdof=NDOF1*NUMVERTICES_BOUNDARY;
+ 
+ 	/* Intermediaries*/
+-	int        i,j,ig,index1,index2;
++	int        i,ig,index1,index2;
+ 	IssmDouble     DL,Jdet,dt,vx,vy,mean_vx,mean_vy,UdotN,thickness;
+ 	IssmDouble     xyz_list[NUMVERTICES_BOUNDARY][3];
+ 	IssmDouble     normal[2];
+@@ -789,11 +789,11 @@
+ 	const int numdof=NDOF1*NUMVERTICES_BOUNDARY;
+ 
+ 	/* Intermediaries*/
+-	int        i,j,ig,index1,index2;
+-	IssmDouble     DL,Jdet,vx,vy,mean_vx,mean_vy,UdotN,thickness;
+-	IssmDouble     xyz_list[NUMVERTICES_BOUNDARY][3];
+-	IssmDouble     normal[2];
+-	IssmDouble     L[numdof];
++	int        i,ig,index1,index2;
++	IssmDouble DL,Jdet,vx,vy,mean_vx,mean_vy,UdotN,thickness;
++	IssmDouble xyz_list[NUMVERTICES_BOUNDARY][3];
++	IssmDouble normal[2];
++	IssmDouble L[numdof];
+ 	GaussTria *gauss;
+ 
+ 	/*Initialize Load Vector and return if necessary*/
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp	(revision 13761)
+@@ -54,8 +54,6 @@
+ /*FUNCTION Penpair::Echo {{{*/
+ void Penpair::Echo(void){
+ 
+-	int i;
+-
+ 	_printLine_("Penpair:");
+ 	_printLine_("   id: " << id);
+ 	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp	(revision 13761)
+@@ -43,7 +43,6 @@
+ /*FUNCTION Pengrid::Pengrid(int index, int id, IoModel* iomodel,int analysis_type){{{*/
+ Pengrid::Pengrid(int id, int index, IoModel* iomodel, int in_analysis_type){ //i is the element index
+ 
+-	int i,j;
+ 	int pengrid_node_id;
+ 	int pengrid_matpar_id;
+ 	int pengrid_element_id;
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 13761)
+@@ -655,7 +655,6 @@
+ /*FUNCTION Icefront::GetDofList {{{*/
+ void  Icefront::GetDofList(int** pdoflist,int approximation_enum,int setenum){
+ 
+-	int i,j;
+ 	int numberofdofs=0;
+ 	int count=0;
+ 	int type;
+@@ -677,7 +676,7 @@
+ 	 numberofnodes=4;
+ 
+ 	/*Figure out size of doflist: */
+-	for(i=0;i<numberofnodes;i++){
++	for(int i=0;i<numberofnodes;i++){
+ 		numberofdofs+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum);
+ 	}
+ 
+@@ -686,7 +685,7 @@
+ 
+ 	/*Populate: */
+ 	count=0;
+-	for(i=0;i<numberofnodes;i++){
++	for(int i=0;i<numberofnodes;i++){
+ 		nodes[i]->GetDofList(doflist+count,approximation_enum,setenum);
+ 		count+=nodes[i]->GetNumberOfDofs(approximation_enum,setenum);
+ 	}
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Friction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Friction.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Friction.cpp	(revision 13761)
+@@ -190,7 +190,6 @@
+ 	 * alpha_complement= Neff ^r * vel ^s*/
+ 
+ 	/*diverse: */
+-	int     i;
+ 	IssmDouble  r,s;
+ 	IssmDouble  vx,vy,vz,vmag;
+ 	IssmDouble  drag_p,drag_q;
+@@ -256,7 +255,6 @@
+ 	 * alpha_complement= Neff ^r * vel ^s*/
+ 
+ 	/*diverse: */
+-	int     i;
+ 	IssmDouble  r,s;
+ 	IssmDouble  vx,vy,vz,vmag;
+ 	IssmDouble  drag_p,drag_q;
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp	(revision 13761)
+@@ -375,13 +375,12 @@
+ ElementMatrix* Riftfront::PenaltyCreateKMatrixDiagnosticHoriz(IssmDouble kmax){
+ 
+ 	const int   numdof = NDOF2*NUMVERTICES;
+-	int         i,j;
+ 	int         dofs[1]             = {0};
+-	IssmDouble      Ke_gg[4][4];
+-	IssmDouble      thickness;
+-	IssmDouble      h[2];
+-	IssmDouble      penalty_offset;
+-	IssmDouble      friction;
++	IssmDouble  Ke_gg[4][4];
++	IssmDouble  thickness;
++	IssmDouble  h[2];
++	IssmDouble  penalty_offset;
++	IssmDouble  friction;
+ 
+ 	/*Objects: */
+ 	Tria       *tria1               = NULL;
+@@ -560,10 +559,8 @@
+ int Riftfront::Constrain(int* punstable){
+ 
+ 	const int   numnodes        = 2;
+-	IssmDouble      max_penetration;
+ 	IssmDouble      penetration;
+ 	int         activate;
+-	int         found;
+ 	int         unstable;
+ 	IssmDouble      vx1;
+ 	IssmDouble      vy1;
+@@ -664,7 +661,6 @@
+ /*FUNCTION Riftfront::IsMaterialStable {{{*/
+ int   Riftfront::IsMaterialStable(void){
+ 
+-	int found=0;
+ 	IssmDouble converged=0;
+ 
+ 	this->inputs->GetInputValue(&converged,ConvergedEnum);
+@@ -683,9 +679,7 @@
+ int   Riftfront::MaxPenetration(IssmDouble* ppenetration){
+ 
+ 	const int     numnodes=2;
+-	IssmDouble        max_penetration;
+ 	IssmDouble        penetration=0;
+-	int           found;
+ 	IssmDouble      vx1;
+ 	IssmDouble      vy1;
+ 	IssmDouble      vx2;
+@@ -734,7 +728,6 @@
+ 	IssmDouble    vy2;
+ 
+ 	IssmDouble    penetration;
+-	int       found;
+ 
+ 	/*Objects: */
+ 	Tria     *tria1       = NULL;
+@@ -768,19 +761,16 @@
+ int   Riftfront::PotentialUnstableConstraint(int* punstable){
+ 
+ 	const int   numnodes        = 2;
+-	IssmDouble      max_penetration;
+-	IssmDouble      penetration;
+-	int         activate;
++	IssmDouble  penetration;
+ 	int         unstable;
+-	int         found;
+-	IssmDouble      vx1;
+-	IssmDouble      vy1;
+-	IssmDouble      vx2;
+-	IssmDouble      vy2;
++	IssmDouble  vx1;
++	IssmDouble  vy1;
++	IssmDouble  vx2;
++	IssmDouble  vy2;
+ 
+ 	/*Objects: */
+-	Tria       *tria1           = NULL;
+-	Tria       *tria2           = NULL;
++	Tria       *tria1 = NULL;
++	Tria       *tria2 = NULL;
+ 
+ 	/*enum of element? */
+ 	if(elements[0]->ObjectEnum()!=TriaEnum)_error_("only Tria element allowed for Riftfront load!");
+@@ -822,7 +812,6 @@
+ 	const int   numnodes    = 2;
+ 	IssmDouble      penetration;
+ 	int         unstable;
+-	int         found;
+ 	IssmDouble      vx1;
+ 	IssmDouble      vy1;
+ 	IssmDouble      vx2;
+Index: ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h	(revision 13761)
+@@ -257,8 +257,6 @@
+ } /*}}}*/
+ template <> inline void GenericExternalResult<IssmPDouble*>::Echo(void){ /*{{{*/
+ 
+-	int i,j;
+-
+ 	_printLine_("GenericExternalResult<IssmPDouble*>:");
+ 	this->GenericEcho();
+ 	_printLine_("   matrix size: " << this->M << "-" << this->N);
+Index: ../trunk-jpl/src/c/classes/objects/Node.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Node.cpp	(revision 13761)
+@@ -437,8 +437,6 @@
+ /*FUNCTION Node::ApplyConstraints{{{*/
+ void  Node::ApplyConstraint(int dof,IssmDouble value){
+ 
+-	int index;
+-
+ 	/*Dof should be added in the s set, describing which 
+ 	 * dofs are constrained to a certain value (dirichlet boundary condition*/
+ 	DofInSSet(dof-1);
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13761)
+@@ -42,7 +42,6 @@
+ 	:TriaRef(nummodels)
+ 	,TriaHook(nummodels,index+1,iomodel){
+ 
+-		int i;
+ 		/*id: */
+ 		this->id=tria_id;
+ 		this->sid=tria_sid;
+@@ -126,14 +125,13 @@
+ /*FUNCTION Tria::AverageOntoPartition {{{*/
+ void  Tria::AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part){
+ 
+-	bool      already=false;
+-	int       i,j;
+-	int       partition[NUMVERTICES];
+-	int       offsetsid[NUMVERTICES];
+-	int       offsetdof[NUMVERTICES];
+-	IssmDouble    area;
+-	IssmDouble    mean;
+-	IssmDouble    values[3];
++	bool       already = false;
++	int        i,j;
++	int        partition[NUMVERTICES];
++	int        offsetsid[NUMVERTICES];
++	int        offsetdof[NUMVERTICES];
++	IssmDouble area;
++	IssmDouble mean;
+ 
+ 	/*First, get the area: */
+ 	area=this->GetArea();
+@@ -230,7 +228,6 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
+ 	IssmDouble heatcapacity,latentheat;
+ 	IssmDouble Jdet,D_scalar;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+@@ -247,7 +244,7 @@
+ 
+ 	/* Start looping on the number of gauss  (nodes on the bedrock) */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -289,20 +286,19 @@
+ 
+ 	/*Intermediaries */
+ 	int        stabilization;
+-	int        i,j,ig,dim;
+-	IssmDouble     Jdettria,DL_scalar,dt,h;
+-	IssmDouble     vel,vx,vy,dvxdx,dvydy;
+-	IssmDouble     dvx[2],dvy[2];
+-	IssmDouble     v_gauss[2]={0.0};
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     L[NUMVERTICES];
+-	IssmDouble     B[2][NUMVERTICES];
+-	IssmDouble     Bprime[2][NUMVERTICES];
+-	IssmDouble     K[2][2]                        ={0.0};
+-	IssmDouble     KDL[2][2]                      ={0.0};
+-	IssmDouble     DL[2][2]                        ={0.0};
+-	IssmDouble     DLprime[2][2]                   ={0.0};
+-	GaussTria *gauss=NULL;
++	int        dim;
++	IssmDouble Jdettria,DL_scalar,dt,h;
++	IssmDouble vel,vx,vy,dvxdx,dvydy;
++	IssmDouble dvx[2],dvy[2];
++	IssmDouble v_gauss[2]={0.0};
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble L[NUMVERTICES];
++	IssmDouble B[2][NUMVERTICES];
++	IssmDouble Bprime[2][NUMVERTICES];
++	IssmDouble K[2][2]                        ={0.0};
++	IssmDouble KDL[2][2]                      ={0.0};
++	IssmDouble DL[2][2]                        ={0.0};
++	IssmDouble DLprime[2][2]                   ={0.0};
+ 
+ 	/*Initialize Element matrix*/
+ 	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,NoneApproximationEnum);
+@@ -325,8 +321,8 @@
+ 	h=sqrt(2*this->GetArea());
+ 
+ 	/* Start  looping on the number of gaussian points: */
+-	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	GaussTria *gauss=new GaussTria(2);
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -784,7 +780,6 @@
+ /*FUNCTION Tria::ComputeStressTensor {{{*/
+ void  Tria::ComputeStressTensor(){
+ 
+-	int         iv;
+ 	IssmDouble      xyz_list[NUMVERTICES][3];
+ 	IssmDouble      pressure,viscosity;
+ 	IssmDouble      epsilon[3]; /* epsilon=[exx,eyy,exy];*/
+@@ -1084,10 +1079,6 @@
+ /*FUNCTION Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype) {{{*/
+ void Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype){
+ 
+-	/*Intermediaries*/
+-	IssmDouble     value[NUMVERTICES];
+-	GaussTria *gauss              = NULL;
+-
+ 	/*Recover input*/
+ 	Input* input=inputs->GetInput(enumtype);
+ 	if (!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element");
+@@ -1096,7 +1087,7 @@
+ 	_assert_(pvalue);
+ 
+ 	/* Start looping on the number of vertices: */
+-	gauss=new GaussTria();
++	GaussTria* gauss=new GaussTria();
+ 	for (int iv=0;iv<NUMVERTICES;iv++){
+ 		gauss->GaussVertex(iv);
+ 		input->GetInputValue(&pvalue[iv],gauss);
+@@ -1109,8 +1100,6 @@
+ /*FUNCTION Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue) {{{*/
+ void Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue){
+ 
+-	IssmDouble     value[NUMVERTICES];
+-	GaussTria *gauss = NULL;
+ 	Input     *input = inputs->GetInput(enumtype);
+ 
+ 	/*Checks in debugging mode*/
+@@ -1118,25 +1107,21 @@
+ 
+ 	/* Start looping on the number of vertices: */
+ 	if (input){
+-		gauss=new GaussTria();
++		GaussTria* gauss=new GaussTria();
+ 		for (int iv=0;iv<NUMVERTICES;iv++){
+ 			gauss->GaussVertex(iv);
+ 			input->GetInputValue(&pvalue[iv],gauss);
+ 		}
++		delete gauss;
+ 	}
+ 	else{
+ 		for (int iv=0;iv<NUMVERTICES;iv++) pvalue[iv]=defaultvalue;
+ 	}
+-
+-	/*clean-up*/
+-	delete gauss;
+ }
+ /*}}}*/
+ /*FUNCTION Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue,int index) TO BE REMOVED{{{*/
+ void Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue,int index){
+ 
+-	IssmDouble     value[NUMVERTICES];
+-	GaussTria *gauss = NULL;
+ 	Input     *input = inputs->GetInput(enumtype);
+ 
+ 	/*Checks in debugging mode*/
+@@ -1144,18 +1129,16 @@
+ 
+ 	/* Start looping on the number of vertices: */
+ 	if (input){
+-		gauss=new GaussTria();
++		GaussTria* gauss=new GaussTria();
+ 		for (int iv=0;iv<NUMVERTICES;iv++){
+ 			gauss->GaussVertex(iv);
+ 			input->GetInputValue(&pvalue[iv],gauss,index);
+ 		}
++		delete gauss;
+ 	}
+ 	else{
+ 		for (int iv=0;iv<NUMVERTICES;iv++) pvalue[iv]=defaultvalue;
+ 	}
+-
+-	/*clean-up*/
+-	delete gauss;
+ }
+ /*}}}*/
+ /*FUNCTION Tria::GetInputValue(IssmDouble* pvalue,Node* node,int enumtype) {{{*/
+@@ -1965,7 +1948,7 @@
+ /*FUNCTION Tria::MigrateGroundingLine{{{*/
+ void  Tria::MigrateGroundingLine(IssmDouble* old_floating_ice,IssmDouble* sheet_ungrounding){
+ 
+-	int     i,migration_style,unground;
++	int     i,migration_style;
+ 	bool    elementonshelf = false;
+ 	IssmDouble  bed_hydro,yts,gl_melting_rate;
+ 	IssmDouble  rho_water,rho_ice,density;
+Index: ../trunk-jpl/src/c/classes/objects/Elements/PentaRef.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/PentaRef.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Elements/PentaRef.cpp	(revision 13761)
+@@ -879,8 +879,6 @@
+ /*FUNCTION PentaRef::GetJacobian {{{*/
+ void PentaRef::GetJacobian(IssmDouble* J, IssmDouble* xyz_list,GaussPenta* gauss){
+ 
+-	int i,j;
+-
+ 	/*The Jacobian is constant over the element, discard the gaussian points. 
+ 	 * J is assumed to have been allocated of size NDOF2xNDOF2.*/
+ 
+@@ -896,9 +894,9 @@
+ 	A2=gauss->coord2;
+ 	A3=gauss->coord3;
+ 
+-	xi=A2-A1;
+-	eta=SQRT3*A3;
+-	zi=gauss->coord4;
++	xi  = A2-A1;
++	eta = SQRT3*A3;
++	zi  = gauss->coord4;
+ 
+ 	x1=*(xyz_list+3*0+0);
+ 	x2=*(xyz_list+3*1+0);
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13761)
+@@ -229,15 +229,13 @@
+ 	int         dofv[3]={0,1,2};
+ 	int         dofp[1]={3};
+ 	int         analysis_type,approximation;
+-	int         doflist[NUMVERTICES];
+ 	IssmDouble      xyz_list[NUMVERTICES][3];
+ 	IssmDouble      xyz_list_tria[3][3];
+ 	IssmDouble      rho_ice,gravity,stokesreconditioning;
+-	IssmDouble      pressure,viscosity,bed,Jdet2d;
++	IssmDouble      pressure,viscosity,Jdet2d;
+ 	IssmDouble      bed_normal[3];
+ 	IssmDouble      basalforce[3];
+ 	IssmDouble      epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble      devstresstensor[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+ 	IssmDouble      stresstensor[6]={0.0};
+ 	IssmDouble      sigma_xx,sigma_yy,sigma_zz;
+ 	IssmDouble      sigma_xy,sigma_xz,sigma_yz;
+@@ -322,7 +320,6 @@
+ /*FUNCTION Penta::ComputeStressTensor {{{*/
+ void  Penta::ComputeStressTensor(){
+ 
+-	int         iv;
+ 	IssmDouble      xyz_list[NUMVERTICES][3];
+ 	IssmDouble      pressure,viscosity;
+ 	IssmDouble      epsilon[6]; /* epsilon=[exx,eyy,exy];*/
+@@ -648,8 +645,6 @@
+ /*FUNCTION Penta::DeepEcho{{{*/
+ void Penta::DeepEcho(void){
+ 
+-	int i;
+-
+ 	_printLine_("Penta:");
+ 	_printLine_("   id: " << id);
+ 	nodes[0]->DeepEcho();
+@@ -669,8 +664,6 @@
+ 	results->DeepEcho();
+ 	_printLine_("neighboor sids: ");
+ 	_printLine_(" " << horizontalneighborsids[0] << " " << horizontalneighborsids[1] << " " << horizontalneighborsids[2]);
+-
+-	return;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::DeleteResults {{{*/
+@@ -791,7 +784,7 @@
+ /*FUNCTION Penta::GetDofList {{{*/
+ void  Penta::GetDofList(int** pdoflist,int approximation_enum,int setenum){
+ 
+-	int  i,j,count=0;
++	int  i,count=0;
+ 	int  numberofdofs=0;
+ 	int* doflist=NULL;
+ 
+@@ -900,10 +893,6 @@
+ /*FUNCTION Penta::GetInputListOnVertices(IssmDouble* pvalue,int enumtype) {{{*/
+ void Penta::GetInputListOnVertices(IssmDouble* pvalue,int enumtype){
+ 
+-	/*Intermediaries*/
+-	IssmDouble     value[NUMVERTICES];
+-	GaussPenta *gauss              = NULL;
+-
+ 	/*Recover input*/
+ 	Input* input=inputs->GetInput(enumtype);
+ 	if (!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element");
+@@ -912,7 +901,7 @@
+ 	_assert_(pvalue);
+ 
+ 	/* Start looping on the number of vertices: */
+-	gauss=new GaussPenta();
++	GaussPenta *gauss=new GaussPenta();
+ 	for (int iv=0;iv<NUMVERTICES;iv++){
+ 		gauss->GaussVertex(iv);
+ 		input->GetInputValue(&pvalue[iv],gauss);
+@@ -925,10 +914,6 @@
+ /*FUNCTION Penta::GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue) {{{*/
+ void Penta::GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue){
+ 
+-	/*Intermediaries*/
+-	IssmDouble     value[NUMVERTICES];
+-	GaussPenta *gauss              = NULL;
+-
+ 	/*Recover input*/
+ 	Input* input=inputs->GetInput(enumtype);
+ 
+@@ -937,18 +922,16 @@
+ 
+ 	/* Start looping on the number of vertices: */
+ 	if (input){
+-		gauss=new GaussPenta();
++		GaussPenta *gauss=new GaussPenta();
+ 		for (int iv=0;iv<NUMVERTICES;iv++){
+ 			gauss->GaussVertex(iv);
+ 			input->GetInputValue(&pvalue[iv],gauss);
+ 		}
++		delete gauss;
+ 	}
+ 	else{
+ 		for (int iv=0;iv<NUMVERTICES;iv++) pvalue[iv]=defaultvalue;
+ 	}
+-
+-	/*clean-up*/
+-	delete gauss;
+ }
+ /*}}}*/
+ /*FUNCTION Penta::GetInputValue(IssmDouble* pvalue,Node* node,int enumtype) {{{*/
+@@ -1266,7 +1249,7 @@
+ void Penta::InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){//index into elements
+ 
+ 	/*Intermediaries*/
+-	int    i,j,t;
++	int    i,t;
+ 	int    penta_vertex_ids[6];
+ 	int    row;
+ 	IssmDouble nodeinputs[6];
+@@ -2988,13 +2971,12 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries*/
+-	int    iv;
+ 	IssmDouble phi;
+ 	IssmDouble viscosity;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6];
+-	IssmDouble     viscousheating[NUMVERTICES]={0,0,0,0,0,0};
+-	IssmDouble     thickness;
++	IssmDouble viscousheating[NUMVERTICES]={0,0,0,0,0,0};
++	IssmDouble thickness;
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Element vector*/
+Index: ../trunk-jpl/src/c/classes/kriging/Observation.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/kriging/Observation.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/kriging/Observation.cpp	(revision 13761)
+@@ -34,8 +34,6 @@
+ /*FUNCTION Observation::Echo {{{*/
+ void Observation::Echo(void){
+ 
+-	int  bit;
+-
+ 	_printLine_("Observation");
+ 	_printLine_("   index : " << this->index);
+ 	_printLine_("   x     : " << this->x);
+Index: ../trunk-jpl/src/c/classes/matrix/ElementVector.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/ElementVector.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/matrix/ElementVector.cpp	(revision 13761)
+@@ -35,7 +35,7 @@
+ 
+ 	/*intermediaries*/
+ 	int i,j,counter;
+-	int gsize,fsize,ssize;
++	int gsize,fsize;
+ 	int* P=NULL;
+ 	bool found;
+ 
+@@ -218,7 +218,8 @@
+ /*FUNCTION ElementVector::Echo{{{*/
+ void ElementVector::Echo(void){
+ 
+-	int i,j;
++	int i;
++
+ 	_printLine_("Element Vector echo:");
+ 	_printLine_("   nrows: " << nrows);
+ 	_printLine_("   values:");
+Index: ../trunk-jpl/src/c/classes/bamg/R2.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/R2.h	(revision 13760)
++++ ../trunk-jpl/src/c/classes/bamg/R2.h	(revision 13761)
+@@ -38,11 +38,6 @@
+ 
+ 	template <class R,class RR> class P2xP2{
+ 
+-		  private:
+-
+-			  friend P2<R,RR> operator*(P2<R,RR> c,P2xP2<R,RR> cc){
+-				  return P2<R,RR>(c.x*cc.x.x + c.y*cc.y.x, c.x*cc.x.y + c.y*cc.y.y);
+-			  } 
+ 		  public:
+ 
+ 			  //fields
+Index: ../trunk-jpl/src/c/classes/bamg/Geometry.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Geometry.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/bamg/Geometry.cpp	(revision 13761)
+@@ -67,7 +67,7 @@
+ 		nbcurves=0;
+ 
+ 		double Hmin = HUGE_VAL;// the infinie value 
+-		int i,j,k,n,i0,i1,i2,i3;
++		int i,j,n,i0,i1,i2,i3;
+ 
+ 		/*initialize some variables*/
+ 		verbose= bamgopts->verbose;
+@@ -499,12 +499,11 @@
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, MeshGeom.cpp/AfterRead)*/
+ 
+ 		long               i,j,k;
+-		int                jj;
+ 		long              *head_v   = new long[nbv];
+ 		long              *next_p   = new long[2*nbe];
+ 		float             *eangle   = new float[nbe];
+ 		double             eps      = 1e-20;
+-		BamgQuadtree           quadtree; // build quadtree to find duplicates
++		BamgQuadtree       quadtree; // build quadtree to find duplicates
+ 		BamgVertex        *v0       = vertices;
+ 		GeomVertex *v0g      = (GeomVertex*) (void*)v0;
+ 
+Index: ../trunk-jpl/src/c/classes/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Mesh.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/bamg/Mesh.cpp	(revision 13761)
+@@ -268,7 +268,7 @@
+ 
+ 		double Hmin = HUGE_VAL;// the infinie value 
+ 		long i1,i2,i3;
+-		long i,j;
++		long i;
+ 		Metric M1(1);
+ 		int verbose=0;
+ 		bool* nodeflags=NULL;
+@@ -384,7 +384,7 @@
+ 		//Quadrilaterals
+ 		if(bamgmesh->Quadrilaterals){
+ 			if(verbose>5) _printLine_("      processing Quadrilaterals");
+-			long i1,i2,i3,i4,iref;
++			long i1,i2,i3,i4;
+ 			triangles =new Triangle[nbt];
+ 			for (i=0;i<bamgmesh->QuadrilateralsSize[0];i++){
+ 				//divide the quad into two triangles
+@@ -4953,7 +4953,7 @@
+ 		/*Generate mesh from geometry*/
+ 
+ 		/*Intermediaries*/
+-		int                i,j,k;
++		int                i,k;
+ 		int                nbcurves    = 0;
+ 		int                NbNewPoints,NbEdgeCurve;
+ 		double             lcurve,lstep,s;
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13761)
+@@ -1081,8 +1081,6 @@
+ 	int     code          = 0;
+ 	int     vector_layout = 0;
+ 	int     counter;
+-	int     nods;
+-	int     nel;
+ 	int     numberofelements;
+ 
+ 	/*variables being fetched: */
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13760)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13761)
+@@ -483,7 +483,6 @@
+ void FemModel::RequestedDependentsx(void){/*{{{*/
+ 
+ 
+-	int         i;
+ 	bool        isautodiff      = false;
+ 	IssmDouble  output_value;
+ 
+@@ -502,7 +501,7 @@
+ 			dependents=xNew<IssmPDouble>(num_dependents);
+ 
+ 			/*Go through our dependent variables, and compute the response:*/
+-			for(i=0;i<dependent_objects->Size();i++){
++			for(int i=0;i<dependent_objects->Size();i++){
+ 				DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
+ 				dep->Responsex(&output_value,this);
+ 				output_value>>=dependents[i];
Index: /issm/oecreview/Archive/13393-13976/ISSM-13761-13762.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13761-13762.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13761-13762.diff	(revision 13980)
@@ -0,0 +1,992 @@
+Index: ../trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp	(revision 13762)
+@@ -19,9 +19,7 @@
+ 
+ void AverageOntoPartitionx(double** paverage, Elements* elements, Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,double* vertex_response){
+ 
+-	int     i,j,k;
+ 	int     dummy;
+-
+ 	int     npart;
+ 	double *qmu_part  = NULL;
+ 	int     numberofvertices;
+@@ -47,7 +45,7 @@
+ 	vec_average=new Vector<IssmDouble>(npart);
+ 
+ 	/*loop on each element, and add contribution of the element to the partition (surface weighted average): */
+-	for(i=0;i<elements->Size();i++){
++	for(int i=0;i<elements->Size();i++){
+ 		Element* element=(Element*)elements->GetObjectByOffset(i);
+ 		element->AverageOntoPartition(partition_contributions,partition_areas,vertex_response,qmu_part);
+ 	}
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 13762)
+@@ -29,7 +29,6 @@
+ 	int    i0,i1,i2;
+ 	double areacoord[3];
+ 	double aa,bb;
+-	double data_value;
+ 	Icoor2 dete[3];
+ 
+ 	/*Checks*/
+Index: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/ElementSegment.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/ElementSegment.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/ElementSegment.cpp	(revision 13762)
+@@ -8,8 +8,6 @@
+ 	/*We have a tria element (xnodes,ynodes) and a segment (xsegment,ysegment). Find whether they intersect. 
+ 	 * If they do, create a Segment object with the intersection, and add to segments_dataset dataset: */
+ 
+-	int i;
+-	double alpha;
+ 	double alpha1,alpha2;
+ 	double beta1,beta2;
+ 	double gamma1,gamma2;
+Index: ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp	(revision 13762)
+@@ -6,7 +6,6 @@
+ void MeshProfileIntersectionx( double** psegments, int* pnumsegs, int* index, double* x, double* y, int nel, int nods,  Contour<IssmPDouble>** contours,int numcontours){
+ 
+ 	int i,j,k;
+-	int m,n;
+ 
+ 	/*Contour:*/
+ 	Contour<IssmPDouble>* contouri=NULL;
+Index: ../trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp	(revision 13762)
+@@ -19,7 +19,6 @@
+ 	int         Kfsm,Kfsn;
+ 	int         global_m,global_n;
+ 	bool        fromlocalsize = true;
+-	int         verbose;
+ 
+ 	if(VerboseModule()) _pprintLine_("   Dirichlet lifting applied to load vector");
+ 
+Index: ../trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp	(revision 13762)
+@@ -24,7 +24,7 @@
+ int Kml2Expx(char* filkml,char* filexp,
+ 			 int sgn,double cm,double sp){
+ 
+-	int     i,iret=0;
++	int     iret=0;
+ 	double  *lat=NULL,*lon=NULL;
+ 
+ 	KML_Object*  kobj=NULL;
+Index: ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp	(revision 13762)
+@@ -10,14 +10,11 @@
+ 
+ int HoleFillerx(double** pimageout,double* image, int lines,int samps,int smooth){
+ 
+-	FILE 			*fp1;
+-	unsigned long	filesize;
+ 	long			infinit;
+ 	double          temp;
+-	long			i, j, k, l, ii, jj, bytes;
++	long			i, j, k, l, ii, jj;
+ 	long			iii, jjj;
+-	long			test, prevlines, prevpix, test1, test2, thresh,counter;
+-	long			bell, cycles, leftovers;
++	long			test;
+ 	float			howlong;
+ 	float			nsteps, ssteps, wsteps, esteps;
+ 	float			nwsteps, nesteps, swsteps, sesteps;
+@@ -38,9 +35,6 @@
+ 	double*         image3=NULL;
+ 	double*         image4=NULL;
+ 
+-	/*Added to original routine: */
+-	int             imageoutsize;
+-
+ 	 /*^^^^^^^^^^^^^  Remove pixels close to the holes ^^^^^^^^^^^^^*/
+ 	image2 = xNew<double>(lines*samps);
+ 	memcpy(image2,image,lines*samps*sizeof(double));
+Index: ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp	(revision 13762)
+@@ -39,9 +39,6 @@
+ 
+ int ContourToNodesx(SeqVec<IssmPDouble>** pflags,double* x, double* y, int nods, DataSet* contours, int edgevalue){
+ 
+-	int i;
+-	int m,n;
+-
+ 	/*Contour:*/
+ 	Contour<IssmPDouble>* contouri=NULL;
+ 	int      numnodes;
+@@ -55,7 +52,7 @@
+ 
+ 	/*Loop through all contours: */
+ 	if(contours){
+-		for (i=0;i<contours->Size();i++){
++		for(int i=0;i<contours->Size();i++){
+ 			Contour<IssmPDouble>* contour=(Contour<IssmPDouble>*)contours->GetObjectByOffset(i);
+ 			IsInPoly(flags,contour->x,contour->y,contour->nods,x,y,0,nods,edgevalue);
+ 		}
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateLoadsHydrology.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateLoadsHydrology.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateLoadsHydrology.cpp	(revision 13762)
+@@ -12,14 +12,8 @@
+ 
+ void	CreateLoadsHydrology(Loads** ploads, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	int i;
+-
+-	/*DataSet*/
+-	Loads*    loads    = NULL;
+-
+ 	/*Recover pointer: */
+-	loads=*ploads;
++	Loads* loads=*ploads;
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp	(revision 13762)
+@@ -13,11 +13,8 @@
+ 
+ void	CreateConstraintsHydrology(Constraints** pconstraints, IoModel* iomodel){
+ 
+-	/*Output*/
+-	Constraints *constraints = NULL;
+-
+ 	/*Recover pointer: */
+-	constraints=*pconstraints;
++	Constraints* constraints=*pconstraints;
+ 
+ 	/*Create constraints if they do not exist yet*/
+ 	if(!constraints) constraints = new Constraints();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp	(revision 13762)
+@@ -19,14 +19,11 @@
+ 	bool continuous_galerkin=true;
+ 	int    numberofvertices;
+ 
+-	/*DataSets: */
+-	Nodes*    nodes = NULL;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 	/*Recover pointer: */
+-	nodes=*pnodes;
++	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 13762)
+@@ -12,11 +12,8 @@
+ 
+ void	CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel){
+ 
+-	/*DataSet*/
+-	Loads* loads=NULL;
+-
+ 	/*Recover pointer: */
+-	loads=*ploads;
++	Loads* loads=*ploads;
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 13762)
+@@ -20,15 +20,12 @@
+ 	int    numberofvertices;
+ 	bool   ishutter;
+ 
+-	/*DataSets: */
+-	Nodes*    nodes = NULL;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
+ 
+ 	/*Recover pointer: */
+-	nodes=*pnodes;
++	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 13762)
+@@ -27,7 +27,6 @@
+ 	IssmDouble *spcvector  = NULL;
+ 	IssmDouble* times=NULL;
+ 	IssmDouble* values=NULL;
+-	Constraints* constraints = NULL;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&dim,MeshDimensionEnum);
+@@ -36,7 +35,7 @@
+ 	iomodel->Constant(&referencetemperature,ConstantsReferencetemperatureEnum);
+ 
+ 	/*Recover pointer: */
+-	constraints=*pconstraints;
++	Constraints* constraints=*pconstraints;
+ 
+ 	/*Create constraints if they do not exist yet*/
+ 	if(!constraints) constraints = new Constraints();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 13762)
+@@ -19,14 +19,11 @@
+ 	bool continuous_galerkin=true;
+ 	int    numberofvertices;
+ 
+-	/*DataSets: */
+-	Nodes*    nodes = NULL;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 	/*Recover pointer: */
+-	nodes=*pnodes;
++	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp	(revision 13762)
+@@ -12,11 +12,8 @@
+ 
+ void	CreateLoadsEnthalpy(Loads** ploads, IoModel* iomodel){
+ 
+-	/*DataSet*/
+-	Loads* loads=NULL;
+-
+ 	/*Recover pointer: */
+-	loads=*ploads;
++	Loads* loads=*ploads;
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 13762)
+@@ -19,16 +19,13 @@
+ 	IssmDouble yts;
+ 	int    numberofvertices;
+ 
+-	/*Output*/
+-	Constraints* constraints = NULL;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&yts,ConstantsYtsEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 	/*Recover pointer: */
+-	constraints=*pconstraints;
++	Constraints* constraints=*pconstraints;
+ 
+ 	/*Create constraints if they do not exist yet*/
+ 	if(!constraints) constraints = new Constraints();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 13762)
+@@ -20,15 +20,12 @@
+ 	int    dim;
+ 	int    numberofvertices;
+ 
+-	/*DataSets: */
+-	Nodes*    nodes = NULL;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 	/*Recover pointer: */
+-	nodes=*pnodes;
++	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 13762)
+@@ -12,11 +12,8 @@
+ 
+ void	CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel){
+ 
+-	/*DataSet*/
+-	Loads* loads=NULL;
+-
+ 	/*Recover pointer: */
+-	loads=*ploads;
++	Loads* loads=*ploads;
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 13762)
+@@ -22,16 +22,13 @@
+ 	int numvertex_pairing;
+ 	int numberofelements;
+ 
+-	/*DataSet*/
+-	Loads*    loads    = NULL;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+ 	iomodel->Constant(&numberofedges,MeshNumberofedgesEnum);
+ 
+ 	/*Recover pointer: */
+-	loads=*ploads;
++	Loads* loads=*ploads;
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 13762)
+@@ -9,16 +9,12 @@
+ 
+ void	CreateConstraintsPrognostic(Constraints** pconstraints, IoModel* iomodel){
+ 
++	/*Fetch parameters: */
+ 	int stabilization;
+-
+-	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+ 
+-	/*Output*/
+-	Constraints *constraints = NULL;
+-
+ 	/*Recover pointer: */
+-	constraints=*pconstraints;
++	Constraints* constraints=*pconstraints;
+ 
+ 	/*Create constraints if they do not exist yet*/
+ 	if(!constraints) constraints = new Constraints();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 13762)
+@@ -25,9 +25,6 @@
+ 	int    numberofvertices;
+ 	int    stabilization;
+ 
+-	/*DataSets: */
+-	Nodes*    nodes = NULL;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+@@ -35,7 +32,7 @@
+ 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
+ 
+ 	/*Recover pointer: */
+-	nodes=*pnodes;
++	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp	(revision 13762)
+@@ -12,11 +12,8 @@
+ 
+ void	CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel){
+ 
+-	/*DataSet*/
+-	Loads*    loads    = NULL;
+-
+ 	/*Recover pointer: */
+-	loads=*ploads;
++	Loads* loads=*ploads;
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp	(revision 13762)
+@@ -12,11 +12,8 @@
+ 
+ void	CreateConstraintsSurfaceSlope(Constraints** pconstraints, IoModel* iomodel){
+ 
+-	/*Output*/
+-	Constraints* constraints = NULL;
+-
+ 	/*Recover pointer: */
+-	constraints=*pconstraints;
++	Constraints* constraints=*pconstraints;
+ 
+ 	/*Create constraints if they do not exist yet*/
+ 	if(!constraints) constraints = new Constraints();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp	(revision 13762)
+@@ -15,18 +15,14 @@
+ void	CreateNodesSurfaceSlope(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i;
+ 	bool continuous_galerkin=true;
+ 	int    numberofvertices;
+ 
+-	/*DataSets: */
+-	Nodes*    nodes = NULL;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 	/*Recover pointer: */
+-	nodes=*pnodes;
++	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+@@ -37,8 +33,7 @@
+ 	/*First fetch data: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+-	for (i=0;i<numberofvertices;i++){
+-
++	for(int i=0;i<numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+ 
+ 			/*Add node to nodes dataset: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 13762)
+@@ -16,13 +16,10 @@
+ 	int i;
+ 	int    dim;
+ 	int    numberofvertices;
+-
+-	/*DataSet*/
+-	Loads*    loads    = NULL;
+ 	Pengrid*    pengrid  = NULL;
+ 
+ 	/*Recover pointer: */
+-	loads=*ploads;
++	Loads* loads=*ploads;
+ 
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&dim,MeshDimensionEnum);
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 13762)
+@@ -13,19 +13,12 @@
+ 
+ void	CreateConstraintsThermal(Constraints** pconstraints, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	int i;
+-	int count;
++	/*Fetch parameters: */
+ 	int    dim;
+-
+-	/*Output*/
+-	Constraints* constraints = NULL;
+-
+-	/*Fetch parameters: */
+ 	iomodel->Constant(&dim,MeshDimensionEnum);
+ 
+ 	/*Recover pointer: */
+-	constraints=*pconstraints;
++	Constraints* constraints=*pconstraints;
+ 
+ 	/*Create constraints if they do not exist yet*/
+ 	if(!constraints) constraints = new Constraints();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 13762)
+@@ -15,18 +15,14 @@
+ void	CreateNodesThermal(Nodes** pnodes, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i;
+ 	bool continuous_galerkin=true;
+-	int    numberofvertices;
+ 
+-	/*DataSets: */
+-	Nodes*    nodes = NULL;
+-
+ 	/*Fetch parameters: */
++	int    numberofvertices;
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 	/*Recover pointer: */
+-	nodes=*pnodes;
++	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+@@ -37,8 +33,7 @@
+ 	/*Create nodes and vertices: */
+ 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
+ 
+-	for (i=0;i<numberofvertices;i++){
+-
++	for(int i=0;i<numberofvertices;i++){
+ 		if(iomodel->my_vertices[i]){
+ 			/*Add node to nodes dataset: */
+ 			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,ThermalAnalysisEnum));
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp	(revision 13762)
+@@ -12,11 +12,8 @@
+ 
+ void	CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel){
+ 
+-	/*DataSet*/
+-	Loads*    loads    = NULL;
+-
+ 	/*Recover pointer: */
+-	loads=*ploads;
++	Loads* loads=*ploads;
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp	(revision 13762)
+@@ -12,11 +12,8 @@
+ 
+ void	CreateConstraintsBedSlope(Constraints** pconstraints, IoModel* iomodel){
+ 
+-	/*Output*/
+-	Constraints* constraints = NULL;
+-
+ 	/*Recover pointer: */
+-	constraints=*pconstraints;
++	Constraints* constraints=*pconstraints;
+ 
+ 	/*Create constraints if they do not exist yet*/
+ 	if(!constraints) constraints = new Constraints();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp	(revision 13762)
+@@ -17,16 +17,13 @@
+ 	/*Intermediary*/
+ 	int i;
+ 	bool continuous_galerkin=true;
+-	int    numberofvertices;
+ 
+-	/*DataSets: */
+-	Nodes*    nodes = NULL;
+-
+ 	/*Fetch parameters: */
++	int    numberofvertices;
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 	/*Recover pointer: */
+-	nodes=*pnodes;
++	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 13762)
+@@ -13,14 +13,8 @@
+ void	CreateLoadsMelting(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i;
+-	int    dim;
+-	int    numberofvertices;
+-
+-	/*DataSet*/
+-	Loads*    loads    = NULL;
+-
+-	/*Fetch parameters: */
++	int dim;
++	int numberofvertices;
+ 	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+@@ -28,7 +22,7 @@
+ 	if (dim==2) _error_("2d meshes not supported yet");
+ 
+ 	/*Recover pointer: */
+-	loads=*ploads;
++	Loads* loads=*ploads;
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+@@ -37,7 +31,7 @@
+ 	iomodel->FetchData(2,MeshVertexonbedEnum,MeshElementsEnum);
+ 	CreateSingleNodeToElementConnectivity(iomodel);
+ 
+-	for (i=0;i<numberofvertices;i++){
++	for(int i=0;i<numberofvertices;i++){
+ 		if((iomodel->my_vertices[i]==1)){
+ 			if (reCast<int>(iomodel->Data(MeshVertexonbedEnum)[i])){
+ 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,MeltingAnalysisEnum));
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp	(revision 13762)
+@@ -12,15 +12,8 @@
+ 
+ void	CreateConstraintsMelting(Constraints** pconstraints, IoModel* iomodel){
+ 
+-	/*Intermediary*/
+-	int i;
+-	int count;
+-
+-	/*Intermediary*/
+-	Constraints* constraints = NULL;
+-
+ 	/*Recover pointer: */
+-	constraints=*pconstraints;
++	Constraints* constraints=*pconstraints;
+ 
+ 	/*Create constraints if they do not exist yet*/
+ 	if(!constraints) constraints = new Constraints();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 13762)
+@@ -19,14 +19,11 @@
+ 	bool continuous_galerkin=true;
+ 	int    numberofvertices;
+ 
+-	/*DataSets: */
+-	Nodes*    nodes = NULL;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 
+ 	/*Recover pointer: */
+-	nodes=*pnodes;
++	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 13762)
+@@ -13,7 +13,6 @@
+ void	CreateLoadsDiagnosticHoriz(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*DataSets*/
+-	Loads     *loads     = NULL;
+ 	Icefront  *icefront  = NULL;
+ 	Riftfront *riftfront = NULL;
+ 	Pengrid   *pengrid   = NULL;
+@@ -47,7 +46,7 @@
+ 	iomodel->Constant(&numrifts,RiftsNumriftsEnum);
+ 
+ 	/*Recover pointer: */
+-	loads=*ploads;
++	Loads* loads=*ploads;
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 13762)
+@@ -20,9 +20,6 @@
+ 	int    numberofvertices;
+ 	bool   isstokes,isl1l2,ismacayealpattyn;
+ 
+-	/*DataSets: */
+-	Nodes*    nodes = NULL;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
+ 	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+@@ -30,7 +27,7 @@
+ 	iomodel->Constant(&ismacayealpattyn,FlowequationIsmacayealpattynEnum);
+ 
+ 	/*Recover pointer: */
+-	nodes=*pnodes;
++	Nodes* nodes=*pnodes;
+ 
+ 	/*First create nodes*/
+ 	if(!nodes) nodes = new Nodes();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 13762)
+@@ -25,9 +25,6 @@
+ 	int    numberofvertices;
+ 	int    stabilization;
+ 
+-	/*DataSets: */
+-	Nodes*    nodes = NULL;
+-
+ 	/*Fetch parameters: */
+ 	iomodel->Constant(&dim,MeshDimensionEnum);
+ 	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+@@ -35,7 +32,7 @@
+ 	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+ 
+ 	/*Recover pointer: */
+-	nodes=*pnodes;
++	Nodes* nodes=*pnodes;
+ 
+ 	/*Create nodes if they do not exist yet*/
+ 	if(!nodes) nodes = new Nodes();
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 13762)
+@@ -13,7 +13,6 @@
+ void	CreateLoadsBalancethickness(Loads** ploads, IoModel* iomodel){
+ 
+ 	/*Intermediary*/
+-	int i;
+ 	int element;
+ 	int stabilization;
+ 	int numberofedges;
+@@ -22,11 +21,8 @@
+ 	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+ 	iomodel->Constant(&numberofedges,MeshNumberofedgesEnum);
+ 
+-	/*Output*/
+-	Loads*    loads    = NULL;
+-
+ 	/*Recover pointer: */
+-	loads=*ploads;
++	Loads* loads=*ploads;
+ 
+ 	/*Create loads if they do not exist yet*/
+ 	if(!loads) loads = new Loads();
+@@ -38,7 +34,7 @@
+ 		iomodel->FetchData(3,MeshEdgesEnum,MeshElementsEnum,ThicknessEnum);
+ 
+ 		/*First load data:*/
+-		for (i=0;i<numberofedges;i++){
++		for (int i=0;i<numberofedges;i++){
+ 
+ 			/*Get left and right elements*/
+ 			element=reCast<int,IssmDouble>(iomodel->Data(MeshEdgesEnum)[4*i+2])-1; //edges are [node1 node2 elem1 elem2]
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp	(revision 13762)
+@@ -9,16 +9,12 @@
+ 
+ void	CreateConstraintsBalancethickness(Constraints** pconstraints, IoModel* iomodel){
+ 
++	/*Fetch parameters: */
+ 	int    stabilization;	
+-
+-	/*Fetch parameters: */
+ 	iomodel->Constant(&stabilization,BalancethicknessStabilizationEnum);
+ 
+-	/*Output*/
+-	Constraints* constraints = NULL;
+-
+ 	/*Recover pointer: */
+-	constraints=*pconstraints;
++	Constraints* constraints=*pconstraints;
+ 
+ 	/*Create constraints if they do not exist yet*/
+ 	if(!constraints) constraints = new Constraints();
+Index: ../trunk-jpl/src/c/modules/NodesDofx/NodesDofx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodesDofx/NodesDofx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/NodesDofx/NodesDofx.cpp	(revision 13762)
+@@ -13,7 +13,6 @@
+ 
+ 	int noerr=1;
+ 	int found=0;
+-	int i;
+ 
+ 	/*Do we have any nodes for this analysis type? :*/
+ 	if(nodes->NumberOfNodes(configuration_type)){ 
+Index: ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 13762)
+@@ -44,7 +44,6 @@
+ 
+ 	int num_unstable_constraints=0;
+ 	int converged=0;
+-	int potential;
+ 
+ 	RiftConstrain(&num_unstable_constraints,loads,configuration_type);
+ 	if(num_unstable_constraints==0)converged=1;
+Index: ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp	(revision 13762)
+@@ -35,7 +35,6 @@
+ 
+ 	/*Intermediary: */
+ 	int        local_m,local_n,global_m,global_n;
+-	int        analysis_type;
+ 
+ 	/*Solver */
+ 	KSP        ksp              = NULL;
+Index: ../trunk-jpl/src/c/modules/Solverx/Solverx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/Solverx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/Solverx/Solverx.cpp	(revision 13762)
+@@ -15,9 +15,6 @@
+ 
+ void	Solverx(Vector<IssmDouble>** puf, Matrix<IssmDouble>* Kff, Vector<IssmDouble>* pf, Vector<IssmDouble>* uf0,Vector<IssmDouble>* df, Parameters* parameters){
+ 
+-	/*Intermediary: */
+-	int analysis_type;
+-
+ 	/*output: */
+ 	Vector<IssmDouble> *uf=NULL;
+ 
+Index: ../trunk-jpl/src/c/modules/Orthx/Orthx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Orthx/Orthx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/Orthx/Orthx.cpp	(revision 13762)
+@@ -10,7 +10,7 @@
+ 	Vector<IssmDouble>* newgradj=NULL;
+ 
+ 	/*intermediary:*/
+-	IssmDouble norm_new,norm_old,dot_product;;
++	IssmDouble norm_old,dot_product;;
+ 
+ 	/*Initialize output*/
+ 	newgradj=gradj->Duplicate();
+Index: ../trunk-jpl/src/c/modules/TriaSearchx/TriaSearchx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriaSearchx/TriaSearchx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/TriaSearchx/TriaSearchx.cpp	(revision 13762)
+@@ -23,15 +23,10 @@
+ 	/*Intermediary*/
+ 	R2     r;
+ 	I2     I;
+-	int    i,j,k;
+-	int    i0,i1,i2;
+-	double areacoord[3];
+-	double aa,bb;
+-	double data_value;
++	int    i;
+ 	Icoor2 dete[3];
+-	int verbose=0;
+ 
+-	// read background mesh 
++	/* read background mesh */
+ 	Mesh Th(index,x,y,nods,nel); 
+ 	Th.CreateSingleVertexToTriangleConnectivity();
+ 
+Index: ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp	(revision 13762)
+@@ -19,8 +19,8 @@
+ 	int    nbsmooth;
+ 
+ 	/*intermediary*/
++	int i;
+ 	int noerr=1;
+-	int i,j,num;
+ 	double costheta=2;
+ 	double hminaniso=1e-100; 
+ 	Mesh* Thr=NULL;
+Index: ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.cpp	(revision 13762)
+@@ -11,10 +11,6 @@
+ 
+ int ContourToMeshx(SeqVec<double>** pin_nod,SeqVec<double>** pin_elem, double* index, double* x, double* y,DataSet* contours,char* interptype,int nel,int nods, int edgevalue) {
+ 
+-	int noerr=1;
+-	int i;
+-	int m,n;
+-
+ 	/*Contour:*/
+ 	double*  in_nod_serial;
+ 	double   value;
+@@ -51,7 +47,7 @@
+ 
+ 	/*Take care of the case where an element interpolation has been requested: */
+ 	if ((strcmp(interptype,"element")==0) || (strcmp(interptype,"element and node")==0)){
+-		for (n=0;n<nel;n++){
++		for(int n=0;n<nel;n++){
+ 			if ( (in_nod_serial[ (int)*(index+3*n+0) -1] == 1) && (in_nod_serial[ (int)*(index+3*n+1) -1] == 1) && (in_nod_serial[ (int)*(index+3*n+2) -1] == 1) ){
+ 				value=1; in_elem->SetValue(n,value,INS_VAL);
+ 			}
+@@ -68,5 +64,5 @@
+ 	/*Free ressources:*/
+ 	xDelete<double>(in_nod_serial);
+ 
+-	return noerr;
++	return 1;
+ }
+Index: ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 13761)
++++ ../trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp	(revision 13762)
+@@ -13,19 +13,16 @@
+ 
+ 	/*intermediary: */
+ 	int     i,j;
+-	bool    transient     = false;
++	bool        transient        = false;
++	FILE       *fid              = NULL;
++	int         code             = 0;
++	int         vector_layout    = 0;
++	IssmDouble *times            = NULL;
++	IssmDouble *values           = NULL;
++	bool        spcpresent       = false;
++	int         count            = 0;
++	int         numberofvertices;
+ 
+-	FILE   *fid           = NULL;
+-	int     code          = 0;
+-	int     vector_layout = 0;
+-	int     counter;
+-	int     nods;
+-	IssmDouble* times=NULL;
+-	IssmDouble* values=NULL;
+-	bool    spcpresent=false;
+-	int     count=0;
+-	int     numberofvertices;
+-
+ 	/*variables being fetched: */
+ 	IssmDouble *IssmDoublevector  = NULL;
+ 	int     M,N;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13762-13763.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13762-13763.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13762-13763.diff	(revision 13980)
@@ -0,0 +1,100 @@
+Index: ../trunk-jpl/src/c/Container/Options.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Options.h	(revision 13762)
++++ ../trunk-jpl/src/c/Container/Options.h	(revision 13763)
+@@ -24,7 +24,6 @@
+ 
+ 		template <class OptionType> void Get(OptionType* pvalue,const char* name){ /*{{{*/
+ 
+-			vector<Object*>::iterator object;
+ 			GenericOption<OptionType>* genericoption=NULL;
+ 
+ 			/*Get option*/
+@@ -42,7 +41,6 @@
+ 		/*}}}*/
+ 		template <class OptionType> void Get(OptionType* pvalue,int* pnumel, const char* name){ /*{{{*/
+ 
+-			vector<Object*>::iterator object;
+ 			GenericOption<OptionType>* genericoption=NULL;
+ 
+ 			/*Get option*/
+@@ -61,7 +59,6 @@
+ 		/*}}}*/
+ 		template <class OptionType> void Get(OptionType* pvalue,const char* name,OptionType default_value){ /*{{{*/
+ 
+-			vector<Object*>::iterator object;
+ 			GenericOption<OptionType>* genericoption=NULL;
+ 
+ 			/*Get option*/
+@@ -78,7 +75,6 @@
+ 		/*}}}*/
+ 		template <class OptionType> void Get(OptionType* pvalue,int* pnumel, const char* name,OptionType default_value){ /*{{{*/
+ 
+-			vector<Object*>::iterator object;
+ 			GenericOption<OptionType>* genericoption=NULL;
+ 
+ 			/*Get option*/
+@@ -101,7 +97,6 @@
+ 
+ template <> inline void Options::Get(char** pvalue,const char* name,char* default_value){ /*{{{*/
+ 
+-	vector<Object*>::iterator object;
+ 	GenericOption<char*>* genericoption=NULL;
+ 
+ 	/*Get option*/
+Index: ../trunk-jpl/src/c/Container/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13762)
++++ ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13763)
+@@ -165,8 +165,6 @@
+ /*FUNCTION Elements::ToResults{{{*/
+ void Elements::ToResults(Results* results,Parameters* parameters){
+ 
+-	int i;
+-
+ 	int my_rank;
+ 	int num_procs;
+ 
+Index: ../trunk-jpl/src/c/Container/Observations.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Observations.cpp	(revision 13762)
++++ ../trunk-jpl/src/c/Container/Observations.cpp	(revision 13763)
+@@ -39,7 +39,7 @@
+ Observations::Observations(IssmPDouble* observations_list,IssmPDouble* x,IssmPDouble* y,int n,Options* options){
+ 
+ 	/*Intermediaries*/
+-	int          i,j,maxdepth,level,counter,index;
++	int          i,maxdepth,level,counter,index;
+ 	int          xi,yi;
+ 	IssmPDouble  xmin,xmax,ymin,ymax;
+ 	IssmPDouble  offset,minlength,minspacing,mintrimming,maxtrimming;
+Index: ../trunk-jpl/src/c/Container/DataSet.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/DataSet.cpp	(revision 13762)
++++ ../trunk-jpl/src/c/Container/DataSet.cpp	(revision 13763)
+@@ -189,7 +189,6 @@
+ 
+ 	int id_offset;
+ 	int offset;
+-	int i;
+ 
+ 	_assert_(this);
+ 	if(!sorted)_error_("trying to binary search on a non-sorted dataset!");
+@@ -214,8 +213,6 @@
+ 
+ 	/*vector of objects is already sorted, just allocate the sorted ids and their
+ 	 * offsets:*/
+-	int i;
+-
+ 	if(objects.size()){
+ 
+ 		/*Delete existing ids*/
+@@ -227,7 +224,7 @@
+ 		id_offsets=xNew<int>(objects.size());
+ 
+ 		/*Build id_offsets and sorted_ids*/
+-		for(i=0;i<objects.size();i++){
++		for(int i=0;i<objects.size();i++){
+ 			id_offsets[i]=i;
+ 			sorted_ids[i]=objects[i]->Id();
+ 		}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13763-13764.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13763-13764.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13763-13764.diff	(revision 13980)
@@ -0,0 +1,62 @@
+Index: ../trunk-jpl/src/c/solutions/controlconvergence.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/controlconvergence.cpp	(revision 13763)
++++ ../trunk-jpl/src/c/solutions/controlconvergence.cpp	(revision 13764)
+@@ -18,7 +18,6 @@
+ 
+ bool controlconvergence(IssmDouble J, IssmDouble tol_cm){
+ 
+-	int i;
+ 	bool converged=false;
+ 
+ 	/*Has convergence been reached?*/
+Index: ../trunk-jpl/src/c/solutions/thermal_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/thermal_core.cpp	(revision 13763)
++++ ../trunk-jpl/src/c/solutions/thermal_core.cpp	(revision 13764)
+@@ -15,7 +15,6 @@
+ void thermal_core(FemModel* femmodel){
+ 
+ 	/*intermediary*/
+-	IssmDouble melting_offset;
+ 	bool   save_results;
+ 	bool   dakota_analysis  = false;
+ 
+Index: ../trunk-jpl/src/c/solutions/objectivefunction.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/objectivefunction.cpp	(revision 13763)
++++ ../trunk-jpl/src/c/solutions/objectivefunction.cpp	(revision 13764)
+@@ -21,8 +21,6 @@
+ 
+ IssmDouble objectivefunction(IssmDouble search_scalar,OptArgs* optargs){
+ 
+-	int i;  
+-
+ 	/*output: */
+ 	IssmDouble J;
+ 
+Index: ../trunk-jpl/src/c/solutions/ResetBoundaryConditions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/ResetBoundaryConditions.cpp	(revision 13763)
++++ ../trunk-jpl/src/c/solutions/ResetBoundaryConditions.cpp	(revision 13764)
+@@ -12,7 +12,6 @@
+ 	/*variables: */
+ 	Vector<IssmDouble>*    yg    = NULL;
+ 	Nodes *nodes = NULL;
+-	int    i;
+ 
+ 	if(VerboseSolution()) _pprintLine_("   updating boundary conditions...");
+ 
+Index: ../trunk-jpl/src/c/solutions/kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13763)
++++ ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13764)
+@@ -155,7 +155,7 @@
+ 	Options *options  = NULL;
+ 	Option  *option   = NULL;
+ 
+-	int dummy,M,N;
++	int      M,N;
+ 	IoModel* iomodel = new IoModel();
+ 	iomodel->fid=fid;
+ 	iomodel->CheckEnumSync();
Index: /issm/oecreview/Archive/13393-13976/ISSM-13764-13765.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13764-13765.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13764-13765.diff	(revision 13980)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13764)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13765)
+@@ -40,8 +40,10 @@
+ 	this->SetStaticComm();
+ 	
+ 	/*Now, initialize PETSC: */
++	#ifdef _HAVE_PETSC_
+ 	PETSC_COMM_WORLD=this->comm;
+ 	ierr=PetscInitialize(&argc,&argv,(char*)0,"");  if(ierr) _error_("Could not initialize Petsc");
++	#endif
+ 
+ 	/*Start profiler: */
+ 	this->profiler=new Profiler();
+@@ -128,8 +130,10 @@
+ 	delete profiler;
+ 	
+ 	/*Finalize PETSC for this model: */
++	#ifdef _HAVE_PETSC_
+ 	_pprintLine_("closing Petsc");
+ 	PetscFinalize(); 
++	#endif
+ 
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13765-13766.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13765-13766.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13765-13766.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/configs/config-arm-linux.sh
+===================================================================
+--- ../trunk-jpl/configs/config-arm-linux.sh	(revision 13765)
++++ ../trunk-jpl/configs/config-arm-linux.sh	(revision 13766)
+@@ -5,7 +5,7 @@
+     --build="i386-apple-darwin10.8.0" \
+     --host="arm-linux-androideabi" \
+     --enable-shared \
+-    --with-android\
++    --with-android \
+     --without-fortran \
+ 	--without-wrappers \
+ 	--without-kriging \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13766-13767.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13766-13767.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13766-13767.diff	(revision 13980)
@@ -0,0 +1,187 @@
+Index: ../trunk-jpl/src/c/include/types.h
+===================================================================
+--- ../trunk-jpl/src/c/include/types.h	(revision 13766)
++++ ../trunk-jpl/src/c/include/types.h	(revision 13767)
+@@ -25,7 +25,7 @@
+ //#define MPIU_INT MPI_INT already defined in petsc
+ #endif  
+ 
+-#ifdef _HAVE_ADOLC_
++#if defined(_HAVE_ADOLC_) &&  !defined(_WRAPPERS_)
+ #include "adolc/adolc.h"
+ // for active variables
+ typedef adouble IssmDouble;
+Index: ../trunk-jpl/src/c/shared/Numerics/isnan.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/isnan.h	(revision 13766)
++++ ../trunk-jpl/src/c/shared/Numerics/isnan.h	(revision 13767)
+@@ -5,6 +5,13 @@
+ #ifndef _XISNAN_H_
+ #define _XISNAN_H_
+ 
++#ifdef HAVE_CONFIG_H
++   #include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++
+ #include <cmath>
+ 
+ template <class T> int xIsNan(const T& X) {
+@@ -15,7 +22,7 @@
+ #endif
+ }
+ 
+-#ifdef _HAVE_ADOLC_
++#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
+ template <> int xIsNan<adouble> (const adouble& X);
+ #endif
+ 
+Index: ../trunk-jpl/src/c/shared/Numerics/recast.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/recast.h	(revision 13766)
++++ ../trunk-jpl/src/c/shared/Numerics/recast.h	(revision 13767)
+@@ -8,8 +8,14 @@
+ #ifndef _RECAST_H_
+ #define _RECAST_H_
+ 
+-#ifndef _HAVE_ADOLC_
++#ifdef HAVE_CONFIG_H
++   #include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
+ 
++#if !defined(_HAVE_ADOLC_) || defined(_WRAPPERS_)
++
+ template<class To, class From>
+ To reCast(const From& from) {
+     return (To)from;
+Index: ../trunk-jpl/src/c/modules/Solverx/Solverx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/Solverx.h	(revision 13766)
++++ ../trunk-jpl/src/c/modules/Solverx/Solverx.h	(revision 13767)
+@@ -26,7 +26,7 @@
+ void SolverxSeq(IssmPDouble **pX, IssmPDouble *A, IssmPDouble *B,int n);
+ void SolverxSeq(IssmPDouble *X, IssmPDouble *A, IssmPDouble *B,int n);
+ 
+-#ifdef _HAVE_ADOLC_
++#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
+ void SolverxSeq(IssmDouble *X,IssmDouble *A,IssmDouble *B,int n, Parameters* parameters);
+ // call back functions:
+ ADOLC_ext_fct EDF_for_solverx;
+Index: ../trunk-jpl/src/c/classes/AdolcEdf.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdolcEdf.h	(revision 13766)
++++ ../trunk-jpl/src/c/classes/AdolcEdf.h	(revision 13767)
+@@ -8,8 +8,15 @@
+ #ifndef _ADOLC_EDF_H_
+ #define _ADOLC_EDF_H_
+ 
+-#ifdef _HAVE_ADOLC_
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
+ 
++
++#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
++
+ struct Adolc_edf {
+     ext_diff_fct *myEDF_for_solverx_p;
+     Adolc_edf() : myEDF_for_solverx_p(0) {}
+Index: ../trunk-jpl/src/c/classes/objects/Options/GenericOption.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Options/GenericOption.h	(revision 13766)
++++ ../trunk-jpl/src/c/classes/objects/Options/GenericOption.h	(revision 13767)
+@@ -90,7 +90,7 @@
+ 		void  Get(OptionType* pvalue){ *pvalue=value; };
+ };
+ 
+-#ifdef _HAVE_ADOLC_ //We hook off this specific specialization when not running ADOLC, otherwise we get a redeclaration with the next specialization. 
++#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)  //We hook off this specific specialization when not running ADOLC, otherwise we get a redeclaration with the next specialization. 
+ template <> inline void GenericOption<IssmPDouble*>::Get(IssmPDouble** pvalue){ /*{{{*/
+ 
+ 	/*Copy vector*/
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13766)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13767)
+@@ -16,7 +16,7 @@
+ 				./io/CheckNumPythonArguments.cpp\
+ 				./io/FetchPythonData.cpp
+ 
+-ALLCXXFLAGS= -fPIC -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_  $(CXXFLAGS) $(CXXOPTFLAGS) 
++ALLCXXFLAGS= -fPIC -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_  -D_WRAPPERS_ $(CXXFLAGS) $(CXXOPTFLAGS) 
+ libISSMPython_a_SOURCES = $(io_sources)
+ libISSMPython_a_CXXFLAGS= $(ALLCXXFLAGS)
+ if SHAREDLIBS
+@@ -64,7 +64,7 @@
+ AM_LDFLAGS += --no-warnings 
+ endif
+ 
+-AM_CXXFLAGS +=  -D_HAVE_PYTHON_MODULES_  -fPIC
++AM_CXXFLAGS +=  -D_HAVE_PYTHON_MODULES_   -fPIC
+ if PYTHON3
+ AM_CXXFLAGS +=  -DNPY_NO_DEPRECATED_API 
+ endif
+Index: ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToPetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToPetscMat.cpp	(revision 13766)
++++ ../trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToPetscMat.cpp	(revision 13767)
+@@ -10,9 +10,11 @@
+ #include "../../c/shared/shared.h"
+ 
+ /*Petsc includes: */
++#ifdef _HAVE_PETSC_
+ #include <petscmat.h>
+ #include <petscvec.h>
+ #include <petscksp.h>
++#endif
+ 
+ /*Matlab includes: */
+ #include "./matlabio.h"
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13766)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13767)
+@@ -23,11 +23,16 @@
+ 				./io/MatlabVectorToDoubleVector.cpp\
+ 				./io/MatlabMatrixToDoubleMatrix.cpp\
+ 				./io/MatlabMatrixToSeqMat.cpp\
+-				./io/MatlabVectorToSeqVec.cpp\
+-				./io/MatlabMatrixToPetscMat.cpp\
++				./io/MatlabVectorToSeqVec.cpp
++				
++if PETSC
++io_sources= += ./io/MatlabMatrixToPetscMat.cpp\
+ 				./io/MatlabVectorToPetscVec.cpp
++endif
+ 
+-ALLCXXFLAGS= -fPIC -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_  $(CXXFLAGS) $(CXXOPTFLAGS) 
++
++
++ALLCXXFLAGS= -fPIC -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_ -D_WRAPPERS_ $(CXXFLAGS) $(CXXOPTFLAGS) 
+ libISSMMatlab_a_SOURCES = $(io_sources)
+ libISSMMatlab_a_CXXFLAGS= $(ALLCXXFLAGS)
+ if SHAREDLIBS
+@@ -88,7 +93,7 @@
+ deps =  $(MATHLIB) ${MEXLIB}
+ 
+ #Triangle library
+-AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER
++AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER -D_WRAPPERS_
+ 
+ #Matlab part
+ AM_LDFLAGS = -module $(MEXLINK) -shrext ${EXEEXT}  -L/usr/lib
+@@ -104,7 +109,7 @@
+ AM_LDFLAGS += --no-warnings 
+ endif
+ 
+-AM_CXXFLAGS +=  -D_HAVE_MATLAB_MODULES_ -D_GNU_SOURCE -fPIC -fno-omit-frame-pointer -pthread 
++AM_CXXFLAGS +=  -D_HAVE_MATLAB_MODULES_  -D_GNU_SOURCE -fPIC -fno-omit-frame-pointer -pthread 
+ 
+ if SHAREDLIBS
+ deps +=
Index: /issm/oecreview/Archive/13393-13976/ISSM-13767-13768.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13767-13768.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13767-13768.diff	(revision 13980)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13767)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13768)
+@@ -26,12 +26,10 @@
+ 				./io/MatlabVectorToSeqVec.cpp
+ 				
+ if PETSC
+-io_sources= += ./io/MatlabMatrixToPetscMat.cpp\
++io_sources += ./io/MatlabMatrixToPetscMat.cpp\
+ 				./io/MatlabVectorToPetscVec.cpp
+ endif
+ 
+-
+-
+ ALLCXXFLAGS= -fPIC -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_ -D_WRAPPERS_ $(CXXFLAGS) $(CXXOPTFLAGS) 
+ libISSMMatlab_a_SOURCES = $(io_sources)
+ libISSMMatlab_a_CXXFLAGS= $(ALLCXXFLAGS)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13768-13769.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13768-13769.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13768-13769.diff	(revision 13980)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/c/shared/Numerics/isnan.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/isnan.h	(revision 13768)
++++ ../trunk-jpl/src/c/shared/Numerics/isnan.h	(revision 13769)
+@@ -11,7 +11,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ #include <cmath>
+ 
+ template <class T> int xIsNan(const T& X) {
+Index: ../trunk-jpl/src/c/classes/AdolcEdf.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/AdolcEdf.h	(revision 13768)
++++ ../trunk-jpl/src/c/classes/AdolcEdf.h	(revision 13769)
+@@ -14,7 +14,6 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-
+ #if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
+ 
+ struct Adolc_edf {
Index: /issm/oecreview/Archive/13393-13976/ISSM-13769-13770.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13769-13770.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13769-13770.diff	(revision 13980)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 13769)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 13770)
+@@ -235,12 +235,12 @@
+ 		HAVE_PYTHON="yes"
+ 		AC_DEFINE([_HAVE_PYTHON_],[1],[with Python in ISSM src])
+ 	else
+-	 HAVE_PYTHON=no
++		HAVE_PYTHON=no
+ 	fi
+ 	AC_MSG_RESULT($HAVE_PYTHON)
+ 
+ 	dnl get python version
+-	if test "$HAVE_PYTHON" = "yes"; then
++	if test x$HAVE_PYTHON = xyes; then
+ 		AC_MSG_CHECKING(for python version)
+ 		dnl Query Python for its version number.  Getting [:3] seems to be
+ 		dnl the best way to do this; it's what "site.py" does in the standard
+@@ -253,11 +253,13 @@
+ 		if test x$PYTHON_MAJOR = x3; then
+ 			dnl are we running python 3?
+ 			HAVE_PYTHON3="yes"
++		else
++			HAVE_PYTHON3="no"
+ 		fi
+ 		AC_DEFINE_UNQUOTED([_PYTHON_MAJOR_],$PYTHON_MAJOR,[python version major])
+ 
+ 		PYTHONINCL=-I$PYTHON_ROOT/include
+-		PYTHONLIB="-L$PYTHON_ROOT/lib -lpython$PYTHONVERSION"
++		PYTHONLIB="-L$PYTHON_ROOT/lib -lpython$PYTHON_VERSION"
+ 		PYTHONEXT=.so
+ 
+ 		case "${host_os}" in
Index: /issm/oecreview/Archive/13393-13976/ISSM-13770-13771.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13770-13771.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13770-13771.diff	(revision 13980)
@@ -0,0 +1,76 @@
+Index: ../trunk-jpl/src/m/plot/plot_manager.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_manager.py	(revision 13770)
++++ ../trunk-jpl/src/m/plot/plot_manager.py	(revision 13771)
+@@ -1,5 +1,10 @@
++
++try:
++	import pylab as p
++except ImportError:
++	print "could not import pylab, matplotlib has not been installed, no plotting capabilities enabled"
++
+ from pairoptions import *
+-import pylab as p
+ from checkplotoptions import checkplotoptions
+ from plot_mesh import plot_mesh
+ from processmesh import processmesh
+Index: ../trunk-jpl/src/m/plot/plot_mesh.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_mesh.py	(revision 13770)
++++ ../trunk-jpl/src/m/plot/plot_mesh.py	(revision 13771)
+@@ -1,4 +1,9 @@
+-import pylab as p
++
++try:
++	import pylab as p
++except ImportError:
++	print "could not import pylab, matplotlib has not been installed, no plotting capabilities enabled"
++
+ from processmesh import processmesh
+ from applyoptions import applyoptions
+ 
+Index: ../trunk-jpl/src/m/plot/plotmodel.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plotmodel.py	(revision 13770)
++++ ../trunk-jpl/src/m/plot/plotmodel.py	(revision 13771)
+@@ -1,4 +1,9 @@
+-import pylab as p
++
++try:
++	import pylab as p
++except ImportError:
++	print "could not import pylab, matplotlib has not been installed, no plotting capabilities enabled"
++
+ #from pairoptions import *
+ from plotoptions import plotoptions
+ from plot_manager import plot_manager
+Index: ../trunk-jpl/src/m/plot/applyoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.py	(revision 13770)
++++ ../trunk-jpl/src/m/plot/applyoptions.py	(revision 13771)
+@@ -1,5 +1,9 @@
+-import pylab as p
+ 
++try:
++	import pylab as p
++except ImportError:
++	print "could not import pylab, matplotlib has not been installed, no plotting capabilities enabled"
++
+ def applyoptions(md,data,options):
+ 	'''
+ 	APPLYOPTIONS - apply options to current plot
+Index: ../trunk-jpl/src/m/plot/plot_unit.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_unit.py	(revision 13770)
++++ ../trunk-jpl/src/m/plot/plot_unit.py	(revision 13771)
+@@ -1,5 +1,9 @@
+-import pylab as p
+ 
++try:
++	import pylab as p
++except ImportError:
++	print "could not import pylab, matplotlib has not been installed, no plotting capabilities enabled"
++
+ def plot_unit(x,y,z,elements,data,is2d,isplanet,datatype,options):
+ 	"""
+ 	PLOT_UNIT - unit plot, display data
Index: /issm/oecreview/Archive/13393-13976/ISSM-13771-13772.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13771-13772.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13771-13772.diff	(revision 13980)
@@ -0,0 +1,74 @@
+Index: ../trunk-jpl/src/android/helloworld/code/fac.h
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/code/fac.h	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/code/fac.h	(revision 13772)
+@@ -0,0 +1,5 @@
++class fac
++{
++	public:
++	long factorial(long n);
++};
+Index: ../trunk-jpl/src/android/helloworld/code/com_lan_factorial_FacLib.h
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/code/com_lan_factorial_FacLib.h	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/code/com_lan_factorial_FacLib.h	(revision 13772)
+@@ -0,0 +1,21 @@
++/* DO NOT EDIT THIS FILE - it is machine generated */
++#include <jni.h>
++/* Header for class com_lan_factorial_FacLib */
++
++#ifndef _Included_com_lan_factorial_FacLib
++#define _Included_com_lan_factorial_FacLib
++#ifdef __cplusplus
++extern "C" {
++#endif
++/*
++ * Class:     com_lan_factorial_FacLib
++ * Method:    fac
++ * Signature: (J)J
++ */
++JNIEXPORT jlong JNICALL Java_com_lan_factorial_FacLib_fac
++  (JNIEnv *, jclass, jlong);
++
++#ifdef __cplusplus
++}
++#endif
++#endif
+Index: ../trunk-jpl/src/android/helloworld/code/Main.cpp
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/code/Main.cpp	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/code/Main.cpp	(revision 13772)
+@@ -0,0 +1,14 @@
++
++#include "com_lan_factorial_FacLib.h"
++#include "fac.h"
++
++//extern long fac(long n);
++
++JNIEXPORT jlong JNICALL Java_com_lan_factorial_FacLib_fac(JNIEnv *env, jclass clazz, jlong n)
++{
++
++	fac *f = new fac();
++	jlong result = (jlong) (f->factorial(n));
++	delete(f);
++	return result ;
++}
+Index: ../trunk-jpl/src/android/helloworld/code/fac.cpp
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/code/fac.cpp	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/code/fac.cpp	(revision 13772)
+@@ -0,0 +1,14 @@
++#include "com_lan_factorial_FacLib.h"
++#include "fac.h"
++
++long fac::factorial(long n)
++{
++	long f = 1;
++	long i;
++	for(i = 1; i <= n; i++)
++	{
++		 f *= i;
++	}
++	return f;
++}
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13772-13773.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13772-13773.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13772-13773.diff	(revision 13980)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/externalpackages/gmp/install-linux64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gmp/install-linux64.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/gmp/install-linux64.sh	(revision 13773)
+@@ -0,0 +1,29 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf src install gmp-5.0.5 
++mkdir install src
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/gmp-5.0.5.tar.bz2' 'gmp-5.0.5.tar.bz2'
++
++#Untar 
++bunzip2 gmp-5.0.5.tar.bz2
++tar -xvf  gmp-5.0.5.tar
++
++#Move gmp into install directory
++mv gmp-5.0.5/* src
++rm -rf gmp-5.0.5
++
++#install
++cd src 
++./configure --prefix="$ISSM_DIR/externalpackages/gmp/install" 
++
++#Compile and install gmp
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/gmp/install-linux64.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13773-13774.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13773-13774.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13773-13774.diff	(revision 13980)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/externalpackages/hdf5/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/hdf5/install.sh	(revision 13773)
++++ ../trunk-jpl/externalpackages/hdf5/install.sh	(revision 13774)
+@@ -21,7 +21,8 @@
+ ./configure  --prefix="$ISSM_DIR/externalpackages/hdf5/install" 
+ if [ $# -eq 0 ]; then
+ 	make
++	make install
+ else
+ 	make -j $1
++	make -j $1 install
+ fi
+-make install
Index: /issm/oecreview/Archive/13393-13976/ISSM-13774-13775.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13774-13775.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13774-13775.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/externalpackages/gmp
+===================================================================
+--- ../trunk-jpl/externalpackages/gmp	(revision 13774)
++++ ../trunk-jpl/externalpackages/gmp	(revision 13775)
+
+Property changes on: ../trunk-jpl/externalpackages/gmp
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,4 ##
++install
++src
++*.bz2
++*.tar
Index: /issm/oecreview/Archive/13393-13976/ISSM-13775-13776.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13775-13776.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13775-13776.diff	(revision 13980)
@@ -0,0 +1,8 @@
+Index: ../trunk-jpl/src/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/Makefile.am	(revision 13775)
++++ ../trunk-jpl/src/Makefile.am	(revision 13776)
+@@ -1,2 +1,2 @@
+-EXTRA_DIST =  perl pro py
++EXTRA_DIST =  perl pro
+ SUBDIRS = c m wrappers 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13776-13777.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13776-13777.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13776-13777.diff	(revision 13980)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/configs/config-linux64-murdo.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 13776)
++++ ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 13777)
+@@ -11,6 +11,10 @@
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+ 	--with-mpi-lib="-L$ISSM_DIR/externalpackages/mpich2/install/lib/ -lmpich" \
+ 	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
++	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
++	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/lib/python2.7/site-packages/numpy/core/include/numpy\
++	--with-python-version=2.7\
++	--with-tao-dir=$ISSM_DIR/externalpackages/tao/install \
+ 	--with-plapack-lib="-L$ISSM_DIR/externalpackages/petsc/install/ -lPLAPACK" \
+ 	--with-plapack-include="-I$ISSM_DIR/externalpackages/petsc/install/externalpackages/PLAPACKR32-hg/INCLUDE" \
+ 	--with-petsc-arch=$ISSM_ARCH \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13777-13778.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13777-13778.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13777-13778.diff	(revision 13980)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/configs/config-linux64-murdo.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 13777)
++++ ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 13778)
+@@ -15,17 +15,14 @@
+ 	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/lib/python2.7/site-packages/numpy/core/include/numpy\
+ 	--with-python-version=2.7\
+ 	--with-tao-dir=$ISSM_DIR/externalpackages/tao/install \
+-	--with-plapack-lib="-L$ISSM_DIR/externalpackages/petsc/install/ -lPLAPACK" \
+-	--with-plapack-include="-I$ISSM_DIR/externalpackages/petsc/install/externalpackages/PLAPACKR32-hg/INCLUDE" \
+ 	--with-petsc-arch=$ISSM_ARCH \
++	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+ 	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+-	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
++	--with-scotch-dir="$ISSM_DIR/externalpackages/scotch/install" \
+ 	--with-graphics-lib=/usr/lib64/libX11.so \
+ 	--with-cxxoptflags="-mtune=barcelona -ffast-math -O3 -msse4.2 -Wno-write-strings "\
+ 	--with-numthreads=18 \
+-	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+-	--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+-	--enable-debugging \
+-	--with-scotch-dir="$ISSM_DIR/externalpackages/scotch/install" 
++	--enable-debugging 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13778-13779.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13778-13779.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13778-13779.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/configs/config-linux64-murdo.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 13778)
++++ ../trunk-jpl/configs/config-linux64-murdo.sh	(revision 13779)
+@@ -13,7 +13,6 @@
+ 	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+ 	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
+ 	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/lib/python2.7/site-packages/numpy/core/include/numpy\
+-	--with-python-version=2.7\
+ 	--with-tao-dir=$ISSM_DIR/externalpackages/tao/install \
+ 	--with-petsc-arch=$ISSM_ARCH \
+ 	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13779-13780.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13779-13780.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13779-13780.diff	(revision 13980)
@@ -0,0 +1,209 @@
+Index: ../trunk-jpl/src/c/Container/Options.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Options.h	(revision 13779)
++++ ../trunk-jpl/src/c/Container/Options.h	(revision 13780)
+@@ -24,10 +24,8 @@
+ 
+ 		template <class OptionType> void Get(OptionType* pvalue,const char* name){ /*{{{*/
+ 
+-			GenericOption<OptionType>* genericoption=NULL;
+-
+ 			/*Get option*/
+-			genericoption=(GenericOption<OptionType>*)GetOption(name);
++			GenericOption<OptionType>* genericoption=(GenericOption<OptionType>*)GetOption(name);
+ 
+ 			/*If the pointer is not NULL, the option has been found*/
+ 			if(genericoption){
+@@ -41,10 +39,8 @@
+ 		/*}}}*/
+ 		template <class OptionType> void Get(OptionType* pvalue,int* pnumel, const char* name){ /*{{{*/
+ 
+-			GenericOption<OptionType>* genericoption=NULL;
+-
+ 			/*Get option*/
+-			genericoption=(GenericOption<OptionType>*)GetOption(name);
++			GenericOption<OptionType>* genericoption=(GenericOption<OptionType>*)GetOption(name);
+ 
+ 			/*If the pointer is not NULL, the option has been found*/
+ 			if(genericoption){
+@@ -59,10 +55,8 @@
+ 		/*}}}*/
+ 		template <class OptionType> void Get(OptionType* pvalue,const char* name,OptionType default_value){ /*{{{*/
+ 
+-			GenericOption<OptionType>* genericoption=NULL;
+-
+ 			/*Get option*/
+-			genericoption=(GenericOption<OptionType>*)GetOption(name);
++			GenericOption<OptionType>* genericoption=(GenericOption<OptionType>*)GetOption(name);
+ 
+ 			/*If the pointer is not NULL, the option has been found*/
+ 			if(genericoption){
+@@ -75,10 +69,8 @@
+ 		/*}}}*/
+ 		template <class OptionType> void Get(OptionType* pvalue,int* pnumel, const char* name,OptionType default_value){ /*{{{*/
+ 
+-			GenericOption<OptionType>* genericoption=NULL;
+-
+ 			/*Get option*/
+-			genericoption=(GenericOption<OptionType>*)GetOption(name);
++			GenericOption<OptionType>* genericoption=(GenericOption<OptionType>*)GetOption(name);
+ 
+ 			/*If the pointer is not NULL, the option has been found*/
+ 			if(genericoption){
+@@ -97,10 +89,8 @@
+ 
+ template <> inline void Options::Get(char** pvalue,const char* name,char* default_value){ /*{{{*/
+ 
+-	GenericOption<char*>* genericoption=NULL;
+-
+ 	/*Get option*/
+-	genericoption=(GenericOption<char*>*)GetOption(name);
++	GenericOption<char*>* genericoption=(GenericOption<char*>*)GetOption(name);
+ 
+ 	/*If the pointer is not NULL, the option has been found*/
+ 	if(genericoption){
+Index: ../trunk-jpl/src/c/Container/Loads.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Loads.cpp	(revision 13779)
++++ ../trunk-jpl/src/c/Container/Loads.cpp	(revision 13780)
+@@ -55,8 +55,8 @@
+ /*FUNCTION Loads::NumberOfLoads{{{*/
+ int Loads::NumberOfLoads(void){
+ 
+-	int localloads=0;
+-	int numberofloads=0;
++	int localloads;
++	int numberofloads;
+ 
+ 	/*Get number of local loads*/
+ 	localloads=this->Size();
+Index: ../trunk-jpl/src/c/Container/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13779)
++++ ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13780)
+@@ -296,7 +296,7 @@
+ /*FUNCTION Elements::NumberOfElements{{{*/
+ int Elements::NumberOfElements(void){
+ 
+-	int local_nelem=0;
++	int local_nelem;
+ 	int numberofelements;
+ 
+ 	local_nelem=this->Size();
+Index: ../trunk-jpl/src/c/Container/Observations.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Observations.cpp	(revision 13779)
++++ ../trunk-jpl/src/c/Container/Observations.cpp	(revision 13780)
+@@ -120,7 +120,6 @@
+ void Observations::ClosestObservation(IssmPDouble *px,IssmPDouble *py,IssmPDouble *pobs,IssmPDouble x_interp,IssmPDouble y_interp,IssmPDouble radius){
+ 
+ 	/*Output and Intermediaries*/
+-	bool         stop;
+ 	int          nobs,i,index;
+ 	IssmPDouble  h2,hmin2,radius2;
+ 	int         *indices      = NULL;
+Index: ../trunk-jpl/src/c/include/types.h
+===================================================================
+--- ../trunk-jpl/src/c/include/types.h	(revision 13779)
++++ ../trunk-jpl/src/c/include/types.h	(revision 13780)
+@@ -40,7 +40,7 @@
+ 
+ /*Define communicator: */
+ #ifdef _HAVE_MPI_
+-#include "mpi.h"
++#include <mpi.h>
+ typedef MPI_Comm COMM;
+ #else
+ typedef int COMM;
+Index: ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.h	(revision 13779)
++++ ../trunk-jpl/src/c/modules/TriMeshx/TriMeshx.h	(revision 13780)
+@@ -5,7 +5,7 @@
+ #ifndef _TRIMESHX_H_
+ #define _TRIMESHX_H_
+ 
+-#include "string.h"
++#include <string.h>
+ #include "../../Container/Container.h"
+ #include "../../classes/objects/objects.h"
+ 
+Index: ../trunk-jpl/src/c/toolkits/mpi/mpiincludes.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/mpi/mpiincludes.h	(revision 13779)
++++ ../trunk-jpl/src/c/toolkits/mpi/mpiincludes.h	(revision 13780)
+@@ -6,7 +6,7 @@
+ #define _MPI_INCLUDES_H_
+ 
+ /*MPI includes: */
+-#include "mpi.h"
++#include <mpi.h>
+ 
+ /*Patches: */
+ #include "./patches/mpipatches.h"
+Index: ../trunk-jpl/src/c/toolkits/issm/SeqVec.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/SeqVec.h	(revision 13779)
++++ ../trunk-jpl/src/c/toolkits/issm/SeqVec.h	(revision 13780)
+@@ -59,8 +59,6 @@
+ 		/*FUNCTION SeqVec(doubletype* serial_vec,int M){{{*/
+ 		SeqVec(doubletype* buffer,int pM){
+ 
+-			int i,j;
+-
+ 			this->M=pM;
+ 			this->vector=NULL;
+ 			if(this->M){
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13779)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h	(revision 13780)
+@@ -5,10 +5,10 @@
+ #ifndef _PETSC_PATCHES_H_
+ #define _PETSC_PATCHES_H_
+ 
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
+-#include "petscsys.h"
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
++#include <petscsys.h>
+ 
+ #include "./SolverEnum.h"
+ #include "../../toolkitsenums.h"
+Index: ../trunk-jpl/src/c/classes/objects/Options/GenericOption.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Options/GenericOption.h	(revision 13779)
++++ ../trunk-jpl/src/c/classes/objects/Options/GenericOption.h	(revision 13780)
+@@ -112,11 +112,8 @@
+ } /*}}}*/
+ template <> inline void GenericOption<char*>::Get(char** pvalue){ /*{{{*/
+ 
+-	char* outstring=NULL;
+-	int   stringsize;
+-
+-	stringsize=strlen(this->value)+1;
+-	outstring=xNew<char>(stringsize);
++	int   stringsize=strlen(this->value)+1;
++	char* outstring=xNew<char>(stringsize);
+ 	xMemCpy<char>(outstring,this->value,stringsize);
+ 
+ 	*pvalue=outstring;
+Index: ../trunk-jpl/src/c/classes/matrix/Matrix.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/Matrix.h	(revision 13779)
++++ ../trunk-jpl/src/c/classes/matrix/Matrix.h	(revision 13780)
+@@ -273,10 +273,8 @@
+ 		/*FUNCTION Duplicate{{{*/
+ 		Matrix* Duplicate(void){
+ 
+-			Matrix* output=NULL;
++			Matrix* output=new Matrix();
+ 
+-			output=new Matrix();
+-
+ 			if(type==PetscMatType){
+ 				#ifdef _HAVE_PETSC_
+ 				output->pmatrix=this->pmatrix->Duplicate();
Index: /issm/oecreview/Archive/13393-13976/ISSM-13780-13781.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13780-13781.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13780-13781.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13780)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13781)
+@@ -895,7 +895,7 @@
+ 			/*Copy onto our dakota responses: */
+ 			if(my_rank==0){
+ 				/*plug response: */
+-				for(i=0;i<npart;i++)responses_pointer[i]=qmu_response[i];
++				for(j=0;j<npart;j++)responses_pointer[j]=qmu_response[j];
+ 
+ 				/*increment response_pointer :*/
+ 				responses_pointer+=npart;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13781-13782.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13781-13782.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13781-13782.diff	(revision 13980)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/c/shared/Numerics/isnan.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/isnan.h	(revision 13781)
++++ ../trunk-jpl/src/c/shared/Numerics/isnan.h	(revision 13782)
+@@ -11,7 +11,8 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-#include <cmath>
++/*If include cmath instead of math, isnan on linux64 murdo does not work: */
++#include <math.h>
+ 
+ template <class T> int xIsNan(const T& X) {
+ #ifdef _INTEL_WIN_
+@@ -22,7 +23,9 @@
+ }
+ 
+ #if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
+-template <> int xIsNan<adouble> (const adouble& X);
++template <> int xIsNan<adouble> (const adouble& X) {
++  return isnan(X.getValue());
++}
+ #endif
+ 
+ #endif
Index: /issm/oecreview/Archive/13393-13976/ISSM-13782-13783.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13782-13783.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13782-13783.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13782)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13783)
+@@ -191,7 +191,6 @@
+ 					./shared/Numerics/GaussPoints.cpp\
+ 					./shared/Numerics/cross.cpp\
+ 					./shared/Numerics/isnan.h\
+-					./shared/Numerics/isnan.cpp\
+ 					./shared/Numerics/cubic.cpp\
+ 					./shared/Numerics/extrema.cpp\
+ 					./shared/Numerics/XZvectorsToCoordinateSystem.cpp\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13783-13784.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13783-13784.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13783-13784.diff	(revision 13980)
@@ -0,0 +1,422 @@
+Index: ../trunk-jpl/src/c/toolkits/plapack/patches/CyclicalFactorization.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/patches/CyclicalFactorization.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/plapack/patches/CyclicalFactorization.cpp	(revision 13784)
+@@ -38,11 +38,10 @@
+ 
+ int PrimeDecomp(int** pdecomp,int* pdecomp_size,int input){
+ 
+-	int* decomp=NULL;
+ 	int prime_factor;
+ 	int i;
+ 
+-	decomp=xNew<int>(input);
++	int* decomp=xNew<int>(input);
+ 	*decomp=input;
+ 	for (i=0;i<input;i++){
+ 		SmallestPrimeFactor(&prime_factor,*(decomp+i));
+Index: ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp	(revision 13784)
+@@ -23,7 +23,7 @@
+ 	/*input*/
+ 	int mA,nA;
+ 	int local_mA,local_nA;
+-	int lower_row,upper_row,range;
++	int lower_row,upper_row;
+ 	MatType type;
+ 
+ 	/*Plapack: */
+@@ -35,7 +35,6 @@
+ 	int ierror;
+ 	int nb,nb_alg;
+ 	int nprows,npcols;
+-	int initialized=0;
+ 
+ 	/*Petsc to Plapack: */
+ 	double    *arrayA=NULL;
+@@ -95,7 +94,6 @@
+ 	any matrix type.*/
+ 	MatGetOwnershipRange(*A,&lower_row,&upper_row);
+ 	upper_row--; 
+-	range=upper_row-lower_row+1;
+ 	arrayA = xNew<double>(nA);
+ 	idxnA  = xNew<int>(nA);
+ 	for (i=0;i<nA;i++){
+Index: ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp	(revision 13784)
+@@ -9,7 +9,7 @@
+ 
+ 	int i;
+ 
+-	int lower_row,upper_row,range;
++	int lower_row,upper_row;
+ 	int* row_nodes=NULL;
+ 	int* col_nodes=NULL;
+ 	int* idxm=NULL;
+@@ -33,7 +33,6 @@
+ 
+ 	MatGetOwnershipRange(*A,&lower_row,&upper_row);
+ 	upper_row--;
+-	range=upper_row-lower_row+1;
+ 
+ 	/*Build the Plapack row and column indices corresponding to the local_buffer stored in a. 
+ 	  We need those indices to directly plug local_buffer into the Petsc matrix A. We do not 
+Index: ../trunk-jpl/src/c/toolkits/plapack/plapackincludes.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/plapack/plapackincludes.h	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/plapack/plapackincludes.h	(revision 13784)
+@@ -11,14 +11,14 @@
+ #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+ #endif
+ 
+-#include "PLA.h"
++#include <PLA.h>
+ 
+ /* missing Plapack prototypes: */
+ int PLA_General_invert( int method, PLA_Obj A );
+ 
+ /*our own patches: */
+ #ifdef _HAVE_PETSC_
+-#include "patches/petscpatches.h"
++#include "./patches/petscpatches.h"
+ #endif
+ 
+ #endif
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/KSPFree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/KSPFree.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/KSPFree.cpp	(revision 13784)
+@@ -9,9 +9,9 @@
+ #endif
+ 
+ /*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
+ 
+ void KSPFree(KSP* pksp){
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp	(revision 13784)
+@@ -9,9 +9,9 @@
+ #endif
+ 
+ /*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
+ 
+ #include "../../../shared/shared.h"
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecFree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecFree.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecFree.cpp	(revision 13784)
+@@ -9,9 +9,9 @@
+ #endif
+ 
+ /*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
+ 
+ void VecFree(Vec* pvec){
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp	(revision 13784)
+@@ -9,9 +9,9 @@
+ #endif
+ 
+ /*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
+ 
+ #include "./petscpatches.h"
+ 
+@@ -28,7 +28,6 @@
+ 	#endif
+ 	char* first=NULL;
+ 	char* second=NULL;
+-	char* final=NULL;
+ 	size_t len;
+ 	int first_token=1;
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/PetscVectorToDoubleVector.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/PetscVectorToDoubleVector.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/PetscVectorToDoubleVector.cpp	(revision 13784)
+@@ -10,26 +10,24 @@
+ #include <string>
+ 
+ /*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
+ 
+ #include "../../../shared/shared.h"
+ 
+ void PetscVectorToDoubleVector(double** pvector, int* prows, Vec petsc_vector){
+ 
+-	int     i;
+ 	int     rows;
+-	int    *idxm   = NULL;
+ 	double *vector = NULL;
+ 
+ 	/*Get size of vector: */
+ 	if(petsc_vector){
+ 		VecGetSize(petsc_vector,&rows);
+ 		if(rows){
+-			idxm=xNew<int>(rows);
++			int* idxm=xNew<int>(rows);
+ 			vector=xNew<double>(rows);
+-			for(i=0;i<rows;i++)idxm[i]=i;
++			for(int i=0;i<rows;i++)idxm[i]=i;
+ 			VecGetValues(petsc_vector,rows,idxm,vector);
+ 			xDelete<int>(idxm);
+ 		}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/MatFree.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/MatFree.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/MatFree.cpp	(revision 13784)
+@@ -9,9 +9,9 @@
+ #endif
+ 
+ /*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscmat.h"
+-#include "petscksp.h"
++#include <petscmat.h>
++#include <petscmat.h>
++#include <petscksp.h>
+ 
+ void MatFree(Mat* pmat){
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp	(revision 13784)
+@@ -11,9 +11,9 @@
+ #include <string>
+ 
+ /*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
+ 
+ /*Petsc includes: */
+ #include "../../../shared/shared.h"
+@@ -21,19 +21,15 @@
+ void PetscMatrixToDoubleMatrix(double** pmatrix, int* prows, int* pcols,Mat petsc_matrix){
+ 
+ 	/*output: */
++	int     i;
+ 	double* matrix=NULL;
+ 	int     rows,cols;
+ 
+-	/*intermediary: */
+-	int     i;
+-	int*    idxm=NULL;
+-	int*    idxn=NULL;
+-
+ 	/*Some needed information: */
+ 	MatGetSize(petsc_matrix,&rows,&cols);
+ 
+-	idxm=xNew<int>(rows);
+-	idxn=xNew<int>(cols);
++	int* idxm=xNew<int>(rows);
++	int* idxn=xNew<int>(cols);
+ 
+ 	for(i=0;i<rows;i++)idxm[i]=i;
+ 	for(i=0;i<cols;i++)idxn[i]=i;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecDuplicatePatch.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecDuplicatePatch.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecDuplicatePatch.cpp	(revision 13784)
+@@ -9,9 +9,9 @@
+ #endif
+ 
+ /*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
+ 
+ void VecDuplicatePatch(Vec* output, Vec input){
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13784)
+@@ -9,9 +9,9 @@
+ #endif
+ 
+ /*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
+ 
+ #include "./petscpatches.h"
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp	(revision 13784)
+@@ -25,18 +25,14 @@
+ 	/*output: */
+ 	int lower_row,upper_row;
+ 
+-	/*intermediary :*/
+-	int i;
+-	int* allranges=NULL;
+-
+ 	/*Gather all range values into allranges, for all nodes*/
+-	allranges=xNew<int>(num_procs);
++	int* allranges=xNew<int>(num_procs);
+ 	MPI_Allgather(&range,1,MPI_INT,allranges,1,MPI_INT,comm);
+ 
+ 	/*From all ranges, get lower row and upper row*/
+ 	lower_row=0;
+ 	upper_row=lower_row+allranges[0];
+-	for (i=1;i<=my_rank;i++){
++	for(int i=1;i<=my_rank;i++){
+ 		lower_row=lower_row+allranges[i-1];
+ 		upper_row=upper_row+allranges[i];
+ 	}
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp	(revision 13784)
+@@ -9,9 +9,9 @@
+ #endif
+ 
+ /*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
+ 
+ #include "./petscpatches.h"
+ 
+@@ -20,8 +20,6 @@
+ 
+ void VecMerge(Vec A, Vec B, double* row_partition_vector,int row_partition_size){
+ 
+-	int i;
+-
+ 	/*Petsc matrix*/
+ 	int lower_row,upper_row,range;
+ 	int* idxm=NULL;
+@@ -33,7 +31,7 @@
+ 	VecGetSize(B,&MB);
+ 
+ 	/*If the dimension of the partitioning vector is not the same as that of vector B, we have a problem: */
+-	if ( (row_partition_size !=MB) ){
++	if ((row_partition_size !=MB) ){
+ 		_error_("Dimensions of partitioning vector incompatible with dimensions of input vector\n");
+ 	}
+ 
+@@ -46,13 +44,13 @@
+ 		/*This node owns rows of vector B, get them*/
+ 		idxm=xNew<int>(range);
+ 		values=xNew<double>(range);
+-		for (i=0;i<range;i++){
+-			*(idxm+i)=lower_row+i;
++		for(int i=0;i<range;i++){
++			idxm[i]=lower_row+i;
+ 		}
+ 		VecGetValues(B,range,idxm,values);
+ 		/*Now, modify idxm using the partition vector, and plug values into A*/
+-		for (i=0;i<range;i++){
+-			*(idxm+i)=(int)*(row_partition_vector+lower_row+i)-1; //-1 because partition vector comes from Matlab, where indices start at 1.
++		for(int i=0;i<range;i++){
++			idxm[i]=int(row_partition_vector[lower_row+i])-1; //-1 because partition vector comes from Matlab, where indices start at 1.
+ 		}
+ 		VecSetValues(A,range,idxm,values,INSERT_VALUES);
+ 	}
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13784)
+@@ -132,9 +132,7 @@
+ /*FUNCTION PetscMat::Duplicate{{{*/
+ PetscMat* PetscMat::Duplicate(void){
+ 
+-	PetscMat* output=NULL;
+-
+-	output=new PetscMat();
++	PetscMat* output=new PetscMat();
+ 	_assert_(this->matrix);
+ 	MatDuplicate(this->matrix,MAT_COPY_VALUES,&output->matrix);
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp	(revision 13784)
+@@ -128,11 +128,10 @@
+ /*FUNCTION PetscVec::Duplicate{{{*/
+ PetscVec* PetscVec::Duplicate(void){
+ 
+-	PetscVec* output=NULL;
+ 	_assert_(this->vector);
+ 	Vec vec_output=NULL;
+ 	VecDuplicate(this->vector,&vec_output);
+-	output=new PetscVec(vec_output);
++	PetscVec* output=new PetscVec(vec_output);
+ 	VecFree(&vec_output);
+ 
+ 	return output;
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13783)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13784)
+@@ -332,7 +332,6 @@
+ 		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentMemEnum, solution_memory, 1, 0));
+ 		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentFlopsEnum, solution_flops, 1, 0));
+ 	}
+-
+ }
+ /*}}}*/
+ 
+@@ -856,7 +855,7 @@
+ void FemModel::DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){/*{{{*/
+ 
+ 
+-	int        i,j,k;
++	int        i,j;
+ 	int        my_rank;
+ 	bool       process_units = true;
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13784-13785.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13784-13785.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13784-13785.diff	(revision 13980)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/c/shared/Numerics/isnan.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/isnan.cpp	(revision 13784)
++++ ../trunk-jpl/src/c/shared/Numerics/isnan.cpp	(revision 13785)
+@@ -1,10 +0,0 @@
+-/*This routine only used by Intel compler: */
+-
+-#include "../../include/include.h"
+-#include "isnan.h"
+-
+-#ifdef _HAVE_ADOLC_
+-template <> int xIsNan<adouble> (const adouble& X) {
+-  return isnan(X.getValue());
+-}
+-#endif
Index: /issm/oecreview/Archive/13393-13976/ISSM-13785-13786.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13785-13786.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13785-13786.diff	(revision 13980)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/configs/config-macosx64-chris-bothapis.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-chris-bothapis.sh	(revision 13785)
++++ ../trunk-jpl/configs/config-macosx64-chris-bothapis.sh	(revision 13786)
+@@ -7,16 +7,15 @@
+ 
+ ./configure \
+ 	--prefix=$ISSM_DIR \
++	--with-matlab-dir=$MATLAB_DIR \
++	--with-python-dir=$ISSM_DIR/externalpackages/python/install \
++	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy\
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+-	--with-matlab-dir=$MATLAB_DIR \
+-	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
+-	--with-python-version=$pythonversion \
+-	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy\
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+ 	--with-mpi-lib=" $ISSM_DIR/externalpackages/mpich2/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpl.a " \
+ 	--with-chaco-dir=$ISSM_DIR/externalpackages/chaco/install \
+-	--with-fortran-lib="/usr/local/gfortran/lib/gcc/x86_64-apple-darwin10/4.6.2/libgfortran.a" \
++	--with-fortran-lib="/usr/local/gfortran/lib/libgfortran.a" \
+ 	--with-math-lib="/usr/lib/libm.dylib" \
+ 	--with-graphics-lib="/usr/X11/lib/libX11.dylib" \
+ 	--with-cxxoptflags=" -fno-common -no-cpp-precomp -fexceptions -arch x86_64 -mmacosx-version-min=10.5  -O3 -DNDEBUG -w "\
+@@ -27,7 +26,5 @@
+ 	--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+-	--with-numthreads=8
+-	#--with-fortran-lib="/usr/local/gfortran/lib/libgfortran.a" \
+-	#--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+-	#--with-boost-dir=$ISSM_DIR/externalpackages/boost/install/ \
++	#--with-fortran-lib="/usr/local/gfortran/lib/gcc/x86_64-apple-darwin10/4.6.2/libgfortran.a" \
++	#--with-python-version=$pythonversion \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13786-13787.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13786-13787.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13786-13787.diff	(revision 13980)
@@ -0,0 +1,2734 @@
+Index: ../trunk-jpl/src/c/solutions/dakota_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/dakota_core.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/solutions/dakota_core.cpp	(revision 13787)
+@@ -42,12 +42,11 @@
+ #include "../classes/dakota/DakotaPlugin.h"
+ 
+ #ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
+-#include "ParallelLibrary.H"
+-#include "ProblemDescDB.H"
+-#include "DakotaStrategy.H"
+-#include "DakotaModel.H"
+-#include "DakotaInterface.H"
+-
++#include <ParallelLibrary.H>
++#include <ProblemDescDB.H>
++#include <DakotaStrategy.H>
++#include <DakotaModel.H>
++#include <DakotaInterface.H>
+ #endif
+ /*}}}*/
+ 
+Index: ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp	(revision 13787)
+@@ -18,12 +18,9 @@
+ 	SeqVec<IssmPDouble>* data_prime=NULL;
+ 
+ 	/*Intermediary*/
+-	int    i,j;
++	int    i;
+ 	int    interpolation_type;
+ 	bool   debug;
+-	double area;
+-	double area_1,area_2,area_3;
+-	double data_value;
+ 	double xmin,xmax;
+ 	double ymin,ymax;
+ 
+Index: ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 13787)
+@@ -24,7 +24,7 @@
+ 	double defaultvalue;
+ 	R2     r;
+ 	I2     I;
+-	int    i,j,k;
++	int    i,j;
+ 	int    it;
+ 	int    i0,i1,i2;
+ 	double areacoord[3];
+Index: ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp	(revision 13787)
+@@ -15,7 +15,6 @@
+ 	long			i, j, k, l, ii, jj;
+ 	long			iii, jjj;
+ 	long			test;
+-	float			howlong;
+ 	float			nsteps, ssteps, wsteps, esteps;
+ 	float			nwsteps, nesteps, swsteps, sesteps;
+ 	float			north, south, east, west;
+Index: ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp	(revision 13787)
+@@ -6,7 +6,6 @@
+ int ContourToNodesx(SeqVec<IssmPDouble>** pflags,double* x, double* y, int nods, Contour<IssmPDouble>** contours,int numcontours,int edgevalue){
+ 
+ 	int i;
+-	int m,n;
+ 
+ 	/*Contour:*/
+ 	Contour<IssmPDouble>* contouri=NULL;
+@@ -41,10 +40,8 @@
+ 
+ 	/*Contour:*/
+ 	Contour<IssmPDouble>* contouri=NULL;
+-	int      numnodes;
+ 	double*  xc=NULL;
+ 	double*  yc=NULL;
+-	double   value;
+ 
+ 	/*output: */
+ 	SeqVec<IssmPDouble>* flags=NULL;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp	(revision 13787)
+@@ -13,17 +13,16 @@
+ 
+ void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
+ 
+-	int         i;
+ 	Parameters *parameters       = NULL;
+ 	bool        control_analysis;
+ 	int         nsteps;
+ 	int         num_control_type;
+ 	int         num_cm_responses;
+ 	int        *control_type     = NULL;
+-	IssmDouble     *cm_responses     = NULL;
+-	IssmDouble     *cm_jump          = NULL;
+-	IssmDouble     *optscal          = NULL;
+-	IssmDouble     *maxiter          = NULL;
++	IssmDouble *cm_responses     = NULL;
++	IssmDouble *cm_jump          = NULL;
++	IssmDouble *optscal          = NULL;
++	IssmDouble *maxiter          = NULL;
+ 
+ 	/*Get parameters: */
+ 	parameters=*pparameters;
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 13787)
+@@ -12,7 +12,6 @@
+ 	 * but also the vertices_type: */
+ 
+ 	int numdofs=2; //default numdofs
+-	int i;
+ 	int* doftype=NULL;
+ 
+ 	/*ok, according to analysis type: */
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 13787)
+@@ -43,7 +43,6 @@
+ 	/*Output*/
+ 	Constraints *constraints      = NULL;
+ 	SpcStatic   *spcstatic        = NULL;
+-	int          node1,node2;
+ 	int          dim;
+ 	int          numberofvertices;
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 13787)
+@@ -15,7 +15,7 @@
+ void	CreateElementsVerticesAndMaterials(Elements** pelements,Vertices** pvertices,Materials** pmaterials, IoModel* iomodel,const int nummodels){
+ 
+ 	/*Intermediary*/
+-	int i,j,k,n;
++	int i;
+ 	int dim,materials_type;
+ 	int numberofelements;
+ 	int numberofvertices;
+Index: ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 13787)
+@@ -24,7 +24,6 @@
+ 	/*Intermediary*/
+ 	double* x=NULL;
+ 	double* y=NULL;
+-	double  x_grid,y_grid;
+ 	int     i;
+ 
+ 	/*threading: */
+Index: ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 13787)
+@@ -12,7 +12,7 @@
+ void SystemMatricesx(Matrix<IssmDouble>** pKff, Matrix<IssmDouble>** pKfs, Vector<IssmDouble>** ppf, Vector<IssmDouble>** pdf, IssmDouble* pkmax,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,bool kflag,bool pflag,bool penalty_kflag,bool penalty_pflag){
+ 
+ 	/*intermediary: */
+-	int      i,j;
++	int      i;
+ 	int      fsize,ssize;
+ 	int      connectivity, numberofdofspernode;
+ 	int      analysis_type, configuration_type;
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscMatrixType.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscMatrixType.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscMatrixType.cpp	(revision 13787)
+@@ -9,9 +9,9 @@
+ #endif
+ 
+ /*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
+ 
+ /*ISSM includes: */
+ #include "../../toolkitsenums.h"
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscInsertMode.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscInsertMode.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscInsertMode.cpp	(revision 13787)
+@@ -9,9 +9,9 @@
+ #endif
+ 
+ /*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
+ 
+ /*ISSM includes: */
+ #include "../../toolkitsenums.h"
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscNormMode.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscNormMode.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscNormMode.cpp	(revision 13787)
+@@ -9,9 +9,9 @@
+ #endif
+ 
+ /*Petsc includes: */
+-#include "petscmat.h"
+-#include "petscvec.h"
+-#include "petscksp.h"
++#include <petscmat.h>
++#include <petscvec.h>
++#include <petscksp.h>
+ 
+ /*ISSM includes: */
+ #include "../../toolkitsenums.h"
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp	(revision 13787)
+@@ -354,11 +354,10 @@
+ 	TriaP1Input* outinput=NULL;
+ 
+ 	/*Intermediaries*/
+-	int               i;
+-	TriaP1Input *xinputB     = NULL;
+-	int               B_numvalues;
+-	const int         numnodes    = 3;
+-	IssmDouble            minvalues[numnodes];
++	int          i;
++	TriaP1Input *xinputB  = NULL;
++	const int    numnodes = 3;
++	IssmDouble   minvalues[numnodes];
+ 
+ 	/*Check that inputB is of the same type*/
+ 	if (inputB->ObjectEnum()!=TriaP1InputEnum) _error_("Operation not permitted because inputB is of type " << EnumToStringx(inputB->ObjectEnum()));
+@@ -387,7 +386,6 @@
+ 	/*Intermediaries*/
+ 	int               i;
+ 	TriaP1Input *xinputB     = NULL;
+-	int               B_numvalues;
+ 	const int         numnodes    = 3;
+ 	IssmDouble            maxvalues[numnodes];
+ 
+Index: ../trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.cpp	(revision 13787)
+@@ -544,7 +544,7 @@
+ 					  char* ktag,
+ 					  FILE* fid){
+ 
+-	int     i=-1,j;
++	int     i=-1;
+ 	char*   kstr;
+ 	char*   ktok;
+ 	double* dval2=NULL;
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp	(revision 13787)
+@@ -376,7 +376,6 @@
+ 
+ 	const int   numdof = NDOF2*NUMVERTICES;
+ 	int         dofs[1]             = {0};
+-	IssmDouble  Ke_gg[4][4];
+ 	IssmDouble  thickness;
+ 	IssmDouble  h[2];
+ 	IssmDouble  penalty_offset;
+@@ -456,26 +455,26 @@
+ /*FUNCTION Riftfront::PenaltyCreatePVectorDiagnosticHoriz {{{*/
+ ElementVector* Riftfront::PenaltyCreatePVectorDiagnosticHoriz(IssmDouble kmax){
+ 
+-	const int   numdof = NDOF2*NUMVERTICES;
+-	int         i,j;
+-	IssmDouble      rho_ice;
+-	IssmDouble      rho_water;
+-	IssmDouble      gravity;
+-	IssmDouble      thickness;
+-	IssmDouble      h[2];
+-	IssmDouble      bed;
+-	IssmDouble      b[2];
+-	IssmDouble      pressure;
+-	IssmDouble      pressure_litho;
+-	IssmDouble      pressure_air;
+-	IssmDouble      pressure_melange;
+-	IssmDouble      pressure_water;
+-	int         fill;
+-	bool        shelf;
++	const int  numdof = NDOF2*NUMVERTICES;
++	int        j;
++	IssmDouble rho_ice;
++	IssmDouble rho_water;
++	IssmDouble gravity;
++	IssmDouble thickness;
++	IssmDouble h[2];
++	IssmDouble bed;
++	IssmDouble b[2];
++	IssmDouble pressure;
++	IssmDouble pressure_litho;
++	IssmDouble pressure_air;
++	IssmDouble pressure_melange;
++	IssmDouble pressure_water;
++	int        fill;
++	bool       shelf;
+ 
+ 	/*Objects: */
+-	Tria       *tria1               = NULL;
+-	Tria       *tria2               = NULL;
++	Tria *tria1 = NULL;
++	Tria *tria2 = NULL;
+ 
+ 	/*enum of element? */
+ 	if(elements[0]->ObjectEnum()!=TriaEnum)_error_("only Tria element allowed for Riftfront load!");
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13787)
+@@ -404,15 +404,15 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig,dim;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     Jdettria,dt,vx,vy;
+-	IssmDouble     L[NUMVERTICES];
+-	IssmDouble     B[2][NUMVERTICES];
+-	IssmDouble     Bprime[2][NUMVERTICES];
+-	IssmDouble     DL[2][2]={0.0};
+-	IssmDouble     DLprime[2][2]={0.0};
+-	IssmDouble     DL_scalar;
++	int        i,j,dim;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble Jdettria,dt,vx,vy;
++	IssmDouble L[NUMVERTICES];
++	IssmDouble B[2][NUMVERTICES];
++	IssmDouble Bprime[2][NUMVERTICES];
++	IssmDouble DL[2][2]={0.0};
++	IssmDouble DLprime[2][2]={0.0};
++	IssmDouble DL_scalar;
+ 	GaussTria  *gauss=NULL;
+ 
+ 	/*Initialize Element matrix*/
+@@ -435,7 +435,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -592,11 +592,11 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
+-	IssmDouble     Jdettria,dt;
+-	IssmDouble     surface_mass_balance_g,basal_melting_g,basal_melting_correction_g,thickness_g;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     L[NUMVERTICES];
++	int        i,j;
++	IssmDouble Jdettria,dt;
++	IssmDouble surface_mass_balance_g,basal_melting_g,basal_melting_correction_g,thickness_g;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble L[NUMVERTICES];
+ 	GaussTria* gauss=NULL;
+ 
+ 	/*Initialize Element vector*/
+@@ -613,7 +613,7 @@
+ 	/*Initialize basal_melting_correction_g to 0, do not forget!:*/
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -643,11 +643,11 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
+-	IssmDouble     Jdettria,dt;
+-	IssmDouble     surface_mass_balance_g,basal_melting_g,thickness_g;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     L[NUMVERTICES];
++	int        i,j;
++	IssmDouble Jdettria,dt;
++	IssmDouble surface_mass_balance_g,basal_melting_g,thickness_g;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble L[NUMVERTICES];
+ 	GaussTria* gauss=NULL;
+ 
+ 	/*Initialize Element vector*/
+@@ -662,7 +662,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -688,12 +688,12 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
++	int        i,j;
+ 	int        analysis_type;
+-	IssmDouble     Jdet;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     slope[2];
+-	IssmDouble     basis[3];
++	IssmDouble Jdet;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble slope[2];
++	IssmDouble basis[3];
+ 	GaussTria* gauss=NULL;
+ 
+ 	/*Initialize Element vector*/
+@@ -712,7 +712,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -2863,15 +2863,15 @@
+ 	const int  numdof=NDOF2*NUMVERTICES;
+ 
+ 	/*Intermediaries*/
+-	int        i,j,ig;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     viscosity,newviscosity,oldviscosity;
+-	IssmDouble     viscosity_overshoot,thickness,Jdet;
+-	IssmDouble     epsilon[3],oldepsilon[3];    /* epsilon=[exx,eyy,exy];    */
+-	IssmDouble     B[3][numdof];
+-	IssmDouble     Bprime[3][numdof];
+-	IssmDouble     D[3][3]   = {0.0};
+-	IssmDouble     D_scalar;
++	int        i,j;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble viscosity,newviscosity,oldviscosity;
++	IssmDouble viscosity_overshoot,thickness,Jdet;
++	IssmDouble epsilon[3],oldepsilon[3];    /* epsilon=[exx,eyy,exy];    */
++	IssmDouble B[3][numdof];
++	IssmDouble Bprime[3][numdof];
++	IssmDouble D[3][3]   = {0.0};
++	IssmDouble D_scalar;
+ 	GaussTria *gauss = NULL;
+ 
+ 	/*Initialize Element matrix*/
+@@ -2888,7 +2888,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -2927,17 +2927,17 @@
+ 	const int  numdof=NDOF2*NUMVERTICES;
+ 
+ 	/*Intermediaries*/
+-	int        i,j,ig;
++	int        i,j;
+ 	int        analysis_type;
+-	IssmDouble     MAXSLOPE  = .06; // 6 %
+-	IssmDouble     MOUNTAINKEXPONENT = 10;
+-	IssmDouble     slope_magnitude,alpha2;
+-	IssmDouble     Jdet;
+-	IssmDouble     L[2][numdof];
+-	IssmDouble     DL[2][2]  = {{ 0,0 },{0,0}};
+-	IssmDouble     DL_scalar;
+-	IssmDouble     slope[2]  = {0.0,0.0};
+-	IssmDouble     xyz_list[NUMVERTICES][3];
++	IssmDouble MAXSLOPE  = .06; // 6 %
++	IssmDouble MOUNTAINKEXPONENT = 10;
++	IssmDouble slope_magnitude,alpha2;
++	IssmDouble Jdet;
++	IssmDouble L[2][numdof];
++	IssmDouble DL[2][2]  = {{ 0,0 },{0,0}};
++	IssmDouble DL_scalar;
++	IssmDouble slope[2]  = {0.0,0.0};
++	IssmDouble xyz_list[NUMVERTICES][3];
+ 	Friction  *friction = NULL;
+ 	GaussTria *gauss    = NULL;
+ 
+@@ -2958,7 +2958,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3017,13 +3017,13 @@
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int            i,j,ig;
+-	IssmDouble         driving_stress_baseline,thickness;
+-	IssmDouble         Jdet;
+-	IssmDouble         xyz_list[NUMVERTICES][3];
+-	IssmDouble         slope[2];
+-	IssmDouble         basis[3];
+-	IssmDouble         pe_g_gaussian[numdof];
++	int            i,j;
++	IssmDouble     driving_stress_baseline,thickness;
++	IssmDouble     Jdet;
++	IssmDouble     xyz_list[NUMVERTICES][3];
++	IssmDouble     slope[2];
++	IssmDouble     basis[3];
++	IssmDouble     pe_g_gaussian[numdof];
+ 	GaussTria*     gauss=NULL;
+ 
+ 	/*Initialize Element vector*/
+@@ -3037,7 +3037,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3121,16 +3121,16 @@
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     Jdet,thickness;
+-	IssmDouble     eps1dotdphii,eps1dotdphij;
+-	IssmDouble     eps2dotdphii,eps2dotdphij;
+-	IssmDouble     mu_prime;
+-	IssmDouble     epsilon[3];/* epsilon=[exx,eyy,exy];*/
+-	IssmDouble     eps1[2],eps2[2];
+-	IssmDouble     phi[NUMVERTICES];
+-	IssmDouble     dphi[2][NUMVERTICES];
++	int        i,j;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble Jdet,thickness;
++	IssmDouble eps1dotdphii,eps1dotdphij;
++	IssmDouble eps2dotdphii,eps2dotdphij;
++	IssmDouble mu_prime;
++	IssmDouble epsilon[3];/* epsilon=[exx,eyy,exy];*/
++	IssmDouble eps1[2],eps2[2];
++	IssmDouble phi[NUMVERTICES];
++	IssmDouble dphi[2][NUMVERTICES];
+ 	GaussTria *gauss=NULL;
+ 
+ 	/*Initialize Jacobian with regular MacAyeal (first part of the Gateau derivative)*/
+@@ -3144,7 +3144,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3544,13 +3544,13 @@
+ /*FUNCTION Tria::GradjBGradient{{{*/
+ void  Tria::GradjBGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index){
+ 
+-	int        i,ig;
++	int        i;
+ 	int        vertexpidlist[NUMVERTICES];
+-	IssmDouble     Jdet,weight;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     dbasis[NDOF2][NUMVERTICES];
+-	IssmDouble     dk[NDOF2]; 
+-	IssmDouble     grade_g[NUMVERTICES]={0.0};
++	IssmDouble Jdet,weight;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble dbasis[NDOF2][NUMVERTICES];
++	IssmDouble dk[NDOF2]; 
++	IssmDouble grade_g[NUMVERTICES]={0.0};
+ 	GaussTria  *gauss=NULL;
+ 
+ 	/*Retrieve all inputs we will be needing: */
+@@ -3561,7 +3561,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3584,13 +3584,13 @@
+ /*FUNCTION Tria::GradjZGradient{{{*/
+ void  Tria::GradjZGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index){
+ 
+-	int        i,ig;
++	int        i;
+ 	int        vertexpidlist[NUMVERTICES];
+-	IssmDouble     Jdet,weight;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     dbasis[NDOF2][NUMVERTICES];
+-	IssmDouble     dk[NDOF2]; 
+-	IssmDouble     grade_g[NUMVERTICES]={0.0};
++	IssmDouble Jdet,weight;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble dbasis[NDOF2][NUMVERTICES];
++	IssmDouble dk[NDOF2]; 
++	IssmDouble grade_g[NUMVERTICES]={0.0};
+ 	GaussTria  *gauss=NULL;
+ 
+ 	/*Retrieve all inputs we will be needing: */
+@@ -3601,7 +3601,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3625,14 +3625,14 @@
+ void  Tria::GradjBMacAyeal(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	/*Intermediaries*/
+-	int        i,ig;
++	int        i;
+ 	int        doflist[NUMVERTICES];
+-	IssmDouble     vx,vy,lambda,mu,thickness,Jdet;
+-	IssmDouble     viscosity_complement;
+-	IssmDouble     dvx[NDOF2],dvy[NDOF2],dadjx[NDOF2],dadjy[NDOF2],dB[NDOF2]; 
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     basis[3],epsilon[3];
+-	IssmDouble     grad[NUMVERTICES]={0.0};
++	IssmDouble vx,vy,lambda,mu,thickness,Jdet;
++	IssmDouble viscosity_complement;
++	IssmDouble dvx[NDOF2],dvy[NDOF2],dadjx[NDOF2],dadjy[NDOF2],dB[NDOF2]; 
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble basis[3],epsilon[3];
++	IssmDouble grad[NUMVERTICES]={0.0};
+ 	GaussTria *gauss = NULL;
+ 
+ 	/* Get node coordinates and dof list: */
+@@ -3649,7 +3649,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(4);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3682,14 +3682,14 @@
+ void  Tria::GradjZMacAyeal(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	/*Intermediaries*/
+-	int        i,ig;
++	int        i;
+ 	int        doflist[NUMVERTICES];
+-	IssmDouble     vx,vy,lambda,mu,thickness,Jdet;
+-	IssmDouble     viscosity_complement;
+-	IssmDouble     dvx[NDOF2],dvy[NDOF2],dadjx[NDOF2],dadjy[NDOF2],dZ[NDOF2]; 
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     basis[3],epsilon[3];
+-	IssmDouble     grad[NUMVERTICES]={0.0};
++	IssmDouble vx,vy,lambda,mu,thickness,Jdet;
++	IssmDouble viscosity_complement;
++	IssmDouble dvx[NDOF2],dvy[NDOF2],dadjx[NDOF2],dadjy[NDOF2],dZ[NDOF2]; 
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble basis[3],epsilon[3];
++	IssmDouble grad[NUMVERTICES]={0.0};
+ 	GaussTria *gauss = NULL;
+ 
+ 	/* Get node coordinates and dof list: */
+@@ -3706,7 +3706,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(4);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3738,18 +3738,18 @@
+ /*FUNCTION Tria::GradjDragMacAyeal {{{*/
+ void  Tria::GradjDragMacAyeal(Vector<IssmDouble>* gradient,int control_index){
+ 
+-	int        i,ig;
++	int        i;
+ 	int        analysis_type;
+ 	int        vertexpidlist[NUMVERTICES];
+ 	int        connectivity[NUMVERTICES];
+-	IssmDouble     vx,vy,lambda,mu,alpha_complement,Jdet;
+-	IssmDouble     bed,thickness,Neff,drag;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     dk[NDOF2]; 
+-	IssmDouble     grade_g[NUMVERTICES]={0.0};
+-	IssmDouble     grade_g_gaussian[NUMVERTICES];
+-	IssmDouble     basis[3];
+-	IssmDouble     epsilon[3]; /* epsilon=[exx,eyy,exy];*/
++	IssmDouble vx,vy,lambda,mu,alpha_complement,Jdet;
++	IssmDouble bed,thickness,Neff,drag;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble dk[NDOF2]; 
++	IssmDouble grade_g[NUMVERTICES]={0.0};
++	IssmDouble grade_g_gaussian[NUMVERTICES];
++	IssmDouble basis[3];
++	IssmDouble epsilon[3]; /* epsilon=[exx,eyy,exy];*/
+ 	Friction*  friction=NULL;
+ 	GaussTria  *gauss=NULL;
+ 
+@@ -3773,7 +3773,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(4);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3826,13 +3826,13 @@
+ /*FUNCTION Tria::GradjDragGradient{{{*/
+ void  Tria::GradjDragGradient(Vector<IssmDouble>* gradient, int weight_index,int control_index){
+ 
+-	int        i,ig;
++	int        i;
+ 	int        vertexpidlist[NUMVERTICES];
+-	IssmDouble     Jdet,weight;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     dbasis[NDOF2][NUMVERTICES];
+-	IssmDouble     dk[NDOF2]; 
+-	IssmDouble     grade_g[NUMVERTICES]={0.0};
++	IssmDouble Jdet,weight;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble dbasis[NDOF2][NUMVERTICES];
++	IssmDouble dk[NDOF2]; 
++	IssmDouble grade_g[NUMVERTICES]={0.0};
+ 	GaussTria  *gauss=NULL;
+ 
+ 	/*Retrieve all inputs we will be needing: */
+@@ -3844,7 +3844,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3887,13 +3887,13 @@
+ void  Tria::GradjVxBalancedthickness(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	/*Intermediaries*/
+-	int        i,ig;
++	int        i;
+ 	int        vertexpidlist[NUMVERTICES];
+-	IssmDouble     thickness,Jdet;
+-	IssmDouble     basis[3];
+-	IssmDouble     Dlambda[2],dp[2];
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     grade_g[NUMVERTICES] = {0.0};
++	IssmDouble thickness,Jdet;
++	IssmDouble basis[3];
++	IssmDouble Dlambda[2],dp[2];
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble grade_g[NUMVERTICES] = {0.0};
+ 	GaussTria *gauss                = NULL;
+ 
+ 	/* Get node coordinates and dof list: */
+@@ -3906,7 +3906,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3930,13 +3930,13 @@
+ void  Tria::GradjVyBalancedthickness(Vector<IssmDouble>* gradient,int control_index){
+ 
+ 	/*Intermediaries*/
+-	int        i,ig;
++	int        i;
+ 	int        vertexpidlist[NUMVERTICES];
+-	IssmDouble     thickness,Jdet;
+-	IssmDouble     basis[3];
+-	IssmDouble     Dlambda[2],dp[2];
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     grade_g[NUMVERTICES] = {0.0};
++	IssmDouble thickness,Jdet;
++	IssmDouble basis[3];
++	IssmDouble Dlambda[2],dp[2];
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble grade_g[NUMVERTICES] = {0.0};
+ 	GaussTria *gauss                = NULL;
+ 
+ 	/* Get node coordinates and dof list: */
+@@ -3949,7 +3949,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4006,7 +4006,7 @@
+ 
+ 	/* Start looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4031,11 +4031,11 @@
+ 
+ 	const int    numdof=2*NUMVERTICES;
+ 
+-	int        i,ig;
+-	IssmDouble     Jelem=0,S,Jdet;
+-	IssmDouble     misfit;
+-	IssmDouble     vx,vy,vxobs,vyobs,weight;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
++	int        i;
++	IssmDouble Jelem=0,S,Jdet;
++	IssmDouble misfit;
++	IssmDouble vx,vy,vxobs,vyobs,weight;
++	IssmDouble xyz_list[NUMVERTICES][3];
+ 	GaussTria *gauss=NULL;
+ 
+ 	/*If on water, return 0: */
+@@ -4054,7 +4054,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(3);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4092,14 +4092,14 @@
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+-	int        i,ig;
+-	IssmDouble     Jelem=0;
+-	IssmDouble     misfit,Jdet;
+-	IssmDouble     epsvel=2.220446049250313e-16;
+-	IssmDouble     meanvel=3.170979198376458e-05; /*1000 m/yr*/
+-	IssmDouble     velocity_mag,obs_velocity_mag;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     vx,vy,vxobs,vyobs,weight;
++	int        i;
++	IssmDouble Jelem=0;
++	IssmDouble misfit,Jdet;
++	IssmDouble epsvel=2.220446049250313e-16;
++	IssmDouble meanvel=3.170979198376458e-05; /*1000 m/yr*/
++	IssmDouble velocity_mag,obs_velocity_mag;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble vx,vy,vxobs,vyobs,weight;
+ 	GaussTria *gauss=NULL;
+ 
+ 	/*If on water, return 0: */
+@@ -4117,7 +4117,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(4);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4157,14 +4157,14 @@
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+-	int        i,ig;
++	int        i;
+ 	int        fit=-1;
+-	IssmDouble     Jelem=0, S=0;
+-	IssmDouble     epsvel=2.220446049250313e-16;
+-	IssmDouble     meanvel=3.170979198376458e-05; /*1000 m/yr*/
+-	IssmDouble     misfit, Jdet;
+-	IssmDouble     vx,vy,vxobs,vyobs,weight;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
++	IssmDouble Jelem=0, S=0;
++	IssmDouble epsvel=2.220446049250313e-16;
++	IssmDouble meanvel=3.170979198376458e-05; /*1000 m/yr*/
++	IssmDouble misfit, Jdet;
++	IssmDouble vx,vy,vxobs,vyobs,weight;
++	IssmDouble xyz_list[NUMVERTICES][3];
+ 	GaussTria *gauss=NULL;
+ 
+ 	/*If on water, return 0: */
+@@ -4182,7 +4182,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(4);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4223,11 +4223,10 @@
+ 
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+-	int        i,ig;
+-	IssmDouble     Jelem=0;
+-	IssmDouble     misfit,Jdet;
+-	IssmDouble     vx,vy,vxobs,vyobs,weight;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
++	IssmDouble Jelem=0;
++	IssmDouble misfit,Jdet;
++	IssmDouble vx,vy,vxobs,vyobs,weight;
++	IssmDouble xyz_list[NUMVERTICES][3];
+ 	GaussTria *gauss=NULL;
+ 
+ 	/*If on water, return 0: */
+@@ -4245,7 +4244,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4283,14 +4282,13 @@
+ IssmDouble Tria::SurfaceRelVelMisfit(bool process_units,int weight_index){
+ 	const int  numdof=2*NUMVERTICES;
+ 
+-	int        i,ig;
+-	IssmDouble     Jelem=0;
+-	IssmDouble     scalex=1,scaley=1;
+-	IssmDouble     misfit,Jdet;
+-	IssmDouble     epsvel=2.220446049250313e-16;
+-	IssmDouble     meanvel=3.170979198376458e-05; /*1000 m/yr*/
+-	IssmDouble     vx,vy,vxobs,vyobs,weight;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
++	IssmDouble  Jelem=0;
++	IssmDouble  scalex=1,scaley=1;
++	IssmDouble  misfit,Jdet;
++	IssmDouble  epsvel=2.220446049250313e-16;
++	IssmDouble  meanvel=3.170979198376458e-05; /*1000 m/yr*/
++	IssmDouble  vx,vy,vxobs,vyobs,weight;
++	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	GaussTria *gauss=NULL;
+ 
+ 	/*If on water, return 0: */
+@@ -4308,7 +4306,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(4);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4367,7 +4365,7 @@
+ 
+ 	/* Start looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4414,7 +4412,7 @@
+ 
+ 	/* Start looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4466,7 +4464,7 @@
+ 
+ 	/* Start looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4495,13 +4493,13 @@
+ IssmDouble Tria::ThicknessAbsMisfit(bool process_units,int weight_index){
+ 
+ 	/*Intermediaries*/
+-	int        i,ig;
+-	IssmDouble     thickness,thicknessobs,weight;
+-	IssmDouble     Jdet;
+-	IssmDouble     Jelem = 0;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
++	int        i;
++	IssmDouble thickness,thicknessobs,weight;
++	IssmDouble Jdet;
++	IssmDouble Jelem = 0;
++	IssmDouble xyz_list[NUMVERTICES][3];
+ 	GaussTria *gauss = NULL;
+-	IssmDouble     dH[2];
++	IssmDouble dH[2];
+ 
+ 	/*If on water, return 0: */
+ 	if(IsOnWater())return 0;
+@@ -4514,7 +4512,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4543,7 +4541,7 @@
+ 	const int    numdof=1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int         i,ig,resp;
++	int         i,resp;
+ 	IssmDouble  Jdet;
+ 	IssmDouble  thickness,thicknessobs,weight;
+ 	int         num_responses;
+@@ -4570,7 +4568,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4630,7 +4628,7 @@
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,resp,ig;
++	int        i,resp;
+ 	int       *responses=NULL;
+ 	int        num_responses;
+ 	IssmDouble     Jdet;
+@@ -4666,7 +4664,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(4);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4812,7 +4810,7 @@
+ ElementVector* Tria::CreatePVectorAdjointStokes(void){
+ 
+ 	/*Intermediaries */
+-	int        i,resp,ig;
++	int        i,resp;
+ 	int       *responses=NULL;
+ 	int        num_responses;
+ 	IssmDouble     Jdet;
+@@ -4848,7 +4846,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(4);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -5015,7 +5013,7 @@
+ 
+ 	/* Start looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -5064,17 +5062,16 @@
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
++	int        i,j;
+ 	bool       incomplete_adjoint;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     Jdet,thickness;
+-	IssmDouble     eps1dotdphii,eps1dotdphij;
+-	IssmDouble     eps2dotdphii,eps2dotdphij;
+-	IssmDouble     mu_prime;
+-	IssmDouble     epsilon[3];/* epsilon=[exx,eyy,exy];*/
+-	IssmDouble     eps1[2],eps2[2];
+-	IssmDouble     phi[NUMVERTICES];
+-	IssmDouble     dphi[2][NUMVERTICES];
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble Jdet,thickness;
++	IssmDouble eps1dotdphii,eps1dotdphij;
++	IssmDouble eps2dotdphii,eps2dotdphij;
++	IssmDouble mu_prime;
++	IssmDouble epsilon[3];/* epsilon=[exx,eyy,exy];*/
++	IssmDouble eps1[2],eps2[2];
++	IssmDouble dphi[2][NUMVERTICES];
+ 	GaussTria *gauss=NULL;
+ 
+ 	/*Initialize Jacobian with regular MacAyeal (first part of the Gateau derivative)*/
+@@ -5090,7 +5087,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -5314,23 +5311,23 @@
+ ElementMatrix* Tria::CreateKMatrixHydrology(void){
+ 
+ 	/*Constants*/
+-	const int    numdof=NDOF1*NUMVERTICES;
++	const int  numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	IssmDouble     diffusivity;
+-	int        i,j,ig;
+-	IssmDouble     Jdettria,DL_scalar,dt,h;
+-	IssmDouble     vx,vy,vel,dvxdx,dvydy;
+-	IssmDouble     dvx[2],dvy[2];
+-	IssmDouble     v_gauss[2]={0.0};
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     L[NUMVERTICES];
+-	IssmDouble     B[2][NUMVERTICES];
+-	IssmDouble     Bprime[2][NUMVERTICES];
+-	IssmDouble     K[2][2]                        ={0.0};
+-	IssmDouble     KDL[2][2]                      ={0.0};
+-	IssmDouble     DL[2][2]                        ={0.0};
+-	IssmDouble     DLprime[2][2]                   ={0.0};
++	IssmDouble diffusivity;
++	int        i,j;
++	IssmDouble Jdettria,DL_scalar,dt,h;
++	IssmDouble vx,vy,vel,dvxdx,dvydy;
++	IssmDouble dvx[2],dvy[2];
++	IssmDouble v_gauss[2]={0.0};
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble L[NUMVERTICES];
++	IssmDouble B[2][NUMVERTICES];
++	IssmDouble Bprime[2][NUMVERTICES];
++	IssmDouble K[2][2]                        ={0.0};
++	IssmDouble KDL[2][2]                      ={0.0};
++	IssmDouble DL[2][2]                        ={0.0};
++	IssmDouble DLprime[2][2]                   ={0.0};
+ 	GaussTria *gauss=NULL;
+ 
+ 	/*Skip if water or ice shelf element*/
+@@ -5352,7 +5349,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -5422,12 +5419,12 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
+-	IssmDouble     Jdettria,dt;
+-	IssmDouble     basal_melting_g;
+-	IssmDouble     old_watercolumn_g;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     basis[numdof];
++	int        i,j;
++	IssmDouble Jdettria,dt;
++	IssmDouble basal_melting_g;
++	IssmDouble old_watercolumn_g;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble basis[numdof];
+ 	GaussTria* gauss=NULL;
+ 
+ 	/*Skip if water or ice shelf element*/
+@@ -5445,7 +5442,7 @@
+ 	/*Initialize basal_melting_correction_g to 0, do not forget!:*/
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -5696,18 +5693,18 @@
+ 
+ 	/*Intermediaries */
+ 	int        stabilization;
+-	int        i,j,ig,dim;
+-	IssmDouble     Jdettria,vx,vy,dvxdx,dvydy,vel,h;
+-	IssmDouble     dvx[2],dvy[2];
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     L[NUMVERTICES];
+-	IssmDouble     B[2][NUMVERTICES];
+-	IssmDouble     Bprime[2][NUMVERTICES];
+-	IssmDouble     K[2][2]                          = {0.0};
+-	IssmDouble     KDL[2][2]                        = {0.0};
+-	IssmDouble     DL[2][2]                         = {0.0};
+-	IssmDouble     DLprime[2][2]                    = {0.0};
+-	IssmDouble     DL_scalar;
++	int        i,j,dim;
++	IssmDouble Jdettria,vx,vy,dvxdx,dvydy,vel,h;
++	IssmDouble dvx[2],dvy[2];
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble L[NUMVERTICES];
++	IssmDouble B[2][NUMVERTICES];
++	IssmDouble Bprime[2][NUMVERTICES];
++	IssmDouble K[2][2]                          = {0.0};
++	IssmDouble KDL[2][2]                        = {0.0};
++	IssmDouble DL[2][2]                         = {0.0};
++	IssmDouble DLprime[2][2]                    = {0.0};
++	IssmDouble DL_scalar;
+ 	GaussTria *gauss                            = NULL;
+ 
+ 	/*Initialize Element matrix*/
+@@ -5731,7 +5728,7 @@
+ 
+ 	/*Start looping on the number of gaussian points:*/
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -5805,13 +5802,13 @@
+ 	const int  numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries*/
+-	int        i,j,ig,dim;
+-	IssmDouble     vx,vy,Jdettria;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     B[2][NUMVERTICES];
+-	IssmDouble     Bprime[2][NUMVERTICES];
+-	IssmDouble     DL[2][2]={0.0};
+-	IssmDouble     DL_scalar;
++	int        i,j,dim;
++	IssmDouble vx,vy,Jdettria;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble B[2][NUMVERTICES];
++	IssmDouble Bprime[2][NUMVERTICES];
++	IssmDouble DL[2][2]={0.0};
++	IssmDouble DL_scalar;
+ 	GaussTria  *gauss=NULL;
+ 
+ 	/*Initialize Element matrix*/
+@@ -5825,7 +5822,7 @@
+ 
+ 	/*Start looping on the number of gaussian points:*/
+ 	gauss=new GaussTria(2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -5873,10 +5870,10 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     dhdt_g,basal_melting_g,surface_mass_balance_g,Jdettria;
+-	IssmDouble     L[NUMVERTICES];
++	int        i,j;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble dhdt_g,basal_melting_g,surface_mass_balance_g,Jdettria;
++	IssmDouble L[NUMVERTICES];
+ 	GaussTria* gauss=NULL;
+ 
+ 	/*Initialize Element vector*/
+@@ -5890,7 +5887,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -5916,10 +5913,10 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     basal_melting_g,surface_mass_balance_g,dhdt_g,Jdettria;
+-	IssmDouble     L[NUMVERTICES];
++	int        i,j;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble basal_melting_g,surface_mass_balance_g,dhdt_g,Jdettria;
++	IssmDouble L[NUMVERTICES];
+ 	GaussTria* gauss=NULL;
+ 
+ 	/*Initialize Element vector*/
+@@ -5933,7 +5930,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussTria(2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13787)
+@@ -179,7 +179,7 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries */
+-	int    count,ig;
++	int    count;
+ 	IssmDouble basalfriction[NUMVERTICES]={0,0,0,0,0,0};
+ 	IssmDouble alpha2,vx,vy;
+ 	Friction*  friction=NULL;
+@@ -203,7 +203,7 @@
+ 	/* Start looping on the number of gauss 2d (nodes on the bedrock) */
+ 	gauss=new GaussPenta(0,1,2,2);
+ 	count=0;
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -225,21 +225,21 @@
+ /*FUNCTION Penta::ComputeBasalStress {{{*/
+ void  Penta::ComputeBasalStress(Vector<IssmDouble>* sigma_b){
+ 
+-	int         i,j,ig;
++	int         i,j;
+ 	int         dofv[3]={0,1,2};
+ 	int         dofp[1]={3};
+ 	int         analysis_type,approximation;
+-	IssmDouble      xyz_list[NUMVERTICES][3];
+-	IssmDouble      xyz_list_tria[3][3];
+-	IssmDouble      rho_ice,gravity,stokesreconditioning;
+-	IssmDouble      pressure,viscosity,Jdet2d;
+-	IssmDouble      bed_normal[3];
+-	IssmDouble      basalforce[3];
+-	IssmDouble      epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble      stresstensor[6]={0.0};
+-	IssmDouble      sigma_xx,sigma_yy,sigma_zz;
+-	IssmDouble      sigma_xy,sigma_xz,sigma_yz;
+-	IssmDouble      surface=0,value=0;
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  xyz_list_tria[3][3];
++	IssmDouble  rho_ice,gravity,stokesreconditioning;
++	IssmDouble  pressure,viscosity,Jdet2d;
++	IssmDouble  bed_normal[3];
++	IssmDouble  basalforce[3];
++	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble  stresstensor[6]={0.0};
++	IssmDouble  sigma_xx,sigma_yy,sigma_zz;
++	IssmDouble  sigma_xy,sigma_xz,sigma_yz;
++	IssmDouble  surface=0,value=0;
+ 	GaussPenta* gauss;
+ 
+ 	/*retrive parameters: */
+@@ -275,7 +275,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3298,25 +3298,25 @@
+ 
+ 	/*Intermediaries */
+ 	int        stabilization;
+-	int        i,j,ig,found=0;
+-	IssmDouble     Jdet,u,v,w,um,vm,wm;
+-	IssmDouble     h,hx,hy,hz,vx,vy,vz,vel;
+-	IssmDouble     gravity,rho_ice,rho_water;
+-	IssmDouble     epsvel=2.220446049250313e-16;
+-	IssmDouble     heatcapacity,thermalconductivity,dt;
+-	IssmDouble     pressure,enthalpy;
+-	IssmDouble     latentheat,kappa;
+-	IssmDouble     tau_parameter,diameter;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     B_conduct[3][numdof];
+-	IssmDouble     B_advec[3][numdof];
+-	IssmDouble     Bprime_advec[3][numdof];
+-	IssmDouble     L[numdof];
+-	IssmDouble     dbasis[3][6];
+-	IssmDouble     D_scalar_conduct,D_scalar_advec;
+-	IssmDouble     D_scalar_trans,D_scalar_stab;
+-	IssmDouble     D[3][3];
+-	IssmDouble     K[3][3]={0.0};
++	int        i,j,found=0;
++	IssmDouble Jdet,u,v,w,um,vm,wm;
++	IssmDouble h,hx,hy,hz,vx,vy,vz,vel;
++	IssmDouble gravity,rho_ice,rho_water;
++	IssmDouble epsvel=2.220446049250313e-16;
++	IssmDouble heatcapacity,thermalconductivity,dt;
++	IssmDouble pressure,enthalpy;
++	IssmDouble latentheat,kappa;
++	IssmDouble tau_parameter,diameter;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble B_conduct[3][numdof];
++	IssmDouble B_advec[3][numdof];
++	IssmDouble Bprime_advec[3][numdof];
++	IssmDouble L[numdof];
++	IssmDouble dbasis[3][6];
++	IssmDouble D_scalar_conduct,D_scalar_advec;
++	IssmDouble D_scalar_trans,D_scalar_stab;
++	IssmDouble D[3][3];
++	IssmDouble K[3][3]={0.0};
+ 	Tria*      tria=NULL;
+ 	GaussPenta *gauss=NULL;
+ 
+@@ -3345,7 +3345,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(2,2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3454,14 +3454,14 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int       i,j,ig;
+-	IssmDouble    mixed_layer_capacity,thermal_exchange_velocity;
+-	IssmDouble    rho_ice,rho_water,heatcapacity;
+-	IssmDouble    Jdet2d,dt;
+-	IssmDouble    xyz_list[NUMVERTICES][3];
+-	IssmDouble	 xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble    basis[NUMVERTICES];
+-	IssmDouble    D_scalar;
++	int        i,j;
++	IssmDouble mixed_layer_capacity,thermal_exchange_velocity;
++	IssmDouble rho_ice,rho_water,heatcapacity;
++	IssmDouble Jdet2d,dt;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
++	IssmDouble basis[NUMVERTICES];
++	IssmDouble D_scalar;
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+@@ -3480,7 +3480,7 @@
+ 
+ 	/* Start looping on the number of gauss (nodes on the bedrock) */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3535,22 +3535,22 @@
+ 
+ 	/*Intermediaries */
+ 	int        stabilization;
+-	int        i,j,ig,found=0;
+-	IssmDouble     Jdet,u,v,w,um,vm,wm,vel;
+-	IssmDouble     h,hx,hy,hz,vx,vy,vz;
+-	IssmDouble     gravity,rho_ice,rho_water,kappa;
+-	IssmDouble     heatcapacity,thermalconductivity,dt;
+-	IssmDouble     tau_parameter,diameter;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     B_conduct[3][numdof];
+-	IssmDouble     B_advec[3][numdof];
+-	IssmDouble     Bprime_advec[3][numdof];
+-	IssmDouble     L[numdof];
+-	IssmDouble     dbasis[3][6];
+-	IssmDouble     D_scalar_conduct,D_scalar_advec;
+-	IssmDouble     D_scalar_trans,D_scalar_stab;
+-	IssmDouble     D[3][3];
+-	IssmDouble     K[3][3]={0.0};
++	int        i,j,found=0;
++	IssmDouble Jdet,u,v,w,um,vm,wm,vel;
++	IssmDouble h,hx,hy,hz,vx,vy,vz;
++	IssmDouble gravity,rho_ice,rho_water,kappa;
++	IssmDouble heatcapacity,thermalconductivity,dt;
++	IssmDouble tau_parameter,diameter;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble B_conduct[3][numdof];
++	IssmDouble B_advec[3][numdof];
++	IssmDouble Bprime_advec[3][numdof];
++	IssmDouble L[numdof];
++	IssmDouble dbasis[3][6];
++	IssmDouble D_scalar_conduct,D_scalar_advec;
++	IssmDouble D_scalar_trans,D_scalar_stab;
++	IssmDouble D[3][3];
++	IssmDouble K[3][3]={0.0};
+ 	Tria*      tria=NULL;
+ 	GaussPenta *gauss=NULL;
+ 
+@@ -3577,7 +3577,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(2,2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3686,14 +3686,14 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int       i,j,ig;
+-	IssmDouble    mixed_layer_capacity,thermal_exchange_velocity;
+-	IssmDouble    rho_ice,rho_water,heatcapacity;
+-	IssmDouble    Jdet2d,dt;
+-	IssmDouble    xyz_list[NUMVERTICES][3];
+-	IssmDouble	 xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble    basis[NUMVERTICES];
+-	IssmDouble    D_scalar;
++	int       i,j;
++	IssmDouble mixed_layer_capacity,thermal_exchange_velocity;
++	IssmDouble rho_ice,rho_water,heatcapacity;
++	IssmDouble Jdet2d,dt;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
++	IssmDouble basis[NUMVERTICES];
++	IssmDouble D_scalar;
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Element matrix and return if necessary*/
+@@ -3712,7 +3712,7 @@
+ 
+ 	/* Start looping on the number of gauss (nodes on the bedrock) */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3756,7 +3756,7 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries*/
+-	int    i,j,ig,found=0;
++	int    i,j,found=0;
+ 	int    friction_type,stabilization;
+ 	IssmDouble Jdet,phi,dt;
+ 	IssmDouble rho_ice,heatcapacity;
+@@ -3799,7 +3799,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(2,3);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3852,14 +3852,14 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
+-	IssmDouble     Jdet2d;
+-	IssmDouble     heatcapacity,h_pmp;
+-	IssmDouble     mixed_layer_capacity,thermal_exchange_velocity;
+-	IssmDouble     rho_ice,rho_water,pressure,dt,scalar_ocean;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble     basis[NUMVERTICES];
++	int        i,j;
++	IssmDouble Jdet2d;
++	IssmDouble heatcapacity,h_pmp;
++	IssmDouble mixed_layer_capacity,thermal_exchange_velocity;
++	IssmDouble rho_ice,rho_water,pressure,dt,scalar_ocean;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
++	IssmDouble basis[NUMVERTICES];
+ 	GaussPenta* gauss=NULL;
+ 
+ 	/* Ice/ocean heat exchange flux on ice shelf base */
+@@ -3881,7 +3881,7 @@
+ 
+ 	/* Start looping on the number of gauss 2d (nodes on the bedrock) */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -3909,16 +3909,16 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
++	int        i,j;
+ 	int        analysis_type;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     xyz_list_tria[NUMVERTICES2D][3]={0.0};
+-	IssmDouble     Jdet2d,dt;
+-	IssmDouble     rho_ice,heatcapacity,geothermalflux_value;
+-	IssmDouble     basalfriction,alpha2,vx,vy;
+-	IssmDouble     scalar,enthalpy,enthalpyup;
+-	IssmDouble     pressure,pressureup;
+-	IssmDouble     basis[NUMVERTICES];
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3]={0.0};
++	IssmDouble Jdet2d,dt;
++	IssmDouble rho_ice,heatcapacity,geothermalflux_value;
++	IssmDouble basalfriction,alpha2,vx,vy;
++	IssmDouble scalar,enthalpy,enthalpyup;
++	IssmDouble pressure,pressureup;
++	IssmDouble basis[NUMVERTICES];
+ 	Friction*  friction=NULL;
+ 	GaussPenta* gauss=NULL;
+ 	GaussPenta* gaussup=NULL;
+@@ -3949,7 +3949,7 @@
+ 	/* Start looping on the number of gauss 2d (nodes on the bedrock) */
+ 	gauss=new GaussPenta(0,1,2,2);
+ 	gaussup=new GaussPenta(3,4,5,2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 		gaussup->GaussPoint(ig);
+@@ -4019,7 +4019,7 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries*/
+-	int    i,j,ig,found=0;
++	int    i,j,found=0;
+ 	int    friction_type,stabilization;
+ 	IssmDouble Jdet,phi,dt;
+ 	IssmDouble rho_ice,heatcapacity;
+@@ -4055,7 +4055,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(2,3);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4106,14 +4106,14 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
+-	IssmDouble     Jdet2d;
+-	IssmDouble     mixed_layer_capacity,thermal_exchange_velocity;
+-	IssmDouble     rho_ice,rho_water,pressure,dt,scalar_ocean;
+-	IssmDouble     heatcapacity,t_pmp;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble     basis[NUMVERTICES];
++	int        i,j;
++	IssmDouble Jdet2d;
++	IssmDouble mixed_layer_capacity,thermal_exchange_velocity;
++	IssmDouble rho_ice,rho_water,pressure,dt,scalar_ocean;
++	IssmDouble heatcapacity,t_pmp;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
++	IssmDouble basis[NUMVERTICES];
+ 	GaussPenta* gauss=NULL;
+ 
+ 	/* Ice/ocean heat exchange flux on ice shelf base */
+@@ -4135,7 +4135,7 @@
+ 
+ 	/* Start looping on the number of gauss 2d (nodes on the bedrock) */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4163,15 +4163,15 @@
+ 	const int  numdof=NUMVERTICES*NDOF1;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
++	int        i,j;
+ 	int        analysis_type;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     xyz_list_tria[NUMVERTICES2D][3]={0.0};
+-	IssmDouble     Jdet2d,dt;
+-	IssmDouble     rho_ice,heatcapacity,geothermalflux_value;
+-	IssmDouble     basalfriction,alpha2,vx,vy;
+-	IssmDouble     basis[NUMVERTICES];
+-	IssmDouble     scalar;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3]={0.0};
++	IssmDouble Jdet2d,dt;
++	IssmDouble rho_ice,heatcapacity,geothermalflux_value;
++	IssmDouble basalfriction,alpha2,vx,vy;
++	IssmDouble basis[NUMVERTICES];
++	IssmDouble scalar;
+ 	Friction*  friction=NULL;
+ 	GaussPenta* gauss=NULL;
+ 
+@@ -4198,7 +4198,7 @@
+ 
+ 	/* Start looping on the number of gauss 2d (nodes on the bedrock) */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4568,17 +4568,17 @@
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
++	int        i,j;
+ 	bool       incomplete_adjoint;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     Jdet;
+-	IssmDouble     eps1dotdphii,eps1dotdphij;
+-	IssmDouble     eps2dotdphii,eps2dotdphij;
+-	IssmDouble     mu_prime;
+-	IssmDouble     epsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
+-	IssmDouble     eps1[3],eps2[3];
+-	IssmDouble     phi[NUMVERTICES];
+-	IssmDouble     dphi[3][NUMVERTICES];
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble Jdet;
++	IssmDouble eps1dotdphii,eps1dotdphij;
++	IssmDouble eps2dotdphii,eps2dotdphij;
++	IssmDouble mu_prime;
++	IssmDouble epsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
++	IssmDouble eps1[3],eps2[3];
++	IssmDouble phi[NUMVERTICES];
++	IssmDouble dphi[3][NUMVERTICES];
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Jacobian with regular Pattyn (first part of the Gateau derivative)*/
+@@ -4593,7 +4593,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4636,18 +4636,17 @@
+ 	const int    numdof=NDOF4*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
++	int        i,j;
+ 	bool       incomplete_adjoint;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     Jdet;
+-	IssmDouble     eps1dotdphii,eps1dotdphij;
+-	IssmDouble     eps2dotdphii,eps2dotdphij;
+-	IssmDouble     eps3dotdphii,eps3dotdphij;
+-	IssmDouble     mu_prime;
+-	IssmDouble     epsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
+-	IssmDouble     eps1[3],eps2[3],eps3[3];
+-	IssmDouble     phi[NUMVERTICES];
+-	IssmDouble     dphi[3][NUMVERTICES];
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble Jdet;
++	IssmDouble eps1dotdphii,eps1dotdphij;
++	IssmDouble eps2dotdphii,eps2dotdphij;
++	IssmDouble eps3dotdphii,eps3dotdphij;
++	IssmDouble mu_prime;
++	IssmDouble epsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
++	IssmDouble eps1[3],eps2[3],eps3[3];
++	IssmDouble dphi[3][NUMVERTICES];
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Jacobian with regular Stokes (first part of the Gateau derivative)*/
+@@ -4663,7 +4662,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4890,19 +4889,19 @@
+ /*FUNCTION Penta::GradjDragPattyn {{{*/
+ void  Penta::GradjDragPattyn(Vector<IssmDouble>* gradient,int control_index){
+ 
+-	int        i,j,ig;
++	int        i,j;
+ 	int        analysis_type;
+ 	int        vertexpidlist[NUMVERTICES];
+-	IssmDouble     vx,vy,lambda,mu,alpha_complement,Jdet;
+-	IssmDouble     bed,thickness,Neff,drag;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     xyz_list_tria[NUMVERTICES2D][3]={0.0};
+-	IssmDouble     dk[NDOF3]; 
+-	IssmDouble     grade_g[NUMVERTICES]={0.0};
+-	IssmDouble     grade_g_gaussian[NUMVERTICES];
+-	IssmDouble     basis[6];
++	IssmDouble vx,vy,lambda,mu,alpha_complement,Jdet;
++	IssmDouble bed,thickness,Neff,drag;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3]={0.0};
++	IssmDouble dk[NDOF3]; 
++	IssmDouble grade_g[NUMVERTICES]={0.0};
++	IssmDouble grade_g_gaussian[NUMVERTICES];
++	IssmDouble basis[6];
+ 	Friction*  friction=NULL;
+-	GaussPenta  *gauss=NULL;
++	GaussPenta *gauss=NULL;
+ 
+ 	/*Gradient is 0 if on shelf or not on bed*/
+ 	if(IsFloating() || !IsOnBed()) return;
+@@ -4923,7 +4922,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(0,1,2,4);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -4961,19 +4960,19 @@
+ /*FUNCTION Penta::GradjDragStokes {{{*/
+ void  Penta::GradjDragStokes(Vector<IssmDouble>* gradient,int control_index){
+ 
+-	int        i,j,ig;
++	int        i,j;
+ 	int        analysis_type;
+ 	int        vertexpidlist[NUMVERTICES];
+-	IssmDouble     bed,thickness,Neff;
+-	IssmDouble     lambda,mu,xi,Jdet,vx,vy,vz;
+-	IssmDouble     alpha_complement,drag;
+-	IssmDouble     surface_normal[3],bed_normal[3];
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     xyz_list_tria[NUMVERTICES2D][3]={0.0};
+-	IssmDouble     dk[NDOF3]; 
+-	IssmDouble     basis[6];
+-	IssmDouble     grade_g[NUMVERTICES]={0.0};
+-	IssmDouble     grade_g_gaussian[NUMVERTICES];
++	IssmDouble bed,thickness,Neff;
++	IssmDouble lambda,mu,xi,Jdet,vx,vy,vz;
++	IssmDouble alpha_complement,drag;
++	IssmDouble surface_normal[3],bed_normal[3];
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3]={0.0};
++	IssmDouble dk[NDOF3]; 
++	IssmDouble basis[6];
++	IssmDouble grade_g[NUMVERTICES]={0.0};
++	IssmDouble grade_g_gaussian[NUMVERTICES];
+ 	Friction*  friction=NULL;
+ 	GaussPenta* gauss=NULL;
+ 
+@@ -4998,7 +4997,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(0,1,2,4);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -5751,17 +5750,17 @@
+ 	const int numdoftotal = 2 *NDOF2*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int         i,j,ig;
+-	IssmDouble      Jdet;
+-	IssmDouble      viscosity,oldviscosity,newviscosity,viscosity_overshoot; //viscosity
+-	IssmDouble      epsilon[5],oldepsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
+-	IssmDouble      xyz_list[NUMVERTICES][3];
+-	IssmDouble      B[3][numdofp];
+-	IssmDouble      Bprime[3][numdofm];
+-	IssmDouble      D[3][3]={0.0};            // material matrix, simple scalar matrix.
+-	IssmDouble      D_scalar;
+-	IssmDouble      Ke_gg[numdofp][numdofm]={0.0}; //local element stiffness matrix 
+-	IssmDouble      Ke_gg_gaussian[numdofp][numdofm]; //stiffness matrix evaluated at the gaussian point.
++	int         i,j;
++	IssmDouble  Jdet;
++	IssmDouble  viscosity,oldviscosity,newviscosity,viscosity_overshoot; //viscosity
++	IssmDouble  epsilon[5],oldepsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  B[3][numdofp];
++	IssmDouble  Bprime[3][numdofm];
++	IssmDouble  D[3][3]={0.0};            // material matrix, simple scalar matrix.
++	IssmDouble  D_scalar;
++	IssmDouble  Ke_gg[numdofp][numdofm]={0.0}; //local element stiffness matrix 
++	IssmDouble  Ke_gg_gaussian[numdofp][numdofm]; //stiffness matrix evaluated at the gaussian point.
+ 	GaussPenta *gauss=NULL;
+ 	GaussTria  *gauss_tria=NULL;
+ 	Node       *node_list[numnodes];
+@@ -5796,7 +5795,7 @@
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+ 	gauss_tria=new GaussTria();
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 		gauss->SynchronizeGaussTria(gauss_tria);
+@@ -5843,18 +5842,18 @@
+ 	const int numdoftotal = NDOF4 *NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int       i,j,ig,analysis_type;
+-	IssmDouble    Jdet2d,slope_magnitude,alpha2;
+-	IssmDouble    xyz_list[NUMVERTICES][3];
+-	IssmDouble    xyz_list_tria[NUMVERTICES2D][3]={0.0};
+-	IssmDouble    slope[3]={0.0,0.0,0.0};
+-	IssmDouble    MAXSLOPE=.06; // 6 %
+-	IssmDouble    MOUNTAINKEXPONENT=10;
+-	IssmDouble    L[2][numdof];
+-	IssmDouble    DL[2][2]                  ={{ 0,0 },{0,0}}; //for basal drag
+-	IssmDouble    DL_scalar;
+-	IssmDouble    Ke_gg[numdof][numdof]     ={0.0};
+-	IssmDouble    Ke_gg_gaussian[numdof][numdof]; //stiffness matrix contribution from drag
++	int       i,j,analysis_type;
++	IssmDouble Jdet2d,slope_magnitude,alpha2;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3]={0.0};
++	IssmDouble slope[3]={0.0,0.0,0.0};
++	IssmDouble MAXSLOPE=.06; // 6 %
++	IssmDouble MOUNTAINKEXPONENT=10;
++	IssmDouble L[2][numdof];
++	IssmDouble DL[2][2]                  ={{ 0,0 },{0,0}}; //for basal drag
++	IssmDouble DL_scalar;
++	IssmDouble Ke_gg[numdof][numdof]     ={0.0};
++	IssmDouble Ke_gg_gaussian[numdof][numdof]; //stiffness matrix contribution from drag
+ 	Friction  *friction = NULL;
+ 	GaussPenta *gauss=NULL;
+ 	Node       *node_list[numnodes];
+@@ -5889,7 +5888,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -5956,22 +5955,22 @@
+ 	const int numdoftotal = 2 *numdofm+numdofs;
+ 
+ 	/*Intermediaries */
+-	int         i,j,ig;
+-	IssmDouble      Jdet;
+-	IssmDouble      viscosity,stokesreconditioning; //viscosity
+-	IssmDouble      epsilon[6]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
+-	IssmDouble      xyz_list[NUMVERTICES][3];
+-	IssmDouble      B[4][numdofs+3];
+-	IssmDouble      Bprime[4][numdofm];
+-	IssmDouble      B2[3][numdofm];
+-	IssmDouble      Bprime2[3][numdofs+3];
+-	IssmDouble      D[4][4]={0.0};            // material matrix, simple scalar matrix.
+-	IssmDouble      D2[3][3]={0.0};            // material matrix, simple scalar matrix.
+-	IssmDouble      D_scalar;
+-	IssmDouble      Ke_gg[numdofs][numdofm]={0.0}; //local element stiffness matrix 
+-	IssmDouble      Ke_gg2[numdofm][numdofs]={0.0}; //local element stiffness matrix 
+-	IssmDouble      Ke_gg_gaussian[numdofs+3][numdofm]; //stiffness matrix evaluated at the gaussian point.
+-	IssmDouble      Ke_gg_gaussian2[numdofm][numdofs+3]; //stiffness matrix evaluated at the gaussian point.
++	int         i,j;
++	IssmDouble Jdet;
++	IssmDouble viscosity,stokesreconditioning; //viscosity
++	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble B[4][numdofs+3];
++	IssmDouble Bprime[4][numdofm];
++	IssmDouble B2[3][numdofm];
++	IssmDouble Bprime2[3][numdofs+3];
++	IssmDouble D[4][4]={0.0};            // material matrix, simple scalar matrix.
++	IssmDouble D2[3][3]={0.0};            // material matrix, simple scalar matrix.
++	IssmDouble D_scalar;
++	IssmDouble Ke_gg[numdofs][numdofm]={0.0}; //local element stiffness matrix 
++	IssmDouble Ke_gg2[numdofm][numdofs]={0.0}; //local element stiffness matrix 
++	IssmDouble Ke_gg_gaussian[numdofs+3][numdofm]; //stiffness matrix evaluated at the gaussian point.
++	IssmDouble Ke_gg_gaussian2[numdofm][numdofs+3]; //stiffness matrix evaluated at the gaussian point.
+ 	GaussPenta *gauss=NULL;
+ 	GaussTria  *gauss_tria=NULL;
+ 	Node       *node_list[numnodes];
+@@ -6005,7 +6004,7 @@
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+ 	gauss_tria=new GaussTria();
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 		gauss->SynchronizeGaussTria(gauss_tria);
+@@ -6062,22 +6061,22 @@
+ 	const int numdoftot = numdof+numdofm;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
++	int        i,j;
+ 	int        analysis_type,approximation;
+-	IssmDouble     stokesreconditioning;
+-	IssmDouble     viscosity,alpha2_gauss,Jdet2d;
+-	IssmDouble	  bed_normal[3];
+-	IssmDouble     epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble	  xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble     LMacAyealStokes[8][numdof2dm];
+-	IssmDouble     LprimeMacAyealStokes[8][numdof2d];
+-	IssmDouble     DLMacAyealStokes[8][8]={0.0};
+-	IssmDouble     LStokesMacAyeal[4][numdof2d];
+-	IssmDouble     LprimeStokesMacAyeal[4][numdof2dm];
+-	IssmDouble     DLStokesMacAyeal[4][4]={0.0};
+-	IssmDouble     Ke_drag_gaussian[numdof2dm][numdof2d];
+-	IssmDouble     Ke_drag_gaussian2[numdof2d][numdof2dm];
++	IssmDouble stokesreconditioning;
++	IssmDouble viscosity,alpha2_gauss,Jdet2d;
++	IssmDouble bed_normal[3];
++	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
++	IssmDouble LMacAyealStokes[8][numdof2dm];
++	IssmDouble LprimeMacAyealStokes[8][numdof2d];
++	IssmDouble DLMacAyealStokes[8][8]={0.0};
++	IssmDouble LStokesMacAyeal[4][numdof2d];
++	IssmDouble LprimeStokesMacAyeal[4][numdof2dm];
++	IssmDouble DLStokesMacAyeal[4][4]={0.0};
++	IssmDouble Ke_drag_gaussian[numdof2dm][numdof2d];
++	IssmDouble Ke_drag_gaussian2[numdof2d][numdof2dm];
+ 	Friction*  friction=NULL;
+ 	GaussPenta *gauss=NULL;
+ 	Node       *node_list[numnodes];
+@@ -6113,7 +6112,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -6363,7 +6362,7 @@
+ 	const int    numdof2d=2*NUMVERTICES2D;
+ 
+ 	/*Intermediaries */
+-	int         i,j,ig,approximation;
++	int         i,j,approximation;
+ 	IssmDouble  Jdet;
+ 	IssmDouble  viscosity , oldviscosity, newviscosity, viscosity_overshoot;
+ 	IssmDouble  epsilon[5],oldepsilon[5];       /* epsilon=[exx,eyy,exy,exz,eyz];*/
+@@ -6399,7 +6398,7 @@
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+ 	gauss_tria=new GaussTria();
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 		gauss->SynchronizeGaussTria(gauss_tria);
+@@ -6614,16 +6613,16 @@
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
++	int        i,j;
+ 	int        approximation;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     Jdet;
+-	IssmDouble     viscosity,oldviscosity,newviscosity,viscosity_overshoot; //viscosity
+-	IssmDouble     epsilon[5],oldepsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
+-	IssmDouble     D_scalar;
+-	IssmDouble     D[5][5]={0.0};            // material matrix, simple scalar matrix.
+-	IssmDouble     B[5][numdof];
+-	IssmDouble     Bprime[5][numdof];
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble Jdet;
++	IssmDouble viscosity,oldviscosity,newviscosity,viscosity_overshoot; //viscosity
++	IssmDouble epsilon[5],oldepsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
++	IssmDouble D_scalar;
++	IssmDouble D[5][5]={0.0};            // material matrix, simple scalar matrix.
++	IssmDouble B[5][numdof];
++	IssmDouble Bprime[5][numdof];
+ 	Tria*      tria=NULL;
+ 	GaussPenta *gauss=NULL;
+ 
+@@ -6641,7 +6640,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -6679,17 +6678,17 @@
+ 	const int numdof   = NDOF2*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int       i,j,ig;
++	int       i,j;
+ 	int       analysis_type;
+-	IssmDouble    xyz_list[NUMVERTICES][3];
+-	IssmDouble    xyz_list_tria[NUMVERTICES2D][3]={0.0};
+-	IssmDouble    slope_magnitude,alpha2,Jdet;
+-	IssmDouble    slope[3]={0.0,0.0,0.0};
+-	IssmDouble    MAXSLOPE=.06; // 6 %
+-	IssmDouble    MOUNTAINKEXPONENT=10;
+-	IssmDouble    L[2][numdof];
+-	IssmDouble    DL[2][2]={{ 0,0 },{0,0}}; //for basal drag
+-	IssmDouble    DL_scalar;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3]={0.0};
++	IssmDouble slope_magnitude,alpha2,Jdet;
++	IssmDouble slope[3]={0.0,0.0,0.0};
++	IssmDouble MAXSLOPE=.06; // 6 %
++	IssmDouble MOUNTAINKEXPONENT=10;
++	IssmDouble L[2][numdof];
++	IssmDouble DL[2][2]={{ 0,0 },{0,0}}; //for basal drag
++	IssmDouble DL_scalar;
+ 	Friction  *friction = NULL;
+ 	GaussPenta *gauss=NULL;
+ 
+@@ -6712,7 +6711,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -6781,15 +6780,15 @@
+ ElementMatrix* Penta::CreateKMatrixDiagnosticStokesViscous(void){
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig,approximation;
+-	IssmDouble     Jdet,viscosity,stokesreconditioning;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble     B[8][27];
+-	IssmDouble     B_prime[8][27];
+-	IssmDouble     D_scalar;
+-	IssmDouble     D[8][8]={0.0};
+-	IssmDouble     Ke_temp[27][27]={0.0}; //for the six nodes and the bubble 
++	int        i,j,approximation;
++	IssmDouble Jdet,viscosity,stokesreconditioning;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble B[8][27];
++	IssmDouble B_prime[8][27];
++	IssmDouble D_scalar;
++	IssmDouble D[8][8]={0.0};
++	IssmDouble Ke_temp[27][27]={0.0}; //for the six nodes and the bubble 
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*If on water or not Stokes, skip stiffness: */
+@@ -6806,7 +6805,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -6846,16 +6845,16 @@
+ 	const int numdof2d=NUMVERTICES2D*NDOF4;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
++	int        i,j;
+ 	int        analysis_type,approximation;
+-	IssmDouble     alpha2,Jdet2d;
+-	IssmDouble     stokesreconditioning,viscosity;
+-	IssmDouble     epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble	  xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble     LStokes[2][numdof2d];
+-	IssmDouble     DLStokes[2][2]={0.0};
+-	IssmDouble     Ke_drag_gaussian[numdof2d][numdof2d];
++	IssmDouble alpha2,Jdet2d;
++	IssmDouble stokesreconditioning,viscosity;
++	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
++	IssmDouble LStokes[2][numdof2d];
++	IssmDouble DLStokes[2][2]={0.0};
++	IssmDouble Ke_drag_gaussian[numdof2d][numdof2d];
+ 	Friction*  friction=NULL;
+ 	GaussPenta *gauss=NULL;
+ 
+@@ -6878,7 +6877,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -6932,12 +6931,12 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int         i,j,ig;
+-	IssmDouble      Jdet;
+-	IssmDouble      xyz_list[NUMVERTICES][3];
+-	IssmDouble      B[NDOF1][NUMVERTICES];
+-	IssmDouble      Bprime[NDOF1][NUMVERTICES];
+-	IssmDouble      DL_scalar;
++	int         i,j;
++	IssmDouble  Jdet;
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  B[NDOF1][NUMVERTICES];
++	IssmDouble  Bprime[NDOF1][NUMVERTICES];
++	IssmDouble  DL_scalar;
+ 	GaussPenta  *gauss=NULL;
+ 
+ 	/*Initialize Element matrix*/
+@@ -6948,7 +6947,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(2,2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -6978,12 +6977,12 @@
+ 	const int numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int       i,j,ig;
+-	IssmDouble    xyz_list[NUMVERTICES][3];
+-	IssmDouble    xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble    surface_normal[3];
+-	IssmDouble    Jdet2d,DL_scalar;
+-	IssmDouble    basis[NUMVERTICES];
++	int       i,j;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
++	IssmDouble surface_normal[3];
++	IssmDouble Jdet2d,DL_scalar;
++	IssmDouble basis[NUMVERTICES];
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Element matrix*/
+@@ -6996,7 +6995,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(3,4,5,2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -7037,15 +7036,15 @@
+ 	const int   numdof=NUMVERTICES*NDOF4;
+ 
+ 	/*Intermediaries */
+-	int         i,j,ig;
++	int         i,j;
+ 	int         approximation;
+-	IssmDouble      viscosity,Jdet;
+-	IssmDouble      stokesreconditioning;
+-	IssmDouble      epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble      dw[3];
+-	IssmDouble      xyz_list[NUMVERTICES][3];
+-	IssmDouble      basis[6]; //for the six nodes of the penta
+-	IssmDouble      dbasis[3][6]; //for the six nodes of the penta
++	IssmDouble  viscosity,Jdet;
++	IssmDouble  stokesreconditioning;
++	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble  dw[3];
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  basis[6]; //for the six nodes of the penta
++	IssmDouble  dbasis[3][6]; //for the six nodes of the penta
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Element vector and return if necessary*/
+@@ -7063,7 +7062,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -7099,17 +7098,17 @@
+ 	const int numdof=NUMVERTICES*NDOF4;
+ 
+ 	/*Intermediaries*/
+-	int         i,j,ig;
++	int         i,j;
+ 	int         approximation,analysis_type;
+-	IssmDouble      Jdet,Jdet2d;
+-	IssmDouble      stokesreconditioning;
+-	IssmDouble	   bed_normal[3];
+-	IssmDouble      epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble      viscosity, w, alpha2_gauss;
+-	IssmDouble      dw[3];
+-	IssmDouble	   xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble      xyz_list[NUMVERTICES][3];
+-	IssmDouble      basis[6]; //for the six nodes of the penta
++	IssmDouble  Jdet,Jdet2d;
++	IssmDouble  stokesreconditioning;
++	IssmDouble	bed_normal[3];
++	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble  viscosity, w, alpha2_gauss;
++	IssmDouble  dw[3];
++	IssmDouble	xyz_list_tria[NUMVERTICES2D][3];
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  basis[6]; //for the six nodes of the penta
+ 	Tria*       tria=NULL;
+ 	Friction*   friction=NULL;
+ 	GaussPenta  *gauss=NULL;
+@@ -7136,7 +7135,7 @@
+ 
+ 	/* Start looping on the number of gauss 2d (nodes on the bedrock) */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -7188,15 +7187,15 @@
+ 	const int   numdof=NUMVERTICES*NDOF4;
+ 
+ 	/*Intermediaries */
+-	int         i,j,ig;
++	int         i,j;
+ 	int         approximation;
+-	IssmDouble      viscosity,Jdet;
+-	IssmDouble      stokesreconditioning;
+-	IssmDouble      epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble      dw[3];
+-	IssmDouble      xyz_list[NUMVERTICES][3];
+-	IssmDouble      basis[6]; //for the six nodes of the penta
+-	IssmDouble      dbasis[3][6]; //for the six nodes of the penta
++	IssmDouble  viscosity,Jdet;
++	IssmDouble  stokesreconditioning;
++	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble  dw[3];
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  basis[6]; //for the six nodes of the penta
++	IssmDouble  dbasis[3][6]; //for the six nodes of the penta
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Element vector and return if necessary*/
+@@ -7214,7 +7213,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -7250,17 +7249,17 @@
+ 	const int numdof=NUMVERTICES*NDOF4;
+ 
+ 	/*Intermediaries*/
+-	int         i,j,ig;
++	int         i,j;
+ 	int         approximation,analysis_type;
+-	IssmDouble      Jdet,Jdet2d;
+-	IssmDouble      stokesreconditioning;
+-	IssmDouble	   bed_normal[3];
+-	IssmDouble      epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble      viscosity, w, alpha2_gauss;
+-	IssmDouble      dw[3];
+-	IssmDouble	   xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble      xyz_list[NUMVERTICES][3];
+-	IssmDouble      basis[6]; //for the six nodes of the penta
++	IssmDouble  Jdet,Jdet2d;
++	IssmDouble  stokesreconditioning;
++	IssmDouble	bed_normal[3];
++	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble  viscosity, w, alpha2_gauss;
++	IssmDouble  dw[3];
++	IssmDouble	xyz_list_tria[NUMVERTICES2D][3];
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  basis[6]; //for the six nodes of the penta
+ 	Tria*       tria=NULL;
+ 	Friction*   friction=NULL;
+ 	GaussPenta  *gauss=NULL;
+@@ -7287,7 +7286,7 @@
+ 
+ 	/* Start looping on the number of gauss 2d (nodes on the bedrock) */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -7401,17 +7400,17 @@
+ 	const int numdofs=NDOF2*NUMVERTICES;
+ 
+ 	/*Intermediaries*/
+-	int          i,j,k,ig;
++	int          i,j;
+ 	int          node0,node1;
+ 	int          connectivity[2];
+-	IssmDouble       Jdet;
+-	IssmDouble       xyz_list[NUMVERTICES][3];
+-	IssmDouble       xyz_list_segment[2][3];
+-	IssmDouble       z_list[NUMVERTICES];
+-	IssmDouble       z_segment[2],slope[2];
+-	IssmDouble       slope2,constant_part;
+-	IssmDouble       rho_ice,gravity,n,B;
+-	IssmDouble       ub,vb,z_g,surface,thickness;
++	IssmDouble   Jdet;
++	IssmDouble   xyz_list[NUMVERTICES][3];
++	IssmDouble   xyz_list_segment[2][3];
++	IssmDouble   z_list[NUMVERTICES];
++	IssmDouble   slope[2];
++	IssmDouble   slope2,constant_part;
++	IssmDouble   rho_ice,gravity,n,B;
++	IssmDouble   ub,vb,z_g,surface,thickness;
+ 	GaussPenta*  gauss=NULL;
+ 
+ 	/*Initialize Element vector*/
+@@ -7444,7 +7443,7 @@
+ 
+ 		/*Loop on the Gauss points: */
+ 		gauss=new GaussPenta(node0,node1,3);
+-		for(ig=gauss->begin();ig<gauss->end();ig++){
++		for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 			gauss->GaussPoint(ig);
+ 
+ 			slopex_input->GetInputValue(&slope[0],gauss);
+@@ -7517,12 +7516,12 @@
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+ 	/*Intermediaries*/
+-	int         i,j,ig;
+-	IssmDouble      Jdet;
+-	IssmDouble      slope[3]; //do not put 2! this goes into GetInputDerivativeValue, which addresses slope[3] also!
+-	IssmDouble      driving_stress_baseline,thickness;
+-	IssmDouble      xyz_list[NUMVERTICES][3];
+-	IssmDouble      basis[6];
++	int         i,j;
++	IssmDouble  Jdet;
++	IssmDouble  slope[3]; //do not put 2! this goes into GetInputDerivativeValue, which addresses slope[3] also!
++	IssmDouble  driving_stress_baseline,thickness;
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble  basis[6];
+ 	GaussPenta  *gauss=NULL;
+ 
+ 	/*Initialize Element vector*/
+@@ -7535,7 +7534,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(2,3);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -7579,21 +7578,20 @@
+ 	const int numdofbubble=NDOF4*NUMVERTICES+NDOF3*1;
+ 
+ 	/*Intermediaries*/
+-	int        i,j,ig;
++	int        i,j;
+ 	int        approximation;
+-	IssmDouble     Jdet,viscosity;
+-	IssmDouble     gravity,rho_ice,stokesreconditioning;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+-	IssmDouble     l1l7[7]; //for the six nodes and the bubble 
+-	IssmDouble     B[8][numdofbubble];
+-	IssmDouble     B_prime[8][numdofbubble];
+-	IssmDouble     B_prime_bubble[8][3];
+-	IssmDouble     D[8][8]={0.0};
+-	IssmDouble     D_scalar;
+-	IssmDouble     Pe_gaussian[numdofbubble]={0.0}; //for the six nodes and the bubble 
+-	IssmDouble     Ke_temp[numdofbubble][3]={0.0}; //for the six nodes and the bubble 
+-	IssmDouble     Ke_gaussian[numdofbubble][3];
++	IssmDouble Jdet,viscosity;
++	IssmDouble gravity,rho_ice,stokesreconditioning;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
++	IssmDouble l1l7[7]; //for the six nodes and the bubble 
++	IssmDouble B[8][numdofbubble];
++	IssmDouble B_prime[8][numdofbubble];
++	IssmDouble B_prime_bubble[8][3];
++	IssmDouble D[8][8]={0.0};
++	IssmDouble D_scalar;
++	IssmDouble Pe_gaussian[numdofbubble]={0.0}; //for the six nodes and the bubble 
++	IssmDouble Ke_temp[numdofbubble][3]={0.0}; //for the six nodes and the bubble 
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Element vector and return if necessary*/
+@@ -7612,7 +7610,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -7656,16 +7654,16 @@
+ ElementVector* Penta::CreatePVectorDiagnosticStokesShelf(void){
+ 
+ 	/*Intermediaries*/
+-	int         i,j,ig;
++	int         i,j;
+ 	int         approximation,shelf_dampening;
+-	IssmDouble      gravity,rho_water,bed,water_pressure;
+-	IssmDouble      damper,normal_vel,vx,vy,vz,dt;
+-	IssmDouble		xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble      xyz_list[NUMVERTICES][3];
+-	IssmDouble		bed_normal[3];
+-	IssmDouble      dz[3];
+-	IssmDouble      basis[6]; //for the six nodes of the penta
+-	IssmDouble      Jdet2d;
++	IssmDouble  gravity,rho_water,bed,water_pressure;
++	IssmDouble  damper,normal_vel,vx,vy,vz,dt;
++	IssmDouble	xyz_list_tria[NUMVERTICES2D][3];
++	IssmDouble  xyz_list[NUMVERTICES][3];
++	IssmDouble	bed_normal[3];
++	IssmDouble  dz[3];
++	IssmDouble  basis[6]; //for the six nodes of the penta
++	IssmDouble  Jdet2d;
+ 	GaussPenta  *gauss=NULL;
+ 
+ 	/*Initialize Element vector and return if necessary*/
+@@ -7688,7 +7686,7 @@
+ 
+ 	/* Start looping on the number of gauss 2d (nodes on the bedrock) */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -7741,7 +7739,6 @@
+ 	const int  numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries*/
+-	int        i,ig;
+ 	int        approximation;
+ 	IssmDouble     Jdet;
+ 	IssmDouble     xyz_list[NUMVERTICES][3];
+@@ -7765,7 +7762,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(2,2);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -7782,7 +7779,7 @@
+ 		dudx=du[0];
+ 		dvdy=dv[1];
+ 
+-		for (i=0;i<numdof;i++) pe->values[i] += (dudx+dvdy+dwdz)*Jdet*gauss->weight*basis[i];
++		for(int i=0;i<numdof;i++) pe->values[i] += (dudx+dvdy+dwdz)*Jdet*gauss->weight*basis[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -7797,14 +7794,14 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
++	int        i,j;
+ 	int        approximation;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     xyz_list_tria[NUMVERTICES2D][3];
+-	IssmDouble     Jdet2d;
+-	IssmDouble     vx,vy,vz,dbdx,dbdy,basalmeltingvalue;
+-	IssmDouble     slope[3];
+-	IssmDouble     basis[NUMVERTICES];
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
++	IssmDouble Jdet2d;
++	IssmDouble vx,vy,vz,dbdx,dbdy,basalmeltingvalue;
++	IssmDouble slope[3];
++	IssmDouble basis[NUMVERTICES];
+ 	GaussPenta* gauss=NULL;
+ 
+ 	if (!IsOnBed()) return NULL;
+@@ -7827,7 +7824,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(0,1,2,2);
+-	for(ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -7915,16 +7912,15 @@
+ 	const int    numdof=NDOF2*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     Jdet;
+-	IssmDouble     eps1dotdphii,eps1dotdphij;
+-	IssmDouble     eps2dotdphii,eps2dotdphij;
+-	IssmDouble     mu_prime;
+-	IssmDouble     epsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
+-	IssmDouble     eps1[3],eps2[3];
+-	IssmDouble     phi[NUMVERTICES];
+-	IssmDouble     dphi[3][NUMVERTICES];
++	int        i,j;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble Jdet;
++	IssmDouble eps1dotdphii,eps1dotdphij;
++	IssmDouble eps2dotdphii,eps2dotdphij;
++	IssmDouble mu_prime;
++	IssmDouble epsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
++	IssmDouble eps1[3],eps2[3];
++	IssmDouble dphi[3][NUMVERTICES];
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Jacobian with regular Pattyn (first part of the Gateau derivative)*/
+@@ -7937,7 +7933,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+@@ -7980,17 +7976,16 @@
+ 	const int    numdof=NDOF4*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,ig;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     Jdet;
+-	IssmDouble     eps1dotdphii,eps1dotdphij;
+-	IssmDouble     eps2dotdphii,eps2dotdphij;
+-	IssmDouble     eps3dotdphii,eps3dotdphij;
+-	IssmDouble     mu_prime;
+-	IssmDouble     epsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
+-	IssmDouble     eps1[3],eps2[3],eps3[3];
+-	IssmDouble     phi[NUMVERTICES];
+-	IssmDouble     dphi[3][NUMVERTICES];
++	int        i,j;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble Jdet;
++	IssmDouble eps1dotdphii,eps1dotdphij;
++	IssmDouble eps2dotdphii,eps2dotdphij;
++	IssmDouble eps3dotdphii,eps3dotdphij;
++	IssmDouble mu_prime;
++	IssmDouble epsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
++	IssmDouble eps1[3],eps2[3],eps3[3];
++	IssmDouble dphi[3][NUMVERTICES];
+ 	GaussPenta *gauss=NULL;
+ 
+ 	/*Initialize Jacobian with regular Stokes (first part of the Gateau derivative)*/
+@@ -8004,7 +7999,7 @@
+ 
+ 	/* Start  looping on the number of gaussian points: */
+ 	gauss=new GaussPenta(5,5);
+-	for (ig=gauss->begin();ig<gauss->end();ig++){
++	for(int ig=gauss->begin();ig<gauss->end();ig++){
+ 
+ 		gauss->GaussPoint(ig);
+ 
+Index: ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp	(revision 13787)
+@@ -32,12 +32,12 @@
+ #ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
+ 
+ //Dakota headers
+-#include "DakotaResponse.H"
+-#include "ParamResponsePair.H"
+-#include "DakotaPlugin.h"
+-#include "system_defs.h"
+-#include "ProblemDescDB.H"
+-#include "ParallelLibrary.H"
++#include <DakotaResponse.H>
++#include <ParamResponsePair.H>
++#include <DakotaPlugin.h>
++#include <system_defs.h>
++#include <ProblemDescDB.H>
++#include <ParallelLibrary.H>
+ 
+ namespace SIM {
+ 
+Index: ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.h	(revision 13786)
++++ ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.h	(revision 13787)
+@@ -7,11 +7,9 @@
+ #ifdef _HAVE_DAKOTA_ //only works if dakota library has been compiled in.
+ 
+ /*Headers:*/
+-/*{{{*/
+-#include "DirectApplicInterface.H"
++#include <DirectApplicInterface.H>
+ #include "../../toolkits/toolkits.h"
+ #include "../../classes/classes.h"
+-/*}}}*/
+ 
+ namespace SIM {
+ 
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13786)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13787)
+@@ -16,9 +16,8 @@
+ 
+ #include "./classes.h"
+ #include "../io/io.h"
+-#include "./Container/Parameters.h"
++#include "../Container/Parameters.h"
+ #include "../shared/shared.h"
+-#include "../io/io.h"
+ #include "../include/include.h"
+ 
+ /*FUNCTION IoModel::IoModel(){{{*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13787-13788.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13787-13788.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13787-13788.diff	(revision 13980)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp	(revision 13787)
++++ ../trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp	(revision 13788)
+@@ -34,10 +34,10 @@
+ //Dakota headers
+ #include <DakotaResponse.H>
+ #include <ParamResponsePair.H>
+-#include <DakotaPlugin.h>
+ #include <system_defs.h>
+ #include <ProblemDescDB.H>
+ #include <ParallelLibrary.H>
++#include "./DakotaPlugin.h"
+ 
+ namespace SIM {
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13788-13789.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13788-13789.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13788-13789.diff	(revision 13980)
@@ -0,0 +1,79 @@
+Index: ../trunk-jpl/src/m/inversions/misfit.m
+===================================================================
+--- ../trunk-jpl/src/m/inversions/misfit.m	(revision 13788)
++++ ../trunk-jpl/src/m/inversions/misfit.m	(revision 13789)
+@@ -12,16 +12,20 @@
+ 	elements=md.mesh.elements;
+ 	x=md.mesh.x;
+ 	y=md.mesh.y;
+-	vx=md.initialization.vx;
+-	vy=md.initialization.vy;
++	%vx=md.initialization.vx;
++	%vy=md.initialization.vy;
++	vx=md.results.DiagnosticSolution.Vx;
++	vy=md.results.DiagnosticSolution.Vy;
+ 	vx_obs=md.inversion.vx_obs;
+ 	vy_obs=md.inversion.vy_obs;
+ else
+ 	elements=md.mesh.elements2d;
+ 	x=md.mesh.x2d;
+ 	y=md.mesh.y2d;
+-	vx=project2d(md,md.initialization.vx,md.mesh.numberoflayers);
+-	vy=project2d(md,md.initialization.vy,md.mesh.numberoflayers);
++	%vx=project2d(md,md.initialization.vx,md.mesh.numberoflayers);
++	%vy=project2d(md,md.initialization.vy,md.mesh.numberoflayers);
++	vx=project2d(md,md.results.DiagnosticSolution.Vx,md.mesh.numberoflayers);
++	vy=project2d(md,md.results.DiagnosticSolution.Vy,md.mesh.numberoflayers);
+ 	vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers);
+ 	vy_obs=project2d(md,md.inversion.vy_obs,md.mesh.numberoflayers);
+ end
+Index: ../trunk-jpl/src/m/plot/northarrow.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/northarrow.m	(revision 13788)
++++ ../trunk-jpl/src/m/plot/northarrow.m	(revision 13789)
+@@ -73,4 +73,4 @@
+ %Text North
+ xN=max([A(1) D(1) E(1) F(1) G(1)])+ratio/3*abs(lengtharrow);
+ yN=mean([A(2) F(2) H(2)]);
+-text(xN,yN,'North','FontSize',fontsize,'FontWeight','b');
++text(xN,yN,'N','FontSize',fontsize,'FontWeight','b');
+Index: ../trunk-jpl/startup.py
+===================================================================
+--- ../trunk-jpl/startup.py	(revision 13788)
++++ ../trunk-jpl/startup.py	(revision 13789)
+@@ -15,32 +15,15 @@
+ if(ISSM_DIR==None):
+ 	raise NameError('"ISSM_DIR" environment variable is empty! You should define ISSM_DIR in your .cshrc or .bashrc!')
+ 
+-#Now add all issm code paths necessary to run issm smoothly. 
+-#We capture the error output, so that we can warn the user to update 
+-#the variable ISSM_DIR in this file, in case it is not correctly setup. 
+-
+-#ISSM path. Go through src/py and load everything we find  that looks like a python file
+-for root,dirs,files in os.walk(ISSM_DIR+ '/src/py'):
+-	if '.svn' in dirs:
+-		dirs.remove('.svn')
+-	for file in files:
+-		if file.find(".py") != -1:
+-			if file.find(".pyc") == -1:
+-				#add to path 
+-				sys.path.append(root)
+-				file=os.path.splitext(file)[0]
+-				#__import__(file)
+-
++#Go through src/m and append any directory that contains a *.py file to PATH 
+ for root,dirs,files in os.walk(ISSM_DIR+ '/src/m'):
+ 	if '.svn' in dirs:
+ 		dirs.remove('.svn')
+ 	for file in files:
+ 		if file.find(".py") != -1:
+ 			if file.find(".pyc") == -1:
+-				#add to path 
+-				sys.path.append(root)
+-				file=os.path.splitext(file)[0]
+-				#__import__(file)
++				if root not in sys.path:
++					sys.path.append(root)
+ 				
+ sys.path.append(ISSM_DIR + '/lib')
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13789-13790.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13789-13790.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13789-13790.diff	(revision 13980)
@@ -0,0 +1,215 @@
+Index: ../trunk-jpl/src/c/Container/Options.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Options.h	(revision 13789)
++++ ../trunk-jpl/src/c/Container/Options.h	(revision 13790)
+@@ -98,11 +98,8 @@
+ 	}
+ 	else{
+ 		/*Make a copy*/
+-		char* outstring=NULL;
+-		int   stringsize;
+-
+-		stringsize=strlen(default_value)+1;
+-		outstring=xNew<char>(stringsize);
++		int   stringsize=strlen(default_value)+1;
++		char* outstring=xNew<char>(stringsize);
+ 		xMemCpy<char>(outstring,default_value,stringsize);
+ 		*pvalue=outstring;
+ 	}
+Index: ../trunk-jpl/src/c/Container/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13789)
++++ ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13790)
+@@ -45,7 +45,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		node=(Node*)(*object);
++		node=dynamic_cast<Node*>(*object);
+ 		node->Configure(nodes,vertices);
+ 
+ 	}
+@@ -75,7 +75,7 @@
+ 
+ 	/*Go through objects, and distribute dofs locally, from 0 to numberofdofsperobject*/
+ 	for (i=0;i<this->Size();i++){
+-		Node* node=(Node*)this->GetObjectByOffset(i);
++		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 
+ 		/*Check that this node corresponds to our analysis currently being carried out: */
+ 		if (node->InAnalysis(analysis_type)){
+@@ -104,7 +104,7 @@
+ 	}
+ 	for (i=0;i<this->Size();i++){
+ 		/*Check that this node corresponds to our analysis currently being carried out: */
+-		Node* node=(Node*)this->GetObjectByOffset(i);
++		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 		if (node->InAnalysis(analysis_type)){
+ 			node->OffsetDofs(dofcount,setenum);
+ 		}
+@@ -121,7 +121,7 @@
+ 	}
+ 
+ 	for (i=0;i<this->Size();i++){
+-		Node* node=(Node*)this->GetObjectByOffset(i);
++		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 		if (node->InAnalysis(analysis_type)){
+ 			node->ShowTrueDofs(truedofs,maxdofspernode,setenum);//give maxdofspernode, column size, so that nodes can index into truedofs
+ 		}
+@@ -135,7 +135,7 @@
+ 
+ 	/* Now every cpu knows the true dofs of everyone else that is not a clone*/
+ 	for (i=0;i<this->Size();i++){
+-		Node* node=(Node*)this->GetObjectByOffset(i);
++		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 		if (node->InAnalysis(analysis_type)){
+ 			node->UpdateCloneDofs(alltruedofs,maxdofspernode,setenum);
+ 		}
+@@ -184,7 +184,7 @@
+ 	/*Now go through all objects, and use minranks to flag which objects are cloned: */
+ 	for(i=0;i<this->Size();i++){
+ 
+-		Node* node=(Node*)this->GetObjectByOffset(i);
++		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 
+ 		/*Check that this node corresponds to our analysis currently being carried out: */
+ 		if (node->InAnalysis(analysis_type)){
+@@ -211,7 +211,7 @@
+ 	/*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */
+ 	for(i=0;i<this->Size();i++){
+ 
+-		Node* node=(Node*)this->GetObjectByOffset(i);
++		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 
+ 		/*Check that this node corresponds to our analysis currently being carried out: */
+ 		if (node->InAnalysis(analysis_type)){
+@@ -241,7 +241,7 @@
+ 	/*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */
+ 	for(i=0;i<this->Size();i++){
+ 
+-		Node* node=(Node*)this->GetObjectByOffset(i);
++		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 
+ 		/*Check that this node corresponds to our analysis currently being carried out: */
+ 		if (node->InAnalysis(analysis_type)){
+@@ -276,7 +276,7 @@
+ 
+ 	/*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */
+ 	for(i=0;i<this->Size();i++){
+-		Node* node=(Node*)this->GetObjectByOffset(i);
++		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 
+ 		/*Ok, this object is a node, ask it to plug values into partition: */
+ 		if (!node->IsClone()) numnodes++;
+@@ -303,7 +303,7 @@
+ 
+ 	for(i=0;i<this->Size();i++){
+ 
+-		Node* node=(Node*)this->GetObjectByOffset(i);
++		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 
+ 		/*Check that this node corresponds to our analysis currently being carried out: */
+ 		if (node->InAnalysis(analysis_type)){
+@@ -343,7 +343,7 @@
+ 	/*Go through nodes, and for each object, report it cpu: */
+ 	for(int i=0;i<this->Size();i++){
+ 
+-		Node* node=(Node*)this->GetObjectByOffset(i);
++		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 
+ 		/*Check that this node corresponds to our analysis currently being carried out: */
+ 		if (node->InAnalysis(analysis_type)){
+@@ -362,7 +362,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		node=(Node*)(*object);
++		node=dynamic_cast<Node*>(*object);
+ 		node->SetCurrentConfiguration(nodes,vertices);
+ 
+ 	}
+Index: ../trunk-jpl/src/c/Container/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13789)
++++ ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13790)
+@@ -45,7 +45,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		element=(Element*)(*object);
++		element=dynamic_cast<Element*>((*object));
+ 		element->Configure(elements,loads,nodes,materials,parameters);
+ 
+ 	}
+@@ -57,7 +57,7 @@
+ 
+ 	//Process results to be output in the correct units
+ 	for(int i=0;i<this->Size();i++){
+-		Element* element=(Element*)this->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+ 		element->ProcessResultsUnits();
+ 	}
+ }
+@@ -66,7 +66,7 @@
+ void Elements::DeleteResults(void){
+ 
+ 	for (int i=0;i<this->Size();i++){
+-		Element* element=(Element*)this->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+ 		element->DeleteResults();
+ 	}
+ }
+@@ -115,7 +115,7 @@
+ 
+ 	for(i=0;i<this->Size();i++){
+ 
+-		Element* element=(Element*)this->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+ 		element->PatchSize(&element_numrows,&element_numvertices,&element_numnodes);
+ 
+ 		numrows+=element_numrows;
+@@ -140,7 +140,7 @@
+ 	/*Now, go through elements, and fill the Patch object: */
+ 	count=0;
+ 	for(i=0;i<this->Size();i++){
+-		Element* element=(Element*)this->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+ 		element->PatchFill(&count,patch);
+ 	}
+ 
+@@ -155,7 +155,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		element=(Element*)(*object);
++		element=dynamic_cast<Element*>((*object));
+ 		element->SetCurrentConfiguration(elements,loads,nodes,materials,parameters);
+ 
+ 	}
+@@ -207,7 +207,7 @@
+ 		/*see what the first element of this partition has in stock (this is common to all partitions)*/
+ 		if(my_rank==minrank){
+ 			if(this->Size()==0) _error_("Cannot write results because there is no element??");
+-			Element* element=(Element*)this->GetObjectByOffset(0);
++			Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(0));
+ 			element->ListResultsInfo(&resultsenums,&resultssizes,&resultstimes,&resultssteps,&numberofresults);
+ 		}
+ 		#ifdef _HAVE_MPI_
+@@ -239,7 +239,7 @@
+ 			vector=new Vector<IssmDouble>(vectorsize);
+ 
+ 			for(int j=0;j<this->Size();j++){
+-				Element* element=(Element*)this->GetObjectByOffset(j);
++				Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(j));
+ 				element->GetVectorFromResults(vector,i,resultsenums[i],resultssizes[i]);
+ 			}
+ 			vector->Assemble();
+@@ -313,7 +313,7 @@
+ void Elements::InputDuplicate(int input_enum,int output_enum){
+ 
+ 	for(int i=0;i<this->Size();i++){
+-		Element* element=(Element*)this->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
+ 		element->InputDuplicate(input_enum,output_enum);
+ 	}
+ }
Index: /issm/oecreview/Archive/13393-13976/ISSM-13790-13791.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13790-13791.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13790-13791.diff	(revision 13980)
@@ -0,0 +1,89 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh	(revision 13791)
+@@ -0,0 +1,78 @@
++#!/bin/bash
++set -eu
++#Step 0: download
++#Step 1: install and write script
++STEP=0
++
++if [ $STEP -eq 0 ]; then
++	
++	#Some cleanup
++	rm -rf install petsc-3.3-p2 src
++	mkdir install src
++
++	#Download from ISSM server
++	$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.3-p2.tar.gz' 'petsc-3.3-p2.tar.gz'
++
++	#Untar and move petsc to install directory
++	tar -zxvf  petsc-3.3-p2.tar.gz
++	mv petsc-3.3-p2/* src/
++	rm -rf petsc-3.3-p2
++fi
++
++if [ $STEP -eq 1 ]; then
++
++	mkdir install
++
++	#configure
++	cd src
++	./config/configure.py \
++		--prefix="$ISSM_DIR/externalpackages/petsc/install" \
++		--with-batch=1  \
++		--PETSC_ARCH="$ISSM_ARCH" \
++		--PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
++		--with-debugging=0 \
++		--with-shared-libraries=0 \
++		--with-blas-lapack-dir=/nasa/intel/mkl/10.0.011/ \
++		--known-mpi-shared-libraries=1 \
++		--with-mpi-lib=/nasa/sgi/mpt/2.04/lib/libmpi.so \
++		--with-mpi-include=/nasa/sgi/mpt/2.04/include  \
++		--download-mumps=yes \
++		--download-blacs=yes  \
++		--download-blas=yes \
++		--download-f-blas-lapack=yes \
++		--download-parmetis=yes \
++		--download-metis=yes \
++		--download-trilinos=yes \
++		--download-euclid=yes \
++		--download-pastix=yes \
++		--download-ptscotch=yes \
++		--download-spooles=yes \
++		--download-spai=yes \
++		--download-superlu=yes \
++		--download-hypre=yes \
++		--download-prometheus=yes \
++		--FFLAGS=-I/usr/include \
++		--with-cxx=icpc \
++		--with-cc=icc \
++		--with-fc=ifort \
++		--COPTFLAGS=" -O3 -xS" \
++		--FOPTFLAGS=" -O3 -xS" \
++		--CXXOPTFLAGS=" -O3 -xS" \
++		--with-pic=1
++		cat > script.queue << EOF
++#PBS -S /bin/bash
++#PBS -q debug 
++#PBS -l select=1:ncpus=1:model=har 
++#PBS -l walltime=200 
++#PBS -W group_list=s1010 
++#PBS -m e 
++. /usr/share/modules/init/bash 
++module load comp-intel/11.1.046 
++module load mpi-sgi/mpt.2.04  #DEFINES MPI_Type_create_indexed_block
++module load math/intel_mkl_64_10.0.011 
++export PATH="$PATH:." 
++export MPI_GROUP_MAX=64 
++mpiexec -np 1 ./conftest-linux-gnu-ia64-intel.py
++EOF
++	echo "== Follow PETSc's instructions"
++fi
+
+Property changes on: ../trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13791-13792.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13791-13792.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13791-13792.diff	(revision 13980)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/src/m/inversions/misfit.m
+===================================================================
+--- ../trunk-jpl/src/m/inversions/misfit.m	(revision 13791)
++++ ../trunk-jpl/src/m/inversions/misfit.m	(revision 13792)
+@@ -12,20 +12,16 @@
+ 	elements=md.mesh.elements;
+ 	x=md.mesh.x;
+ 	y=md.mesh.y;
+-	%vx=md.initialization.vx;
+-	%vy=md.initialization.vy;
+-	vx=md.results.DiagnosticSolution.Vx;
+-	vy=md.results.DiagnosticSolution.Vy;
++	vx=md.initialization.vx;
++	vy=md.initialization.vy;
+ 	vx_obs=md.inversion.vx_obs;
+ 	vy_obs=md.inversion.vy_obs;
+ else
+ 	elements=md.mesh.elements2d;
+ 	x=md.mesh.x2d;
+ 	y=md.mesh.y2d;
+-	%vx=project2d(md,md.initialization.vx,md.mesh.numberoflayers);
+-	%vy=project2d(md,md.initialization.vy,md.mesh.numberoflayers);
+-	vx=project2d(md,md.results.DiagnosticSolution.Vx,md.mesh.numberoflayers);
+-	vy=project2d(md,md.results.DiagnosticSolution.Vy,md.mesh.numberoflayers);
++	vx=project2d(md,md.initialization.vx,md.mesh.numberoflayers);
++	vy=project2d(md,md.initialization.vy,md.mesh.numberoflayers);
+ 	vx_obs=project2d(md,md.inversion.vx_obs,md.mesh.numberoflayers);
+ 	vy_obs=project2d(md,md.inversion.vy_obs,md.mesh.numberoflayers);
+ end
+Index: ../trunk-jpl/src/m/plot/northarrow.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/northarrow.m	(revision 13791)
++++ ../trunk-jpl/src/m/plot/northarrow.m	(revision 13792)
+@@ -73,4 +73,4 @@
+ %Text North
+ xN=max([A(1) D(1) E(1) F(1) G(1)])+ratio/3*abs(lengtharrow);
+ yN=mean([A(2) F(2) H(2)]);
+-text(xN,yN,'N','FontSize',fontsize,'FontWeight','b');
++text(xN,yN,'North','FontSize',fontsize,'FontWeight','b');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13792-13793.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13792-13793.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13792-13793.diff	(revision 13980)
@@ -0,0 +1,94 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-dev-pleiades.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-dev-pleiades.sh	(revision 13792)
++++ ../trunk-jpl/externalpackages/petsc/install-dev-pleiades.sh	(revision 13793)
+@@ -1,8 +1,7 @@
+ #!/bin/bash
+-set -eu
+ #Step 0: download
+ #Step 1: install and write script
+-STEP=0
++STEP=1
+ 
+ if [ $STEP -eq 0 ]; then
+ 	# Adapted from petsc 3.2. 
+@@ -23,10 +22,13 @@
+ # Note: using metis from externalpackages did not work...
+ # for now downloading new metis
+ #   -then rename metis in externalpackages to metis2
++#
++#		--download-prometheus=yes \
++#--download-superlu=http://crd.lbl.gov/~xiaoye/SuperLU/superlu_4.3.tar.gz \
++#		--download-plapack=yes \
++
+ if [ $STEP -eq 1 ]; then
+ 
+-	mkdir install
+-
+ 	#configure
+ 	cd src
+ 	./config/configure.py \
+@@ -35,13 +37,11 @@
+ 		--PETSC_ARCH="$ISSM_ARCH" \
+ 		--PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
+ 		--with-debugging=0 \
+-		--with-shared-libraries=0 \
++		--with-shared-libraries=1 \
+ 		--with-blas-lapack-dir=/nasa/intel/mkl/10.0.011/ \
+ 		--known-mpi-shared-libraries=1 \
+-		--with-mpi-lib=/nasa/sgi/mpt/2.04/lib/libmpi.so \
+-		--with-mpi-include=/nasa/sgi/mpt/2.04/include  \
++		--with-mpi=1 \
+ 		--download-mumps=yes \
+-		--download-plapack=yes \
+ 		--download-scalapack=yes \
+ 		--download-blacs=yes  \
+ 		--download-blas=yes \
+@@ -50,35 +50,29 @@
+ 		--download-metis=yes \
+ 		--download-trilinos=yes \
+ 		--download-euclid=yes \
+-		--download-pastix=yes \
+-		--download-ptscotch=yes \
+-		--download-spooles=yes \
+ 		--download-spai=yes \
+-		--download-superlu=yes \
++		--download-superlu=http://crd.lbl.gov/~xiaoye/SuperLU/superlu_4.3.tar.gz \
+ 		--download-hypre=yes \
+-		--download-prometheus=yes \
+-		--FFLAGS=-I/usr/include \
+-		--with-cxx=icpc \
+-		--with-cc=icc \
+-		--with-fc=ifort \
+-		--COPTFLAGS=" -O3 -xS" \
+-		--FOPTFLAGS=" -O3 -xS" \
+-		--CXXOPTFLAGS=" -O3 -xS" \
+-		--with-pic=1
++		--with-cxx=/nasa/sgi/mpt/2.06a67/bin/mpicxx \
++		--with-fc=/nasa/sgi/mpt/2.06a67/bin/mpif90 \
++		--COPTFLAGS="-lmpi -O3" \
++		--FOPTFLAGS="-lmpi -O3" \
++		--CXXOPTFLAGS="-lmpi -O3" 
+ 		cat > script.queue << EOF
+ #PBS -S /bin/bash
+-#PBS -q debug 
+-#PBS -l select=1:ncpus=1:model=har 
++#PBS -l select=1:ncpus=1:model=wes 
+ #PBS -l walltime=200 
+ #PBS -W group_list=s1010 
+ #PBS -m e 
+ . /usr/share/modules/init/bash 
+-module load comp-intel/11.1.046 
+-module load mpi-sgi/mpt.2.04  #DEFINES MPI_Type_create_indexed_block
++module load comp-intel/2012.0.032 
++module load mpi-sgi/mpt.2.06a67  
+ module load math/intel_mkl_64_10.0.011 
+ export PATH="$PATH:." 
+ export MPI_GROUP_MAX=64 
+ mpiexec -np 1 ./conftest-linux-gnu-ia64-intel.py
+ EOF
+-	echo "== Follow PETSc's instructions"
++	echo "== Now: cd src/ "
++	echo "== qsub -q devel script.queue "
++	echo "== Then run reconfigure script generated by PETSc and follow instructions"
+ fi
Index: /issm/oecreview/Archive/13393-13976/ISSM-13793-13794.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13793-13794.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13793-13794.diff	(revision 13980)
@@ -0,0 +1,75 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh	(revision 13793)
++++ ../trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh	(revision 13794)
+@@ -1,8 +1,7 @@
+ #!/bin/bash
+-set -eu
+ #Step 0: download
+ #Step 1: install and write script
+-STEP=0
++STEP=1
+ 
+ if [ $STEP -eq 0 ]; then
+ 	
+@@ -31,11 +30,10 @@
+ 		--PETSC_ARCH="$ISSM_ARCH" \
+ 		--PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
+ 		--with-debugging=0 \
+-		--with-shared-libraries=0 \
++		--with-shared-libraries=1 \
+ 		--with-blas-lapack-dir=/nasa/intel/mkl/10.0.011/ \
+ 		--known-mpi-shared-libraries=1 \
+-		--with-mpi-lib=/nasa/sgi/mpt/2.04/lib/libmpi.so \
+-		--with-mpi-include=/nasa/sgi/mpt/2.04/include  \
++		--with-mpi=1 \
+ 		--download-mumps=yes \
+ 		--download-blacs=yes  \
+ 		--download-blas=yes \
+@@ -44,35 +42,30 @@
+ 		--download-metis=yes \
+ 		--download-trilinos=yes \
+ 		--download-euclid=yes \
+-		--download-pastix=yes \
+-		--download-ptscotch=yes \
+-		--download-spooles=yes \
+ 		--download-spai=yes \
+ 		--download-superlu=yes \
+ 		--download-hypre=yes \
+ 		--download-prometheus=yes \
+-		--FFLAGS=-I/usr/include \
+-		--with-cxx=icpc \
+-		--with-cc=icc \
+-		--with-fc=ifort \
+-		--COPTFLAGS=" -O3 -xS" \
+-		--FOPTFLAGS=" -O3 -xS" \
+-		--CXXOPTFLAGS=" -O3 -xS" \
+-		--with-pic=1
++		--with-cxx=/nasa/sgi/mpt/2.06a67/bin/mpicxx \
++		--with-fc=/nasa/sgi/mpt/2.06a67/bin/mpif90 \
++		--COPTFLAGS="-lmpi -O3" \
++		--FOPTFLAGS="-lmpi -O3" \
++		--CXXOPTFLAGS="-lmpi -O3" 
+ 		cat > script.queue << EOF
+ #PBS -S /bin/bash
+-#PBS -q debug 
+-#PBS -l select=1:ncpus=1:model=har 
++#PBS -l select=1:ncpus=1:model=wes 
+ #PBS -l walltime=200 
+ #PBS -W group_list=s1010 
+ #PBS -m e 
+ . /usr/share/modules/init/bash 
+-module load comp-intel/11.1.046 
+-module load mpi-sgi/mpt.2.04  #DEFINES MPI_Type_create_indexed_block
++module load comp-intel/2012.0.032 
++module load mpi-sgi/mpt.2.06a67  
+ module load math/intel_mkl_64_10.0.011 
+ export PATH="$PATH:." 
+ export MPI_GROUP_MAX=64 
+ mpiexec -np 1 ./conftest-linux-gnu-ia64-intel.py
+ EOF
+-	echo "== Follow PETSc's instructions"
++	echo "== Now: cd src/ "
++	echo "== qsub -q devel script.queue "
++	echo "== Then run reconfigure script generated by PETSc and follow instructions"
+ fi
Index: /issm/oecreview/Archive/13393-13976/ISSM-13794-13795.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13794-13795.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13794-13795.diff	(revision 13980)
@@ -0,0 +1,24 @@
+Index: ../trunk-jpl/src/m/geometry/isconnected.m
+===================================================================
+--- ../trunk-jpl/src/m/geometry/isconnected.m	(revision 0)
++++ ../trunk-jpl/src/m/geometry/isconnected.m	(revision 13795)
+@@ -0,0 +1,13 @@
++function flag=isconnected(elements,A,B)
++%ISCONNECTED: are two nodes connected by a triangulation?
++%
++%   Usage: flag=isconnected(elements,A,B)
++%
++%
++
++elements=ElementsFromEdge(elements,A,B);
++if isempty(elements),
++	flag=0;
++else
++	flag=1;
++end
+
+Property changes on: ../trunk-jpl/src/m/geometry/isconnected.m
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13795-13796.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13795-13796.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13795-13796.diff	(revision 13980)
@@ -0,0 +1,115 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh	(revision 13795)
++++ ../trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh	(revision 13796)
+@@ -1,57 +1,49 @@
+ #!/bin/bash
+-#Step 0: download
+-#Step 1: install and write script
+-STEP=1
+ 
+-if [ $STEP -eq 0 ]; then
+-	
+-	#Some cleanup
+-	rm -rf install petsc-3.3-p2 src
+-	mkdir install src
++#Some cleanup
++rm -rf install petsc-3.3-p2 src
++mkdir install src
+ 
+-	#Download from ISSM server
+-	$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.3-p2.tar.gz' 'petsc-3.3-p2.tar.gz'
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.3-p2.tar.gz' 'petsc-3.3-p2.tar.gz'
+ 
+-	#Untar and move petsc to install directory
+-	tar -zxvf  petsc-3.3-p2.tar.gz
+-	mv petsc-3.3-p2/* src/
+-	rm -rf petsc-3.3-p2
+-fi
++#Untar and move petsc to install directory
++tar -zxvf  petsc-3.3-p2.tar.gz
++mv petsc-3.3-p2/* src/
++rm -rf petsc-3.3-p2
+ 
+-if [ $STEP -eq 1 ]; then
++#configure
++cd src
++./config/configure.py \
++ --prefix="$ISSM_DIR/externalpackages/petsc/install" \
++ --with-batch=1  \
++ --PETSC_ARCH="$ISSM_ARCH" \
++ --PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
++ --with-debugging=0 \
++ --with-shared-libraries=1 \
++ --with-blas-lapack-dir=/nasa/intel/mkl/10.0.011/ \
++ --known-mpi-shared-libraries=1 \
++ --with-mpi=1 \
++ --download-mumps=yes \
++ --download-blacs=yes  \
++ --download-blas=yes \
++ --download-f-blas-lapack=yes \
++ --download-parmetis=yes \
++ --download-metis=yes \
++ --download-trilinos=yes \
++ --download-euclid=yes \
++ --download-spai=yes \
++ --download-superlu=yes \
++ --download-hypre=yes \
++ --download-prometheus=yes \
++ --with-cxx=/nasa/sgi/mpt/2.06a67/bin/mpicxx \
++ --with-fc=/nasa/sgi/mpt/2.06a67/bin/mpif90 \
++ --COPTFLAGS="-lmpi -O3" \
++ --FOPTFLAGS="-lmpi -O3" \
++ --CXXOPTFLAGS="-lmpi -O3" 
+ 
+-	mkdir install
+-
+-	#configure
+-	cd src
+-	./config/configure.py \
+-		--prefix="$ISSM_DIR/externalpackages/petsc/install" \
+-		--with-batch=1  \
+-		--PETSC_ARCH="$ISSM_ARCH" \
+-		--PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
+-		--with-debugging=0 \
+-		--with-shared-libraries=1 \
+-		--with-blas-lapack-dir=/nasa/intel/mkl/10.0.011/ \
+-		--known-mpi-shared-libraries=1 \
+-		--with-mpi=1 \
+-		--download-mumps=yes \
+-		--download-blacs=yes  \
+-		--download-blas=yes \
+-		--download-f-blas-lapack=yes \
+-		--download-parmetis=yes \
+-		--download-metis=yes \
+-		--download-trilinos=yes \
+-		--download-euclid=yes \
+-		--download-spai=yes \
+-		--download-superlu=yes \
+-		--download-hypre=yes \
+-		--download-prometheus=yes \
+-		--with-cxx=/nasa/sgi/mpt/2.06a67/bin/mpicxx \
+-		--with-fc=/nasa/sgi/mpt/2.06a67/bin/mpif90 \
+-		--COPTFLAGS="-lmpi -O3" \
+-		--FOPTFLAGS="-lmpi -O3" \
+-		--CXXOPTFLAGS="-lmpi -O3" 
+-		cat > script.queue << EOF
++#prepare script to reconfigure petsc
++cat > script.queue << EOF
+ #PBS -S /bin/bash
+ #PBS -l select=1:ncpus=1:model=wes 
+ #PBS -l walltime=200 
+@@ -65,7 +57,8 @@
+ export MPI_GROUP_MAX=64 
+ mpiexec -np 1 ./conftest-linux-gnu-ia64-intel.py
+ EOF
+-	echo "== Now: cd src/ "
+-	echo "== qsub -q devel script.queue "
+-	echo "== Then run reconfigure script generated by PETSc and follow instructions"
+-fi
++
++#print instructions
++echo "== Now: cd src/ "
++echo "== qsub -q devel script.queue "
++echo "== Then run reconfigure script generated by PETSc and follow instructions"
Index: /issm/oecreview/Archive/13393-13976/ISSM-13796-13797.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13796-13797.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13796-13797.diff	(revision 13980)
@@ -0,0 +1,997 @@
+Index: ../trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp	(revision 13796)
++++ ../trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp	(revision 13797)
+@@ -12,18 +12,18 @@
+ 
+ void EnvironmentFinalize(void){
+ 
+-	int my_rank=0;
+ 	#ifdef _HAVE_MPI_
+-	/*Make sure we are all here!)*/
++
++	/*Make sure we are all here*/
+ 	MPI_Barrier(MPI_COMM_WORLD);
+ 	
+-	/*Print closing statement: */
+-	#ifdef _HAVE_MPI_
++	/*Print closing statement*/
++	int my_rank;
+ 	MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
+-	#endif
+ 	if(!my_rank) printf("closing MPI\n");
+ 
+ 	/*Finalize: */
+ 	MPI_Finalize();
++
+ 	#endif
+ }
+Index: ../trunk-jpl/src/c/Container/Options.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Options.h	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Options.h	(revision 13797)
+@@ -25,7 +25,7 @@
+ 		template <class OptionType> void Get(OptionType* pvalue,const char* name){ /*{{{*/
+ 
+ 			/*Get option*/
+-			GenericOption<OptionType>* genericoption=(GenericOption<OptionType>*)GetOption(name);
++			GenericOption<OptionType>* genericoption=dynamic_cast<GenericOption<OptionType>*>(GetOption(name));
+ 
+ 			/*If the pointer is not NULL, the option has been found*/
+ 			if(genericoption){
+@@ -40,7 +40,7 @@
+ 		template <class OptionType> void Get(OptionType* pvalue,int* pnumel, const char* name){ /*{{{*/
+ 
+ 			/*Get option*/
+-			GenericOption<OptionType>* genericoption=(GenericOption<OptionType>*)GetOption(name);
++			GenericOption<OptionType>* genericoption=dynamic_cast<GenericOption<OptionType>*>(GetOption(name));
+ 
+ 			/*If the pointer is not NULL, the option has been found*/
+ 			if(genericoption){
+@@ -56,7 +56,7 @@
+ 		template <class OptionType> void Get(OptionType* pvalue,const char* name,OptionType default_value){ /*{{{*/
+ 
+ 			/*Get option*/
+-			GenericOption<OptionType>* genericoption=(GenericOption<OptionType>*)GetOption(name);
++			GenericOption<OptionType>* genericoption=dynamic_cast<GenericOption<OptionType>*>(GetOption(name));
+ 
+ 			/*If the pointer is not NULL, the option has been found*/
+ 			if(genericoption){
+@@ -70,7 +70,7 @@
+ 		template <class OptionType> void Get(OptionType* pvalue,int* pnumel, const char* name,OptionType default_value){ /*{{{*/
+ 
+ 			/*Get option*/
+-			GenericOption<OptionType>* genericoption=(GenericOption<OptionType>*)GetOption(name);
++			GenericOption<OptionType>* genericoption=dynamic_cast<GenericOption<OptionType>*>(GetOption(name));
+ 
+ 			/*If the pointer is not NULL, the option has been found*/
+ 			if(genericoption){
+@@ -90,7 +90,7 @@
+ template <> inline void Options::Get(char** pvalue,const char* name,char* default_value){ /*{{{*/
+ 
+ 	/*Get option*/
+-	GenericOption<char*>* genericoption=(GenericOption<char*>*)GetOption(name);
++	GenericOption<char*>* genericoption=dynamic_cast<GenericOption<char*>*>(GetOption(name));
+ 
+ 	/*If the pointer is not NULL, the option has been found*/
+ 	if(genericoption){
+Index: ../trunk-jpl/src/c/Container/Results.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Results.cpp	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Results.cpp	(revision 13797)
+@@ -75,7 +75,7 @@
+ 	parameters->FindParam(&io_gather,SettingsIoGatherEnum);
+ 
+ 	for(i=0;i<this->Size();i++){
+-		ExternalResult* result=(ExternalResult*)this->GetObjectByOffset(i);
++		ExternalResult* result=dynamic_cast<ExternalResult*>(this->GetObjectByOffset(i));
+ 
+ 		/*write result to disk: */
+ 		result->WriteData(fid,io_gather);
+Index: ../trunk-jpl/src/c/Container/Loads.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Loads.cpp	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Loads.cpp	(revision 13797)
+@@ -45,7 +45,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		load=(Load*)(*object);
++		load=dynamic_cast<Load*>(*object);
+ 		load->Configure(elements,loads,nodes,vertices,materials,parameters);
+ 
+ 	}
+@@ -80,7 +80,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		load=(Load*)(*object);
++		load=dynamic_cast<Load*>(*object);
+ 		load->SetCurrentConfiguration(elements,loads,nodes,vertices,materials,parameters);
+ 
+ 	}
+Index: ../trunk-jpl/src/c/Container/Parameters.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Parameters.cpp	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Parameters.cpp	(revision 13797)
+@@ -44,7 +44,7 @@
+ 	Param* param=NULL;
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type) return true;
+ 	}
+ 	return false;
+@@ -58,7 +58,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pbool);
+ 			return;
+@@ -75,7 +75,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pinteger);
+ 			return;
+@@ -92,7 +92,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pscalar);
+ 			return;
+@@ -109,7 +109,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pscalar,time);
+ 			return;
+@@ -126,7 +126,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pstring);
+ 			return;
+@@ -144,7 +144,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pstringarray,pM);
+ 			return;
+@@ -162,7 +162,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pintarray,pM);
+ 			return;
+@@ -180,7 +180,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pintarray,pM,pN);
+ 			return;
+@@ -198,7 +198,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pIssmDoublearray,pM);
+ 			return;
+@@ -216,7 +216,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pIssmDoublearray,pM,pN);
+ 			return;
+@@ -234,7 +234,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(parray,pM,pmdims_array,pndims_array);
+ 			return;
+@@ -251,7 +251,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pvec);
+ 			return;
+@@ -269,7 +269,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pmat);
+ 			return;
+@@ -287,7 +287,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pfid);
+ 			return;
+@@ -305,7 +305,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			param->GetParameterValue(pdataset);
+ 			return;
+@@ -321,7 +321,7 @@
+ 	Param* param=NULL;
+ 
+ 	/*first, figure out if the param has already been created: */
+-	param=(Param*)this->FindParamObject(enum_type);
++	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+ 
+ 	if(param) param->SetValue(boolean); //already exists, just set it.
+ 	else this->AddObject(new BoolParam(enum_type,boolean)); //just add the new parameter.
+@@ -333,7 +333,7 @@
+ 	Param* param=NULL;
+ 
+ 	/*first, figure out if the param has already been created: */
+-	param=(Param*)this->FindParamObject(enum_type);
++	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+ 
+ 	if(param) param->SetValue(integer); //already exists, just set it.
+ 	else this->AddObject(new IntParam(enum_type,integer)); //just add the new parameter.
+@@ -345,7 +345,7 @@
+ 	Param* param=NULL;
+ 
+ 	/*first, figure out if the param has already been created: */
+-	param=(Param*)this->FindParamObject(enum_type);
++	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+ 
+ 	if(param) param->SetValue(scalar); //already exists, just set it.
+ 	else this->AddObject(new DoubleParam(enum_type,scalar)); //just add the new parameter.
+@@ -357,7 +357,7 @@
+ 	Param* param=NULL;
+ 
+ 	/*first, figure out if the param has already been created: */
+-	param=(Param*)this->FindParamObject(enum_type);
++	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+ 
+ 	if(param) param->SetValue(string); //already exists, just set it.
+ 	else this->AddObject(new StringParam(enum_type,string)); //just add the new parameter.
+@@ -369,7 +369,7 @@
+ 	Param* param=NULL;
+ 
+ 	/*first, figure out if the param has already been created: */
+-	param=(Param*)this->FindParamObject(enum_type);
++	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+ 
+ 	if(param) param->SetValue(stringarray,M); //already exists, just set it.
+ 	else this->AddObject(new StringArrayParam(enum_type,stringarray,M)); //just add the new parameter.
+@@ -381,7 +381,7 @@
+ 	Param* param=NULL;
+ 
+ 	/*first, figure out if the param has already been created: */
+-	param=(Param*)this->FindParamObject(enum_type);
++	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+ 
+ 	if(param) param->SetValue(IssmDoublearray,M); //already exists, just set it.
+ 	else this->AddObject(new DoubleVecParam(enum_type,IssmDoublearray,M)); //just add the new parameter.
+@@ -393,7 +393,7 @@
+ 	Param* param=NULL;
+ 
+ 	/*first, figure out if the param has already been created: */
+-	param=(Param*)this->FindParamObject(enum_type);
++	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+ 
+ 	if(param) param->SetValue(IssmDoublearray,M,N); //already exists, just set it.
+ 	else this->AddObject(new DoubleMatParam(enum_type,IssmDoublearray,M,N)); //just add the new parameter.
+@@ -405,7 +405,7 @@
+ 	Param* param=NULL;
+ 
+ 	/*first, figure out if the param has already been created: */
+-	param=(Param*)this->FindParamObject(enum_type);
++	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+ 
+ 	if(param) param->SetValue(intarray,M); //already exists, just set it.
+ 	else this->AddObject(new IntVecParam(enum_type,intarray,M)); //just add the new parameter.
+@@ -417,7 +417,7 @@
+ 	Param* param=NULL;
+ 
+ 	/*first, figure out if the param has already been created: */
+-	param=(Param*)this->FindParamObject(enum_type);
++	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+ 
+ 	if(param) param->SetValue(intarray,M,N); //already exists, just set it.
+ 	else this->AddObject(new IntMatParam(enum_type,intarray,M,N)); //just add the new parameter.
+@@ -429,7 +429,7 @@
+ 	Param* param=NULL;
+ 
+ 	/*first, figure out if the param has already been created: */
+-	param=(Param*)this->FindParamObject(enum_type);
++	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+ 
+ 	if(param) param->SetValue(vector); //already exists, just set it.
+ 	else this->AddObject(new VectorParam(enum_type,vector)); //just add the new parameter.
+@@ -441,7 +441,7 @@
+ 	Param* param=NULL;
+ 
+ 	/*first, figure out if the param has already been created: */
+-	param=(Param*)this->FindParamObject(enum_type);
++	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+ 
+ 	if(param) param->SetValue(matrix); //already exists, just set it.
+ 	else this->AddObject(new MatrixParam(enum_type,matrix)); //just add the new parameter.
+@@ -453,7 +453,7 @@
+ 	Param* param=NULL;
+ 
+ 	/*first, figure out if the param has already been created: */
+-	param=(Param*)this->FindParamObject(enum_type);
++	param=dynamic_cast<Param*>(this->FindParamObject(enum_type));
+ 
+ 	if(param) param->SetValue(fid); //already exists, just set it.
+ 	else this->AddObject(new FileParam(enum_type,fid)); //just add the new parameter.
+@@ -466,7 +466,7 @@
+ 	Param* param=NULL;
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		param->UnitConversion(direction_enum);
+ 	}
+ 
+@@ -481,7 +481,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		param=(Param*)(*object);
++		param=dynamic_cast<Param*>(*object);
+ 		if(param->InstanceEnum()==enum_type){
+ 			return (*object);
+ 		}
+Index: ../trunk-jpl/src/c/Container/Results.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Results.h	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Results.h	(revision 13797)
+@@ -19,13 +19,12 @@
+ 
+ 	public:
+ 
+-		/*constructors, destructors: {{{*/
++		/*constructors, destructors*/
+ 		Results();
+ 		~Results();
+-		/*}}}*/
+-		/*numerics: {{{*/
++
++		/*numerics*/
+ 		Results* SpawnTriaResults(int* indices);
+-		void Write(Parameters* parameters);
+-		/*}}}*/
++		void     Write(Parameters* parameters);
+ };
+ #endif //ifndef _RESULTS_H_
+Index: ../trunk-jpl/src/c/Container/Loads.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Loads.h	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Loads.h	(revision 13797)
+@@ -19,15 +19,14 @@
+ 
+ 	public:
+ 
+-		/*constructors, destructors: {{{*/
++		/*constructors, destructors*/
+ 		Loads();
+ 		~Loads();
+-		/*}}}*/
+-		/*numerics: {{{*/
++
++		/*numerics*/
+ 		void  Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+ 		int   NumberOfLoads(void);
+ 		void  SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+-		/*}}}*/
+ 
+ };
+ 
+Index: ../trunk-jpl/src/c/Container/Constraints.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Constraints.h	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Constraints.h	(revision 13797)
+@@ -19,13 +19,12 @@
+ 
+ 	public:
+ 
+-		/*constructors, destructors: {{{*/
++		/*constructors, destructors*/
+ 		Constraints();
+ 		~Constraints();
+-		/*}}}*/
+-		/*numerics: {{{*/
++
++		/*numerics*/
+ 		int   NumberOfConstraints(void);
+-		/*}}}*/
+ 
+ };
+ 
+Index: ../trunk-jpl/src/c/Container/Nodes.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Nodes.h	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Nodes.h	(revision 13797)
+@@ -12,11 +12,11 @@
+ 
+ 	public:
+ 
+-		/*constructors, destructors: {{{*/
++		/*constructors, destructors*/
+ 		Nodes();
+ 		~Nodes();
+-		/*}}}*/
+-		/*numerics: {{{*/
++
++		/*numerics*/
+ 		void  Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+ 		void  DistributeDofs(int analysis_type,int SETENUM);
+ 		void  FlagClones(int analysis_type);
+@@ -26,7 +26,6 @@
+ 		int   NumberOfNodes(void);
+ 		void  Ranks(int* ranks,int analysis_type);
+ 		void  SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+-		/*}}}*/
+ 
+ };
+ 
+Index: ../trunk-jpl/src/c/Container/Observations.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Observations.cpp	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Observations.cpp	(revision 13797)
+@@ -87,7 +87,7 @@
+ 		/*First check that this observation is not too close from another one*/
+ 		this->quadtree->ClosestObs(&index,x[i],y[i]);
+ 		if(index>=0){
+-			observation=(Observation*)this->GetObjectByOffset(index);
++			observation=dynamic_cast<Observation*>(this->GetObjectByOffset(index));
+ 			if(pow(observation->x-x[i],2)+pow(observation->y-y[i],2) < minspacing) continue;
+ 		}
+ 
+@@ -134,7 +134,7 @@
+ 	/*Find all observations that are in radius*/
+ 	this->quadtree->RangeSearch(&indices,&nobs,x_interp,y_interp,radius);
+ 	for (i=0;i<nobs;i++){
+-		observation=(Observation*)this->GetObjectByOffset(indices[i]);
++		observation=dynamic_cast<Observation*>(this->GetObjectByOffset(indices[i]));
+ 		h2 = (observation->x-x_interp)*(observation->x-x_interp) + (observation->y-y_interp)*(observation->y-y_interp);
+ 
+ 		if(i==0){
+@@ -156,7 +156,7 @@
+ 		*pobs=UNDEF;
+ 	}
+ 	else{
+-		observation=(Observation*)this->GetObjectByOffset(indices[index]);
++		observation=dynamic_cast<Observation*>(this->GetObjectByOffset(indices[index]));
+ 		*px=observation->x;
+ 		*py=observation->y;
+ 		*pobs=observation->value;
+@@ -193,7 +193,7 @@
+ 	}
+ 	nobs = 0;
+ 	for (i=0;i<tempnobs;i++){
+-		observation=(Observation*)this->GetObjectByOffset(tempindices[i]);
++		observation=dynamic_cast<Observation*>(this->GetObjectByOffset(tempindices[i]));
+ 		h2 = (observation->x-x_interp)*(observation->x-x_interp) + (observation->y-y_interp)*(observation->y-y_interp);
+ 
+ 		if(nobs==maxdata && h2>radius2) continue;
+@@ -235,7 +235,7 @@
+ 
+ 		/*Loop over all observations and fill in x, y and obs*/
+ 		for (i=0;i<nobs;i++){
+-			observation=(Observation*)this->GetObjectByOffset(indices[i]);
++			observation=dynamic_cast<Observation*>(this->GetObjectByOffset(indices[i]));
+ 			observation->WriteXYObs(&x[i],&y[i],&obs[i]);
+ 		}
+ 	}
+@@ -264,7 +264,7 @@
+ 		y   = xNew<IssmPDouble>(nobs);
+ 		obs = xNew<IssmPDouble>(nobs);
+ 		for(int i=0;i<this->Size();i++){
+-			observation=(Observation*)this->GetObjectByOffset(i);
++			observation=dynamic_cast<Observation*>(this->GetObjectByOffset(i));
+ 			observation->WriteXYObs(&x[i],&y[i],&obs[i]);
+ 		}
+ 	}
+@@ -449,10 +449,10 @@
+ 	for(j=0;j<n;j++) gamma[j]   = 0.0;
+ 
+ 	for(i=0;i<this->Size();i++){
+-		observation1=(Observation*)this->GetObjectByOffset(i);
++		observation1=dynamic_cast<Observation*>(this->GetObjectByOffset(i));
+ 
+ 		for(j=i+1;j<this->Size();j++){
+-			observation2=(Observation*)this->GetObjectByOffset(j);
++			observation2=dynamic_cast<Observation*>(this->GetObjectByOffset(j));
+ 
+ 			distance=sqrt(pow(observation1->x - observation2->x,2.) + pow(observation1->y - observation2->y,2.));
+ 			if(distance>x[n-1]) continue;
+Index: ../trunk-jpl/src/c/Container/Elements.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Elements.h	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Elements.h	(revision 13797)
+@@ -19,20 +19,19 @@
+ 
+ 	public:
+ 
+-		/*constructors, destructors: {{{*/
++		/*constructors, destructors*/
+ 		Elements();
+ 		~Elements();
+-		/*}}}*/
+-		/*numerics: {{{*/
+-		void Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+-		void DeleteResults(void);
+-		void ProcessResultsUnits(void);
+-		void SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+-		void ToResults(Results* results,Parameters* parameters);
++
++		/*numerics*/
++		void   Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
++		void   DeleteResults(void);
++		void   ProcessResultsUnits(void);
++		void   SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
++		void   ToResults(Results* results,Parameters* parameters);
+ 		Patch* ResultsToPatch(void);
+-		int   NumberOfElements(void);
+-		void InputDuplicate(int input_enum,int output_enum);
+-		/*}}}*/
++		int    NumberOfElements(void);
++		void   InputDuplicate(int input_enum,int output_enum);
+ 
+ };
+ 
+Index: ../trunk-jpl/src/c/Container/Materials.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Materials.cpp	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Materials.cpp	(revision 13797)
+@@ -45,7 +45,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		material=(Material*)(*object);
++		material=dynamic_cast<Material*>(*object);
+ 		material->Configure(elements);
+ 
+ 	}
+Index: ../trunk-jpl/src/c/Container/Inputs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Inputs.cpp	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Inputs.cpp	(revision 13797)
+@@ -46,7 +46,7 @@
+ 	/*Go through inputs and check whether any input with the same name is already in: */
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		input=(Input*)(*object); 
++		input=dynamic_cast<Input*>(*object);
+ 		if (input->InstanceEnum()==enum_type){
+ 			found=true;
+ 			break;
+@@ -74,7 +74,7 @@
+ 	/*Go through inputs and check whether any input with the same name is already in: */
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		input=(Input*)(*object); 
++		input=dynamic_cast<Input*>(*object);
+ 		if (input->InstanceEnum()==enum_type){
+ 			found=true;
+ 			break;
+@@ -102,7 +102,7 @@
+ 	/*Go through inputs and check whether any input with the same name is already in: */
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		input=(Input*)(*object); 
++		input=dynamic_cast<Input*>(*object); 
+ 		if (input->InstanceEnum()==enum_type){
+ 			found=true;
+ 			break;
+@@ -130,7 +130,7 @@
+ 	/*Go through inputs and check whether any input with the same name is already in: */
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		input=(Input*)(*object); 
++		input=dynamic_cast<Input*>(*object);
+ 		if (input->InstanceEnum()==enum_type){
+ 			found=true;
+ 			break;
+@@ -162,7 +162,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		input=(Input*)(*object); 
++		input=dynamic_cast<Input*>(*object);
+ 
+ 		if (input->InstanceEnum()==in_input->InstanceEnum()){
+ 			this->DeleteObject(input);
+@@ -184,7 +184,7 @@
+ 
+ 	/*Delete existing input of newenumtype if it exists*/
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+-		input=(Input*)(*object); 
++		input=dynamic_cast<Input*>(*object);
+ 
+ 		if (input->InstanceEnum()==newenumtype){
+ 			this->DeleteObject(input);
+@@ -195,7 +195,7 @@
+ 	/*Change enum_type of input of oldenumtype*/
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		input=(Input*)(*object); 
++		input=dynamic_cast<Input*>(*object);
+ 
+ 		if (input->InstanceEnum()==oldenumtype){
+ 			input->ChangeEnum(newenumtype);
+@@ -209,7 +209,7 @@
+ 
+ 	Input* constrain_input=NULL; 
+ 	/*Find x and y inputs: */
+-	constrain_input=(Input*)this->GetInput(constrain_enum);
++	constrain_input=dynamic_cast<Input*>(this->GetInput(constrain_enum));
+ 
+ 	/*some checks: */
+ 	if(!constrain_input) _error_("input " << EnumToStringx(constrain_enum) << " could not be found!");
+@@ -225,7 +225,7 @@
+ 	IssmDouble norm;
+ 
+ 	/*Get input*/
+-	Input* input=(Input*)this->GetInput(enumtype);
++	Input* input=dynamic_cast<Input*>(this->GetInput(enumtype));
+ 
+ 	/*Apply ContrainMin: */
+ 	if (input){
+@@ -246,7 +246,7 @@
+ 	IssmDouble max;
+ 
+ 	/*Get input*/
+-	Input* input=(Input*)this->GetInput(enumtype);
++	Input* input=dynamic_cast<Input*>(this->GetInput(enumtype));
+ 
+ 	/*Apply ContrainMin: */
+ 	if (input){
+@@ -267,7 +267,7 @@
+ 	IssmDouble max;
+ 
+ 	/*Get input*/
+-	Input* input=(Input*)this->GetInput(enumtype);
++	Input* input=dynamic_cast<Input*>(this->GetInput(enumtype));
+ 
+ 	/*Apply ContrainMin: */
+ 	if (input){
+@@ -288,7 +288,7 @@
+ 	IssmDouble min;
+ 
+ 	/*Get input*/
+-	Input* input=(Input*)this->GetInput(enumtype);
++	Input* input=dynamic_cast<Input*>(this->GetInput(enumtype));
+ 
+ 	/*Apply ContrainMin: */
+ 	if (input){
+@@ -309,7 +309,7 @@
+ 	IssmDouble min;
+ 
+ 	/*Get input*/
+-	Input* input=(Input*)this->GetInput(enumtype);
++	Input* input=dynamic_cast<Input*>(this->GetInput(enumtype));
+ 
+ 	/*Apply ContrainMin: */
+ 	if (input){
+@@ -331,7 +331,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		input=(Input*)(*object); 
++		input=dynamic_cast<Input*>(*object);
+ 
+ 		if (input->InstanceEnum()==enum_name){
+ 			return input;
+@@ -348,7 +348,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		input=(Input*)(*object); 
++		input=dynamic_cast<Input*>(*object);
+ 
+ 		if (input->InstanceEnum()==enum_type){
+ 			this->DeleteObject(input);
+@@ -367,15 +367,15 @@
+ 	Input* copy=NULL;
+ 
+ 	/*Make a copy of the original input: */
+-	original=(Input*)this->GetInput(original_enum);
++	original=dynamic_cast<Input*>(this->GetInput(original_enum));
+ 	if(!original)_error_("could not find input with enum: " << EnumToStringx(original_enum)); 
+-	copy=(Input*)original->copy();
++	copy=dynamic_cast<Input*>(original->copy());
+ 
+ 	/*Change copy enum to reinitialized_enum: */
+ 	copy->ChangeEnum(new_enum);
+ 
+ 	/*Add copy into inputs, it will wipe off the one already there: */
+-	this->AddInput((Input*)copy);
++	this->AddInput(dynamic_cast<Input*>(copy));
+ }
+ /*}}}*/
+ /*FUNCTION Inputs::SpawnTriaInputs{{{*/
+@@ -393,7 +393,7 @@
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+ 		/*Create new input*/
+-		inputin=(Input*)(*object); 
++		inputin=dynamic_cast<Input*>(*object);
+ 		inputout=inputin->SpawnTriaInput(indices);
+ 
+ 		/*Add input to new inputs*/
+@@ -411,8 +411,8 @@
+ 	Input* yinput=NULL;
+ 
+ 	/*Find x and y inputs: */
+-	xinput=(Input*)this->GetInput(MeshXEnum);
+-	yinput=(Input*)this->GetInput(MeshYEnum);
++	xinput=dynamic_cast<Input*>(this->GetInput(MeshXEnum));
++	yinput=dynamic_cast<Input*>(this->GetInput(MeshYEnum));
+ 
+ 	/*some checks: */
+ 	if(!xinput) _error_("input " << EnumToStringx(MeshXEnum) << " could not be found!");
+@@ -430,7 +430,7 @@
+ 
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		input=(Input*)(*object);
++		input=dynamic_cast<Input*>(*object);
+ 		input->Configure(parameters);
+ 
+ 	}
+Index: ../trunk-jpl/src/c/Container/Vertices.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Vertices.cpp	(revision 13797)
+@@ -55,7 +55,7 @@
+ 
+ 	/*Go through objects, and distribute pids locally, from 0 to numberofpidsperobject*/
+ 	for (i=0;i<this->Size();i++){
+-		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
++		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+ 		vertex->DistributePids(&pidcount);
+ 	}
+ 
+@@ -79,7 +79,7 @@
+ 		}
+ 	}
+ 	for (i=0;i<this->Size();i++){
+-		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
++		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+ 		vertex->OffsetPids(pidcount);
+ 	}
+ 
+@@ -89,7 +89,7 @@
+ 	truepids   =xNewZeroInit<int>(numberofobjects);
+ 	alltruepids=xNewZeroInit<int>(numberofobjects);
+ 	for (i=0;i<this->Size();i++){
+-		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
++		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+ 		vertex->ShowTruePids(truepids);
+ 	}
+ 	#ifdef _HAVE_MPI_
+@@ -100,7 +100,7 @@
+ 
+ 	/* Now every cpu knows the true pids of everyone else that is not a clone*/
+ 	for(i=0;i<this->Size();i++){
+-		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
++		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+ 		vertex->UpdateClonePids(alltruepids);
+ 	}
+ 
+@@ -144,7 +144,7 @@
+ 	/*Now go through all objects, and use minranks to flag which objects are cloned: */
+ 	for(i=0;i<this->Size();i++){
+ 		/*For this object, decide whether it is a clone: */
+-		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
++		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+ 		vertex->SetClone(minranks);
+ 	}
+ 
+@@ -162,7 +162,7 @@
+ 	int vertex_max_sid;
+ 
+ 	for(i=0;i<this->Size();i++){
+-		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
++		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+ 		sid=vertex->Sid();
+ 		if (sid>max_sid)max_sid=sid;
+ 	}
+@@ -192,7 +192,7 @@
+ 	/*Go through a dataset, and for each object, report it cpu: */
+ 	for(int i=0;i<this->Size();i++){
+ 		/*Plug rank into ranks, according to id: */
+-		Vertex* vertex=(Vertex*)this->GetObjectByOffset(i);
++		Vertex* vertex=dynamic_cast<Vertex*>(this->GetObjectByOffset(i));
+ 		sid=vertex->Sid();
+ 		ranks[sid]=my_rank; 
+ 	}
+Index: ../trunk-jpl/src/c/Container/Materials.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Materials.h	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Materials.h	(revision 13797)
+@@ -18,13 +18,12 @@
+ 
+ 	public:
+ 
+-		/*constructors, destructors: {{{*/
++		/*constructors, destructors*/
+ 		Materials();
+ 		~Materials();
+-		/*}}}*/
+-		/*numerics: {{{*/
++
++		/*numerics*/
+ 		void  Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+-		/*}}}*/
+ 
+ };
+ 
+Index: ../trunk-jpl/src/c/Container/Inputs.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Inputs.h	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Inputs.h	(revision 13797)
+@@ -22,33 +22,29 @@
+ 
+ 	public:
+ 
+-		/*constructors, destructors: {{{*/
++		/*constructors, destructors*/
+ 		Inputs();
+ 		~Inputs();
+ 
+-		/*}}}*/
+-		/*numerics: {{{*/
+-		int     AddInput(Input* in_input);
+-		void    ChangeEnum(int enumtype,int new_enumtype);
+-		void    ConstrainMin(int constrain_enum, IssmDouble minimum);
+-		int     DeleteInput(int enum_type);
+-		void    DuplicateInput(int original_enum,int new_enum);
+-		Input*  GetInput(int enum_name);
+-		Inputs* SpawnTriaInputs(int* indices);
+-		void    AXPY(int MeshYEnum, IssmDouble scalar, int MeshXEnum);
++		/*numerics*/
++		int        AddInput(Input* in_input);
++		void       ChangeEnum(int enumtype,int new_enumtype);
++		void       ConstrainMin(int constrain_enum, IssmDouble minimum);
++		int        DeleteInput(int enum_type);
++		void       DuplicateInput(int original_enum,int new_enum);
++		Input*     GetInput(int enum_name);
++		Inputs*    SpawnTriaInputs(int* indices);
++		void       AXPY(int MeshYEnum, IssmDouble scalar, int MeshXEnum);
+ 		IssmDouble  InfinityNorm(int enumtype);
+ 		IssmDouble  Max(int enumtype);
+ 		IssmDouble  MaxAbs(int enumtype);
+ 		IssmDouble  Min(int enumtype);
+ 		IssmDouble  MinAbs(int enumtype);
+-
+ 		void GetInputAverage(IssmDouble* pvalue, int enum_type);
+ 		void GetInputValue(bool* pvalue,int enum_type);
+ 		void GetInputValue(int* pvalue,int enum_type);
+ 		void GetInputValue(IssmDouble* pvalue,int enum_type);
+-
+ 		void Configure(Parameters* parameters);
+-		/*}}}*/
+ 
+ };
+ 
+Index: ../trunk-jpl/src/c/Container/DataSet.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/DataSet.h	(revision 13796)
++++ ../trunk-jpl/src/c/Container/DataSet.h	(revision 13797)
+@@ -37,30 +37,29 @@
+ 		int*            sorted_ids;
+ 		int*            id_offsets;
+ 
+-		/*constructors, destructors: {{{*/
++		/*constructors, destructors*/
+ 		DataSet();
+ 		DataSet(int enum_type);
+ 		~DataSet();
+-		/*}}}*/
+-		/*management: {{{*/
+-		int   GetEnum();
+-		int   GetEnum(int offset);
+-		void  Echo();
+-		void  DeepEcho();
+-		int   AddObject(Object* object);
+-		int   DeleteObject(int id);
+-		int   Size();
+-		void  clear();
+-		Object* GetObjectByOffset(int offset);
+-		Object* GetObjectById(int* poffset,int eid);
+-		void  Presort();
+-		void  SetSorting(int* in_sorted_ids,int* in_id_offsets);
+-		void  Sort();
+-		DataSet* Copy(void);
+-		int   DeleteObject(Object* object);
+-		Results* SpawnTriaResults(int* indices);
+-		/*}}}*/
+ 
++		/*management*/
++		int      GetEnum();
++		int      GetEnum(int offset);
++		void     Echo();
++		void     DeepEcho();
++		int      AddObject(Object *object);
++		int      DeleteObject(int id);
++		int      Size();
++		void     clear();
++		Object  *GetObjectByOffset(int  offset);
++		Object  *GetObjectById(int *poffset,int eid);
++		void     Presort();
++		void     SetSorting(int *in_sorted_ids,int*in_id_offsets);
++		void     Sort();
++		DataSet *Copy(void);
++		int      DeleteObject(Object *object);
++		Results *SpawnTriaResults(int *indices);
++
+ };
+ 
+ #endif
+Index: ../trunk-jpl/src/c/Container/Options.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Options.cpp	(revision 13796)
++++ ../trunk-jpl/src/c/Container/Options.cpp	(revision 13797)
+@@ -59,7 +59,7 @@
+ 	/*Finally, check that no option of the same name already exists in the dataset*/
+ 	for(object=objects.begin();object<objects.end();object++){
+ 
+-		option=(Option*)(*object); 
++		option=dynamic_cast<Option*>(*object);
+ 		if (!strcmp(option->Name(),name)){
+ 			_error_("Options \"" << name << "\" found multiple times");
+ 			break;
+@@ -81,7 +81,7 @@
+ 	/*Go through options and find option: */
+ 	for ( object=objects.begin() ; object < objects.end(); object++ ){
+ 
+-		option=(Option*)(*object); 
++		option=dynamic_cast<Option*>(*object);
+ 		if (!strncmp(name,option->Name(),strlen(option->Name()))){
+ 
+ 			/*OK, now do we have a complete name? If not, it is a cell or a structure, we need to go further*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13797-13798.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13797-13798.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13797-13798.diff	(revision 13980)
@@ -0,0 +1,932 @@
+Index: ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13798)
+@@ -61,7 +61,7 @@
+ 	if(counter==-1)return 0;
+ 
+ 	/*cast void_femmodel to FemModel: */
+-	femmodel=(FemModel*)void_femmodel;
++	femmodel=dynamic_cast<FemModel*>(void_femmodel);
+ 
+ 	/*retrieve parameters: */
+ 	femmodel->parameters->FindParam(&responses_descriptors,&numresponsedescriptors,QmuResponsedescriptorsEnum);
+Index: ../trunk-jpl/src/c/solutions/kriging.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/solutions/kriging.cpp	(revision 13798)
+@@ -72,7 +72,7 @@
+ 		results->AddObject(new GenericExternalResult<double*>(results->Size()+1,0,predictions,ninterp,1,1,0));
+ 		results->AddObject(new GenericExternalResult<double*>(results->Size()+1,1,error,ninterp,1,1,0));
+ 		for(int i=0;i<results->Size();i++){
+-			ExternalResult* result=(ExternalResult*)results->GetObjectByOffset(i);
++			ExternalResult* result=dynamic_cast<ExternalResult*>(results->GetObjectByOffset(i));
+ 			result->WriteData(output_fid,1);
+ 		}
+ 		pfclose(output_fid,outbinfilename);
+Index: ../trunk-jpl/src/c/Container/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13798)
+@@ -153,8 +153,6 @@
+ 	int i;
+ 	int num_procs;
+ 
+-	int* ranks=NULL;
+-	int* minranks=NULL;
+ 	int  numnodes;
+ 
+ 	/*recover num_procs: */
+@@ -164,8 +162,8 @@
+ 	numnodes=this->NumberOfNodes(analysis_type);
+ 
+ 	/*Allocate ranks: */
+-	ranks=xNew<int>(numnodes);
+-	minranks=xNew<int>(numnodes);
++	int* ranks    = xNew<int>(numnodes);
++	int* minranks = xNew<int>(numnodes);
+ 	for(i=0;i<numnodes;i++)ranks[i]=num_procs; //no cpu can have rank num_procs. This is the maximum limit.
+ 
+ 	/*Now go through all our objects and ask them to report to who they belong (which rank): */
+Index: ../trunk-jpl/src/c/Container/Inputs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Inputs.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/Container/Inputs.cpp	(revision 13798)
+@@ -207,9 +207,8 @@
+ /*FUNCTION Inputs::ConstrainMin{{{*/
+ void  Inputs::ConstrainMin(int constrain_enum, IssmDouble minimum){
+ 
+-	Input* constrain_input=NULL; 
+ 	/*Find x and y inputs: */
+-	constrain_input=dynamic_cast<Input*>(this->GetInput(constrain_enum));
++	Input* constrain_input=dynamic_cast<Input*>(this->GetInput(constrain_enum));
+ 
+ 	/*some checks: */
+ 	if(!constrain_input) _error_("input " << EnumToStringx(constrain_enum) << " could not be found!");
+Index: ../trunk-jpl/src/c/Container/DataSet.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/DataSet.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/Container/DataSet.cpp	(revision 13798)
+@@ -49,11 +49,10 @@
+ /*FUNCTION DataSet::Copy{{{*/
+ DataSet*   DataSet::Copy(void){
+ 
+-	DataSet* copy=NULL;
+ 	vector<Object*>::iterator object;
+ 	Object* object_copy=NULL;
+ 
+-	copy=new DataSet(enum_type);
++	DataSet* copy=new DataSet(enum_type);
+ 
+ 	copy->sorted=sorted;
+ 	copy->presorted=presorted;
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp	(revision 13798)
+@@ -21,7 +21,7 @@
+ 
+ 		/*Update elements, nodes, loads and materials from inputs: */
+ 		for(i=0;i<elements->Size();i++){
+-			Element* element=(Element*)elements->GetObjectByOffset(i);
++			Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 			element->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type);
+ 		}
+ 		for(i=0;i<nodes->Size();i++){
+Index: ../trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp	(revision 13798)
+@@ -17,7 +17,7 @@
+ 
+ 	/*Go through elements, and request velocity: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->MinVz(&element_minvz,process_units); //go pick up the minimum velocity in the inputs
+ 
+ 		if(i==0)minvz=element_minvz; //initialize minvz
+Index: ../trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp	(revision 13798)
+@@ -46,7 +46,7 @@
+ 
+ 	/*loop on each element, and add contribution of the element to the partition (surface weighted average): */
+ 	for(int i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->AverageOntoPartition(partition_contributions,partition_areas,vertex_response,qmu_part);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp	(revision 13798)
+@@ -26,7 +26,7 @@
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVector(vector,name,type);
+ 	}
+ 	for(i=0;i<nodes->Size();i++){
+@@ -49,7 +49,7 @@
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVector(vector,name,type);
+ 	}
+ 	for(i=0;i<nodes->Size();i++){
+@@ -72,7 +72,7 @@
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVector(vector,name,type);
+ 	}
+ 	for(i=0;i<nodes->Size();i++){
+Index: ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp	(revision 13798)
+@@ -39,7 +39,7 @@
+ 
+ 	/*Fill smearedvector vector: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->SmearFunction(smearedvector,WeightFunction,SmearedFieldEnum,radius);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 13798)
+@@ -42,7 +42,7 @@
+ 
+ 	/*Migrate grounding line : */
+ 	for(i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->MigrateGroundingLine(old_floatingice,vertices_ungrounding);
+ 	}
+ 
+@@ -94,7 +94,7 @@
+ 
+ 	/*Fill vector vertices_potentially_floating: */
+ 	for(i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->PotentialSheetUngrounding(vec_vertices_potentially_ungrounding);
+ 	}
+ 
+@@ -136,7 +136,7 @@
+ 
+ 		/*Figure out if any of the nodes of the element will be floating -> elements neighbouting the floating ice*/
+ 		for(i=0;i<elements->Size();i++){
+-			element=(Element*)elements->GetObjectByOffset(i);
++			element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 			vec_elements_neighboring_floatingice->SetValue(element->Sid(),element->IsNodeOnShelfFromFlags(nodes_on_floatingice)?1.0:0.0,INS_VAL);
+ 		}
+ 
+@@ -147,7 +147,7 @@
+ 		/*Go through elements_neighboring_floatingce, and update vector of the nodes that will start floating*/
+ 		local_nflipped=0;
+ 		for(i=0;i<elements->Size();i++){
+-			element=(Element*)elements->GetObjectByOffset(i);
++			element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 			if(reCast<int,IssmDouble>(elements_neighboring_floatingce[element->Sid()])){
+ 				local_nflipped+=element->UpdatePotentialSheetUngrounding(vertices_potentially_ungrounding,vec_nodes_on_floatingice,nodes_on_floatingice);
+ 			}
+Index: ../trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.cpp	(revision 13798)
+@@ -21,7 +21,7 @@
+   Element* element = NULL;
+ 
+   for(i=0;i<elements->Size();i++){
+-    element=(Element*)elements->GetObjectByOffset(i);
++    element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+     element->SmbGradients();
+   }
+ }
+Index: ../trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp	(revision 13798)
+@@ -15,7 +15,7 @@
+ 	IssmDouble total_ice_volume;
+ 
+ 	for(int i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		local_ice_volume+=element->IceVolume();
+ 	}
+ 	#ifdef _HAVE_MPI_
+Index: ../trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp	(revision 13798)
+@@ -18,7 +18,7 @@
+ 
+ 	/*Go through elements, and request velocity: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->MinVel(&element_minvel,process_units); //go pick up the minimum velocity in the inputs
+ 
+ 		if(i==0)minvel=element_minvel; //initialize minvel
+Index: ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 13798)
+@@ -13,7 +13,7 @@
+ 	/*Go through elemnets, and ask to reinitialie the input: */
+ 	int      i;
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputDuplicate(original_enum,new_enum);
+ 	}
+ 	for(i=0;i<materials->Size();i++){
+Index: ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 13798)
+@@ -32,7 +32,7 @@
+ 
+ 	/*Go through elements and plug solution: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->GetSolutionFromInputs(solution);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 13798)
+@@ -25,7 +25,7 @@
+ 
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		J+=element->SurfaceAverageVelMisfit(process_units,weight_index);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/InputScalex/InputScalex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputScalex/InputScalex.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/InputScalex/InputScalex.cpp	(revision 13798)
+@@ -15,7 +15,7 @@
+ 
+ 	/*Go through elemnets, and ask to reinitialie the input: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputScale(enum_type,scale_factor);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13798)
+@@ -27,7 +27,7 @@
+ 
+ 	/*now, go through our elements, and retrieve the one with this id: index: */
+ 	for(i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		if (element->Id()==index){
+ 			found=1;
+ 			cpu_found=my_rank;
+Index: ../trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp	(revision 13798)
+@@ -28,7 +28,7 @@
+ 
+ 	/*Compute basal stress for each element: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->ComputeStrainRate(eps);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp	(revision 13798)
+@@ -101,7 +101,7 @@
+   //     *******END initialize PDD
+ 
+   for(i=0;i<elements->Size();i++){
+-    element=(Element*)elements->GetObjectByOffset(i);
++    element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+     element->PositiveDegreeDay(pdds,pds,signorm);
+   }
+   /*free ressouces: */
+Index: ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 13798)
+@@ -22,7 +22,7 @@
+ 
+ 	/*Compute gradients: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		S+=element->SurfaceArea();
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp	(revision 13798)
+@@ -28,7 +28,7 @@
+ 
+ 	/*Compute basal stress for each element: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->ComputeBasalStress(sigma);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp	(revision 13798)
+@@ -30,7 +30,7 @@
+ 
+ 	/*Elements drive the update: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromSolution(solution);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 13798)
+@@ -20,7 +20,7 @@
+ 
+ 		/*Look up in elements*/
+ 		for(i=0;i<elements->Size();i++){
+-			Element* element=(Element*)elements->GetObjectByOffset(i);
++			Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 			element->GetVectorFromInputs(vector,name);
+ 		}
+ 
+Index: ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp	(revision 13798)
+@@ -21,7 +21,7 @@
+ 
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		J+=element->ThicknessAlongGradient(process_units,weight_index);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 13798)
+@@ -29,7 +29,7 @@
+ 	/*This is the vertex id for which we want to collect the data. Go through elements, and for each 
+ 	 *element, figure out  if they hold the vertex, and the data. If so, return it: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		found=element->NodalValue(&value,index,natureofdataenum,process_units);
+ 		if (found){
+ 			cpu_found=my_rank;
+Index: ../trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 13798)
+@@ -26,7 +26,7 @@
+ 
+ 	if(VerboseMProcessor()) _pprintLine_("      Configuring elements...");
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->Configure(elements,loads,nodes,materials,parameters);
+ 	}
+ 	if(VerboseMProcessor()) _pprintLine_("      Configuring loads...");
+Index: ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp	(revision 13798)
+@@ -21,7 +21,7 @@
+ 
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		J+=element->ThicknessAbsMisfit(process_units,weight_index);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 13798)
+@@ -26,7 +26,7 @@
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+ 	for(i=0;i<nodes->Size();i++){
+@@ -49,7 +49,7 @@
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+ 	for(i=0;i<nodes->Size();i++){
+@@ -72,7 +72,7 @@
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromVectorDakota(vector,name,type);
+ 	}
+ 	for(i=0;i<nodes->Size();i++){
+Index: ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp	(revision 13798)
+@@ -22,7 +22,7 @@
+ 	/*Go through elemnets, and ask each element to transfer the enum_type input into the results dataset, with step and time information: */
+ 	for(int i=0;i<elements->Size();i++){
+ 
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputToResult(enum_type,step,time);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp	(revision 13798)
+@@ -17,7 +17,7 @@
+ 
+ 	/*Go through elements, and request velocity: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->MinVx(&element_minvx,process_units); //go pick up the minimum velocity in the inputs
+ 
+ 		if(i==0)minvx=element_minvx; //initialize minvx
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 13798)
+@@ -21,7 +21,7 @@
+ 
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		J+=element->SurfaceLogVxVyMisfit(process_units,weight_index);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/InputControlUpdatex/InputControlUpdatex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputControlUpdatex/InputControlUpdatex.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/InputControlUpdatex/InputControlUpdatex.cpp	(revision 13798)
+@@ -12,7 +12,7 @@
+ 
+ 	/*Go through elemnets, and ask to carry out the operation on inputs: */
+ 	for(int i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputControlUpdate(scalar,save_parameter);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 13798)
+@@ -54,13 +54,13 @@
+ 
+ 		/*Fill stiffness matrix from elements: */
+ 		for (i=0;i<elements->Size();i++){
+-			element=(Element*)elements->GetObjectByOffset(i);
++			element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 			element->CreateKMatrix(Kff,Kfs,df);
+ 		}
+ 
+ 		/*Fill stiffness matrix from loads if loads have the current configuration_type: */
+ 		for (i=0;i<loads->Size();i++){
+-			load=(Load*)loads->GetObjectByOffset(i);
++			load=dynamic_cast<Load*>(loads->GetObjectByOffset(i));
+ 			if (load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff,Kfs);
+ 		}
+ 
+@@ -76,13 +76,13 @@
+ 
+ 		/*Fill right hand side vector, from elements: */
+ 		for (i=0;i<elements->Size();i++){
+-			element=(Element*)elements->GetObjectByOffset(i);
++			element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 			element->CreatePVector(pf);
+ 		}
+ 
+ 		/*Fill right hand side from loads if loads have the current configuration_type: */
+ 		for (i=0;i<loads->Size();i++){
+-			load=(Load*)loads->GetObjectByOffset(i);
++			load=dynamic_cast<Load*>(loads->GetObjectByOffset(i));
+ 			if (load->InAnalysis(configuration_type)) load->CreatePVector(pf);
+ 		}
+ 		pf->Assemble();
+@@ -96,7 +96,7 @@
+ 
+ 		/*Fill stiffness matrix from loads: */
+ 		for (i=0;i<loads->Size();i++){
+-			load=(Load*)loads->GetObjectByOffset(i);
++			load=dynamic_cast<Load*>(loads->GetObjectByOffset(i));
+ 			if (load->InAnalysis(configuration_type)) load->PenaltyCreateKMatrix(Kff,Kfs,kmax);
+ 		}
+ 
+@@ -109,7 +109,7 @@
+ 
+ 		/*Fill right hand side vector, from loads: */
+ 		for (i=0;i<loads->Size();i++){
+-			load=(Load*)loads->GetObjectByOffset(i);
++			load=dynamic_cast<Load*>(loads->GetObjectByOffset(i));
+ 			if (load->InAnalysis(configuration_type)) load->PenaltyCreatePVector(pf,kmax);
+ 		}
+ 
+Index: ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 13798)
+@@ -21,7 +21,7 @@
+ 
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		J+=element->SurfaceLogVelMisfit(process_units,weight_index);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.cpp	(revision 13798)
+@@ -23,7 +23,7 @@
+ 
+ 	/*Go through elements, and ask them to do the job: */
+ 	for(i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		converged=element->InputConvergence(eps,enums,num_enums,criterionenums,criterionvalues,num_criterionenums);
+ 		if(!converged) num_notconverged++;
+ 	}
+Index: ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 13798)
+@@ -21,7 +21,7 @@
+ 
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		J+=element->SurfaceRelVelMisfit(process_units,weight_index);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp	(revision 13798)
+@@ -32,7 +32,7 @@
+ 
+ 	/*Create and assemble matrix*/
+ 	for(i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->CreateJacobianMatrix(Jff);
+ 	}
+ 	for (i=0;i<loads->Size();i++){
+Index: ../trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp	(revision 13798)
+@@ -17,7 +17,7 @@
+ 
+   /*Compute temperature and precipitation fields: */
+   for(i=0;i<elements->Size();i++){
+-    element=(Element*)elements->GetObjectByOffset(i);
++    element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+     element->Delta18oParameterization();
+   }  
+ }
+Index: ../trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp	(revision 13798)
+@@ -12,7 +12,7 @@
+ 	Element *element = NULL;
+ 
+ 	for (int i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->ResetCoordinateSystem();
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 13798)
+@@ -14,7 +14,7 @@
+ 
+ 	/*Elements and loads drive the update: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromConstant(constant,name);
+ 	}
+ 
+@@ -34,7 +34,7 @@
+ 
+ 	/*Elements and loads drive the update: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromConstant(constant,name);
+ 	}
+ 
+@@ -54,7 +54,7 @@
+ 
+ 	/*Elements and loads drive the update: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputUpdateFromConstant(constant,name);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 13798)
+@@ -21,7 +21,7 @@
+ 
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		J+=element->SurfaceAbsVelMisfit(process_units,weight_index);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp	(revision 13798)
+@@ -17,7 +17,7 @@
+ 
+ 	/*Go through elements, and request velocity: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->MinVy(&element_minvy,process_units); //go pick up the minimum velocity in the inputs
+ 
+ 		if(i==0)minvy=element_minvy; //initialize minvy
+Index: ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 13798)
+@@ -21,7 +21,7 @@
+ 
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		J+=element->DragCoefficientAbsGradient(process_units,weight_index);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 13798)
+@@ -21,7 +21,7 @@
+ 
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		J+=element->RheologyBbarAbsGradient(process_units,weight_index);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp	(revision 13798)
+@@ -21,7 +21,7 @@
+ 
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		J+=element->ThicknessAcrossGradient(process_units,weight_index);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp	(revision 13798)
+@@ -14,7 +14,7 @@
+ 
+ 	/*Update elements, nodes, loads and materials from inputs: */
+ 	for(i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		element->InputArtificialNoise(enum_name,min,max);
+ 	}
+ }
+Index: ../trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp	(revision 13798)
+@@ -15,7 +15,7 @@
+ 	IssmDouble total_smb;
+ 
+ 	for(int i=0;i<elements->Size();i++){
+-		Element* element=(Element*)elements->GetObjectByOffset(i);
++		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		local_smb+=element->TotalSmb();
+ 	}
+ 	#ifdef _HAVE_MPI_
+Index: ../trunk-jpl/src/c/classes/Hook.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/Hook.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/classes/Hook.cpp	(revision 13798)
+@@ -172,7 +172,7 @@
+ 
+ 		/*Now, for this->objects that did not get resolved, and for which we have no offset, chase them in the dataset, by id: */
+ 		if(this->objects[i]==NULL){
+-			this->objects[i]=(Object*)dataset->GetObjectById(this->offsets+i,this->ids[i]); //remember the offset for later on.
++			this->objects[i]=dynamic_cast<Object*>(dataset->GetObjectById(this->offsets+i,this->ids[i])); //remember the offset for later on.
+ 			/*check the id is correct!: */
+ 			if (this->objects[i]->Id()!=this->ids[i]) _error_("wrong id: " << this->objects[i]->Id() << " vs " << this->ids[i] << "  in resolved pointer!");
+ 		}
+Index: ../trunk-jpl/src/c/classes/bamg/Geometry.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Geometry.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/classes/bamg/Geometry.cpp	(revision 13798)
+@@ -498,14 +498,13 @@
+ 	void Geometry::PostRead(){
+ 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, MeshGeom.cpp/AfterRead)*/
+ 
+-		long               i,j,k;
+-		long              *head_v   = new long[nbv];
+-		long              *next_p   = new long[2*nbe];
+-		float             *eangle   = new float[nbe];
+-		double             eps      = 1e-20;
+-		BamgQuadtree       quadtree; // build quadtree to find duplicates
+-		BamgVertex        *v0       = vertices;
+-		GeomVertex *v0g      = (GeomVertex*) (void*)v0;
++		long          i          ,j,k;
++		long         *head_v   = new long[nbv];
++		long         *next_p   = new long[2 *nbe];
++		float        *eangle   = new float[nbe];
++		double        eps      = 1e-20;
++		BamgQuadtree  quadtree;                            // build quadtree to find duplicates
++		BamgVertex   *v0       = vertices;
+ 
+ 		k=0;
+ 
+@@ -867,7 +866,7 @@
+ 		ge[bge] = e.GeomEdgeHook;
+ 		directionge[bge]=1;
+ 
+-		while (eg0!=(GeomEdge*)vg0 && (*eg0)(direction0)!=(GeomVertex*)vg0){ 
++		while(eg0!=(GeomEdge*)vg0 && (*eg0)(direction0)!=(GeomVertex*)vg0){ 
+ 			if (bge<=0) {
+ 				if(NbTry) {
+ 					_printLine_("Fatal Error: on the class Mesh before call Geometry::ProjectOnCurve");
+Index: ../trunk-jpl/src/c/classes/IoModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/classes/IoModel.cpp	(revision 13798)
+@@ -185,10 +185,10 @@
+ 	_assert_(this->constants);
+ 
+ 	/*Find constant*/
+-	Param* param=(Param*)this->constants->FindParamObject(constant_enum);
++	Param* param=dynamic_cast<Param*>(this->constants->FindParamObject(constant_enum));
+ 	if(!param) _error_("Constant " << EnumToStringx(constant_enum) << " not found in iomodel");
+ 
+-	return (Param*)param->copy();
++	return dynamic_cast<Param*>(param->copy());
+ }
+ /*}}}*/
+ /*FUNCTION IoModel::Data{{{*/
+@@ -1104,7 +1104,7 @@
+ 			counter=0;
+ 			for (i=0;i<numberofelements;i++){
+ 				if(this->my_elements[i]){
+-					Element* element=(Element*)elements->GetObjectByOffset(counter);
++					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+ 					element->InputCreate((IssmDouble)boolean,vector_enum,code);
+ 					counter++;
+ 				}
+@@ -1117,7 +1117,7 @@
+ 			counter=0;
+ 			for (i=0;i<numberofelements;i++){
+ 				if(this->my_elements[i]){
+-					Element* element=(Element*)elements->GetObjectByOffset(counter);
++					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+ 					element->InputCreate((IssmDouble)integer,vector_enum,code);
+ 					counter++;
+ 				}
+@@ -1130,7 +1130,7 @@
+ 			counter=0;
+ 			for (i=0;i<numberofelements;i++){
+ 				if(this->my_elements[i]){
+-					Element* element=(Element*)elements->GetObjectByOffset(counter);
++					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+ 					element->InputCreate(scalar,vector_enum,code); 
+ 					counter++;
+ 				}
+@@ -1167,7 +1167,7 @@
+ 			counter=0;
+ 			for (i=0;i<numberofelements;i++){
+ 				if(this->my_elements[i]){
+-					Element* element=(Element*)elements->GetObjectByOffset(counter);
++					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+ 					if(defaulting) element->InputCreate(default_value,vector_enum,code); 
+ 					else           element->InputCreate(IssmDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+ 					counter++;
+@@ -1205,7 +1205,7 @@
+ 			counter=0;
+ 			for (i=0;i<numberofelements;i++){
+ 				if(this->my_elements[i]){
+-					Element* element=(Element*)elements->GetObjectByOffset(counter);
++					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+ 					if(defaulting) element->InputCreate(default_value,vector_enum,code); 
+ 					else           element->InputCreate(IssmDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+ 					counter++;
+@@ -1243,7 +1243,7 @@
+ 			counter=0;
+ 			for (i=0;i<numberofelements;i++){
+ 				if(this->my_elements[i]){
+-					Element* element=(Element*)elements->GetObjectByOffset(counter);
++					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
+ 					if(defaulting) element->InputCreate(default_value,vector_enum,code); 
+ 					else           element->InputCreate(IssmDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+ 					counter++;
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13798)
+@@ -533,7 +533,7 @@
+ 	element=(Element*)elements->GetObjectByOffset(0); min_dt=element->TimeAdapt();
+ 
+ 	for (i=1;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		dt=element->TimeAdapt();
+ 		if(dt<min_dt)min_dt=dt;
+ 	}
+@@ -807,7 +807,7 @@
+ 
+ 	/*Compute Misfit: */
+ 	for (i=0;i<elements->Size();i++){
+-		element=(Element*)elements->GetObjectByOffset(i);
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+ 		J+=element->ThicknessAbsGradient(process_units,weight_index);
+ 	}
+ 
+Index: ../trunk-jpl/src/c/solvers/solver_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_nonlinear.cpp	(revision 13797)
++++ ../trunk-jpl/src/c/solvers/solver_nonlinear.cpp	(revision 13798)
+@@ -41,8 +41,8 @@
+ 	femmodel->UpdateConstraintsx();
+ 
+ 	/*Were loads requested as output? : */
+-	if(conserve_loads) loads=(Loads*)femmodel->loads->Copy(); //protect loads from being modified by the solution
+-	else               loads=(Loads*)femmodel->loads;         //modify loads  in this solution
++	if(conserve_loads) loads=static_cast<Loads*>(femmodel->loads->Copy()); //protect loads from being modified by the solution
++	else               loads=static_cast<Loads*>(femmodel->loads);         //modify loads  in this solution
+ 
+ 	count=1;
+ 	converged=false;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13798-13799.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13798-13799.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13798-13799.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13798)
++++ ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13799)
+@@ -61,7 +61,7 @@
+ 	if(counter==-1)return 0;
+ 
+ 	/*cast void_femmodel to FemModel: */
+-	femmodel=dynamic_cast<FemModel*>(void_femmodel);
++	femmodel=reinterpret_cast<FemModel*>(void_femmodel);
+ 
+ 	/*retrieve parameters: */
+ 	femmodel->parameters->FindParam(&responses_descriptors,&numresponsedescriptors,QmuResponsedescriptorsEnum);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13799-13800.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13799-13800.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13799-13800.diff	(revision 13980)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 13799)
++++ ../trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 13800)
+@@ -67,7 +67,8 @@
+ 		buffer << (this->function_name).c_str() << " error message: " << (this->what_str).c_str();
+ 	}
+ 
+-	return buffer.str().c_str();
++	const string buffer2 = buffer.str();
++	return buffer2.c_str();
+ }/*}}}*/
+ const char* ErrorException::PythonReport() const{/*{{{*/
+ 
+@@ -82,5 +83,6 @@
+ 		buffer << (this->function_name).c_str() << " error message: " << (this->what_str).c_str();
+ 	}
+ 
+-	return buffer.str().c_str();
++	const string buffer2 = buffer.str();
++	return buffer2.c_str();
+ }/*}}}*/
+Index: ../trunk-jpl/src/c/classes/bamg/Mesh.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/bamg/Mesh.cpp	(revision 13799)
++++ ../trunk-jpl/src/c/classes/bamg/Mesh.cpp	(revision 13800)
+@@ -1007,11 +1007,11 @@
+ 	void Mesh::WriteIndex(int** pindex,int* pnels){
+ 
+ 		/*Intermediary*/
+-		int i,k,num;
+-		int verbose=0;
++		int i,k;
+ 
+ 		/*output*/
+ 		int* index=NULL;
++		int  num=0;
+ 
+ 		/*Get number of triangles*/
+ 		k=0;
+@@ -1022,7 +1022,6 @@
+ 
+ 		if (k){
+ 			index=xNew<int>(3*k);
+-			num=0;
+ 			for (i=0;i<nbt;i++){
+ 				Triangle &t=triangles[i];
+ 				if (t.det>0 && !(t.Hidden(0)||t.Hidden(1) || t.Hidden(2) )){
Index: /issm/oecreview/Archive/13393-13976/ISSM-13800-13801.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13800-13801.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13800-13801.diff	(revision 13980)
@@ -0,0 +1,38 @@
+Index: ../trunk-jpl/src/c/classes/matrix/Vector.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/Vector.h	(revision 13800)
++++ ../trunk-jpl/src/c/classes/matrix/Vector.h	(revision 13801)
+@@ -109,14 +109,11 @@
+ 			if(type==PetscVecType){
+ 				#ifdef _HAVE_PETSC_
+ 				delete this->pvector;
+-				#else
+-				_error_("Petsc matrix format not usable, as Petsc has not been compiled!");
+ 				#endif
+ 			}
+ 			else if(type==SeqVecType){
+ 				delete this->svector;
+ 			}
+-			else _error_("Vector type: " << type << " not supported yet!");
+ 		}
+ 		/*}}}*/
+ 		#ifdef _HAVE_PETSC_
+Index: ../trunk-jpl/src/c/classes/matrix/Matrix.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/Matrix.h	(revision 13800)
++++ ../trunk-jpl/src/c/classes/matrix/Matrix.h	(revision 13801)
+@@ -162,14 +162,11 @@
+ 			if(type==PetscMatType){
+ 				#ifdef _HAVE_PETSC_
+ 				delete this->pmatrix;
+-				#else
+-				_error_("Petsc matrix format not usable, as Petsc has not been compiled!");
+ 				#endif
+ 			}
+ 			else if(type==SeqMatType){
+ 				delete this->smatrix;
+ 			}
+-			else _error_("Matrix type: " << type << " not supported yet!");
+ 
+ 		}
+ 		/*}}}*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13801-13802.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13801-13802.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13801-13802.diff	(revision 13980)
@@ -0,0 +1,53 @@
+Index: ../trunk-jpl/startup.py
+===================================================================
+--- ../trunk-jpl/startup.py	(revision 13801)
++++ ../trunk-jpl/startup.py	(revision 13802)
+@@ -27,48 +27,4 @@
+ 				
+ sys.path.append(ISSM_DIR + '/lib')
+ 
+-#Deal with scipy import: 
+-import scipy 
+-import numpy
+-import nose
+-
+-#Import modules that are absolutely needed in ISSM {{{
+-from model import *
+-from mesh import *
+-from mask import *
+-from geometry import *
+-from constants import *
+-from surfaceforcings import *
+-from basalforcings import *
+-from matice import *
+-from friction import *
+-from flowequation import *
+-from fielddisplay import *
+-from timestepping import *
+-from initialization import *
+-from rifts import *
+-from debug import *
+-from settings import *
+-from solver import *
+-from ismumps  import * 
+-from pairoptions  import * 
+-from petscversion  import * 
+-from asmoptions import *           
+-from iluasmoptions import *        
+-from jacobiasmoptions import *     
+-from jacobicgoptions import *      
+-from matlaboptions import *        
+-from mumpsoptions import *         
+-from soroptions import *           
+-from stokesoptions import *
+-from generic import *
+-from hydrology import *
+-from miscellaneous import *
+-from private import *
+-from triangle import *
+-from setmask import *
+-from plotoptions import *
+-from plotmodel import *
+-#}}}
+-
+ print("\n  To get started with ISSM, type issmdoc at the command prompt.\n\n")
Index: /issm/oecreview/Archive/13393-13976/ISSM-13802-13803.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13802-13803.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13802-13803.diff	(revision 13980)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 13802)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 13803)
+@@ -14,7 +14,6 @@
+ 
+ 	/*DataSets*/
+ 	Icefront  *icefront  = NULL;
+-	Riftfront *riftfront = NULL;
+ 	Pengrid   *pengrid   = NULL;
+ 
+ 	/*Intermediary*/
+@@ -164,7 +163,7 @@
+ 			}
+ 		}
+ 		iomodel->DeleteData(5,RiftsRiftstructEnum,ThicknessEnum,BedEnum,SurfaceEnum,MaskVertexonfloatingiceEnum);
+-		xDelete<Riftfront>(riftfront);
++		xDelete<IssmDouble>(riftinfo);
+ 	}
+ 
+ 	/*Assign output pointer: */
Index: /issm/oecreview/Archive/13393-13976/ISSM-13803-13804.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13803-13804.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13803-13804.diff	(revision 13980)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/configs/config-pleiades-petscdev.sh
+===================================================================
+--- ../trunk-jpl/configs/config-pleiades-petscdev.sh	(revision 13803)
++++ ../trunk-jpl/configs/config-pleiades-petscdev.sh	(revision 13804)
+@@ -12,17 +12,14 @@
+  --with-petsc-arch=$ISSM_ARCH \
+  --with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+  --with-mkl-dir=/nasa/intel/mkl/10.0.011/lib/64/ \
+- --with-plapack-lib="-L$ISSM_DIR/externalpackages/petsc/install/ -lPLAPACK" \
+- --with-plapack-include="-I$ISSM_DIR/externalpackages/petsc/src/externalpackages/PLAPACKR32-hg/INCLUDE" \
+  --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+  --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+  --with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+  --with-spai-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+  --with-hypre-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-prometheus-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+  --with-superlu-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+  --with-spooles-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+  --with-pastix-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+  --with-graphics-lib=/usr/lib64/libX11.so \
+- --with-cxxoptflags="-O3 -xS" \
++ --with-cxxoptflags="-O3" \
+  --with-vendor=intel-pleiades
Index: /issm/oecreview/Archive/13393-13976/ISSM-13804-13805.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13804-13805.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13804-13805.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/solutions/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13804)
++++ ../trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13805)
+@@ -172,7 +172,7 @@
+ 
+ 	/*Retrieve objective functions independently*/
+ 	for(i=0;i<num_responses;i++){
+-		Responsex(&f,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EnumToStringx(responses[i]),false,i);
++		femmodel->Responsex(&f,EnumToStringx(responses[i]),false,i);
+ 		_pprintString_(" "<<setw(12)<<setprecision(7)<<f);
+ 	}
+ 	_pprintLine_("");
Index: /issm/oecreview/Archive/13393-13976/ISSM-13805-13806.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13805-13806.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13805-13806.diff	(revision 13980)
@@ -0,0 +1,57 @@
+Index: ../trunk-jpl/src/m/mesh/rifts/rifttipsonmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/rifttipsonmesh.m	(revision 13805)
++++ ../trunk-jpl/src/m/mesh/rifts/rifttipsonmesh.m	(revision 13806)
+@@ -3,7 +3,7 @@
+ %                rifts.
+ 
+ %read rifts from outline file
+-rifts=expread(riftoutline,1);
++rifts=expread(riftoutline);
+ 
+ tips=[];
+ 
+Index: ../trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.m	(revision 13805)
++++ ../trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.m	(revision 13806)
+@@ -6,7 +6,7 @@
+ %
+ 
+ %go through rifts, and figure out which ones touch the domain outline
+-for i=1:md.rifts.numrifts,
++for i=1:length(md.rifts.riftstruct),
+ 
+ 	%first, flag nodes that belong to the domain outline
+ 	flags=ContourToMesh(md.mesh.elements,md.mesh.x,md.mesh.y,domainoutline,'node',0);
+@@ -83,7 +83,6 @@
+ md.mesh.numberofvertices=length(md.mesh.x);
+ md.mesh.z=zeros(md.mesh.numberofvertices,1);
+ md.mesh.vertexonboundary=zeros(length(md.mesh.x),1); md.mesh.vertexonboundary(md.mesh.segments(:,1:2))=1;
+-md.rifts.numrifts=length(md.rifts.riftstruct);
+ md.flowequation.element_equation=3*ones(md.mesh.numberofelements,1);
+ md.mesh.vertexonbed=ones(md.mesh.numberofvertices,1);
+ md.mesh.vertexonsurface=ones(md.mesh.numberofvertices,1);
+Index: ../trunk-jpl/src/m/contrib/hack/tres.m
+===================================================================
+--- ../trunk-jpl/src/m/contrib/hack/tres.m	(revision 13805)
++++ ../trunk-jpl/src/m/contrib/hack/tres.m	(revision 13806)
+@@ -21,17 +21,11 @@
+ 	if isfield(md.results.DiagnosticSolution,'Pressure'),
+ 		md.initialization.pressure=md.results.DiagnosticSolution.Pressure;
+ 	end
+-	if md.rifts.numrifts,
++	if ~isempty(md.rifts.riftstruct),
+ 		if isfield(md.results.DiagnosticSolution,'riftproperties'),
+ 			md.rifts.riftproperties=md.results.DiagnosticSolution.riftproperties;
+ 		end
+ 	end
+-	if md.inversion.iscontrol==1,
+-		for control_parameters=md.inversion.control_parameters
+-			%Will need to be updated... good luck ;)
+-			md.(EnumToModelField(control_parameters))=md.results.DiagnosticSolution.(EnumToString(control_parameters));
+-		end
+-	end
+ 
+ elseif strcmpi(string,'dakota'),
+ 	md.qmu.results=md.results.dakota;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13806-13807.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13806-13807.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13806-13807.diff	(revision 13980)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/externalpackages/openssl/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/openssl/install.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/openssl/install.sh	(revision 13807)
+@@ -0,0 +1,23 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf install src
++
++#Download latest version
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/openssl-0.9.8x.tar.gz' 'openssl-0.9.8x.tar.gz'
++
++#Untar
++tar -xzf openssl-0.9.8x.tar.gz
++mv openssl-0.9.8x src
++mkdir install
++
++#Configure openssl
++cd src
++./config --prefix="$ISSM_DIR/externalpackages/openssl/install"
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/openssl/install.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13807-13808.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13807-13808.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13807-13808.diff	(revision 13980)
@@ -0,0 +1,64 @@
+Index: ../trunk-jpl/src/m/mesh/roundmesh.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/roundmesh.py	(revision 13807)
++++ ../trunk-jpl/src/m/mesh/roundmesh.py	(revision 13808)
+@@ -26,8 +26,8 @@
+ 	x_list=numpy.ones(pointsonedge)
+ 	y_list=numpy.ones(pointsonedge)
+ 	theta=numpy.linspace(0.,2.*numpy.pi,num=pointsonedge,endpoint=False)
+-	x_list=radius*x_list*numpy.cos(theta)
+-	y_list=radius*y_list*numpy.sin(theta)
++	x_list=roundsigfig(radius*x_list*numpy.cos(theta),12)
++	y_list=roundsigfig(radius*y_list*numpy.sin(theta),12)
+ 	A=OrderedDict()
+ 	A['x']=x_list
+ 	A['y']=y_list
+@@ -48,3 +48,15 @@
+ 
+ 	return md
+ 
++def roundsigfig(x,n):
++
++	digits=numpy.ceil(numpy.log10(numpy.abs(x)))
++	x=x/10.**digits
++	x=numpy.round(x,decimals=n)
++	x=x*10.**digits
++
++	pos=numpy.nonzero(numpy.isnan(x))
++	x[pos]=0.
++
++	return x
++
+Index: ../trunk-jpl/src/m/mesh/roundmesh.m
+===================================================================
+--- ../trunk-jpl/src/m/mesh/roundmesh.m	(revision 13807)
++++ ../trunk-jpl/src/m/mesh/roundmesh.m	(revision 13808)
+@@ -16,8 +16,8 @@
+ %Calculate the cartesians coordinates of the points
+ x_list=ones(pointsonedge,1); y_list=ones(pointsonedge,1);
+ theta=(0.:2.*pi/pointsonedge:2.*pi*(1.-1./pointsonedge))';
+-x_list=radius*x_list.*cos(theta);
+-y_list=radius*y_list.*sin(theta);
++x_list=roundsigfig(radius*x_list.*cos(theta),12);
++y_list=roundsigfig(radius*y_list.*sin(theta),12);
+ A=struct('x',x_list,'y',y_list,'density',1.);
+ expwrite(A,'RoundDomainOutline.exp');
+ 
+@@ -32,3 +32,17 @@
+ 
+ %delete domain
+ delete('RoundDomainOutline.exp')
++end
++
++function x=roundsigfig(x,n)
++
++digits=ceil(log10(abs(x)));
++x=x./10.^digits;
++x=round(x.*10.^n)./10.^n;
++x=x.*10.^digits;
++
++pos=find(isnan(x));
++x(pos)=0.;
++
++end
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13808-13809.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13808-13809.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13808-13809.diff	(revision 13980)
@@ -0,0 +1,357 @@
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.par
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 13808)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.par	(revision 13809)
+@@ -1,11 +1,11 @@
+ %Start defining model parameters here
+ 
+ di=md.materials.rho_ice/md.materials.rho_water;
+-rad=1e6;
+-shelfextent=2e5;
++rad=1.e6;
++shelfextent=2.e5;
+ %Geometry
+-hmin=300;
+-hmax=1000;
++hmin=300.;
++hmax=1000.;
+ radius=sqrt((md.mesh.x).*md.mesh.x+(md.mesh.y).*md.mesh.y);
+ ymin=min(radius);
+ ymax=max(radius);
+@@ -13,42 +13,42 @@
+ md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
+ 
+ pos=find(md.mask.vertexongroundedice);
+-md.geometry.bed(pos)=md.geometry.bed(pos)-300*(radius(pos)-(rad-shelfextent))/(rad-shelfextent);
++md.geometry.bed(pos)=md.geometry.bed(pos)-300.*(radius(pos)-(rad-shelfextent))/(rad-shelfextent);
+ md.geometry.surface=md.geometry.bed+md.geometry.thickness;
+ 
+ pos=find(radius<200000);
+-md.geometry.thickness(pos)=100;
+-md.geometry.bed(pos)=-di*md.geometry.thickness(pos)-20;
++md.geometry.thickness(pos)=100.;
++md.geometry.bed(pos)=-di*md.geometry.thickness(pos)-20.;
+ md.geometry.surface(pos)=md.geometry.bed(pos)+md.geometry.thickness(pos);
+ 
+-
+-pos=find(md.mesh.x<.2*1e6 & md.mesh.x>-.2*1e6 & md.mesh.y>0);
+-md.geometry.thickness(pos)=100;
+-md.geometry.bed(pos)=-di*md.geometry.thickness(pos)-20;
++pos=find(md.mesh.x<0.2*1.e6 & md.mesh.x>-0.2*1.e6 & md.mesh.y>0.);
++md.geometry.thickness(pos)=100.;
++md.geometry.bed(pos)=-di*md.geometry.thickness(pos)-20.;
+ md.geometry.surface(pos)=md.geometry.bed(pos)+md.geometry.thickness(pos);
+ 
+-pos=find(md.mesh.x<.1*1e6 & md.mesh.x>-.1*1e6 & md.mesh.y<-.5*1e6 & md.mesh.y>-.6*1e6);
+-md.geometry.thickness(pos)=100;
+-md.geometry.bed(pos)=-di*md.geometry.thickness(pos)-20;
++pos=find(md.mesh.x<0.1*1.e6 & md.mesh.x>-0.1*1.e6 & md.mesh.y<-0.5*1.e6 & md.mesh.y>-0.6*1.e6);
++md.geometry.thickness(pos)=100.;
++md.geometry.bed(pos)=-di*md.geometry.thickness(pos)-20.;
+ md.geometry.surface(pos)=md.geometry.bed(pos)+md.geometry.thickness(pos);
+ 
+ %plug holes into the ice sheet, to test for grounding line migration. 
+ di=md.materials.rho_ice/md.materials.rho_water;
+ rad=sqrt(md.mesh.x.^2+md.mesh.y.^2);
+-pos=find(rad<200000);
+-md.geometry.thickness(pos)=100;
+-md.geometry.bed(pos)=-di*md.geometry.thickness(pos)-20;
++pos=find(rad<200000.);
++md.geometry.thickness(pos)=100.;
++md.geometry.bed(pos)=-di*md.geometry.thickness(pos)-20.;
+ md.geometry.surface(pos)=md.geometry.bed(pos)+md.geometry.thickness(pos);
+ 
+-pos=find(md.mesh.x<.2*1e6 & md.mesh.x>-.2*1e6 & md.mesh.y>0);
+-md.geometry.thickness(pos)=100;
+-md.geometry.bed(pos)=-di*md.geometry.thickness(pos)-20;
++pos=find(md.mesh.x<0.2*1.e6 & md.mesh.x>-0.2*1.e6 & md.mesh.y>0.);
++md.geometry.thickness(pos)=100.;
++md.geometry.bed(pos)=-di*md.geometry.thickness(pos)-20.;
+ md.geometry.surface(pos)=md.geometry.bed(pos)+md.geometry.thickness(pos);
+ 
+-pos=find(md.mesh.x<.1*1e6 & md.mesh.x>-.1*1e6 & md.mesh.y<-.5*1e6 & md.mesh.y>-.6*1e6);
+-md.geometry.thickness(pos)=100;
+-md.geometry.bed(pos)=-di*md.geometry.thickness(pos)-20;
++pos=find(md.mesh.x<0.1*1.e6 & md.mesh.x>-0.1*1.e6 & md.mesh.y<-0.5*1.e6 & md.mesh.y>-0.6*1.e6);
++md.geometry.thickness(pos)=100.;
++md.geometry.bed(pos)=-di*md.geometry.thickness(pos)-20.;
+ md.geometry.surface(pos)=md.geometry.bed(pos)+md.geometry.thickness(pos);
++
+ %Initial velocity 
+ md.initialization.vx=zeros(md.mesh.numberofvertices,1);
+ md.initialization.vy=zeros(md.mesh.numberofvertices,1);
+@@ -56,19 +56,19 @@
+ md.initialization.pressure=zeros(md.mesh.numberofvertices,1);
+ 
+ %Materials
+-md.initialization.temperature=(273-20)*ones(md.mesh.numberofvertices,1);
++md.initialization.temperature=(273.-20.)*ones(md.mesh.numberofvertices,1);
+ md.materials.rheology_B=paterson(md.initialization.temperature);
+-md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
++md.materials.rheology_n=3.*ones(md.mesh.numberofelements,1);
+ 
+ %Surface mass balance and basal melting
+-md.surfaceforcings.mass_balance=-10*ones(md.mesh.numberofvertices,1);
++md.surfaceforcings.mass_balance=-10.*ones(md.mesh.numberofvertices,1);
+ md.basalforcings.melting_rate=zeros(md.mesh.numberofvertices,1);
+-pos=find(md.mask.vertexonfloatingice);md.basalforcings.melting_rate(pos)=10;
++pos=find(md.mask.vertexonfloatingice);md.basalforcings.melting_rate(pos)=10.;
+ md.basalforcings.geothermalflux=ones(md.mesh.numberofvertices,1);
+ 
+ %Friction
+ pos=find(md.mask.elementonfloatingice);
+-md.friction.coefficient=20*ones(md.mesh.numberofvertices,1);
++md.friction.coefficient=20.*ones(md.mesh.numberofvertices,1);
+ md.friction.coefficient(md.mesh.elements(pos,:))=0;
+ md.friction.p=ones(md.mesh.numberofelements,1);
+ md.friction.q=ones(md.mesh.numberofelements,1);
+@@ -83,13 +83,13 @@
+ md.diagnostic.reltol=0.05;
+ md.steadystate.reltol=0.05;
+ md.diagnostic.abstol=NaN;
+-md.timestepping.time_step=5;
+-md.timestepping.final_time=5;
++md.timestepping.time_step=5.;
++md.timestepping.final_time=5.;
+ 
+ %bathymetry and grounding line migration:
+ md.groundingline.migration='AgressiveMigration';
+ md.geometry.bathymetry=md.geometry.bed;
+-pos=find(md.mask.vertexonfloatingice); md.geometry.bathymetry(pos)=md.geometry.bed(pos)-900;
++pos=find(md.mask.vertexonfloatingice); md.geometry.bathymetry(pos)=md.geometry.bed(pos)-900.;
+ 
+ %Deal with boundary conditions:
+ md.diagnostic.spcvx=NaN*ones(md.mesh.numberofvertices,1);
+@@ -106,7 +106,7 @@
+ md.balancethickness.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.prognostic.spcthickness=NaN*ones(md.mesh.numberofvertices,1);
+ md.diagnostic.referential=NaN*ones(md.mesh.numberofvertices,6);
+-md.thermal.spctemperature=737*ones(md.mesh.numberofvertices,1);
++md.thermal.spctemperature=737.*ones(md.mesh.numberofvertices,1);
+ 
+ %Change name so that no test have the same name
+ A=dbstack;
+Index: ../trunk-jpl/test/Par/RoundSheetShelf.py
+===================================================================
+--- ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 0)
++++ ../trunk-jpl/test/Par/RoundSheetShelf.py	(revision 13809)
+@@ -0,0 +1,122 @@
++import os.path
++import numpy
++import copy
++import inspect
++from paterson import *
++from verbose import *
++
++#Start defining model parameters here
++
++di=md.materials.rho_ice/md.materials.rho_water
++rad=1.e6
++shelfextent=2.e5
++#Geometry
++hmin=300.
++hmax=1000.
++radius=numpy.sqrt(md.mesh.x*md.mesh.x+md.mesh.y*md.mesh.y)
++ymin=numpy.min(radius)
++ymax=numpy.max(radius)
++md.geometry.thickness=hmax+(hmin-hmax)*(radius-ymin)/(ymax-ymin)
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++
++pos=numpy.nonzero(md.mask.vertexongroundedice)
++md.geometry.bed[pos]=md.geometry.bed[pos]-300.*(radius[pos]-(rad-shelfextent))/(rad-shelfextent)
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++
++pos=numpy.nonzero(radius<200000.)
++md.geometry.thickness[pos]=100.
++md.geometry.bed[pos]=-di*md.geometry.thickness[pos]-20.
++md.geometry.surface[pos]=md.geometry.bed[pos]+md.geometry.thickness[pos]
++
++pos=numpy.nonzero(numpy.logical_and(numpy.logical_and(md.mesh.x<0.2*1.e6,md.mesh.x>-0.2*1.e6),md.mesh.y>0.))
++md.geometry.thickness[pos]=100.
++md.geometry.bed[pos]=-di*md.geometry.thickness[pos]-20.
++md.geometry.surface[pos]=md.geometry.bed[pos]+md.geometry.thickness[pos]
++
++pos=numpy.nonzero(numpy.logical_and(numpy.logical_and(md.mesh.x<0.1*1.e6,md.mesh.x>-0.1*1.e6),numpy.logical_and(md.mesh.y<-0.5*1.e6,md.mesh.y>-0.6*1.e6)))
++md.geometry.thickness[pos]=100.
++md.geometry.bed[pos]=-di*md.geometry.thickness[pos]-20.
++md.geometry.surface[pos]=md.geometry.bed[pos]+md.geometry.thickness[pos]
++
++#plug holes into the ice sheet, to test for grounding line migration. 
++di=md.materials.rho_ice/md.materials.rho_water
++rad=numpy.sqrt(md.mesh.x**2+md.mesh.y**2)
++pos=numpy.nonzero(rad<200000.)
++md.geometry.thickness[pos]=100.
++md.geometry.bed[pos]=-di*md.geometry.thickness[pos]-20.
++md.geometry.surface[pos]=md.geometry.bed[pos]+md.geometry.thickness[pos]
++
++pos=numpy.nonzero(numpy.logical_and(numpy.logical_and(md.mesh.x<0.2*1.e6,md.mesh.x>-0.2*1.e6),md.mesh.y>0.))
++md.geometry.thickness[pos]=100.
++md.geometry.bed[pos]=-di*md.geometry.thickness[pos]-20.
++md.geometry.surface[pos]=md.geometry.bed[pos]+md.geometry.thickness[pos]
++
++pos=numpy.nonzero(numpy.logical_and(numpy.logical_and(md.mesh.x<0.1*1.e6,md.mesh.x>-0.1*1.e6),numpy.logical_and(md.mesh.y<-0.5*1.e6,md.mesh.y>-0.6*1.e6)))
++md.geometry.thickness[pos]=100.
++md.geometry.bed[pos]=-di*md.geometry.thickness[pos]-20.
++md.geometry.surface[pos]=md.geometry.bed[pos]+md.geometry.thickness[pos]
++
++#Initial velocity 
++md.initialization.vx=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.vy=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.vz=numpy.zeros((md.mesh.numberofvertices,1))
++md.initialization.pressure=numpy.zeros((md.mesh.numberofvertices,1))
++
++#Materials
++md.initialization.temperature=(273.-20.)*numpy.ones((md.mesh.numberofvertices,1))
++md.materials.rheology_B=paterson(md.initialization.temperature)
++md.materials.rheology_n=3.*numpy.ones((md.mesh.numberofelements,1))
++
++#Surface mass balance and basal melting
++md.surfaceforcings.mass_balance=-10.*numpy.ones((md.mesh.numberofvertices,1))
++md.basalforcings.melting_rate=numpy.zeros((md.mesh.numberofvertices,1))
++pos=numpy.nonzero(md.mask.vertexonfloatingice)
++md.basalforcings.melting_rate[pos]=10.
++md.basalforcings.geothermalflux=numpy.ones((md.mesh.numberofvertices,1))
++
++#Friction
++pos=numpy.nonzero(md.mask.elementonfloatingice)
++md.friction.coefficient=20.*numpy.ones((md.mesh.numberofvertices,1))
++md.friction.coefficient[md.mesh.elements[pos,:].astype(int)-1]=0
++md.friction.p=numpy.ones((md.mesh.numberofelements,1))
++md.friction.q=numpy.ones((md.mesh.numberofelements,1))
++
++#Numerical parameters
++md.diagnostic.viscosity_overshoot=0.0
++md.prognostic.stabilization=1
++md.thermal.stabilization=1
++md.verbose=verbose(0)
++md.settings.waitonlock=30
++md.diagnostic.restol=0.05
++md.diagnostic.reltol=0.05
++md.steadystate.reltol=0.05
++md.diagnostic.abstol=float('nan')
++md.timestepping.time_step=5.
++md.timestepping.final_time=5.
++
++#bathymetry and grounding line migration:
++md.groundingline.migration='AgressiveMigration'
++md.geometry.bathymetry=copy.deepcopy(md.geometry.bed)
++pos=numpy.nonzero(md.mask.vertexonfloatingice)
++md.geometry.bathymetry[pos]=md.geometry.bed[pos]-900.
++
++#Deal with boundary conditions:
++md.diagnostic.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++md.diagnostic.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++md.diagnostic.spcvz=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++
++pos=numpy.nonzero(numpy.logical_and(md.mesh.x==0,md.mesh.y==0))
++md.diagnostic.spcvx[pos]=0
++md.diagnostic.spcvy[pos]=0
++
++pressureload=copy.deepcopy(md.mesh.segments)
++pressureload=numpy.hstack((pressureload,(1*md.mask.elementonfloatingice[pressureload[:,-1].astype(int)-1] + 0*md.mask.elementongroundedice[pressureload[:,-1].astype(int)-1]).reshape(-1,1)))
++md.diagnostic.icefront=pressureload
++md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++md.prognostic.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
++md.diagnostic.referential=float('nan')*numpy.ones((md.mesh.numberofvertices,6))
++md.thermal.spctemperature=737.*numpy.ones((md.mesh.numberofvertices,1))
++
++#Change name so that no test have the same name
++if len(inspect.stack()) > 2:
++	md.miscellaneous.name = os.path.basename(inspect.stack()[2][1]).split('.')[0]
+
+Property changes on: ../trunk-jpl/test/Par/RoundSheetShelf.py
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/test/NightlyRun/test423.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test423.py	(revision 13809)
+@@ -0,0 +1,48 @@
++import numpy
++from model import *
++from roundmesh import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++radius=1.e6
++shelfextent=2.e5
++
++md=roundmesh(model(),radius,50000.)
++#fix center node to 0,0
++rad=numpy.sqrt(md.mesh.x**2+md.mesh.y**2)
++pos=numpy.argmin(rad)
++md.mesh.x[pos]=0.
++md.mesh.y[pos]=0.    #the closest node to the center is changed to be exactly at the center
++xelem=numpy.mean(md.mesh.x[md.mesh.elements.astype(int)-1],axis=1)
++yelem=numpy.mean(md.mesh.y[md.mesh.elements.astype(int)-1],axis=1)
++rad=numpy.sqrt(xelem**2+yelem**2)
++flags=numpy.zeros(md.mesh.numberofelements)
++pos=numpy.nonzero(rad>=(radius-shelfextent))
++flags[pos]=1
++md=setmask(md,flags,'') 
++md=parameterize(md,'../Par/RoundSheetShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++
++md.transient.isthermal=0
++md.transient.isprognostic=0
++md.transient.isdiagnostic=0
++md.transient.isgroundingline=1
++
++#test different grounding line dynamics.
++md.groundingline.migration='AgressiveMigration'
++md=solve(md,TransientSolutionEnum())
++element_on_iceshelf_agressive=md.results['TransientSolution'][1]['MaskElementonfloatingice']
++
++md.groundingline.migration='SoftMigration'
++md=solve(md,TransientSolutionEnum())
++element_on_iceshelf_soft=md.results['TransientSolution'][1]['MaskElementonfloatingice']
++
++#Fields and tolerances to track changes
++field_names     =['ElementOnIceShelfAgressive','ElementOnIceShelfSoft']
++field_tolerances=[1e-13,1e-13]
++field_values=[element_on_iceshelf_agressive,element_on_iceshelf_soft]
+Index: ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 13808)
++++ ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 13809)
+@@ -10,6 +10,5 @@
+ test417    needs Dakota
+ test418    needs Dakota
+ test420    needs Dakota
+-test423    needs roundmesh (and not straightforward)
+ test511    needs extract
+ test613    needs extract
+Index: ../trunk-jpl/test/NightlyRun/test423.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.m	(revision 13808)
++++ ../trunk-jpl/test/NightlyRun/test423.m	(revision 13809)
+@@ -1,13 +1,13 @@
+-radius=1e6;
+-shelfextent=2e5;
++radius=1.e6;
++shelfextent=2.e5;
+ 
+ md=roundmesh(model(),radius,50000.);
+ %fix center node to 0,0
+ rad=sqrt(md.mesh.x.^2+md.mesh.y.^2);
+ pos=find(rad==min(rad));
+-md.mesh.x(pos)=0; md.mesh.y(pos)=0; %the closest node to the center is changed to be exactly at the center
+-xelem=md.mesh.x(md.mesh.elements)*[1;1;1]/3;
+-yelem=md.mesh.y(md.mesh.elements)*[1;1;1]/3;
++md.mesh.x(pos)=0.; md.mesh.y(pos)=0.; %the closest node to the center is changed to be exactly at the center
++xelem=md.mesh.x(md.mesh.elements)*[1;1;1]/3.;
++yelem=md.mesh.y(md.mesh.elements)*[1;1;1]/3.;
+ rad=sqrt(xelem.^2+yelem.^2);
+ flags=zeros(md.mesh.numberofelements,1);
+ pos=find(rad>=(radius-shelfextent));
+Index: ../trunk-jpl/test/Archives/Archive423.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13809-13810.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13809-13810.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13809-13810.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/execution
+===================================================================
+--- ../trunk-jpl/execution	(revision 13809)
++++ ../trunk-jpl/execution	(revision 13810)
+
+Property changes on: ../trunk-jpl/execution
+___________________________________________________________________
+Modified: svn:ignore
+## -1,3 +1,4 ##
++*-*-*-*
+ Pig-*
+ test*
+ pig*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13810-13811.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13810-13811.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13810-13811.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/diagnostic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/diagnostic.m	(revision 13810)
++++ ../trunk-jpl/src/m/classes/diagnostic.m	(revision 13811)
+@@ -91,7 +91,7 @@
+ 			end
+ 
+ 			%singular solution
+-			if ~any((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy))==2),
++			if ~(any(~isnan(md.diagnostic.spcvx)) & any(~isnan(md.diagnostic.spcvy))),
+ 				md = checkmessage(md,['model is not well posed (singular). You need at least one node with fixed velocity!']);
+ 			end
+ 			%CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
Index: /issm/oecreview/Archive/13393-13976/ISSM-13811-13812.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13811-13812.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13811-13812.diff	(revision 13980)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/src/m/plot/plot_highlightvertices.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_highlightvertices.m	(revision 13811)
++++ ../trunk-jpl/src/m/plot/plot_highlightvertices.m	(revision 13812)
+@@ -20,7 +20,7 @@
+ 
+ 	%Highlight
+ 	pos=getfieldvalue(options,'highlight',[]);
+-	text(x(pos),y(pos),z(pos),num2str(transpose(pos)),...
++	text(x(pos),y(pos),z(pos),num2str(pos(:)),...
+ 		'backgroundcolor',[1 0 0],'HorizontalAlignment','center','VerticalAlignment','middle');
+ else
+ 	%plot mesh 
+@@ -33,7 +33,7 @@
+ 
+ 	%Highlight
+ 	pos=getfieldvalue(options,'highlight',[]);
+-	text(x(pos),y(pos),z(pos),num2str(transpose(pos)),...
++	text(x(pos),y(pos),z(pos),num2str(pos(:)),...
+ 		'backgroundcolor',[1 0 0],'HorizontalAlignment','center','VerticalAlignment','middle');
+ end
+ 
+Index: ../trunk-jpl/src/m/plot/plot_vertexnumbering.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_vertexnumbering.m	(revision 13811)
++++ ../trunk-jpl/src/m/plot/plot_vertexnumbering.m	(revision 13812)
+@@ -24,7 +24,7 @@
+ 
+ 	%Highlight
+ 	pos=getfieldvalue(options,'highlight',[]);
+-	text(x(pos),y(pos),z(pos),num2str(transpose(pos)),...
++	text(x(pos),y(pos),z(pos),num2str(pos(:)),...
+ 		'backgroundcolor',[1 0 0],'HorizontalAlignment','center','VerticalAlignment','middle');
+ else
+ 	%plot mesh 
+@@ -41,7 +41,7 @@
+ 
+ 	%Highlight
+ 	pos=getfieldvalue(options,'highlight',[]);
+-	text(x(pos),y(pos),z(pos),num2str(transpose(pos)),...
++	text(x(pos),y(pos),z(pos),num2str(pos(:)),...
+ 		'backgroundcolor',[1 0 0],'HorizontalAlignment','center','VerticalAlignment','middle');
+ end
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13812-13813.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13812-13813.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13812-13813.diff	(revision 13980)
@@ -0,0 +1,647 @@
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13813)
+@@ -20,12 +20,13 @@
+ 
+ 	/*Output results: */
+ 	femmodel->OutputResults();
++	_error_("STOP HERE");
+ 
+ 	/*Wrap up: */
+ 	delete femmodel;
+ 
+ 	/*Finalize environment:*/
+-	EnvironmentFinalize();
++	//EnvironmentFinalize();
+ 
+ 	/*Finalize exception trapping: */
+ 	ExceptionTrapEnd();
+Index: ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13813)
+@@ -42,18 +42,15 @@
+ /*Notice the d_, which prefixes anything that is being provided to us by the Dakota pluggin. Careful. some things are ours, some are dakotas!: */
+ int DakotaSpawnCore(double* d_responses, int d_numresponses, double* d_variables, char** d_variables_descriptors,int d_numvariables, void* void_femmodel,int counter){
+ 
+-	int i;
++	char     **responses_descriptors    = NULL;      //these are our! there are only numresponsedescriptors of them, not d_numresponses!!!
++	int        numresponsedescriptors;
++	char      *string                   = NULL;
++	int        solution_type;
++	bool       control_analysis         = false;
++	void     (*solutioncore)(FemModel*) = NULL;
++	FemModel  *femmodel                 = NULL;
++	bool       nodakotacore             = true;
+ 
+-	char   **responses_descriptors     = NULL; //these are our!  there are only numresponsedescriptors of them, not d_numresponses!!!
+-	int      numresponsedescriptors;
+-	char    *string                    = NULL;
+-	int      string_length;
+-	int      solution_type;
+-	bool     control_analysis          = false;
+-	void (*solutioncore)(FemModel*)    = NULL;
+-	FemModel* femmodel                 = NULL;
+-	bool      nodakotacore             = true;
+-
+ 	/*If counter==-1 on cpu0, it means that the dakota runs are done. In which case, bail out and return 0: */
+ 	#ifdef _HAVE_MPI_
+ 	MPI_Bcast(&counter,1,MPI_INT,0,IssmComm::GetComm()); 
+Index: ../trunk-jpl/src/c/Container/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13813)
+@@ -152,9 +152,8 @@
+ 
+ 	int i;
+ 	int num_procs;
++	int numnodes;
+ 
+-	int  numnodes;
+-
+ 	/*recover num_procs: */
+ 	num_procs=IssmComm::GetSize();
+ 
+Index: ../trunk-jpl/src/c/Container/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13813)
+@@ -168,19 +168,19 @@
+ 	int my_rank;
+ 	int num_procs;
+ 
+-	Patch  *patch        = NULL;
+-	int    *resultsenums = NULL;
+-	int    *resultssizes  = NULL;
+-	int    *resultssteps  = NULL;
+-	IssmDouble *resultstimes = NULL;
+-	IssmDouble *vector_serial= NULL;
+-	Vector<IssmDouble>*     vector       = NULL;
+-	bool   io_gather;
+-	bool   results_as_patches;
+-	int    numberofvertices,numberofelements;
+-	int    numberofresults,vectorsize;
+-	int    rank;
+-	int    minrank;
++	Patch               *patch              = NULL;
++	int                 *resultsenums       = NULL;
++	int                 *resultssizes       = NULL;
++	int                 *resultssteps       = NULL;
++	IssmDouble          *resultstimes       = NULL;
++	IssmDouble          *vector_serial      = NULL;
++	Vector<IssmDouble> *vector = NULL;
++	bool                io_gather;
++	bool                results_as_patches;
++	int                 numberofvertices     ,numberofelements;
++	int                 numberofresults      ,vectorsize;
++	int                 rank;
++	int                 minrank;
+ 
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+Index: ../trunk-jpl/src/c/Container/Inputs.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Inputs.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/Container/Inputs.cpp	(revision 13813)
+@@ -362,13 +362,10 @@
+ /*FUNCTION Inputs::DuplicateInput{{{*/
+ void  Inputs::DuplicateInput(int original_enum,int new_enum){
+ 
+-	Input* original=NULL;
+-	Input* copy=NULL;
+-
+ 	/*Make a copy of the original input: */
+-	original=dynamic_cast<Input*>(this->GetInput(original_enum));
++	Input* original=dynamic_cast<Input*>(this->GetInput(original_enum));
+ 	if(!original)_error_("could not find input with enum: " << EnumToStringx(original_enum)); 
+-	copy=dynamic_cast<Input*>(original->copy());
++	Input* copy=dynamic_cast<Input*>(original->copy());
+ 
+ 	/*Change copy enum to reinitialized_enum: */
+ 	copy->ChangeEnum(new_enum);
+@@ -406,12 +403,9 @@
+ /*FUNCTION Inputs::AXPY{{{*/
+ void  Inputs::AXPY(int MeshYEnum, IssmDouble scalar, int MeshXEnum){
+ 
+-	Input* xinput=NULL;
+-	Input* yinput=NULL;
+-
+ 	/*Find x and y inputs: */
+-	xinput=dynamic_cast<Input*>(this->GetInput(MeshXEnum));
+-	yinput=dynamic_cast<Input*>(this->GetInput(MeshYEnum));
++	Input* xinput=dynamic_cast<Input*>(this->GetInput(MeshXEnum));
++	Input* yinput=dynamic_cast<Input*>(this->GetInput(MeshYEnum));
+ 
+ 	/*some checks: */
+ 	if(!xinput) _error_("input " << EnumToStringx(MeshXEnum) << " could not be found!");
+Index: ../trunk-jpl/src/c/shared/Exp/exp.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Exp/exp.h	(revision 13812)
++++ ../trunk-jpl/src/c/shared/Exp/exp.h	(revision 13813)
+@@ -169,7 +169,6 @@
+ 	int                 *profnvertices = NULL;
+ 	doubletype         **pprofx        = NULL;
+ 	doubletype         **pprofy        = NULL;
+-	Contour<doubletype> *contour       = NULL;
+ 
+ 	/*output: */
+ 	DataSet *domain = NULL;
+Index: ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp	(revision 13813)
+@@ -12,7 +12,6 @@
+ 	int      numnodes;
+ 	double*  xc=NULL;
+ 	double*  yc=NULL;
+-	double   value;
+ 
+ 	/*output: */
+ 	SeqVec<IssmPDouble>* flags=NULL;
+@@ -32,7 +31,6 @@
+ 
+ 	/*Assign output pointers: */
+ 	*pflags=flags;
+-
+ 	return 1;
+ }
+ 
+Index: ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp	(revision 13813)
+@@ -15,10 +15,8 @@
+ void CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath,int solution_type,int analysis_type){
+ 
+ 	/*variable declarations: {{{*/
+-	int i,j,k;
+-
++	int i;
+ 	Parameters* parameters = NULL;
+-	int      second_count;
+ 
+ 	int*     part=NULL;
+ 	double*  dpart=NULL;
+@@ -38,8 +36,6 @@
+ 	//descriptors:
+ 	char tag[50];
+ 
+-	int      M;
+-	int      m,n;
+ 	bool     dakota_analysis=false;
+ 	char*    name=NULL;
+ 	int      numberofresponses;
+Index: ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp	(revision 13813)
+@@ -57,6 +57,8 @@
+ 	#endif
+ 
+ 	/*Display message*/
++	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
++	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 	if(VerboseModule()) _pprintLine_("   Solving");
+ 	#if _PETSC_MAJOR_ < 3 || (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 2)
+ 	if(VerboseSolver())PetscOptionsPrint(stdout);
+@@ -70,6 +72,8 @@
+ 	if(!global_n){
+ 		*puf=NewVec(0,IssmComm::GetComm()); return;
+ 	}
++	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
++	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 
+ 	/*Initial guess */
+ 	/*Now, check that we are not giving an initial guess to the solver, if we are running a direct solver: */
+@@ -84,6 +88,8 @@
+ 		VecDuplicate(uf0,&uf); VecCopy(uf0,uf);
+ 	}
+ 	else{
++		PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
++		PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 		MatGetLocalSize(Kff,&local_m,&local_n);uf=NewVec(local_n,IssmComm::GetComm(),fromlocalsize);
+ 	}
+ 
+@@ -103,6 +109,8 @@
+ 	KSPCreate(IssmComm::GetComm(),&ksp);
+ 	KSPSetOperators(ksp,Kff,Kff,DIFFERENT_NONZERO_PATTERN);
+ 	KSPSetFromOptions(ksp);
++	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
++	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 
+ 	#if _PETSC_MAJOR_==3
+ 	/*Specific solver?: */
+@@ -114,6 +122,8 @@
+ 		PCFactorSetMatSolverPackage(pc,MATSOLVERMUMPS);
+ 		#endif
+ 	}
++	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
++	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 
+ 	/*Stokes: */
+ 	if (solver_type==StokesSolverEnum){
+@@ -145,13 +155,19 @@
+ 
+ 	/*Solve: */
+ 	if(VerboseSolver())KSPView(ksp,PETSC_VIEWER_STDOUT_WORLD);
++	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
++	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 	KSPSolve(ksp,pf,uf);
++	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
++	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 
+ 	/*Check convergence*/
+ 	KSPGetIterationNumber(ksp,&iteration_number);
+ 	if (iteration_number<0) _error_("Solver diverged at iteration number: " << -iteration_number);
+ 
+ 	/*Free resources:*/
++	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
++	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 	KSPFree(&ksp);
+ 
+ 	/*Assign output pointers:*/
+Index: ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp	(revision 13813)
+@@ -23,7 +23,7 @@
+ 
+ #ifdef _HAVE_GSL_
+ 	/*Intermediary: */
+-	int M,N,N2,s;
++	int M,N,N2;
+ 	SeqVec<IssmDouble> *uf = NULL;
+ 
+ 	Kff->GetSize(&M,&N);
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp	(revision 13813)
+@@ -99,11 +99,11 @@
+ 	output->enum_type=this->enum_type;
+ 	output->control_id=this->control_id;
+ 
+-	if(values)      output->values=(Input*)this->values->copy();
+-	if(savedvalues) output->savedvalues=(Input*)this->savedvalues->copy();
+-	if(minvalues)   output->minvalues=(Input*)this->minvalues->copy();
+-	if(maxvalues)   output->maxvalues=(Input*)this->maxvalues->copy();
+-	if(gradient)    output->gradient=(Input*)this->gradient->copy();
++	if(values)      output->values      = dynamic_cast<Input*>(this->values->copy());
++	if(savedvalues) output->savedvalues = dynamic_cast<Input*>(this->savedvalues->copy());
++	if(minvalues)   output->minvalues   = dynamic_cast<Input*>(this->minvalues->copy());
++	if(maxvalues)   output->maxvalues   = dynamic_cast<Input*>(this->maxvalues->copy());
++	if(gradient)    output->gradient    = dynamic_cast<Input*>(this->gradient->copy());
+ 
+ 	return output;
+ }
+@@ -254,7 +254,7 @@
+ 	if(!values) _error_("Values of " << EnumToStringx(this->enum_type) << " not found");
+ 
+ 	if(savedvalues) delete this->savedvalues;
+-	this->savedvalues=(Input*)this->values->copy();
++	this->savedvalues=dynamic_cast<Input*>(this->values->copy());
+ }/*}}}*/
+ /*FUNCTION ControlInput::UpdateValue{{{*/
+ void ControlInput::UpdateValue(IssmDouble scalar){
+@@ -262,7 +262,7 @@
+ 	if(!savedvalues) _error_("Values of " << EnumToStringx(this->enum_type) << " not found");
+ 
+ 	if(values) delete this->values;
+-	this->values=(Input*)this->savedvalues->copy();
++	this->values=dynamic_cast<Input*>(this->savedvalues->copy());
+ 	this->values->AXPY(gradient,scalar);
+ }/*}}}*/
+ /*FUNCTION ControlInput::VerticallyIntegrate{{{*/
+Index: ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp	(revision 13813)
+@@ -82,7 +82,7 @@
+ 	/*Create new Datasetinput (copy of current input)*/
+ 	outinput=new DatasetInput();
+ 	outinput->enum_type=this->enum_type;
+-	outinput->inputs=(Inputs*)this->inputs->SpawnTriaInputs(indices);
++	outinput->inputs=dynamic_cast<Inputs*>(this->inputs->SpawnTriaInputs(indices));
+ 
+ 	/*Assign output*/
+ 	return outinput;
+@@ -109,7 +109,7 @@
+ 
+ 	/*Get requested input within dataset*/
+ 	if(index<0 || index > inputs->Size()-1) _error_("index requested (" << index << ") exceeds dataset size (" << inputs->Size() << ")");
+-	Input* input=(Input*)this->inputs->GetObjectByOffset(index);
++	Input* input=dynamic_cast<Input*>(this->inputs->GetObjectByOffset(index));
+ 
+ 	input->GetInputValue(pvalue,gauss);
+ }
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 13813)
+@@ -471,10 +471,9 @@
+ /*FUNCTION Icefront::CreatePVectorDiagnosticMacAyeal3d{{{*/
+ ElementVector* Icefront::CreatePVectorDiagnosticMacAyeal3d(void){
+ 
+-	Icefront* icefront=NULL;
+-	Penta*    penta=NULL;
+-	Tria*     tria=NULL;
+-	bool      onbed;
++	Icefront *icefront = NULL;
++	Penta    *penta    = NULL;
++	Tria     *tria     = NULL;
+ 
+ 	/*Cast element onto Penta*/
+ 	penta   =(Penta*)this->element;
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13813)
+@@ -404,7 +404,7 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j,dim;
++	int        dim;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble Jdettria,dt,vx,vy;
+ 	IssmDouble L[NUMVERTICES];
+@@ -592,7 +592,6 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j;
+ 	IssmDouble Jdettria,dt;
+ 	IssmDouble surface_mass_balance_g,basal_melting_g,basal_melting_correction_g,thickness_g;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+@@ -628,7 +627,7 @@
+ 		else
+ 		 basal_melting_correction_g=0.;
+ 
+-		for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g-basal_melting_correction_g))*L[i];
++		for(int i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g-basal_melting_correction_g))*L[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -643,7 +642,6 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j;
+ 	IssmDouble Jdettria,dt;
+ 	IssmDouble surface_mass_balance_g,basal_melting_g,thickness_g;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+@@ -673,7 +671,7 @@
+ 		basal_melting_input->GetInputValue(&basal_melting_g,gauss);
+ 		thickness_input->GetInputValue(&thickness_g,gauss);
+ 
+-		for(i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g))*L[i];
++		for(int i=0;i<numdof;i++) pe->values[i]+=Jdettria*gauss->weight*(thickness_g+dt*(surface_mass_balance_g-basal_melting_g))*L[i];
+ 	}
+ 
+ 	/*Clean up and return*/
+@@ -688,7 +686,7 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int        i,j;
++	int        i;
+ 	int        analysis_type;
+ 	IssmDouble Jdet;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+@@ -1374,12 +1372,13 @@
+ /*FUNCTION Tria::InputToResult{{{*/
+ void  Tria::InputToResult(int enum_type,int step,IssmDouble time){
+ 
+-	int    i;
+ 	Input *input = NULL;	
+ 
+ 	/*Go through all the input objects, and find the one corresponding to enum_type, if it exists: */
+-	if (enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum) input=this->material->inputs->GetInput(enum_type);
+-	else input=this->inputs->GetInput(enum_type);
++	if (enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum)
++	 input=this->material->inputs->GetInput(enum_type);
++	else
++	 input=this->inputs->GetInput(enum_type);
+ 	//if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found in tria->inputs");
+ 	if(!input)return;
+ 
+@@ -2563,15 +2562,14 @@
+ /*FUNCTION Tria::MassFlux {{{*/
+ IssmDouble Tria::MassFlux( IssmDouble* segment,bool process_units){
+ 
+-	const int    numdofs=2;
+-
+-	int        i,dim;
+-	IssmDouble     mass_flux=0;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     normal[2];
+-	IssmDouble     length,rho_ice;
+-	IssmDouble     x1,y1,x2,y2,h1,h2;
+-	IssmDouble     vx1,vx2,vy1,vy2;
++	const int  numdofs=2;
++	int        dim;
++	IssmDouble mass_flux=0;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble normal[2];
++	IssmDouble length,rho_ice;
++	IssmDouble x1,y1,x2,y2,h1,h2;
++	IssmDouble vx1,vx2,vy1,vy2;
+ 	GaussTria* gauss_1=NULL;
+ 	GaussTria* gauss_2=NULL;
+ 
+@@ -3986,12 +3984,11 @@
+ IssmDouble Tria::RheologyBbarAbsGradient(bool process_units,int weight_index){
+ 
+ 	/* Intermediaries */
+-	int        ig;
+-	IssmDouble     Jelem = 0;
+-	IssmDouble     weight;
+-	IssmDouble     Jdet;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     dp[NDOF2];
++	IssmDouble Jelem = 0;
++	IssmDouble weight;
++	IssmDouble Jdet;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble dp[NDOF2];
+ 	GaussTria *gauss = NULL;
+ 
+ 	/*retrieve parameters and inputs*/
+@@ -4029,9 +4026,6 @@
+ /*FUNCTION Tria::SurfaceAverageVelMisfit {{{*/
+ IssmDouble Tria::SurfaceAverageVelMisfit(bool process_units,int weight_index){
+ 
+-	const int    numdof=2*NUMVERTICES;
+-
+-	int        i;
+ 	IssmDouble Jelem=0,S,Jdet;
+ 	IssmDouble misfit;
+ 	IssmDouble vx,vy,vxobs,vyobs,weight;
+@@ -4090,9 +4084,6 @@
+ /*FUNCTION Tria::SurfaceLogVelMisfit {{{*/
+ IssmDouble Tria::SurfaceLogVelMisfit(bool process_units,int weight_index){
+ 
+-	const int    numdof=NDOF2*NUMVERTICES;
+-
+-	int        i;
+ 	IssmDouble Jelem=0;
+ 	IssmDouble misfit,Jdet;
+ 	IssmDouble epsvel=2.220446049250313e-16;
+@@ -4155,9 +4146,6 @@
+ /*FUNCTION Tria::SurfaceLogVxVyMisfit {{{*/
+ IssmDouble Tria::SurfaceLogVxVyMisfit(bool process_units,int weight_index){
+ 
+-	const int    numdof=NDOF2*NUMVERTICES;
+-
+-	int        i;
+ 	int        fit=-1;
+ 	IssmDouble Jelem=0, S=0;
+ 	IssmDouble epsvel=2.220446049250313e-16;
+@@ -4221,8 +4209,6 @@
+ /*FUNCTION Tria::SurfaceAbsVelMisfit {{{*/
+ IssmDouble Tria::SurfaceAbsVelMisfit(bool process_units,int weight_index){
+ 
+-	const int    numdof=NDOF2*NUMVERTICES;
+-
+ 	IssmDouble Jelem=0;
+ 	IssmDouble misfit,Jdet;
+ 	IssmDouble vx,vy,vxobs,vyobs,weight;
+@@ -4280,7 +4266,6 @@
+ /*}}}*/
+ /*FUNCTION Tria::SurfaceRelVelMisfit {{{*/
+ IssmDouble Tria::SurfaceRelVelMisfit(bool process_units,int weight_index){
+-	const int  numdof=2*NUMVERTICES;
+ 
+ 	IssmDouble  Jelem=0;
+ 	IssmDouble  scalex=1,scaley=1;
+@@ -4345,12 +4330,11 @@
+ IssmDouble Tria::ThicknessAbsGradient(bool process_units,int weight_index){
+ 
+ 	/* Intermediaries */
+-	int        ig;
+-	IssmDouble     Jelem = 0;
+-	IssmDouble     weight;
+-	IssmDouble     Jdet;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     dp[NDOF2];
++	IssmDouble Jelem = 0;
++	IssmDouble weight;
++	IssmDouble Jdet;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble dp[NDOF2];
+ 	GaussTria *gauss = NULL;
+ 
+ 	/*retrieve parameters and inputs*/
+@@ -4389,7 +4373,6 @@
+ IssmDouble Tria::ThicknessAlongGradient(bool process_units,int weight_index){
+ 
+ 	/* Intermediaries */
+-	int         ig;
+ 	IssmDouble  Jelem = 0;
+ 	IssmDouble  weight;
+ 	IssmDouble  Jdet;
+@@ -4441,7 +4424,6 @@
+ IssmDouble Tria::ThicknessAcrossGradient(bool process_units,int weight_index){
+ 
+ 	/* Intermediaries */
+-	int         ig;
+ 	IssmDouble  Jelem = 0;
+ 	IssmDouble  weight;
+ 	IssmDouble  Jdet;
+@@ -4493,7 +4475,6 @@
+ IssmDouble Tria::ThicknessAbsMisfit(bool process_units,int weight_index){
+ 
+ 	/*Intermediaries*/
+-	int        i;
+ 	IssmDouble thickness,thicknessobs,weight;
+ 	IssmDouble Jdet;
+ 	IssmDouble Jelem = 0;
+@@ -4993,12 +4974,11 @@
+ IssmDouble Tria::DragCoefficientAbsGradient(bool process_units,int weight_index){
+ 
+ 	/* Intermediaries */
+-	int        ig;
+-	IssmDouble     Jelem = 0;
+-	IssmDouble     weight;
+-	IssmDouble     Jdet;
+-	IssmDouble     xyz_list[NUMVERTICES][3];
+-	IssmDouble     dp[NDOF2];
++	IssmDouble Jelem = 0;
++	IssmDouble weight;
++	IssmDouble Jdet;
++	IssmDouble xyz_list[NUMVERTICES][3];
++	IssmDouble dp[NDOF2];
+ 	GaussTria *gauss = NULL;
+ 
+ 	/*retrieve parameters and inputs*/
+@@ -5315,7 +5295,6 @@
+ 
+ 	/*Intermediaries */
+ 	IssmDouble diffusivity;
+-	int        i,j;
+ 	IssmDouble Jdettria,DL_scalar,dt,h;
+ 	IssmDouble vx,vy,vel,dvxdx,dvydy;
+ 	IssmDouble dvx[2],dvy[2];
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13813)
+@@ -4564,9 +4564,6 @@
+ /*FUNCTION Penta::CreateKMatrixAdjointPattyn{{{*/
+ ElementMatrix* Penta::CreateKMatrixAdjointPattyn(void){
+ 
+-	/*Constants*/
+-	const int    numdof=NDOF2*NUMVERTICES;
+-
+ 	/*Intermediaries */
+ 	int        i,j;
+ 	bool       incomplete_adjoint;
+@@ -6780,7 +6777,7 @@
+ ElementMatrix* Penta::CreateKMatrixDiagnosticStokesViscous(void){
+ 
+ 	/*Intermediaries */
+-	int        i,j,approximation;
++	int        i,approximation;
+ 	IssmDouble Jdet,viscosity,stokesreconditioning;
+ 	IssmDouble xyz_list[NUMVERTICES][3];
+ 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
+@@ -6931,7 +6928,6 @@
+ 	const int    numdof=NDOF1*NUMVERTICES;
+ 
+ 	/*Intermediaries */
+-	int         i,j;
+ 	IssmDouble  Jdet;
+ 	IssmDouble  xyz_list[NUMVERTICES][3];
+ 	IssmDouble  B[NDOF1][NUMVERTICES];
+@@ -7187,7 +7183,7 @@
+ 	const int   numdof=NUMVERTICES*NDOF4;
+ 
+ 	/*Intermediaries */
+-	int         i,j;
++	int         i;
+ 	int         approximation;
+ 	IssmDouble  viscosity,Jdet;
+ 	IssmDouble  stokesreconditioning;
+@@ -7396,9 +7392,6 @@
+ /*FUNCTION Penta::CreatePVectorDiagnosticHutter{{{*/
+ ElementVector* Penta::CreatePVectorDiagnosticHutter(void){
+ 
+-	/*Constants*/
+-	const int numdofs=NDOF2*NUMVERTICES;
+-
+ 	/*Intermediaries*/
+ 	int          i,j;
+ 	int          node0,node1;
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13812)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13813)
+@@ -826,7 +826,6 @@
+ 
+ 
+ 	/*Intermediary*/
+-	int      i;
+ 	int      num_responses;
+ 	Element *element       = NULL;
+ 	int     *responses     = NULL;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13813-13814.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13813-13814.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13813-13814.diff	(revision 13980)
@@ -0,0 +1,69 @@
+Index: ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp	(revision 13813)
++++ ../trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp	(revision 13814)
+@@ -57,8 +57,6 @@
+ 	#endif
+ 
+ 	/*Display message*/
+-	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
+-	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 	if(VerboseModule()) _pprintLine_("   Solving");
+ 	#if _PETSC_MAJOR_ < 3 || (_PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 2)
+ 	if(VerboseSolver())PetscOptionsPrint(stdout);
+@@ -72,8 +70,6 @@
+ 	if(!global_n){
+ 		*puf=NewVec(0,IssmComm::GetComm()); return;
+ 	}
+-	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
+-	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 
+ 	/*Initial guess */
+ 	/*Now, check that we are not giving an initial guess to the solver, if we are running a direct solver: */
+@@ -88,8 +84,6 @@
+ 		VecDuplicate(uf0,&uf); VecCopy(uf0,uf);
+ 	}
+ 	else{
+-		PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
+-		PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 		MatGetLocalSize(Kff,&local_m,&local_n);uf=NewVec(local_n,IssmComm::GetComm(),fromlocalsize);
+ 	}
+ 
+@@ -109,8 +103,6 @@
+ 	KSPCreate(IssmComm::GetComm(),&ksp);
+ 	KSPSetOperators(ksp,Kff,Kff,DIFFERENT_NONZERO_PATTERN);
+ 	KSPSetFromOptions(ksp);
+-	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
+-	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 
+ 	#if _PETSC_MAJOR_==3
+ 	/*Specific solver?: */
+@@ -122,8 +114,6 @@
+ 		PCFactorSetMatSolverPackage(pc,MATSOLVERMUMPS);
+ 		#endif
+ 	}
+-	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
+-	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 
+ 	/*Stokes: */
+ 	if (solver_type==StokesSolverEnum){
+@@ -155,19 +145,13 @@
+ 
+ 	/*Solve: */
+ 	if(VerboseSolver())KSPView(ksp,PETSC_VIEWER_STDOUT_WORLD);
+-	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
+-	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 	KSPSolve(ksp,pf,uf);
+-	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
+-	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 
+ 	/*Check convergence*/
+ 	KSPGetIterationNumber(ksp,&iteration_number);
+ 	if (iteration_number<0) _error_("Solver diverged at iteration number: " << -iteration_number);
+ 
+ 	/*Free resources:*/
+-	PetscSynchronizedPrintf(MPI_COMM_WORLD,"-------------- file: SolverxPetsc.cpp line: %i\n",__LINE__);
+-	PetscSynchronizedFlush(MPI_COMM_WORLD); 
+ 	KSPFree(&ksp);
+ 
+ 	/*Assign output pointers:*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13814-13815.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13814-13815.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13814-13815.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13814)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13815)
+@@ -20,7 +20,6 @@
+ 
+ 	/*Output results: */
+ 	femmodel->OutputResults();
+-	_error_("STOP HERE");
+ 
+ 	/*Wrap up: */
+ 	delete femmodel;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13815-13816.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13815-13816.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13815-13816.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/c/include/macros.h
+===================================================================
+--- ../trunk-jpl/src/c/include/macros.h	(revision 13815)
++++ ../trunk-jpl/src/c/include/macros.h	(revision 13816)
+@@ -82,14 +82,15 @@
+ #define ExceptionTrapEnd(); }\
+ 	catch(ErrorException &exception){\
+ 		exception.Report();\
+-		return 1;\
++		return 0;\
+ 	}\
+ 	catch (exception& e) {\
+ 		_printf_(true,"Standard exception: %s\n",e.what());\
+-		return 1;\
++		return 0;\
+ 	}\
+ 	catch(...){\
+ 		_printf_(true,"An unexpected error occurred");\
++		return 0;\
+ 	}
+ /*}}}*/
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13816-13817.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13816-13817.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13816-13817.diff	(revision 13980)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/m/classes/clusters/generic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 13816)
++++ ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 13817)
+@@ -13,6 +13,7 @@
+ 		port=0;
+ 		interactive=1;
+ 		codepath=[issmdir() '/bin'];
++		etcpath=[issmdir() '/etc'];
+ 		executionpath=[issmdir() '/execution'];
+ 		valgrind=[issmdir() '/externalpackages/valgrind/install/bin/valgrind'];
+ 		valgrindlib=[issmdir() '/externalpackages/valgrind/install/lib/libmpidebug.so'];
+@@ -189,7 +190,7 @@
+ 			issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+ 
+ 			disp('launching solution sequence on remote cluster');
+-			launchcommand=['source ' issmdir '/etc/environment.sh && cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
++			launchcommand=['source ' cluster.etcpath '/environment.sh && cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+ 				' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && source  ' modelname '.queue '];
+ 			issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+ 		end %}}}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13817-13818.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13817-13818.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13817-13818.diff	(revision 13980)
@@ -0,0 +1,53 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.3-walgreen.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.3-walgreen.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/petsc/install-3.3-walgreen.sh	(revision 13818)
+@@ -0,0 +1,42 @@
++#!/bin/bash
++
++##Some cleanup
++#rm -rf install petsc-3.3-p2 src
++#mkdir install src
++#
++##Download from ISSM server
++#$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/petsc-lite-3.3-p2.tar.gz' 'petsc-3.3-p2.tar.gz'
++#
++##Untar and move petsc to install directory
++#tar -zxvf  petsc-3.3-p2.tar.gz
++#mv petsc-3.3-p2/* src/
++#rm -rf petsc-3.3-p2
++
++#configure
++cd src
++./config/configure.py \
++ --prefix="$ISSM_DIR/externalpackages/petsc/install" \
++ --PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
++ --with-debugging=0 \
++ --with-shared-libraries=1 \
++ --with-blas-lapack-dir=/opt/intel/mkl/10.0.1.014/ \
++ --known-mpi-shared-libraries=1 \
++ --with-mpi=1 \
++ --download-mumps=yes \
++ --download-blacs=yes  \
++ --download-blas=yes \
++ --download-f-blas-lapack=yes \
++ --download-parmetis=yes \
++ --download-metis=yes \
++ --download-trilinos=yes \
++ --download-euclid=yes \
++ --download-spai=yes \
++ --download-superlu=yes \
++ --download-hypre=yes \
++ --download-prometheus=yes \
++ --with-cc=/opt/mpich/ch-p4/bin/mpicc \
++ --with-cxx=/opt/mpich/ch-p4/bin/mpicxx \
++ --with-fc=/opt/mpich/ch-p4/bin/mpif90 \
++ --COPTFLAGS="-I/opt/mpich/ch-p4/include/ -lmpich -O3" \
++ --FOPTFLAGS="-I/opt/mpich/ch-p4/include/ -lmpich -O3" \
++ --CXXOPTFLAGS="-I/opt/mpich/ch-p4/include/ -lmpich -O3" 
+
+Property changes on: ../trunk-jpl/externalpackages/petsc/install-3.3-walgreen.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13818-13819.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13818-13819.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13818-13819.diff	(revision 13980)
@@ -0,0 +1,51 @@
+Index: ../trunk-jpl/externalpackages/python/install-2.7.3-macosx-mlion.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/python/install-2.7.3-macosx-mlion.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/python/install-2.7.3-macosx-mlion.sh	(revision 13819)
+@@ -0,0 +1,40 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf install src
++rm -rf Python-2.7.3
++mkdir install src
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py http://issm.jpl.nasa.gov/files/externalpackages/Python-2.7.3.tgz Python-2.7.3.tgz
++
++#Untar and move python into install directory
++tar -zxvf  Python-2.7.3.tgz
++mv Python-2.7.3/* src
++rm -rf Python-2.7.3
++
++#Configure and compile
++cd src 
++./configure \
++ --enable-framework="$ISSM_DIR/externalpackages/python/install/Library/Frameworks" 
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
++
++cd ../install
++
++#get rid of bin, because it's just a copy of
++#Library/Frameworks/Python.framework/Versions/2.7/bin, and will not reflect
++#new changes being made
++rm -rf bin
++ln -s Library/Frameworks/Python.framework/Headers include
++ln -s Library/Frameworks/Python.framework/Versions/2.7/lib lib
++ln -s Library/Frameworks/Python.framework/Versions/2.7/bin bin
++
++#Patch pyport.h:
++cd include
++patch pyport.h $ISSM_DIR/externalpackages/python/patches/pyport.h.patch
+
+Property changes on: ../trunk-jpl/externalpackages/python/install-2.7.3-macosx-mlion.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13819-13820.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13819-13820.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13819-13820.diff	(revision 13980)
@@ -0,0 +1,35 @@
+Index: ../trunk-jpl/externalpackages/numpy/install-macosx-mlion.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/numpy/install-macosx-mlion.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/numpy/install-macosx-mlion.sh	(revision 13820)
+@@ -0,0 +1,24 @@
++#!/bin/bash
++set -eu
++
++export CC=gcc
++export CXX=g++
++export FFLAGS=-ff2c
++
++#clean up
++rm -rf numpy
++rm -rf numpy-1.7.0b2
++
++#download numpy first
++#export GIT_SSL_NO_VERIFY=true 
++#git clone https://github.com/numpy/numpy.git
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/numpy-1.7.0b2.tar.gz' 'numpy-1.7.0b2.tar.gz'
++
++#install numpy
++tar -zxvf numpy-1.7.0b2.tar.gz
++cd numpy-1.7.0b2
++python setup.py build
++python setup.py install
++cd ..
++python -c "import numpy; print 'Installed NumPy', numpy.__version__"
++python -c "import numpy; numpy.test()"
+
+Property changes on: ../trunk-jpl/externalpackages/numpy/install-macosx-mlion.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13820-13821.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13820-13821.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13820-13821.diff	(revision 13980)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/externalpackages/scipy/install-macosx-mlion.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/scipy/install-macosx-mlion.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/scipy/install-macosx-mlion.sh	(revision 13821)
+@@ -0,0 +1,20 @@
++#!/bin/bash
++set -eu
++
++export CC=gcc
++export CXX=g++
++export FFLAGS=-ff2c
++	
++#download scipy
++git clone https://github.com/scipy/scipy.git
++
++#install scipy
++cd scipy
++export  BLAS_SRC=$ISSM_DIR/externalpackages/blas/install/lib
++export  BLAS=$ISSM_DIR/externalpackages/blas/install/lib
++export  LAPACK_SRC=$ISSM_DIR/externalpackages/lapack/install/lib
++export  LAPACK=$ISSM_DIR/externalpackages/lapack/install/lib
++
++#install scipy
++python setup.py build
++python setup.py install
+
+Property changes on: ../trunk-jpl/externalpackages/scipy/install-macosx-mlion.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13821-13822.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13821-13822.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13821-13822.diff	(revision 13980)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/configs/config-macosx64-mlion-mathieu.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-mlion-mathieu.sh	(revision 0)
++++ ../trunk-jpl/configs/config-macosx64-mlion-mathieu.sh	(revision 13822)
+@@ -0,0 +1,25 @@
++#!/bin/sh
++
++#mpich  1.5
++#petsc  3.3
++#python 2.7
++
++./configure \
++	--prefix="$ISSM_DIR" \
++	--with-matlab-dir="$ISSM_DIR/externalpackages/matlab/install" \
++	--with-triangle-dir="$ISSM_DIR/externalpackages/triangle/install" \
++	--with-python-dir="$ISSM_DIR/externalpackages/python/install" \
++	--with-python-numpy-dir="$ISSM_DIR/externalpackages/python/install/lib/python2.7/site-packages/numpy/core/include/numpy" \
++	--with-mpi-include="$ISSM_DIR/externalpackages/mpich2/install/include"  \
++	--with-mpi-lib="$ISSM_DIR/externalpackages/mpich2/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpl.a " \
++	--with-chaco-dir="$ISSM_DIR/externalpackages/chaco/install" \
++	--with-fortran-lib="/usr/local/gfortran/lib/libgfortran.a" \
++	--with-graphics-lib="-L/usr/X11R6/lib -lX11" \
++	--with-petsc-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-petsc-arch="$ISSM_ARCH" \
++	--with-blas-lapack-dir="$ISSM_DIR/externalpackages/petsc/install" \
++	--with-blacs-dir="$ISSM_DIR/externalpackages/petsc/install/" \
++	--with-scalapack-dir="$ISSM_DIR/externalpackages/petsc/install/" \
++	--with-mumps-dir="$ISSM_DIR/externalpackages/petsc/install/" \
++	--with-metis-dir="$ISSM_DIR/externalpackages/petsc/src/externalpackages/metis-5.0.2-p3" \
++	--with-numthreads=16
+
+Property changes on: ../trunk-jpl/configs/config-macosx64-mlion-mathieu.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13822-13823.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13822-13823.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13822-13823.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/externalpackages/git/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/git/install.sh	(revision 13822)
++++ ../trunk-jpl/externalpackages/git/install.sh	(revision 13823)
+@@ -17,7 +17,7 @@
+ 
+ #install
+ cd src 
+-./configure  --prefix="$ISSM_DIR/externalpackages/git/install" --with-python="$ISSM_DIR/externalpackages/python/install/bin/python"
++./configure  --prefix="$ISSM_DIR/externalpackages/git/install"
+ #--with-python="$ISSM_DIR/externalpackages/python/install/bin/python" #Do we really need this line?
+ 	
+ #Compile
Index: /issm/oecreview/Archive/13393-13976/ISSM-13823-13824.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13823-13824.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13823-13824.diff	(revision 13980)
@@ -0,0 +1,45 @@
+Index: ../trunk-jpl/externalpackages/mpich2/install-1.5-walgreen.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/mpich2/install-1.5-walgreen.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/mpich2/install-1.5-walgreen.sh	(revision 13824)
+@@ -0,0 +1,34 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf src install mpich2-1.5
++mkdir src install
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/mpich2-1.5.tar.gz' 'mpich2-1.5.tar.gz'
++
++#Untar 
++tar -zxvf  mpich2-1.5.tar.gz
++
++#Move mpich2 into src directory
++mv mpich2-1.5/* src
++rm -rf mpich2-1.5
++
++#Configure mpich2
++cd src
++./configure \
++	--prefix="$ISSM_DIR/externalpackages/mpich2/install" \
++	--enable-shared \
++	--with-device=ch3:sock\
++	--with-atomic-primitives=no
++
++	#--with-device=ch_p4 \
++
++#Compile mpich2 (this new version supports parallel make)
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install 
+
+Property changes on: ../trunk-jpl/externalpackages/mpich2/install-1.5-walgreen.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13824-13825.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13824-13825.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13824-13825.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/m/classes/clusters/generic.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 13824)
++++ ../trunk-jpl/src/m/classes/clusters/generic.m	(revision 13825)
+@@ -45,6 +45,7 @@
+ 			disp(sprintf('    port: %i',cluster.port));
+ 			disp(sprintf('    codepath: %s',cluster.codepath));
+ 			disp(sprintf('    executionpath: %s',cluster.executionpath));
++			disp(sprintf('    etcpath: %s',cluster.executionpath));
+ 			disp(sprintf('    valgrind: %s',cluster.valgrind));
+ 			disp(sprintf('    valgrindlib: %s',cluster.valgrindlib));
+ 			disp(sprintf('    valgrindsup: %s',cluster.valgrindsup));
Index: /issm/oecreview/Archive/13393-13976/ISSM-13825-13826.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13825-13826.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13825-13826.diff	(revision 13980)
@@ -0,0 +1,21 @@
+Index: ../trunk-jpl/src/m/os/issmssh.py
+===================================================================
+--- ../trunk-jpl/src/m/os/issmssh.py	(revision 13825)
++++ ../trunk-jpl/src/m/os/issmssh.py	(revision 13826)
+@@ -39,3 +39,16 @@
+ 			else:
+ 				subprocess.call('ssh -l %s %s "%s"' % (login,host,command),shell=True)
+ 
++	# Make FreeBSD use blocking I/O like other platforms
++	import sys
++	import fcntl
++	from os import O_NONBLOCK
++
++	fd = sys.stdin.fileno()
++	flags = fcntl.fcntl(fd, fcntl.F_GETFL)
++	fcntl.fcntl(fd, fcntl.F_SETFL, flags & ~O_NONBLOCK)
++
++	fd = sys.stdout.fileno()
++	flags = fcntl.fcntl(fd, fcntl.F_GETFL)
++	fcntl.fcntl(fd, fcntl.F_SETFL, flags & ~O_NONBLOCK)
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13826-13827.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13826-13827.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13826-13827.diff	(revision 13980)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/os/issmssh.py
+===================================================================
+--- ../trunk-jpl/src/m/os/issmssh.py	(revision 13826)
++++ ../trunk-jpl/src/m/os/issmssh.py	(revision 13827)
+@@ -39,6 +39,11 @@
+ 			else:
+ 				subprocess.call('ssh -l %s %s "%s"' % (login,host,command),shell=True)
+ 
++	# The following code was added to fix:
++	# "IOError: [Errno 35] Resource temporarily unavailable"
++	# on the Mac when trying to display md after the solution.
++	# (from http://code.google.com/p/robotframework/issues/detail?id=995)
++
+ 	# Make FreeBSD use blocking I/O like other platforms
+ 	import sys
+ 	import fcntl
Index: /issm/oecreview/Archive/13393-13976/ISSM-13827-13828.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13827-13828.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13827-13828.diff	(revision 13980)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/m/plot/plot_riftrelvel.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_riftrelvel.m	(revision 13827)
++++ ../trunk-jpl/src/m/plot/plot_riftrelvel.m	(revision 13828)
+@@ -93,14 +93,17 @@
+ 	plot(x(md.rifts.riftstruct(i).tips(2)),y(md.rifts.riftstruct(i).tips(2)),'g*');
+ 	segments=md.rifts.riftstruct(i).segments(:,1:2);
+ end
++
++faulttitle=getfieldvalue(options','faulttitle','faults');
++rifttitle=getfieldvalue(options','rifttitle','rifts');
+ %legend
+ if strcmpi(getfieldvalue(options,'legend','on'),'on'),
+ 	if isp1 & isp2
+-		l=legend([h1,h2,p1,p2],'mesh boundaries','crack tips','faults','rifts');
++		l=legend([h1,h2,p1,p2],'mesh boundaries','crack tips',faulttitle,rifttitle);
+ 	elseif isp1
+-		l=legend([h1,h2,p1],'mesh boundaries','crack tips','faults');
++		l=legend([h1,h2,p1],'mesh boundaries','crack tips',faulttitle);
+ 	elseif isp2
+-		l=legend([h1,h2,p2],'mesh boundaries','crack tips','rifts');
++		l=legend([h1,h2,p2],'mesh boundaries','crack tips',rifttitle);
+ 	else
+ 		l=legend([h1,h2],'mesh boundaries','crack tips');
+ 	end
Index: /issm/oecreview/Archive/13393-13976/ISSM-13828-13829.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13828-13829.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13828-13829.diff	(revision 13980)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/src/c/shared/Numerics/isnan.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/isnan.cpp	(revision 0)
++++ ../trunk-jpl/src/c/shared/Numerics/isnan.cpp	(revision 13829)
+@@ -0,0 +1,16 @@
++/*This routine only used by Intel compler: */
++
++#ifdef HAVE_CONFIG_H
++   #include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "../../include/include.h"
++#include "isnan.h"
++
++#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
++template <> int xIsNan<adouble> (const adouble& X) {
++  return isnan(X.getValue());
++}
++#endif
+Index: ../trunk-jpl/src/c/shared/Numerics/isnan.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/isnan.h	(revision 13828)
++++ ../trunk-jpl/src/c/shared/Numerics/isnan.h	(revision 13829)
+@@ -5,6 +5,7 @@
+ #ifndef _XISNAN_H_
+ #define _XISNAN_H_
+ 
++
+ #ifdef HAVE_CONFIG_H
+    #include <config.h>
+ #else
+@@ -23,9 +24,7 @@
+ }
+ 
+ #if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
+-template <> int xIsNan<adouble> (const adouble& X) {
+-  return isnan(X.getValue());
+-}
++template <> int xIsNan<adouble> (const adouble& X);
+ #endif
+ 
+ #endif
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13828)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13829)
+@@ -191,6 +191,7 @@
+ 					./shared/Numerics/GaussPoints.cpp\
+ 					./shared/Numerics/cross.cpp\
+ 					./shared/Numerics/isnan.h\
++					./shared/Numerics/isnan.cpp\
+ 					./shared/Numerics/cubic.cpp\
+ 					./shared/Numerics/extrema.cpp\
+ 					./shared/Numerics/XZvectorsToCoordinateSystem.cpp\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13829-13830.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13829-13830.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13829-13830.diff	(revision 13980)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/c/shared/Numerics/isnan.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/isnan.cpp	(revision 13829)
++++ ../trunk-jpl/src/c/shared/Numerics/isnan.cpp	(revision 13830)
+@@ -10,7 +10,7 @@
+ #include "isnan.h"
+ 
+ #if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
+-template <> int xIsNan<adouble> (const adouble& X) {
++template <> int xIsNan<adouble> (const adouble& X){
+   return isnan(X.getValue());
+ }
+ #endif
+Index: ../trunk-jpl/src/c/shared/Numerics/isnan.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Numerics/isnan.h	(revision 13829)
++++ ../trunk-jpl/src/c/shared/Numerics/isnan.h	(revision 13830)
+@@ -5,7 +5,6 @@
+ #ifndef _XISNAN_H_
+ #define _XISNAN_H_
+ 
+-
+ #ifdef HAVE_CONFIG_H
+    #include <config.h>
+ #else
Index: /issm/oecreview/Archive/13393-13976/ISSM-13830-13831.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13830-13831.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13830-13831.diff	(revision 13980)
@@ -0,0 +1,268 @@
+Index: ../trunk-jpl/src/c/shared/Wrapper/ModuleBoot.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Wrapper/ModuleBoot.cpp	(revision 13830)
++++ ../trunk-jpl/src/c/shared/Wrapper/ModuleBoot.cpp	(revision 13831)
+@@ -1,58 +0,0 @@
+-/* \file ModuleBoot.cpp
+- * \brief Carry out operations needed to boot, for example, petsc, MPI, plapack, etc ... 
+- * at the beginning of a module
+- */
+-
+-#include "../../toolkits/toolkits.h"
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-int ModuleBoot(void){
+-
+-	/*Some test for MPI_Init crash with mpich2 1.4 on larsen, just ignore*/
+-	#ifdef _HAVE_PETSC_
+-		#if _PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 1
+-		if(0){
+-			int              mp_init = 0;
+-			PetscErrorCode   ierr;
+-			extern PetscBool PetscBeganMPI;
+-			MPI_Initialized(&mp_init); 
+-			if(mp_init!=1){
+-				MPI_Init(NULL,NULL); 
+-				PetscBeganMPI = PETSC_TRUE;
+-				ierr=PetscInitializeNoArguments();CHKERRQ(ierr);
+-			} 
+-		}
+-		else if (0){
+-			PetscErrorCode   ierr;
+-			PetscBool flg;
+-			ierr=PetscInitialized(&flg);CHKERRQ(ierr);
+-			if(flg){
+-				extern PetscBool PetscBeganMPI;
+-				PetscBeganMPI = PETSC_FALSE;
+-				ierr=PetscFinalize();CHKERRQ(ierr);
+-			}
+-			ierr=PetscInitializeNoArguments();CHKERRQ(ierr);
+-			ierr=PetscPopSignalHandler();CHKERRQ(ierr);
+-		}
+-		#endif
+-
+-		/*Initialize Petsc: */
+-		PetscInitializeNoArguments();
+-	#else
+-		#ifdef _HAVE_MPI_
+-		int mp_init = 0;
+-		MPI_Initialized(&mp_init); 
+-		if(!mp_init){
+-			MPI_Init(NULL,NULL); 
+-		}
+-		#else
+-		/*Do nothing*/
+-		#endif
+-	#endif
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/shared/Wrapper/ModuleEnd.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Wrapper/ModuleEnd.cpp	(revision 13830)
++++ ../trunk-jpl/src/c/shared/Wrapper/ModuleEnd.cpp	(revision 13831)
+@@ -1,31 +0,0 @@
+-/* \file ModuleBoot.cpp
+- * \brief Carry out operations needed to boot, for example, petsc, MPI, plapack, etc ... 
+- * at the beginning of a module
+- */
+-
+-#include "../../toolkits/toolkits.h"
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-int ModuleEnd(void){
+-
+-	#if _PETSC_MAJOR_ == 3 && _PETSC_MINOR_ < 1
+-	if(0){
+-		PetscBool        flg;
+-		PetscErrorCode   ierr;
+-		extern PetscBool PetscBeganMPI;
+-
+-		/*Close PETSc but do not close MPI*/
+-		PetscBeganMPI = PETSC_FALSE;
+-		ierr=PetscFinalize();CHKERRQ(ierr);
+-	}
+-	#else
+-		/*Do nothing*/
+-	#endif
+-
+-	return 1;
+-}
+Index: ../trunk-jpl/src/c/shared/Wrapper/wrappershared.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Wrapper/wrappershared.h	(revision 13830)
++++ ../trunk-jpl/src/c/shared/Wrapper/wrappershared.h	(revision 13831)
+@@ -1,13 +0,0 @@
+-/* \file Wrapper.h
+- * \brief  header file for all routines related to wrapper.
+- */
+-
+-#ifndef _WRAPPER_SHARED_H_
+-#define _WRAPPER_SHARED_H_
+-
+-#include "../../classes/objects/objects.h"
+-
+-int ModuleBoot(void);
+-int ModuleEnd(void);
+-
+-#endif
+Index: ../trunk-jpl/src/c/shared/shared.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/shared.h	(revision 13830)
++++ ../trunk-jpl/src/c/shared/shared.h	(revision 13831)
+@@ -18,6 +18,5 @@
+ #include "./String/sharedstring.h"
+ #include "./Threads/issm_threads.h"
+ #include "./TriMesh/trimesh.h"
+-#include "./Wrapper/wrappershared.h"
+ 
+ #endif
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13830)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13831)
+@@ -10,9 +10,9 @@
+ endif
+ if WRAPPERS
+ if SHAREDLIBS
+-lib_LTLIBRARIES += libISSMWrappers.la
++lib_LTLIBRARIES += libISSMModules.la
+ endif
+-lib_LIBRARIES += libISSMWrappers.a 
++lib_LIBRARIES += libISSMModules.a 
+ endif
+ #}}}
+ 
+@@ -214,9 +214,6 @@
+ 					./shared/Elements/ComputeDelta18oTemperaturePrecipitation.cpp\
+ 					./shared/String/sharedstring.h\
+ 					./shared/String/DescriptorIndex.cpp\
+-					./shared/Wrapper/wrappershared.h\
+-					./shared/Wrapper/ModuleBoot.cpp\
+-					./shared/Wrapper/ModuleEnd.cpp\
+ 					./toolkits/metis/metisincludes.h\
+ 					./toolkits/issm/issmtoolkit.h\
+ 					./toolkits/issm/SeqVec.h\
+@@ -754,8 +751,8 @@
+ metis_sources= ./toolkits/metis/patches/metispatches.h\
+ 					./toolkits/metis/patches/METIS_PartMeshNodalPatch.cpp
+ #}}}
+-#Wrappers sources{{{
+-wrapper_sources= ./shared/Threads/issm_threads.h\
++#Modules sources{{{
++modules_sources= ./shared/Threads/issm_threads.h\
+ 			./shared/Threads/LaunchThread.cpp\
+ 			./shared/Threads/PartitionRange.cpp\
+ 			./shared/Exp/exp.h\
+@@ -926,18 +923,18 @@
+ endif
+ 
+ if WRAPPERS
+-libISSMWrappers_a_SOURCES = $(wrapper_sources)
+-libISSMWrappers_a_SOURCES += $(bamg_sources)
++libISSMModules_a_SOURCES = $(modules_sources)
++libISSMModules_a_SOURCES += $(bamg_sources)
+ if KRIGING
+-libISSMWrappers_a_SOURCES += $(kriging_sources)
++libISSMModules_a_SOURCES += $(kriging_sources)
+ endif
+ if KML
+-libISSMWrappers_a_SOURCES += $(kml_sources)
++libISSMModules_a_SOURCES += $(kml_sources)
+ endif
+-libISSMWrappers_a_CXXFLAGS = $(ALLCXXFLAGS)
+-libISSMWrappers_a_LIBADD = ./libISSMCore.a
++libISSMModules_a_CXXFLAGS = $(ALLCXXFLAGS)
++libISSMModules_a_LIBADD = ./libISSMCore.a
+ if SHAREDLIBS
+-libISSMWrappers_la_SOURCES = $(libISSMWrappers_a_SOURCES)
++libISSMModules_la_SOURCES = $(libISSMModules_a_SOURCES)
+ endif
+ endif
+ 
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13830)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13831)
+@@ -40,9 +40,9 @@
+ #}}}
+ #Flags and libraries {{{
+ #if SHAREDLIBS
+-#deps = ../../c/libISSMCore.la ../../c/libISSMWrappers.la
++#deps = ../../c/libISSMCore.la ../../c/libISSMModules.la
+ #else
+-#deps = ../../c/libISSMCore.a ../../c/libISSMWrappers.a
++#deps = ../../c/libISSMCore.a ../../c/libISSMModules.a
+ #endif
+ #deps +=  $(MATHLIB) ${PYTHONLIB}
+ deps =  $(MATHLIB) ${PYTHONLIB}
+@@ -72,7 +72,7 @@
+ if SHAREDLIBS 	 	 
+ deps += 	 	 
+ else 	 	 
+-deps += ../../c/libISSMWrappers.a ../../c/libISSMCore.a 	 	 
++deps += ../../c/libISSMModules.a ../../c/libISSMCore.a 	 	 
+ endif 
+ 
+ #Optimization flags:
+Index: ../trunk-jpl/src/wrappers/matlab/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13830)
++++ ../trunk-jpl/src/wrappers/matlab/Makefile.am	(revision 13831)
+@@ -83,9 +83,9 @@
+ #}}}
+ #Flags and libraries {{{
+ #if SHAREDLIBS
+-#deps = ../../c/libISSMCore.la ../../c/libISSMWrappers.la
++#deps = ../../c/libISSMCore.la ../../c/libISSMModules.la
+ #else
+-#deps = ../../c/libISSMCore.a ../../c/libISSMWrappers.a
++#deps = ../../c/libISSMCore.a ../../c/libISSMModules.a
+ #endif
+ #deps +=  $(MATHLIB) ${MEXLIB}
+ deps =  $(MATHLIB) ${MEXLIB}
+@@ -112,7 +112,7 @@
+ if SHAREDLIBS
+ deps +=
+ else
+-deps += ../../c/libISSMWrappers.a ../../c/libISSMCore.a  
++deps += ../../c/libISSMModules.a ../../c/libISSMCore.a  
+ if ADOLC
+ deps += $(ADOLCLIB)
+ endif
+Index: ../trunk-jpl/src/m/os/issmscpin.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmscpin.m	(revision 13830)
++++ ../trunk-jpl/src/m/os/issmscpin.m	(revision 13831)
+@@ -60,8 +60,10 @@
+ 			end
+ 			string=[string packages{end} '\}'];
+ 		end
++		disp('-------------- file: issmscpin.m line: 63'); 
+ 
+ 		if port,
++			['!scp -P ' num2str(port) ' ' login '@localhost:' path '/' string ' ./']
+ 			eval(['!scp -P ' num2str(port) ' ' login '@localhost:' path '/' string ' ./']);
+ 		else
+ 			eval(['!scp ' login '@' host ':' path '/' string ' ./']);
+Index: ../trunk-jpl/src/m/os/issmscpout.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmscpout.m	(revision 13830)
++++ ../trunk-jpl/src/m/os/issmscpout.m	(revision 13831)
+@@ -49,6 +49,7 @@
+ 		string=[string ' '];
+ 
+ 		if port,
++			['!scp -P ' num2str(port) ' ' string ' ' login '@localhost:' path]
+ 			eval(['!scp -P ' num2str(port) ' ' string ' ' login '@localhost:' path]);
+ 		else
+ 			eval(['!scp ' string ' ' login '@' host ':' path]);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13831-13832.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13831-13832.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13831-13832.diff	(revision 13980)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/src/m/os/issmscpin.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmscpin.m	(revision 13831)
++++ ../trunk-jpl/src/m/os/issmscpin.m	(revision 13832)
+@@ -60,10 +60,8 @@
+ 			end
+ 			string=[string packages{end} '\}'];
+ 		end
+-		disp('-------------- file: issmscpin.m line: 63'); 
+ 
+ 		if port,
+-			['!scp -P ' num2str(port) ' ' login '@localhost:' path '/' string ' ./']
+ 			eval(['!scp -P ' num2str(port) ' ' login '@localhost:' path '/' string ' ./']);
+ 		else
+ 			eval(['!scp ' login '@' host ':' path '/' string ' ./']);
+Index: ../trunk-jpl/src/m/os/issmscpout.m
+===================================================================
+--- ../trunk-jpl/src/m/os/issmscpout.m	(revision 13831)
++++ ../trunk-jpl/src/m/os/issmscpout.m	(revision 13832)
+@@ -49,7 +49,6 @@
+ 		string=[string ' '];
+ 
+ 		if port,
+-			['!scp -P ' num2str(port) ' ' string ' ' login '@localhost:' path]
+ 			eval(['!scp -P ' num2str(port) ' ' string ' ' login '@localhost:' path]);
+ 		else
+ 			eval(['!scp ' string ' ' login '@' host ':' path]);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13832-13833.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13832-13833.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13832-13833.diff	(revision 13980)
@@ -0,0 +1,172 @@
+Index: ../trunk-jpl/src/c/Container/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13832)
++++ ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13833)
+@@ -55,9 +55,6 @@
+ /*FUNCTION Nodes::DistributeDofs{{{*/
+ void  Nodes::DistributeDofs(int analysis_type,int setenum){
+ 
+-	int num_procs;
+-	int my_rank;
+-
+ 	int  i;
+ 	int  dofcount=0;
+ 	int  maxdofspernode=0;
+@@ -67,8 +64,8 @@
+ 	int  numnodes=0;
+ 
+ 	/*recover my_rank:*/
+-	my_rank=IssmComm::GetRank();
+-	num_procs=IssmComm::GetSize();
++	int my_rank   = IssmComm::GetRank();
++	int num_procs = IssmComm::GetSize();
+ 
+ 	/*some check: */
+ 	_assert_(setenum==GsetEnum || setenum==FsetEnum || setenum==SsetEnum);
+@@ -97,10 +94,8 @@
+ 
+ 	/* Every cpu should start its own dof count at the end of the dofcount from cpu-1*/
+ 	dofcount=0;
+-	if(my_rank!=0){
+-		for(i=0;i<my_rank;i++){
+-			dofcount+=alldofcount[i];
+-		}
++	for(i=0;i<my_rank;i++){
++		dofcount+=alldofcount[i];
+ 	}
+ 	for (i=0;i<this->Size();i++){
+ 		/*Check that this node corresponds to our analysis currently being carried out: */
+@@ -201,9 +196,9 @@
+ int   Nodes::MaxNumDofs(int analysis_type,int setenum){
+ 
+ 	int i;
+-	int   max=0;
+-	int   allmax;
+-	int   numdofs=0;
++	int max=0;
++	int allmax;
++	int numdofs=0;
+ 
+ 	/*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */
+ 	for(i=0;i<this->Size();i++){
+@@ -214,13 +209,13 @@
+ 		if (node->InAnalysis(analysis_type)){
+ 
+ 			numdofs=node->GetNumberOfDofs(NoneApproximationEnum,setenum);
+-			if (numdofs>max)max=numdofs;
++			if(numdofs>max)max=numdofs;
+ 		}
+ 	}
+ 
+ 	/*Grab max of all cpus: */
+ 	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
++	MPI_Allreduce((void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
+ 	max=allmax;
+ 	#endif
+ 
+@@ -230,13 +225,27 @@
+ /*FUNCTION Nodes::NumberOfDofs{{{*/
+ int   Nodes::NumberOfDofs(int analysis_type,int setenum){
+ 
+-	int i;
++	int   allnumdofs;
+ 
++	/*Get number of dofs on current cpu (excluding clones)*/
++	int numdofs=this->NumberOfDofsLocal(analysis_type,setenum);
++
++	/*Gather from all cpus: */
++	#ifdef _HAVE_MPI_
++	MPI_Allreduce ( (void*)&numdofs,(void*)&allnumdofs,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
++	#else
++	allnumdofs=numdofs;
++	#endif
++	return allnumdofs;
++}
++/*}}}*/
++/*FUNCTION Nodes::NumberOfDofsLocal{{{*/
++int   Nodes::NumberOfDofsLocal(int analysis_type,int setenum){
++
+ 	int   numdofs=0;
+-	int   allnumdofs;
+ 
+ 	/*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */
+-	for(i=0;i<this->Size();i++){
++	for(int i=0;i<this->Size();i++){
+ 
+ 		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 
+@@ -245,20 +254,12 @@
+ 
+ 			/*Ok, this object is a node, ask it to plug values into partition: */
+ 			if (!node->IsClone()){
+-
+ 				numdofs+=node->GetNumberOfDofs(NoneApproximationEnum,setenum);
+-
+ 			}
+ 		}
+ 	}
+ 
+-	/*Gather from all cpus: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( (void*)&numdofs,(void*)&allnumdofs,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+-	#else
+-	allnumdofs=numdofs;
+-	#endif
+-	return allnumdofs;
++	return numdofs;
+ }
+ /*}}}*/
+ /*FUNCTION Nodes::NumberOfNodes(){{{*/
+@@ -266,13 +267,11 @@
+ 
+ 	/*Careful! only use once all clones have been setup for all nodes!: */
+ 
+-	int i;
++	int numnodes=0;
++	int allnumnodes=0;
+ 
+-	int   numnodes=0;
+-	int   allnumnodes=0;
+-
+ 	/*Now go through all nodes, and get how many dofs they own, unless they are clone nodes: */
+-	for(i=0;i<this->Size();i++){
++	for(int i=0;i<this->Size();i++){
+ 		Node* node=dynamic_cast<Node*>(this->GetObjectByOffset(i));
+ 
+ 		/*Ok, this object is a node, ask it to plug values into partition: */
+@@ -332,7 +331,7 @@
+ void   Nodes::Ranks(int* ranks,int analysis_type){
+ 
+ 	int my_rank;
+-	int        sid;
++	int sid;
+ 
+ 	/*recover my_rank:*/
+ 	my_rank=IssmComm::GetRank();
+@@ -357,12 +356,11 @@
+ 	vector<Object*>::iterator object;
+ 	Node* node=NULL;
+ 
+-	for ( object=objects.begin() ; object < objects.end(); object++ ){
++	for (object=objects.begin() ; object < objects.end(); object++ ){
+ 
+ 		node=dynamic_cast<Node*>(*object);
+ 		node->SetCurrentConfiguration(nodes,vertices);
+ 
+ 	}
+-
+ }
+ /*}}}*/
+Index: ../trunk-jpl/src/c/Container/Nodes.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Nodes.h	(revision 13832)
++++ ../trunk-jpl/src/c/Container/Nodes.h	(revision 13833)
+@@ -22,6 +22,7 @@
+ 		void  FlagClones(int analysis_type);
+ 		int   MaxNumDofs(int analysis_type,int setenum);
+ 		int   NumberOfDofs(int analysis_type,int setenum);
++		int   NumberOfDofsLocal(int analysis_type,int setenum);
+ 		int   NumberOfNodes(int analysis_type);
+ 		int   NumberOfNodes(void);
+ 		void  Ranks(int* ranks,int analysis_type);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13833-13834.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13833-13834.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13833-13834.diff	(revision 13980)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/android/helloworld/My First App/bin
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/bin	(revision 13833)
++++ ../trunk-jpl/src/android/helloworld/My First App/bin	(revision 13834)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/bin
+___________________________________________________________________
+Modified: svn:ignore
+## -1,3 +1,5 ##
++res
++classes
+ resources.ap_
+ com.example.my.first.app.MainActivity.apk
+ classes.dex
+Index: ../trunk-jpl/src/android/helloworld/My First App
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App	(revision 13833)
++++ ../trunk-jpl/src/android/helloworld/My First App	(revision 13834)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++gen
++bin
Index: /issm/oecreview/Archive/13393-13976/ISSM-13834-13835.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13834-13835.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13834-13835.diff	(revision 13980)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/src/android/helloworld/My First App
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App	(revision 13834)
++++ ../trunk-jpl/src/android/helloworld/My First App	(revision 13835)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App
+___________________________________________________________________
+Modified: svn:ignore
+## -1,2 +1 ##
+ gen
+-bin
Index: /issm/oecreview/Archive/13393-13976/ISSM-13835-13836.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13835-13836.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13835-13836.diff	(revision 13980)
@@ -0,0 +1,143 @@
+Index: ../trunk-jpl/src/m/plot/curvedarrow.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/curvedarrow.m	(revision 0)
++++ ../trunk-jpl/src/m/plot/curvedarrow.m	(revision 13836)
+@@ -0,0 +1,60 @@
++function curvedarrow(centerx,centery,distance,angle,secondangle,varargin)
++%CURVEDARROW - plot curved arrow, where curvature center is on (centerx,centery), radius is 'distance', 
++%   and angle determines arc length (angle in degrees). secondangle determines by how much the arc 
++%   generated is rotated along the [0,0,1] z axis.30,
++%
++%   Usage:
++%      curevedarrow(x1,y1,r,30,30,options)
++%      where options is a lit of paired arguments of string OR enums
++%      options can be: 
++%            'ratio': default .5 (ratio headarrow/length)
++%            'widthratio': default is 1/10 of length
++
++	%recover options
++	options=pairoptions(varargin{:});
++	ratio=getfieldvalue(options,'ratio',.1);
++	widthratio=getfieldvalue(options,'widthratio',.1);
++	color=getfieldvalue(options,'color','k');
++
++	%transform angle in radians
++	angle=angle/180*pi;
++	nsteps=10;
++
++	%compute some values out of (x1,y1) and (x2,y2)
++	length=distance*angle;
++	width=length*widthratio;
++
++	%buidl the arrow itself: 
++	A=[centerx+distance, centery];
++	B=[centerx+distance+width, centery];
++	BC=[centerx+cos(0:angle/nsteps:angle)*(distance+width); centery+sin(0:angle/nsteps:angle)*(distance+width)]';
++	C=[centerx+cos(angle)*(distance+width), centery+sin(angle)*(distance+width)];
++	D=[centerx+cos(angle)*(distance), centery+sin(angle)*(distance)];
++	DA=[centerx+cos(angle:-angle/nsteps:0)*(distance); centery+sin(angle:-angle/nsteps:0)*(distance)]';
++
++	%Plot arrow
++	hold on
++	p1=patch([A(1) B(1) BC(:,1)' C(1) D(1) DA(:,1)' ],[A(2) B(2) BC(:,2)' C(2) D(2) DA(:,2)'],color);
++	set(p1,'EdgeColor',color); set(p1,'FaceColor',color);
++
++	%Build arrowhead 
++	E=D+2/3*(D-C);
++	F=C+2/3*(C-D);
++	n=(F-E)/norm(F-E,2);
++	m=[-n(2) n(1)];
++	if(angle<0)
++		m=-m;
++	end
++	d=(distance*angle)*ratio;
++	
++	%G is d distance from middle of E and F: 
++	G=(E+F)/2+d*m;
++
++	p2=patch([E(1) F(1) G(1)],[E(2) F(2) G(2)],color);
++	set(p2,'EdgeColor',color); set(p2,'FaceColor',color);
++
++	%now rotate our arrow: 
++	rotate(p1,[0 0  1],secondangle);
++	rotate(p2,[0 0 1],secondangle);
++
++end
+Index: ../trunk-jpl/src/m/plot/plot_riftrelvel.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_riftrelvel.m	(revision 13835)
++++ ../trunk-jpl/src/m/plot/plot_riftrelvel.m	(revision 13836)
+@@ -15,6 +15,9 @@
+ end
+ options=addfielddefault(options,'scaling',2);
+ 
++%markersize: 
++markersize=getfieldvalue(options,'markersize',1);
++
+ %recover vx and vy:
+ vx=getfieldvalue(options,'riftrelvel_vx',md.initialization.vx);
+ vy=getfieldvalue(options,'riftrelvel_vy',md.initialization.vy);
+@@ -37,11 +40,6 @@
+ subplot(nlines,ncols,index); 
+ hold on
+ 
+-%plot mesh boundaries
+-for i=1:size(md.mesh.segments,1),
+-	plot(x(md.mesh.segments(i,1:2)),y(md.mesh.segments(i,1:2)),'k-');
+-end
+-
+ %plot rifts vel
+ h3=[];
+ for i=1:quivers.numcolors
+@@ -80,17 +78,17 @@
+ 		penetration=(vx2-vx1)*normal(1)+(vy2-vy1)*normal(2);
+ 		%if penetration is negative, plot in black, positive, plot in red;: ie: if rift is closing, black, if rift is opening, red.
+ 		if(penetration>0),
+-			p2=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'*'); set(p2,'Color',[140 140 140]/255);
++			p2=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'*','MarkerSize',markersize); set(p2,'Color',[140 140 140]/255);
+ 			isp2=1;
+ 		else
+-			p1=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'k*');
++			p1=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'k*','MarkerSize',markersize);
+ 			isp1=1;
+ 		end
+ 	end
+ 
+ 	%point out the tips
+-	h2=plot(x(md.rifts.riftstruct(i).tips(1)),y(md.rifts.riftstruct(i).tips(1)),'g*');
+-	plot(x(md.rifts.riftstruct(i).tips(2)),y(md.rifts.riftstruct(i).tips(2)),'g*');
++	h2=plot(x(md.rifts.riftstruct(i).tips(1)),y(md.rifts.riftstruct(i).tips(1)),'g*','MarkerSize',markersize);
++	plot(x(md.rifts.riftstruct(i).tips(2)),y(md.rifts.riftstruct(i).tips(2)),'g*','MarkerSize',markersize);
+ 	segments=md.rifts.riftstruct(i).segments(:,1:2);
+ end
+ 
+Index: ../trunk-jpl/src/m/plot/applyoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.m	(revision 13835)
++++ ../trunk-jpl/src/m/plot/applyoptions.m	(revision 13836)
+@@ -266,6 +266,12 @@
+ 	northarrow(getfieldvalue(options,'northarrow'));
+ end
+ 
++%curved arrow
++if exist(options,'curvedarrow'),
++	curvedoptions=getfieldvalue(options,'curvedarrow');
++	curvedarrow(curvedoptions{:});
++end
++
+ %Scale ruler
+ if exist(options,'scaleruler'),
+ 	scaleruler(options);
+Index: ../trunk-jpl/src/m/plot/colormaps/getcolormap.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/colormaps/getcolormap.m	(revision 13835)
++++ ../trunk-jpl/src/m/plot/colormaps/getcolormap.m	(revision 13836)
+@@ -20,7 +20,7 @@
+ if ~ischar(map), error('colormap format not supported'); end
+ 
+ if strcmpi(map,'Ala'),
+-	map = jet;
++	map = jet(256);
+ 	map = map(128:end,:);
+ elseif strcmpi(map,'redblue'),
+ 	map = hsv;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13836-13837.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13836-13837.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13836-13837.diff	(revision 13980)
@@ -0,0 +1,1071 @@
+Index: ../trunk-jpl/src/android/helloworld/ISSM/.classpath
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/.classpath	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/.classpath	(revision 13837)
+@@ -0,0 +1,8 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<classpath>
++	<classpathentry kind="src" path="src"/>
++	<classpathentry kind="src" path="gen"/>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
++	<classpathentry kind="output" path="bin/classes"/>
++</classpath>
+Index: ../trunk-jpl/src/android/helloworld/ISSM/project.properties
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/project.properties	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/project.properties	(revision 13837)
+@@ -0,0 +1,14 @@
++# This file is automatically generated by Android Tools.
++# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
++#
++# This file must be checked in Version Control Systems.
++#
++# To customize properties used by the Ant build system edit
++# "ant.properties", and override values to adapt the script to your
++# project structure.
++#
++# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
++#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
++
++# Project target.
++target=android-16
+Index: ../trunk-jpl/src/android/helloworld/ISSM/.project
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/.project	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/.project	(revision 13837)
+@@ -0,0 +1,33 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<projectDescription>
++	<name>ISSM</name>
++	<comment></comment>
++	<projects>
++	</projects>
++	<buildSpec>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>org.eclipse.jdt.core.javabuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++	</buildSpec>
++	<natures>
++		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
++		<nature>org.eclipse.jdt.core.javanature</nature>
++	</natures>
++</projectDescription>
+Index: ../trunk-jpl/src/android/helloworld/ISSM/proguard-project.txt
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/proguard-project.txt	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/proguard-project.txt	(revision 13837)
+@@ -0,0 +1,20 @@
++# To enable ProGuard in your project, edit project.properties
++# to define the proguard.config property as described in that file.
++#
++# Add project specific ProGuard rules here.
++# By default, the flags in this file are appended to flags specified
++# in ${sdk.dir}/tools/proguard/proguard-android.txt
++# You can edit the include path and order by changing the ProGuard
++# include property in project.properties.
++#
++# For more details, see
++#   http://developer.android.com/guide/developing/tools/proguard.html
++
++# Add any project specific keep options here:
++
++# If your project uses WebView with JS, uncomment the following
++# and specify the fully qualified class name to the JavaScript interface
++# class:
++#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
++#   public *;
++#}
+Index: ../trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml	(revision 13837)
+@@ -0,0 +1,25 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.issm"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="5"
++        android:targetSdkVersion="15" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".ISSM"
++            android:label="@string/title_activity_issm" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java	(revision 13837)
+@@ -0,0 +1,162 @@
++/*
++ * Copyright (C) 2012 The Android Open Source Project
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ *      http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++
++package com.example.issm;
++import java.nio.ByteBuffer;
++import java.nio.ByteOrder;
++import java.nio.FloatBuffer;
++
++import javax.microedition.khronos.egl.EGLConfig;
++import javax.microedition.khronos.opengles.GL10;
++
++import android.opengl.GLES20;
++import android.opengl.GLSurfaceView;
++
++public class MyGLRenderer implements GLSurfaceView.Renderer {
++
++    private Triangle mTriangle;
++
++    @Override
++    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
++
++        // Set the background frame color
++        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
++
++        mTriangle = new Triangle();
++    }
++
++    @Override
++    public void onDrawFrame(GL10 unused) {
++
++        // Draw background color
++        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
++
++        // Draw triangle
++        mTriangle.draw();
++    }
++
++    @Override
++    public void onSurfaceChanged(GL10 unused, int width, int height) {
++        // Adjust the viewport based on geometry changes,
++        // such as screen rotation
++        GLES20.glViewport(0, 0, width, height);
++    }
++
++    public static int loadShader(int type, String shaderCode){
++
++        // create a vertex shader type (GLES20.GL_VERTEX_SHADER)
++        // or a fragment shader type (GLES20.GL_FRAGMENT_SHADER)
++        int shader = GLES20.glCreateShader(type);
++
++        // add the source code to the shader and compile it
++        GLES20.glShaderSource(shader, shaderCode);
++        GLES20.glCompileShader(shader);
++
++        return shader;
++    }
++
++}
++
++class Triangle 
++{
++
++    private final String vertexShaderCode =
++        "attribute vec4 vPosition;" +
++        "void main() {" +
++        "  gl_Position = vPosition;" +
++        "}";
++
++    private final String fragmentShaderCode =
++        "precision mediump float;" +
++        "uniform vec4 vColor;" +
++        "void main() {" +
++        "  gl_FragColor = vColor;" +
++        "}";
++
++    private final FloatBuffer vertexBuffer;
++    private final int mProgram;
++    private int mPositionHandle;
++    private int mColorHandle;
++
++    // number of coordinates per vertex in this array
++    static final int COORDS_PER_VERTEX = 3;
++    static float triangleCoords[] = { // in counterclockwise order:
++         0.0f,  0.622008459f, 0.0f,   // top
++        -0.5f, -0.311004243f, 0.0f,   // bottom left
++         0.5f, -0.311004243f, 0.0f    // bottom right
++    };
++    private final int vertexCount = triangleCoords.length / COORDS_PER_VERTEX;
++    private final int vertexStride = COORDS_PER_VERTEX * 4; // bytes per vertex
++
++    // Set color with red, green, blue and alpha (opacity) values
++    float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 1.0f };
++
++    public Triangle() {
++        // initialize vertex byte buffer for shape coordinates
++        ByteBuffer bb = ByteBuffer.allocateDirect(
++                // (number of coordinate values * 4 bytes per float)
++                triangleCoords.length * 4);
++        // use the device hardware's native byte order
++        bb.order(ByteOrder.nativeOrder());
++
++        // create a floating point buffer from the ByteBuffer
++        vertexBuffer = bb.asFloatBuffer();
++        // add the coordinates to the FloatBuffer
++        vertexBuffer.put(triangleCoords);
++        // set the buffer to read the first coordinate
++        vertexBuffer.position(0);
++
++        // prepare shaders and OpenGL program
++        int vertexShader = MyGLRenderer.loadShader(GLES20.GL_VERTEX_SHADER,
++                                                   vertexShaderCode);
++        int fragmentShader = MyGLRenderer.loadShader(GLES20.GL_FRAGMENT_SHADER,
++                                                     fragmentShaderCode);
++
++        mProgram = GLES20.glCreateProgram();             // create empty OpenGL Program
++        GLES20.glAttachShader(mProgram, vertexShader);   // add the vertex shader to program
++        GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program
++        GLES20.glLinkProgram(mProgram);                  // create OpenGL program executables
++
++    }
++
++    public void draw() {
++        // Add program to OpenGL environment
++        GLES20.glUseProgram(mProgram);
++
++        // get handle to vertex shader's vPosition member
++        mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
++
++        // Enable a handle to the triangle vertices
++        GLES20.glEnableVertexAttribArray(mPositionHandle);
++
++        // Prepare the triangle coordinate data
++        GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX,
++                                     GLES20.GL_FLOAT, false,
++                                     vertexStride, vertexBuffer);
++
++        // get handle to fragment shader's vColor member
++        mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor");
++
++        // Set color for drawing the triangle
++        GLES20.glUniform4fv(mColorHandle, 1, color, 0);
++
++        // Draw the triangle
++        GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);
++
++        // Disable vertex array
++        GLES20.glDisableVertexAttribArray(mPositionHandle);
++    }
++}
+Index: ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/ISSM.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/ISSM.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/ISSM.java	(revision 13837)
+@@ -0,0 +1,97 @@
++package com.example.issm;
++
++import android.app.Activity;
++import android.content.Context;
++import android.opengl.GLES20;
++import android.opengl.GLSurfaceView;
++import android.opengl.GLSurfaceView.Renderer;
++import android.os.Bundle;
++import android.util.AttributeSet;
++import android.view.Menu;
++import android.view.View;
++import android.view.View.OnClickListener;
++import android.widget.Button;
++import android.widget.FrameLayout;
++import android.widget.RelativeLayout;
++import android.widget.SeekBar;
++import android.widget.SeekBar.OnSeekBarChangeListener;
++import android.widget.TextView;
++import android.widget.Toast;
++import java.nio.ByteBuffer;
++import java.nio.ByteOrder;
++import java.nio.FloatBuffer;	 
++import java.nio.ShortBuffer;
++import javax.microedition.khronos.egl.EGLConfig;
++import javax.microedition.khronos.opengles.GL10; 
++
++public class ISSM extends Activity implements OnSeekBarChangeListener
++{
++	private SeekBar bar;
++    private TextView txtStatus, txtValue;
++    private GLSurfaceView mGLView;
++	private FrameLayout frame;
++    @Override
++    public void onCreate(Bundle savedInstanceState) {
++        super.onCreate(savedInstanceState);
++        setContentView(R.layout.activity_issm);
++        
++        bar = (SeekBar)findViewById(R.id.seekBar); // make seekbar object
++        bar.setOnSeekBarChangeListener(this); // set seekbar listener
++        txtValue = (TextView)findViewById(R.id.value);
++        txtStatus = (TextView)findViewById(R.id.status);
++        
++        mGLView = new MyGLSurfaceView(this);
++        frame = (FrameLayout)findViewById(R.id.frame);
++        frame.addView(mGLView);
++
++    }
++
++
++	@Override
++    public void onProgressChanged(SeekBar seekBar, int val,
++    		boolean fromUser) 
++    {
++    	// change progress text label with current Seekbar value
++    	txtValue.setText("Value: " + val);
++    	txtStatus.setText("Status: changing");
++    }
++    @Override
++    public void onStartTrackingTouch(SeekBar seekBar) 
++    {
++    	txtStatus.setText("Status: Starting to track touch");
++
++    }
++    @Override
++    public void onStopTrackingTouch(SeekBar seekBar) 
++    {
++    	seekBar.setSecondaryProgress(seekBar.getProgress()); // set the shade of the previous value.
++    	txtStatus.setText("Status: Ended tracking touch");
++    }
++    
++    @Override
++    protected void onPause() {
++        super.onPause();
++        // The following call pauses the rendering thread.
++        // If your OpenGL application is memory intensive,
++        // you should consider de-allocating objects that
++        // consume significant memory here.
++        mGLView.onPause();
++    }
++    
++    @Override
++    protected void onResume() {
++        super.onResume();
++        // The following call resumes a paused rendering thread.
++        // If you de-allocated graphic objects for onPause()
++        // this is a good place to re-allocate them.
++        mGLView.onResume();
++    }
++
++    
++    @Override
++    public boolean onCreateOptionsMenu(Menu menu) 
++    {
++        getMenuInflater().inflate(R.menu.activity_issm, menu);
++        return true;
++    }
++}
+Index: ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLSurfaceView.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLSurfaceView.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLSurfaceView.java	(revision 13837)
+@@ -0,0 +1,21 @@
++package com.example.issm;
++
++import android.content.Context;
++import android.opengl.GLSurfaceView;
++
++
++class MyGLSurfaceView extends GLSurfaceView {
++
++    public MyGLSurfaceView(Context context) {
++        super(context);
++
++        // Create an OpenGL ES 2.0 context.
++        setEGLContextClientVersion(2);
++
++        // Set the Renderer for drawing on the GLSurfaceView
++        setRenderer(new MyGLRenderer());
++
++        // Render the view only when there is a change in the drawing data
++        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
++    }
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/ISSM.apk
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/ISSM.apk
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/ISSM.apk	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/ISSM.apk	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/ISSM.apk
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/AndroidManifest.xml	(revision 13837)
+@@ -0,0 +1,25 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.issm"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="5"
++        android:targetSdkVersion="15" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".ISSM"
++            android:label="@string/title_activity_issm" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/resources.ap_
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/resources.ap_
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/resources.ap_	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/resources.ap_	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/resources.ap_
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_launcher.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_launcher.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_action_search.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_action_search.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi/ic_launcher.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi/ic_launcher.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_launcher.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_launcher.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_action_search.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_action_search.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_launcher.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_launcher.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_action_search.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_action_search.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/jarlist.cache
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/jarlist.cache	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/jarlist.cache	(revision 13837)
+@@ -0,0 +1,3 @@
++# cache for current jar dependecy. DO NOT EDIT.
++# format is <lastModified> <length> <SHA-1> <path>
++# Encoding is UTF-8
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/ISSM.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/ISSM.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/ISSM.class	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/ISSM.class	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/ISSM.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLSurfaceView.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLSurfaceView.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLSurfaceView.class	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLSurfaceView.class	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLSurfaceView.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$string.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$string.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$string.class	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$string.class	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$string.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLRenderer.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLRenderer.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLRenderer.class	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLRenderer.class	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLRenderer.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$attr.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$attr.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$attr.class	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$attr.class	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$attr.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R.class	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R.class	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$id.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$id.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$id.class	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$id.class	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$id.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$layout.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$layout.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$layout.class	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$layout.class	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$layout.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/BuildConfig.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/BuildConfig.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/BuildConfig.class	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/BuildConfig.class	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/BuildConfig.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/Triangle.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/Triangle.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/Triangle.class	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/Triangle.class	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/Triangle.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$style.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$style.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$style.class	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$style.class	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$style.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$drawable.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$drawable.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$drawable.class	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$drawable.class	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$drawable.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$menu.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$menu.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$menu.class	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$menu.class	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$menu.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/R.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/R.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/R.java	(revision 13837)
+@@ -0,0 +1,39 @@
++/* AUTO-GENERATED FILE.  DO NOT MODIFY.
++ *
++ * This class was automatically generated by the
++ * aapt tool from the resource data it found.  It
++ * should not be modified by hand.
++ */
++
++package com.example.issm;
++
++public final class R {
++    public static final class attr {
++    }
++    public static final class drawable {
++        public static final int ic_action_search=0x7f020000;
++        public static final int ic_launcher=0x7f020001;
++    }
++    public static final class id {
++        public static final int frame=0x7f070004;
++        public static final int menu_settings=0x7f070005;
++        public static final int relativeLay=0x7f070000;
++        public static final int seekBar=0x7f070003;
++        public static final int status=0x7f070002;
++        public static final int value=0x7f070001;
++    }
++    public static final class layout {
++        public static final int activity_issm=0x7f030000;
++    }
++    public static final class menu {
++        public static final int activity_issm=0x7f060000;
++    }
++    public static final class string {
++        public static final int app_name=0x7f040000;
++        public static final int menu_settings=0x7f040001;
++        public static final int title_activity_issm=0x7f040002;
++    }
++    public static final class style {
++        public static final int AppTheme=0x7f050000;
++    }
++}
+Index: ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/BuildConfig.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/BuildConfig.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/BuildConfig.java	(revision 13837)
+@@ -0,0 +1,6 @@
++/** Automatically generated file. DO NOT MODIFY */
++package com.example.issm;
++
++public final class BuildConfig {
++    public final static boolean DEBUG = true;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/libs/android-support-v4.jar
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/libs/android-support-v4.jar
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/libs/android-support-v4.jar	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/libs/android-support-v4.jar	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/libs/android-support-v4.jar
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/values/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/values/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/values/styles.xml	(revision 13837)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/values/strings.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/values/strings.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/values/strings.xml	(revision 13837)
+@@ -0,0 +1,7 @@
++<resources>
++
++    <string name="app_name">ISSM</string>
++    <string name="menu_settings">Settings</string>
++    <string name="title_activity_issm">ISSM</string>
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_launcher.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_launcher.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_action_search.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_action_search.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/menu/activity_issm.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/menu/activity_issm.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/menu/activity_issm.xml	(revision 13837)
+@@ -0,0 +1,6 @@
++<menu xmlns:android="http://schemas.android.com/apk/res/android">
++    <item android:id="@+id/menu_settings"
++        android:title="@string/menu_settings"
++        android:orderInCategory="100"
++        android:showAsAction="never" />
++</menu>
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/values-v11/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/values-v11/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/values-v11/styles.xml	(revision 13837)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi/ic_launcher.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi/ic_launcher.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/values-v14/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/values-v14/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/values-v14/styles.xml	(revision 13837)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_launcher.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_launcher.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_action_search.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_action_search.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_launcher.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_launcher.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_action_search.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_action_search.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/layout/activity_issm.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/layout/activity_issm.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/layout/activity_issm.xml	(revision 13837)
+@@ -0,0 +1,44 @@
++<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
++    xmlns:tools="http://schemas.android.com/tools"
++    android:id="@+id/relativeLay"
++    android:layout_width="match_parent"
++    android:layout_height="match_parent"
++    android:orientation="horizontal" >
++
++    <SeekBar
++        android:id="@+id/seekBar"
++        android:layout_width="match_parent"
++        android:layout_height="wrap_content"
++        android:layout_alignParentBottom="true"
++        android:layout_alignParentLeft="true"
++        android:layout_marginBottom="41dp" />
++
++    <TextView
++        android:id="@+id/status"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_above="@+id/seekBar"
++        android:layout_centerHorizontal="true"
++        android:layout_marginBottom="16dp"
++        android:text="Status: " />
++
++    <FrameLayout
++        xmlns:android="http://schemas.android.com/apk/res/android"
++        xmlns:tools="http://schemas.android.com/tools"
++        android:id="@+id/frame"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_centerHorizontal="true"
++        android:layout_marginBottom="128dp" >
++    </FrameLayout>
++
++    <TextView
++        android:id="@+id/value"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_above="@+id/status"
++        android:layout_alignRight="@+id/status"
++        android:layout_marginBottom="16dp"
++        android:text="Value: " />
++
++</RelativeLayout>
+Index: ../trunk-jpl/src/android/helloworld/ISSM/ic_launcher-web.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/ic_launcher-web.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/ic_launcher-web.png	(revision 13836)
++++ ../trunk-jpl/src/android/helloworld/ISSM/ic_launcher-web.png	(revision 13837)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/ic_launcher-web.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13837-13838.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13837-13838.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13837-13838.diff	(revision 13980)
@@ -0,0 +1,751 @@
+Index: ../trunk-jpl/src/android/helloworld/ISSM/.classpath
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/.classpath	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/.classpath	(revision 13838)
+@@ -1,8 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<classpath>
+-	<classpathentry kind="src" path="src"/>
+-	<classpathentry kind="src" path="gen"/>
+-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+-	<classpathentry kind="output" path="bin/classes"/>
+-</classpath>
+Index: ../trunk-jpl/src/android/helloworld/ISSM/project.properties
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/project.properties	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/project.properties	(revision 13838)
+@@ -1,14 +0,0 @@
+-# This file is automatically generated by Android Tools.
+-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+-#
+-# This file must be checked in Version Control Systems.
+-#
+-# To customize properties used by the Ant build system edit
+-# "ant.properties", and override values to adapt the script to your
+-# project structure.
+-#
+-# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+-#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+-
+-# Project target.
+-target=android-16
+Index: ../trunk-jpl/src/android/helloworld/ISSM/.project
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/.project	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/.project	(revision 13838)
+@@ -1,33 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<projectDescription>
+-	<name>ISSM</name>
+-	<comment></comment>
+-	<projects>
+-	</projects>
+-	<buildSpec>
+-		<buildCommand>
+-			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+-			<arguments>
+-			</arguments>
+-		</buildCommand>
+-		<buildCommand>
+-			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+-			<arguments>
+-			</arguments>
+-		</buildCommand>
+-		<buildCommand>
+-			<name>org.eclipse.jdt.core.javabuilder</name>
+-			<arguments>
+-			</arguments>
+-		</buildCommand>
+-		<buildCommand>
+-			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
+-			<arguments>
+-			</arguments>
+-		</buildCommand>
+-	</buildSpec>
+-	<natures>
+-		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+-		<nature>org.eclipse.jdt.core.javanature</nature>
+-	</natures>
+-</projectDescription>
+Index: ../trunk-jpl/src/android/helloworld/ISSM/proguard-project.txt
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/proguard-project.txt	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/proguard-project.txt	(revision 13838)
+@@ -1,20 +0,0 @@
+-# To enable ProGuard in your project, edit project.properties
+-# to define the proguard.config property as described in that file.
+-#
+-# Add project specific ProGuard rules here.
+-# By default, the flags in this file are appended to flags specified
+-# in ${sdk.dir}/tools/proguard/proguard-android.txt
+-# You can edit the include path and order by changing the ProGuard
+-# include property in project.properties.
+-#
+-# For more details, see
+-#   http://developer.android.com/guide/developing/tools/proguard.html
+-
+-# Add any project specific keep options here:
+-
+-# If your project uses WebView with JS, uncomment the following
+-# and specify the fully qualified class name to the JavaScript interface
+-# class:
+-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+-#   public *;
+-#}
+Index: ../trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml	(revision 13838)
+@@ -1,25 +0,0 @@
+-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+-    package="com.example.issm"
+-    android:versionCode="1"
+-    android:versionName="1.0" >
+-
+-    <uses-sdk
+-        android:minSdkVersion="5"
+-        android:targetSdkVersion="15" />
+-
+-    <application
+-        android:icon="@drawable/ic_launcher"
+-        android:label="@string/app_name"
+-        android:theme="@style/AppTheme" >
+-        <activity
+-            android:name=".ISSM"
+-            android:label="@string/title_activity_issm" >
+-            <intent-filter>
+-                <action android:name="android.intent.action.MAIN" />
+-
+-                <category android:name="android.intent.category.LAUNCHER" />
+-            </intent-filter>
+-        </activity>
+-    </application>
+-
+-</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java	(revision 13838)
+@@ -1,162 +0,0 @@
+-/*
+- * Copyright (C) 2012 The Android Open Source Project
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- *
+- *      http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-
+-package com.example.issm;
+-import java.nio.ByteBuffer;
+-import java.nio.ByteOrder;
+-import java.nio.FloatBuffer;
+-
+-import javax.microedition.khronos.egl.EGLConfig;
+-import javax.microedition.khronos.opengles.GL10;
+-
+-import android.opengl.GLES20;
+-import android.opengl.GLSurfaceView;
+-
+-public class MyGLRenderer implements GLSurfaceView.Renderer {
+-
+-    private Triangle mTriangle;
+-
+-    @Override
+-    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
+-
+-        // Set the background frame color
+-        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
+-
+-        mTriangle = new Triangle();
+-    }
+-
+-    @Override
+-    public void onDrawFrame(GL10 unused) {
+-
+-        // Draw background color
+-        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
+-
+-        // Draw triangle
+-        mTriangle.draw();
+-    }
+-
+-    @Override
+-    public void onSurfaceChanged(GL10 unused, int width, int height) {
+-        // Adjust the viewport based on geometry changes,
+-        // such as screen rotation
+-        GLES20.glViewport(0, 0, width, height);
+-    }
+-
+-    public static int loadShader(int type, String shaderCode){
+-
+-        // create a vertex shader type (GLES20.GL_VERTEX_SHADER)
+-        // or a fragment shader type (GLES20.GL_FRAGMENT_SHADER)
+-        int shader = GLES20.glCreateShader(type);
+-
+-        // add the source code to the shader and compile it
+-        GLES20.glShaderSource(shader, shaderCode);
+-        GLES20.glCompileShader(shader);
+-
+-        return shader;
+-    }
+-
+-}
+-
+-class Triangle 
+-{
+-
+-    private final String vertexShaderCode =
+-        "attribute vec4 vPosition;" +
+-        "void main() {" +
+-        "  gl_Position = vPosition;" +
+-        "}";
+-
+-    private final String fragmentShaderCode =
+-        "precision mediump float;" +
+-        "uniform vec4 vColor;" +
+-        "void main() {" +
+-        "  gl_FragColor = vColor;" +
+-        "}";
+-
+-    private final FloatBuffer vertexBuffer;
+-    private final int mProgram;
+-    private int mPositionHandle;
+-    private int mColorHandle;
+-
+-    // number of coordinates per vertex in this array
+-    static final int COORDS_PER_VERTEX = 3;
+-    static float triangleCoords[] = { // in counterclockwise order:
+-         0.0f,  0.622008459f, 0.0f,   // top
+-        -0.5f, -0.311004243f, 0.0f,   // bottom left
+-         0.5f, -0.311004243f, 0.0f    // bottom right
+-    };
+-    private final int vertexCount = triangleCoords.length / COORDS_PER_VERTEX;
+-    private final int vertexStride = COORDS_PER_VERTEX * 4; // bytes per vertex
+-
+-    // Set color with red, green, blue and alpha (opacity) values
+-    float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 1.0f };
+-
+-    public Triangle() {
+-        // initialize vertex byte buffer for shape coordinates
+-        ByteBuffer bb = ByteBuffer.allocateDirect(
+-                // (number of coordinate values * 4 bytes per float)
+-                triangleCoords.length * 4);
+-        // use the device hardware's native byte order
+-        bb.order(ByteOrder.nativeOrder());
+-
+-        // create a floating point buffer from the ByteBuffer
+-        vertexBuffer = bb.asFloatBuffer();
+-        // add the coordinates to the FloatBuffer
+-        vertexBuffer.put(triangleCoords);
+-        // set the buffer to read the first coordinate
+-        vertexBuffer.position(0);
+-
+-        // prepare shaders and OpenGL program
+-        int vertexShader = MyGLRenderer.loadShader(GLES20.GL_VERTEX_SHADER,
+-                                                   vertexShaderCode);
+-        int fragmentShader = MyGLRenderer.loadShader(GLES20.GL_FRAGMENT_SHADER,
+-                                                     fragmentShaderCode);
+-
+-        mProgram = GLES20.glCreateProgram();             // create empty OpenGL Program
+-        GLES20.glAttachShader(mProgram, vertexShader);   // add the vertex shader to program
+-        GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program
+-        GLES20.glLinkProgram(mProgram);                  // create OpenGL program executables
+-
+-    }
+-
+-    public void draw() {
+-        // Add program to OpenGL environment
+-        GLES20.glUseProgram(mProgram);
+-
+-        // get handle to vertex shader's vPosition member
+-        mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
+-
+-        // Enable a handle to the triangle vertices
+-        GLES20.glEnableVertexAttribArray(mPositionHandle);
+-
+-        // Prepare the triangle coordinate data
+-        GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX,
+-                                     GLES20.GL_FLOAT, false,
+-                                     vertexStride, vertexBuffer);
+-
+-        // get handle to fragment shader's vColor member
+-        mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor");
+-
+-        // Set color for drawing the triangle
+-        GLES20.glUniform4fv(mColorHandle, 1, color, 0);
+-
+-        // Draw the triangle
+-        GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);
+-
+-        // Disable vertex array
+-        GLES20.glDisableVertexAttribArray(mPositionHandle);
+-    }
+-}
+Index: ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/ISSM.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/ISSM.java	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/ISSM.java	(revision 13838)
+@@ -1,97 +0,0 @@
+-package com.example.issm;
+-
+-import android.app.Activity;
+-import android.content.Context;
+-import android.opengl.GLES20;
+-import android.opengl.GLSurfaceView;
+-import android.opengl.GLSurfaceView.Renderer;
+-import android.os.Bundle;
+-import android.util.AttributeSet;
+-import android.view.Menu;
+-import android.view.View;
+-import android.view.View.OnClickListener;
+-import android.widget.Button;
+-import android.widget.FrameLayout;
+-import android.widget.RelativeLayout;
+-import android.widget.SeekBar;
+-import android.widget.SeekBar.OnSeekBarChangeListener;
+-import android.widget.TextView;
+-import android.widget.Toast;
+-import java.nio.ByteBuffer;
+-import java.nio.ByteOrder;
+-import java.nio.FloatBuffer;	 
+-import java.nio.ShortBuffer;
+-import javax.microedition.khronos.egl.EGLConfig;
+-import javax.microedition.khronos.opengles.GL10; 
+-
+-public class ISSM extends Activity implements OnSeekBarChangeListener
+-{
+-	private SeekBar bar;
+-    private TextView txtStatus, txtValue;
+-    private GLSurfaceView mGLView;
+-	private FrameLayout frame;
+-    @Override
+-    public void onCreate(Bundle savedInstanceState) {
+-        super.onCreate(savedInstanceState);
+-        setContentView(R.layout.activity_issm);
+-        
+-        bar = (SeekBar)findViewById(R.id.seekBar); // make seekbar object
+-        bar.setOnSeekBarChangeListener(this); // set seekbar listener
+-        txtValue = (TextView)findViewById(R.id.value);
+-        txtStatus = (TextView)findViewById(R.id.status);
+-        
+-        mGLView = new MyGLSurfaceView(this);
+-        frame = (FrameLayout)findViewById(R.id.frame);
+-        frame.addView(mGLView);
+-
+-    }
+-
+-
+-	@Override
+-    public void onProgressChanged(SeekBar seekBar, int val,
+-    		boolean fromUser) 
+-    {
+-    	// change progress text label with current Seekbar value
+-    	txtValue.setText("Value: " + val);
+-    	txtStatus.setText("Status: changing");
+-    }
+-    @Override
+-    public void onStartTrackingTouch(SeekBar seekBar) 
+-    {
+-    	txtStatus.setText("Status: Starting to track touch");
+-
+-    }
+-    @Override
+-    public void onStopTrackingTouch(SeekBar seekBar) 
+-    {
+-    	seekBar.setSecondaryProgress(seekBar.getProgress()); // set the shade of the previous value.
+-    	txtStatus.setText("Status: Ended tracking touch");
+-    }
+-    
+-    @Override
+-    protected void onPause() {
+-        super.onPause();
+-        // The following call pauses the rendering thread.
+-        // If your OpenGL application is memory intensive,
+-        // you should consider de-allocating objects that
+-        // consume significant memory here.
+-        mGLView.onPause();
+-    }
+-    
+-    @Override
+-    protected void onResume() {
+-        super.onResume();
+-        // The following call resumes a paused rendering thread.
+-        // If you de-allocated graphic objects for onPause()
+-        // this is a good place to re-allocate them.
+-        mGLView.onResume();
+-    }
+-
+-    
+-    @Override
+-    public boolean onCreateOptionsMenu(Menu menu) 
+-    {
+-        getMenuInflater().inflate(R.menu.activity_issm, menu);
+-        return true;
+-    }
+-}
+Index: ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLSurfaceView.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLSurfaceView.java	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLSurfaceView.java	(revision 13838)
+@@ -1,21 +0,0 @@
+-package com.example.issm;
+-
+-import android.content.Context;
+-import android.opengl.GLSurfaceView;
+-
+-
+-class MyGLSurfaceView extends GLSurfaceView {
+-
+-    public MyGLSurfaceView(Context context) {
+-        super(context);
+-
+-        // Create an OpenGL ES 2.0 context.
+-        setEGLContextClientVersion(2);
+-
+-        // Set the Renderer for drawing on the GLSurfaceView
+-        setRenderer(new MyGLRenderer());
+-
+-        // Render the view only when there is a change in the drawing data
+-        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
+-    }
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/ISSM.apk
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/AndroidManifest.xml	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/AndroidManifest.xml	(revision 13838)
+@@ -1,25 +0,0 @@
+-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+-    package="com.example.issm"
+-    android:versionCode="1"
+-    android:versionName="1.0" >
+-
+-    <uses-sdk
+-        android:minSdkVersion="5"
+-        android:targetSdkVersion="15" />
+-
+-    <application
+-        android:icon="@drawable/ic_launcher"
+-        android:label="@string/app_name"
+-        android:theme="@style/AppTheme" >
+-        <activity
+-            android:name=".ISSM"
+-            android:label="@string/title_activity_issm" >
+-            <intent-filter>
+-                <action android:name="android.intent.action.MAIN" />
+-
+-                <category android:name="android.intent.category.LAUNCHER" />
+-            </intent-filter>
+-        </activity>
+-    </application>
+-
+-</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/resources.ap_
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/jarlist.cache
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/jarlist.cache	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/jarlist.cache	(revision 13838)
+@@ -1,3 +0,0 @@
+-# cache for current jar dependecy. DO NOT EDIT.
+-# format is <lastModified> <length> <SHA-1> <path>
+-# Encoding is UTF-8
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/ISSM.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLSurfaceView.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$string.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLRenderer.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$attr.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$id.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$layout.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/BuildConfig.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/Triangle.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$style.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$drawable.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$menu.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/R.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/R.java	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/R.java	(revision 13838)
+@@ -1,39 +0,0 @@
+-/* AUTO-GENERATED FILE.  DO NOT MODIFY.
+- *
+- * This class was automatically generated by the
+- * aapt tool from the resource data it found.  It
+- * should not be modified by hand.
+- */
+-
+-package com.example.issm;
+-
+-public final class R {
+-    public static final class attr {
+-    }
+-    public static final class drawable {
+-        public static final int ic_action_search=0x7f020000;
+-        public static final int ic_launcher=0x7f020001;
+-    }
+-    public static final class id {
+-        public static final int frame=0x7f070004;
+-        public static final int menu_settings=0x7f070005;
+-        public static final int relativeLay=0x7f070000;
+-        public static final int seekBar=0x7f070003;
+-        public static final int status=0x7f070002;
+-        public static final int value=0x7f070001;
+-    }
+-    public static final class layout {
+-        public static final int activity_issm=0x7f030000;
+-    }
+-    public static final class menu {
+-        public static final int activity_issm=0x7f060000;
+-    }
+-    public static final class string {
+-        public static final int app_name=0x7f040000;
+-        public static final int menu_settings=0x7f040001;
+-        public static final int title_activity_issm=0x7f040002;
+-    }
+-    public static final class style {
+-        public static final int AppTheme=0x7f050000;
+-    }
+-}
+Index: ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/BuildConfig.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/BuildConfig.java	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/BuildConfig.java	(revision 13838)
+@@ -1,6 +0,0 @@
+-/** Automatically generated file. DO NOT MODIFY */
+-package com.example.issm;
+-
+-public final class BuildConfig {
+-    public final static boolean DEBUG = true;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/libs/android-support-v4.jar
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/values/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/values/styles.xml	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/values/styles.xml	(revision 13838)
+@@ -1,5 +0,0 @@
+-<resources>
+-
+-    <style name="AppTheme" parent="android:Theme.Light" />
+-
+-</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/values/strings.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/values/strings.xml	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/values/strings.xml	(revision 13838)
+@@ -1,7 +0,0 @@
+-<resources>
+-
+-    <string name="app_name">ISSM</string>
+-    <string name="menu_settings">Settings</string>
+-    <string name="title_activity_issm">ISSM</string>
+-
+-</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/menu/activity_issm.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/menu/activity_issm.xml	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/menu/activity_issm.xml	(revision 13838)
+@@ -1,6 +0,0 @@
+-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+-    <item android:id="@+id/menu_settings"
+-        android:title="@string/menu_settings"
+-        android:orderInCategory="100"
+-        android:showAsAction="never" />
+-</menu>
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/values-v11/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/values-v11/styles.xml	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/values-v11/styles.xml	(revision 13838)
+@@ -1,5 +0,0 @@
+-<resources>
+-
+-    <style name="AppTheme" parent="android:Theme.Holo.Light" />
+-
+-</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/values-v14/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/values-v14/styles.xml	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/values-v14/styles.xml	(revision 13838)
+@@ -1,5 +0,0 @@
+-<resources>
+-
+-    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar" />
+-
+-</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/layout/activity_issm.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/layout/activity_issm.xml	(revision 13837)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/layout/activity_issm.xml	(revision 13838)
+@@ -1,44 +0,0 @@
+-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+-    xmlns:tools="http://schemas.android.com/tools"
+-    android:id="@+id/relativeLay"
+-    android:layout_width="match_parent"
+-    android:layout_height="match_parent"
+-    android:orientation="horizontal" >
+-
+-    <SeekBar
+-        android:id="@+id/seekBar"
+-        android:layout_width="match_parent"
+-        android:layout_height="wrap_content"
+-        android:layout_alignParentBottom="true"
+-        android:layout_alignParentLeft="true"
+-        android:layout_marginBottom="41dp" />
+-
+-    <TextView
+-        android:id="@+id/status"
+-        android:layout_width="wrap_content"
+-        android:layout_height="wrap_content"
+-        android:layout_above="@+id/seekBar"
+-        android:layout_centerHorizontal="true"
+-        android:layout_marginBottom="16dp"
+-        android:text="Status: " />
+-
+-    <FrameLayout
+-        xmlns:android="http://schemas.android.com/apk/res/android"
+-        xmlns:tools="http://schemas.android.com/tools"
+-        android:id="@+id/frame"
+-        android:layout_width="wrap_content"
+-        android:layout_height="wrap_content"
+-        android:layout_centerHorizontal="true"
+-        android:layout_marginBottom="128dp" >
+-    </FrameLayout>
+-
+-    <TextView
+-        android:id="@+id/value"
+-        android:layout_width="wrap_content"
+-        android:layout_height="wrap_content"
+-        android:layout_above="@+id/status"
+-        android:layout_alignRight="@+id/status"
+-        android:layout_marginBottom="16dp"
+-        android:text="Value: " />
+-
+-</RelativeLayout>
+Index: ../trunk-jpl/src/android/helloworld/ISSM/ic_launcher-web.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13838-13839.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13838-13839.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13838-13839.diff	(revision 13980)
@@ -0,0 +1,1073 @@
+Index: ../trunk-jpl/src/android/helloworld/ISSM/.classpath
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/.classpath	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/.classpath	(revision 13839)
+@@ -0,0 +1,8 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<classpath>
++	<classpathentry kind="src" path="src"/>
++	<classpathentry kind="src" path="gen"/>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
++	<classpathentry kind="output" path="bin/classes"/>
++</classpath>
+Index: ../trunk-jpl/src/android/helloworld/ISSM/project.properties
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/project.properties	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/project.properties	(revision 13839)
+@@ -0,0 +1,14 @@
++# This file is automatically generated by Android Tools.
++# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
++#
++# This file must be checked in Version Control Systems.
++#
++# To customize properties used by the Ant build system edit
++# "ant.properties", and override values to adapt the script to your
++# project structure.
++#
++# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
++#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
++
++# Project target.
++target=android-16
+Index: ../trunk-jpl/src/android/helloworld/ISSM/.project
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/.project	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/.project	(revision 13839)
+@@ -0,0 +1,33 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<projectDescription>
++	<name>ISSM</name>
++	<comment></comment>
++	<projects>
++	</projects>
++	<buildSpec>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>org.eclipse.jdt.core.javabuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++	</buildSpec>
++	<natures>
++		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
++		<nature>org.eclipse.jdt.core.javanature</nature>
++	</natures>
++</projectDescription>
+Index: ../trunk-jpl/src/android/helloworld/ISSM/proguard-project.txt
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/proguard-project.txt	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/proguard-project.txt	(revision 13839)
+@@ -0,0 +1,20 @@
++# To enable ProGuard in your project, edit project.properties
++# to define the proguard.config property as described in that file.
++#
++# Add project specific ProGuard rules here.
++# By default, the flags in this file are appended to flags specified
++# in ${sdk.dir}/tools/proguard/proguard-android.txt
++# You can edit the include path and order by changing the ProGuard
++# include property in project.properties.
++#
++# For more details, see
++#   http://developer.android.com/guide/developing/tools/proguard.html
++
++# Add any project specific keep options here:
++
++# If your project uses WebView with JS, uncomment the following
++# and specify the fully qualified class name to the JavaScript interface
++# class:
++#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
++#   public *;
++#}
+Index: ../trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml	(revision 13839)
+@@ -0,0 +1,25 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.issm"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="5"
++        android:targetSdkVersion="15" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".ISSM"
++            android:label="@string/title_activity_issm" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java	(revision 13839)
+@@ -0,0 +1,162 @@
++/*
++ * Copyright (C) 2012 The Android Open Source Project
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ *      http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++
++package com.example.issm;
++import java.nio.ByteBuffer;
++import java.nio.ByteOrder;
++import java.nio.FloatBuffer;
++
++import javax.microedition.khronos.egl.EGLConfig;
++import javax.microedition.khronos.opengles.GL10;
++
++import android.opengl.GLES20;
++import android.opengl.GLSurfaceView;
++
++public class MyGLRenderer implements GLSurfaceView.Renderer {
++
++    private Triangle mTriangle;
++
++    @Override
++    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
++
++        // Set the background frame color
++        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
++
++        mTriangle = new Triangle();
++    }
++
++    @Override
++    public void onDrawFrame(GL10 unused) {
++
++        // Draw background color
++        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
++
++        // Draw triangle
++        mTriangle.draw();
++    }
++
++    @Override
++    public void onSurfaceChanged(GL10 unused, int width, int height) {
++        // Adjust the viewport based on geometry changes,
++        // such as screen rotation
++        GLES20.glViewport(0, 0, width, height);
++    }
++
++    public static int loadShader(int type, String shaderCode){
++
++        // create a vertex shader type (GLES20.GL_VERTEX_SHADER)
++        // or a fragment shader type (GLES20.GL_FRAGMENT_SHADER)
++        int shader = GLES20.glCreateShader(type);
++
++        // add the source code to the shader and compile it
++        GLES20.glShaderSource(shader, shaderCode);
++        GLES20.glCompileShader(shader);
++
++        return shader;
++    }
++
++}
++
++class Triangle 
++{
++
++    private final String vertexShaderCode =
++        "attribute vec4 vPosition;" +
++        "void main() {" +
++        "  gl_Position = vPosition;" +
++        "}";
++
++    private final String fragmentShaderCode =
++        "precision mediump float;" +
++        "uniform vec4 vColor;" +
++        "void main() {" +
++        "  gl_FragColor = vColor;" +
++        "}";
++
++    private final FloatBuffer vertexBuffer;
++    private final int mProgram;
++    private int mPositionHandle;
++    private int mColorHandle;
++
++    // number of coordinates per vertex in this array
++    static final int COORDS_PER_VERTEX = 3;
++    static float triangleCoords[] = { // in counterclockwise order:
++         0.0f,  0.622008459f, 0.0f,   // top
++        -0.5f, -0.311004243f, 0.0f,   // bottom left
++         0.5f, -0.311004243f, 0.0f    // bottom right
++    };
++    private final int vertexCount = triangleCoords.length / COORDS_PER_VERTEX;
++    private final int vertexStride = COORDS_PER_VERTEX * 4; // bytes per vertex
++
++    // Set color with red, green, blue and alpha (opacity) values
++    float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 1.0f };
++
++    public Triangle() {
++        // initialize vertex byte buffer for shape coordinates
++        ByteBuffer bb = ByteBuffer.allocateDirect(
++                // (number of coordinate values * 4 bytes per float)
++                triangleCoords.length * 4);
++        // use the device hardware's native byte order
++        bb.order(ByteOrder.nativeOrder());
++
++        // create a floating point buffer from the ByteBuffer
++        vertexBuffer = bb.asFloatBuffer();
++        // add the coordinates to the FloatBuffer
++        vertexBuffer.put(triangleCoords);
++        // set the buffer to read the first coordinate
++        vertexBuffer.position(0);
++
++        // prepare shaders and OpenGL program
++        int vertexShader = MyGLRenderer.loadShader(GLES20.GL_VERTEX_SHADER,
++                                                   vertexShaderCode);
++        int fragmentShader = MyGLRenderer.loadShader(GLES20.GL_FRAGMENT_SHADER,
++                                                     fragmentShaderCode);
++
++        mProgram = GLES20.glCreateProgram();             // create empty OpenGL Program
++        GLES20.glAttachShader(mProgram, vertexShader);   // add the vertex shader to program
++        GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program
++        GLES20.glLinkProgram(mProgram);                  // create OpenGL program executables
++
++    }
++
++    public void draw() {
++        // Add program to OpenGL environment
++        GLES20.glUseProgram(mProgram);
++
++        // get handle to vertex shader's vPosition member
++        mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
++
++        // Enable a handle to the triangle vertices
++        GLES20.glEnableVertexAttribArray(mPositionHandle);
++
++        // Prepare the triangle coordinate data
++        GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX,
++                                     GLES20.GL_FLOAT, false,
++                                     vertexStride, vertexBuffer);
++
++        // get handle to fragment shader's vColor member
++        mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor");
++
++        // Set color for drawing the triangle
++        GLES20.glUniform4fv(mColorHandle, 1, color, 0);
++
++        // Draw the triangle
++        GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);
++
++        // Disable vertex array
++        GLES20.glDisableVertexAttribArray(mPositionHandle);
++    }
++}
+Index: ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/ISSM.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/ISSM.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/ISSM.java	(revision 13839)
+@@ -0,0 +1,97 @@
++package com.example.issm;
++
++import android.app.Activity;
++import android.content.Context;
++import android.opengl.GLES20;
++import android.opengl.GLSurfaceView;
++import android.opengl.GLSurfaceView.Renderer;
++import android.os.Bundle;
++import android.util.AttributeSet;
++import android.view.Menu;
++import android.view.View;
++import android.view.View.OnClickListener;
++import android.widget.Button;
++import android.widget.FrameLayout;
++import android.widget.RelativeLayout;
++import android.widget.SeekBar;
++import android.widget.SeekBar.OnSeekBarChangeListener;
++import android.widget.TextView;
++import android.widget.Toast;
++import java.nio.ByteBuffer;
++import java.nio.ByteOrder;
++import java.nio.FloatBuffer;	 
++import java.nio.ShortBuffer;
++import javax.microedition.khronos.egl.EGLConfig;
++import javax.microedition.khronos.opengles.GL10; 
++
++public class ISSM extends Activity implements OnSeekBarChangeListener
++{
++	private SeekBar bar;
++    private TextView txtStatus, txtValue;
++    private GLSurfaceView mGLView;
++	private FrameLayout frame;
++    @Override
++    public void onCreate(Bundle savedInstanceState) {
++        super.onCreate(savedInstanceState);
++        setContentView(R.layout.activity_issm);
++        
++        bar = (SeekBar)findViewById(R.id.seekBar); // make seekbar object
++        bar.setOnSeekBarChangeListener(this); // set seekbar listener
++        txtValue = (TextView)findViewById(R.id.value);
++        txtStatus = (TextView)findViewById(R.id.status);
++        
++        mGLView = new MyGLSurfaceView(this);
++        frame = (FrameLayout)findViewById(R.id.frame);
++        frame.addView(mGLView);
++
++    }
++
++
++	@Override
++    public void onProgressChanged(SeekBar seekBar, int val,
++    		boolean fromUser) 
++    {
++    	// change progress text label with current Seekbar value
++    	txtValue.setText("Value: " + val);
++    	txtStatus.setText("Status: changing");
++    }
++    @Override
++    public void onStartTrackingTouch(SeekBar seekBar) 
++    {
++    	txtStatus.setText("Status: Starting to track touch");
++
++    }
++    @Override
++    public void onStopTrackingTouch(SeekBar seekBar) 
++    {
++    	seekBar.setSecondaryProgress(seekBar.getProgress()); // set the shade of the previous value.
++    	txtStatus.setText("Status: Ended tracking touch");
++    }
++    
++    @Override
++    protected void onPause() {
++        super.onPause();
++        // The following call pauses the rendering thread.
++        // If your OpenGL application is memory intensive,
++        // you should consider de-allocating objects that
++        // consume significant memory here.
++        mGLView.onPause();
++    }
++    
++    @Override
++    protected void onResume() {
++        super.onResume();
++        // The following call resumes a paused rendering thread.
++        // If you de-allocated graphic objects for onPause()
++        // this is a good place to re-allocate them.
++        mGLView.onResume();
++    }
++
++    
++    @Override
++    public boolean onCreateOptionsMenu(Menu menu) 
++    {
++        getMenuInflater().inflate(R.menu.activity_issm, menu);
++        return true;
++    }
++}
+Index: ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLSurfaceView.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLSurfaceView.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLSurfaceView.java	(revision 13839)
+@@ -0,0 +1,21 @@
++package com.example.issm;
++
++import android.content.Context;
++import android.opengl.GLSurfaceView;
++
++
++class MyGLSurfaceView extends GLSurfaceView {
++
++    public MyGLSurfaceView(Context context) {
++        super(context);
++
++        // Create an OpenGL ES 2.0 context.
++        setEGLContextClientVersion(2);
++
++        // Set the Renderer for drawing on the GLSurfaceView
++        setRenderer(new MyGLRenderer());
++
++        // Render the view only when there is a change in the drawing data
++        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
++    }
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/ISSM.apk
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/ISSM.apk
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/ISSM.apk	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/ISSM.apk	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/ISSM.apk
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/AndroidManifest.xml	(revision 13839)
+@@ -0,0 +1,25 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.issm"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="5"
++        android:targetSdkVersion="15" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".ISSM"
++            android:label="@string/title_activity_issm" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/resources.ap_
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/resources.ap_
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/resources.ap_	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/resources.ap_	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/resources.ap_
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_launcher.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_launcher.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_action_search.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_action_search.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi/ic_launcher.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi/ic_launcher.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_launcher.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_launcher.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_action_search.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_action_search.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_launcher.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_launcher.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_action_search.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_action_search.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/jarlist.cache
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/jarlist.cache	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/jarlist.cache	(revision 13839)
+@@ -0,0 +1,3 @@
++# cache for current jar dependecy. DO NOT EDIT.
++# format is <lastModified> <length> <SHA-1> <path>
++# Encoding is UTF-8
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/ISSM.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/ISSM.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/ISSM.class	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/ISSM.class	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/ISSM.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLSurfaceView.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLSurfaceView.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLSurfaceView.class	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLSurfaceView.class	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLSurfaceView.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$string.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$string.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$string.class	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$string.class	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$string.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLRenderer.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLRenderer.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLRenderer.class	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLRenderer.class	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLRenderer.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$attr.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$attr.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$attr.class	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$attr.class	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$attr.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R.class	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R.class	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$id.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$id.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$id.class	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$id.class	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$id.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$layout.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$layout.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$layout.class	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$layout.class	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$layout.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/BuildConfig.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/BuildConfig.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/BuildConfig.class	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/BuildConfig.class	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/BuildConfig.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/Triangle.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/Triangle.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/Triangle.class	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/Triangle.class	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/Triangle.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$style.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$style.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$style.class	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$style.class	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$style.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$drawable.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$drawable.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$drawable.class	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$drawable.class	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$drawable.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$menu.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$menu.class
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$menu.class	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$menu.class	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R$menu.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/R.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/R.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/R.java	(revision 13839)
+@@ -0,0 +1,39 @@
++/* AUTO-GENERATED FILE.  DO NOT MODIFY.
++ *
++ * This class was automatically generated by the
++ * aapt tool from the resource data it found.  It
++ * should not be modified by hand.
++ */
++
++package com.example.issm;
++
++public final class R {
++    public static final class attr {
++    }
++    public static final class drawable {
++        public static final int ic_action_search=0x7f020000;
++        public static final int ic_launcher=0x7f020001;
++    }
++    public static final class id {
++        public static final int frame=0x7f070003;
++        public static final int menu_settings=0x7f070005;
++        public static final int relativeLay=0x7f070000;
++        public static final int seekBar=0x7f070001;
++        public static final int status=0x7f070002;
++        public static final int value=0x7f070004;
++    }
++    public static final class layout {
++        public static final int activity_issm=0x7f030000;
++    }
++    public static final class menu {
++        public static final int activity_issm=0x7f060000;
++    }
++    public static final class string {
++        public static final int app_name=0x7f040000;
++        public static final int menu_settings=0x7f040001;
++        public static final int title_activity_issm=0x7f040002;
++    }
++    public static final class style {
++        public static final int AppTheme=0x7f050000;
++    }
++}
+Index: ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/BuildConfig.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/BuildConfig.java	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/BuildConfig.java	(revision 13839)
+@@ -0,0 +1,6 @@
++/** Automatically generated file. DO NOT MODIFY */
++package com.example.issm;
++
++public final class BuildConfig {
++    public final static boolean DEBUG = true;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/libs/android-support-v4.jar
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/libs/android-support-v4.jar
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/libs/android-support-v4.jar	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/libs/android-support-v4.jar	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/libs/android-support-v4.jar
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/values/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/values/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/values/styles.xml	(revision 13839)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/values/strings.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/values/strings.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/values/strings.xml	(revision 13839)
+@@ -0,0 +1,7 @@
++<resources>
++
++    <string name="app_name">ISSM</string>
++    <string name="menu_settings">Settings</string>
++    <string name="title_activity_issm">ISSM</string>
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_launcher.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_launcher.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_action_search.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_action_search.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/menu/activity_issm.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/menu/activity_issm.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/menu/activity_issm.xml	(revision 13839)
+@@ -0,0 +1,6 @@
++<menu xmlns:android="http://schemas.android.com/apk/res/android">
++    <item android:id="@+id/menu_settings"
++        android:title="@string/menu_settings"
++        android:orderInCategory="100"
++        android:showAsAction="never" />
++</menu>
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/values-v11/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/values-v11/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/values-v11/styles.xml	(revision 13839)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi/ic_launcher.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi/ic_launcher.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/values-v14/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/values-v14/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/values-v14/styles.xml	(revision 13839)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_launcher.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_launcher.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_action_search.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_action_search.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_launcher.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_launcher.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_action_search.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_action_search.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/res/layout/activity_issm.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/res/layout/activity_issm.xml	(revision 0)
++++ ../trunk-jpl/src/android/helloworld/ISSM/res/layout/activity_issm.xml	(revision 13839)
+@@ -0,0 +1,46 @@
++<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
++    xmlns:tools="http://schemas.android.com/tools"
++    android:id="@+id/relativeLay"
++    android:layout_width="match_parent"
++    android:layout_height="match_parent"
++    android:orientation="horizontal" >
++
++    <SeekBar
++        android:id="@+id/seekBar"
++        android:layout_width="match_parent"
++        android:layout_height="wrap_content"
++        android:layout_alignParentBottom="true"
++        android:layout_alignParentLeft="true"
++        android:layout_marginBottom="41dp" />
++
++    <TextView
++        android:id="@+id/status"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_above="@+id/seekBar"
++        android:layout_centerHorizontal="true"
++        android:layout_marginBottom="16dp"
++        android:text="Status: " />
++
++    <FrameLayout
++        xmlns:android="http://schemas.android.com/apk/res/android"
++        xmlns:tools="http://schemas.android.com/tools"
++        android:id="@+id/frame"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_above="@+id/value"
++        android:layout_centerHorizontal="true"
++        android:layout_marginBottom="16dp" >
++    </FrameLayout>
++
++    <TextView
++        android:id="@+id/value"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_above="@+id/status"
++        android:layout_alignRight="@+id/status"
++        android:layout_centerHorizontal="true"
++        android:layout_marginBottom="16dp"
++        android:text="Value: " />
++
++</RelativeLayout>
+Index: ../trunk-jpl/src/android/helloworld/ISSM/ic_launcher-web.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/helloworld/ISSM/ic_launcher-web.png
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/ic_launcher-web.png	(revision 13838)
++++ ../trunk-jpl/src/android/helloworld/ISSM/ic_launcher-web.png	(revision 13839)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/ic_launcher-web.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13839-13840.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13839-13840.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13839-13840.diff	(revision 13980)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 13839)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 13840)
+@@ -77,8 +77,8 @@
+ 		elif test $VENDOR = intel-discover; then
+ 			export CC=icc
+ 			export CXX=icpc
+-			export CXXFLAGS=" -O3 -D_INTEL_LINUX_ "
+-			export CFLAGS=" -O3 -D_INTEL_LINUX_ "
++			export CXXFLAGS=" -O3 -D_INTEL_LINUX_ -DMPICH_IGNORE_CXX_SEEK"
++			export CFLAGS=" -O3 -D_INTEL_LINUX_ -DMPICH_IGNORE_CXX_SEEK"
+ 		elif test $VENDOR = intel-pleiades; then
+ 			export CC=icc
+ 			export CXX=icpc
Index: /issm/oecreview/Archive/13393-13976/ISSM-13840-13841.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13840-13841.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13840-13841.diff	(revision 13980)
@@ -0,0 +1,50 @@
+Index: ../trunk-jpl/src/android/helloworld/ISSM/.classpath
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/.classpath	(revision 13840)
++++ ../trunk-jpl/src/android/helloworld/ISSM/.classpath	(revision 13841)
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <classpath>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ 	<classpathentry kind="src" path="src"/>
+ 	<classpathentry kind="src" path="gen"/>
+-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ 	<classpathentry kind="output" path="bin/classes"/>
+ </classpath>
+Index: ../trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml	(revision 13840)
++++ ../trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml	(revision 13841)
+@@ -4,7 +4,7 @@
+     android:versionName="1.0" >
+ 
+     <uses-sdk
+-        android:minSdkVersion="5"
++        android:minSdkVersion="8"
+         android:targetSdkVersion="15" />
+ 
+     <application
+Index: ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java	(revision 13840)
++++ ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java	(revision 13841)
+@@ -33,7 +33,7 @@
+     public void onSurfaceCreated(GL10 unused, EGLConfig config) {
+ 
+         // Set the background frame color
+-        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
++        GLES20.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
+ 
+         mTriangle = new Triangle();
+     }
+@@ -102,7 +102,7 @@
+     private final int vertexStride = COORDS_PER_VERTEX * 4; // bytes per vertex
+ 
+     // Set color with red, green, blue and alpha (opacity) values
+-    float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 1.0f };
++    float color[] = { 0.0f, 0.0f, 1.0f, 1.0f };
+ 
+     public Triangle() {
+         // initialize vertex byte buffer for shape coordinates
Index: /issm/oecreview/Archive/13393-13976/ISSM-13841-13842.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13841-13842.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13841-13842.diff	(revision 13980)
@@ -0,0 +1,1826 @@
+Index: ../trunk-jpl/externalpackages/ec2api/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/ec2api/install.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/ec2api/install.sh	(revision 13842)
+@@ -0,0 +1,12 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf ec2-api-tools.zip
++rm -rf ec2-api-tools-1.6.3.1
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/ec2-api-tools.zip' 'ec2-api-tools.zip'
++
++#Untar 
++unzip ec2-api-tools.zip
+
+Property changes on: ../trunk-jpl/externalpackages/ec2api/install.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/externalpackages/ec2api/doc/notes
+===================================================================
+--- ../trunk-jpl/externalpackages/ec2api/doc/notes	(revision 0)
++++ ../trunk-jpl/externalpackages/ec2api/doc/notes	(revision 13842)
+@@ -0,0 +1,2 @@
++EC2 tutorial at http://s3.amazonaws.com/AmazonEC2Tutorial/AmazonEC2Tutorial.html. 
++15 cents pr Gb/Month to store images ->  $15/Month to store all our ModelData!
+Index: ../trunk-jpl/externalpackages/ec2api/doc/EC2_API_GET_STARTED.html
+===================================================================
+--- ../trunk-jpl/externalpackages/ec2api/doc/EC2_API_GET_STARTED.html	(revision 0)
++++ ../trunk-jpl/externalpackages/ec2api/doc/EC2_API_GET_STARTED.html	(revision 13842)
+@@ -0,0 +1,647 @@
++<!DOCTYPE html>
++<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
++<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
++<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!-->
++<html class="js video no-maskImage placeholder" lang="en"><!--<![endif]--><head>
++<meta http-equiv="content-type" content="text/html; charset=UTF-8">
++  <meta charset="utf-8">
++  <title>HowTo: Get started with Amazon EC2 api tools - Linux Sysadmin Blog</title>
++  <meta name="author" content="Promet OPS Team">
++
++  
++  <meta name="description" content="This article is meant to be a quick quide that will introduce the things needed to get you started with Amazon EC2. All this information can be found …">
++  
++
++  <!-- http://t.co/dKP3o1e -->
++  <meta name="HandheldFriendly" content="True">
++  <meta name="MobileOptimized" content="320">
++  <meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1">
++
++  
++  <link rel="canonical" href="http://linuxsysadminblog.com/2009/06/howto-get-started-with-amazon-ec2-api-tools/">
++  <link href="http://linuxsysadminblog.com/favicon.png" rel="icon">
++  <link href="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
++  <script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/jXHR.js" type="text/javascript"></script><script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/all.js" id="facebook-jssdk"></script><script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/ga.js" async="" type="text/javascript"></script><script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/modernizr-2.js"></script>
++  <script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/ender.js"></script>
++  <script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/octopress.js" type="text/javascript"></script>
++  <link href="http://linuxsysadminblog.com/atom.xml" rel="alternate" title="Linux Sysadmin Blog" type="application/atom+xml">
++  <!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
++<link href="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/css_002.css" rel="stylesheet" type="text/css">
++<link href="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/css.css" rel="stylesheet" type="text/css">
++
++<!-- Google Form for Contact Page -->
++<!-- jQuery -->
++<script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/jquery_002.js"></script>
++<script type="text/javascript">
++    // Avoid conflict with ender.js.
++jQuery.noConflict();
++</script>
++<!-- jQuery Form Plugin -->
++<script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/jquery_003.js"></script>
++<script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/jquery.js"></script> 
++<script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/google_form.js"></script>
++<!-- Google Form for Contact Page End here -->
++
++
++  
++  <script type="text/javascript">
++    var _gaq = _gaq || [];
++    _gaq.push(['_setAccount', 'UA-120251-38']);
++    _gaq.push(['_trackPageview']);
++
++    (function() {
++      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
++      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
++      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
++    })();
++  </script>
++
++
++<script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/embed.js" async="" type="text/javascript"></script><script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/widgets.js" async="" type="text/javascript"></script><script async="" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/promet.html" type="text/javascript"></script><style type="text/css">.fb_hidden{position:absolute;top:-10000px;z-index:10001}
++.fb_invisible{display:none}
++.fb_reset{background:none;border-spacing:0;border:0;color:#000;cursor:auto;direction:ltr;font-family:"lucida grande", tahoma, verdana, arial, sans-serif;font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:1;margin:0;overflow:visible;padding:0;text-align:left;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-spacing:normal}
++.fb_link img{border:none}
++.fb_dialog{background:rgba(82, 82, 82, .7);position:absolute;top:-10000px;z-index:10001}
++.fb_dialog_advanced{padding:10px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}
++.fb_dialog_content{background:#fff;color:#333}
++.fb_dialog_close_icon{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yA/x/IE9JII6Z1Ys.png) no-repeat scroll 0 0 transparent;_background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/y6/x/s816eWC-2sl.gif);cursor:pointer;display:block;height:15px;position:absolute;right:18px;top:17px;width:15px;top:8px\9;right:7px\9}
++.fb_dialog_mobile .fb_dialog_close_icon{top:5px;left:5px;right:auto}
++.fb_dialog_padding{background-color:transparent;position:absolute;width:1px;z-index:-1}
++.fb_dialog_close_icon:hover{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yA/x/IE9JII6Z1Ys.png) no-repeat scroll 0 -15px transparent;_background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/y6/x/s816eWC-2sl.gif)}
++.fb_dialog_close_icon:active{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yA/x/IE9JII6Z1Ys.png) no-repeat scroll 0 -30px transparent;_background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/y6/x/s816eWC-2sl.gif)}
++.fb_dialog_loader{background-color:#f2f2f2;border:1px solid #606060;font-size:24px;padding:20px}
++.fb_dialog_top_left,
++.fb_dialog_top_right,
++.fb_dialog_bottom_left,
++.fb_dialog_bottom_right{height:10px;width:10px;overflow:hidden;position:absolute}
++.fb_dialog_top_left{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yR/x/8YeTNIlTZjm.png) no-repeat 0 0;left:-10px;top:-10px}
++.fb_dialog_top_right{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yR/x/8YeTNIlTZjm.png) no-repeat 0 -10px;right:-10px;top:-10px}
++.fb_dialog_bottom_left{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yR/x/8YeTNIlTZjm.png) no-repeat 0 -20px;bottom:-10px;left:-10px}
++.fb_dialog_bottom_right{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yR/x/8YeTNIlTZjm.png) no-repeat 0 -30px;right:-10px;bottom:-10px}
++.fb_dialog_vert_left,
++.fb_dialog_vert_right,
++.fb_dialog_horiz_top,
++.fb_dialog_horiz_bottom{position:absolute;background:#525252;filter:alpha(opacity=70);opacity:.7}
++.fb_dialog_vert_left,
++.fb_dialog_vert_right{width:10px;height:100%}
++.fb_dialog_vert_left{margin-left:-10px}
++.fb_dialog_vert_right{right:0;margin-right:-10px}
++.fb_dialog_horiz_top,
++.fb_dialog_horiz_bottom{width:100%;height:10px}
++.fb_dialog_horiz_top{margin-top:-10px}
++.fb_dialog_horiz_bottom{bottom:0;margin-bottom:-10px}
++.fb_dialog_iframe{line-height:0}
++.fb_dialog_content .dialog_title{background:#6d84b4;border:1px solid #3b5998;color:#fff;font-size:14px;font-weight:bold;margin:0}
++.fb_dialog_content .dialog_title > span{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yD/x/Cou7n-nqK52.gif)
++no-repeat 5px 50%;float:left;padding:5px 0 7px 26px}
++body.fb_hidden{-webkit-transform:none;height:100%;margin:0;left:-10000px;overflow:visible;position:absolute;top:-10000px;width:100%
++}
++.fb_dialog.fb_dialog_mobile.loading{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yc/x/3rhSv5V8j3o.gif)
++white no-repeat 50% 50%;min-height:100%;min-width:100%;overflow:hidden;position:absolute;top:0;z-index:10001}
++.fb_dialog.fb_dialog_mobile.loading.centered{max-height:590px;min-height:590px;max-width:500px;min-width:500px}
++#fb-root #fb_dialog_ipad_overlay{background:rgba(0, 0, 0, .45);position:absolute;left:0;top:0;width:100%;min-height:100%;z-index:10000}
++#fb-root #fb_dialog_ipad_overlay.hidden{display:none}
++.fb_dialog.fb_dialog_mobile.loading iframe{visibility:hidden}
++.fb_dialog_content .dialog_header{-webkit-box-shadow:white 0 1px 1px -1px inset;background:-webkit-gradient(linear, 0 0, 0 100%, from(#738ABA), to(#2C4987));border-bottom:1px solid;border-color:#1d4088;color:#fff;font:14px Helvetica, sans-serif;font-weight:bold;text-overflow:ellipsis;text-shadow:rgba(0, 30, 84, .296875) 0 -1px 0;vertical-align:middle;white-space:nowrap}
++.fb_dialog_content .dialog_header table{-webkit-font-smoothing:subpixel-antialiased;height:43px;width:100%
++}
++.fb_dialog_content .dialog_header td.header_left{font-size:12px;padding-left:5px;vertical-align:middle;width:60px
++}
++.fb_dialog_content .dialog_header td.header_right{font-size:12px;padding-right:5px;vertical-align:middle;width:60px
++}
++.fb_dialog_content .touchable_button{background:-webkit-gradient(linear, 0 0, 0 100%, from(#4966A6),
++color-stop(0.5, #355492), to(#2A4887));border:1px solid #29447e;-webkit-background-clip:padding-box;-webkit-border-radius:3px;-webkit-box-shadow:rgba(0, 0, 0, .117188) 0 1px 1px inset,
++rgba(255, 255, 255, .167969) 0 1px 0;display:inline-block;margin-top:3px;max-width:85px;line-height:18px;padding:4px 12px;position:relative}
++.fb_dialog_content .dialog_header .touchable_button input{border:none;background:none;color:#fff;font:12px Helvetica, sans-serif;font-weight:bold;margin:2px -12px;padding:2px 6px 3px 6px;text-shadow:rgba(0, 30, 84, .296875) 0 -1px 0}
++.fb_dialog_content .dialog_header .header_center{color:#fff;font-size:16px;font-weight:bold;line-height:18px;text-align:center;vertical-align:middle}
++.fb_dialog_content .dialog_content{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yJ/x/jKEcVPZFk-2.gif) no-repeat 50% 50%;border:1px solid #555;border-bottom:0;border-top:0;height:150px}
++.fb_dialog_content .dialog_footer{background:#f2f2f2;border:1px solid #555;border-top-color:#ccc;height:40px}
++#fb_dialog_loader_close{float:left}
++.fb_dialog.fb_dialog_mobile .fb_dialog_close_button{text-shadow:rgba(0, 30, 84, .296875) 0 -1px 0}
++.fb_dialog.fb_dialog_mobile .fb_dialog_close_icon{visibility:hidden}
++.fb_iframe_widget{position:relative;display:-moz-inline-block;display:inline-block}
++.fb_iframe_widget iframe{position:absolute}
++.fb_iframe_widget_lift{z-index:1}
++.fb_iframe_widget span{position:relative;display:inline-block;vertical-align:text-bottom;text-align:justify}
++.fb_hide_iframes iframe{position:relative;left:-10000px}
++.fb_iframe_widget_loader{position:relative;display:inline-block}
++.fb_iframe_widget_fluid{display:inline}
++.fb_iframe_widget_loader iframe{min-height:32px;z-index:2;zoom:1}
++.fb_iframe_widget_loader .FB_Loader{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yJ/x/jKEcVPZFk-2.gif) no-repeat;height:32px;width:32px;margin-left:-16px;position:absolute;left:50%;z-index:4}
++.fb_button_simple,
++.fb_button_simple_rtl{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/yH/x/eIpbnVKI9lR.png);background-repeat:no-repeat;cursor:pointer;outline:none;text-decoration:none}
++.fb_button_simple_rtl{background-position:right 0}
++.fb_button_simple .fb_button_text{margin:0 0 0 20px;padding-bottom:1px}
++.fb_button_simple_rtl .fb_button_text{margin:0 10px 0 0}
++a.fb_button_simple:hover .fb_button_text,
++a.fb_button_simple_rtl:hover .fb_button_text,
++.fb_button_simple:hover .fb_button_text,
++.fb_button_simple_rtl:hover .fb_button_text{text-decoration:underline}
++.fb_button,
++.fb_button_rtl{background:#29447e url(http://static.ak.fbcdn.net/rsrc.php/v2/yl/x/FGFbc80dUKj.png);background-repeat:no-repeat;cursor:pointer;display:inline-block;padding:0 0 0 1px;text-decoration:none;outline:none}
++.fb_button .fb_button_text,
++.fb_button_rtl .fb_button_text{background:#5f78ab url(http://static.ak.fbcdn.net/rsrc.php/v2/yl/x/FGFbc80dUKj.png);border-top:solid 1px #879ac0;border-bottom:solid 1px #1a356e;color:#fff;display:block;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-weight:bold;padding:2px 6px 3px 6px;margin:1px 1px 0 21px;text-shadow:none}
++a.fb_button,
++a.fb_button_rtl,
++.fb_button,
++.fb_button_rtl{text-decoration:none}
++a.fb_button:active .fb_button_text,
++a.fb_button_rtl:active .fb_button_text,
++.fb_button:active .fb_button_text,
++.fb_button_rtl:active .fb_button_text{border-bottom:solid 1px #29447e;border-top:solid 1px #45619d;background:#4f6aa3;text-shadow:none}
++.fb_button_xlarge,
++.fb_button_xlarge_rtl{background-position:left -60px;font-size:24px;line-height:30px}
++.fb_button_xlarge .fb_button_text{padding:3px 8px 3px 12px;margin-left:38px}
++a.fb_button_xlarge:active{background-position:left -99px}
++.fb_button_xlarge_rtl{background-position:right -268px}
++.fb_button_xlarge_rtl .fb_button_text{padding:3px 8px 3px 12px;margin-right:39px}
++a.fb_button_xlarge_rtl:active{background-position:right -307px}
++.fb_button_large,
++.fb_button_large_rtl{background-position:left -138px;font-size:13px;line-height:16px}
++.fb_button_large .fb_button_text{margin-left:24px;padding:2px 6px 4px 6px}
++a.fb_button_large:active{background-position:left -163px}
++.fb_button_large_rtl{background-position:right -346px}
++.fb_button_large_rtl .fb_button_text{margin-right:25px}
++a.fb_button_large_rtl:active{background-position:right -371px}
++.fb_button_medium,
++.fb_button_medium_rtl{background-position:left -188px;font-size:11px;line-height:14px}
++a.fb_button_medium:active{background-position:left -210px}
++.fb_button_medium_rtl{background-position:right -396px}
++.fb_button_text_rtl,
++.fb_button_medium_rtl .fb_button_text{padding:2px 6px 3px 6px;margin-right:22px}
++a.fb_button_medium_rtl:active{background-position:right -418px}
++.fb_button_small,
++.fb_button_small_rtl{background-position:left -232px;font-size:10px;line-height:10px}
++.fb_button_small .fb_button_text{padding:2px 6px 3px;margin-left:17px}
++a.fb_button_small:active,
++.fb_button_small:active{background-position:left -250px}
++.fb_button_small_rtl{background-position:right -440px}
++.fb_button_small_rtl .fb_button_text{padding:2px 6px;margin-right:18px}
++a.fb_button_small_rtl:active{background-position:right -458px}
++.fb_share_count_wrapper{position:relative;float:left}
++.fb_share_count{background:#b0b9ec none repeat scroll 0 0;color:#333;font-family:"lucida grande", tahoma, verdana, arial, sans-serif;text-align:center}
++.fb_share_count_inner{background:#e8ebf2;display:block}
++.fb_share_count_right{margin-left:-1px;display:inline-block}
++.fb_share_count_right .fb_share_count_inner{border-top:solid 1px #e8ebf2;border-bottom:solid 1px #b0b9ec;margin:1px 1px 0 1px;font-size:10px;line-height:10px;padding:2px 6px 3px;font-weight:bold}
++.fb_share_count_top{display:block;letter-spacing:-1px;line-height:34px;margin-bottom:7px;font-size:22px;border:solid 1px #b0b9ec}
++.fb_share_count_nub_top{border:none;display:block;position:absolute;left:7px;top:35px;margin:0;padding:0;width:6px;height:7px;background-repeat:no-repeat;background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/yP/x/bSOHtKbCGYI.png)}
++.fb_share_count_nub_right{border:none;display:inline-block;padding:0;width:5px;height:10px;background-repeat:no-repeat;background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/yL/x/i_oIVTKMYsL.png);vertical-align:top;background-position:right 5px;z-index:10;left:2px;margin:0 2px 0 0;position:relative}
++.fb_share_no_count{display:none}
++.fb_share_size_Small .fb_share_count_right .fb_share_count_inner{font-size:10px}
++.fb_share_size_Medium .fb_share_count_right .fb_share_count_inner{font-size:11px;padding:2px 6px 3px;letter-spacing:-1px;line-height:14px}
++.fb_share_size_Large .fb_share_count_right .fb_share_count_inner{font-size:13px;line-height:16px;padding:2px 6px 4px;font-weight:normal;letter-spacing:-1px}
++.fb_share_count_hidden .fb_share_count_nub_top,
++.fb_share_count_hidden .fb_share_count_top,
++.fb_share_count_hidden .fb_share_count_nub_right,
++.fb_share_count_hidden .fb_share_count_right{visibility:hidden}
++.fb_connect_bar_container div,
++.fb_connect_bar_container span,
++.fb_connect_bar_container a,
++.fb_connect_bar_container img,
++.fb_connect_bar_container strong{background:none;border-spacing:0;border:0;direction:ltr;font-style:normal;font-variant:normal;letter-spacing:normal;line-height:1;margin:0;overflow:visible;padding:0;text-align:left;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-spacing:normal;vertical-align:baseline}
++.fb_connect_bar_container{position:fixed;left:0 !important;right:0 !important;height:42px !important;padding:0 25px !important;margin:0 !important;vertical-align:middle !important;border-bottom:1px solid #333 !important;background:#3b5998 !important;z-index:99999999 !important;overflow:hidden !important}
++.fb_connect_bar_container_ie6{position:absolute;top:expression(document.compatMode=="CSS1Compat"? document.documentElement.scrollTop+"px":body.scrollTop+"px")}
++.fb_connect_bar{position:relative;margin:auto;height:100%;width:100%;padding:6px 0 0 0 !important;background:none;color:#fff !important;font-family:"lucida grande", tahoma, verdana, arial, sans-serif !important;font-size:13px !important;font-style:normal !important;font-variant:normal !important;font-weight:normal !important;letter-spacing:normal !important;line-height:1 !important;text-decoration:none !important;text-indent:0 !important;text-shadow:none !important;text-transform:none !important;white-space:normal !important;word-spacing:normal !important}
++.fb_connect_bar a:hover{color:#fff}
++.fb_connect_bar .fb_profile img{height:30px;width:30px;vertical-align:middle;margin:0 6px 5px 0}
++.fb_connect_bar div a,
++.fb_connect_bar span,
++.fb_connect_bar span a{color:#bac6da;font-size:11px;text-decoration:none}
++.fb_connect_bar .fb_buttons{float:right;margin-top:7px}
++.fb_edge_widget_with_comment{position:relative;*z-index:1000}
++.fb_edge_widget_with_comment span.fb_edge_comment_widget{position:absolute}
++.fb_edge_widget_with_comment span.fb_send_button_form_widget{z-index:1}
++.fb_edge_widget_with_comment span.fb_send_button_form_widget .FB_Loader{left:0;top:1px;margin-top:6px;margin-left:0;background-position:50% 50%;background-color:#fff;height:150px;width:394px;border:1px #666 solid;border-bottom:2px solid #283e6c;z-index:1}
++.fb_edge_widget_with_comment span.fb_send_button_form_widget.dark .FB_Loader{background-color:#000;border-bottom:2px solid #ccc}
++.fb_edge_widget_with_comment span.fb_send_button_form_widget.siderender
++.FB_Loader{margin-top:0}
++.fbpluginrecommendationsbarleft,
++.fbpluginrecommendationsbarright{position:fixed !important;bottom:0;z-index:999}
++/* @noflip */
++.fbpluginrecommendationsbarleft{left:10px}
++/* @noflip */
++.fbpluginrecommendationsbarright{right:10px}
++</style><script charset="UTF-8" async="" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/thread.js"></script><link href="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/defaults.css" type="text/css" rel="stylesheet"><script charset="UTF-8" async="" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/disqus.js"></script><link href="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/theme.css" type="text/css" rel="stylesheet"><script charset="UTF-8" async="" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/theme.js"></script><script charset="UTF-8" async="" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/event.js"></script></head>
++
++<body data-twttr-rendered="true">
++  <header role="banner"><hgroup>
++  <h1><a href="http://linuxsysadminblog.com/">Linux Sysadmin Blog</a></h1>
++  
++</hgroup>
++
++</header>
++  <nav role="navigation"><ul class="subscription" data-subscription="rss">
++  <li><a href="http://linuxsysadminblog.com/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
++  
++</ul>
++  
++<form action="http://google.com/search" method="get">
++  <fieldset role="search">
++    <input name="q" value="site:linuxsysadminblog.com" type="hidden">
++    <input class="search" name="q" results="0" placeholder="Search" type="text">
++  </fieldset><fieldset class="mobile-nav"><select><option value="">Navigate…</option><option value="http://linuxsysadminblog.com/">» Blog</option><option value="http://linuxsysadminblog.com/blog/our-team">» Our Team</option><option value="http://linuxsysadminblog.com/blog/archives">» Archives</option><option value="http://linuxsysadminblog.com/blog/about">» About</option><option value="http://linuxsysadminblog.com/blog/contact">» Contact</option><option selected="selected" value="http://linuxsysadminblog.com/atom.xml">» RSS</option></select></fieldset>
++</form>
++  
++<ul class="main-navigation">
++  <li><a href="http://linuxsysadminblog.com/">Blog</a></li>
++  <li><a href="http://linuxsysadminblog.com/blog/our-team">Our Team</a></li>
++  <li><a href="http://linuxsysadminblog.com/blog/archives">Archives</a></li>
++  <li><a href="http://linuxsysadminblog.com/blog/about">About</a></li>
++  <li><a href="http://linuxsysadminblog.com/blog/contact">Contact</a></li>
++</ul>
++
++</nav>
++  <div id="main">
++    <div id="content">
++      
++
++<div>
++<article class="hentry" role="article">
++  
++  <header>
++    
++      <h1 class="entry-title">HowTo: Get Started With Amazon EC2 Api Tools</h1>
++    
++    
++      <p class="meta">
++        
++  
++
++
++<span class="byline author vcard">Posted by <span class="fn"><a href="http://linuxsysadminblog.com/blog/our-team/marius-ducea.html">Marius Ducea</a></span></span>
++
++ - 
++
++
++
++
++
++
++
++
++  
++
++
++<time datetime="2009-06-02T09:57:46+08:00" pubdate="" data-updated="true">Jun 2<span>nd</span>, 2009</time>
++        
++         | <a href="#disqus_thread">Comments</a>
++        
++      </p>
++    
++  </header>
++
++
++<div class="entry-content"><p>This article is meant to be a quick quide that will introduce the things needed to <strong>get you started with Amazon EC2</strong>.
++ All this information can be found in the EC2 api docs, and this is not 
++meant to be a replacement of the documentation, just trying to show the 
++things needed in a clear and short form.</p>
++
++<h3>Getting Started</h3>
++
++<p>First of all you will need one <a href="http://aws.amazon.com/"><strong>Amazon AWS</strong></a> <strong>account </strong>and enable the <strong>EC2 service</strong>; in case you don’t have this already now is the time to <a href="http://www.amazon.com/gp/aws/registration/registration-form.html">create</a> your account. Once you do that you can safely return to this doc ;-)</p>
++
++<p>Once you have your account working, while still on the aws site, go and create a new <strong>X.509 certificate</strong>
++ (under the AWS Access Identifiers page, in the X.509 certificate 
++section near the bottom, click Create New). Once this is done, you will 
++want to <em>download locally the private key file and X.509 certificate</em>.</p>
++
++<h3>EC2 API tools</h3>
++
++<p>Next you will have to <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=351&amp;categoryID=88">download</a>
++ and install the Amazon EC2 api tools on one system (controlling 
++machine) that will be used to start your EC2 army of servers, and 
++control their usage. You will want to use the latest version (2009-05-15
++ at this time) as it will support all the features Amazon is offering 
++for the EC2 service.</p>
++
++<p>The only real dependency of the EC2 API tools is <strong>java </strong>(at
++ least version 1.5) so we will want to install that first. If you are 
++running debian you can easily do this just by running (for lenny):
++<code>aptitude install sun-java6-jre</code>
++while for etch you will have to use: <em>aptitude install sun-java5-jre</em>
++For other distributions you can either use their internal packaging 
++mechanism (in case they provide sun-java packages) or just download the 
++binary from sun and install it manually.</p>
++
++<p><strong>Extract </strong>the EC2 APi tools (it is a zip archive called <strong>ec2-api-tools.zip</strong>) and move it under a folder of your preferece. I like to use <strong>~/.ec2</strong> for this, but you can use any folder you prefer. Also copy the <strong>private key</strong> and <strong>X.509 certificate</strong> in the same directory. Those files will look like <em>cert-xxx.pem</em> and <em>pk-xxx.pem</em>.</p>
++
++<p>Next we will have to <strong>export some shell variables</strong>. A good place to put this is in ~/.bashrc:</p>
++
++<figure class="code"><div class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
++<span class="line-number">2</span>
++<span class="line-number">3</span>
++<span class="line-number">4</span>
++<span class="line-number">5</span>
++<span class="line-number">6</span>
++<span class="line-number">7</span>
++<span class="line-number">8</span>
++</pre></td><td class="code"><pre><code class=""><span class="line">export EC2_HOME=~/.ec2
++</span><span class="line">export PATH=$PATH:$EC2_HOME/bin
++</span><span class="line">export EC2_PRIVATE_KEY=$EC2_HOME/pk-xxx.pem
++</span><span class="line">export EC2_CERT=$EC2_HOME/cert-xxx.pem
++</span><span class="line">#Java home for debian default install path:
++</span><span class="line">export JAVA_HOME=/usr
++</span><span class="line">#add ec2 tools to default path
++</span><span class="line">export PATH=~/.ec2/bin:$PATH</span></code></pre></td></tr></tbody></table></div></figure>
++
++
++<p>Finally source the file to have the changes active in your current shell session:
++<code>source ~/.bashrc</code>
++or just open a new shell before starting to use the API tools.</p>
++
++<h3>EC2 Keypair</h3>
++
++<p>We will need to create one <strong>keypair </strong>that will be used to connect using <strong>ssh</strong> to the EC2 instances we will be using. We will use the <strong>ec2-add-keypair</strong> utility to create the key and register it with amazon:
++<code>ec2-add-keypair my-keypair</code>
++This will print out the private key that we will have to save in a file:
++`cat &gt; ~/.ec2/id_rsa-my-keypair</p>
++
++<h1>paste the private key content</h1>
++
++<p>sudo chmod 600 <code>`~/.ec2/id_rsa-my-keypair</code></p>
++
++<h3>Running your first EC2 instance</h3>
++
++<p>Amazon EC2 uses the concept of <strong>AMIs </strong>= Amazon Machine
++ Images. Any EC2 instance is started from one AMI. You can either use 
++standard, public AMIs or create and customize your own private images. 
++Creating or modifying existing AMIs is beyond the scope of this article,
++ but just as a general information this is done using special AMI tools.
++ Also before building your AMI you will want to ensure if you want to 
++use a ‘small’ type of image (i386 os) or a ‘large’ type of instance 
++(64bit os). These are described under<a href="http://aws.amazon.com/ec2/instance-types/"> http://aws.amazon.com/ec2/instance-types/</a></p>
++
++<p>For the scope of our article we will find a standard public image and
++ start one instance of it to see that all is working properly with the 
++EC2 api tools. You can see all the public images using:
++<code>ec2-describe-images -a</code>
++(over 2,300 images ;) ). You should probably grep the result to get any 
++useful information. There are many good public images to use, like for 
++example the <a href="http://alestic.com/">alestic</a> ones (for debian and ubuntu)
++Having the AMI id of the image we want to use we are ready to start our fist EC2 instance:
++<code>ec2-run-instances ami-e348af8a -k my-keypair</code>
++that will start a small instance with a 32bit debian lenny server instance from alestic.com.</p>
++
++<p><code>ec2-describe-instances</code>
++- this will describe the status of all the running instances, with their hostname, instance id, etc.</p>
++
++<p><code>ec2-authorize default -p 22</code>
++- in order to connect to your instance you will need to customize the 
++‘default’ firewall rules for your account. The above rule will allow ssh
++ on port 22 from anywhere. If you want to open http traffic you will 
++have to add a rule like this:
++<code>ec2-authorize default -p 80</code></p>
++
++<p>Finally we can ssh to the ec2 instance using:
++<code>ssh -i ~/.ec2/id_rsa-my-keypair root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com</code>
++where ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com is the actual 
++hostname of the instance as obtained from ec2-describe-instances.</p>
++
++<p><em>Note</em>: don’t forget to <strong>stop your instance</strong> 
++when you no longer need it. EC2 is a service paid as you use, hence if 
++you forget your instance running you will be billed for it ;-). You can 
++do this by running <strong>shutdown </strong>inside the instance or by using:
++<code>ec2-terminate-instances i-yourinstance</code>
++and verify with <strong>ec2-describe-instances</strong> that the instance is indeed stopped.</p>
++
++<p>Next step is to create/customize your own EC2 AMI images based on 
++your needs. This will be covered in a future article. Hopefully you 
++found this article useful, and it will get you on track quickly with 
++Amazon EC2 api tools.</p>
++</div>
++
++
++  <footer>
++    <p class="meta">
++      
++  
++
++
++<span class="byline author vcard">Posted by <span class="fn"><a href="http://linuxsysadminblog.com/blog/our-team/marius-ducea.html">Marius Ducea</a></span></span>
++
++
++      
++
++
++
++
++
++
++
++
++  
++
++
++<time datetime="2009-06-02T09:57:46+08:00" pubdate="" data-updated="true">Jun 2<span>nd</span>, 2009</time>
++      
++
++<span class="categories">
++  
++    <a class="category" href="http://linuxsysadminblog.com/category/cli/">CLI</a>, <a class="category" href="http://linuxsysadminblog.com/category/howto/">HowTo</a>, <a class="category" href="http://linuxsysadminblog.com/category/cloud-computing/">cloud computing</a>, <a class="category" href="http://linuxsysadminblog.com/category/sysadmin/">sysadmin</a>
++  
++</span>
++
++
++    </p>
++    
++      <div class="sharing">
++  
++  <iframe data-twttr-rendered="true" title="Twitter Tweet Button" style="width: 107px; height: 20px;" class="twitter-share-button twitter-count-horizontal" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/tweet_button.html" allowtransparency="true" frameborder="0" scrolling="no"></iframe>
++  
++  
++  
++    <div fb-xfbml-state="rendered" class="fb-like fb_edge_widget_with_comment fb_iframe_widget" data-send="true" data-width="450" data-show-faces="false"><span style="height: 24px; width: 450px;"><iframe src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/like.html" class="fb_ltr" title="Like this content on Facebook." style="border: medium none; overflow: hidden; height: 24px; width: 450px;" name="f24b4a4df68728" id="fd385dd951b88c" scrolling="no"></iframe></span></div>
++  
++</div>
++
++    
++    <p class="meta">
++      
++        <a class="basic-alignment left" href="http://linuxsysadminblog.com/2009/05/moving-magento-sites/" title="Previous Post: Moving Magento Sites">« Moving Magento Sites</a>
++      
++      
++        <a class="basic-alignment right" href="http://linuxsysadminblog.com/2009/06/new-debian-apt-keys/" title="next Post: New Debian apt keys">New Debian apt keys »</a>
++      
++    </p>
++  </footer>
++</article>
++
++  <section>
++    <h1>Comments</h1>
++    <div id="disqus_thread" aria-live="polite"><noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
++<div style="display: none;" id="dsq-content-stub"><img alt="DISQUS" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAARCAYAAAH4YIFjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABwdJREFUeNpi/P//PwMhwAIiGBkZGeK6V8JVh9rqdfrc0ixnEDb+wPD2rAAjMSYBBBBRisDWwKxCthIE/q8Q+A8yhCiTAAIIrCi+ZxVMZSAQr19UGs4IMxWd/X8Rw3/GOKDhW43fgzwF1hX7n5EJ2dSp2QFNUKcZwJ31/78CkvPBGkGGMXidSUTWCxBAxAUAEQAcJzCvIXsDBPwsNBU2nbj+AMpdsFA8PAHsLZj3QC5D9hrIAEtN+RMwAzRkxcB0iK3eQ6iQIRAnoMTE//8CyHwmWHQdv/7QAiZ44/ErMP383acsqNB5iMnPlsFdsUZ6IU3CCCCA4AYBw8kBJgj06gGkmHJAFgPyQV4ExeQEoNgHJHUBQMoAWRzoerBeYHgeQOJ/APIvQPkNUP4EuIdADBAGBRMQOABxQcakdSipHZldNGvL2zWHL8kD1d0HieVN33QYqnc/EAfULNwJVw8KTniQwvjAdPz/SEwKmL1KfC5QjwEQr4e5AyVdA3P4ASCe8O3nb1whmtib6r3IXlfpATBEFbpWH9ygJSdmBtXrOHPbyZWPXn1AqOZRwDSBS+YHo82SOQwiZnYMoS+EGC42nGdYzBiAnKpgGAbeA3ECkjwYQNnzH758///6o5cgofVIagy+/vgFF//y/ecHJLn1/18AA+/teZBcPZL4eSTxBJg7AAKIaomRmpkeV2IG5UcDpMSsAM2zF4BiG9DUFaCLQxPwBWCC/QBkg/QqoCVuEN4ASuDIaWc/DIMSItBxH0GCrkaqCVBxWO4BJWBQcK/PmrL+I1S8H0i9h4mjFfX7GTRyIdEuHzIfZtb/Zdw3oGyQnvP/d9pNgRc+MLCwJMxxWk7AI6Ar+YCWVSLLyYkJzIYlZqC6RGBhbg/lFwDlQHoDgfgALLfhjY8/X9XhpWPs/wWM7odyMBwDylU8nOzyILYIH3cZslxBgM0cKHM+MOTAGCZnri7XCdS7ASgGLsc/fPlug9cxlrO/wUvYxYwJwCgLwHAMcrVlqCJ9BVlchJ+7EhRyQPwAyGaAFnhgsOPMzUhQroLVAU76yp/gGp/vtQbTr45pwMWOp1oDQ6QQiGEi6+EJGLmah0YJQ6CVtu3ivecKYHIpE9b8BPqcDSnawHSSu8m3eTvPyAHlzsPkDl25/wXMYAOq+XgtBFwIfn/GwCAOSq8HYCGCsNh8+hvksgYZIJchDkjljAKoHAKVJ6ByBbnmA5XESOL1oFIZSc9/cJkC1IukPuH/z/cw8fswdwyqcgYgwAaVYwYbQEnDSI1LbGABEDcCC1lYS4yhfO42n+fvPm9GKsAZkfJDA7RcwwYmQM1CbpUUADU3AB3AjxJ7wFwAFGsAqp2A0mBDahww8Gv4Mvrf2AKXWyMzgeHbk3wwh5X/DGPkR1OoHlCmn49cGCABkL8SgZn8ANbAQQaV4ZBK6yGwgbDr3G2GNx+/gkqShMTe1V///vsnA/KYjoKECjBwMPQCW0EngOrNQWxbHQWGFA8zBlAj5eztpwwbjl9lyPG1DFOUEAIFDqxJB6ksoC1ZN2NVsDm7zt4GNUhBgdUPrXwckWtQOJB0VQE2XRF8UQt9hodrIGw+FaDcWVjAwAshhsD7kAbPO2Dr78ZEBoZfHxQYHNYbwEogvIGjKSfOiNysBpaEL/acv8MODBhuUX7u00BhVVx6DZWlxHcDAxQEDl95AMZQAGqHLlSSFIanAnZWll0/f/8Bs2OcDB+5GavJVyGZtevsrYdL9p2XQ6rZGcnKI54nZRj2uoMCAVr4K8JkQAKgJsdEYN12AbmYYSGqYGJk/NC8bO91WHKUFRXgwace6ElDIF4PjHWHc3eeMZy98xSU8mB1mwE0FSQCU8ECZiZGVpi+yw9eLIfVlUyMjIf+/f/Pu/bIlTtIdSX5hauo+RagxxMZfr2fwHB3IT/Dy4MMDI/BzTABaP2aAGzmgPpN4gQDB1pmgIA+EAfcfvoGXl/mB1hXFuBxCLDs6oc26kBJZiIoxShLCqs9e/tp+vdfv8ENB08Tdf9FwHKsMtxxTfvK/SGgbHfx3vNyoL2g7DjR30r74vqjV2yA6lXgbnI2WtoH4yhEfGF4sAISSTcm9wOzDcidoE6lPTBLwRuyDMoJ5+DZagnLJIb/f3mh5edGcKoRs+5neHUUUgZxiIrhrK2wFchc7KwMmsByANjiAZUfoGzhCEpJIDlQowOYffqRC2RQS+f1x68HNx6/ygcqY9A7RMZAc5LcTS/zcLLZwcwB1evAzs/8pfsvwDu9yOplgRECzF4M8a7Gryw05NRB+sDtiC/3HjKcKeaDpgAEADVmNIDlsX4DqFPmCOvvMNxdkAAuX95dQFUPKnv06kEBmQgNOLpV5QbQpAsrcz4QUC+AVJsgqxcgoNcBqQy5QIIdONUDALcn6c0dtMJ9AAAAAElFTkSuQmCC" height="17" width="71"><img alt="..." src="data:image/gif;base64,R0lGODlhEAALAPQAAP///z2LqeLt8dvp7u7090GNqz2LqV+fuJ/F1IW2ycrf51aatHWswaXJ14i4ys3h6FmctUCMqniuw+vz9eHs8fb5+meku+Tu8vT4+cfd5bbT3tbm7PH2+AAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA" style="margin: 0pt 0pt 3px 5px;" height="11" width="16"></div><div class="clearfix" style="display: block;" id="dsq-content">      <div id="dsq-global-toolbar" class="dsq-clearfix">        <ul class="dsq-global-toolbar-right dsq-clearfix">                            <li class="dsq-community-box">                <a href="#" class="dsq-toolbar-item dsq-tt" onclick="DISQUS.dtpl.actions.fire('community.show'); return false" title="Expand Community Box"><span class="dsq-toolbar-icon"></span></a>            </li>                            <li class="dsq-global-toolbar-dropdown-container">                    <div id="dsq-toolbar-dropdown">    <a href="#" class="dsq-toolbar-logo dsq-toolbar-item dsq-clearfix"><span class="dsq-toolbar-icon">Disqus</span></a>    <div id="dsq-toolbar-dropdown-wrap" style="display: none">      <ul class="dsq-clearfix">                    <li class="dsq-login-link"><a href="#" onclick="DISQUS.dtpl.actions.fire('auth.login'); return false"><span class="dsq-toolbar-icon"></span><span class="dsq-toolbar-label">Login</span></a></li>                    <li class="dsq-about-link"><a href="http://disqus.com/" target="_blank"><span class="dsq-toolbar-icon"></span><span class="dsq-toolbar-label">About Disqus</span></a></li>      </ul>    </div>  </div>            </li>        </ul>                <ul class="dsq-global-toolbar-left dsq-clearfix">            <li class="dsq-like-thread">                <a href="#" id="dsq-like-thread-button" class="dsq-toolbar-item dsq-clearfix  dsq-tt" onclick="DISQUS.dtpl.actions.fire('thread.vote', 1); return false;" title="I like this page">                    <span class="dsq-toolbar-icon"></span>                    <span class="dsq-toolbar-label">Like</span>                </a>            </li>            <li class="dsq-dislike-thread">                <a href="#" id="dsq-dislike-thread-button" class="dsq-toolbar-item dsq-clearfix  dsq-tt" onclick="DISQUS.dtpl.actions.fire('thread.vote', -1); return false" title="I don't like this page">                    <span class="dsq-toolbar-icon">Dislike</span>                </a>            </li>            <li class="dsq-like-panel">                <ul class="dsq-like-faces dsq-clearfix">                        <li class="dsq-like-activity">    </li>                </ul>            </li>        </ul>            </div>    <div id="dsq-like-tooltip">      <div id="dsq-share-step-1" class="dsq-share-step">        <h3>Glad you liked it. Would you like to share?</h3>        <p class="dsq-tooltip-checkbox"><input id="dsq-share-thread-facebook" value="Facebook" type="checkbox"><label for="dsq-share-thread-facebook"><span class="dsq-facebook">Facebook</span></label></p>        <p class="dsq-tooltip-checkbox"><input id="dsq-share-thread-twitter" value="Twitter" type="checkbox"><label for="dsq-share-thread-twitter"><span class="dsq-twitter">Twitter</span></label></p>        <ul id="dsq-tooltip-actions">                        <li><a href="#" onclick="DISQUS.dtpl.actions.fire('thread.share.send'); return false" class="dsq-primary-action">Share</a></li>                    <li><a href="#" onclick="DISQUS.dtpl.actions.fire('thread.share.cancel'); return false" class="dsq-secondary-action">No thanks</a></li>        </ul>      </div>      <div id="dsq-share-step-2" class="dsq-share-step" style="display:none !important">        <p>Sharing this page …</p>      </div>      <div id="dsq-share-step-3" class="dsq-share-step" style="display:none !important">        <p>Thanks! <a href="#" class="dsq-tooltip-decline" onclick="DISQUS.dtpl.actions.fire('thread.share.cancel'); return false">Close</a></p>      </div>    </div>                                <div class="dsq-reply " id="dsq-reply">          <div id="dsq-account-dropdown">                  <a href="#" onclick="DISQUS.dtpl.actions.fire('auth.login'); return false;">Login</a>              </div>      <h3>Add New Comment</h3>        <div class="dsq-avatar">              <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png">          </div>    <div class="dsq-textarea dsq-textarea-reply">      <div class="dsq-textarea-background">        <div style="height: auto;" class="dsq-textarea-wrapper">          <!-- filled dynamically -->        <iframe style="height: 58px;" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/reply.html" id="easyXDM_DISQUS_net_default8491_provider" name="easyXDM_DISQUS_net_default8491_provider" frameborder="0" scrolling="no"></iframe></div>                  <div id="dsq-media-preview" class="dsq-media-preview" style="display:none">          </div>                <div class="dsq-post-tools">          <ul>            <li class="dsq-post-as">                                <button type="button" class="dsq-button" onclick="DISQUS.dtpl.actions.fire('comments.validate', null, this);">                    Post as …                  </button>                          </li>                          <li class="dsq-attach-media">                <div class="dsq-attach-media-container">                  <span>Image</span>                  <!-- filled dynamically -->                <iframe src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/upload.html" id="easyXDM_DISQUS_net_default8492_provider" name="easyXDM_DISQUS_net_default8492_provider" frameborder="0" scrolling="no"></iframe></div>              </li>                        <li class="dsq-share-on dsq-clearfix">                            </li>          </ul>        </div>      </div>    </div>  </div>                              <div id="dsq-sort-by">    <select id="dsq-sort-select" onchange="DISQUS.dtpl.actions.fire('thread.sort', this.value);">              <option value="hot" selected="selected">          Sort by popular now        </option>              <option value="best">          Sort by best rating        </option>              <option value="newest">          Sort by newest first        </option>              <option value="oldest">          Sort by oldest first        </option>          </select>  </div>      <h3>            Showing <span id="dsq-num-posts">11</span> comments        </h3>        <ul id="dsq-comments">            <li id="comment-555758785">  </li><li id="dsq-comment-555758785" data-dsq-comment-id="555758785" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Marius Ducea's profile">      <a href="http://disqus.com/twitter-16829516/" onclick="DISQUS.dtpl.actions.fire('profile.show', 555758785, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/avatar32.jpg" class="" alt="">      </a>    </div>    <div id="dsq-comment-body-555758785" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://twitter.com/mariusducea" target="_blank" class="dsq-commenter-name" rel="nofollow">Marius Ducea</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 555758785); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 555758785); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-555758785">                <div class="dsq-comment-text" id="dsq-comment-text-555758785">        <p>@Dfd
++ sun-java was removed from ubuntu. You could still install it manually 
++from the oracle site, but easier it would be to use openjdk imo.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-555758785"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-555758785">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,555758785); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',555758785, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-555758785" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 555758785);" title="Link to comment by Marius Ducea">          3 months ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-555758785" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 555758785); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 555758785, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-555758785"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-555758785"></li>            <li id="comment-555729014">  </li><li id="dsq-comment-555729014" data-dsq-comment-id="555729014" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Dfd's profile">      <a href="http://disqus.com/guest/be2dadc68bb8d32df521ca5cefa764da/" onclick="DISQUS.dtpl.actions.fire('profile.show', 555729014, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/avatar32_002.jpg" class="" alt="">      </a>    </div>    <div id="dsq-comment-body-555729014" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Dfd</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 555729014); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 555729014); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-555729014">                <div class="dsq-comment-text" id="dsq-comment-text-555729014">        <p>Unforunately&nbsp;</p>
++
++<p>aptitude install sun-java6-jre&nbsp;</p>
++
++<p>didn't work for me, running ubuntu</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-555729014"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-555729014">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,555729014); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',555729014, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-555729014" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 555729014);" title="Link to comment by Dfd">          3 months ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-555729014" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 555729014); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 555729014, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-555729014"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-555729014"></li>            <li id="comment-552875079">  </li><li id="dsq-comment-552875079" data-dsq-comment-id="552875079" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Shawn Welch's profile">      <a href="http://disqus.com/guest/38b42911484f66ee5aedadaa16846340/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875079, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/avatar32.xml" class="" alt="">      </a>    </div>    <div id="dsq-comment-body-552875079" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://shrimpwagon.wordpress.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Shawn Welch</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875079); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875079); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875079">                <div class="dsq-comment-text" id="dsq-comment-text-552875079">        <p>Thank you sooo much. Very complete and useful. This is exactly what you need to do to setup EC2.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875079"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875079">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875079); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875079, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875079" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875079);" title="Link to comment by Shawn Welch">          1 year ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875079" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875079); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875079, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875079"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875079"></li>            <li id="comment-552875078">  </li><li id="dsq-comment-552875078" data-dsq-comment-id="552875078" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Aret Carlsen's profile">      <a href="http://disqus.com/guest/05335a1c9416420be891a3fac838f774/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875078, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="" alt="">      </a>    </div>    <div id="dsq-comment-body-552875078" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Aret Carlsen</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875078); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875078); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875078">                <div class="dsq-comment-text" id="dsq-comment-text-552875078">        <p>Useful article.</p>
++
++<p>You seem to have an advertising virus.  The headline of one section 
++currently reads, "Running your first EC2 instance", where the second 
++through fourth words are a link to a 3rd-party website.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875078"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875078">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875078); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875078, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875078" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875078);" title="Link to comment by Aret Carlsen">          1 year ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875078" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875078); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875078, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875078"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875078"></li>            <li id="comment-552875074">  </li><li id="dsq-comment-552875074" data-dsq-comment-id="552875074" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand mitch's profile">      <a href="http://disqus.com/guest/5d6f004d9437535eb1cd0a0d5427aff1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875074, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-552875074" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.devnull.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">mitch</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875074); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875074); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875074">                <div class="dsq-comment-text" id="dsq-comment-text-552875074">        <p>It does show up in Elasticfox. I had the wrong region selected. Thanks for the great post.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875074"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875074">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875074); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875074, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875074" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875074);" title="Link to comment by mitch">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875074" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875074); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875074, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875074"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875074"></li>            <li id="comment-552875073">  </li><li id="dsq-comment-552875073" data-dsq-comment-id="552875073" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand mitch's profile">      <a href="http://disqus.com/guest/5d6f004d9437535eb1cd0a0d5427aff1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875073, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-552875073" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.devnull.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">mitch</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875073); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875073); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875073">                <div class="dsq-comment-text" id="dsq-comment-text-552875073">        <p>I
++ don't see how AWS knows this is running under your account. I have 
++Elasticfox and in the list of ami's I don't see the same ones listed 
++using the api-tools. Using this article I can start an ami and login to 
++it just fine but I don't see any running instances under my aws account 
++or in elasticfox. Can someone enlighten me please?</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875073"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875073">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875073); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875073, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875073" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875073);" title="Link to comment by mitch">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875073" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875073); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875073, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875073"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875073"></li>            <li id="comment-552875063">  </li><li id="dsq-comment-552875063" data-dsq-comment-id="552875063" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Gabi's profile">      <a href="http://disqus.com/guest/3eda6fcd3204ef285fa52176c28c4d3e/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875063, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/uploads/anonusers/2036/avatar32.jpg?1281549414" alt="">      </a>    </div>    <div id="dsq-comment-body-552875063" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.none.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Gabi</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875063); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875063); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875063">                <div class="dsq-comment-text" id="dsq-comment-text-552875063">        <p>Hi,</p>
++
++<p>If I grant access to different people to start different instances is
++ there any way to track who started an instances, for how long he used 
++it and when did he started?</p>
++
++<p>Thank you.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875063"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875063">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875063); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875063, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875063" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875063);" title="Link to comment by Gabi">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875063" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875063); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875063, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875063"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875063"></li>            <li id="comment-552875071">  </li><li id="dsq-comment-552875071" data-dsq-comment-id="552875071" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Jason Liang's profile">      <a href="http://disqus.com/guest/6f1e107d88dce22d3cfd5431d68b25b0/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875071, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-552875071" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.aixmind.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Jason Liang</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875071); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875071); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875071">                <div class="dsq-comment-text" id="dsq-comment-text-552875071">        <p>Very helpful!<br>I've subscribed to your RSS!</p>
++
++<p>Keep it up!<br>Jason</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875071"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875071">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875071); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875071, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875071" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875071);" title="Link to comment by Jason Liang">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875071" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875071); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875071, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875071"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875071"></li>            <li id="comment-552875067">  </li><li id="dsq-comment-552875067" data-dsq-comment-id="552875067" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand sudhish's profile">      <a href="http://disqus.com/guest/3ca972ade05174e8939651f7c4f8a084/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875067, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-552875067" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">sudhish</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875067); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875067); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875067">                <div class="dsq-comment-text" id="dsq-comment-text-552875067">        <p>Its a very helpful</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875067"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875067">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875067); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875067, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875067" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875067);" title="Link to comment by sudhish">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875067" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875067); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875067, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875067"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875067"></li>            <li id="comment-552875070">  </li><li id="dsq-comment-552875070" data-dsq-comment-id="552875070" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand marius's profile">      <a href="http://disqus.com/guest/34b742e276f76496c6c3b12d07ee984f/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875070, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/uploads/anonusers/5550/9495/avatar32.jpg?1281549414" alt="">      </a>    </div>    <div id="dsq-comment-body-552875070" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.ducea.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">marius</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875070); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875070); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875070">                <div class="dsq-comment-text" id="dsq-comment-text-552875070">        <p>@Kevin:
++ yes from the path point of view this is the same, but the api tools 
++need to have defined the variable EC2_HOME so this can't be simplified 
++like that. </p>
++
++<p>Cheers,<br>- Marius -</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875070"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875070">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875070); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875070, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875070" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875070);" title="Link to comment by marius">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875070" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875070); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875070, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875070"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875070"></li>            <li id="comment-552875068">  </li><li id="dsq-comment-552875068" data-dsq-comment-id="552875068" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Kevin's profile">      <a href="http://disqus.com/guest/bc97afb80638c682d0389d7f1c61985a/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875068, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-552875068" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Kevin</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875068); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875068); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875068">                <div class="dsq-comment-text" id="dsq-comment-text-552875068">        <p>I love the instructions. They were very helpful.</p>
++
++<p>Do these two path statements in the instructions do the same thing?<br>  export EC2_HOME=~/.ec2<br>  export PATH=$PATH:$EC2_HOME/bin</p>
++
++<p>  export PATH=~/.ec2/bin:$PATH</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875068"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875068">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875068); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875068, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875068" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875068);" title="Link to comment by Kevin">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875068" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875068); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875068, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875068"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875068"></li>      </ul>        <div id="dsq-pagination">      <ul id="dsq-footer" class="dsq-clearfix">        <div id="dsq-subscribe">            <li>      <a href="#" class="dsq-subscribe-email" onclick="return DISQUS.dtpl.actions.fire('thread.subscribe');">        <span class="dsq-font">M</span> <em>Subscribe by email</em>      </a>    </li>    <li>    <a href="http://linuxsysadminblog.disqus.com/howto_get_started_with_amazon_ec2_api_tools/latest.rss" class="dsq-subscribe-rss">      <span class="dsq-font">S</span> <em>RSS</em>    </a>  </li>    </div>  </ul>    </div>                  <div class="dsq-trackback-url">      Trackback URL      <input onclick="this.select()" readonly="true" value="http://disqus.com/forums/linuxsysadminblog/howto_get_started_with_amazon_ec2_api_tools/trackback/">    </div>      </div><div>  </div></div>
++  </section>
++
++</div>
++
++<aside class="sidebar thirds">
++  
++    <section class="first odd">
++  <h1>Recent Posts</h1>
++  <ul id="recent_posts">
++    
++      <li class="post">
++        <a href="http://linuxsysadminblog.com/2012/08/integrate-sendgrid-with-redmine/">Integrate Sendgrid with Redmine</a>
++      </li>
++    
++      <li class="post">
++        <a href="http://linuxsysadminblog.com/2012/07/rsback-task-x-is-locked-and-cannot-be-executed/">rsback: task x is locked and cannot be executed</a>
++      </li>
++    
++      <li class="post">
++        <a href="http://linuxsysadminblog.com/2012/06/restore-xen-vm-from-lvm-snapshot-backups/">Restore Xen VM from LVM Snapshot Backups</a>
++      </li>
++    
++      <li class="post">
++        <a href="http://linuxsysadminblog.com/2012/06/debian-6-backup-xen-with-lvm-and-rsnapshot/">Debian 6: Backup Xen with LVM and Rsnapshot</a>
++      </li>
++    
++      <li class="post">
++        <a href="http://linuxsysadminblog.com/2012/06/gitolite-add-edit-or-delete-git-repository-name/">Gitolite: Add, Edit, or Delete Git Repository Name</a>
++      </li>
++    
++  </ul>
++</section>
++
++<section class="even">
++  <h1>GitHub Repos</h1>
++  <ul id="gh_repos">
++    <li class="loading">Status updating...</li>
++  </ul>
++  
++  <a href="https://github.com/promet">@promet</a> on GitHub
++  
++  <script type="text/javascript">
++    $.domReady(function(){
++        if (!window.jXHR){
++            var jxhr = document.createElement('script');
++            jxhr.type = 'text/javascript';
++            jxhr.src = '/javascripts/libs/jXHR.js';
++            var s = document.getElementsByTagName('script')[0];
++            s.parentNode.insertBefore(jxhr, s);
++        }
++
++        github.showRepos({
++            user: 'promet',
++            count: 0,
++            skip_forks: true,
++            target: '#gh_repos'
++        });
++    });
++  </script>
++  <script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/github.js" type="text/javascript"> </script>
++</section>
++
++
++<section class="odd">
++  <h1>Latest Tweets</h1>
++  <ul id="tweets"><li><p><a href="http://twitter.com/linuxsysadmnblg/status/8944570719">139w</a>New blog post: Drupal core - killing kittens <a href="http://linuxsysadminblog.com/2010/02/drupal-core-killing-kittens/">linuxsysadminblog.com/2010/02/drupal-core-killing-kittens/</a></p></li><li><p><a href="http://twitter.com/linuxsysadmnblg/status/8581729446">140w</a>New blog post: cvs [checkout aborted]: absolute pathnames invalid for server <a href="http://bit.ly/bTAwEE">bit.ly/bTAwEE</a></p></li><li><p><a href="http://twitter.com/linuxsysadmnblg/status/8560789171">140w</a>New blog post: Drupal Performance improvement for the layment presentation <a href="http://bit.ly/bBfMBi">bit.ly/bBfMBi</a></p></li><li><p><a href="http://twitter.com/linuxsysadmnblg/status/6324746591">149w</a>New blog post: Google to offer free DNS service <a href="http://linuxsysadminblog.com/2009/12/google-to-offer-free-dns-service/">linuxsysadminblog.com/2009/12/google-to-offer-free-dns-service/</a></p></li></ul>
++  <script type="text/javascript">
++    $.domReady(function(){
++      getTwitterFeed("linuxsysadmnblg", 4, false);
++    });
++  </script>
++  <script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/twitter.js" type="text/javascript"> </script>
++  
++    <iframe data-twttr-rendered="true" title="Twitter Follow Button" style="width: 158px; height: 20px;" class="twitter-follow-button" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/follow_button.html" allowtransparency="true" frameborder="0" scrolling="no"></iframe>
++  
++</section>
++
++
++
++
++
++  
++</aside>
++
++
++    <span class="toggle-sidebar"></span></div>
++  </div>
++  <footer role="contentinfo"><p>
++  Copyright © 2012 - Promet OPS Team -
++  <span class="credit">Powered by <a href="http://octopress.org/">Octopress</a></span>
++</p>
++
++</footer>
++  
++
++<script type="text/javascript">
++      var disqus_shortname = 'linuxsysadminblog';
++      
++        
++        // var disqus_developer = 1;
++        var disqus_identifier = 'http://linuxsysadminblog.com/2009/06/howto-get-started-with-amazon-ec2-api-tools/';
++        var disqus_url = 'http://linuxsysadminblog.com/2009/06/howto-get-started-with-amazon-ec2-api-tools/';
++        var disqus_script = 'embed.js';
++      
++    (function () {
++      var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
++      dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
++      (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
++    }());
++</script>
++
++
++
++<div class=" fb_reset" id="fb-root"><div style="position: absolute; top: -10000px; height: 0pt; width: 0pt;"><div><iframe src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/xd_arbiter.html" name="fb_xdm_frame_http" id="fb_xdm_frame_http"></iframe><iframe src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/xd_arbiter_002.html" name="fb_xdm_frame_https" id="fb_xdm_frame_https"></iframe></div><div><iframe src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/oauth.html" name="f201413aa2819a8" id="f201413aa2819a8" style="display: none;"></iframe></div></div></div>
++<script>(function(d, s, id) {
++  var js, fjs = d.getElementsByTagName(s)[0];
++  if (d.getElementById(id)) {return;}
++  js = d.createElement(s); js.id = id;
++  js.src = "//connect.facebook.net/en_US/all.js#appId=212934732101925&xfbml=1";
++  fjs.parentNode.insertBefore(js, fjs);
++}(document, 'script', 'facebook-jssdk'));</script>
++
++
++
++
++
++  <script type="text/javascript">
++    (function(){
++      var twitterWidgets = document.createElement('script');
++      twitterWidgets.type = 'text/javascript';
++      twitterWidgets.async = true;
++      twitterWidgets.src = 'http://platform.twitter.com/widgets.js';
++      document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
++    })();
++  </script>
++
++
++
++
++
++
++
++<iframe src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/def.html" style="position: absolute; top: -2000px; left: 0px;" id="easyXDM_DISQUS_net_default8490_provider" name="easyXDM_DISQUS_net_default8490_provider" frameborder="0"></iframe></body></html>
+\ No newline at end of file
+Index: ../trunk-jpl/externalpackages/ec2api/doc/ec2-ug.pdf
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/externalpackages/ec2api/doc/ec2-ug.pdf
+===================================================================
+--- ../trunk-jpl/externalpackages/ec2api/doc/ec2-ug.pdf	(revision 13841)
++++ ../trunk-jpl/externalpackages/ec2api/doc/ec2-ug.pdf	(revision 13842)
+
+Property changes on: ../trunk-jpl/externalpackages/ec2api/doc/ec2-ug.pdf
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/externalpackages/ec2api/doc/mpi-cluster-with-python-and-amazon-ec2-part-2-of-3.html
+===================================================================
+--- ../trunk-jpl/externalpackages/ec2api/doc/mpi-cluster-with-python-and-amazon-ec2-part-2-of-3.html	(revision 0)
++++ ../trunk-jpl/externalpackages/ec2api/doc/mpi-cluster-with-python-and-amazon-ec2-part-2-of-3.html	(revision 13842)
+@@ -0,0 +1,1111 @@
++<!DOCTYPE html>
++<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us"><head>
++  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
++  <title>MPI Cluster with Python and Amazon EC2 (part 2 of 3) » Data Wrangling Blog</title>
++	<meta name="verify-v1" content="532Q5ykeumd5lwz7oFvo62D7+EX/DOYbH9r/VWbwd+Y=">
++	<meta name="author" content="Peter Skomoroch">
++	<meta name="description" content="Today I posted a public Amazon EC2 AMI which can be used to run an on demand beowulf cluster in the cloud">
++	<meta name="keywords" content="cluster computing, python, mpi, amazon ec2, and cloud computing">
++
++   <link href="http://feeds.feedburner.com/DataWrangling" rel="alternate" title="DataWrangling" type="application/atom+xml">
++
++   <!-- syntax highlighting CSS -->
++   <link rel="stylesheet" href="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/syntax.css" type="text/css">
++
++   <!-- Homepage CSS -->
++   <link rel="stylesheet" href="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/screen.css" type="text/css" media="screen, projection">
++
++   <!-- Typekit -->
++   <script type="text/javascript">try{Typekit.load();}catch(e){}</script>
++	
++   <!-- Disqus debug -->
++<script type="text/javascript">  var disqus_developer = 0; </script> 
++
++<script src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/embed.js" async="" type="text/javascript"></script><script charset="UTF-8" async="" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/thread.js"></script><link href="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/defaults.css" type="text/css" rel="stylesheet"><script charset="UTF-8" async="" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/disqus.js"></script><link href="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/theme.css" type="text/css" rel="stylesheet"><script charset="UTF-8" async="" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/theme.js"></script><script charset="UTF-8" async="" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/event.js"></script></head>
++<body id="blog">
++
++<div id="container">
++	<div id="header">
++	<!-- <h1><a href="http://www.datawrangling.com" title="Data Wrangling" >:Data Wrangling</a></h1> -->
++   <h1><a href="http://www.datawrangling.com/" title="Data Wrangling"><img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/logo-white.png" alt="Data Wrangling"></a></h1><a href="http://www.datawrangling.com/" title="Data Wrangling">
++</a> 
++  <!-- <a href="http://www.datawrangling.com" title="DataWrangling.com"><img src="http://datawrangling.s3.amazonaws.com/datawrangling_logo_white.png" alt="Data Wrangling"/>
++</a> -->
++	<div id="subtitle">
++	<!-- Here's the tagline  -->
++	Machine Learning, Data Mining, and More    
++	</div>
++</div>
++
++
++	
++<div id="navigation">
++	<ul>
++		<li><a href="http://www.datawrangling.com/" id="blognav">Blog</a></li>		
++		<li><a href="http://www.datawrangling.com/about/" id="aboutnav">About</a></li>
++		<li><a href="http://www.datawrangling.com/contact/" id="contactnav">Contact</a></li> 
++		<li><a href="http://www.datawrangling.com/news/" id="newsnav">News</a></li> 
++		<li><a href="http://www.datawrangling.com/code/" id="codenav">Code</a></li> 				
++		<!-- TODO: fix CSS and add mobile layout -->
++		<!-- TODO: if user arrives from search engine display related content -->
++	</ul>
++</div>
++
++
++			<div id="navcol">
++			<ul>
++				<li class="pagenav">
++					<h2>
++						Follow DataWrangling
++					</h2>
++				</li>			
++				<li>
++					<a href="http://twitter.com/peteskomoroch" id="twitter-link" name="twitter-link"><img title="pete skomoroch on Twitter" alt="follow datawrangling on twitter" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/TwitterBadge.png"></a>
++				</li>							
++				<li style="list-style: none">
++					<p><a href="http://feeds.feedburner.com/DataWrangling" rel="alternate" type="application/rss+xml"><img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/feed-icon16x16.png" alt="" style="vertical-align: middle; border: 0pt none;"></a><a href="http://feeds.feedburner.com/DataWrangling" rel="alternate" type="application/rss+xml"> Subscribe in a reader</a>
++					</p>
++				</li>		
++				<li style="list-style: none">
++					<p>
++					<a href="http://www.linkedin.com/in/peterskomoroch"><img alt="pskomoroch" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/linkedin.png" border="0" height="15" width="15"> Connect on LinkedIn</a>
++					</p>
++				</li>
++				<li style="list-style: none">
++					<p>
++					<a href="http://github.com/datawrangling"><img alt="pskomoroch" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/github.png" border="0" height="15" width="15"> Watch on Github</a>
++					</p>
++				</li>				
++				<li style="list-style: none">
++					<p>
++					<a href="http://www.delicious.com/pskomoroch"><img alt="pskomoroch" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/delicious.png" border="0" height="15" width="15"> Add on Delicious</a>
++					</p>
++				</li>
++							<li style="list-style: none">	
++								<p><a href="http://feeds.feedburner.com/DataWrangling"><img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/DataWrangling.gif" style="border: 0pt none;" alt="" height="26" width="88"></a></p>
++								<script type="text/javascript" language="javascript" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/a.html">
++				</script><div id="TwitterCounter"><a href="http://twittercounter.com/peteskomoroch?utm_source=referring%2Bsites&amp;utm_medium=organic%2Blinks&amp;utm_campaign=twittercounter%2Bbutton" title="Twitter Counter for @peteskomoroch" target="_blank"><img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/a.png" style="border: medium none;" alt="Peter Skomoroch has 9188 followers on Twitter" height="26" width="88"></a></div>
++							</li>							
++									
++			</ul>
++			<ul>
++				<li style="list-style: none">
++					<h2 class="sidebar-title">
++						Recent Projects
++					</h2>
++					<ul>
++ 						<li>
++							<a href="http://linkedin-on-rails.heroku.com/">linkedin_on_rails</a>
++						</li>
++						<li>
++							<a href="http://github.com/datawrangling/spatialanalytics">spatialanalytics</a>
++						</li>								
++						<li>
++							<a href="http://www.trendingtopics.org/">Trending Topics</a>
++						</li>
++						<li>
++							<a href="http://github.com/datawrangling/ec2cluster/tree/master">ec2cluster (REST Web Service for MPI on EC2)</a>
++						</li>
++						<li>
++							<a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2294&amp;ref=featured">ItemSimilarity with Elastic MapReduce</a>
++						</li>
++					</ul>
++					<h2>
++						Recent Posts
++					</h2>
++					<ul>
++						<li>
++							<a href="http://www.datawrangling.com/slides-thoughts-from-hadoop-world-nyc" title="View post Slides &amp;#038; Thoughts from Hadoop World NYC">Slides &amp; Thoughts from Hadoop World NYC</a>
++						</li>
++						<li>
++							<a href="http://www.datawrangling.com/how-flightcaster-squeezes-predictions-from-flight-data" title="View post How FlightCaster Squeezes Predictions from Flight Data">How FlightCaster Squeezes Predictions from Flight Data</a>
++						</li>
++						<li>
++							<a href="http://www.datawrangling.com/wikipedia-page-traffic-statistics-dataset" title="View post Wikipedia Page Traffic Statistics Dataset">Wikipedia Page Traffic Statistics Dataset</a>
++						</li>
++						<li>
++							<a href="http://www.datawrangling.com/quick-visualization-of-irs-search-queries" title="View post Quick Visualization of irs.gov Search Queries">Quick Visualization of irs.gov Search Queries</a>
++						</li>
++						<li>
++							<a href="http://www.datawrangling.com/amazon-elastic-mapreduce-a-web-service-api-for-hadoop" title="View post Amazon Elastic MapReduce: A Web Service API for Hadoop">Amazon Elastic MapReduce: A Web Service API for Hadoop</a>
++						</li>
++						<li>
++							<a href="http://www.datawrangling.com/updated-list-of-datasets-video-lectures" title="View post Updated List of Datasets &amp;#038; Video Lectures">Updated List of Datasets &amp; Video Lectures</a>
++						</li>
++					</ul>
++				</li>
++			</ul>
++			<h2>
++				Popular Posts
++			</h2>
++			<ul>
++				<li>
++					<a href="http://www.datawrangling.com/hidden-video-courses-in-math-science-and-engineering" rel="bookmark" title="April 9, 2008">Hidden Video Courses in Math, Science, and Engineering</a>
++				</li>
++				<li>
++					<a href="http://www.datawrangling.com/some-datasets-available-on-the-web" rel="bookmark" title="January 17, 2008">Some Datasets Available on the Web</a>
++				</li>
++				<li>
++					<a href="http://www.datawrangling.com/mpi-cluster-with-python-and-amazon-ec2-part-2-of-3" rel="bookmark" title="April 9, 2007">MPI Cluster with Python and Amazon EC2 (part 2 of 3)</a>
++				</li>
++				<li>
++					<a href="http://www.datawrangling.com/on-demand-mpi-cluster-with-python-and-ec2-part-1-of-3" rel="bookmark" title="March 17, 2007">On-Demand MPI Cluster with Python and EC2 (part 1 of 3)</a>
++				</li>
++				<li>
++					<a href="http://www.datawrangling.com/python-montage-code-for-displaying-arrays" rel="bookmark" title="February 29, 2008">Python Montage Code for Displaying Arrays</a>
++				</li>
++			</ul>
++			<ul id="linkslist">
++				<li id="linkcat-1">
++					<h2>
++						Blogroll
++					</h2>
++					<ul>
++						<li>
++							<a href="http://medriscoll.com/">Data Utopian (Mike Driscoll)</a>
++						</li>
++						<li>
++							<a href="http://www.informationdiet.com/blog">Information Diet (Clay Johnson)</a>
++						</li>			
++						<li>
++							<a href="http://radar.oreilly.com/tim/">Tim O'Reilly</a>
++						</li>									
++						<li>
++							<a href="http://fivethirtyeight.blogs.nytimes.com/">FiveThirtyEight (Nate Silver)</a>
++						</li>
++						<li>
++							<a href="http://blog.okcupid.com/">OkTrends (OkCupid Data blog)</a>
++						</li>
++						<li>
++							<a href="http://sna-projects.com/blog/">SNA Projects Blog (LinkedIn)</a>
++						</li>					
++							
++						<li>
++							<a href="http://www.hilarymason.com/">Hilary Mason (bit.ly)</a>
++						</li>												
++						<li>
++							<a href="http://mark.reid.name/iem/">Inductio Ex Machina (Mark Reid)</a>
++						</li>						
++						<li>
++							<a href="http://www.riccomini.name/">Chris Riccomini (LinkedIn)</a>
++						</li>	
++						<li>
++							<a href="http://www.igvita.com/blog/">igvita.com</a>
++						</li>
++						<li>
++							<a href="http://dumbotics.com/">Dumbotics (Last.FM)</a>
++						</li>
++						<li>
++							<a href="http://glinden.blogspot.com/">Geeking With Greg</a>
++						</li>						
++						<li>
++							<a href="http://www.juiceanalytics.com/writing/" rel="colleague">Juice Analytics</a>
++						</li>
++						<li>
++							<a href="http://blog.infochimps.org/">Infochimps Blog</a>
++						</li>					
++						<li>
++							<a href="http://www.cloudera.com/blog/">Cloudera Blog</a>
++						</li>
++						<li>
++							<a href="http://petewarden.typepad.com/">Pete Warden</a>
++						</li>		
++						<li>
++							<a href="http://www.cerebralmastication.com/">Cerebral Mastication (J.D. Long)</a>
++						</li>						
++						<li>
++							<a href="http://blog.doloreslabs.com/">Dolores Labs Blog</a>
++						</li>
++						<li>
++							<a href="http://anyall.org/blog/">Brendan O'Connor's Blog</a>
++						</li>
++						<li>
++							<a href="http://blog.kiwitobes.com/">Kiwitobes (Toby Segaran)</a>
++						</li>						
++						<li>
++							<a href="http://informationarbitrage.com/">Information Arbitrage</a>
++						</li>
++						<li>
++							<a href="http://www.iaventurepartners.com/category/blog">IA Ventures</a>
++						</li>	
++					</ul>
++				</li>
++			</ul>
++		</div><!-- end sidebar -->
++
++
++	<div class="site">
++		<div id="maincol"><!-- The main content column begins  -->
++			<div class="col">
++	  		<div id="post">
++  <h3 class="entrytitle">
++		<a href="http://www.datawrangling.com/mpi-cluster-with-python-and-amazon-ec2-part-2-of-3">MPI Cluster with Python and Amazon EC2 (part 2 of 3)</a>
++	</h3>
++	<div class="entrymeta">
++  <p class="meta">Posted by Peter Skomoroch on Apr 09, 2007 to cluster computing, python, mpi, amazon ec2, and cloud computing</p> </div>
++  <p>Today I posted a <a href="http://developer.amazonwebservices.com/connect/entry.jspa?categoryID=101&amp;externalID=705">public AMI</a>  which can be used to run a small <a href="http://www.clustermonkey.net//content/category/4/21/33/">beowulf cluster</a> on <a href="http://www.amazon.com/gp/browse.html?node=201590011">Amazon EC2</a> and do some parallel computations with C, Fortran, or <a href="http://www.python.org/">Python</a>.
++  If you prefer another language (Java, Ruby, etc) just install the 
++appropriate MPI library and rebundle the EC2 image.  The following set 
++of Python scripts automate the launch and configuration of an <a href="http://www-unix.mcs.anl.gov/mpi/mpich2/index.htm#docs">MPI</a> cluster on EC2 (currently limited to 20 nodes while EC2 is in beta):</p>
++
++<p><strong><em>Update (3-19-08): Code for running a cluster with large 
++or xlarge 64 bit EC2 instances is now hosted on google code.  The new 
++images include NFS, ganglia, IPython1, and other useful python packages.</em></strong></p>
++
++<p><a href="http://code.google.com/p/elasticwulf/">http://code.google.com/p/elasticwulf/</a></p>
++
++<p><strong><em>Update (7-24-07): I've made some important bug fixes to 
++the scripts to address issues mentioned in the comments.  See the README
++ file for details</em></strong></p>
++
++<ul>
++<li><a href="http://datawrangling.s3.amazonaws.com/AmazonEC2_MPI_scripts_1_5-tar.gz">AmazonEC2_MPI_scripts_1_5.tar.gz</a></li>
++</ul>
++
++
++<p>The file contains some quick scripts I threw together using the AWS 
++Python example code.  This is the approach I'm using to bootstrap an MPI
++ cluster until one of the major <a href="http://www.gdargaud.net/Hack/ClusterNotes.html">linux cluster distros</a> is ported to run on EC2.  Details on what is included in the public AMI were covered in <a href="http://www.datawrangling.com/on-demand-mpi-cluster-with-python-and-ec2-part-1-of-3.html">Part 1</a>
++ of the tutorial, Part 3 will cover cluster operation on EC2 in more 
++detail and show how to use Python to carry out some neat parallel 
++computations.</p>
++
++<p>The cluster launch process is pretty simple once you have an Amazon 
++EC2 account and keys, just download the Python scripts and you can be 
++running a compute cluster in a few minutes.  In a later post I will look
++ at cluster bandwidth and performance in detail.  If you have only an 
++occasional need for running large jobs,  $2/hour for a 20 node MPI 
++cluster on EC2 is not a bad deal considering the ~ $20K price for 
++building your own comparable system.</p>
++
++<!--more-->
++
++
++<p>Prerequisites:</p>
++
++<ol>
++<li>Get a valid <a href="http://www.amazon.com/b/ref=sc_fe_l_2/104-6132551-0326311?ie=UTF8&amp;node=201590011&amp;no=3435361&amp;me=A36L942TSJ2AJA">Amazon EC2 account</a></li>
++<li>Complete the most recent <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=992&amp;categoryID=87">"getting started guide"</a> tutorial on Amazon EC2 and create all needed web service accounts, authorizations, and keypairs</li>
++<li>Download and install the <a href="http://developer.amazonwebservices.com/connect/entry.jspa?categoryID=85&amp;externalID=552">Amazon EC2 Python library</a></li>
++<li>Download the Amazon <a href="http://datawrangling.s3.amazonaws.com/AmazonEC2_MPI_scripts_1_5-tar.gz">EC2 MPI cluster management scripts</a></li>
++</ol>
++
++
++<h2 id="LaunchingtheEC2nodes">Launching the EC2 nodes</h2>
++
++
++<p>First , unzip the cluster management scripts and modify the 
++configuration parameters in '''EC2config.py''',  substituting your own 
++EC2 keys and changing the cluster size if desired:</p>
++
++<div class="highlight"><pre><code class="python"><span class="c">#replace these with your AWS keys</span>
++<span class="n">AWS_ACCESS_KEY_ID</span> <span class="o">=</span> <span class="s">'YOUR_KEY_ID_HERE'</span>
++<span class="n">AWS_SECRET_ACCESS_KEY</span> <span class="o">=</span> <span class="s">'YOUR_KEY_HERE'</span>
++<span class="c">#change this to your keypair location (see the EC2 getting started guide tutorial on using ec2-add-keypair)</span>
++<span class="n">KEYNAME</span> <span class="o">=</span> <span class="s">"gsg-keypair"</span>
++<span class="n">KEY_LOCATION</span> <span class="o">=</span> <span class="s">"/Users/pskomoroch/id_rsa-gsg-keypair"</span>
++<span class="c"># remove these next two lines when you've updated your credentials.</span>
++<span class="k">print</span> <span class="s">"update </span><span class="si">%s</span><span class="s"> with your AWS credentials"</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
++<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
++
++<span class="n">MASTER_IMAGE_ID</span> <span class="o">=</span> <span class="s">"ami-3e836657"</span>
++<span class="n">IMAGE_ID</span> <span class="o">=</span> <span class="s">"ami-3e836657"</span>
++
++<span class="n">DEFAULT_CLUSTER_SIZE</span> <span class="o">=</span> <span class="mi">5</span>
++</code></pre>
++</div>
++
++
++<p>Launch the EC2 cluster by running the '''ec2-start_cluster.py''' script from your local machine:</p>
++
++<pre><code> 
++peter-skomorochs-computer:~/AmazonEC2_MPI_scripts pskomoroch$ ./ec2-start-cluster.py 
++
++image ami-3e836657
++master image ami-3e836657
++----- starting master -----
++RESERVATION r-275eb84e  027811143419    default
++INSTANCE    i-0ed33167  ami-3e836657            pending
++----- starting workers -----
++RESERVATION r-265eb84f  027811143419    default
++INSTANCE    i-01d33168  ami-3e836657            pending
++INSTANCE    i-00d33169  ami-3e836657            pending
++INSTANCE    i-03d3316a  ami-3e836657            pending
++INSTANCE    i-02d3316b  ami-3e836657            pending
++</code></pre>
++
++
++<p>Verify the EC2 nodes are running with '''./ec2-check-instances.py''':</p>
++
++<pre><code>
++peter-skomorochs-computer:~/AmazonEC2_MPI_scripts pskomoroch$ ./ec2-check-instances.py 
++----- listing instances -----
++
++RESERVATION     r-aec420c7      027811143419    default
++INSTANCE        i-ab41a6c2      ami-3e836657    domU-12-31-33-00-02-5A.usma1.compute.amazonaws.com      running
++INSTANCE        i-aa41a6c3      ami-3e836657    domU-12-31-33-00-01-E3.usma1.compute.amazonaws.com      running
++INSTANCE        i-ad41a6c4      ami-3e836657    domU-12-31-33-00-03-AA.usma1.compute.amazonaws.com      running
++INSTANCE        i-ac41a6c5      ami-3e836657    domU-12-31-33-00-04-19.usma1.compute.amazonaws.com      running
++INSTANCE        i-af41a6c6      ami-3e836657    domU-12-31-33-00-03-E3.usma1.compute.amazonaws.com      running
++</code></pre>
++
++
++
++
++<h2 id="ConfiguringMPI">Cluster Configuration and Booting MPI</h2>
++
++
++<p>Run '''ec2-mpi-config.py''' to configure MPI on the nodes, this will take a minute or two depending on the number of nodes.</p>
++
++<pre><code>
++peter-skomorochs-computer:~/AmazonEC2_MPI_scripts pskomoroch$ ./ec2-mpi-config.py 
++
++---- MPI Cluster Details ----
++Numer of nodes = 5
++Instance= i-ab41a6c2 hostname= domU-12-31-33-00-02-5A.usma1.compute.amazonaws.com state= running
++Instance= i-aa41a6c3 hostname= domU-12-31-33-00-01-E3.usma1.compute.amazonaws.com state= running
++Instance= i-ad41a6c4 hostname= domU-12-31-33-00-03-AA.usma1.compute.amazonaws.com state= running
++Instance= i-ac41a6c5 hostname= domU-12-31-33-00-04-19.usma1.compute.amazonaws.com state= running
++Instance= i-af41a6c6 hostname= domU-12-31-33-00-03-E3.usma1.compute.amazonaws.com state= running
++
++The master node is ec2-72-44-46-78.z-2.compute-1.amazonaws.com 
++
++
++...<snip> ...
++
++Configuration complete, ssh into the master node as lamuser and boot the cluster:
++$ ssh lamuser@ec2-72-44-46-78.z-2.compute-1.amazonaws.com 
++&gt; mpdboot -n 5 -f mpd.hosts 
++&gt; mpdtrace
++</snip></code></pre>
++
++
++<p>Login to the master node, boot the MPI cluster, and test the connectivity:</p>
++
++<pre><code>
++
++peter-skomorochs-computer:~/AmazonEC2_MPI_scripts pskomoroch$ ssh lamuser@ec2-72-44-46-78.z-2.compute-1.amazonaws.com 
++
++
++
++Sample Fedora Core 6 + MPICH2 + Numpy/PyMPI compute node image 
++
++http://www.datawrangling.com/on-demand-mpi-cluster-with-python-and-ec2-part-1-of-3
++
++---- Modified From Marcin's Cool Images: Cool Fedora Core 6 Base + Updates Image v1.0 ---
++
++see http://developer.amazonwebservices.com/connect/entry.jspa?externalID=554&amp;categoryID=101
++
++
++Like Marcin's image, standard disclaimer applies, use as you please...
++
++Amazon EC2 MPI Compute Node Image
++Copyright (c) 2006 DataWrangling. All rights reserved.
++
++Redistribution and use in source and binary forms, with or without
++modification, are permitted provided that the following conditions are
++met:
++
++    * Redistributions of source code must retain the above copyright
++       notice, this list of conditions and the following disclaimer.
++
++    * Redistributions in binary form must reproduce the above
++       copyright notice, this list of conditions and the following
++       disclaimer in the documentation and/or other materials provided
++       with the distribution.
++
++    * Neither the name of the DataWrangling nor the names of any
++       contributors may be used to endorse or promote products derived
++       from this software without specific prior written permission.
++
++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++[lamuser@domU-12-31-33-00-02-5A ~]$ 
++[lamuser@domU-12-31-33-00-02-5A ~]$ mpdboot -n 5 -f mpd.hosts 
++[lamuser@domU-12-31-33-00-02-5A ~]$ mpdtrace
++domU-12-31-33-00-02-5A
++domU-12-31-33-00-01-E3
++domU-12-31-33-00-03-E3
++domU-12-31-33-00-03-AA
++domU-12-31-33-00-04-19
++
++</code></pre>
++
++
++<p>The results of the mpdtrace command show we have an MPI cluster 
++running on 5 nodes. In the next section, we will verify that we can run 
++some basic MPI tasks.  For more detailed information on these mpi 
++commands (and MPI in general), see the <a href="http://www-unix.mcs.anl.gov/mpi/mpich2/index.htm#docs">MPICH2 documentation</a>.</p>
++
++<h2 id="TestingtheMPICluster">Testing the MPI Cluster</h2>
++
++
++<p>Next we execute a sample C program bundled with MPICH2 which estimates pi using the cluster:</p>
++
++<pre><code>
++[lamuser@domU-12-31-33-00-02-5A ~]$  mpiexec -n 5 /usr/local/src/mpich2-1.0.5/examples/cpi
++Process 0 of 5 is on domU-12-31-33-00-02-5A
++Process 1 of 5 is on domU-12-31-33-00-01-E3
++Process 2 of 5 is on domU-12-31-33-00-03-E3
++Process 3 of 5 is on domU-12-31-33-00-03-AA
++Process 4 of 5 is on domU-12-31-33-00-04-19
++pi is approximately 3.1415926544231230, Error is 0.0000000008333298
++wall clock time = 0.007539
++
++</code></pre>
++
++
++<p>Test the message travel time for the ring of nodes you just created:</p>
++
++<pre><code>
++[lamuser@domU-12-31-33-00-02-5A ~]$ mpdringtest 100
++time for 100 loops = 0.14577794075 seconds
++
++</code></pre>
++
++
++<p>Verify that the cluster can run a multiprocess job:</p>
++
++<pre><code>
++[lamuser@domU-12-31-33-00-02-5A ~]$ mpiexec -l -n 5 hostname
++3: domU-12-31-33-00-03-AA
++0: domU-12-31-33-00-02-5A
++1: domU-12-31-33-00-01-E3
++4: domU-12-31-33-00-04-19
++2: domU-12-31-33-00-03-E3
++
++</code></pre>
++
++
++
++
++<h2 id="TestingpyMPI">Testing PyMPI</h2>
++
++
++<p>Lets verify that the <a href="http://pympi.sourceforge.net/">PyMPI</a> install is working with our running cluster of 5 nodes. Execute the following on the master node:</p>
++
++<pre><code>
++[lamuser@domU-12-31-33-00-02-5A ~]$ mpirun -np 5 pyMPI /usr/local/src/pyMPI-2.4b2/examples/fractal.py
++Starting computation (groan)
++
++process 1 done with computation!!
++process 3 done with computation!!
++process 4 done with computation!!
++process 2 done with computation!!
++process 0 done with computation!!
++Header length is  54
++BMP size is  (400, 400)
++Data length is  480000
++[lamuser@domU-12-31-33-00-02-5A ~]$ ls
++hosts  id_rsa.pub  mpd.hosts  output.bmp
++
++</code></pre>
++
++
++<p>This produced the following fractal image (output.bmp):</p>
++
++<p><img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/output.dms" alt="output.bmp"></p>
++
++<p>We will show some more examples using PyMPI in the next post.</p>
++
++<h2 id="ChangingtheClusterSize">Changing the Cluster Size</h2>
++
++
++<p>If we want to modify the number of nodes in the cluster we first need to kill the mpi cluster from the master node as follows:</p>
++
++<pre><code>
++[lamuser@domU-12-31-33-00-02-5A ~]$ mpdallexit
++[lamuser@domU-12-31-33-00-02-5A ~]$ mpdcleanup
++</code></pre>
++
++
++<p>Once this is done, you can start additional instances of the public 
++AMI from your local machine, then re-run the ec2-mpi-config.py script 
++and reboot the cluster.</p>
++
++<h2 id="ClusterShutdown">Cluster Shutdown</h2>
++
++
++<p>Run '''ec2-stop-cluster.py''' to stop all EC2 MPI nodes.  If you just want to stop the slave nodes, run ec2-stop-slaves.py</p>
++
++<pre><code>
++
++peter-skomorochs-computer:~/AmazonEC2_MPI_scripts pskomoroch$ ./ec2-stop-cluster.py
++This will stop all your EC2 MPI images, are you sure (yes/no)? yes
++----- listing instances -----
++RESERVATION     r-aec420c7      027811143419    default
++INSTANCE        i-ab41a6c2      ami-3e836657    domU-12-31-33-00-02-5A.usma1.compute.amazonaws.com      running
++INSTANCE        i-aa41a6c3      ami-3e836657    domU-12-31-33-00-01-E3.usma1.compute.amazonaws.com      running
++INSTANCE        i-ad41a6c4      ami-3e836657    domU-12-31-33-00-03-AA.usma1.compute.amazonaws.com      running
++INSTANCE        i-ac41a6c5      ami-3e836657    domU-12-31-33-00-04-19.usma1.compute.amazonaws.com      running
++INSTANCE        i-af41a6c6      ami-3e836657    domU-12-31-33-00-03-E3.usma1.compute.amazonaws.com      running
++
++---- Stopping instance Id's ----
++Stoping Instance Id = i-ab41a6c2 
++Stoping Instance Id = i-aa41a6c3 
++Stoping Instance Id = i-ad41a6c4 
++Stoping Instance Id = i-ac41a6c5 
++Stoping Instance Id = i-af41a6c6 
++
++Waiting for shutdown ....
++----- listing new state of instances -----
++RESERVATION     r-aec420c7      027811143419    default
++INSTANCE        i-ab41a6c2      ami-3e836657    domU-12-31-33-00-02-5A.usma1.compute.amazonaws.com      shutting-down
++INSTANCE        i-aa41a6c3      ami-3e836657    domU-12-31-33-00-01-E3.usma1.compute.amazonaws.com      shutting-down
++INSTANCE        i-ad41a6c4      ami-3e836657    domU-12-31-33-00-03-AA.usma1.compute.amazonaws.com      shutting-down
++INSTANCE        i-ac41a6c5      ami-3e836657    domU-12-31-33-00-04-19.usma1.compute.amazonaws.com      shutting-down
++INSTANCE        i-af41a6c6      ami-3e836657    domU-12-31-33-00-03-E3.usma1.compute.amazonaws.com      shutting-down
++
++</code></pre>
++
++
++</div>
++
++<div id="related">
++  <h2>Related Posts</h2>
++  <ul class="posts">
++    
++      <li><span>17 Mar 2007</span> » <a href="http://www.datawrangling.com/on-demand-mpi-cluster-with-python-and-ec2-part-1-of-3">On-Demand MPI Cluster with Python and EC2 (part 1 of 3)</a></li>
++    
++      <li><span>24 Aug 2009</span> » <a href="http://www.datawrangling.com/how-flightcaster-squeezes-predictions-from-flight-data">How FlightCaster Squeezes Predictions from Flight Data</a></li>
++    
++      <li><span>17 Jan 2008</span> » <a href="http://www.datawrangling.com/some-datasets-available-on-the-web">Some Datasets Available on the Web</a></li>
++    
++  </ul>
++</div>
++
++<!-- Disqus Comments -->
++<div id="disqus_thread"><div style="display: none;" id="dsq-content-stub"><img alt="DISQUS" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAARCAYAAAH4YIFjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABwdJREFUeNpi/P//PwMhwAIiGBkZGeK6V8JVh9rqdfrc0ixnEDb+wPD2rAAjMSYBBBBRisDWwKxCthIE/q8Q+A8yhCiTAAIIrCi+ZxVMZSAQr19UGs4IMxWd/X8Rw3/GOKDhW43fgzwF1hX7n5EJ2dSp2QFNUKcZwJ31/78CkvPBGkGGMXidSUTWCxBAxAUAEQAcJzCvIXsDBPwsNBU2nbj+AMpdsFA8PAHsLZj3QC5D9hrIAEtN+RMwAzRkxcB0iK3eQ6iQIRAnoMTE//8CyHwmWHQdv/7QAiZ44/ErMP383acsqNB5iMnPlsFdsUZ6IU3CCCCA4AYBw8kBJgj06gGkmHJAFgPyQV4ExeQEoNgHJHUBQMoAWRzoerBeYHgeQOJ/APIvQPkNUP4EuIdADBAGBRMQOABxQcakdSipHZldNGvL2zWHL8kD1d0HieVN33QYqnc/EAfULNwJVw8KTniQwvjAdPz/SEwKmL1KfC5QjwEQr4e5AyVdA3P4ASCe8O3nb1whmtib6r3IXlfpATBEFbpWH9ygJSdmBtXrOHPbyZWPXn1AqOZRwDSBS+YHo82SOQwiZnYMoS+EGC42nGdYzBiAnKpgGAbeA3ECkjwYQNnzH758///6o5cgofVIagy+/vgFF//y/ecHJLn1/18AA+/teZBcPZL4eSTxBJg7AAKIaomRmpkeV2IG5UcDpMSsAM2zF4BiG9DUFaCLQxPwBWCC/QBkg/QqoCVuEN4ASuDIaWc/DIMSItBxH0GCrkaqCVBxWO4BJWBQcK/PmrL+I1S8H0i9h4mjFfX7GTRyIdEuHzIfZtb/Zdw3oGyQnvP/d9pNgRc+MLCwJMxxWk7AI6Ar+YCWVSLLyYkJzIYlZqC6RGBhbg/lFwDlQHoDgfgALLfhjY8/X9XhpWPs/wWM7odyMBwDylU8nOzyILYIH3cZslxBgM0cKHM+MOTAGCZnri7XCdS7ASgGLsc/fPlug9cxlrO/wUvYxYwJwCgLwHAMcrVlqCJ9BVlchJ+7EhRyQPwAyGaAFnhgsOPMzUhQroLVAU76yp/gGp/vtQbTr45pwMWOp1oDQ6QQiGEi6+EJGLmah0YJQ6CVtu3ivecKYHIpE9b8BPqcDSnawHSSu8m3eTvPyAHlzsPkDl25/wXMYAOq+XgtBFwIfn/GwCAOSq8HYCGCsNh8+hvksgYZIJchDkjljAKoHAKVJ6ByBbnmA5XESOL1oFIZSc9/cJkC1IukPuH/z/cw8fswdwyqcgYgwAaVYwYbQEnDSI1LbGABEDcCC1lYS4yhfO42n+fvPm9GKsAZkfJDA7RcwwYmQM1CbpUUADU3AB3AjxJ7wFwAFGsAqp2A0mBDahww8Gv4Mvrf2AKXWyMzgeHbk3wwh5X/DGPkR1OoHlCmn49cGCABkL8SgZn8ANbAQQaV4ZBK6yGwgbDr3G2GNx+/gkqShMTe1V///vsnA/KYjoKECjBwMPQCW0EngOrNQWxbHQWGFA8zBlAj5eztpwwbjl9lyPG1DFOUEAIFDqxJB6ksoC1ZN2NVsDm7zt4GNUhBgdUPrXwckWtQOJB0VQE2XRF8UQt9hodrIGw+FaDcWVjAwAshhsD7kAbPO2Dr78ZEBoZfHxQYHNYbwEogvIGjKSfOiNysBpaEL/acv8MODBhuUX7u00BhVVx6DZWlxHcDAxQEDl95AMZQAGqHLlSSFIanAnZWll0/f/8Bs2OcDB+5GavJVyGZtevsrYdL9p2XQ6rZGcnKI54nZRj2uoMCAVr4K8JkQAKgJsdEYN12AbmYYSGqYGJk/NC8bO91WHKUFRXgwace6ElDIF4PjHWHc3eeMZy98xSU8mB1mwE0FSQCU8ECZiZGVpi+yw9eLIfVlUyMjIf+/f/Pu/bIlTtIdSX5hauo+RagxxMZfr2fwHB3IT/Dy4MMDI/BzTABaP2aAGzmgPpN4gQDB1pmgIA+EAfcfvoGXl/mB1hXFuBxCLDs6oc26kBJZiIoxShLCqs9e/tp+vdfv8ENB08Tdf9FwHKsMtxxTfvK/SGgbHfx3vNyoL2g7DjR30r74vqjV2yA6lXgbnI2WtoH4yhEfGF4sAISSTcm9wOzDcidoE6lPTBLwRuyDMoJ5+DZagnLJIb/f3mh5edGcKoRs+5neHUUUgZxiIrhrK2wFchc7KwMmsByANjiAZUfoGzhCEpJIDlQowOYffqRC2RQS+f1x68HNx6/ygcqY9A7RMZAc5LcTS/zcLLZwcwB1evAzs/8pfsvwDu9yOplgRECzF4M8a7Gryw05NRB+sDtiC/3HjKcKeaDpgAEADVmNIDlsX4DqFPmCOvvMNxdkAAuX95dQFUPKnv06kEBmQgNOLpV5QbQpAsrcz4QUC+AVJsgqxcgoNcBqQy5QIIdONUDALcn6c0dtMJ9AAAAAElFTkSuQmCC" height="17" width="71"><img alt="..." src="data:image/gif;base64,R0lGODlhEAALAPQAAP///z2LqeLt8dvp7u7090GNqz2LqV+fuJ/F1IW2ycrf51aatHWswaXJ14i4ys3h6FmctUCMqniuw+vz9eHs8fb5+meku+Tu8vT4+cfd5bbT3tbm7PH2+AAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA" style="margin: 0pt 0pt 3px 5px;" height="11" width="16"></div><div class="clearfix" style="display: block;" id="dsq-content">      <div id="dsq-global-toolbar" class="dsq-clearfix">        <ul class="dsq-global-toolbar-right dsq-clearfix">                            <li class="dsq-community-box">                <a href="#" class="dsq-toolbar-item dsq-tt" onclick="DISQUS.dtpl.actions.fire('community.show'); return false" title="Expand Community Box"><span class="dsq-toolbar-icon"></span></a>            </li>                            <li class="dsq-global-toolbar-dropdown-container">                    <div id="dsq-toolbar-dropdown">    <a href="#" class="dsq-toolbar-logo dsq-toolbar-item dsq-clearfix"><span class="dsq-toolbar-icon">Disqus</span></a>    <div id="dsq-toolbar-dropdown-wrap" style="display: none">      <ul class="dsq-clearfix">                    <li class="dsq-login-link"><a href="#" onclick="DISQUS.dtpl.actions.fire('auth.login'); return false"><span class="dsq-toolbar-icon"></span><span class="dsq-toolbar-label">Login</span></a></li>                    <li class="dsq-about-link"><a href="http://disqus.com/" target="_blank"><span class="dsq-toolbar-icon"></span><span class="dsq-toolbar-label">About Disqus</span></a></li>      </ul>    </div>  </div>            </li>        </ul>                <ul class="dsq-global-toolbar-left dsq-clearfix">            <li class="dsq-like-thread">                <a href="#" id="dsq-like-thread-button" class="dsq-toolbar-item dsq-clearfix  dsq-tt" onclick="DISQUS.dtpl.actions.fire('thread.vote', 1); return false;" title="I like this page">                    <span class="dsq-toolbar-icon"></span>                    <span class="dsq-toolbar-label">Like</span>                </a>            </li>            <li class="dsq-dislike-thread">                <a href="#" id="dsq-dislike-thread-button" class="dsq-toolbar-item dsq-clearfix  dsq-tt" onclick="DISQUS.dtpl.actions.fire('thread.vote', -1); return false" title="I don't like this page">                    <span class="dsq-toolbar-icon">Dislike</span>                </a>            </li>            <li class="dsq-like-panel">                <ul class="dsq-like-faces dsq-clearfix">                        <li class="dsq-like-activity">    </li>                </ul>            </li>        </ul>            </div>    <div id="dsq-like-tooltip">      <div id="dsq-share-step-1" class="dsq-share-step">        <h3>Glad you liked it. Would you like to share?</h3>        <p class="dsq-tooltip-checkbox"><input id="dsq-share-thread-facebook" value="Facebook" type="checkbox"><label for="dsq-share-thread-facebook"><span class="dsq-facebook">Facebook</span></label></p>        <p class="dsq-tooltip-checkbox"><input id="dsq-share-thread-twitter" value="Twitter" type="checkbox"><label for="dsq-share-thread-twitter"><span class="dsq-twitter">Twitter</span></label></p>        <ul id="dsq-tooltip-actions">                        <li><a href="#" onclick="DISQUS.dtpl.actions.fire('thread.share.send'); return false" class="dsq-primary-action">Share</a></li>                    <li><a href="#" onclick="DISQUS.dtpl.actions.fire('thread.share.cancel'); return false" class="dsq-secondary-action">No thanks</a></li>        </ul>      </div>      <div id="dsq-share-step-2" class="dsq-share-step" style="display:none !important">        <p>Sharing this page …</p>      </div>      <div id="dsq-share-step-3" class="dsq-share-step" style="display:none !important">        <p>Thanks! <a href="#" class="dsq-tooltip-decline" onclick="DISQUS.dtpl.actions.fire('thread.share.cancel'); return false">Close</a></p>      </div>    </div>                                <div class="dsq-reply " id="dsq-reply">          <div id="dsq-account-dropdown">                  <a href="#" onclick="DISQUS.dtpl.actions.fire('auth.login'); return false;">Login</a>              </div>      <h3>Add New Comment</h3>        <div class="dsq-avatar">              <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png">          </div>    <div class="dsq-textarea dsq-textarea-reply">      <div class="dsq-textarea-background">        <div style="height: auto;" class="dsq-textarea-wrapper">          <!-- filled dynamically -->        <iframe style="height: 58px;" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/reply.html" id="easyXDM_DISQUS_net_default5938_provider" name="easyXDM_DISQUS_net_default5938_provider" frameborder="0" scrolling="no"></iframe></div>                  <div id="dsq-media-preview" class="dsq-media-preview" style="display:none">          </div>                <div class="dsq-post-tools">          <ul>            <li class="dsq-post-as">                                <button type="button" class="dsq-button" onclick="DISQUS.dtpl.actions.fire('comments.validate', null, this);">                    Post as …                  </button>                          </li>                          <li class="dsq-attach-media">                <div class="dsq-attach-media-container">                  <span>Image</span>                  <!-- filled dynamically -->                <iframe src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/upload.html" id="easyXDM_DISQUS_net_default5939_provider" name="easyXDM_DISQUS_net_default5939_provider" frameborder="0" scrolling="no"></iframe></div>              </li>                        <li class="dsq-share-on dsq-clearfix">                            </li>          </ul>        </div>      </div>    </div>  </div>                              <div id="dsq-sort-by">    <select id="dsq-sort-select" onchange="DISQUS.dtpl.actions.fire('thread.sort', this.value);">              <option value="hot" selected="selected">          Sort by popular now        </option>              <option value="best">          Sort by best rating        </option>              <option value="newest">          Sort by newest first        </option>              <option value="oldest">          Sort by oldest first        </option>          </select>  </div>      <h3>            Showing <span id="dsq-num-posts">69</span> comments        </h3>        <ul id="dsq-comments">            <li id="comment-67194196">  </li><li id="dsq-comment-67194196" data-dsq-comment-id="67194196" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Aarthi 8288's profile">      <a href="http://disqus.com/guest/f0576509b100bb26bef551d1d0b491f7/" onclick="DISQUS.dtpl.actions.fire('profile.show', 67194196, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-67194196" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Aarthi 8288</span>                <span class="dsq-collapsed-count">                      3 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 67194196); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 67194196); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-67194196">                <div class="dsq-comment-text" id="dsq-comment-text-67194196">        <p>Hi,</p>
++
++<p>I was trying to launch a cluster using the given scripts. I got the following error :</p>
++
++<p># ./<a href="http://ec2-start-cluster.py/" rel="nofollow">ec2-start-cluster.py</a> <br>Traceback (most recent call last):<br>  File "./<a href="http://ec2-start-cluster.py/" rel="nofollow">ec2-start-cluster.py</a>", line 23, in &lt;module&gt;<br>    import EC2<br>ImportError: No module named EC2</p>
++
++<p>Can anyone help me out ?<br>&lt;/module&gt;</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-67194196"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-67194196">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,67194196); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',67194196, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-67194196" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 67194196);" title="Link to comment by Aarthi 8288">          2 years ago      </a></li>            <li>          <a href="#" id="dsq-comment-like-count-67194196" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 67194196); return false">1          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 67194196, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-67194196"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-67194196"></li>            <li id="comment-68258537">  </li><li id="dsq-comment-68258537" data-dsq-comment-id="68258537" class="dsq-comment dsq-clearfix                        " style="margin-left:46px;">    <div class="dsq-avatar dsq-tt" title="Expand Adeel Jan's profile">      <a href="http://disqus.com/guest/755e68a77d0b700b274027f86017d580/" onclick="DISQUS.dtpl.actions.fire('profile.show', 68258537, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-68258537" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Adeel Jan</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 68258537); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 68258537); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-68258537">                <div class="dsq-comment-text" id="dsq-comment-text-68258537">        <p>I think you need to get python library :)</p>
++
++<p>Adeel Jan.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-68258537"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-68258537">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,68258537); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',68258537, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-68258537" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 68258537);" title="Link to comment by Adeel Jan">          2 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 67194196); return false" href="#comment-67194196" title="Jump to comment">            in reply to Aarthi 8288          </a>        </li>            <li>          <a href="#" id="dsq-comment-like-count-68258537" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 68258537); return false">2          Likes      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 68258537, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-68258537"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-68258537"></li>            <li id="comment-316963998">  </li><li id="dsq-comment-316963998" data-dsq-comment-id="316963998" class="dsq-comment dsq-clearfix                        " style="margin-left:46px;">    <div class="dsq-avatar dsq-tt" title="Expand Lukearron's profile">      <a href="http://disqus.com/guest/b0ace4c8ac6841adf9bbb2c6a911f85a/" onclick="DISQUS.dtpl.actions.fire('profile.show', 316963998, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-316963998" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Lukearron</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 316963998); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 316963998); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-316963998">                <div class="dsq-comment-text" id="dsq-comment-text-316963998">        <p>Did
++ anyone solve this problem? &nbsp;I had the same problem, and I 
++downloaded and unpacked the libraries, but perhaps the python library 
++needs to be _placed_ somewhere?</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-316963998"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-316963998">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,316963998); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',316963998, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-316963998" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 316963998);" title="Link to comment by Lukearron">          1 year ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 67194196); return false" href="#comment-67194196" title="Jump to comment">            in reply to Aarthi 8288          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-316963998" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 316963998); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 316963998, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-316963998"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-316963998"></li>            <li id="comment-250815538">  </li><li id="dsq-comment-250815538" data-dsq-comment-id="250815538" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Easwar's profile">      <a href="http://disqus.com/guest/6a22b4cb802cd0fc3459843d5531b09c/" onclick="DISQUS.dtpl.actions.fire('profile.show', 250815538, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-250815538" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Easwar</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 250815538); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 250815538); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-250815538">                <div class="dsq-comment-text" id="dsq-comment-text-250815538">        <p>Dear Sir,</p>
++
++<p>&nbsp; I am trying to use MPI for <br>running Data parallel 
++applications. I read this post and on following up, I have few queries. 
++Would be great, if I can get answers to them. </p>
++
++<p>a) As of now, I am choosing AMI using the browser interface of 
++Amazon. You have uploaded two AMI's one for master (ami-e813f681) and 
++another for slave (ami-eb13f682).<br> When I launch an instance, I can only choose one. Which one should I <br>choose ? (Or how should I choose both, in case I need to)&nbsp; ? Do these <br>AMI's has OPEMPI implementation ?</p>
++
++<p>b) Secondly, if I launch multiple instances of a Large CPU (say 3 <br>instances),
++ I would be get many nodes (say m nodes per one instance, hence i would 
++have m*3 nodes). Can I communicate between nodes <br>of different instances just as we normally do in MPI ?</p>
++
++<p>c) Are you aware any MPI image with ubuntu ?</p>
++
++<p>d) I am using browser, since I have to connect through proxy. How/Where <br>do set proxy connections, if I need to start cluster using your python <br>scripts ?</p>
++
++<p>Easwar</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-250815538"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-250815538">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,250815538); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',250815538, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-250815538" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 250815538);" title="Link to comment by Easwar">          1 year ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-250815538" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 250815538); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 250815538, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-250815538"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-250815538"></li>            <li id="comment-70898888">  </li><li id="dsq-comment-70898888" data-dsq-comment-id="70898888" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Johnliu's profile">      <a href="http://disqus.com/guest/8b2c7a6f55f9dae1487bea3c5d94758f/" onclick="DISQUS.dtpl.actions.fire('profile.show', 70898888, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-70898888" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Johnliu</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 70898888); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 70898888); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-70898888">                <div class="dsq-comment-text" id="dsq-comment-text-70898888">        <p>Hi,</p>
++
++<p>Does anyone have this running under cygwin in windows?</p>
++
++<p>If so, can you please post your code for <a href="http://ec2-mpi-config.py/?" rel="nofollow">ec2-mpi-config.py?</a> I tried using the current file but get lots of errors.</p>
++
++<p>Thanks,<br>John</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-70898888"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-70898888">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,70898888); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',70898888, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-70898888" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 70898888);" title="Link to comment by Johnliu">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-70898888" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 70898888); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 70898888, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-70898888"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-70898888"></li>            <li id="comment-69997433">  </li><li id="dsq-comment-69997433" data-dsq-comment-id="69997433" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Supriyamunshaw's profile">      <a href="http://disqus.com/guest/68f6f02fdffed7fa531101d399bda3d6/" onclick="DISQUS.dtpl.actions.fire('profile.show', 69997433, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-69997433" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Supriyamunshaw</span>                <span class="dsq-collapsed-count">                      2 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 69997433); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 69997433); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-69997433">                <div class="dsq-comment-text" id="dsq-comment-text-69997433">        <p>I have sucessfully connected to 5 nodes but am having trouble with the <a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a> script. When I run it, I repeatedly get the following:</p>
++
++<p>---- MPI Cluster Details ----<br>Numer of nodes = 5<br>Instance= i-8d2949e7 external_name = <a href="http://ec2-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">ec2-184-72-183-113.compute-1.a...</a> hostname= ip-10-212-239-33.ec2.internal state= <br>Instance= i-832949e9 external_name = <a href="http://ec2-174-129-138-43.compute-1.amazonaws.com/" rel="nofollow">ec2-174-129-138-43.compute-1.a...</a> hostname= domU-12-31-39-10-6C-13.compute-1.internal state= <br>Instance= i-812949eb external_name = <a href="http://ec2-184-72-141-241.compute-1.amazonaws.com/" rel="nofollow">ec2-184-72-141-241.compute-1.a...</a> hostname= domU-12-31-39-0B-00-F8.compute-1.internal state= <br>Instance= i-872949ed external_name = <a href="http://ec2-174-129-131-171.compute-1.amazonaws.com/" rel="nofollow">ec2-174-129-131-171.compute-1....</a> hostname= domU-12-31-39-09-C4-24.compute-1.internal state= <br>Instance= i-852949ef external_name = <a href="http://ec2-174-129-61-151.compute-1.amazonaws.com/" rel="nofollow">ec2-174-129-61-151.compute-1.a...</a> hostname= domU-12-31-39-0C-D8-57.compute-1.internal state= <br>5</p>
++
++<p>The master node is <a href="http://ec2-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">ec2-184-72-183-113.compute-1.a...</a></p>
++
++<p>Writing out mpd.hosts file</p>
++
++<p>scp -i id_rsa-gsg-keypair -o "StrictHostKeyChecking no" id_rsa-gsg-keypair root@ec2<a href="http://-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">-184-72-183-113.compute-1.amaz...</a>:~/.ssh/id_rsa-gsg-keypair </p>
++
++<p>ssh: connect to host <a href="http://ec2-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">ec2-184-72-183-113.compute-1.a...</a> port 22: Connection timed out<br>lost connection</p>
++
++<p>ssh -o "StrictHostKeyChecking no" root@ec2<a href="http://-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">-184-72-183-113.compute-1.amaz...</a> "touch .ssh/authorized_keys"  </p>
++
++<p>ssh: connect to host <a href="http://ec2-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">ec2-184-72-183-113.compute-1.a...</a> port 22: Connection timed out</p>
++
++<p>ssh -o "StrictHostKeyChecking no" root@ec2<a href="http://-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">-184-72-183-113.compute-1.amaz...</a> "cp -r .ssh /home/lamuser/"  </p>
++
++<p>It seems I'm having a connection problem. Does anyone what I can do about this?</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-69997433"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-69997433">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,69997433); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',69997433, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-69997433" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 69997433);" title="Link to comment by Supriyamunshaw">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-69997433" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 69997433); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 69997433, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-69997433"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-69997433"></li>            <li id="comment-70014559">  </li><li id="dsq-comment-70014559" data-dsq-comment-id="70014559" class="dsq-comment dsq-clearfix                        " style="margin-left:46px;">    <div class="dsq-avatar dsq-tt" title="Expand Supriyamunshaw's profile">      <a href="http://disqus.com/guest/68f6f02fdffed7fa531101d399bda3d6/" onclick="DISQUS.dtpl.actions.fire('profile.show', 70014559, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-70014559" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Supriyamunshaw</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 70014559); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 70014559); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-70014559">                <div class="dsq-comment-text" id="dsq-comment-text-70014559">        <p>ok, i figured it out. the connection was being made through my default security group where port 22 was not open.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-70014559"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-70014559">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,70014559); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',70014559, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-70014559" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 70014559);" title="Link to comment by Supriyamunshaw">          2 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 69997433); return false" href="#comment-69997433" title="Jump to comment">            in reply to Supriyamunshaw          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-70014559" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 70014559); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 70014559, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-70014559"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-70014559"></li>            <li id="comment-69464830">  </li><li id="dsq-comment-69464830" data-dsq-comment-id="69464830" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Henrywang41's profile">      <a href="http://disqus.com/guest/a751cbf7143645aaf9032d85af7a0208/" onclick="DISQUS.dtpl.actions.fire('profile.show', 69464830, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-69464830" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Henrywang41</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 69464830); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 69464830); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-69464830">                <div class="dsq-comment-text" id="dsq-comment-text-69464830">        <p>Can someone please help? <a href="http://mc2-mpi-config.py/" rel="nofollow">mc2-mpi-config.py</a> is giving the following error:</p>
++
++<p>---- MPI Cluster Details ----<br>Numer of nodes = 2<br>Instance= i-bf90f5d5 external_name = <a href="http://ec2-184-73-36-216.compute-1.amazonaws.com/" rel="nofollow">ec2-184-73-36-216.compute-1.am...</a> hostname= ip-10-242-1<br>18-239.ec2.internal state= running<br>Instance= i-bd90f5d7 external_name = <a href="http://ec2-174-129-77-216.compute-1.amazonaws.com/" rel="nofollow">ec2-174-129-77-216.compute-1.a...</a> hostname= ip-10-242-<br>117-139.ec2.internal state= running</p>
++
++<p>The master node is <a href="http://ec2-184-73-36-216.compute-1.amazonaws.com/" rel="nofollow">ec2-184-73-36-216.compute-1.am...</a></p>
++
++<p>Writing out mpd.hosts file<br>Traceback (most recent call last):<br>  File "<a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a>", line 210, in &lt;module&gt;<br>    sys.exit(main())<br>  File "<a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a>", line 65, in main<br>    configure()<br>  File "<a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a>", line 151, in configure<br>    rsakeys = open(homedir + "/.ssh/id_rsa", 'r').read()<br>IOError: [Errno 2] No such file or directory: 'C:\\Documents and Settings\\Yunzhi Ma/.ssh/id_rsa'</p>
++
++<p>Could this possibly be due to anything about chunk and parsed_response? I printed out parsedresponse:</p>
++
++<p> [['RESERVATION', 'r-30733b5b', '219669225938', 'default'], ['INSTANCE', 'i-bf90f5d5', 'ami-e813f681'<br>, '<a href="http://ec2-184-73-36-216.compute-1.amazonaws.com/" rel="nofollow">ec2-184-73-36-216.compute-1.am...</a>', 'ip-10-242-118-239.ec2.internal', 'running'], ['RESER<br>VATION', 'r-36733b5d', '219669225938', 'default'], ['INSTANCE', 'i-bd90f5d7', 'ami-eb13f682', 'ec2-1<br><a href="http://74-129-77-216.compute-1.amazonaws.com/" rel="nofollow">74-129-77-216.compute-1.amazon...</a>', 'ip-10-242-117-139.ec2.internal', 'running']]</p>
++
++<p>Thanks so much,<br>Henry&lt;/module&gt;</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-69464830"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-69464830">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,69464830); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',69464830, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-69464830" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 69464830);" title="Link to comment by Henrywang41">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-69464830" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 69464830); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 69464830, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-69464830"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-69464830"></li>            <li id="comment-69256901">  </li><li id="dsq-comment-69256901" data-dsq-comment-id="69256901" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Henrywang41's profile">      <a href="http://disqus.com/guest/a751cbf7143645aaf9032d85af7a0208/" onclick="DISQUS.dtpl.actions.fire('profile.show', 69256901, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-69256901" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Henrywang41</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 69256901); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 69256901); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-69256901">                <div class="dsq-comment-text" id="dsq-comment-text-69256901">        <p>Hi,</p>
++
++<p>Amazon just recently (last month) released a cloud computing instance (<a href="http://developer.amazonwebservices.com/connect/ann.jspa?annID=718%29" rel="nofollow">http://developer.amazonwebserv...</a></p>
++
++<p>Does the code and what you describe here work for this new released 
++instance for HPC? (It's CentOS HVM AMI, ami-7ea24a17 under U.S. East)</p>
++
++<p>Thanks,</p>
++
++<p>Henry</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-69256901"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-69256901">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,69256901); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',69256901, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-69256901" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 69256901);" title="Link to comment by Henrywang41">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-69256901" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 69256901); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 69256901, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-69256901"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-69256901"></li>            <li id="comment-69254750">  </li><li id="dsq-comment-69254750" data-dsq-comment-id="69254750" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Henrywang41's profile">      <a href="http://disqus.com/guest/a751cbf7143645aaf9032d85af7a0208/" onclick="DISQUS.dtpl.actions.fire('profile.show', 69254750, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-69254750" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Henrywang41</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 69254750); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 69254750); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-69254750">                <div class="dsq-comment-text" id="dsq-comment-text-69254750">        <p>Hi,</p>
++
++<p>Is Elasticwulf and MPI essentially the same thing? I'm trying to run 
++some high performance computing using an Amazon EC2 cluster.</p>
++
++<p>Also, is boto necessary to set up a cluster on amazon EC2? What's the difference between boto and Elasticwulf?</p>
++
++<p>Thanks,</p>
++
++<p>Henry</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-69254750"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-69254750">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,69254750); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',69254750, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-69254750" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 69254750);" title="Link to comment by Henrywang41">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-69254750" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 69254750); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 69254750, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-69254750"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-69254750"></li>            <li id="comment-69243905">  </li><li id="dsq-comment-69243905" data-dsq-comment-id="69243905" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Henrywang41's profile">      <a href="http://disqus.com/guest/a751cbf7143645aaf9032d85af7a0208/" onclick="DISQUS.dtpl.actions.fire('profile.show', 69243905, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-69243905" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Henrywang41</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 69243905); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 69243905); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-69243905">                <div class="dsq-comment-text" id="dsq-comment-text-69243905">        <p>Hi,</p>
++
++<p>What exactly is the difference between Elasticwulf and MPI? Are they 
++the same thing? I'm trying to launch a cluster for HPC, which one is 
++more suitable?</p>
++
++<p>Also, is boto necessary too for launching a cluster?</p>
++
++<p>Thanks,<br>Henry</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-69243905"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-69243905">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,69243905); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',69243905, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-69243905" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 69243905);" title="Link to comment by Henrywang41">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-69243905" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 69243905); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 69243905, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-69243905"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-69243905"></li>            <li id="comment-65945167">  </li><li id="dsq-comment-65945167" data-dsq-comment-id="65945167" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand bearrito's profile">      <a href="http://disqus.com/guest/fe2e272881aac6b690dd44b665c246e4/" onclick="DISQUS.dtpl.actions.fire('profile.show', 65945167, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-65945167" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">bearrito</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 65945167); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 65945167); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-65945167">                <div class="dsq-comment-text" id="dsq-comment-text-65945167">        <p>Little late on the thread here but would still like some feedback.</p>
++
++<p>My issues: </p>
++
++<p>1. I was also being prompted for my password. I ended up using the solution that Raghave suggested.</p>
++
++<p>2. I am not seeing /usr/local/src/pyMPI-2.4b2/. That directory 
++doesn't appear to be present. I tried to get around this by copying in <a href="http://fractal.py/" rel="nofollow">fractal.py</a> from my local machine. I end up with the following:</p>
++
++<p>mpirun -np 2 pyMPI /home/lamuser/<a href="http://fractal.py/" rel="nofollow">fractal.py</a> <br>pyMPI: can't open file '/home/lamuser/<a href="http://fractal.py/" rel="nofollow">fractal.py</a>': [Errno 2] No such file or directory</p>
++
++<p><a href="http://fractal.py/" rel="nofollow">fractal.py</a> is in that directory.</p>
++
++<p>Advice?<br></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-65945167"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-65945167">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,65945167); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',65945167, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-65945167" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 65945167);" title="Link to comment by bearrito">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-65945167" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 65945167); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 65945167, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-65945167"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-65945167"></li>            <li id="comment-45550297">  </li><li id="dsq-comment-45550297" data-dsq-comment-id="45550297" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand miccloud's profile">      <a href="http://disqus.com/miccloud/" onclick="DISQUS.dtpl.actions.fire('profile.show', 45550297, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-45550297" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">miccloud</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 45550297); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 45550297); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-45550297">                <div class="dsq-comment-text" id="dsq-comment-text-45550297">        <p>I have a python script that calls a program installed on the master node and slave nodes.<br>Can I run it from the master node and get the results with mpirun?</p>
++
++<p>Thanks a lot.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-45550297"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-45550297">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,45550297); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',45550297, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-45550297" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 45550297);" title="Link to comment by miccloud">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-45550297" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 45550297); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 45550297, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-45550297"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-45550297"></li>            <li id="comment-45371085">  </li><li id="dsq-comment-45371085" data-dsq-comment-id="45371085" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand miccloud's profile">      <a href="http://disqus.com/miccloud/" onclick="DISQUS.dtpl.actions.fire('profile.show', 45371085, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-45371085" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">miccloud</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 45371085); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 45371085); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-45371085">                <div class="dsq-comment-text" id="dsq-comment-text-45371085">        <p>Can I execute bash script in a node  with a job?</p>
++
++<p>Thanks.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-45371085"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-45371085">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,45371085); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',45371085, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-45371085" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 45371085);" title="Link to comment by miccloud">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-45371085" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 45371085); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 45371085, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-45371085"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-45371085"></li>            <li id="comment-15834770">  </li><li id="dsq-comment-15834770" data-dsq-comment-id="15834770" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Harry's profile">      <a href="http://disqus.com/guest/a693c76dfaa7b34aedef8d18bdcf13e2/" onclick="DISQUS.dtpl.actions.fire('profile.show', 15834770, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-15834770" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Harry</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 15834770); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 15834770); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-15834770">                <div class="dsq-comment-text" id="dsq-comment-text-15834770">        <p>Hello everybody, </p>
++
++<p>I had error with Fortran 77 library in AMI ami-e813f681 (Fedora core 6
++ x86- 64 bit) because of two libraries: libf2c or libg2c in the AMI. <br>(....<br>checking for f_exit in -lf2c... no<br>checking for f_exit in -lg2c... no<br>checking for dummy main to link with Fortran 77 libraries... unknown<br>configure: error: linking to Fortran libraries from C fails<br>)</p>
++
++<p>Could anybody help me solve the problem? Thanks so much! </p>
++
++<p>best regards, </p>
++
++<p>Harry<br></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-15834770"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-15834770">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,15834770); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',15834770, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-15834770" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 15834770);" title="Link to comment by Harry">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-15834770" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 15834770); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 15834770, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-15834770"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-15834770"></li>            <li id="comment-11078420">  </li><li id="dsq-comment-11078420" data-dsq-comment-id="11078420" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078420, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078420" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      9 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078420); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078420); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078420">                <div class="dsq-comment-text" id="dsq-comment-text-11078420">        <p></p><p>Jeff,</p><br><p>I'm
++ actually working on a new version of Elasticwulf right now.  Shoot me 
++an email at pete@datawrangling.com and I'll try to include what you need
++ for Rmpi.  If you have some sample Rmpi code you want to test and that 
++you don't mind releasing, we can build that into the AMI to ensure 
++everything you need is installed.</p><br><p>Here are the MPI installs that were included on that Fedora 64 bit image:</p><br><pre># mpich2 <p></p>
++
++<p>cd /usr/local/src/<br>wget <a href="http://www.mcs.anl.gov/research/projects/mpich2/downloads/tarballs/mpich2-1.0.6p1.tar.gz" rel="nofollow">http://www.mcs.anl.gov/researc...</a><br>tar -xzvf mpich2-1.0.6p1.tar.gz<br>cd mpich2-1.0.6p1<br>./configure --enable-sharedlibs=gcc --prefix=/usr/local/mpich2<br>make<br>make install</p>
++
++<p># openmpi</p>
++
++<p>cd /usr/local/src/<br>wget <a href="http://www.open-mpi.org/software/ompi/v1.2/downloads/openmpi-1.2.5.tar.gz" rel="nofollow">http://www.open-mpi.org/softwa...</a><br>#wget <a href="http://www.open-mpi.de/software/ompi/v1.2/downloads/openmpi-1.2.5.tar.gz" rel="nofollow">http://www.open-mpi.de/softwar...</a><br>tar -zxf openmpi-1.2.5.tar.gz<br>cd openmpi-1.2.5<br>./configure --prefix=/usr/local/openmpi<br>make all<br>make install</p>
++
++<p>#lam<br>cd /usr/local/src/<br>wget <a href="http://www.lam-mpi.org/download/files/lam-7.1.2.tar.gz" rel="nofollow">http://www.lam-mpi.org/downloa...</a><br>tar -xzvf lam-7.1.2.tar.gz<br>cd lam-7.1.2<br>./configure --enable-shared --prefix=/usr/local/lam<br>make <br>make install</p>
++
++<p># mpich1<br>cd /usr/local/src/<br>wget <a href="http://www-unix.mcs.anl.gov/mpi/mpich1/downloads/mpich.tar.gz" rel="nofollow">http://www-unix.mcs.anl.gov/mp...</a><br>tar -zxf mpich.tar.gz<br>cd mpich-1.2.7p1/<br>./configure --enable-sharedlib --prefix=/usr/local/mpich<br>make<br>make install<br></p></pre><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078420"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078420">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078420); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078420, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078420" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078420);" title="Link to comment by Pete">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078420" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078420); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078420, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078420"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078420"></li>            <li id="comment-12182512">  </li><li id="dsq-comment-12182512" data-dsq-comment-id="12182512" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:46px;">    <div class="dsq-avatar dsq-tt" title="Expand Andrew Lonie's profile">      <a href="http://disqus.com/guest/5420aa91d78af66fdcdbd0aebf91e653/" onclick="DISQUS.dtpl.actions.fire('profile.show', 12182512, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-12182512" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Andrew Lonie</span>                <span class="dsq-collapsed-count">                      8 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 12182512); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 12182512); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-12182512">                <div class="dsq-comment-text" id="dsq-comment-text-12182512">        <p>Hi
++ - I'd be very interested in a Elasticwulf cluster that supports R, too.
++  Did anything come of this? I'd be happy to be involved. </p>
++
++<p>Andrew</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-12182512"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-12182512">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,12182512); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',12182512, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-12182512" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 12182512);" title="Link to comment by Andrew Lonie">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 11078420); return false" href="#comment-11078420" title="Jump to comment">            in reply to Pete          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-12182512" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 12182512); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 12182512, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-12182512"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-12182512"></li>            <li id="comment-12182897">  </li><li id="dsq-comment-12182897" data-dsq-comment-id="12182897" class="dsq-comment dsq-clearfix        dsq-comment-is-parent        dsq-moderator        dsq-founder" style="margin-left:92px;">    <div class="dsq-avatar dsq-tt" title="Expand pskomoroch's profile">      <a href="http://disqus.com/pskomoroch/" onclick="DISQUS.dtpl.actions.fire('profile.show', 12182897, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-12182897" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">pskomoroch</span>                <span class="dsq-collapsed-count">                      7 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 12182897); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 12182897); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-12182897">                <div class="dsq-comment-text" id="dsq-comment-text-12182897">        <p>Yes,
++ I have a Rails REST web service on github now for spawning MPI clusters
++ that support R.  Haven't had time yet to finish the docs or write a 
++blog post about it.  Works fine in operation...</p>
++
++<p><a href="http://github.com/datawrangling/ec2cluster/tree/master" rel="nofollow">http://github.com/datawranglin...</a></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-12182897"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-12182897">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,12182897); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',12182897, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-12182897" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 12182897);" title="Link to comment by pskomoroch">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 12182512); return false" href="#comment-12182512" title="Jump to comment">            in reply to Andrew Lonie          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-12182897" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 12182897); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 12182897, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-12182897"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-12182897"></li>            <li id="comment-17402044">  </li><li id="dsq-comment-17402044" data-dsq-comment-id="17402044" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:138px;">    <div class="dsq-avatar dsq-tt" title="Expand Soren Macbeth's profile">      <a href="http://disqus.com/sorenmacbeth/" onclick="DISQUS.dtpl.actions.fire('profile.show', 17402044, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/uploads/users/11091/avatar32.jpg?1324404681" alt="">      </a>    </div>    <div id="dsq-comment-body-17402044" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://dopeness.org/" target="_blank" class="dsq-commenter-name" rel="nofollow">Soren Macbeth</a><span class="dsq-commenter-bio">, Chief Data Scientist @yieldbot. Co-founder of @StockTwits</span>                <span class="dsq-collapsed-count">                      3 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 17402044); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 17402044); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-17402044">                <div class="dsq-comment-text" id="dsq-comment-text-17402044">        <p>Hey Peter,</p>
++
++<p>Thanks for the awesome ec2cluster project! I forked it on github so 
++that I could add the ability to install R packages from CRAN across all 
++the nodes in the cluster. Basically I added the following to <a href="http://ubuntu_installs.sh/" rel="nofollow">ubuntu_installs.sh</a>:<br>--snip--<br># Custom R packages<br>cat &lt;&lt;eof&gt;&gt; /home/ec2cluster/install_custom_packages.R<br>install.packages("DEoptim",repos="<a href="http://cran.stat.ucla.edu/" rel="nofollow">http://cran.stat.ucla.edu</a>")<br>EOF<br> <br>R CMD BATCH /home/ec2cluster/install_custom_packages.R<br>--snip--</p>
++
++<p>A bit crude I know, but something people wanting to do things with R will probably find useful. </p>
++
++<p>To actually run the R code, I was successful with the follow approach:</p>
++
++<p>1) put your R code in a file and save it as foo.R<br>2) add the following line to a shellscript: mpirun -n 1 -hostfile /mnt/ec2cluster/openmpi_hostfile R CMD BATCH foo.R<br>3) call the shellscript and grab the produced .Rout file to your S3 bucket!<br>&lt;/eof&gt;</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-17402044"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-17402044">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,17402044); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',17402044, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-17402044" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 17402044);" title="Link to comment by Soren Macbeth">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 12182897); return false" href="#comment-12182897" title="Jump to comment">            in reply to pskomoroch          </a>        </li>            <li>          <a href="#" id="dsq-comment-like-count-17402044" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 17402044); return false">1          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 17402044, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-17402044"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-17402044"></li>            <li id="comment-17755101">  </li><li id="dsq-comment-17755101" data-dsq-comment-id="17755101" class="dsq-comment dsq-clearfix        dsq-comment-is-parent        dsq-moderator        dsq-founder" style="margin-left:184px;">    <div class="dsq-avatar dsq-tt" title="Expand pskomoroch's profile">      <a href="http://disqus.com/pskomoroch/" onclick="DISQUS.dtpl.actions.fire('profile.show', 17755101, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-17755101" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">pskomoroch</span>                <span class="dsq-collapsed-count">                      2 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 17755101); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 17755101); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-17755101">                <div class="dsq-comment-text" id="dsq-comment-text-17755101">        <p>Soren,</p>
++
++<p>Glad ec2cluster helped, are you guys big R users at StockTwits?</p>
++
++<p>-Pete</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-17755101"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-17755101">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,17755101); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',17755101, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-17755101" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 17755101);" title="Link to comment by pskomoroch">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 17402044); return false" href="#comment-17402044" title="Jump to comment">            in reply to Soren Macbeth          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-17755101" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 17755101); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 17755101, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-17755101"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-17755101"></li>            <li id="comment-17816391">  </li><li id="dsq-comment-17816391" data-dsq-comment-id="17816391" class="dsq-comment dsq-clearfix                        " style="margin-left:230px;">    <div class="dsq-avatar dsq-tt" title="Expand Soren Macbeth's profile">      <a href="http://disqus.com/sorenmacbeth/" onclick="DISQUS.dtpl.actions.fire('profile.show', 17816391, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/uploads/users/11091/avatar32.jpg?1324404681" alt="">      </a>    </div>    <div id="dsq-comment-body-17816391" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://dopeness.org/" target="_blank" class="dsq-commenter-name" rel="nofollow">Soren Macbeth</a><span class="dsq-commenter-bio">, Chief Data Scientist @yieldbot. Co-founder of @StockTwits</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 17816391); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 17816391); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-17816391">                <div class="dsq-comment-text" id="dsq-comment-text-17816391">        <p>The
++ very first StockTwits prototype used R to generate some statistics as 
++well as generate charts of the stocks being talked about in tweets :)</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-17816391"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-17816391">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,17816391); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',17816391, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-17816391" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 17816391);" title="Link to comment by Soren Macbeth">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 17755101); return false" href="#comment-17755101" title="Jump to comment">            in reply to pskomoroch          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-17816391" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 17816391); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 17816391, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-17816391"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-17816391"></li>            <li id="comment-12186904">  </li><li id="dsq-comment-12186904" data-dsq-comment-id="12186904" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:138px;">    <div class="dsq-avatar dsq-tt" title="Expand Andrew Lonie's profile">      <a href="http://disqus.com/guest/5420aa91d78af66fdcdbd0aebf91e653/" onclick="DISQUS.dtpl.actions.fire('profile.show', 12186904, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-12186904" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Andrew Lonie</span>                <span class="dsq-collapsed-count">                      3 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 12186904); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 12186904); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-12186904">                <div class="dsq-comment-text" id="dsq-comment-text-12186904">        <p>Thanks
++ - this is impressive, and a web interface for building clusters would 
++be very nice, but maybe I'm after something slightly closer to your 
++original solution. You might already know that R has an in-language 
++cluster support API built on Rmpi, called SNOW (Simple network of 
++workstations). It allows for various script commands like 
++clusterExport(data) and clusterApply(vector, function) which let you 
++interactively cluster jobs according to the parameter values in a list. <br>Would
++ this be compatible with your cluster app? I notice that it's more 
++schedule-focused and the nodes need to talk to the app; is the app 
++acting as the master rather than one of the ec2 nodes? Ideally my 
++architecture would be something like master Rmpi node running on ec2 
++talking to arbitrary slave #nodes, accessed through maybe something like
++ the Biocep remote R client (<a href="http://biocep-distrib.r-forge.r-project.org/%29;" rel="nofollow">http://biocep-distrib.r-forge....</a> clustering done in-session.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-12186904"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-12186904">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,12186904); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',12186904, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-12186904" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 12186904);" title="Link to comment by Andrew Lonie">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 12182897); return false" href="#comment-12182897" title="Jump to comment">            in reply to pskomoroch          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-12186904" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 12186904); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 12186904, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-12186904"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-12186904"></li>            <li id="comment-12189262">  </li><li id="dsq-comment-12189262" data-dsq-comment-id="12189262" class="dsq-comment dsq-clearfix        dsq-comment-is-parent        dsq-moderator        dsq-founder" style="margin-left:184px;">    <div class="dsq-avatar dsq-tt" title="Expand pskomoroch's profile">      <a href="http://disqus.com/pskomoroch/" onclick="DISQUS.dtpl.actions.fire('profile.show', 12189262, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-12189262" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">pskomoroch</span>                <span class="dsq-collapsed-count">                      2 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 12189262); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 12189262); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-12189262">                <div class="dsq-comment-text" id="dsq-comment-text-12189262">        <p>Yes,
++ this is compatible with the cluster app. One of the bundled examples 
++runs some calculations with R and SNOW, another uses Rmpi (see the code 
++on Github <a href="http://bit.ly/ocKCn" rel="nofollow">http://bit.ly/ocKCn</a> ).</p>
++
++<p>The web interface can be run anywhere, but needs to be https 
++accessible to the EC2 nodes.  I usually just run it as a small ec2 
++instance as shown in the docs.  You can start a job from the API or the 
++web console with shutdown_after_complete = false, and the cluster will 
++remain live for interactive work, just ssh into the master node like you
++ would with Elasticwulf.  The app is not acting as the MPI master node, 
++but the cluster nodes do talk to the app to handle configuration etc.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-12189262"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-12189262">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,12189262); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',12189262, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-12189262" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 12189262);" title="Link to comment by pskomoroch">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 12186904); return false" href="#comment-12186904" title="Jump to comment">            in reply to Andrew Lonie          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-12189262" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 12189262); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 12189262, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-12189262"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-12189262"></li>            <li id="comment-12236004">  </li><li id="dsq-comment-12236004" data-dsq-comment-id="12236004" class="dsq-comment dsq-clearfix                        " style="margin-left:230px;">    <div class="dsq-avatar dsq-tt" title="Expand Andrew Lonie's profile">      <a href="http://disqus.com/guest/5420aa91d78af66fdcdbd0aebf91e653/" onclick="DISQUS.dtpl.actions.fire('profile.show', 12236004, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-12236004" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Andrew Lonie</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 12236004); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 12236004); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-12236004">                <div class="dsq-comment-text" id="dsq-comment-text-12236004">        <p>OK thanks I understand. I'll try this out properly; it sounds like exactly what I'm after.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-12236004"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-12236004">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,12236004); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',12236004, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-12236004" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 12236004);" title="Link to comment by Andrew Lonie">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 12189262); return false" href="#comment-12189262" title="Jump to comment">            in reply to pskomoroch          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-12236004" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 12236004); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 12236004, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-12236004"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-12236004"></li>            <li id="comment-11078419">  </li><li id="dsq-comment-11078419" data-dsq-comment-id="11078419" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Jeff Howbert's profile">      <a href="http://disqus.com/guest/9a9b88e0baa650e10edffc743d8a932c/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078419, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078419" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.insilicos.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Jeff Howbert</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078419); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078419); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078419">                <div class="dsq-comment-text" id="dsq-comment-text-11078419">        <p></p><p>Hello Pete -</p><br><p>Thanks
++ for putting together your ElsticWulf scripts and AMIs.  They have saved
++ me a huge amount of time and effort compared with building my own from 
++scratch.</p><br><p>I am interested in parallelizing some machine 
++learning algorithms written in R.  My interest in ElasticWulf comes 
++partly from the fact that R is already bundled with its AMIs.  I 
++discovered, however, that Rmpi is not one of the installed packages.  
++What were your intentions/plans with R in the ElasticWulf environment?  
++Did you plan for parallel communication using a mechanism other than 
++MPI?</p><br><p>It wasn't hard to install Rmpi on top of the ElasticWulf 
++AMI, but despite a couple of days' struggle, I haven't found a 
++combination of Rmpi version and paths to the AMI's existing MPI 
++libraries that fully works.  The best I've been able to do is spawn an R
++ cluster where all the nodes are running on the master node.</p><br><p>Could
++ you tell me what version of R and the various MPI implementations 
++(OpenMPI, MPICH, LAM) went into your 64-bit AMI?  That might help me 
++sort things out.  A couple of observations, for what they're worth:</p><br><p>1)
++ Once I have an ElasticWulf cluster up and have run mpdboot, I find that
++ mpiexec works, but orterun (the equivalent in OpenMPI) does not.</p><br><p>2) There has been at least one report of problems between the latest version of Rmpi and OpenMPI:</p><br><p><a href="https://stat.ethz.ch/pipermail/r-sig-hpc/2009-February/000105.html" rel="nofollow">https://stat.ethz.ch/pipermail...</a></p><br><p>Much thanks.</p><br><p>Jeff Howbert</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078419"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078419">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078419); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078419, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078419" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078419);" title="Link to comment by Jeff Howbert">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078419" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078419); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078419, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078419"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078419"></li>            <li id="comment-11078418">  </li><li id="dsq-comment-11078418" data-dsq-comment-id="11078418" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Ben Racine's profile">      <a href="http://disqus.com/guest/73b18fbd0f1831f0816ff3d3bceffe89/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078418, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078418" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.glosten.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Ben Racine</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078418); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078418); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078418">                <div class="dsq-comment-text" id="dsq-comment-text-11078418">        <p></p><p>Hello,</p><br><p>I
++ get the same problem that Michael Creel was having.  I am able to start
++ the instances and get them "running" successfully, by pointing them to 
++my keypair with the KEYNAME variable, but I believe my KEY_LOCATION 
++variable in my <a href="http://ec2config.py/" rel="nofollow">EC2config.py</a> file must be causing the prompt for a password.</p><br><p>This is all per the default block of code in <a href="http://ec2config.py/" rel="nofollow">EC2config.py</a>:</p><p></p>
++
++<p>change this to your keypair location (see the EC2 getting started guide tutorial on using ec2-add-keypair)</p>
++
++<p></p><p>KEYNAME = "my_keypair"<br>KEY_LOCATION = "/Users/pskomoroch/id_rsa-gsg-keypair"</p><br><p>I
++ believe this requires me to go back through the "getting started 
++guide", but I just wanted to update my progress in case others are 
++seeing the same thing.</p><br><p>Many thanks for sharing your progress Peter!</p><br><p>Ben Racine</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078418"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078418">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078418); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078418, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078418" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078418);" title="Link to comment by Ben Racine">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078418" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078418); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078418, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078418"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078418"></li>            <li id="comment-11078417">  </li><li id="dsq-comment-11078417" data-dsq-comment-id="11078417" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand ej's profile">      <a href="http://disqus.com/guest/204b597c385120b2d064489cc90bc7d3/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078417, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078417" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">ej</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078417); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078417); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078417">                <div class="dsq-comment-text" id="dsq-comment-text-11078417">        <p></p><p>@Pete - Feb08</p><br><blockquote><br><p>Can’t get the ec-mpi-config to work. Says list &gt;index out of range for mpi-externalnames[0] on &gt;line 108</p><br></blockquote><br><p>You are right - the output from ec2-describe-instances has changed. Do the following..</p><br><p>Change</p><br><p>machine_state.append(chunk[-1])</p><br><p>to</p><br><p>machine_state.append(chunk[5])</p><br><p>in "<a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a>"</p><br><p>Or,
++ if the output changes again - just do an "ec2-describe-instances" and 
++match up the required fields to the index on the chunk[] array</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078417"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078417">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078417); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078417, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078417" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078417);" title="Link to comment by ej">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078417" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078417); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078417, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078417"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078417"></li>            <li id="comment-11078416">  </li><li id="dsq-comment-11078416" data-dsq-comment-id="11078416" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078416, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078416" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078416); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078416); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078416">                <div class="dsq-comment-text" id="dsq-comment-text-11078416">        <p></p><p>Joanne,</p><br><p>Try
++ logging in and running your commands as "lamuser" instead of root.  The
++ default configuration assumes lamuser is running all commands.</p><br><p>$ ssh lamuser@ec2<a href="http://-72-44-46-78.z-2.compute-1.amazonaws.com/" rel="nofollow">-72-44-46-78.z-2.compute-1.ama...</a></p><br><p>See part 1 of the post for details on changing the configuration to run MPI as root.</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078416"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078416">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078416); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078416, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078416" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078416);" title="Link to comment by Pete">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078416" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078416); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078416, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078416"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078416"></li>            <li id="comment-11078415">  </li><li id="dsq-comment-11078415" data-dsq-comment-id="11078415" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand jjiyunlee's profile">      <a href="http://disqus.com/guest/01b0b00819049a0c83ec280ccb4e596a/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078415, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078415" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">jjiyunlee</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078415); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078415); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078415">                <div class="dsq-comment-text" id="dsq-comment-text-11078415">        <p></p><p>Hi,</p><br><p>Thanks
++ for your writeup! It's very helpful. I'm running into an error with 
++mpdtrace and was hoping for some of your insight into it. I am running 
++mpd as root, with one node for simplicity.</p><br><p>I can successfully start up mpd on the instance and "mpd &amp;":<br>root@...:/etc# mpdboot -n 1 -f mpd.hosts<br>root@...:/etc# mpd &amp;<br>[1] 2280</p><br><p>but "mpdtrace -l" gives me an error:<br>root@ip-10-251-143-0:/etc# mpdtrace -l<br>mpdtrace: unexpected msg from mpd=:{'error_msg': 'invalid secretword to root mpd'}:</p><br><p>I
++ have tried all pairwise combinations of having MPD_SECRETWORD= or 
++secretword= in ~/.mpd.conf and /etc/mpd.conf, all of which were set to 
++read/write for root only.</p><br><p>I also can't do "mpdallexit":<br>I can't mpdallexit:<br>root@...:~# mpdallexit<br>mpdallexit: mpd_uncaught_except_tb handling:<br>  : 'cmd'<br>    /usr/local/bin/mpich2-install/bin/mpdallexit  53  mpdallexit<br>        elif msg['cmd'] != 'mpdallexit_ack':<br>    /usr/local/bin/mpich2-install/bin/mpdallexit  59  <br>        mpdallexit()</p><br><p>I can also run mpdcheck as a server and have it listen for mpdcheck as a client from the same instance (in a different window).</p><br><p>Suggestions/help? I'd greatly appreciate any advice you have on this problem. Thanks --</p><br>&lt;ul&gt;<br>&lt;li&gt;Joanne&lt;/li&gt;<br>&lt;/ul&gt;<p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078415"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078415">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078415); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078415, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078415" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078415);" title="Link to comment by jjiyunlee">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078415" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078415); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078415, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078415"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078415"></li>            <li id="comment-11078414">  </li><li id="dsq-comment-11078414" data-dsq-comment-id="11078414" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Tim Salimans's profile">      <a href="http://disqus.com/guest/d9e0ea5863a3cee8a31febd8494ca6e7/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078414, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078414" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Tim Salimans</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078414); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078414); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078414">                <div class="dsq-comment-text" id="dsq-comment-text-11078414">        <p></p><p>Got it working using OpenSSH, guess PuTTy was the problem after all.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078414"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078414">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078414); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078414, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078414" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078414);" title="Link to comment by Tim Salimans">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078414" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078414); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078414, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078414"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078414"></li>            <li id="comment-11078413">  </li><li id="dsq-comment-11078413" data-dsq-comment-id="11078413" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Tim Salimans's profile">      <a href="http://disqus.com/guest/d9e0ea5863a3cee8a31febd8494ca6e7/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078413, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078413" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Tim Salimans</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078413); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078413); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078413">                <div class="dsq-comment-text" id="dsq-comment-text-11078413">        <p></p><p>Great
++ project and thanks very much for sharing! I do have some trouble 
++getting it all to work though. Everything works fine until it tries to 
++run the <a href="http://create_hosts.py/" rel="nofollow">create_hosts.py</a>:</p><br><p>/////// OUTPUT ///////////////</p><br><p>Creating hosts file on master node and copying hosts file to compute nodes...</p><br><p>pscp -scp -i D:\grid\keys\keypair.ppk -q <a href="http://create_hosts.py/" rel="nofollow">create_hosts.py</a> root@ec2-67-202-19-253.<br><a href="http://compute-1.amazonaws.com/" rel="nofollow">compute-1.amazonaws.com</a>:/etc/</p><br><p>plink -ssh -i D:\grid\keys\keypair.ppk root@ec2-67-202-19-253.compute-1.amazonaw<br><a href="http://s.com/" rel="nofollow">s.com</a> "python /etc/<a href="http://create_hosts.py/" rel="nofollow">create_hosts.py</a>"</p><br><p>exporting 10.252.31.48:/home/beowulf<br>exporting 10.252.31.48:/mnt/data<br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<br>@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @<br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<br>Permissions 0644 for '/root/.ssh/id_rsa' are too open.<br>It is recommended that your private key files are NOT accessible by others.<br>This private key will be ignored.<br>bad permissions: ignore key: /root/.ssh/id_rsa<br>Permission denied, please try again.<br>Permission denied, please try again.<br>Permission denied (publickey,gssapi-with-mic,password).<br>lost connection<br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<br>@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @<br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<br>Permissions 0644 for '/root/.ssh/id_rsa' are too open.<br>It is recommended that your private key files are NOT accessible by others.<br>This private key will be ignored.<br>bad permissions: ignore key: /root/.ssh/id_rsa<br>Permission denied, please try again.<br>Permission denied, please try again.<br>Permission denied (publickey,gssapi-with-mic,password).<br>lost connection</p><br><p>etcetera</p><br><p>//////////////////////////////////</p><br><p>As
++ you can see I made some small modifications in order to use PuTTy as my
++ SSH client, but that does not seem to be the problem... Does anyone 
++else have this problem, and does anyone know how to fix it?</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078413"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078413">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078413); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078413, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078413" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078413);" title="Link to comment by Tim Salimans">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078413" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078413); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078413, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078413"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078413"></li>            <li id="comment-11078412">  </li><li id="dsq-comment-11078412" data-dsq-comment-id="11078412" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078412, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078412" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      4 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078412); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078412); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078412">                <div class="dsq-comment-text" id="dsq-comment-text-11078412">        <p></p><p>Magg,</p><br><p>I
++ wouldn't recommend it, the latency would be huge and I'm not sure how 
++MPI would handle that.  You would also need to open the mpi ports to the
++ outside world using the EC2 security group authorize commands.</p><br><p>An
++ alternative is to open an X11 session and connect to the head node or 
++maybe VNC in to the instance.  The 64 bit elasticwulf images are set up 
++for X11 sessions and adding a desktop package would allow you to VNC in 
++if you prefer that route.</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078412"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078412">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078412); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078412, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078412" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078412);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078412" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078412); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078412, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078412"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078412"></li>            <li id="comment-11662168">  </li><li id="dsq-comment-11662168" data-dsq-comment-id="11662168" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:46px;">    <div class="dsq-avatar dsq-tt" title="Expand Abhimanyu's profile">      <a href="http://disqus.com/guest/a9e5f48763433c486e5ece186f823820/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11662168, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11662168" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Abhimanyu</span>                <span class="dsq-collapsed-count">                      3 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11662168); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11662168); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11662168">                <div class="dsq-comment-text" id="dsq-comment-text-11662168">        <p>I am facing the same problem. I am able to set up the ring manually but mpdboot complains:</p>
++
++<p>mpdboot_domU-blah(handle_mpd_output 414): from mpd on domU-blah-, <br>invalid port info:<br>no_port</p>
++
++<p>any word on this?<br></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11662168"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11662168">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11662168); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11662168, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11662168" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11662168);" title="Link to comment by Abhimanyu">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 11078412); return false" href="#comment-11078412" title="Jump to comment">            in reply to Pete          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11662168" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11662168); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11662168, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11662168"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11662168"></li>            <li id="comment-11779678">  </li><li id="dsq-comment-11779678" data-dsq-comment-id="11779678" class="dsq-comment dsq-clearfix                        " style="margin-left:92px;">    <div class="dsq-avatar dsq-tt" title="Expand Abhimanyu's profile">      <a href="http://disqus.com/guest/a9e5f48763433c486e5ece186f823820/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11779678, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11779678" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Abhimanyu</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11779678); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11779678); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11779678">                <div class="dsq-comment-text" id="dsq-comment-text-11779678">        <p>I
++ found the problem. Apparently I had forgotten to include the "chown -R 
++user:user /home/user" command. It didnt have access to the id_rsa file. 
++As root mpdboot would work. Rather silly error message though.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11779678"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11779678">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11779678); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11779678, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11779678" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11779678);" title="Link to comment by Abhimanyu">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 11662168); return false" href="#comment-11662168" title="Jump to comment">            in reply to Abhimanyu          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11779678" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11779678); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11779678, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11779678"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11779678"></li>            <li id="comment-11662255">  </li><li id="dsq-comment-11662255" data-dsq-comment-id="11662255" class="dsq-comment dsq-clearfix                dsq-moderator        dsq-founder" style="margin-left:92px;">    <div class="dsq-avatar dsq-tt" title="Expand pskomoroch's profile">      <a href="http://disqus.com/pskomoroch/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11662255, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11662255" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">pskomoroch</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11662255); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11662255); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11662255">                <div class="dsq-comment-text" id="dsq-comment-text-11662255">        <p>I
++ think there are some SGE grid solutions now that allow you to add EC2 
++nodes to your existing cluster, but again the performance of MPI from a 
++local network to EC2 would be horrible...</p>
++
++<p>If you are interested in running MPI on EC2, I have a new project on Github I'll be announcing soon:</p>
++
++<p><a href="http://github.com/datawrangling/ec2cluster/tree/master" rel="nofollow">http://github.com/datawranglin...</a></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11662255"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11662255">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11662255); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11662255, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11662255" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11662255);" title="Link to comment by pskomoroch">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 11662168); return false" href="#comment-11662168" title="Jump to comment">            in reply to Abhimanyu          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11662255" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11662255); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11662255, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11662255"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11662255"></li>            <li id="comment-11078411">  </li><li id="dsq-comment-11078411" data-dsq-comment-id="11078411" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand magg's profile">      <a href="http://disqus.com/guest/1772205ff3fd5ccadfd54f60eb981bef/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078411, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078411" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">magg</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078411); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078411); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078411">                <div class="dsq-comment-text" id="dsq-comment-text-11078411">        <p></p><p>Hi Peter,</p><br><p>Have
++ you tried to connect EC2 instances with your local desktops? I am 
++trying to do that with mpich2 1.0.7 but I am not successful at all. 
++mpdboot complains about invalid port info (no_port) - actually no port 
++when I try to do mpdboot -n 2. Even when I tried to mpd&amp; on EC2 
++machine and then mpdtrace -l and then unblock the port and then mpd -h 
++ec2-blabla -p ec2-mpdtrace-l-port still I have no luck. Have you faced 
++similar problems?</p><br><p>Thanks<br>- magg</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078411"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078411">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078411); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078411, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078411" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078411);" title="Link to comment by magg">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078411" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078411); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078411, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078411"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078411"></li>            <li id="comment-11078410">  </li><li id="dsq-comment-11078410" data-dsq-comment-id="11078410" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078410, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078410" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078410); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078410); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078410">                <div class="dsq-comment-text" id="dsq-comment-text-11078410">        <p></p><p>@Theo,</p><br><p>I'm attending MMDS this week at Stanford (<a href="http://www.stanford.edu/group/mmds/" rel="nofollow">http://www.stanford.edu/group/mmds/</a>),
++ and had a chance to ask James Demmel a few questions.  He gave a talk 
++titled "Avoiding communication in linear algebra algorithms", which was 
++very relevant.  His advice for matrix multiplication in a high latency 
++environment like EC2 was to try dialing up the block size as much as 
++possible in the standard MPI solvers and see how performance was 
++affected.</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078410"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078410">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078410); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078410, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078410" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078410);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078410" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078410); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078410, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078410"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078410"></li>            <li id="comment-11078409">  </li><li id="dsq-comment-11078409" data-dsq-comment-id="11078409" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078409, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078409" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078409); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078409); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078409">                <div class="dsq-comment-text" id="dsq-comment-text-11078409">        <p></p><p>I found the secret to avoiding a lot of MPI errors on EC2, but haven't found time to do an additional post...</p><br><p>The
++ secret seems to be that just because Amazon says that an instance is 
++"running", doesn't mean that the ssh daemons are available.  This caused
++ all kinds of intermittent problems setting up the hosts and my old 
++scripts would fail silently.</p><br><p>In my current codebase, I do some checks like the following:</p><br><pre>    print "Instance is %s" % BOOTING_INSTANCE<br>    <br>    # wait for instance description to return "running" and grab HOSTNAME variable<br>    print "Polling server status (ec2-describe-instances %s)" % BOOTING_INSTANCE<br>    while 1:<br>      print "waiting for instance to boot..."<br>      HOSTNAME = commands.getoutput("ec2-describe-instances %s | grep running | awk '{print $4}'" % BOOTING_INSTANCE)<br>      if len(HOSTNAME) &gt; 1:<br>        print "-------Instance booted, The server is available at %s" % HOSTNAME<br>        DOM_NAME = commands.getoutput("ec2-describe-instances %s | grep running | awk '{print $5}'" % BOOTING_INSTANCE).split('.')[0]<br>        break<br>      time.sleep(1)    <br>    <br>    # sometimes it takes a while for the ssh service to start, even when the ec2 api describes an instance as running.<br>    # A machine in the "running" state may not have finished booting. Try executing a no-op command until a valid response is found<br>    print "verifying ssh daemon has started..."<br>    counter=0<br>    while 1:<br>      print "Waiting for ssh daemon to start..."<br>      counter += 1        <br>      REPLY = commands.getoutput('''ssh %s "root@%s" 'echo "hello"' ''' % (SSH_OPTS, HOSTNAME) )<br>      if REPLY == 'hello':<br>        print "-------ssh has started, proceeding with AMI build"<br>        break<br>      if counter &gt; 24:<br>        print "Instance not respoding to SSH hails, aborting..."<br>        ## sshd should not take more than 2 minutes to launch<br>        terminate_status = commands.getoutput('ec2-terminate-instances %s' % BOOTING_INSTANCE)<br>        ec2_launch_failed = True<br>        print "Base Instance terminated"<br>        break<br>      time.sleep(5)<br>    <br>    if ec2_launch_failed:<br>        print "Aborting build"<br>        return<br>    <p></p>
++
++<p></p></pre><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078409"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078409">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078409); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078409, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078409" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078409);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078409" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078409); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078409, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078409"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078409"></li>            <li id="comment-11078408">  </li><li id="dsq-comment-11078408" data-dsq-comment-id="11078408" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Patrick's profile">      <a href="http://disqus.com/guest/83624e3d53e8a4f77fb3638d69412224/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078408, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078408" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Patrick</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078408); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078408); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078408">                <div class="dsq-comment-text" id="dsq-comment-text-11078408">        <p></p><p>Thanks, Peter.  The original <a href="http://ec2.py/" rel="nofollow">EC2.py</a> was the problem.  I now have the large AMIs up and running.  Thanks again for the article and help!</p><br><p>Patrick</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078408"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078408">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078408); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078408, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078408" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078408);" title="Link to comment by Patrick">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078408" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078408); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078408, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078408"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078408"></li>            <li id="comment-11078407">  </li><li id="dsq-comment-11078407" data-dsq-comment-id="11078407" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Theo's profile">      <a href="http://disqus.com/guest/886f1df95cb2acd12d921ce12c253b0e/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078407, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/uploads/anonusers/211/1905/avatar32.jpg?1281549414" alt="">      </a>    </div>    <div id="dsq-comment-body-11078407" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.stillwater-sc.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Theo</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078407); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078407); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078407">                <div class="dsq-comment-text" id="dsq-comment-text-11078407">        <p></p><p>Peter:</p><br><p>I
++ am diving into Hadoop with Map/Reduce as we speak. As you know Google 
++implemented its environment in C++, so I was a bit disappointed that 
++Hadoop had chosen Java VM to do its bidding. Java makes interfacing with
++ hardcore numerical operations much harder. The particular problems I am
++ looking at are large scale Lanczos solvers to find eigen values/vectors
++ of large systems of equations. These systems are of interest in 
++advertising, quantitative finance, and sensor networks. Problem is that 
++they all are environments in which latency is of the essence. So you 
++have a capacity component in terms of the size of the system and a 
++latency issue in terms of the data rate coming in and the opportunity 
++cost for somebody to get to the answer faster.</p><br><p>I would be 
++interested in working on this particular benchmark problem: pick a big 
++eigen value/vector problem and solve it on a cluster, EC2, and via 
++Hadoop/Map-reduce. Clearly this is going to be a lot of work so this 
++should be publishing worthy. I am sure many folks would be interested in
++ this experiment, so let me know if this is something that could invest 
++time in.</p><br><p>Theo</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078407"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078407">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078407); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078407, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078407" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078407);" title="Link to comment by Theo">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078407" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078407); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078407, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078407"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078407"></li>            <li id="comment-11078406">  </li><li id="dsq-comment-11078406" data-dsq-comment-id="11078406" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078406, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078406" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078406); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078406); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078406">                <div class="dsq-comment-text" id="dsq-comment-text-11078406">        <p></p><p>Patrick,</p><br><p>Did you start with a clean install of the 64 bit scripts?  I made some changes to <a href="http://ec2.py/" rel="nofollow">EC2.py</a> in the new scripts to handle the new instance types...</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078406"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078406">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078406); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078406, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078406" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078406);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078406" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078406); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078406, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078406"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078406"></li>            <li id="comment-11078405">  </li><li id="dsq-comment-11078405" data-dsq-comment-id="11078405" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Patrick's profile">      <a href="http://disqus.com/guest/83624e3d53e8a4f77fb3638d69412224/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078405, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078405" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Patrick</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078405); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078405); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078405">                <div class="dsq-comment-text" id="dsq-comment-text-11078405">        <p></p><p>Peter,</p><br><p>Very
++ useful tool!  I've gotten a cluster up and running using the small 
++instance type but am having difficulty launching the _64 AMIs.</p><br><p>$ ./<a href="http://ec2-start-cluster.py/" rel="nofollow">ec2-start-cluster.py</a><br>m1.large<br>image ami-eb13f682<br>master image ami-e813f681<br>----- starting master -----<br>Traceback (most recent call last):<br>  File "./<a href="http://ec2-start-cluster.py/" rel="nofollow">ec2-start-cluster.py</a>", line 39, in ?<br>
++    master_response = conn.run_instances(imageId=MASTER_IMAGE_ID, 
++minCount=1, maxCount=1, keyName= KEYNAME, instanceType=INSTANCE_TYPE )<br>TypeError: run_instances() got an unexpected keyword argument 'instanceType'</p><br><p>If I try to start the cluster without passing an INSTANCE_TYPE arg I get the following:<br>$ ./<a href="http://ec2-start-cluster.py/" rel="nofollow">ec2-start-cluster.py</a><br>m1.large<br>image ami-eb13f682<br>master image ami-e813f681<br>----- starting master -----<br>InvalidParameterValue:
++ The requested instance type's architecture (i386) does not match the 
++architecture in the manifest for ami-e813f681 (x86_64)<br>----- starting workers -----<br>InvalidParameterValue:
++ The requested instance type's architecture (i386) does not match the 
++architecture in the manifest for ami-eb13f682 (x86_64)</p><br><p>Any ideas?  Thanks!</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078405"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078405">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078405); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078405, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078405" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078405);" title="Link to comment by Patrick">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078405" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078405); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078405, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078405"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078405"></li>            <li id="comment-11078404">  </li><li id="dsq-comment-11078404" data-dsq-comment-id="11078404" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078404, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078404" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078404); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078404); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078404">                <div class="dsq-comment-text" id="dsq-comment-text-11078404">        <p></p><p>Raghav,</p><br><p>You can ssh in as root instead of lamuser, or compile the output file into your home directory.</p><br><p>Check out the new AMI and managment code:</p><br><p><a href="http://www.datawrangling.com/pycon-2008-elasticwulf-slides.html" rel="nofollow">http://www.datawrangling.com/pycon-2008-elasticwulf-slides.html</a></p><br><p>The
++ new AMI includes a preconfigured NFS mounted directory /home/beowulf.  
++If you compiled the file there, hellompi would be available on all 
++nodes.</p><br><p>Note that the new images default to the 'large' instance type which charges .40 cents/hour for each node.</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078404"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078404">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078404); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078404, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078404" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078404);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078404" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078404); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078404, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078404"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078404"></li>            <li id="comment-11078403">  </li><li id="dsq-comment-11078403" data-dsq-comment-id="11078403" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand raghav's profile">      <a href="http://disqus.com/guest/02002de5d523ca7ae7a0b0f85b9da098/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078403, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078403" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">raghav</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078403); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078403); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078403">                <div class="dsq-comment-text" id="dsq-comment-text-11078403">        <p></p><p>i am trying to compile a simple c mpi file "hellompi.c" using the command:</p><br><blockquote><br><p>mpicc -o /usr/hellompi /usr/local/src/hellompi.c</p><br></blockquote><br><p>why does it give me the following error?</p><br><p>/usr/bin/ld: cannot open output file /usr/hellompi: Permission denied<br>collect2: ld returned 1 exit status</p><br><p>how do I get root priveledges?</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078403"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078403">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078403); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078403, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078403" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078403);" title="Link to comment by raghav">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078403" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078403); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078403, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078403"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078403"></li>            <li id="comment-11078402">  </li><li id="dsq-comment-11078402" data-dsq-comment-id="11078402" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Kurt Grandis's profile">      <a href="http://disqus.com/kgrandis/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078402, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078402" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://kurtgrandis.com/blog" target="_blank" class="dsq-commenter-name" rel="nofollow">Kurt Grandis</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078402); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078402); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078402">                <div class="dsq-comment-text" id="dsq-comment-text-11078402">        <p></p><p>Thanks
++ Pete. I wish I had made the PyCon session, but these posts have been 
++very helpful. The cluster went up pretty quickly and I have already used
++ it to crunch a few minor data runs.<br>In setting everything up I also 
++ran into a similar problem as Raghav and ended up solving it in a 
++similar manner by forcing the -i credentials switch. I imagine it has 
++something to do with the way I configured and placed my certs.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078402"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078402">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078402); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078402, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078402" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078402);" title="Link to comment by Kurt Grandis">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078402" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078402); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078402, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078402"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078402"></li>            <li id="comment-11078401">  </li><li id="dsq-comment-11078401" data-dsq-comment-id="11078401" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand raghav's profile">      <a href="http://disqus.com/guest/02002de5d523ca7ae7a0b0f85b9da098/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078401, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078401" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">raghav</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078401); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078401); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078401">                <div class="dsq-comment-text" id="dsq-comment-text-11078401">        <p></p><p>Thanks pete. For your prompt reply!!</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078401"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078401">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078401); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078401, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078401" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078401);" title="Link to comment by raghav">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078401" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078401); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078401, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078401"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078401"></li>            <li id="comment-11078400">  </li><li id="dsq-comment-11078400" data-dsq-comment-id="11078400" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand raghav's profile">      <a href="http://disqus.com/guest/02002de5d523ca7ae7a0b0f85b9da098/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078400, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078400" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">raghav</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078400); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078400); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078400">                <div class="dsq-comment-text" id="dsq-comment-text-11078400">        <p></p><p>Hey guys,<br>Actually I made a change in the <a href="http://ec2-mpi-cluster.py/" rel="nofollow">ec2-mpi-cluster.py</a> file. I have no clue about python and I dono why it worked but it worked.</p><br><p>I modified:</p><br><p>template = ssh -o "StrictHostKeyChecking no" %(user)s@%(host)s "%(cmd)s" <br>to<br>template = 'ssh -i "/home/id_rsa-gsg-keypair" %(user)s@%(host)s "%(cmd)s"</p><br><p>and</p><br><p>template = '%(cmd)s %(switches)s -o "StrictHostKeyChecking no" %(src)s %(user)s@%(host)s:%(dest)s'<br>to<br>template = '%(cmd)s %(switches)s -i "/home/id_rsa-gsg-keypair" %(src)s %(user)s@%(host)s:%(dest)s'</p><br><p>And it started working perfectly fine. I was able to log in to the master node and the pi problem executed perfectly fine.</p><br><p>Thanks a lot guys</p><br><p>Cheers,<br>Raghav</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078400"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078400">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078400); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078400, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078400" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078400);" title="Link to comment by raghav">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078400" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078400); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078400, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078400"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078400"></li>            <li id="comment-11078399">  </li><li id="dsq-comment-11078399" data-dsq-comment-id="11078399" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078399, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078399" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078399); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078399); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078399">                <div class="dsq-comment-text" id="dsq-comment-text-11078399">        <p></p><p>raghav,</p><br><p>Another suggestion is to make sure the instances are running with ./<a href="http://ec2-check-instances.py/" rel="nofollow">ec2-check-instances.py</a> and then retry the script, sometimes it takes a while for sshd to start up on EC2.</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078399"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078399">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078399); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078399, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078399" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078399);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078399" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078399); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078399, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078399"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078399"></li>            <li id="comment-11078398">  </li><li id="dsq-comment-11078398" data-dsq-comment-id="11078398" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078398, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078398" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078398); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078398); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078398">                <div class="dsq-comment-text" id="dsq-comment-text-11078398">        <p></p><p>raghav,</p><br><p>I assume you were able to start the instances with <a href="http://ec2-start-cluster.py/?" rel="nofollow">ec2-start-cluster.py?</a>
++  The text on the terminal is normal, but it shouldn't ask you for a 
++password (I should probably add a verbose option instead of streaming 
++out text by default). There was a path issue on windows with an earlier 
++version of the scripts, so that may be the problem.</p><br><p>If you send me the script version number from the README and/or terminal output, I can try to track down what is going on...</p><br><p>peter.skomoroch@gmail.com</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078398"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078398">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078398); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078398, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078398" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078398);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078398" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078398); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078398, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078398"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078398"></li>            <li id="comment-11078397">  </li><li id="dsq-comment-11078397" data-dsq-comment-id="11078397" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand raghav's profile">      <a href="http://disqus.com/guest/02002de5d523ca7ae7a0b0f85b9da098/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078397, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078397" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">raghav</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078397); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078397); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078397">                <div class="dsq-comment-text" id="dsq-comment-text-11078397">        <p></p><p>Why does it ask me for a password when i try to run the <a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a> file.?<br>it says root@xxx password:<br>And I get a lot of text on the terminal when I try running the file.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078397"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078397">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078397); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078397, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078397" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078397);" title="Link to comment by raghav">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078397" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078397); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078397, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078397"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078397"></li>            <li id="comment-11078396">  </li><li id="dsq-comment-11078396" data-dsq-comment-id="11078396" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078396, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078396" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078396); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078396); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078396">                <div class="dsq-comment-text" id="dsq-comment-text-11078396">        <p></p><p>No
++ problem, thanks for finding the typos.  These were meant to be some 
++quick hacks, but took on a life of their own after a while.</p><br><p>I found this worked for configuring LAM, I'll send you more details in an email...</p><br><p>The contents of bash_profile should be as follows:</p><br><pre> <br>-bash-3.1# more .bash_profile <br># .bash_profile<p></p>
++
++<p># Get the aliases and functions<br>if [ -f ~/.bashrc ]; then<br>        . ~/.bashrc<br>fi</p>
++
++<p># User specific environment and startup programs</p>
++
++<p>LAMRSH="ssh -x"<br>export LAMRSH</p>
++
++<p>LD_LIBRARY_PATH="/usr/local/lam-7.1.2/lib/"<br>export LD_LIBRARY_PATH</p>
++
++<p>MPICH_PORT_RANGE="2000:8000"<br>export MPICH_PORT_RANGE</p>
++
++<p>PATH=$PATH:$HOME/bin</p>
++
++<p>PATH=/usr/local/lam-7.1.2/bin:$PATH</p>
++
++<p>MANPATH=/usr/local/lam-7.1.2/man:$MANPATH</p>
++
++<p>export PATH<br>export MANPATH<br></p></pre><br><p>Launch the cluster on EC2 and try booting LAM manually:</p><br><pre>[lamuser@domU-12-31-33-00-04-4B ~]$ lamboot /etc/mpd.hosts<p></p>
++
++<p>[lamuser@domU-12-31-33-00-04-4B ~]$ lamnodes<br>n0      <a href="http://domu-12-31-33-00-04-4b.usma1.compute.amazonaws.com/" rel="nofollow">domU-12-31-33-00-04-4B.usma1.c...</a>:1:origin,this_node<br>n1      <a href="http://domu-12-31-33-00-03-35.usma1.compute.amazonaws.com/" rel="nofollow">domU-12-31-33-00-03-35.usma1.c...</a>:1:<br>n2      <a href="http://domu-12-31-33-00-03-3c.usma1.compute.amazonaws.com/" rel="nofollow">domU-12-31-33-00-03-3C.usma1.c...</a>:1:<br>n3      <a href="http://domu-12-31-34-00-00-55.usma2.compute.amazonaws.com/" rel="nofollow">domU-12-31-34-00-00-55.usma2.c...</a>:1:</p>
++
++<p>[lamuser@domU-12-31-33-00-04-4B ~]$ tping N -c3<br>  1 byte from 3 remote nodes and 1 local node: 0.039 secs<br>  1 byte from 3 remote nodes and 1 local node: 0.004 secs<br>  1 byte from 3 remote nodes and 1 local node: 0.002 secs<br></p></pre><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078396"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078396">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078396); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078396, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078396" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078396);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078396" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078396); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078396, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078396"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078396"></li>            <li id="comment-11078395">  </li><li id="dsq-comment-11078395" data-dsq-comment-id="11078395" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand pete's profile">      <a href="http://disqus.com/guest/b528e02034427715c686d1fa1a0906a9/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078395, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078395" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">pete</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078395); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078395); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078395">                <div class="dsq-comment-text" id="dsq-comment-text-11078395">        <p></p><p>Found
++ another typo too, ok I'm nit picking. In the stop-cluster script the 
++message says Stoping as opposed to stopping. A year ago when you first 
++posted this stuff you mentioned that the reason why the non-root user 
++was called lamuser was that the scripts were used for LAM in some 
++previous incarnation. Since I'm actually trying to use LAM, if you have 
++any LAM stuff around that might help me to iron out one or two problems I
++ still have.</p><br><p>Anyway, thanks again,<br>Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078395"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078395">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078395); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078395, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078395" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078395);" title="Link to comment by pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078395" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078395); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078395, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078395"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078395"></li>            <li id="comment-11078394">  </li><li id="dsq-comment-11078394" data-dsq-comment-id="11078394" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078394, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078394" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078394); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078394); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078394">                <div class="dsq-comment-text" id="dsq-comment-text-11078394">        <p></p><p>pete
++ found the error... the image Ids he entered into the config module 
++inadvertently contained a capital letter.  This doesn’t cause any 
++problems for starting images since string case is ignored by Amazon. The
++ corresponding image id response string from AWS is always lowercase, so
++ the python script comparison on image ID string fails.</p><br><p>In the
++ next version of the scripts, I will handle upper/lowercase differences 
++in the ami strings.  For now, just make sure to use all lower case or 
++call the python .lower() method,</p><br><pre> <br>&gt;&gt;&gt; test = 'ami-fE9a7f97'<br>&gt;&gt;&gt; test.lower()<br>'ami-fe9a7f97'<br>&gt;&gt;&gt; <p></p>
++
++<p></p></pre><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078394"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078394">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078394); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078394, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078394" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078394);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078394" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078394); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078394, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078394"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078394"></li>            <li id="comment-11078393">  </li><li id="dsq-comment-11078393" data-dsq-comment-id="11078393" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand pete's profile">      <a href="http://disqus.com/guest/b528e02034427715c686d1fa1a0906a9/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078393, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078393" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">pete</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078393); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078393); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078393">                <div class="dsq-comment-text" id="dsq-comment-text-11078393">        <p></p><p>Can't get the ec-mpi-config to work. Says list index out of range for mpi-externalnames[0] on line 108<br>start cluster and check instances are OK so I think that python, EC, elementree<br>are OK<br>Any
++ ideas why? Has AWS changed the format of the response you're parsing 
++(yes I have had a look at the python code but since I haven't used 
++python before I can't see anything obvious to me)<br>BTW you have a typo in mpi config Numer of nodes as opposed to Number of nodes , it even shows in your example above.<br>Otherwise I like what you've done, I'd just like it to work for me.<br>Thanks,<br>Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078393"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078393">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078393); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078393, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078393" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078393);" title="Link to comment by pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078393" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078393); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078393, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078393"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078393"></li>            <li id="comment-11078392">  </li><li id="dsq-comment-11078392" data-dsq-comment-id="11078392" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078392, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078392" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078392); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078392); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078392">                <div class="dsq-comment-text" id="dsq-comment-text-11078392">        <p></p><p>Theo,</p><br><p>Sorry
++ for the delay in posting this and responding.  I've been working on a 
++startup for the past 7 months and was in serious crunch mode.  Don't 
++read too much into the large gap in posts, it is just me working on this
++ as a side-project.  I  finished moving the blog to another host and 
++finally have some time to get back to the EC2 work.  This experience has
++ taught me to never name a series of blog posts "part 1 of N" :)</p><br><p>You
++ make some excellent points.  One thing that has changed since I wrote 
++the first post is that EC2 now offers larger 64bit machine images with 
++better I/O (you can provision an entire physical server and not be 
++limited by sharing network resources in the virtual instance).  I'd like
++ to see if this improves the network performance.  I'm giving a talk on 
++this in March, so I'm on the hook to have some benchmarks by then.</p><br><p>I
++ also agree on the mapreduce side.  For embarrassingly parallel 
++problems, hadoop on ec2 is potentially much more attractive...more 
++robust, easier for most people to program.  Ideally, I would like to do 
++some comparisons between the two approaches and run the numbers.</p><br><p>The
++ performance of an EC2 MPI cluster is definitely going to be worse than 
++your own custom hardware, but it still might fit certain niche 
++situations.  In my case, I needed to run some MPI code for a large 
++problem and didn't have access to a large enough cluster.  The 
++performance on EC2 was nowhere near what you get on a high-end cluster, 
++but it got the job done for a reasonable price.</p><br><p>This discussion on the beowulf list goes into more detail on the pros/cons:</p><br><p><a href="http://www.beowulf.org/pipermail/beowulf/2008-January/020490.html" rel="nofollow">http://www.beowulf.org/pipermail/beowulf/2008-January/020490.html</a></p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078392"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078392">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078392); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078392, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078392" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078392);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078392" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078392); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078392, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078392"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078392"></li>            <li id="comment-11078391">  </li><li id="dsq-comment-11078391" data-dsq-comment-id="11078391" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Theo's profile">      <a href="http://disqus.com/guest/886f1df95cb2acd12d921ce12c253b0e/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078391, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/uploads/anonusers/211/1905/avatar32.jpg?1281549414" alt="">      </a>    </div>    <div id="dsq-comment-body-11078391" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.stillwater-sc.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Theo</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078391); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078391); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078391">                <div class="dsq-comment-text" id="dsq-comment-text-11078391">        <p></p><p>Does the 5 month hiatus in this project mean that it was a bad idea and you guys have learnt enough to waste no more time on it?</p><br><p>Given
++ the virtualization uncertainty, finding the right 
++communication/computation balance for typical MPI programs appears to be
++ very unrewarding. Secondly, MPI development and debug and then QA and 
++scale out are not addressed, which doesn't bode well. It appears most 
++productive to have a local small cluster for development and debug, and 
++then do QA and scale out on EC2, but some benchmarking numbers would 
++really help.</p><br><p>If EC2 is only robust for embarrassingly parallel
++ problems, then MapReduce style programs are more attractive. There the 
++size of the data set and how well it integrates in a distributed file 
++system appear to be the problems to focus on. Or BOINC like approaches 
++if there is no integrated DFS. Anyone have operational data on these 
++approaches?</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078391"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078391">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078391); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078391, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078391" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078391);" title="Link to comment by Theo">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078391" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078391); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078391, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078391"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078391"></li>            <li id="comment-11078390">  </li><li id="dsq-comment-11078390" data-dsq-comment-id="11078390" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Patrick Ball's profile">      <a href="http://disqus.com/guest/0fdece3deaec55811c57381701e800d1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078390, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078390" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Patrick Ball</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078390); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078390); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078390">                <div class="dsq-comment-text" id="dsq-comment-text-11078390">        <p></p><p></p><br><p>the first two parts really set the stage ... Part 3?</p><br><p>:)</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078390"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078390">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078390); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078390, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078390" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078390);" title="Link to comment by Patrick Ball">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078390" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078390); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078390, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078390"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078390"></li>            <li id="comment-11078389">  </li><li id="dsq-comment-11078389" data-dsq-comment-id="11078389" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Soo..'s profile">      <a href="http://disqus.com/guest/a652f3e673b4f32fe71b9aa9c63b39d9/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078389, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078389" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Soo..</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078389); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078389); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078389">                <div class="dsq-comment-text" id="dsq-comment-text-11078389">        <p></p><p>What about that Part 3?  :)</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078389"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078389">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078389); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078389, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078389" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078389);" title="Link to comment by Soo..">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078389" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078389); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078389, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078389"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078389"></li>            <li id="comment-11078388">  </li><li id="dsq-comment-11078388" data-dsq-comment-id="11078388" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078388, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078388" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078388); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078388); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078388">                <div class="dsq-comment-text" id="dsq-comment-text-11078388">        <p></p><p>Update (7-24-07): I’ve made some important bug fixes to the scripts to address issues mentioned in the comments.</p><br><p>Specific changes made:</p><br>&lt;ul&gt;<br>&lt;li&gt;fixed lamuser home directory permissions bug&lt;/li&gt;<br>&lt;li&gt;fixed section of <a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a> which clobbered existing rsa keys on the client machine&lt;/li&gt;<br>&lt;li&gt;Updated calls of AWS python EC2 library to use API version 2007-01-19<br><a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=552&amp;categoryID=85" rel="nofollow">http://developer.amazonwebserv...</a>&lt;/li&gt;<br>&lt;li&gt;fixed mpdboot issue by using amazon internal DNS names in hosts files&lt;/li&gt;<br>&lt;li&gt;scripts should now work on windows/cygwin client environments&lt;/li&gt;<br>&lt;/ul&gt;<br><p>After
++ I run some benchmarks, I'm hoping to find some time to add LAM and 
++OpenMPI to the EC2 image along with NFS configuration, C3 cluster tools,
++ Ganglia, and a benchmarking package.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078388"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078388">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078388); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078388, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078388" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078388);" title="Link to comment by Pete">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078388" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078388); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078388, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078388"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078388"></li>            <li id="comment-11078387">  </li><li id="dsq-comment-11078387" data-dsq-comment-id="11078387" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078387, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078387" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078387); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078387); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078387">                <div class="dsq-comment-text" id="dsq-comment-text-11078387">        <p></p><p>Ralph,</p><br><p>More
++ good points. I've been tied up with some other projects, but it sounds 
++like enough feedback is in to make a revised version of the image and 
++scripts. I expect the latency to vary a bit depending on the random EC2 
++network topology when a cluster is launched...(instances on the same box
++ vs. over ethernet) that might explain the ringtest.  The mutual ssh 
++access was set up since we do a lot of file/data shuffling between nodes
++ outside of MPI.</p><br><p>Thanks again, looking forward to hearing how the regression test system works out.</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078387"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078387">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078387); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078387, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078387" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078387);" title="Link to comment by Pete">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078387" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078387); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078387, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078387"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078387"></li>            <li id="comment-11078386">  </li><li id="dsq-comment-11078386" data-dsq-comment-id="11078386" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Ralph Giles's profile">      <a href="http://disqus.com/guest/ba607955ce29fde652c179bbe9710f63/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078386, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078386" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://advogato.org/person/rillian" target="_blank" class="dsq-commenter-name" rel="nofollow">Ralph Giles</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078386); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078386); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078386">                <div class="dsq-comment-text" id="dsq-comment-text-11078386">        <p></p><p>Yeah, that would work better. Some more detailed comments:</p><br>&lt;ul&gt;<br>&lt;li&gt;<p>Your image has /home/lamuser/.mpd.conf owned by root. I had to chown it to lamuser before I could start mpd.</p>&lt;/li&gt;<br>&lt;li&gt;<p>You
++ script passes the public dns names for the nodes into mpd.hosts. For 
++that to work, a hole has to be opened in the firewall for the ports the 
++mpi daemon is using. A simpler solution is to just pass the internal dns
++ names. Then all the traffic happens behind the firewall, which probably
++ also improves latency. (Although my ringtest was noticably slower than 
++yours, averaging 2.2e-3 seconds/loop so who knows?)</p>&lt;/li&gt;<br>&lt;li&gt;<p>I
++ was surprised that when I originally ran ec2-add-keypair in the EC2 
++tutorial that it uploaded the public key (ok) and printed out the 
++private key (ok I guess) but didn't print out the public key locally 
++(weird). Your scripts seem to assume the public key is available as 
++id_rsa.pub on the client machine. Shouldn't this first be copied either 
++from /root/.ssh/authorized_keys on the master node (as installed by 
++amazon) or retrieved through the query interface?</p>&lt;/li&gt;<br>&lt;/ul&gt;<br><p>Is
++ the mutual ssh access required for more than just launching the MPI 
++daemon? If all subsequent traffic goes through the mpi daemons, starting
++ mpd from the client machine, or automatically from the init scripts 
++after pulling mpd.hosts from S3 would save the whole trouble, including 
++uploading the private key at all.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078386"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078386">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078386); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078386, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078386" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078386);" title="Link to comment by Ralph Giles">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078386" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078386); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078386, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078386"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078386"></li>            <li id="comment-11078385">  </li><li id="dsq-comment-11078385" data-dsq-comment-id="11078385" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078385, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078385" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078385); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078385); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078385">                <div class="dsq-comment-text" id="dsq-comment-text-11078385">        <p></p><p>Ralph,</p><br><p>Good catch.  Thanks for pointing that out. I just lifted those passwordless ssh lines straight from an <a href="http://www.google.com/search?hl=en&amp;safe=off&amp;client=firefox-a&amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;hs=b16&amp;q=cp+id_rsa.pub+password++ssh+mpi+id_rsa&amp;btnG=Search" rel="nofollow">MPI tutorial</a>.</p><br><p>This might solve the clobbering as well (from <a href="http://www.maclife.com/forums/topic/61520" rel="nofollow">http://www.maclife.com/forums/topic/61520</a>):</p><br><p><code>cat id_rsa.pub &gt;&gt; .ssh/authorized_keys</code></p><br><p>"The
++ above command will create the "authorized_keys" file in the ".ssh" 
++directory if that file doesn't already exist, and it will append the new
++ id_rsa.pub file to it if it does already exist."</p><br><p>I'll add 
++that change to the scripts.  Good luck with the regression cluster, I 
++heard Oracle developers do something like that using Condor on otherwise
++ idle desktops (see <a href="http://www.cs.wisc.edu/condor/doc/nmi-lisa2006-slides.pdf" rel="nofollow">http://www.cs.wisc.edu/condor/doc/nmi-lisa2006-slides.pdf</a>).</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078385"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078385">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078385); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078385, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078385" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078385);" title="Link to comment by Pete">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078385" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078385); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078385, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078385"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078385"></li>            <li id="comment-11078384">  </li><li id="dsq-comment-11078384" data-dsq-comment-id="11078384" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Ralph Giles's profile">      <a href="http://disqus.com/guest/ba607955ce29fde652c179bbe9710f63/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078384, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078384" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://advogato.org/person/rillian" target="_blank" class="dsq-commenter-name" rel="nofollow">Ralph Giles</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078384); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078384); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078384">                <div class="dsq-comment-text" id="dsq-comment-text-11078384">        <p></p><p>===== DO NOT USE THESE SCRIPTS! =====</p><br><p>This section of <a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a> is a bit problematic:</p><br><p>os.system('cp %s ~/id_rsa.pub' % KEY_LOCATION )<br>os.system('cp ~/id_rsa.pub ~/.ssh/id_rsa')</p><br><p>This
++ will clobber any existing rsa key on the initiating machine's account, 
++and with break normal auth on the next login if you have a different 
++default rsa key!</p><br><p>The script should instead copy the private key directly from KEY_LOCATION to the nodes.</p><br><p>===== DO NOT USE THESE SCRIPTS! =====</p><br><p>Otherwise,
++ way cool. Thanks for putting this tutorial together. We're trying EC2 
++clusters out as a way to get quicker feedback from regression tests 
++after changes to our software. Unfortunately, with the one hour 
++granularity I don't think it will be price competitive. We want 20-100 
++nodes for about 5 minutes at a time.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078384"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078384">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078384); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078384, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078384" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078384);" title="Link to comment by Ralph Giles">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078384" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078384); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078384, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078384"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078384"></li>            <li id="comment-11078383">  </li><li id="dsq-comment-11078383" data-dsq-comment-id="11078383" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078383, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078383" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078383); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078383); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078383">                <div class="dsq-comment-text" id="dsq-comment-text-11078383">        <p></p><p>Mike
++ Cariaso modified my scripts to fix some path issues and got it working 
++on a windows laptop, he might have also fixed some other errors I didn't
++ notice.  I haven't had a chance to try them yet, but you can download 
++the modified scripts here:</p><br><p><a href="http://mpiblast.pbwiki.com/AmazonEC2" rel="nofollow">http://mpiblast.pbwiki.com/AmazonEC2</a></p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078383"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078383">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078383); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078383, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078383" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078383);" title="Link to comment by Pete">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078383" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078383); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078383, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078383"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078383"></li>            <li id="comment-11078382">  </li><li id="dsq-comment-11078382" data-dsq-comment-id="11078382" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Michael Creel's profile">      <a href="http://disqus.com/guest/464cf568b5b1dc355cd4dc676d32dda6/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078382, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078382" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://pareto.uab.es/mcreel/blog.html" target="_blank" class="dsq-commenter-name" rel="nofollow">Michael Creel</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078382); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078382); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078382">                <div class="dsq-comment-text" id="dsq-comment-text-11078382">        <p></p><p>Yep,
++ I run the mpi-config script right after creating the instances, doing 
++just what you suggest. The fact that the instances start up at all seems
++ to me to mean that the keypair information is ok. Do you know if anyone
++ but you has been able to launch a cluster? Very cool stuff. I'm going 
++to be looking into making a Debian AMI that works the same way.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078382"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078382">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078382); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078382, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078382" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078382);" title="Link to comment by Michael Creel">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078382" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078382); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078382, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078382"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078382"></li>            <li id="comment-11078381">  </li><li id="dsq-comment-11078381" data-dsq-comment-id="11078381" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078381, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078381" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078381); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078381); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078381">                <div class="dsq-comment-text" id="dsq-comment-text-11078381">        <p></p><p>Michael,</p><br><p>I
++ haven't had the scripts prompt me for a password before, are you 
++running them from your local machine? The mpi-config script expects the 
++keyname and keypair location to match what was used to start the 
++instance.  Take a look at your <a href="http://ec2config.py/" rel="nofollow">EC2config.py</a>
++ file and make sure the instances were all started with your own keypair
++ (i used the gsg keypair I created on my laptop in the Amazon "getting 
++started guide" tutorial):</p><br><p><br><br></p><br><p>AWS_ACCESS_KEY_ID = ‘YOUR_KEY_ID_HERE’<br>AWS_SECRET_ACCESS_KEY = ‘YOUR_KEY_HERE’<br>MASTER_IMAGE_ID = "ami-3e836657"<br>IMAGE_ID = "ami-3e836657"<br>KEYNAME = "gsg-keypair"<br>KEY_LOCATION = "~/id_rsa-gsg-keypair"<br>DEFAULT_CLUSTER_SIZE = 5</p><br><p><br><br></p><br><p>I'm
++ working on an updated version of the scripts and EC2 image which should
++ make things a bit cleaner.  Sorry the code is ugly right now in terms 
++of error handling...I just wanted to toss something together to get 
++people started :)</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078381"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078381">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078381); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078381, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078381" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078381);" title="Link to comment by Pete">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078381" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078381); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078381, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078381"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078381"></li>            <li id="comment-11078380">  </li><li id="dsq-comment-11078380" data-dsq-comment-id="11078380" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Michael Creel's profile">      <a href="http://disqus.com/guest/464cf568b5b1dc355cd4dc676d32dda6/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078380, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078380" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://pareto.uab.es/mcreel/blog.html" target="_blank" class="dsq-commenter-name" rel="nofollow">Michael Creel</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078380); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078380); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078380">                <div class="dsq-comment-text" id="dsq-comment-text-11078380">        <p></p><p>A little report on my trial.<br>1) ./<a href="http://ec2-start_cluster.py/" rel="nofollow">ec2-start_cluster.py</a>
++ is not always successful in getting the requested number of nodes to 
++come up. The instances sometimes have status "terminated" before 
++anything is done with them.</p><br><p>2) When the 5 nodes all come up, I still get a problem with ./<a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a> requesting a root password:</p><br><p>michael@yosemite:~/ec2/AmazonEC2_MPI_scripts$ ./<a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a></p><br><p>---- MPI Cluster Details ----<br>Numer of nodes = 5<br>Instance= i-e39c7a8a hostname= <a href="http://ec2-72-44-45-138.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-138.z-2.compute-1...</a> state= running<br>Instance= i-e29c7a8b hostname= <a href="http://ec2-72-44-45-185.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-185.z-2.compute-1...</a> state= running<br>Instance= i-e59c7a8c hostname= <a href="http://ec2-72-44-45-186.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-186.z-2.compute-1...</a> state= running<br>Instance= i-e49c7a8d hostname= <a href="http://ec2-72-44-45-122.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-122.z-2.compute-1...</a> state= running<br>Instance= i-e79c7a8e hostname= <a href="http://ec2-72-44-45-60.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-60.z-2.compute-1....</a> state= running</p><br><p>The master node is <a href="http://ec2-72-44-45-138.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-138.z-2.compute-1...</a></p><br><p>Writing out mpd.hosts file<br>nslookup <a href="http://ec2-72-44-45-138.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-138.z-2.compute-1...</a><br>(0, 'Server:\t\t158.109.0.1\nAddress:\t158.109.0.1#53\n\nNon-authoritative answer:\nName:\<a href="http://tec2-72-44-45-138.z-2.compute-1.amazonaws.com/" rel="nofollow">tec2-72-44-45-138.z-2.compute-...</a>\nAddress: 72.44.45.138\n')<br>nslookup <a href="http://ec2-72-44-45-185.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-185.z-2.compute-1...</a><br>(0, 'Server:\t\t158.109.0.1\nAddress:\t158.109.0.1#53\n\nNon-authoritative answer:\nName:\<a href="http://tec2-72-44-45-185.z-2.compute-1.amazonaws.com/" rel="nofollow">tec2-72-44-45-185.z-2.compute-...</a>\nAddress: 72.44.45.185\n')<br>nslookup <a href="http://ec2-72-44-45-186.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-186.z-2.compute-1...</a><br>(0, 'Server:\t\t158.109.0.1\nAddress:\t158.109.0.1#53\n\nNon-authoritative answer:\nName:\<a href="http://tec2-72-44-45-186.z-2.compute-1.amazonaws.com/" rel="nofollow">tec2-72-44-45-186.z-2.compute-...</a>\nAddress: 72.44.45.186\n')<br>nslookup <a href="http://ec2-72-44-45-122.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-122.z-2.compute-1...</a><br>(0, 'Server:\t\t158.109.0.1\nAddress:\t158.109.0.1#53\n\nNon-authoritative answer:\nName:\<a href="http://tec2-72-44-45-122.z-2.compute-1.amazonaws.com/" rel="nofollow">tec2-72-44-45-122.z-2.compute-...</a>\nAddress: 72.44.45.122\n')<br>nslookup <a href="http://ec2-72-44-45-60.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-60.z-2.compute-1....</a><br>(0, 'Server:\t\t158.109.0.1\nAddress:\t158.109.0.1#53\n\nNon-authoritative answer:\nName:\<a href="http://tec2-72-44-45-60.z-2.compute-1.amazonaws.com/" rel="nofollow">tec2-72-44-45-60.z-2.compute-1...</a>\nAddress: 72.44.45.60\n')<br>Warning: Permanently added '<a href="http://ec2-72-44-45-138.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-138.z-2.compute-1...</a>,72.44.45.138' (RSA) to the list of known hosts.<br>id_rsa.pub                                                                             100% 1675     1.6KB/s   00:00<br>root@ec2<a href="http://-72-44-45-138.z-2.compute-1.amazonaws.com/" rel="nofollow">-72-44-45-138.z-2.compute-1.am...</a>'s password:</p><br><p>This is as far as I can get at the moment. Looks like a minor problem. Cheers, M.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078380"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078380">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078380); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078380, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078380" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078380);" title="Link to comment by Michael Creel">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078380" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078380); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078380, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078380"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078380"></li>            <li id="comment-11078379">  </li><li id="dsq-comment-11078379" data-dsq-comment-id="11078379" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Michael Creel's profile">      <a href="http://disqus.com/guest/464cf568b5b1dc355cd4dc676d32dda6/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078379, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078379" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://pareto.uab.es/mcreel/blog.html" target="_blank" class="dsq-commenter-name" rel="nofollow">Michael Creel</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078379); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078379); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078379">                <div class="dsq-comment-text" id="dsq-comment-text-11078379">        <p></p><p>One question, do you know if something like an NFS shared home directory is possible. Using S3, possibly?</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078379"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078379">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078379); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078379, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078379" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078379);" title="Link to comment by Michael Creel">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078379" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078379); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078379, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078379"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078379"></li>            <li id="comment-11078378">  </li><li id="dsq-comment-11078378" data-dsq-comment-id="11078378" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Michael Creel's profile">      <a href="http://disqus.com/guest/464cf568b5b1dc355cd4dc676d32dda6/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078378, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078378" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://pareto.uab.es/mcreel/blog.html" target="_blank" class="dsq-commenter-name" rel="nofollow">Michael Creel</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078378); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078378); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078378">                <div class="dsq-comment-text" id="dsq-comment-text-11078378">        <p></p><p>Excellent
++ stuff! I've gotten started with EC2 and I'll be trying your images out 
++soon. I doubt that I'll be trying to make ParallelKnoppix work on EC2, 
++because your approach is the right one, I think. PK is designed to use 
++when the hardware is not known ahead of time. With EC2, the hardware is 
++known, so a tailor-made image is the way to go. Your scripts allow an 
++on-demand cluster to be created in minutes, and that's all that PK 
++offers, anyway. PK usually needs some remastering so that users can add 
++their own packages. Re-bundling an EC2 image is completely analogous. 
++I'm planning on doing just that, probably starting with your images, and
++ doing some testing of latency on tasks that require different degrees 
++of internode communication. Thanks for all this, it'll make the rest an 
++easy job.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078378"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078378">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078378); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078378, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078378" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078378);" title="Link to comment by Michael Creel">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078378" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078378); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078378, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078378"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078378"></li>      </ul>        <div id="dsq-pagination">      <ul id="dsq-footer" class="dsq-clearfix">        <div id="dsq-subscribe">            <li>      <a href="#" class="dsq-subscribe-email" onclick="return DISQUS.dtpl.actions.fire('thread.subscribe');">        <span class="dsq-font">M</span> <em>Subscribe by email</em>      </a>    </li>    <li>    <a href="http://datawranglingblog.disqus.com/mpi_cluster_with_python_and_amazon_ec2_part_2_of_3/latest.rss" class="dsq-subscribe-rss">      <span class="dsq-font">S</span> <em>RSS</em>    </a>  </li>    </div>  </ul>    </div>          <h3 class="dsq-h3-reactions">Reactions</h3>    <ul id="dsq-reactions" class="dsq-reactions dsq-clearfix">                <li id="dsq-reaction-12269320">    <div class="dsq-reaction-avatar dsq-avatar dsq-tt" data-dsq-content-id="dsq-reaction-tooltip-12269320">                    <a target="_blank" href="http://twitter.com/mndoci/status/3229425239">                    <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/3719866772_11f68524f0_normal.xml">                    </a>          </div>    <div id="dsq-reaction-tooltip-12269320" class="dsq-reaction-tooltip" style="display:none">      <div class="dsq-reaction-tooltip-container">        <div class="dsq-reaction-body">@mjbommar MPI on EC2 http://bit.ly/13BcCR  and http://arxiv.org/pdf/0901.0029</div>        <div class="dsq-reaction-date">3 years ago</div>        <div class="dsq-reaction-user">@mndoci</div>      </div>    </div>  </li>          </ul>                  <div class="dsq-trackback-url">      Trackback URL      <input onclick="this.select()" readonly="true" value="http://disqus.com/forums/datawranglingblog/mpi_cluster_with_python_and_amazon_ec2_part_2_of_3/trackback/">    </div>      </div><div>  </div></div>
++<script type="text/javascript">
++  /**
++    * var disqus_identifier; [Optional but recommended: Define a unique identifier (e.g. post id or slug) for this thread] 
++    */
++  (function() {
++   var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
++   dsq.src = 'http://datawranglingblog.disqus.com/embed.js';
++   (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
++  })();
++</script>
++<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript=datawranglingblog">comments powered by Disqus.</a></noscript>
++<a href="http://disqus.com/" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>
++<!-- End Disqus Comments -->
++
++	
++			  <div class="footer">
++			    <div class="contact">
++			      <p>
++			        Copyright © 2007-2012 Data Wrangling, LLC<br>
++			        info@datawrangling.com
++			      </p>
++						<p>
++							Powered by <a href="http://github.com/">Github, </a><a href="http://jekyllrb.com/">Jekyll</a>, &amp; <a href="http://www.sinatrarb.com/">Sinatra</a>.  Hosted on <a href="http://heroku.com/">Heroku</a>.
++						</p>	
++			    </div>
++			    <div class="contact">
++			      <!-- <p>
++			        <a href="http://github.com/datawrangling/">github.com/datawrangling</a><br />
++			        <a href="http://twitter.com/peteskomoroch/">twitter.com/peteskomoroch</a><br />
++			        <a href="http://linkedin.com/peterskomoroch/">linkedin.com/peterskomoroch</a>
++			      </p> -->
++			    </div>
++			    <div class="rss">
++			      <a href="http://feeds.feedburner.com/DataWrangling">
++			        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/feed-icon32x32.png" alt="Subscribe to RSS Feed">
++			      </a>
++			    </div>
++			  </div>
++	
++			</div>
++			
++		</div>	
++
++
++
++	</div>
++</div>
++
++
++<!-- Google Analytics -->
++<script type="text/javascript">
++var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
++document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
++</script><script src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/ga.js" type="text/javascript"></script>
++<script type="text/javascript">
++var pageTracker = _gat._getTracker("UA-3430463-1");
++pageTracker._trackPageview();
++</script>
++<!-- Google Analytics end -->
++
++
++
++
++
++<iframe src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/def.html" style="position: absolute; top: -2000px; left: 0px;" id="easyXDM_DISQUS_net_default5937_provider" name="easyXDM_DISQUS_net_default5937_provider" frameborder="0"></iframe></body></html>
+\ No newline at end of file
+Index: ../trunk-jpl/externalpackages/ec2api
+===================================================================
+--- ../trunk-jpl/externalpackages/ec2api	(revision 13841)
++++ ../trunk-jpl/externalpackages/ec2api	(revision 13842)
+
+Property changes on: ../trunk-jpl/externalpackages/ec2api
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,3 ##
++ec2-api-tools.zip
++ec2-api-tools-*
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13842-13843.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13842-13843.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13842-13843.diff	(revision 13980)
@@ -0,0 +1,49 @@
+Index: ../trunk-jpl/externalpackages/ec2ami/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/ec2ami/install.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/ec2ami/install.sh	(revision 13843)
+@@ -0,0 +1,12 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf ec2-api-tools.zip
++rm -rf ec2-api-tools-1.4.0.7
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/ec2-api-tools.zip' 'ec2-api-tools.zip'
++
++#Untar 
++unzip ec2-api-tools.zip
+
+Property changes on: ../trunk-jpl/externalpackages/ec2ami/install.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/externalpackages/ec2ami/ec2-ami-tools.zip
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/externalpackages/ec2ami/ec2-ami-tools.zip
+===================================================================
+--- ../trunk-jpl/externalpackages/ec2ami/ec2-ami-tools.zip	(revision 13842)
++++ ../trunk-jpl/externalpackages/ec2ami/ec2-ami-tools.zip	(revision 13843)
+
+Property changes on: ../trunk-jpl/externalpackages/ec2ami/ec2-ami-tools.zip
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/externalpackages/ec2ami
+===================================================================
+--- ../trunk-jpl/externalpackages/ec2ami	(revision 13842)
++++ ../trunk-jpl/externalpackages/ec2ami	(revision 13843)
+
+Property changes on: ../trunk-jpl/externalpackages/ec2ami
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,3 ##
++ec2-ami-tools-*
++*.zip
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13843-13844.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13843-13844.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13843-13844.diff	(revision 13980)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/externalpackages/ec2ami/ec2-ami-tools.zip
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13844-13845.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13844-13845.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13844-13845.diff	(revision 13980)
@@ -0,0 +1,48 @@
+Index: ../trunk-jpl/externalpackages/android/android-sdk
+===================================================================
+--- ../trunk-jpl/externalpackages/android/android-sdk	(revision 13844)
++++ ../trunk-jpl/externalpackages/android/android-sdk	(revision 13845)
+
+Property changes on: ../trunk-jpl/externalpackages/android/android-sdk
+___________________________________________________________________
+Modified: svn:ignore
+## -1,2 +1,3 ##
++*.zip
+ install-sdk
+ install-ant
+Index: ../trunk-jpl/externalpackages/android/android-ndk
+===================================================================
+--- ../trunk-jpl/externalpackages/android/android-ndk	(revision 13844)
++++ ../trunk-jpl/externalpackages/android/android-ndk	(revision 13845)
+
+Property changes on: ../trunk-jpl/externalpackages/android/android-ndk
+___________________________________________________________________
+Modified: svn:ignore
+## -1 +1,3 ##
++android-ndk-r*
++*.bz2
+ install
+Index: ../trunk-jpl/externalpackages/gmake
+===================================================================
+--- ../trunk-jpl/externalpackages/gmake	(revision 13844)
++++ ../trunk-jpl/externalpackages/gmake	(revision 13845)
+
+Property changes on: ../trunk-jpl/externalpackages/gmake
+___________________________________________________________________
+Modified: svn:ignore
+## -1,2 +1,3 ##
++*.gz
+ install
+ src
+Index: ../trunk-jpl/externalpackages/esmf
+===================================================================
+--- ../trunk-jpl/externalpackages/esmf	(revision 13844)
++++ ../trunk-jpl/externalpackages/esmf	(revision 13845)
+
+Property changes on: ../trunk-jpl/externalpackages/esmf
+___________________________________________________________________
+Modified: svn:ignore
+## -1,2 +1,3 ##
++esmf-gfortran*
+ esmf
+ *.gz
Index: /issm/oecreview/Archive/13393-13976/ISSM-13845-13846.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13845-13846.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13845-13846.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/configs/config-macosx64-larour.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-larour.sh	(revision 13845)
++++ ../trunk-jpl/configs/config-macosx64-larour.sh	(revision 13846)
+@@ -9,7 +9,6 @@
+ 	--prefix=$ISSM_DIR \
+ 	--with-matlab-dir=$MATLAB_DIR \
+ 	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
+-	--with-python-version=$pythonversion \
+ 	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13846-13847.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13846-13847.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13846-13847.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/etc/environment.sh
+===================================================================
+--- ../trunk-jpl/etc/environment.sh	(revision 13846)
++++ ../trunk-jpl/etc/environment.sh	(revision 13847)
+@@ -2,7 +2,7 @@
+ 
+ pathprepend(){ #{{{
+ 	if [ -d "$1" ] && [[ ":$PATH:" != *":$1:"* ]]; then
+-		PATH="$1:$PATH"
++		export PATH="$1:$PATH"
+ 	fi
+ } #}}}
+ pathappend(){ #{{{
+@@ -101,7 +101,7 @@
+ pathappend "$CPPCHECK_DIR/bin"
+ 
+ GDAL_DIR="$ISSM_DIR/externalpackages/gdal/install"
+-pathprepend "$GDAL_DIR/bin:$PATH"
++pathprepend "$GDAL_DIR/bin"
+ libpathappend "$GDAL_DIR/lib"
+ 
+ MERCURIAL_DIR="$ISSM_DIR/externalpackages/mercurial/install"
Index: /issm/oecreview/Archive/13393-13976/ISSM-13847-13848.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13847-13848.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13847-13848.diff	(revision 13980)
@@ -0,0 +1,52 @@
+Index: ../trunk-jpl/externalpackages/gdal/install_macosx.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gdal/install_macosx.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/gdal/install_macosx.sh	(revision 13848)
+@@ -0,0 +1,41 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf src
++rm -rf install
++rm -rf gdal-1.6.0
++mkdir src install
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/gdal-1.6.0.tar.gz' 'gdal-1.6.0.tar.gz'
++
++#Untar 
++tar -zxvf  gdal-1.6.0.tar.gz
++
++#Move gdal into src directory
++mv gdal-1.6.0/* src
++rm -rf gdal-1.6.0
++
++#Configure gdal
++cd src
++./configure \
++	--prefix="$ISSM_DIR/externalpackages/gdal/install" \
++	--without-python \
++	--without-png \
++	--with-netcdf=no \
++	--with-jasper=no \
++	--without-ld-shared \
++	--with-unix-stdio-64=no \
++	--with-expat-lib=/usr/lib64/libexpat.so
++
++#Patch GDALmake.opt
++#patch GDALmake.opt ../GDALmake.opt.patch
++
++#Compile and install gdal
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/gdal/install_macosx.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13848-13849.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13848-13849.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13848-13849.diff	(revision 13980)
@@ -0,0 +1,65 @@
+Index: ../trunk-jpl/externalpackages/gdal/install_astrid.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gdal/install_astrid.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/gdal/install_astrid.sh	(revision 13849)
+@@ -0,0 +1,41 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf src
++rm -rf install
++rm -rf gdal-1.6.0
++mkdir src install
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/gdal-1.6.0.tar.gz' 'gdal-1.6.0.tar.gz'
++
++#Untar 
++tar -zxvf  gdal-1.6.0.tar.gz
++
++#Move gdal into src directory
++mv gdal-1.6.0/* src
++rm -rf gdal-1.6.0
++
++#Configure gdal
++cd src
++./configure \
++	--prefix="$ISSM_DIR/externalpackages/gdal/install" \
++	--without-python \
++	--without-png \
++	--with-netcdf=no \
++	--with-jasper=no \
++	--without-ld-shared \
++	--with-unix-stdio-64=no \
++	--with-expat-lib=/usr/lib64/libexpat.so
++
++#Patch GDALmake.opt
++patch GDALmake.opt ../GDALmake.opt.patch.2
++
++#Compile and install gdal
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/gdal/install_astrid.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/externalpackages/gdal/GDALmake.opt.patch.astrid
+===================================================================
+--- ../trunk-jpl/externalpackages/gdal/GDALmake.opt.patch.astrid	(revision 0)
++++ ../trunk-jpl/externalpackages/gdal/GDALmake.opt.patch.astrid	(revision 13849)
+@@ -0,0 +1,8 @@
++31c31
++< LIBS	=	$(SDE_LIB) -I/usr/include -lsqlite3 -L/usr/lib -lexpat -ljpeg -lz  -lm -lrt -ldl  $(KAK_LIBS) $(DWG_LIBS) $(CURL_LIB) \
++---
++> LIBS	=	$(SDE_LIB) -I/usr/include -lsqlite3 -L/usr/lib64 -lexpat -ljpeg -lz  -lm -lrt -ldl  $(KAK_LIBS) $(DWG_LIBS) $(CURL_LIB) \
++225c225
++< CURL_LIB	=	-L/usr/kerberos/lib64 -lcurl -ldl -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lidn -lssl -lcrypto -lz  
++---
++> CURL_LIB	=	-L/usr/lib64 -lcurl -ldl -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lidn -lssl -lcrypto -lz  
Index: /issm/oecreview/Archive/13393-13976/ISSM-13849-13850.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13849-13850.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13849-13850.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/externalpackages/gdal/install_astrid.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gdal/install_astrid.sh	(revision 13849)
++++ ../trunk-jpl/externalpackages/gdal/install_astrid.sh	(revision 13850)
+@@ -30,7 +30,7 @@
+ 	--with-expat-lib=/usr/lib64/libexpat.so
+ 
+ #Patch GDALmake.opt
+-patch GDALmake.opt ../GDALmake.opt.patch.2
++patch GDALmake.opt ../GDALmake.opt.patch.astrid
+ 
+ #Compile and install gdal
+ if [ $# -eq 0 ]; then
Index: /issm/oecreview/Archive/13393-13976/ISSM-13850-13851.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13850-13851.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13850-13851.diff	(revision 13980)
@@ -0,0 +1,333 @@
+Index: ../trunk-jpl/externalpackages/gdal/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gdal/install.sh	(revision 13850)
++++ ../trunk-jpl/externalpackages/gdal/install.sh	(revision 13851)
+@@ -1,41 +0,0 @@
+-#!/bin/bash
+-set -eu
+-
+-#Some cleanup
+-rm -rf src
+-rm -rf install
+-rm -rf gdal-1.6.0
+-mkdir src install
+-
+-#Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/gdal-1.6.0.tar.gz' 'gdal-1.6.0.tar.gz'
+-
+-#Untar 
+-tar -zxvf  gdal-1.6.0.tar.gz
+-
+-#Move gdal into src directory
+-mv gdal-1.6.0/* src
+-rm -rf gdal-1.6.0
+-
+-#Configure gdal
+-cd src
+-./configure \
+-	--prefix="$ISSM_DIR/externalpackages/gdal/install" \
+-	--without-python \
+-	--without-png \
+-	--with-netcdf=no \
+-	--with-jasper=no \
+-	--without-ld-shared \
+-	--with-unix-stdio-64=no \
+-	--with-expat-lib=/usr/lib64/libexpat.so
+-
+-#Patch GDALmake.opt
+-patch GDALmake.opt ../GDALmake.opt.patch
+-
+-#Compile and install gdal
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
+-make install
+Index: ../trunk-jpl/externalpackages/gdal/install-murdo.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gdal/install-murdo.sh	(revision 13850)
++++ ../trunk-jpl/externalpackages/gdal/install-murdo.sh	(revision 13851)
+@@ -1,39 +0,0 @@
+-#!/bin/bash
+-set -eu
+-
+-#Some cleanup
+-rm -rf src
+-rm -rf install
+-rm -rf gdal-1.6.0
+-mkdir src install
+-
+-#Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/gdal-1.6.0.tar.gz' 'gdal-1.6.0.tar.gz'
+-
+-#Untar 
+-tar -zxvf  gdal-1.6.0.tar.gz
+-
+-#Move gdal into src directory
+-mv gdal-1.6.0/* src
+-rm -rf gdal-1.6.0
+-
+-#Configure gdal
+-cd src
+-./configure --prefix="$ISSM_DIR/externalpackages/gdal/install" \
+-	--without-python \
+-	--without-png \
+-	--with-netcdf=no \
+-	--with-jasper=no \
+-	--without-ld-shared \
+-	--with-unix-stdio-64=no 
+-
+-#Patch GDALmake.opt
+-patch GDALmake.opt ../GDALmake.opt.patch
+-
+-#Compile and install gdal
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
+-make install
+Index: ../trunk-jpl/externalpackages/gdal/install_astrid.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gdal/install_astrid.sh	(revision 13850)
++++ ../trunk-jpl/externalpackages/gdal/install_astrid.sh	(revision 13851)
+@@ -1,41 +0,0 @@
+-#!/bin/bash
+-set -eu
+-
+-#Some cleanup
+-rm -rf src
+-rm -rf install
+-rm -rf gdal-1.6.0
+-mkdir src install
+-
+-#Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/gdal-1.6.0.tar.gz' 'gdal-1.6.0.tar.gz'
+-
+-#Untar 
+-tar -zxvf  gdal-1.6.0.tar.gz
+-
+-#Move gdal into src directory
+-mv gdal-1.6.0/* src
+-rm -rf gdal-1.6.0
+-
+-#Configure gdal
+-cd src
+-./configure \
+-	--prefix="$ISSM_DIR/externalpackages/gdal/install" \
+-	--without-python \
+-	--without-png \
+-	--with-netcdf=no \
+-	--with-jasper=no \
+-	--without-ld-shared \
+-	--with-unix-stdio-64=no \
+-	--with-expat-lib=/usr/lib64/libexpat.so
+-
+-#Patch GDALmake.opt
+-patch GDALmake.opt ../GDALmake.opt.patch.astrid
+-
+-#Compile and install gdal
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
+-make install
+Index: ../trunk-jpl/externalpackages/gdal/install_macosx.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gdal/install_macosx.sh	(revision 13850)
++++ ../trunk-jpl/externalpackages/gdal/install_macosx.sh	(revision 13851)
+@@ -1,41 +0,0 @@
+-#!/bin/bash
+-set -eu
+-
+-#Some cleanup
+-rm -rf src
+-rm -rf install
+-rm -rf gdal-1.6.0
+-mkdir src install
+-
+-#Download from ISSM server
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/gdal-1.6.0.tar.gz' 'gdal-1.6.0.tar.gz'
+-
+-#Untar 
+-tar -zxvf  gdal-1.6.0.tar.gz
+-
+-#Move gdal into src directory
+-mv gdal-1.6.0/* src
+-rm -rf gdal-1.6.0
+-
+-#Configure gdal
+-cd src
+-./configure \
+-	--prefix="$ISSM_DIR/externalpackages/gdal/install" \
+-	--without-python \
+-	--without-png \
+-	--with-netcdf=no \
+-	--with-jasper=no \
+-	--without-ld-shared \
+-	--with-unix-stdio-64=no \
+-	--with-expat-lib=/usr/lib64/libexpat.so
+-
+-#Patch GDALmake.opt
+-#patch GDALmake.opt ../GDALmake.opt.patch
+-
+-#Compile and install gdal
+-if [ $# -eq 0 ]; then
+-	make
+-else
+-	make -j $1
+-fi
+-make install
+Index: ../trunk-jpl/externalpackages/gdal/install-macosx64.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gdal/install-macosx64.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/gdal/install-macosx64.sh	(revision 13851)
+@@ -0,0 +1,38 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf src
++rm -rf install
++rm -rf gdal-1.6.0
++mkdir src install
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/gdal-1.6.0.tar.gz' 'gdal-1.6.0.tar.gz'
++
++#Untar 
++tar -zxvf  gdal-1.6.0.tar.gz
++
++#Move gdal into src directory
++mv gdal-1.6.0/* src
++rm -rf gdal-1.6.0
++
++#Configure gdal
++cd src
++./configure \
++	--prefix="$ISSM_DIR/externalpackages/gdal/install" \
++	--without-python \
++	--without-png \
++	--with-netcdf=no \
++	--with-jasper=no \
++	--without-ld-shared \
++	--with-unix-stdio-64=no \
++	--with-expat-lib=/usr/lib64/libexpat.so
++
++#Compile and install gdal
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/gdal/install-macosx64.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/externalpackages/gdal/install-linux64-astrid.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gdal/install-linux64-astrid.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/gdal/install-linux64-astrid.sh	(revision 13851)
+@@ -0,0 +1,41 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf src
++rm -rf install
++rm -rf gdal-1.6.0
++mkdir src install
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/gdal-1.6.0.tar.gz' 'gdal-1.6.0.tar.gz'
++
++#Untar 
++tar -zxvf  gdal-1.6.0.tar.gz
++
++#Move gdal into src directory
++mv gdal-1.6.0/* src
++rm -rf gdal-1.6.0
++
++#Configure gdal
++cd src
++./configure \
++	--prefix="$ISSM_DIR/externalpackages/gdal/install" \
++	--without-python \
++	--without-png \
++	--with-netcdf=no \
++	--with-jasper=no \
++	--without-ld-shared \
++	--with-unix-stdio-64=no \
++	--with-expat-lib=/usr/lib64/libexpat.so
++
++#Patch GDALmake.opt
++patch GDALmake.opt ../GDALmake.opt.patch.astrid
++
++#Compile and install gdal
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/gdal/install-linux64-astrid.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/externalpackages/gdal/install-linux64-murdo.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gdal/install-linux64-murdo.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/gdal/install-linux64-murdo.sh	(revision 13851)
+@@ -0,0 +1,39 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf src
++rm -rf install
++rm -rf gdal-1.6.0
++mkdir src install
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/gdal-1.6.0.tar.gz' 'gdal-1.6.0.tar.gz'
++
++#Untar 
++tar -zxvf  gdal-1.6.0.tar.gz
++
++#Move gdal into src directory
++mv gdal-1.6.0/* src
++rm -rf gdal-1.6.0
++
++#Configure gdal
++cd src
++./configure --prefix="$ISSM_DIR/externalpackages/gdal/install" \
++	--without-python \
++	--without-png \
++	--with-netcdf=no \
++	--with-jasper=no \
++	--without-ld-shared \
++	--with-unix-stdio-64=no 
++
++#Patch GDALmake.opt
++patch GDALmake.opt ../GDALmake.opt.patch
++
++#Compile and install gdal
++if [ $# -eq 0 ]; then
++	make
++else
++	make -j $1
++fi
++make install
+
+Property changes on: ../trunk-jpl/externalpackages/gdal/install-linux64-murdo.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13851-13852.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13851-13852.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13851-13852.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/solutions/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13851)
++++ ../trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13852)
+@@ -134,7 +134,7 @@
+ 	/*Compute solution and adjoint*/
+ 	void (*solutioncore)(FemModel*)=NULL;
+ 	void (*adjointcore)(FemModel*)=NULL;
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	PureCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+ 	AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
+ 	solutioncore(femmodel);
+ 	adjointcore(femmodel);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13852-13853.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13852-13853.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13852-13853.diff	(revision 13980)
@@ -0,0 +1,192 @@
+Index: ../trunk-jpl/configs/config-linux64-astrid-python.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-astrid-python.sh	(revision 13852)
++++ ../trunk-jpl/configs/config-linux64-astrid-python.sh	(revision 13853)
+@@ -1,25 +0,0 @@
+-#!/bin/sh
+-
+-#External packages versions:
+-#petsc 3.1 or 3.2
+-#mpich 1.4
+-
+-./configure \
+- --prefix=$ISSM_DIR \
+- --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+- --with-python-dir=$ISSM_DIR/externalpackages/python/install\
+- --with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/lib/python2.7/site-packages/numpy/core/include/numpy\
+- --with-python-version=2.7\
+- --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+- --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+- --with-mpi-lib="-L$ISSM_DIR/externalpackages/mpich2/install/lib/ -lmpich " \
+- --with-petsc-arch=$ISSM_ARCH \
+- --with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+- --with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+- --with-fortran-lib="-L/usr/lib/gcc/x86_64-redhat-linux/4.1.1/ -lgfortran" \
+- --with-graphics-lib=/usr/lib64/libX11.so \
+- --with-cxxoptflags="-march=opteron -O2 -lutil" \
+- --with-numthreads=32 \
+- --enable-debugging
+Index: ../trunk-jpl/configs/config-macosx-snowleopard-python.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx-snowleopard-python.sh	(revision 13852)
++++ ../trunk-jpl/configs/config-macosx-snowleopard-python.sh	(revision 13853)
+@@ -3,14 +3,11 @@
+ #petsc 3.2
+ #mpich 1.4
+ 
+-pythonversion=2.7
+-
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
+-	--with-python-version=$pythonversion \
+-	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
++	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include/numpy\
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+ 	--with-mpi-lib=" $ISSM_DIR/externalpackages/mpich2/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpl.a " \
+Index: ../trunk-jpl/configs/config-macosx64-larour-nopetsc.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-larour-nopetsc.sh	(revision 13852)
++++ ../trunk-jpl/configs/config-macosx64-larour-nopetsc.sh	(revision 13853)
+@@ -1,13 +1,10 @@
+ #!/bin/sh
+ 
+-pythonversion=3.2
+-
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+ 	--with-matlab-dir=$MATLAB_DIR \
+ 	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
+-	--with-python-version=$pythonversion \
+-	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
++	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Python.framework/Versions/3.2/lib/python3.2/site-packages/numpy/core/include/numpy\
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-math-lib="/usr/lib/libm.dylib" \
+ 	--with-graphics-lib="/usr/X11/lib/libX11.dylib" \
+Index: ../trunk-jpl/configs/config-macosx64-chris-bothapis.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-chris-bothapis.sh	(revision 13852)
++++ ../trunk-jpl/configs/config-macosx64-chris-bothapis.sh	(revision 13853)
+@@ -3,13 +3,11 @@
+ #petsc 3.2
+ #mpich 1.4
+ 
+-pythonversion=2.7
+-
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+ 	--with-matlab-dir=$MATLAB_DIR \
+ 	--with-python-dir=$ISSM_DIR/externalpackages/python/install \
+-	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy\
++	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy\
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+@@ -27,4 +25,3 @@
+ 	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	#--with-fortran-lib="/usr/local/gfortran/lib/gcc/x86_64-apple-darwin10/4.6.2/libgfortran.a" \
+-	#--with-python-version=$pythonversion \
+Index: ../trunk-jpl/configs/config-macosx64-larour-python.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-larour-python.sh	(revision 13852)
++++ ../trunk-jpl/configs/config-macosx64-larour-python.sh	(revision 13853)
+@@ -3,14 +3,11 @@
+ #petsc 3.2
+ #mpich 1.4
+ 
+-pythonversion=2.7
+-
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
+-	--with-python-version=$pythonversion \
+-	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
++	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/lib/python2.7/site-packages/numpy/core/include/numpy\
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+ 	--with-mpi-lib=" $ISSM_DIR/externalpackages/mpich2/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpl.a " \
+Index: ../trunk-jpl/configs/config-macosx-snowleopard-bothapis.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx-snowleopard-bothapis.sh	(revision 13852)
++++ ../trunk-jpl/configs/config-macosx-snowleopard-bothapis.sh	(revision 13853)
+@@ -3,20 +3,12 @@
+ #petsc 3.2
+ #mpich 1.4
+ 
+-#export FCFLAGS=" -m32"
+-#export FFLAGS=" -m32"
+-#export CFLAGS=" -arch i386"
+-#export CXXFLAGS=" -arch i386"
+-
+-pythonversion=2.7
+-
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-matlab-dir=$MATLAB_DIR \
+ 	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
+-	--with-python-version=$pythonversion \
+-	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
++	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include/numpy\
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+ 	--with-mpi-lib=" $ISSM_DIR/externalpackages/mpich2/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpl.a " \
+Index: ../trunk-jpl/configs/config-macosx64-chris-python.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-chris-python.sh	(revision 13852)
++++ ../trunk-jpl/configs/config-macosx64-chris-python.sh	(revision 13853)
+@@ -3,14 +3,11 @@
+ #petsc 3.2
+ #mpich 1.4
+ 
+-pythonversion=2.7
+-
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
+-	--with-python-version=$pythonversion \
+-	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
++	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/lib/python2.7/site-packages/numpy/core/include/numpy\
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+ 	--with-mpi-lib=" $ISSM_DIR/externalpackages/mpich2/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpl.a " \
+Index: ../trunk-jpl/configs/config-linux64-astrid.sh
+===================================================================
+--- ../trunk-jpl/configs/config-linux64-astrid.sh	(revision 13852)
++++ ../trunk-jpl/configs/config-linux64-astrid.sh	(revision 13853)
+@@ -12,7 +12,6 @@
+  --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
+  --with-python-dir=$ISSM_DIR/externalpackages/python/install\
+  --with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/lib/python2.7/site-packages/numpy/core/include/numpy\
+- --with-python-version=2.7\
+  --with-tao-dir=$ISSM_DIR/externalpackages/tao/install \
+  --with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+  --with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+Index: ../trunk-jpl/configs/config-macosx64-lion-helene.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-lion-helene.sh	(revision 13852)
++++ ../trunk-jpl/configs/config-macosx64-lion-helene.sh	(revision 13853)
+@@ -3,15 +3,12 @@
+ #petsc 3.2
+ #mpich 1.4
+ 
+-pythonversion=2.7
+-
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+ 	--with-matlab-dir=$MATLAB_DIR \
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
+-	--with-python-version=$pythonversion \
+-	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
++	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/lib/python2.7/site-packages/numpy/core/include/numpy\
+ 	--with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
+ 	--with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
+ 	--with-mpi-lib=" $ISSM_DIR/externalpackages/mpich2/install/lib/libpmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpich.a $ISSM_DIR/externalpackages/mpich2/install/lib/libmpl.a " \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13853-13854.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13853-13854.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13853-13854.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/etc/environment.csh
+===================================================================
+--- ../trunk-jpl/etc/environment.csh	(revision 13853)
++++ ../trunk-jpl/etc/environment.csh	(revision 13854)
+@@ -87,7 +87,7 @@
+ #CMAKE
+ set CMAKE_DIR="$ISSM_DIR/externalpackages/cmake/install"
+ if (-d $CMAKE_DIR) then
+-	setenv PATH {$PATH}:{$CMAKE_DIR}/bin
++	setenv PATH {$CMAKE_DIR}/bin:{$PATH}
+ endif
+ 
+ #YAMS
Index: /issm/oecreview/Archive/13393-13976/ISSM-13854-13855.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13854-13855.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13854-13855.diff	(revision 13980)
@@ -0,0 +1,402 @@
+Index: ../trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp	(revision 13854)
++++ ../trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp	(revision 13855)
+@@ -1,106 +0,0 @@
+-/*!\file:  PureCorePointerFromSolutionEnum.cpp
+- * \brief: return type of analyses, number of analyses and core solution function.
+- */ 
+-
+-#ifdef HAVE_CONFIG_H
+-	#include <config.h>
+-#else
+-#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+-#endif
+-
+-#include "../toolkits/toolkits.h"
+-#include "../classes/objects/objects.h"
+-#include "../shared/shared.h"
+-#include "../EnumDefinitions/EnumDefinitions.h"
+-#include "./solutions.h"
+-#include "../modules/modules.h"
+-#include "../include/include.h"
+-#include "../solvers/solvers.h"
+-
+-void PureCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype){
+-
+-	/*output: */
+-	void (*solutioncore)(FemModel*)=NULL;
+-
+-	switch(solutiontype){
+-
+-		case DiagnosticSolutionEnum:
+-			#ifdef _HAVE_DIAGNOSTIC_
+-			solutioncore=&diagnostic_core;
+-			#else
+-			_error_("ISSM was not compiled with diagnostic capabilities. Exiting");
+-			#endif
+-			break;
+-		case SteadystateSolutionEnum:
+-			#ifdef _HAVE_STEADYSTATE_
+-			solutioncore=&steadystate_core;
+-			#else
+-			_error_("ISSM was not compiled with steady state capabilities. Exiting");
+-			#endif
+-			break;
+-		case ThermalSolutionEnum:
+-			#ifdef _HAVE_THERMAL_
+-			solutioncore=&thermal_core;
+-			#else
+-			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+-			#endif
+-			break;
+-		case EnthalpySolutionEnum:
+-			#ifdef _HAVE_THERMAL_
+-			solutioncore=&enthalpy_core;
+-			#else
+-			_error_("ISSM was not compiled with thermal capabilities. Exiting");
+-			#endif
+-			break;
+-		case BalancethicknessSolutionEnum:
+-			#ifdef _HAVE_BALANCED_
+-			solutioncore=&balancethickness_core;
+-			#else
+-			_error_("ISSM was not compiled with balanced capabilities. Exiting");
+-			#endif
+-			break;
+-		case HydrologySolutionEnum:
+-			#ifdef _HAVE_HYDROLOGY_
+-			solutioncore=&hydrology_core;
+-			#else
+-			_error_("ISSM was not compiled with hydrology capabilities. Exiting");
+-			#endif
+-			break;
+-		case SurfaceSlopeSolutionEnum:
+-			#ifdef _HAVE_SLOPE_
+-			solutioncore=&surfaceslope_core;
+-			#else
+-			_error_("ISSM was not compiled with slope capabilities. Exiting");
+-			#endif
+-			break;
+-		case BedSlopeSolutionEnum:
+-			#ifdef _HAVE_SLOPE_
+-			solutioncore=&bedslope_core;
+-			#else
+-			_error_("ISSM was not compiled with slope capabilities. Exiting");
+-			#endif
+-			break;
+-		case TransientSolutionEnum:
+-			#ifdef _HAVE_TRANSIENT_
+-			solutioncore=&transient_core;
+-			#else
+-			_error_("ISSM was not compiled with transient capabilities. Exiting");
+-			#endif
+-			break;
+-		case PrognosticSolutionEnum:
+-			#ifdef _HAVE_PROGNOSTIC_
+-			solutioncore=&prognostic_core;
+-			#else
+-			_error_("ISSM was not compiled with prognostic capabilities. Exiting");
+-			#endif
+-			break;
+-		default:
+-			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
+-			break;
+-	}
+-
+-	/*Assign output pointer:*/
+-	_assert_(psolutioncore);
+-	*psolutioncore=solutioncore;
+-
+-}
+Index: ../trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 13854)
++++ ../trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 13855)
+@@ -17,41 +17,87 @@
+ #include "../include/include.h"
+ #include "../solvers/solvers.h"
+ 
+-void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore){
++void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype){
+ 
+ 	/*output: */
+ 	void (*solutioncore)(FemModel*)=NULL;
+ 
+-	/*parameters: */
+-	bool control_analysis=false;
+-	bool tao_analysis=false;
+-	bool dakota_analysis=false;
++	switch(solutiontype){
+ 
+-	/* retrieve some parameters that tell us whether wrappers are allowed, or whether we return 
+-	 * a pure core. Wrappers can be dakota_core (which samples many solution_cores) or control_core (which 
+-	 * carries out adjoint based inversion on a certain core: */
+-	parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
+-	parameters->FindParam(&control_analysis,InversionIscontrolEnum);
+-	parameters->FindParam(&tao_analysis,InversionTaoEnum);
+-
+-	if(nodakotacore)dakota_analysis=false;
+-
+-	if(dakota_analysis){
+-		#ifdef _HAVE_DAKOTA_
+-		solutioncore=dakota_core;
+-		#else
+-		_error_("ISSM was not compiled with dakota support, cannot carry out dakota analysis!");
+-		#endif
++		case DiagnosticSolutionEnum:
++			#ifdef _HAVE_DIAGNOSTIC_
++			solutioncore=&diagnostic_core;
++			#else
++			_error_("ISSM was not compiled with diagnostic capabilities. Exiting");
++			#endif
++			break;
++		case SteadystateSolutionEnum:
++			#ifdef _HAVE_STEADYSTATE_
++			solutioncore=&steadystate_core;
++			#else
++			_error_("ISSM was not compiled with steady state capabilities. Exiting");
++			#endif
++			break;
++		case ThermalSolutionEnum:
++			#ifdef _HAVE_THERMAL_
++			solutioncore=&thermal_core;
++			#else
++			_error_("ISSM was not compiled with thermal capabilities. Exiting");
++			#endif
++			break;
++		case EnthalpySolutionEnum:
++			#ifdef _HAVE_THERMAL_
++			solutioncore=&enthalpy_core;
++			#else
++			_error_("ISSM was not compiled with thermal capabilities. Exiting");
++			#endif
++			break;
++		case BalancethicknessSolutionEnum:
++			#ifdef _HAVE_BALANCED_
++			solutioncore=&balancethickness_core;
++			#else
++			_error_("ISSM was not compiled with balanced capabilities. Exiting");
++			#endif
++			break;
++		case HydrologySolutionEnum:
++			#ifdef _HAVE_HYDROLOGY_
++			solutioncore=&hydrology_core;
++			#else
++			_error_("ISSM was not compiled with hydrology capabilities. Exiting");
++			#endif
++			break;
++		case SurfaceSlopeSolutionEnum:
++			#ifdef _HAVE_SLOPE_
++			solutioncore=&surfaceslope_core;
++			#else
++			_error_("ISSM was not compiled with slope capabilities. Exiting");
++			#endif
++			break;
++		case BedSlopeSolutionEnum:
++			#ifdef _HAVE_SLOPE_
++			solutioncore=&bedslope_core;
++			#else
++			_error_("ISSM was not compiled with slope capabilities. Exiting");
++			#endif
++			break;
++		case TransientSolutionEnum:
++			#ifdef _HAVE_TRANSIENT_
++			solutioncore=&transient_core;
++			#else
++			_error_("ISSM was not compiled with transient capabilities. Exiting");
++			#endif
++			break;
++		case PrognosticSolutionEnum:
++			#ifdef _HAVE_PROGNOSTIC_
++			solutioncore=&prognostic_core;
++			#else
++			_error_("ISSM was not compiled with prognostic capabilities. Exiting");
++			#endif
++			break;
++		default:
++			_error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
++			break;
+ 	}
+-	else if(control_analysis){
+-		#ifdef _HAVE_CONTROL_
+-		if(tao_analysis) solutioncore=controltao_core;
+-		else solutioncore=control_core;
+-		#else
+-		_error_("ISSM was not compiled with control support, cannot carry out control analysis!");
+-		#endif
+-	}
+-	else PureCorePointerFromSolutionEnum(&solutioncore,parameters,solutiontype);  /*This means we retrieve a core solution that is not a wrapper*/
+ 
+ 	/*Assign output pointer:*/
+ 	_assert_(psolutioncore);
+Index: ../trunk-jpl/src/c/solutions/AdjointCorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/AdjointCorePointerFromSolutionEnum.cpp	(revision 13854)
++++ ../trunk-jpl/src/c/solutions/AdjointCorePointerFromSolutionEnum.cpp	(revision 13855)
+@@ -1,4 +1,4 @@
+-/*!\file:  CorePointerFromSolutionEnum.cpp
++/*!\file:  AdjointCorePointerFromSolutionEnum.cpp
+  * \brief: return type of analyses, number of analyses and core solution function.
+  */ 
+ 
+Index: ../trunk-jpl/src/c/solutions/WrapperCorePointerFromSolutionEnum.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/WrapperCorePointerFromSolutionEnum.cpp	(revision 0)
++++ ../trunk-jpl/src/c/solutions/WrapperCorePointerFromSolutionEnum.cpp	(revision 13855)
+@@ -0,0 +1,60 @@
++/*!\file:  WrapperCorePointerFromSolutionEnum.cpp
++ * \brief: return type of analyses, number of analyses and core solution function.
++ */ 
++
++#ifdef HAVE_CONFIG_H
++	#include <config.h>
++#else
++#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
++#endif
++
++#include "../toolkits/toolkits.h"
++#include "../classes/objects/objects.h"
++#include "../shared/shared.h"
++#include "../EnumDefinitions/EnumDefinitions.h"
++#include "./solutions.h"
++#include "../modules/modules.h"
++#include "../include/include.h"
++#include "../solvers/solvers.h"
++
++void WrapperCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore){
++
++	/*output: */
++	void (*solutioncore)(FemModel*)=NULL;
++
++	/*parameters: */
++	bool control_analysis=false;
++	bool tao_analysis=false;
++	bool dakota_analysis=false;
++
++	/* retrieve some parameters that tell us whether wrappers are allowed, or whether we return 
++	 * a pure core. Wrappers can be dakota_core (which samples many solution_cores) or control_core (which 
++	 * carries out adjoint based inversion on a certain core: */
++	parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
++	parameters->FindParam(&control_analysis,InversionIscontrolEnum);
++	parameters->FindParam(&tao_analysis,InversionTaoEnum);
++
++	if(nodakotacore)dakota_analysis=false;
++
++	if(dakota_analysis){
++		#ifdef _HAVE_DAKOTA_
++		solutioncore=dakota_core;
++		#else
++		_error_("ISSM was not compiled with dakota support, cannot carry out dakota analysis!");
++		#endif
++	}
++	else if(control_analysis){
++		#ifdef _HAVE_CONTROL_
++		if(tao_analysis) solutioncore=controltao_core;
++		else solutioncore=control_core;
++		#else
++		_error_("ISSM was not compiled with control support, cannot carry out control analysis!");
++		#endif
++	}
++	else CorePointerFromSolutionEnum(&solutioncore,parameters,solutiontype);  /*This means we retrieve a core solution that is not a wrapper*/
++
++	/*Assign output pointer:*/
++	_assert_(psolutioncore);
++	*psolutioncore=solutioncore;
++
++}
+Index: ../trunk-jpl/src/c/solutions/solutions.h
+===================================================================
+--- ../trunk-jpl/src/c/solutions/solutions.h	(revision 13854)
++++ ../trunk-jpl/src/c/solutions/solutions.h	(revision 13855)
+@@ -54,8 +54,8 @@
+ 
+ //solution configuration
+ void AnalysisConfiguration(int** panalyses,int* pnumanalyses, int solutiontype);
+-void PureCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype);
+-void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore=false);
++void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype);
++void WrapperCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore=false);
+ void AdjointCorePointerFromSolutionEnum(void (**padjointcore)(FemModel*),int solutiontype);
+ 
+ #endif
+Index: ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13854)
++++ ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13855)
+@@ -75,7 +75,7 @@
+ 
+ 	/*Determine solution sequence: */
+ 	if(VerboseQmu()) _pprintLine_("Starting " << EnumToStringx(solution_type) << " core:");
+-	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type,nodakotacore);
++	WrapperCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type,nodakotacore);
+ 
+ 	/*Run the core solution sequence: */
+ 	solutioncore(femmodel);
+Index: ../trunk-jpl/src/c/solutions/control_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/control_core.cpp	(revision 13854)
++++ ../trunk-jpl/src/c/solutions/control_core.cpp	(revision 13855)
+@@ -61,7 +61,7 @@
+ 	femmodel->parameters->SetParam(false,SaveResultsEnum);
+ 
+ 	/*out of solution_type, figure out solution core and adjoint function pointer*/
+-	PureCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+ 	AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
+ 
+ 	/*Launch once a complete solution to set up all inputs*/
+Index: ../trunk-jpl/src/c/solutions/controltao_core.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13854)
++++ ../trunk-jpl/src/c/solutions/controltao_core.cpp	(revision 13855)
+@@ -93,11 +93,12 @@
+ 	if(VerboseControl()) _pprintLine_("   preparing final solution");
+ 	femmodel->parameters->SetParam(true,SaveResultsEnum);
+ 	void (*solutioncore)(FemModel*)=NULL;
+-	PureCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+ 	solutioncore(femmodel);
+ 
+ 	/*Clean up and return*/
+ 	xDelete<int>(control_list);
++	xDelete<double>(user.J);
+ 	xdelete(&X);
+ 	TaoDestroy(&tao);
+ 	TaoFinalize();
+@@ -134,7 +135,7 @@
+ 	/*Compute solution and adjoint*/
+ 	void (*solutioncore)(FemModel*)=NULL;
+ 	void (*adjointcore)(FemModel*)=NULL;
+-	PureCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
++	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+ 	AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
+ 	solutioncore(femmodel);
+ 	adjointcore(femmodel);
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13854)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13855)
+@@ -324,8 +324,8 @@
+ 					./solutions/ProcessArguments.cpp\
+ 					./solutions/ResetBoundaryConditions.cpp\
+ 					./solutions/AnalysisConfiguration.cpp\
++					./solutions/WrapperCorePointerFromSolutionEnum.cpp\
+ 					./solutions/CorePointerFromSolutionEnum.cpp\
+-					./solutions/PureCorePointerFromSolutionEnum.cpp\
+ 					./solutions/EnvironmentInit.cpp\
+ 					./solutions/EnvironmentFinalize.cpp\
+ 					./solutions/ad_core.cpp\
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13854)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13855)
+@@ -303,7 +303,7 @@
+ 	parameters->FindParam(&solution_type,SolutionTypeEnum);
+ 
+ 	/*Figure out which solution core we are going to run with the current solution type: */
+-	CorePointerFromSolutionEnum(&solutioncore,this->parameters,solution_type);
++	WrapperCorePointerFromSolutionEnum(&solutioncore,this->parameters,solution_type);
+ 
+ 	/*run solutoin core: */
+ 	profiler->Tag(StartCore);   
Index: /issm/oecreview/Archive/13393-13976/ISSM-13855-13856.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13855-13856.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13855-13856.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/inversion.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/inversion.py	(revision 13855)
++++ ../trunk-jpl/src/m/classes/inversion.py	(revision 13856)
+@@ -172,7 +172,7 @@
+ 
+ 		#process control parameters
+ 		num_control_parameters=len(self.control_parameters)
+-		data=numpy.array([StringToEnum(control_parameter)[0] for control_parameter in self.control_parameters])
++		data=numpy.array([StringToEnum(control_parameter)[0] for control_parameter in self.control_parameters]).reshape(1,-1)
+ 		WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3)
+ 		WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer')
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13856-13857.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13856-13857.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13856-13857.diff	(revision 13980)
@@ -0,0 +1,937 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 13856)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 13857)
+@@ -122,7 +122,7 @@
+ 
+ 				elif numpy.any(numpy.logical_not(flags)):
+ 					#We LOTS of work to do
+-					print("Rift tip outside of or on the domain has been detected and is being processed...")
++					print "Rift tip outside of or on the domain has been detected and is being processed..."
+ 
+ 					#check that only one point is outside (for now)
+ 					if numpy.sum(numpy.logical_not(flags).astype(int))!=1:
+@@ -165,7 +165,7 @@
+ 							tipdis=numpy.array([sqrt((x-x3)**2+(y-y3)**2),sqrt((x-x4)**2+(y-y4)**2)])
+ 
+ 							if numpy.min(tipdis)/segdis < options.getfieldvalue('toltip',0):
+-								print("moving tip-domain intersection point")
++								print "moving tip-domain intersection point"
+ 
+ 								#Get position of the closer point
+ 								if tipdis[0]>tipdis[1]:
+@@ -349,7 +349,7 @@
+ 
+ 	raise RuntimeError("bamg.py/processgeometry is not complete.")
+ 	#Deal with edges
+-	print("Checking Edge crossing...")
++	print "Checking Edge crossing..."
+ 	i=0
+ 	while (i<numpy.size(geom.Edges,axis=0)):
+ 
+@@ -404,7 +404,7 @@
+ 				y2=y
+ 
+ 	#Check point outside
+-	print("Checking for points outside the domain...")
++	print "Checking for points outside the domain..."
+ 	i=0
+ 	num=0
+ 	while (i<numpy.size(geom.Vertices,axis=0)):
+@@ -434,7 +434,7 @@
+ 			i-=1
+ 
+ 	if num:
+-		print("WARNING: %d points outside the domain outline have been removed" % num)
++		print "WARNING: %d points outside the domain outline have been removed" % num
+ 
+ 	"""
+ 	%Check point spacing
+Index: ../trunk-jpl/src/m/classes/verbose.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/verbose.py	(revision 13856)
++++ ../trunk-jpl/src/m/classes/verbose.py	(revision 13857)
+@@ -60,7 +60,7 @@
+ 
+ 			#Cast to logicals
+ 			listproperties=vars(self)
+-			for [fieldname,fieldvalue] in listproperties.iteritems():
++			for fieldname,fieldvalue in listproperties.iteritems():
+ 				if isinstance(fieldvalue,bool) or isinstance(fieldvalue,(int,long,float)):
+ 					setattr(self,fieldname,bool(fieldvalue))
+ 				else:
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 13856)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 13857)
+@@ -1,5 +1,6 @@
+ #module imports {{{
+ import numpy
++import copy
+ from mesh import mesh
+ from mask import mask
+ from geometry import geometry
+@@ -38,6 +39,10 @@
+ from mumpsoptions import *
+ from iluasmoptions import *
+ from project3d import *
++from FlagElements import *
++from NodeConnectivity import *
++from ElementConnectivity import *
++from contourenvelope import *
+ #}}}
+ 
+ class model(object):
+@@ -169,296 +174,261 @@
+ 		return self
+ 	# }}}
+ 
+-	"""
+-	function md2 = extract(md,area) % {{{
+-		%extract - extract a model according to an Argus contour or flag list
+-		%
+-		%   This routine extracts a submodel from a bigger model with respect to a given contour
+-		%   md must be followed by the corresponding exp file or flags list
+-		%   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
+-		%   If user wants every element outside the domain to be 
+-		%   extract2d, add '~' to the name of the domain file (ex: '~Pattyn.exp');
+-		%   an empty string '' will be considered as an empty domain
+-		%   a string 'all' will be considered as the entire domain
+-		%   add an argument 0 if you do not want the elements to be checked (faster)
+-		%
+-		%   Usage:
+-		%      md2=extract(md,area);
+-		%
+-		%   Examples:
+-		%      md2=extract(md,'Domain.exp');
+-		%      md2=extract(md,md.mask.elementonfloatingice);
+-		%
+-		%   See also: EXTRUDE, COLLAPSE
++	def extract(md,area):    # {{{
++		"""
++		extract - extract a model according to an Argus contour or flag list
+ 
+-		%copy model
+-		md1=md;
++		   This routine extracts a submodel from a bigger model with respect to a given contour
++		   md must be followed by the corresponding exp file or flags list
++		   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
++		   If user wants every element outside the domain to be 
++		   extract2d, add '~' to the name of the domain file (ex: '~Pattyn.exp');
++		   an empty string '' will be considered as an empty domain
++		   a string 'all' will be considered as the entire domain
+ 
+-		%some checks
+-		if ((nargin~=2) | (nargout~=1)),
+-			help extract
+-			error('extract error message: bad usage');
+-		end
++		   Usage:
++		      md2=extract(md,area);
+ 
+-		%get check option
+-		if (nargin==3 & varargin{1}==0),
+-			checkoutline=0;
+-		else
+-			checkoutline=1;
+-		end
++		   Examples:
++		      md2=extract(md,'Domain.exp');
++		      md2=extract(md,md.mask.elementonfloatingice);
+ 
+-		%get elements that are inside area
+-		flag_elem=FlagElements(md1,area);
+-		if ~any(flag_elem),
+-			error('extracted model is empty');
+-		end
++		   See also: EXTRUDE, COLLAPSE
++		"""
+ 
+-		%kick out all elements with 3 dirichlets
+-		spc_elem=find(~flag_elem);
+-		spc_node=sort(unique(md1.mesh.elements(spc_elem,:)));
+-		flag=ones(md1.mesh.numberofvertices,1);
+-		flag(spc_node)=0;
+-		pos=find(sum(flag(md1.mesh.elements),2)==0);
+-		flag_elem(pos)=0;
++		#copy model
++		md1=copy.deepcopy(md)
+ 
+-		%extracted elements and nodes lists
+-		pos_elem=find(flag_elem);
+-		pos_node=sort(unique(md1.mesh.elements(pos_elem,:)));
++		#get elements that are inside area
++		flag_elem=FlagElements(md1,area)
++		if not numpy.any(flag_elem):
++			raise RuntimeError("extracted model is empty")
+ 
+-		%keep track of some fields
+-		numberofvertices1=md1.mesh.numberofvertices;
+-		numberofelements1=md1.mesh.numberofelements;
+-		numberofvertices2=length(pos_node);
+-		numberofelements2=length(pos_elem);
+-		flag_node=zeros(numberofvertices1,1);
+-		flag_node(pos_node)=1;
++		#kick out all elements with 3 dirichlets
++		spc_elem=numpy.nonzero(numpy.logical_not(flag_elem))[0]
++		spc_node=numpy.unique(md1.mesh.elements[spc_elem,:]).astype(int)-1
++		flag=numpy.ones(md1.mesh.numberofvertices)
++		flag[spc_node]=0
++		pos=numpy.nonzero(numpy.logical_not(numpy.sum(flag[md1.mesh.elements.astype(int)-1],axis=1)))[0]
++		flag_elem[pos]=0
+ 
+-		%Create Pelem and Pnode (transform old nodes in new nodes and same thing for the elements)
+-		Pelem=zeros(numberofelements1,1);
+-		Pelem(pos_elem)=[1:numberofelements2]';
+-		Pnode=zeros(numberofvertices1,1);
+-		Pnode(pos_node)=[1:numberofvertices2]';
++		#extracted elements and nodes lists
++		pos_elem=numpy.nonzero(flag_elem)[0]
++		pos_node=numpy.unique(md1.mesh.elements[pos_elem,:]).astype(int)-1
+ 
+-		%renumber the elements (some node won't exist anymore)
+-		elements_1=md1.mesh.elements;
+-		elements_2=elements_1(pos_elem,:);
+-		elements_2(:,1)=Pnode(elements_2(:,1));
+-		elements_2(:,2)=Pnode(elements_2(:,2));
+-		elements_2(:,3)=Pnode(elements_2(:,3));
+-		if md1.mesh.dimension==3,
+-			elements_2(:,4)=Pnode(elements_2(:,4));
+-			elements_2(:,5)=Pnode(elements_2(:,5));
+-			elements_2(:,6)=Pnode(elements_2(:,6));
+-		end
++		#keep track of some fields
++		numberofvertices1=md1.mesh.numberofvertices
++		numberofelements1=md1.mesh.numberofelements
++		numberofvertices2=numpy.size(pos_node)
++		numberofelements2=numpy.size(pos_elem)
++		flag_node=numpy.zeros(numberofvertices1)
++		flag_node[pos_node]=1
+ 
+-		%OK, now create the new model !
++		#Create Pelem and Pnode (transform old nodes in new nodes and same thing for the elements)
++		Pelem=numpy.zeros(numberofelements1)
++		Pelem[pos_elem]=numpy.arange(1,numberofelements2+1)
++		Pnode=numpy.zeros(numberofvertices1)
++		Pnode[pos_node]=numpy.arange(1,numberofvertices2+1)
+ 
+-		%take every fields from model
+-		md2=md1;
++		#renumber the elements (some node won't exist anymore)
++		elements_1=copy.deepcopy(md1.mesh.elements)
++		elements_2=elements_1[pos_elem,:]
++		elements_2[:,0]=Pnode[elements_2[:,0].astype(int)-1]
++		elements_2[:,1]=Pnode[elements_2[:,1].astype(int)-1]
++		elements_2[:,2]=Pnode[elements_2[:,2].astype(int)-1]
++		if md1.mesh.dimension==3:
++			elements_2[:,3]=Pnode[elements_2[:,3].astype(int)-1]
++			elements_2[:,4]=Pnode[elements_2[:,4].astype(int)-1]
++			elements_2[:,5]=Pnode[elements_2[:,5].astype(int)-1]
+ 
+-		%automatically modify fields
++		#OK, now create the new model!
+ 
+-		%loop over model fields
+-		model_fields=fields(md1);
+-		for i=1:length(model_fields),
+-			%get field
+-			field=md1.(model_fields{i});
+-			fieldsize=size(field);
+-			if isobject(field), %recursive call
+-				object_fields=fields(md1.(model_fields{i}));
+-				for j=1:length(object_fields),
+-					%get field
+-					field=md1.(model_fields{i}).(object_fields{j});
+-					fieldsize=size(field);
+-					%size = number of nodes * n
+-					if fieldsize(1)==numberofvertices1
+-						md2.(model_fields{i}).(object_fields{j})=field(pos_node,:);
+-					elseif (fieldsize(1)==numberofvertices1+1)
+-						md2.(model_fields{i}).(object_fields{j})=[field(pos_node,:); field(end,:)];
+-						%size = number of elements * n
+-					elseif fieldsize(1)==numberofelements1
+-						md2.(model_fields{i}).(object_fields{j})=field(pos_elem,:);
+-					end
+-				end
+-			else
+-				%size = number of nodes * n
+-				if fieldsize(1)==numberofvertices1
+-					md2.(model_fields{i})=field(pos_node,:);
+-				elseif (fieldsize(1)==numberofvertices1+1)
+-					md2.(model_fields{i})=[field(pos_node,:); field(end,:)];
+-					%size = number of elements * n
+-				elseif fieldsize(1)==numberofelements1
+-					md2.(model_fields{i})=field(pos_elem,:);
+-				end
+-			end
+-		end
++		#take every field from model
++		md2=copy.deepcopy(md1)
+ 
+-		%modify some specific fields
++		#automatically modify fields
+ 
+-		%Mesh
+-		md2.mesh.numberofelements=numberofelements2;
+-		md2.mesh.numberofvertices=numberofvertices2;
+-		md2.mesh.elements=elements_2;
++		#loop over model fields
++		model_fields=vars(md1)
++		for fieldi in model_fields:
++			#get field
++			field=getattr(md1,fieldi)
++			fieldsize=numpy.shape(field)
++			if hasattr(field,'__dict__') and not ismember(fieldi,['results'])[0]:    #recursive call
++				object_fields=vars(field)
++				for fieldj in object_fields:
++					#get field
++					field=getattr(getattr(md1,fieldi),fieldj)
++					fieldsize=numpy.shape(field)
++					if len(fieldsize):
++						#size = number of nodes * n
++						if   fieldsize[0]==numberofvertices1:
++							setattr(getattr(md2,fieldi),fieldj,field[pos_node,:])
++						elif fieldsize[0]==numberofvertices1+1:
++							setattr(getattr(md2,fieldi),fieldj,numpy.vstack((field[pos_node,:],field[-1,:])))
++						#size = number of elements * n
++						elif fieldsize[0]==numberofelements1:
++							setattr(getattr(md2,fieldi),fieldj,field[pos_elem,:])
++			else:
++				if len(fieldsize):
++					#size = number of nodes * n
++					if   fieldsize[0]==numberofvertices1:
++						setattr(md2,fieldi,field[pos_node,:])
++					elif fieldsize[0]==numberofvertices1+1:
++						setattr(md2,fieldi,numpy.hstack((field[pos_node,:],field[-1,:])))
++					#size = number of elements * n
++					elif fieldsize[0]==numberofelements1:
++						setattr(md2,fieldi,field[pos_elem,:])
+ 
+-		%mesh.uppervertex mesh.lowervertex
+-		if md1.mesh.dimension==3
+-			md2.mesh.uppervertex=md1.mesh.uppervertex(pos_node);
+-			pos=find(~isnan(md2.mesh.uppervertex));
+-			md2.mesh.uppervertex(pos)=Pnode(md2.mesh.uppervertex(pos));
++		#modify some specific fields
+ 
+-			md2.mesh.lowervertex=md1.mesh.lowervertex(pos_node);
+-			pos=find(~isnan(md2.mesh.lowervertex));
+-			md2.mesh.lowervertex(pos)=Pnode(md2.mesh.lowervertex(pos));
++		#Mesh
++		md2.mesh.numberofelements=numberofelements2
++		md2.mesh.numberofvertices=numberofvertices2
++		md2.mesh.elements=elements_2
+ 
+-			md2.mesh.upperelements=md1.mesh.upperelements(pos_elem);
+-			pos=find(~isnan(md2.mesh.upperelements));
+-			md2.mesh.upperelements(pos)=Pelem(md2.mesh.upperelements(pos));
++		#mesh.uppervertex mesh.lowervertex
++		if md1.mesh.dimension==3:
++			md2.mesh.uppervertex=md1.mesh.uppervertex[pos_node]
++			pos=numpy.nonzero(numpy.logical_not(numpy.isnan(md2.mesh.uppervertex)))[0]
++			md2.mesh.uppervertex[pos]=Pnode[md2.mesh.uppervertex[pos].astype(int)-1]
+ 
+-			md2.mesh.lowerelements=md1.mesh.lowerelements(pos_elem);
+-			pos=find(~isnan(md2.mesh.lowerelements));
+-			md2.mesh.lowerelements(pos)=Pelem(md2.mesh.lowerelements(pos));
+-		end
++			md2.mesh.lowervertex=md1.mesh.lowervertex[pos_node]
++			pos=numpy.nonzero(numpy.logical_not(numpy.isnan(md2.mesh.lowervertex)))[0]
++			md2.mesh.lowervertex[pos]=Pnode[md2.mesh.lowervertex[pos].astype(int)-1]
+ 
+-		%Initial 2d mesh 
+-		if md1.mesh.dimension==3
+-			flag_elem_2d=flag_elem(1:md1.mesh.numberofelements2d);
+-			pos_elem_2d=find(flag_elem_2d);
+-			flag_node_2d=flag_node(1:md1.mesh.numberofvertices2d);
+-			pos_node_2d=find(flag_node_2d);
++			md2.mesh.upperelements=md1.mesh.upperelements[pos_elem]
++			pos=numpy.nonzero(numpy.logical_not(numpy.isnan(md2.mesh.upperelements)))[0]
++			md2.mesh.upperelements[pos]=Pelem[md2.mesh.upperelements[pos].astype(int)-1]
+ 
+-			md2.mesh.numberofelements2d=length(pos_elem_2d);
+-			md2.mesh.numberofvertices2d=length(pos_node_2d);
+-			md2.mesh.elements2d=md1.mesh.elements2d(pos_elem_2d,:);
+-			md2.mesh.elements2d(:,1)=Pnode(md2.mesh.elements2d(:,1));
+-			md2.mesh.elements2d(:,2)=Pnode(md2.mesh.elements2d(:,2));
+-			md2.mesh.elements2d(:,3)=Pnode(md2.mesh.elements2d(:,3));
++			md2.mesh.lowerelements=md1.mesh.lowerelements[pos_elem]
++			pos=numpy.nonzero(numpy.logical_not(numpy.isnan(md2.mesh.lowerelements)))[0]
++			md2.mesh.lowerelements[pos]=Pelem[md2.mesh.lowerelements[pos].astype(int)-1]
+ 
+-			md2.mesh.x2d=md1.mesh.x(pos_node_2d);
+-			md2.mesh.y2d=md1.mesh.y(pos_node_2d);
+-		end
++		#Initial 2d mesh 
++		if md1.mesh.dimension==3:
++			flag_elem_2d=flag_elem[numpy.arange(0,md1.mesh.numberofelements2d)]
++			pos_elem_2d=numpy.nonzero(flag_elem_2d)[0]
++			flag_node_2d=flag_node[numpy.arange(0,md1.mesh.numberofvertices2d)]
++			pos_node_2d=numpy.nonzero(flag_node_2d)[0]
+ 
+-		%Edges
+-		if size(md2.mesh.edges,2)>1, %do not use ~isnan because there are some NaNs...
+-			%renumber first two columns
+-			pos=find(md2.mesh.edges(:,4)~=-1);
+-			md2.mesh.edges(:  ,1)=Pnode(md2.mesh.edges(:,1)); 
+-			md2.mesh.edges(:  ,2)=Pnode(md2.mesh.edges(:,2)); 
+-			md2.mesh.edges(:  ,3)=Pelem(md2.mesh.edges(:,3));
+-			md2.mesh.edges(pos,4)=Pelem(md2.mesh.edges(pos,4));
+-			%remove edges when the 2 vertices are not in the domain.
+-			md2.mesh.edges=md2.mesh.edges(find(md2.mesh.edges(:,1) & md2.mesh.edges(:,2)),:);
+-			%Replace all zeros by -1 in the last two columns;
+-			pos=find(md2.mesh.edges(:,3)==0);
+-			md2.mesh.edges(pos,3)=-1;
+-			pos=find(md2.mesh.edges(:,4)==0);
+-			md2.mesh.edges(pos,4)=-1;
+-			%Invert -1 on the third column with last column (Also invert first two columns!!)
+-			pos=find(md2.mesh.edges(:,3)==-1);
+-			md2.mesh.edges(pos,3)=md2.mesh.edges(pos,4);
+-			md2.mesh.edges(pos,4)=-1;
+-			values=md2.mesh.edges(pos,2);
+-			md2.mesh.edges(pos,2)=md2.mesh.edges(pos,1);
+-			md2.mesh.edges(pos,1)=values;
+-			%Finally remove edges that do not belong to any element
+-			pos=find(md2.mesh.edges(:,3)==-1 & md2.mesh.edges(:,4)==-1);
+-			md2.mesh.edges(pos,:)=[];
+-		end
++			md2.mesh.numberofelements2d=numpy.size(pos_elem_2d)
++			md2.mesh.numberofvertices2d=numpy.size(pos_node_2d)
++			md2.mesh.elements2d=md1.mesh.elements2d[pos_elem_2d,:]
++			md2.mesh.elements2d[:,0]=Pnode[md2.mesh.elements2d[:,0].astype(int)-1]
++			md2.mesh.elements2d[:,1]=Pnode[md2.mesh.elements2d[:,1].astype(int)-1]
++			md2.mesh.elements2d[:,2]=Pnode[md2.mesh.elements2d[:,2].astype(int)-1]
+ 
+-		%Penalties
+-		if ~isnan(md2.diagnostic.vertex_pairing),
+-			for i=1:size(md1.diagnostic.vertex_pairing,1);
+-				md2.diagnostic.vertex_pairing(i,:)=Pnode(md1.diagnostic.vertex_pairing(i,:));
+-			end
+-			md2.diagnostic.vertex_pairing=md2.diagnostic.vertex_pairing(find(md2.diagnostic.vertex_pairing(:,1)),:);
+-		end
+-		if ~isnan(md2.prognostic.vertex_pairing),
+-			for i=1:size(md1.prognostic.vertex_pairing,1);
+-				md2.prognostic.vertex_pairing(i,:)=Pnode(md1.prognostic.vertex_pairing(i,:));
+-			end
+-			md2.prognostic.vertex_pairing=md2.prognostic.vertex_pairing(find(md2.prognostic.vertex_pairing(:,1)),:);
+-		end
++			md2.mesh.x2d=md1.mesh.x[pos_node_2d]
++			md2.mesh.y2d=md1.mesh.y[pos_node_2d]
+ 
+-		%recreate segments
+-		if md1.mesh.dimension==2
+-			md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices);
+-			md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity);
+-			md2.mesh.segments=contourenvelope(md2);
+-			md2.mesh.vertexonboundary=zeros(numberofvertices2,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
+-		else
+-			%First do the connectivity for the contourenvelope in 2d
+-			md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements2d,md2.mesh.numberofvertices2d);
+-			md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements2d,md2.mesh.vertexconnectivity);
+-			md2.mesh.segments=contourenvelope(md2);
+-			md2.mesh.vertexonboundary=zeros(numberofvertices2/md2.mesh.numberoflayers,1); md2.mesh.vertexonboundary(md2.mesh.segments(:,1:2))=1;
+-			md2.mesh.vertexonboundary=repmat(md2.mesh.vertexonboundary,md2.mesh.numberoflayers,1);
+-			%Then do it for 3d as usual
+-			md2.mesh.vertexconnectivity=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices);
+-			md2.mesh.elementconnectivity=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity);
+-		end
++		#Edges
++		if len(numpy.shape(md2.mesh.edges))>1 and numpy.size(md2.mesh.edges,axis=1)>1:    #do not use ~isnan because there are some NaNs...
++			#renumber first two columns
++			pos=numpy.nonzero(md2.mesh.edges[:,3]!=-1)[0]
++			md2.mesh.edges[:  ,0]=Pnode[md2.mesh.edges[:,0].astype(int)-1]
++			md2.mesh.edges[:  ,1]=Pnode[md2.mesh.edges[:,1].astype(int)-1]
++			md2.mesh.edges[:  ,2]=Pelem[md2.mesh.edges[:,2].astype(int)-1]
++			md2.mesh.edges[pos,3]=Pelem[md2.mesh.edges[pos,3].astype(int)-1]
++			#remove edges when the 2 vertices are not in the domain.
++			md2.mesh.edges=md2.mesh.edges[numpy.nonzero(numpy.logical_and(md2.mesh.edges[:,0],md2.mesh.edges[:,1]))[0],:]
++			#Replace all zeros by -1 in the last two columns
++			pos=numpy.nonzero(md2.mesh.edges[:,2]==0)[0]
++			md2.mesh.edges[pos,2]=-1
++			pos=numpy.nonzero(md2.mesh.edges[:,3]==0)[0]
++			md2.mesh.edges[pos,3]=-1
++			#Invert -1 on the third column with last column (Also invert first two columns!!)
++			pos=numpy.nonzero(md2.mesh.edges[:,2]==-1)[0]
++			md2.mesh.edges[pos,2]=md2.mesh.edges[pos,3]
++			md2.mesh.edges[pos,3]=-1
++			values=md2.mesh.edges[pos,1]
++			md2.mesh.edges[pos,1]=md2.mesh.edges[pos,0]
++			md2.mesh.edges[pos,0]=values
++			#Finally remove edges that do not belong to any element
++			pos=numpy.nonzero(numpy.logical_and(md2.mesh.edges[:,1]==-1,md2.mesh.edges[:,2]==-1))[0]
++			md2.mesh.edges=numpy.delete(md2.mesh.edges,pos,axis=0)
+ 
+-		%Boundary conditions: Dirichlets on new boundary
+-		%Catch the elements that have not been extracted
+-		orphans_elem=find(~flag_elem);
+-		orphans_node=unique(md1.mesh.elements(orphans_elem,:))';
+-		%Figure out which node are on the boundary between md2 and md1
+-		nodestoflag1=intersect(orphans_node,pos_node);
+-		nodestoflag2=Pnode(nodestoflag1);
+-		if numel(md1.diagnostic.spcvx)>1 & numel(md1.diagnostic.spcvy)>2 & numel(md1.diagnostic.spcvz)>2,
+-			if numel(md1.inversion.vx_obs)>1 & numel(md1.inversion.vy_obs)>1
+-				md2.diagnostic.spcvx(nodestoflag2)=md2.inversion.vx_obs(nodestoflag2); 
+-				md2.diagnostic.spcvy(nodestoflag2)=md2.inversion.vy_obs(nodestoflag2);
+-			else
+-				md2.diagnostic.spcvx(nodestoflag2)=NaN;
+-				md2.diagnostic.spcvy(nodestoflag2)=NaN;
+-				disp(' ')
+-				disp('!! extract warning: spc values should be checked !!')
+-				disp(' ')
+-			end
+-			%put 0 for vz
+-			md2.diagnostic.spcvz(nodestoflag2)=0;
+-		end
+-		if ~isnan(md1.thermal.spctemperature),
+-			md2.thermal.spctemperature(nodestoflag2,1)=1;
+-		end
++		#Penalties
++		if numpy.any(numpy.logical_not(numpy.isnan(md2.diagnostic.vertex_pairing))):
++			for i in xrange(numpy.size(md1.diagnostic.vertex_pairing,axis=0)):
++				md2.diagnostic.vertex_pairing[i,:]=Pnode[md1.diagnostic.vertex_pairing[i,:]]
++			md2.diagnostic.vertex_pairing=md2.diagnostic.vertex_pairing[numpy.nonzero(md2.diagnostic.vertex_pairing[:,0])[0],:]
++		if numpy.any(numpy.logical_not(numpy.isnan(md2.prognostic.vertex_pairing))):
++			for i in xrange(numpy.size(md1.prognostic.vertex_pairing,axis=0)):
++				md2.prognostic.vertex_pairing[i,:]=Pnode[md1.prognostic.vertex_pairing[i,:]]
++			md2.prognostic.vertex_pairing=md2.prognostic.vertex_pairing[numpy.nonzero(md2.prognostic.vertex_pairing[:,0])[0],:]
+ 
+-		%Diagnostic
+-		if ~isnan(md2.diagnostic.icefront)
+-			md2.diagnostic.icefront(:,1)=Pnode(md1.diagnostic.icefront(:,1)); 
+-			md2.diagnostic.icefront(:,2)=Pnode(md1.diagnostic.icefront(:,2)); 
+-			md2.diagnostic.icefront(:,end-1)=Pelem(md1.diagnostic.icefront(:,end-1));
+-			if md1.mesh.dimension==3
+-				md2.diagnostic.icefront(:,3)=Pnode(md1.diagnostic.icefront(:,3)); 
+-				md2.diagnostic.icefront(:,4)=Pnode(md1.diagnostic.icefront(:,4)); 
+-			end
+-			md2.diagnostic.icefront=md2.diagnostic.icefront(find(md2.diagnostic.icefront(:,1) & md2.diagnostic.icefront(:,2) & md2.diagnostic.icefront(:,end)),:);
+-		end
++		#recreate segments
++		if md1.mesh.dimension==2:
++			[md2.mesh.vertexconnectivity]=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices)
++			[md2.mesh.elementconnectivity]=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity)
++			md2.mesh.segments=contourenvelope(md2)
++			md2.mesh.vertexonboundary=numpy.zeros(numberofvertices2)
++			md2.mesh.vertexonboundary[md2.mesh.segments[:,0:2].astype(int)-1]=1
++		else:
++			#First do the connectivity for the contourenvelope in 2d
++			[md2.mesh.vertexconnectivity]=NodeConnectivity(md2.mesh.elements2d,md2.mesh.numberofvertices2d)
++			[md2.mesh.elementconnectivity]=ElementConnectivity(md2.mesh.elements2d,md2.mesh.vertexconnectivity)
++			md2.mesh.segments=contourenvelope(md2)
++			md2.mesh.vertexonboundary=numpy.zeros(numberofvertices2/md2.mesh.numberoflayers)
++			md2.mesh.vertexonboundary[md2.mesh.segments[:,0:2].astype(int)-1]=1
++			md2.mesh.vertexonboundary=numpy.tile(md2.mesh.vertexonboundary,md2.mesh.numberoflayers)
++			#Then do it for 3d as usual
++			[md2.mesh.vertexconnectivity]=NodeConnectivity(md2.mesh.elements,md2.mesh.numberofvertices)
++			[md2.mesh.elementconnectivity]=ElementConnectivity(md2.mesh.elements,md2.mesh.vertexconnectivity)
+ 
+-		%Results fields
+-		if isstruct(md1.results),
+-			md2.results=struct();
+-			solutionfields=fields(md1.results);
+-			for i=1:length(solutionfields),
+-				%get subfields
+-				solutionsubfields=fields(md1.results.(solutionfields{i}));
+-				for j=1:length(solutionsubfields),
+-					field=md1.results.(solutionfields{i}).(solutionsubfields{j});
+-					if length(field)==numberofvertices1,
+-						md2.results.(solutionfields{i}).(solutionsubfields{j})=field(pos_node);
+-					elseif length(field)==numberofelements1,
+-						md2.results.(solutionfields{i}).(solutionsubfields{j})=field(pos_elem);
+-					else
+-						md2.results.(solutionfields{i}).(solutionsubfields{j})=field;
+-					end
+-				end
+-			end
+-		end
++		#Boundary conditions: Dirichlets on new boundary
++		#Catch the elements that have not been extracted
++		orphans_elem=numpy.nonzero(numpy.logical_not(flag_elem))[0]
++		orphans_node=numpy.unique(md1.mesh.elements[orphans_elem,:]).astype(int)-1
++		#Figure out which node are on the boundary between md2 and md1
++		nodestoflag1=numpy.intersect1d(orphans_node,pos_node)
++		nodestoflag2=Pnode[nodestoflag1].astype(int)-1
++		if numpy.size(md1.diagnostic.spcvx)>1 and numpy.size(md1.diagnostic.spcvy)>2 and numpy.size(md1.diagnostic.spcvz)>2:
++			if numpy.size(md1.inversion.vx_obs)>1 and numpy.size(md1.inversion.vy_obs)>1:
++				md2.diagnostic.spcvx[nodestoflag2]=md2.inversion.vx_obs[nodestoflag2] 
++				md2.diagnostic.spcvy[nodestoflag2]=md2.inversion.vy_obs[nodestoflag2]
++			else:
++				md2.diagnostic.spcvx[nodestoflag2]=float('NaN')
++				md2.diagnostic.spcvy[nodestoflag2]=float('NaN')
++				print "\n!! extract warning: spc values should be checked !!\n\n"
++			#put 0 for vz
++			md2.diagnostic.spcvz[nodestoflag2]=0
++		if numpy.any(numpy.logical_not(numpy.isnan(md1.thermal.spctemperature))):
++			md2.thermal.spctemperature[nodestoflag2,0]=1
+ 
+-		%Keep track of pos_node and pos_elem
+-		md2.mesh.extractedvertices=pos_node;
+-		md2.mesh.extractedelements=pos_elem;
+-	end % }}}
+-	"""
++		#Diagnostic
++		if numpy.any(numpy.logical_not(numpy.isnan(md2.diagnostic.icefront))):
++			md2.diagnostic.icefront[:,0]=Pnode[md1.diagnostic.icefront[:,0].astype(int)-1]
++			md2.diagnostic.icefront[:,1]=Pnode[md1.diagnostic.icefront[:,1].astype(int)-1]
++			md2.diagnostic.icefront[:,-2]=Pelem[md1.diagnostic.icefront[:,-2].astype(int)-1]
++			if md1.mesh.dimension==3:
++				md2.diagnostic.icefront[:,2]=Pnode[md1.diagnostic.icefront[:,2].astype(int)-1]
++				md2.diagnostic.icefront[:,3]=Pnode[md1.diagnostic.icefront[:,3].astype(int)-1]
++			md2.diagnostic.icefront=md2.diagnostic.icefront[numpy.nonzero(numpy.logical_and(numpy.logical_and(md2.diagnostic.icefront[:,0],md2.diagnostic.icefront[:,1]),md2.diagnostic.icefront[:,-1]))[0],:]
+ 
++		#Results fields
++		if md1.results:
++			md2.results=OrderedDict()
++			for solutionfield in md1.results.iterkeys():
++				#get time step
++				for i in m1.results[solutionfield].iterkeys():
++					#get subfields
++					for solutionsubfield,field in m1.results[solutionfield][i].iteritems():
++						if   numpy.size(field)==numberofvertices1:
++							md2.results[solutionfield][i][solutionsubfield]=field[pos_node]
++						elif numpy.size(field)==numberofelements1:
++							md2.results[solutionfield][i][solutionsubfield]=field[pos_elem]
++						else:
++							md2.results[solutionfield][i][solutionsubfield]=field
++
++		#Keep track of pos_node and pos_elem
++		md2.mesh.extractedvertices=pos_node.astype(float)+1
++		md2.mesh.extractedelements=pos_elem.astype(float)+1
++
++		return md2
++	# }}}
++
+ 	def extrude(md,*args):    # {{{
+ 		"""
+ 		EXTRUDE - vertically extrude a 2d mesh
+Index: ../trunk-jpl/src/m/classes/model/model.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.m	(revision 13856)
++++ ../trunk-jpl/src/m/classes/model/model.m	(revision 13857)
+@@ -251,7 +251,6 @@
+ 			%   extract2d, add '~' to the name of the domain file (ex: '~Pattyn.exp');
+ 			%   an empty string '' will be considered as an empty domain
+ 			%   a string 'all' will be considered as the entire domain
+-			%   add an argument 0 if you do not want the elements to be checked (faster)
+ 			%
+ 			%   Usage:
+ 			%      md2=extract(md,area);
+@@ -271,13 +270,6 @@
+ 				error('extract error message: bad usage');
+ 			end
+ 
+-			%get check option
+-			if (nargin==3 & varargin{1}==0),
+-				checkoutline=0;
+-			else
+-				checkoutline=1;
+-			end
+-
+ 			%get elements that are inside area
+ 			flag_elem=FlagElements(md1,area);
+ 			if ~any(flag_elem),
+@@ -310,7 +302,7 @@
+ 			Pnode=zeros(numberofvertices1,1);
+ 			Pnode(pos_node)=[1:numberofvertices2]';
+ 
+-			%renumber the elements (some node won't exist anymore)
++			%renumber the elements (some nodes won't exist anymore)
+ 			elements_1=md1.mesh.elements;
+ 			elements_2=elements_1(pos_elem,:);
+ 			elements_2(:,1)=Pnode(elements_2(:,1));
+@@ -322,9 +314,9 @@
+ 				elements_2(:,6)=Pnode(elements_2(:,6));
+ 			end
+ 
+-			%OK, now create the new model !
++			%OK, now create the new model!
+ 
+-			%take every fields from model
++			%take every field from model
+ 			md2=md1;
+ 
+ 			%automatically modify fields
+@@ -346,7 +338,7 @@
+ 							md2.(model_fields{i}).(object_fields{j})=field(pos_node,:);
+ 						elseif (fieldsize(1)==numberofvertices1+1)
+ 							md2.(model_fields{i}).(object_fields{j})=[field(pos_node,:); field(end,:)];
+-							%size = number of elements * n
++						%size = number of elements * n
+ 						elseif fieldsize(1)==numberofelements1
+ 							md2.(model_fields{i}).(object_fields{j})=field(pos_elem,:);
+ 						end
+@@ -357,7 +349,7 @@
+ 						md2.(model_fields{i})=field(pos_node,:);
+ 					elseif (fieldsize(1)==numberofvertices1+1)
+ 						md2.(model_fields{i})=[field(pos_node,:); field(end,:)];
+-						%size = number of elements * n
++					%size = number of elements * n
+ 					elseif fieldsize(1)==numberofelements1
+ 						md2.(model_fields{i})=field(pos_elem,:);
+ 					end
+@@ -412,13 +404,13 @@
+ 			if size(md2.mesh.edges,2)>1, %do not use ~isnan because there are some NaNs...
+ 				%renumber first two columns
+ 				pos=find(md2.mesh.edges(:,4)~=-1);
+-				md2.mesh.edges(:  ,1)=Pnode(md2.mesh.edges(:,1)); 
+-				md2.mesh.edges(:  ,2)=Pnode(md2.mesh.edges(:,2)); 
++				md2.mesh.edges(:  ,1)=Pnode(md2.mesh.edges(:,1));
++				md2.mesh.edges(:  ,2)=Pnode(md2.mesh.edges(:,2));
+ 				md2.mesh.edges(:  ,3)=Pelem(md2.mesh.edges(:,3));
+ 				md2.mesh.edges(pos,4)=Pelem(md2.mesh.edges(pos,4));
+ 				%remove edges when the 2 vertices are not in the domain.
+ 				md2.mesh.edges=md2.mesh.edges(find(md2.mesh.edges(:,1) & md2.mesh.edges(:,2)),:);
+-				%Replace all zeros by -1 in the last two columns;
++				%Replace all zeros by -1 in the last two columns
+ 				pos=find(md2.mesh.edges(:,3)==0);
+ 				md2.mesh.edges(pos,3)=-1;
+ 				pos=find(md2.mesh.edges(:,4)==0);
+Index: ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 13856)
++++ ../trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py	(revision 13857)
+@@ -37,7 +37,7 @@
+ #	pos=find(md.mesh.vertexonboundary & ~vertexonicefront);
+ 	pos=numpy.nonzero(numpy.logical_and(md.mesh.vertexonboundary,numpy.logical_not(vertexonicefront)))[0]
+ 	if not numpy.size(pos):
+-		print("SetMarineIceSheetBC warning: ice front all around the glacier, no dirichlet found. Dirichlet must be added manually.")
++		print "SetMarineIceSheetBC warning: ice front all around the glacier, no dirichlet found. Dirichlet must be added manually."
+ 
+ 	md.diagnostic.spcvx=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.diagnostic.spcvy=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+@@ -49,11 +49,11 @@
+ 
+ 	#Dirichlet Values
+ 	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
+-		print("      boundary conditions for diagnostic model: spc set as observed velocities")
++		print "      boundary conditions for diagnostic model: spc set as observed velocities"
+ 		md.diagnostic.spcvx[pos]=md.inversion.vx_obs[pos]
+ 		md.diagnostic.spcvy[pos]=md.inversion.vy_obs[pos]
+ 	else:
+-		print("      boundary conditions for diagnostic model: spc set as zero")
++		print "      boundary conditions for diagnostic model: spc set as zero"
+ 
+ 	md.hydrology.spcwatercolumn=numpy.zeros((md.mesh.numberofvertices,2))
+ 	pos=numpy.nonzero(md.mesh.vertexonboundary)[0]
+@@ -82,16 +82,16 @@
+ 	#Create zeros basalforcings and surfaceforcings
+ 	if numpy.all(numpy.isnan(md.surfaceforcings.precipitation)) and (md.surfaceforcings.ispdd==1):
+ 		md.surfaceforcings.precipitation=numpy.zeros((md.mesh.numberofvertices,1))
+-		print("      no surfaceforcings.precipitation specified: values set as zero")
++		print "      no surfaceforcings.precipitation specified: values set as zero"
+ 	if numpy.all(numpy.isnan(md.surfaceforcings.mass_balance)) and (md.surfaceforcings.ispdd==0):
+ 		md.surfaceforcings.mass_balance=numpy.zeros((md.mesh.numberofvertices,1))
+-		print("      no surfaceforcings.mass_balance specified: values set as zero")
++		print "      no surfaceforcings.mass_balance specified: values set as zero"
+ 	if numpy.all(numpy.isnan(md.basalforcings.melting_rate)):
+ 		md.basalforcings.melting_rate=numpy.zeros((md.mesh.numberofvertices,1))
+-		print("      no basalforcings.melting_rate specified: values set as zero")
++		print "      no basalforcings.melting_rate specified: values set as zero"
+ 	if numpy.all(numpy.isnan(md.balancethickness.thickening_rate)):
+ 		md.balancethickness.thickening_rate=numpy.zeros((md.mesh.numberofvertices,1))
+-		print("      no balancethickness.thickening_rate specified: values set as zero")
++		print "      no balancethickness.thickening_rate specified: values set as zero"
+ 
+ 	md.prognostic.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+ 	md.balancethickness.spcthickness=float('nan')*numpy.ones((md.mesh.numberofvertices,1))
+@@ -103,9 +103,9 @@
+ 		md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
+ 		if not isinstance(md.basalforcings.geothermalflux,numpy.ndarray) or not numpy.size(md.basalforcings.geothermalflux,axis=0)==md.mesh.numberofvertices:
+ 			md.basalforcings.geothermalflux=numpy.zeros((md.mesh.numberofvertices,1))
+-			md.basalforcings.geothermalflux[numpy.nonzero(md.mask.vertexongroundedice)]=50.*10.**-3; #50mW/m2
++			md.basalforcings.geothermalflux[numpy.nonzero(md.mask.vertexongroundedice)]=50.*10.**-3    #50mW/m2
+ 	else:
+-		print("      no thermal boundary conditions created: no observed temperature found");
++		print "      no thermal boundary conditions created: no observed temperature found"
+ 
+ 	return md
+ 
+Index: ../trunk-jpl/src/m/parameterization/contourenvelope.m
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/contourenvelope.m	(revision 13856)
++++ ../trunk-jpl/src/m/parameterization/contourenvelope.m	(revision 13857)
+@@ -19,7 +19,6 @@
+ 
+ 	if ischar(flags),
+ 		file=flags;
+-		file=varargin{1};
+ 		if ~exist(file),
+ 			error(['contourenvelope error message: file ' file ' not found']);
+ 		end
+@@ -28,7 +27,7 @@
+ 		%do nothing for now
+ 		isfile=0;
+ 	else
+-		error('contourenvelope error message:  second argument should a file or an elements flag');
++		error('contourenvelope error message:  second argument should be a file or an elements flag');
+ 	end
+ end
+ 
+@@ -69,10 +68,10 @@
+ 		mesh.elementconnectivity(find(ismember(mesh.elementconnectivity,elemout)))=0;
+ 	else
+ 		%get flag list of elements and nodes inside the contour
+-		nodein=zeros(mesh.numberofvertices,1); 
+-		elemin=zeros(mesh.numberofelements,1); 
++		nodein=zeros(mesh.numberofvertices,1);
++		elemin=zeros(mesh.numberofelements,1);
+ 
+-		pos=find(flags); 
++		pos=find(flags);
+ 		elemin(pos)=1;
+ 		nodein(mesh.elements(pos,:))=1;
+ 
+@@ -94,7 +93,7 @@
+ %Find segments on boundary
+ pos=find(elementonboundary);
+ num_segments=length(pos);
+-segments=zeros(num_segments,3);
++segments=zeros(num_segments*3,3);
+ count=1;
+ 
+ for i=1:num_segments,
+@@ -137,3 +136,5 @@
+ 		end
+ 	end
+ end
++segments=segments(1:count-1,:);
++
+Index: ../trunk-jpl/src/m/parameterization/contourenvelope.py
+===================================================================
+--- ../trunk-jpl/src/m/parameterization/contourenvelope.py	(revision 0)
++++ ../trunk-jpl/src/m/parameterization/contourenvelope.py	(revision 13857)
+@@ -0,0 +1,134 @@
++import os.path
++import numpy
++import copy
++from NodeConnectivity import *
++from ElementConnectivity import *
++from mesh import *
++
++def contourenvelope(md,*args):
++	"""
++	CONTOURENVELOPE - build a set of segments enveloping a contour .exp
++
++	   Usage:
++	      segments=contourenvelope(md,varargin)
++
++	   Example:
++	      segments=contourenvelope(md,'Stream.exp');
++	      segments=contourenvelope(md,md.mask.elementonfloatingice)
++	      segments=contourenvelope(md);
++	"""
++
++	#some checks
++	if len(args)>1:
++		raise RuntimeError("contourenvelope error message: bad usage")
++
++	if len(args)==1:
++		flags=args[0]
++
++		if   isinstance(flags,(str,unicode)):
++			file=flags
++			if not os.path.exists(file):
++				raise IOError("contourenvelope error message: file '%s' not found" % file)
++			isfile=1
++		elif isinstance(flags,(bool,int,long,float)):
++			#do nothing for now
++			isfile=0
++		else:
++			raise TypeError("contourenvelope error message:  second argument should be a file or an elements flag")
++
++	#Now, build the connectivity tables for this mesh.
++	#Computing connectivity
++	if numpy.size(md.mesh.vertexconnectivity,axis=0)!=md.mesh.numberofvertices and numpy.size(md.mesh.vertexconnectivity,axis=0)!=md.mesh.numberofvertices2d:
++		[md.mesh.vertexconnectivity]=NodeConnectivity(md.mesh.elements,md.mesh.numberofvertices)
++	if numpy.size(md.mesh.elementconnectivity,axis=0)!=md.mesh.numberofelements and numpy.size(md.mesh.elementconnectivity,axis=0)!=md.mesh.numberofelements2d:
++		[md.mesh.elementconnectivity]=ElementConnectivity(md.mesh.elements,md.mesh.vertexconnectivity)
++
++	#get nodes inside profile
++	mesh.elementconnectivity=copy.deepcopy(md.mesh.elementconnectivity)
++	if md.mesh.dimension==2:
++		mesh.elements=copy.deepcopy(md.mesh.elements)
++		mesh.x=copy.deepcopy(md.mesh.x)
++		mesh.y=copy.deepcopy(md.mesh.y)
++		mesh.numberofvertices=copy.deepcopy(md.mesh.numberofvertices)
++		mesh.numberofelements=copy.deepcopy(md.mesh.numberofelements)
++	else:
++		mesh.elements=copy.deepcopy(md.mesh.elements2d)
++		mesh.x=copy.deepcopy(md.mesh.x2d)
++		mesh.y=copy.deepcopy(md.mesh.y2d)
++		mesh.numberofvertices=copy.deepcopy(md.mesh.numberofvertices2d)
++		mesh.numberofelements=copy.deepcopy(md.mesh.numberofelements2d)
++
++	if len(args)==1:
++
++		if isfile:
++			#get flag list of elements and nodes inside the contour
++			nodein=ContourToMesh(mesh.elements,mesh.x,mesh.y,file,'node',1)
++			elemin=(numpy.sum(nodein(mesh.elements),axis=1)==numpy.size(mesh.elements,axis=1))
++			#modify element connectivity
++			elemout=numpy.nonzero(numpy.logical_not(elemin))[0]
++			mesh.elementconnectivity[elemout,:]=0
++			mesh.elementconnectivity[numpy.nonzero(ismember(mesh.elementconnectivity,elemout+1))]=0
++		else:
++			#get flag list of elements and nodes inside the contour
++			nodein=numpy.zeros(mesh.numberofvertices)
++			elemin=numpy.zeros(mesh.numberofelements)
++
++			pos=numpy.nonzero(flags)
++			elemin[pos]=1
++			nodein[mesh.elements[pos,:].astype(int)-1]=1
++
++			#modify element connectivity
++			elemout=numpy.nonzero(numpy.logical_not(elemin))[0]
++			mesh.elementconnectivity[elemout,:]=0
++			mesh.elementconnectivity[numpy.nonzero(ismember(mesh.elementconnectivity,elemout+1))]=0
++
++	#Find element on boundary
++	#First: find elements on the boundary of the domain
++	flag=copy.deepcopy(mesh.elementconnectivity)
++	if len(args)==1:
++		flag[numpy.nonzero(flag)]=elemin[flag[numpy.nonzero(flag)]]
++	elementonboundary=numpy.logical_and(numpy.prod(flag,axis=1)==0,numpy.sum(flag,axis=1)>0).astype(float)
++
++	#Find segments on boundary
++	pos=numpy.nonzero(elementonboundary)[0]
++	num_segments=numpy.size(pos)
++	segments=numpy.zeros((num_segments*3,3))
++	count=0
++
++	for el1 in pos:
++		els2=mesh.elementconnectivity[el1,numpy.nonzero(mesh.elementconnectivity[el1,:])[0]].astype(int)-1
++		if numpy.size(els2)>1:
++			flag=numpy.intersect1d(mesh.elements[els2[0],:],mesh.elements[els2[1],:])
++			nods1=mesh.elements[el1,:]
++			nods1=numpy.delete(nods1,numpy.nonzero(nods1==flag))
++			segments[count,:]=[nods1[0],nods1[1],el1+1]
++
++			ord1=numpy.nonzero(nods1[0]==mesh.elements[el1,:])[0][0]
++			ord2=numpy.nonzero(nods1[1]==mesh.elements[el1,:])[0][0]
++
++			#swap segment nodes if necessary
++			if ( (ord1==0 and ord2==1) or (ord1==1 and ord2==2) or (ord1==2 and ord2==0) ):
++				temp=segments[count,0]
++				segments[count,0]=segments[count,1]
++				segments[count,1]=temp
++			segments[count,0:2]=numpy.flipud(segments[count,0:2])
++			count+=1
++		else:
++			nods1=mesh.elements[el1,:]
++			flag=numpy.setdiff1d(nods1,mesh.elements[els2,:])
++			for j in xrange(0,3):
++				nods=numpy.delete(nods1,j)
++				if numpy.any(ismember(flag,nods)):
++					segments[count,:]=[nods[0],nods[1],el1+1]
++					ord1=numpy.nonzero(nods[0]==mesh.elements[el1,:])[0][0]
++					ord2=numpy.nonzero(nods[1]==mesh.elements[el1,:])[0][0]
++					if ( (ord1==0 and ord2==1) or (ord1==1 and ord2==2) or (ord1==2 and ord2==0) ):
++						temp=segments[count,0]
++						segments[count,0]=segments[count,1]
++						segments[count,1]=temp
++					segments[count,0:2]=numpy.flipud(segments[count,0:2])
++					count+=1
++	segments=segments[0:count,:]
++
++	return segments
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13857-13858.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13857-13858.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13857-13858.diff	(revision 13980)
@@ -0,0 +1,167 @@
+Index: ../trunk-jpl/test/NightlyRun/test511.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test511.py	(revision 13858)
+@@ -0,0 +1,50 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Pig.exp',10000.)
++md=setmask(md,'../Exp/PigShelves.exp','../Exp/PigIslands.exp')
++md=parameterize(md,'../Par/Pig.py')
++
++#impose hydrostatic equilibrium (required by Stokes)
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md.extrude(3,1.)
++md=setflowequation(md,'stokes','all')
++md=md.extract(md.mask.elementonfloatingice)
++
++#control parameters
++md.inversion.iscontrol=1
++md.inversion.control_parameters=['MaterialsRheologyBbar']
++md.inversion.min_parameters=10.**6*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.max_parameters=2.*10**9*numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.nsteps=2
++md.inversion.cost_functions=101*numpy.ones((md.inversion.nsteps,1))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.gradient_scaling=10.**8*numpy.ones((md.inversion.nsteps,1))
++md.inversion.maxiter_per_step=2.*numpy.ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=0.99*numpy.ones((md.inversion.nsteps,1))
++md.inversion.vx_obs=md.initialization.vx
++md.inversion.vy_obs=md.initialization.vy
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Gradient','Misfits','MaterialsRheologyB','Pressure','Vel','Vx','Vy']
++field_tolerances=[1e-11,1e-12,1e-12,1e-09,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
++field_values=[\
++	md.results['DiagnosticSolution'][1]['Gradient1'],\
++	md.results['DiagnosticSolution'][1]['J'],\
++	md.results['DiagnosticSolution'][1]['MaterialsRheologyB'],\
++	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results['DiagnosticSolution'][1]['Vel'],\
++	md.results['DiagnosticSolution'][1]['Vx'],\
++	md.results['DiagnosticSolution'][1]['Vy'],\
++]
+Index: ../trunk-jpl/test/NightlyRun/python_test_guidelines.txt
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/python_test_guidelines.txt	(revision 13857)
++++ ../trunk-jpl/test/NightlyRun/python_test_guidelines.txt	(revision 13858)
+@@ -7,4 +7,6 @@
+ - Be careful with vectors vs. column arrays (unfortunately Matlab does not distinguish).  Documentation (like in the class def) showing whether more than one column is possible is very helpful.
+ - Be careful with variable names that might be reserved words in other languages (e.g. "list").
+ - Weird shortcuts for a particular language are not very general.
++- Since some languages are base 0 and some are base 1, it would be nice to name variables to clearly delineate which are indices and which are ID's (e.g., indices into node/element arrays vs. node/element ID's).  
++- Checks like isnan(array) may be ambiguous, depending on the language, so use "any" or "all" to clarify.  (Matlab seems to default to "all", though it may depend on context.)
+ 
+Index: ../trunk-jpl/test/NightlyRun/test511.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.m	(revision 13857)
++++ ../trunk-jpl/test/NightlyRun/test511.m	(revision 13858)
+@@ -30,7 +30,7 @@
+ field_tolerances={1e-11,1e-12,1e-12,1e-09,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12};
+ field_values={...
+ 	(md.results.DiagnosticSolution.Gradient1),...
+-	md.results.DiagnosticSolution.J,...
++	(md.results.DiagnosticSolution.J),...
+ 	(md.results.DiagnosticSolution.MaterialsRheologyB),...
+ 	(md.results.DiagnosticSolution.Pressure),...
+ 	(md.results.DiagnosticSolution.Vel),...
+Index: ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 13857)
++++ ../trunk-jpl/test/NightlyRun/python_skipped_tests.txt	(revision 13858)
+@@ -10,5 +10,3 @@
+ test417    needs Dakota
+ test418    needs Dakota
+ test420    needs Dakota
+-test511    needs extract
+-test613    needs extract
+Index: ../trunk-jpl/test/NightlyRun/test613.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test613.py	(revision 13858)
+@@ -0,0 +1,52 @@
++import numpy
++import copy
++from model import *
++from triangle import *
++from meshconvert import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/79North.exp',10000.)
++md=meshconvert(md)
++md=setmask(md,'../Exp/79NorthShelf.exp','')
++md=parameterize(md,'../Par/79North.py')
++md=setflowequation(md,'macayeal','all')
++
++#Ice sheet only
++md=md.extract(md.mask.elementongroundedice)
++pos=numpy.nonzero(md.mesh.vertexonboundary)
++md.balancethickness.spcthickness[pos]=md.geometry.thickness[pos]
++
++#control parameters
++md.inversion.thickness_obs=copy.deepcopy(md.geometry.thickness)
++md.inversion.iscontrol=1
++md.inversion.nsteps=2
++md.inversion.control_parameters=['Vx','Vy']
++md.balancethickness.stabilization=1
++md.inversion.gradient_scaling=numpy.hstack((10./md.constants.yts*numpy.ones((md.inversion.nsteps,1)),10./md.constants.yts*numpy.ones((md.inversion.nsteps,1))))
++md.inversion.min_parameters=numpy.hstack((-2000.*numpy.ones((md.mesh.numberofvertices,1)),-2000.*numpy.ones((md.mesh.numberofvertices,1))))
++md.inversion.max_parameters=numpy.hstack((+2000.*numpy.ones((md.mesh.numberofvertices,1)),+2000.*numpy.ones((md.mesh.numberofvertices,1))))
++md.inversion.cost_functions=201*numpy.ones((md.inversion.nsteps,1))
++md.inversion.cost_functions_coefficients=numpy.ones((md.mesh.numberofvertices,1))
++md.inversion.maxiter_per_step=4*numpy.ones((md.inversion.nsteps,1))
++md.inversion.step_threshold=0.99*numpy.ones((md.inversion.nsteps,1))
++
++md.verbose.control=1
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,BalancethicknessSolutionEnum())
++
++#Fields and tolerances to track changes
++field_names     =['Gradient1','Gradient2','Misfits','Vx','Vy','Thickness']
++field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
++field_values=[\
++	md.results['BalancethicknessSolution'][1]['Gradient1'],\
++	md.results['BalancethicknessSolution'][1]['Gradient2'],\
++	md.results['BalancethicknessSolution'][1]['J'],\
++	md.results['BalancethicknessSolution'][1]['Vx'],\
++	md.results['BalancethicknessSolution'][1]['Vy'],\
++	md.results['BalancethicknessSolution'][1]['Thickness'],\
++]
+Index: ../trunk-jpl/test/NightlyRun/test613.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.m	(revision 13857)
++++ ../trunk-jpl/test/NightlyRun/test613.m	(revision 13858)
+@@ -12,7 +12,6 @@
+ %control parameters
+ md.inversion.thickness_obs=md.geometry.thickness;
+ md.inversion.iscontrol=1;
+-md.inversion.thickness_obs=md.geometry.thickness;
+ md.inversion.nsteps=2;
+ md.inversion.control_parameters={'Vx','Vy'};
+ md.balancethickness.stabilization=1;
+@@ -34,7 +33,7 @@
+ field_values={...
+ 	(md.results.BalancethicknessSolution.Gradient1),...
+ 	(md.results.BalancethicknessSolution.Gradient2),...
+-	md.results.BalancethicknessSolution.J,...
++	(md.results.BalancethicknessSolution.J),...
+ 	(md.results.BalancethicknessSolution.Vx),...
+ 	(md.results.BalancethicknessSolution.Vy),...
+ 	(md.results.BalancethicknessSolution.Thickness)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13858-13859.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13858-13859.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13858-13859.diff	(revision 13980)
@@ -0,0 +1,352 @@
+Index: ../trunk-jpl/src/m/miscellaneous/BinRead.py
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/BinRead.py	(revision 13858)
++++ ../trunk-jpl/src/m/miscellaneous/BinRead.py	(revision 13859)
+@@ -1,168 +0,0 @@
+-#! /usr/bin/env python
+-
+-import os
+-import sys
+-import numpy
+-import math
+-import struct
+-
+-def BinRead(filin,filout=''):
+-
+-	from MatlabFuncs import *
+-	from EnumDefinitions import *
+-	from EnumToString import EnumToString
+-
+-	print "reading binary file."
+-	f=open(filin,'rb')
+-
+-	if filout:
+-		sys.stdout=open(filout,'w')
+-
+-	while True:
+-		try:
+-			#Step 1: read the enum to identify this record uniquely
+-			enum=struct.unpack('i',f.read(struct.calcsize('i')))[0]
+-		except struct.error as e:
+-			print "probable EOF: %s" % e
+-			break
+-		print "\nenum = %d (%s)" % (enum,EnumToString(enum)[0])
+-
+-		#Step 2: read the data itself.
+-		#first read length of record
+-		reclen=struct.unpack('i',f.read(struct.calcsize('i')))[0]
+-		print "reclen = %d" % reclen
+-
+-		#read data code: 
+-		code=struct.unpack('i',f.read(struct.calcsize('i')))[0]
+-		print "code = %d" % code
+-
+-		if   code == FormatToCode('Boolean'):
+-#			bval=struct.unpack('b',f.read(reclen-struct.calcsize('i')))[0]
+-			bval=struct.unpack('i',f.read(reclen-struct.calcsize('i')))[0]
+-			print "bval = %d" % bval
+-
+-		elif code == FormatToCode('Integer'):
+-			ival=struct.unpack('i',f.read(reclen-struct.calcsize('i')))[0]
+-			print "ival = %d" % ival
+-
+-		elif code == FormatToCode('Double'):
+-			dval=struct.unpack('d',f.read(reclen-struct.calcsize('i')))[0]
+-			print "dval = %f" % dval
+-
+-		elif code == FormatToCode('String'):
+-			strlen=struct.unpack('i',f.read(struct.calcsize('i')))[0]
+-			print "strlen = %d" % strlen
+-			sval=struct.unpack('%ds' % strlen,f.read(strlen))[0]
+-			print "sval = '%s'" % sval
+-
+-		elif code == FormatToCode('BooleanMat'):
+-			#read matrix type: 
+-			mattype=struct.unpack('i',f.read(struct.calcsize('i')))[0]
+-			print "mattype = %d" % mattype
+-
+-			#now read matrix
+-			s=[0,0]
+-			s[0]=struct.unpack('i',f.read(struct.calcsize('i')))[0]
+-			s[1]=struct.unpack('i',f.read(struct.calcsize('i')))[0]
+-			print "s = [%dx%d]" % (s[0],s[1])
+-			data=numpy.zeros((s[0],s[1]))
+-			for i in xrange(s[0]):
+-				for j in xrange(s[1]):
+-					data[i][j]=struct.unpack('d',f.read(struct.calcsize('d')))[0]    #get to the "c" convention, hence the transpose
+-					print "data[%d,%d] = %f" % (i,j,data[i][j])
+-
+-		elif code == FormatToCode('IntMat'):
+-			#read matrix type: 
+-			mattype=struct.unpack('i',f.read(struct.calcsize('i')))[0]
+-			print "mattype = %d" % mattype
+-
+-			#now read matrix
+-			s=[0,0]
+-			s[0]=struct.unpack('i',f.read(struct.calcsize('i')))[0]
+-			s[1]=struct.unpack('i',f.read(struct.calcsize('i')))[0]
+-			print "s = [%dx%d]" % (s[0],s[1])
+-			data=numpy.zeros((s[0],s[1]))
+-			for i in xrange(s[0]):
+-				for j in xrange(s[1]):
+-					data[i][j]=struct.unpack('d',f.read(struct.calcsize('d')))[0]    #get to the "c" convention, hence the transpose
+-					print "data[%d,%d] = %f" % (i,j,data[i][j])
+-
+-		elif code == FormatToCode('DoubleMat'):
+-			#read matrix type: 
+-			mattype=struct.unpack('i',f.read(struct.calcsize('i')))[0]
+-			print "mattype = %d" % mattype
+-
+-			#now read matrix
+-			s=[0,0]
+-			s[0]=struct.unpack('i',f.read(struct.calcsize('i')))[0]
+-			s[1]=struct.unpack('i',f.read(struct.calcsize('i')))[0]
+-			print "s = [%dx%d]" % (s[0],s[1])
+-			data=numpy.zeros((s[0],s[1]))
+-			for i in xrange(s[0]):
+-				for j in xrange(s[1]):
+-					data[i][j]=struct.unpack('d',f.read(struct.calcsize('d')))[0]    #get to the "c" convention, hence the transpose
+-					print "data[%d,%d] = %f" % (i,j,data[i][j])
+-
+-		elif code == FormatToCode('MatArray'):
+-			fid.seek(reclen-4,1)
+-			print "skipping %d bytes for code %d." % (code, reclen-4)
+-
+-		elif code == FormatToCode('StringArray'):
+-			fid.seek(reclen-4,1)
+-			print "skipping %d bytes for code %d." % (code, reclen-4)
+-
+-		else:
+-			raise TypeError('BinRead error message: data type: %d not supported yet! (%s)' % (code,EnumToString(enum)[0]))
+-
+-	f.close()
+-
+-def FormatToCode(format): # {{{
+-	"""
+-	This routine takes the format string, and hardcodes it into an integer, which 
+-	is passed along the record, in order to identify the nature of the dataset being 
+-	sent.
+-	"""
+-
+-	if   strcmpi(format,'Boolean'):
+-		code=1
+-	elif strcmpi(format,'Integer'):
+-		code=2
+-	elif strcmpi(format,'Double'):
+-		code=3
+-	elif strcmpi(format,'String'):
+-		code=4
+-	elif strcmpi(format,'BooleanMat'):
+-		code=5
+-	elif strcmpi(format,'IntMat'):
+-		code=6
+-	elif strcmpi(format,'DoubleMat'):
+-		code=7
+-	elif strcmpi(format,'MatArray'):
+-		code=8
+-	elif strcmpi(format,'StringArray'):
+-		code=9
+-	else:
+-		raise InputError('FormatToCode error message: data type not supported yet!')
+-
+-	return code
+-# }}}
+-
+-if __name__ == '__main__':
+-	if 'PYTHONSTARTUP' in os.environ:
+-		PYTHONSTARTUP=os.environ['PYTHONSTARTUP']
+-		print 'PYTHONSTARTUP =',PYTHONSTARTUP
+-		if os.path.exists(PYTHONSTARTUP):
+-			try:
+-				execfile(PYTHONSTARTUP)
+-			except Exception as e:
+-				print "PYTHONSTARTUP error: ",e
+-		else:
+-			print "PYTHONSTARTUP file '%s' does not exist." % PYTHONSTARTUP
+-
+-	import argparse
+-	parser = argparse.ArgumentParser(description='BinRead - function to read binary input file.')
+-	parser.add_argument('-f','--filin', help='name of binary input file', default='')
+-	args = parser.parse_args()
+-
+-	BinRead(args.filin)
+-
+Index: ../trunk-jpl/scripts/BinRead.py
+===================================================================
+--- ../trunk-jpl/scripts/BinRead.py	(revision 0)
++++ ../trunk-jpl/scripts/BinRead.py	(revision 13859)
+@@ -0,0 +1,168 @@
++#! /usr/bin/env python
++
++import os
++import sys
++import numpy
++import math
++import struct
++
++def BinRead(filin,filout=''):
++
++	from MatlabFuncs import *
++	from EnumDefinitions import *
++	from EnumToString import EnumToString
++
++	print "reading binary file."
++	f=open(filin,'rb')
++
++	if filout:
++		sys.stdout=open(filout,'w')
++
++	while True:
++		try:
++			#Step 1: read the enum to identify this record uniquely
++			enum=struct.unpack('i',f.read(struct.calcsize('i')))[0]
++		except struct.error as e:
++			print "probable EOF: %s" % e
++			break
++		print "\nenum = %d (%s)" % (enum,EnumToString(enum)[0])
++
++		#Step 2: read the data itself.
++		#first read length of record
++		reclen=struct.unpack('i',f.read(struct.calcsize('i')))[0]
++		print "reclen = %d" % reclen
++
++		#read data code: 
++		code=struct.unpack('i',f.read(struct.calcsize('i')))[0]
++		print "code = %d" % code
++
++		if   code == FormatToCode('Boolean'):
++#			bval=struct.unpack('b',f.read(reclen-struct.calcsize('i')))[0]
++			bval=struct.unpack('i',f.read(reclen-struct.calcsize('i')))[0]
++			print "bval = %d" % bval
++
++		elif code == FormatToCode('Integer'):
++			ival=struct.unpack('i',f.read(reclen-struct.calcsize('i')))[0]
++			print "ival = %d" % ival
++
++		elif code == FormatToCode('Double'):
++			dval=struct.unpack('d',f.read(reclen-struct.calcsize('i')))[0]
++			print "dval = %f" % dval
++
++		elif code == FormatToCode('String'):
++			strlen=struct.unpack('i',f.read(struct.calcsize('i')))[0]
++			print "strlen = %d" % strlen
++			sval=struct.unpack('%ds' % strlen,f.read(strlen))[0]
++			print "sval = '%s'" % sval
++
++		elif code == FormatToCode('BooleanMat'):
++			#read matrix type: 
++			mattype=struct.unpack('i',f.read(struct.calcsize('i')))[0]
++			print "mattype = %d" % mattype
++
++			#now read matrix
++			s=[0,0]
++			s[0]=struct.unpack('i',f.read(struct.calcsize('i')))[0]
++			s[1]=struct.unpack('i',f.read(struct.calcsize('i')))[0]
++			print "s = [%dx%d]" % (s[0],s[1])
++			data=numpy.zeros((s[0],s[1]))
++			for i in xrange(s[0]):
++				for j in xrange(s[1]):
++					data[i][j]=struct.unpack('d',f.read(struct.calcsize('d')))[0]    #get to the "c" convention, hence the transpose
++					print "data[%d,%d] = %f" % (i,j,data[i][j])
++
++		elif code == FormatToCode('IntMat'):
++			#read matrix type: 
++			mattype=struct.unpack('i',f.read(struct.calcsize('i')))[0]
++			print "mattype = %d" % mattype
++
++			#now read matrix
++			s=[0,0]
++			s[0]=struct.unpack('i',f.read(struct.calcsize('i')))[0]
++			s[1]=struct.unpack('i',f.read(struct.calcsize('i')))[0]
++			print "s = [%dx%d]" % (s[0],s[1])
++			data=numpy.zeros((s[0],s[1]))
++			for i in xrange(s[0]):
++				for j in xrange(s[1]):
++					data[i][j]=struct.unpack('d',f.read(struct.calcsize('d')))[0]    #get to the "c" convention, hence the transpose
++					print "data[%d,%d] = %f" % (i,j,data[i][j])
++
++		elif code == FormatToCode('DoubleMat'):
++			#read matrix type: 
++			mattype=struct.unpack('i',f.read(struct.calcsize('i')))[0]
++			print "mattype = %d" % mattype
++
++			#now read matrix
++			s=[0,0]
++			s[0]=struct.unpack('i',f.read(struct.calcsize('i')))[0]
++			s[1]=struct.unpack('i',f.read(struct.calcsize('i')))[0]
++			print "s = [%dx%d]" % (s[0],s[1])
++			data=numpy.zeros((s[0],s[1]))
++			for i in xrange(s[0]):
++				for j in xrange(s[1]):
++					data[i][j]=struct.unpack('d',f.read(struct.calcsize('d')))[0]    #get to the "c" convention, hence the transpose
++					print "data[%d,%d] = %f" % (i,j,data[i][j])
++
++		elif code == FormatToCode('MatArray'):
++			fid.seek(reclen-4,1)
++			print "skipping %d bytes for code %d." % (code, reclen-4)
++
++		elif code == FormatToCode('StringArray'):
++			fid.seek(reclen-4,1)
++			print "skipping %d bytes for code %d." % (code, reclen-4)
++
++		else:
++			raise TypeError('BinRead error message: data type: %d not supported yet! (%s)' % (code,EnumToString(enum)[0]))
++
++	f.close()
++
++def FormatToCode(format): # {{{
++	"""
++	This routine takes the format string, and hardcodes it into an integer, which 
++	is passed along the record, in order to identify the nature of the dataset being 
++	sent.
++	"""
++
++	if   strcmpi(format,'Boolean'):
++		code=1
++	elif strcmpi(format,'Integer'):
++		code=2
++	elif strcmpi(format,'Double'):
++		code=3
++	elif strcmpi(format,'String'):
++		code=4
++	elif strcmpi(format,'BooleanMat'):
++		code=5
++	elif strcmpi(format,'IntMat'):
++		code=6
++	elif strcmpi(format,'DoubleMat'):
++		code=7
++	elif strcmpi(format,'MatArray'):
++		code=8
++	elif strcmpi(format,'StringArray'):
++		code=9
++	else:
++		raise InputError('FormatToCode error message: data type not supported yet!')
++
++	return code
++# }}}
++
++if __name__ == '__main__':
++	if 'PYTHONSTARTUP' in os.environ:
++		PYTHONSTARTUP=os.environ['PYTHONSTARTUP']
++		print 'PYTHONSTARTUP =',PYTHONSTARTUP
++		if os.path.exists(PYTHONSTARTUP):
++			try:
++				execfile(PYTHONSTARTUP)
++			except Exception as e:
++				print "PYTHONSTARTUP error: ",e
++		else:
++			print "PYTHONSTARTUP file '%s' does not exist." % PYTHONSTARTUP
++
++	import argparse
++	parser = argparse.ArgumentParser(description='BinRead - function to read binary input file.')
++	parser.add_argument('-f','--filin', help='name of binary input file', default='')
++	args = parser.parse_args()
++
++	BinRead(args.filin)
++
+
+Property changes on: ../trunk-jpl/scripts/BinRead.py
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13859-13860.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13859-13860.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13859-13860.diff	(revision 13980)
@@ -0,0 +1,110 @@
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 13859)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 13860)
+@@ -28,6 +28,7 @@
+ 
+ 		virtual void   Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters)=0;
+ 		virtual void   SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters)=0;
++		virtual void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum)=0;
+ 		virtual void   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>*  Kfs,Vector<IssmDouble>* df)=0;
+ 		virtual void   CreatePVector(Vector<IssmDouble>* pf)=0;
+ 		virtual void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff)=0;
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13859)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13860)
+@@ -161,6 +161,69 @@
+ 	}
+ }
+ /*}}}*/
++/*FUNCTION Tria::GetDofList {{{*/
++void Tria::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
++
++	int index;
++	int set_enum;
++
++	/*Find node index*/
++	index = this->GetNodeIndex(node);
++
++	/*Output */
++	int d_nz = 0;
++	int o_nz = 0;
++
++	/*Loop over all nodes*/
++	for(int i=0;i<3;i++){
++
++		if(!flags[this->nodes[i]->Sid()]){
++
++			/*flag current node so that no other element processes it*/
++			flags[this->nodes[i]->Sid()]=true;
++
++			/*What set are we interested in?*/
++			if(i!=index)
++			 set_enum=set2_enum;
++			else
++			 set_enum=set1_enum;
++
++			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
++			switch(set2_enum){
++				case FsetEnum:
++					if(nodes[i]->indexing.fsize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				case GsetEnum:
++					if(nodes[i]->indexing.gsize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				case SsetEnum:
++					if(nodes[i]->indexing.ssize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				default: _error_("not supported");
++			}
++		}
++	}
++
++	/*Assign output pointers: */
++	*pd_nz=d_nz;
++	*po_nz=o_nz;
++}
++/*}}}*/
+ /*FUNCTION Tria::CreateKMatrix {{{*/
+ void  Tria::CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,Vector<IssmDouble>* df){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13859)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13860)
+@@ -75,6 +75,7 @@
+ 		void   ComputeStressTensor();
+ 		void   Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
+ 		void   SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
++		void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
+ 		void   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,Vector<IssmDouble>* df);
+ 		void   CreatePVector(Vector<IssmDouble>* pf);
+ 		void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13859)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13860)
+@@ -79,6 +79,7 @@
+ 		void   ComputeStressTensor();
+ 		void   Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
+ 		void   SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
++		void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum){_error_("not implemented yet");};
+ 		void   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,Vector<IssmDouble>* df);
+ 		void   CreatePVector(Vector<IssmDouble>* pf);
+ 		void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13860-13861.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13860-13861.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13860-13861.diff	(revision 13980)
@@ -0,0 +1,87 @@
+Index: ../trunk-jpl/externalpackages/esmf/doc/ESMF_usrdoc.pdf
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/externalpackages/esmf/doc/ESMF_refdoc.pdf
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/externalpackages/esmf/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/esmf/install.sh	(revision 13860)
++++ ../trunk-jpl/externalpackages/esmf/install.sh	(revision 13861)
+@@ -1,51 +1,38 @@
+ #!/bin/bash
+ set -eu
+ 
+-#0: cleanup
+-#1: install
+-#2: test
+-
+-install=2
+-
+ export ESMF_DIR=$ISSM_DIR/externalpackages/esmf/esmf
+ export ESMF_COMPILER=gfortran
+ export ESMF_COMM=mpich2
+ 
+-if [[ $install == "0" ]]; then
+-	#Some cleanup
+-	rm -rf esmf_5_2_0rp2
+-	rm -rf esmf
+-fi
++#Some cleanup
++rm -rf esmf_5_2_0rp2
++rm -rf esmf
+ 
+-if [[ $install == "1" ]]; then
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/esmf_5_2_0rp2_src.tar.gz' 'esmf_5_2_0rp2_src.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/docs/ESMF_refdoc.pdf' 'ESMF_refdoc.pdf'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/docs/ESMF_usrdoc.pdf' 'ESMF_usrdoc.pdf'
+ 
+-	#Download from ISSM server
+-	$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/esmf_5_2_0rp2_src.tar.gz' 'esmf_5_2_0rp2_src.tar.gz'
++#Untar 
++tar -zxvf  esmf_5_2_0rp2_src.tar.gz
+ 
+-	#Untar 
+-	tar -zxvf  esmf_5_2_0rp2_src.tar.gz
+ 
++#Configure esmf
++cd esmf
+ 
+-	#Configure esmf
+-	cd esmf
+-
+-
+-
+-	#Compile and install esmf
+-	if [ $# -eq 0 ]; then
+-		make
+-		make install
+-	else
+-		make -j $1
+-		make -j $1 install
+-	fi
++#Compile and install esmf
++if [ $# -eq 0 ]; then
++	make
++	make install
++else
++	make -j $1
++	make -j $1 install
+ fi
+ 
+-if [[ $install == "2" ]]; then
+-	cd esmf
+-	if [ $# -eq 0 ]; then
+-		make all_tests
+-	else
+-		make -j $1 all_tests
+-	fi
++cd esmf
++if [ $# -eq 0 ]; then
++	make all_tests
++else
++	make -j $1 all_tests
+ fi
Index: /issm/oecreview/Archive/13393-13976/ISSM-13861-13862.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13861-13862.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13861-13862.diff	(revision 13980)
@@ -0,0 +1,611 @@
+Index: ../trunk-jpl/src/m/classes/autodiff.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.py	(revision 13861)
++++ ../trunk-jpl/src/m/classes/autodiff.py	(revision 13862)
+@@ -1,4 +1,6 @@
+ #module imports
++from dependent import *
++from independent import *
+ from fielddisplay import fielddisplay
+ from EnumDefinitions import *
+ from checkfield import *
+@@ -13,32 +15,183 @@
+ 	"""
+ 
+ 	#properties
+-	def __init__(self):
+-		# {{{ Properties
+-		self.isautodiff = False
++	def __init__(self,*args):    # {{{
++		self.isautodiff   = False
++		self.dependents   = []
++		self.independents = []
++		self.driver       = 'fos_forward'
+ 
+-		#set defaults
+-		self.setdefaultparameters()
++		if not len(args):
++			self.setdefaultparameters()
++		else:
++			raise RuntimeError("constructor not supported")
++	# }}}
+ 
+-		#}}}
+-	def __repr__(self):
+-		# {{{ Display
+-		string='   automatic differentiation parameters:'
+-		string="%s\n%s"%(string,fielddisplay(self,'isautodiff','indicates if the automatic differentiation is activated'))
+-		return string
+-		#}}}
+-	def setdefaultparameters(self):
+-		# {{{setdefaultparameters
++	def __repr__(self):    # {{{
++		s ="   automatic differentiation parameters:"
++
++		s+="%s\n" % fielddisplay(self,'isautodiff',"indicates if the automatic differentiation is activated")
++		s+="%s\n" % fielddisplay(self,'dependents',"list of dependent variables")
++		s+="%s\n" % fielddisplay(self,'independents',"list of independent variables")
++		s+="%s\n" % fielddisplay(self,'driver',"ADOLC driver ('fos_forward' or 'fov_forward'")
++
++		return s
++	# }}}
++
++	def setdefaultparameters(self):    # {{{
+ 		return self
+-	#}}}
++	# }}}
+ 
+ 	def checkconsistency(self,md,solution,analyses):    # {{{
++
++		#Early return 
++		if not self.isautodiff:
++			return md
++
++		#Driver value:
++		md = checkfield(md,'autodiff.driver','values',['fos_forward','fov_forward','fov_forward_all','fos_reverse','fov_reverse','fov_reverse_all'])
++
++		#go through our dependents and independents and check consistency: 
++		for dep in self.dependents:
++			dep.checkconsistency(md,solution,analyses)
++		for i,indep in enumerate(self.independents):
++			indep.checkconsistency(md,i,solution,analyses,self.driver)
++
+ 		return md
+ 	# }}}
+ 
+ 	def marshall(self,fid):    # {{{
+ 		WriteData(fid,'object',self,'fieldname','isautodiff','format','Boolean')
+-		WriteData(fid,'data',False,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
+-		WriteData(fid,'data',False,'enum',AutodiffKeepEnum(),'format','Boolean');
++		WriteData(fid,'object',self,'fieldname','driver','format','String')
++
++		#early return
++		if not self.isautodiff:
++			WriteData(fid,'data',False,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean')
++			WriteData(fid,'data',False,'enum',AutodiffKeepEnum(),'format','Boolean')
++			return
++
++		#process dependent variables {{{
++		num_dependent_objects=len(self.dependents)
++		WriteData(fid,'data',num_dependent_objects,'enum',AutodiffNumDependentObjectsEnum(),'format','Integer')
++
++		if num_dependent_objects:
++			names=numpy.zeros(num_dependent_objects)
++			types=numpy.zeros(num_dependent_objects)
++			indices=numpy.zeros(num_dependent_objects)
++
++			for i,dep in enumerate(self.dependents):
++				names[i]=StringToEnum(dep.name)[0]
++				types[i]=dep.typetoscalar()
++				indices[i]=dep.index
++
++			WriteData(fid,'data',names,'enum',AutodiffDependentObjectNamesEnum(),'format','IntMat','mattype',3)
++			WriteData(fid,'data',types,'enum',AutodiffDependentObjectTypesEnum(),'format','IntMat','mattype',3)
++			WriteData(fid,'data',indices,'enum',AutodiffDependentObjectIndicesEnum(),'format','IntMat','mattype',3)
++		#}}}
++
++		#process independent variables {{{
++		num_independent_objects=len(self.independents)
++		WriteData(fid,'data',num_independent_objects,'enum',AutodiffNumIndependentObjectsEnum(),'format','Integer')
++
++		if num_independent_objects:
++			names=numpy.zeros(num_independent_objects)
++			types=numpy.zeros(num_independent_objects)
++
++			for i,indep in enumerate(self.independents):
++				names[i]=StringToEnum(indep.name)[0]
++				types[i]=indep.typetoscalar()
++
++			WriteData(fid,'data',names,'enum',AutodiffIndependentObjectNamesEnum(),'format','IntMat','mattype',3)
++			WriteData(fid,'data',types,'enum',AutodiffIndependentObjectTypesEnum(),'format','IntMat','mattype',3)
++		#}}}
++
++		#if driver is fos_forward, build index:  {{{
++		if strcmpi(self.driver,'fos_forward'):
++			index=0
++
++			for indep in self.independents:
++				if not isnan(indep.fos_forward_index):
++					index+=indep.fos_forward_index
++					break
++				else:
++					if strcmpi(indep.type,'scalar'):
++						index+=1
++					else:
++						index+=indep.nods
++
++			index-=1    #get c-index numbering going
++			WriteData(fid,'data',index,'enum',AutodiffFosForwardIndexEnum(),'format','Integer')
++		#}}}
++
++		#if driver is fos_reverse, build index:  {{{
++		if strcmpi(self.driver,'fos_reverse'):
++			index=0
++
++			for dep in self.dependents:
++				if not isnan(dep.fos_reverse_index):
++					index+=dep.fos_reverse_index
++					break
++				else:
++					if strcmpi(dep.type,'scalar'):
++						index+=1
++					else:
++						index+=dep.nods
++
++			index-=1    #get c-index numbering going
++			WriteData(fid,'data',index,'enum',AutodiffFosReverseIndexEnum(),'format','Integer')
++		end
++		#}}}
++
++		#if driver is fov_forward, build indices:  {{{
++		if strcmpi(self.driver,'fov_forward'):
++			indices=0
++
++			for indep in self.independents:
++				if indep.fos_forward_index:
++					indices+=indep.fov_forward_indices
++					break
++				else:
++					if strcmpi(indep.type,'scalar'):
++						indices+=1
++					else:
++						indices+=indep.nods
++
++			indices-=1    #get c-indices numbering going
++			WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum(),'format','IntMat','mattype',3)
++		end
++		#}}}
++
++		#deal with mass fluxes:  {{{
++		mass_flux_segments=[dep.segments for dep in self.dependents if strcmpi(dep.name,'MassFlux')]
++
++		if mass_flux_segments:
++			WriteData(fid,'data',mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray')
++			flag=True
++		else:
++			flag=False
++		WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean')
++		#}}}
++
++		#deal with trace keep on: {{{
++		keep=False
++
++		#From ADOLC userdoc: 
++		# The optional integer argument keep of trace on determines whether the numerical values of all active variables are 
++		# recorded in a buffered temporary array or file called the taylor stack. This option takes effect if keep = 1 and 
++		# prepares the scene for an immediately following gradient evaluation by a call to a routine implementing the reverse 
++		# mode as described in the Section 4 and Section 5. 
++		#
++
++		if len(self.driver)<=3:
++			keep=False    #there is no "_reverse" string within the driver string: 
++		else:
++			if strncmpi(self.driver[3:],'_reverse',8):
++				keep=True
++			else:
++				keep=False
++		WriteData(fid,'data',keep,'enum',AutodiffKeepEnum(),'format','Boolean')
++		#}}}
++
++		return
+ 	# }}}
+ 
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 13861)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 13862)
+@@ -54,10 +54,10 @@
+ 			WriteData(fid,'object',obj,'fieldname','driver','format','String');
+ 
+ 			%early return
+-			if ~obj.isautodiff, 
+-				WriteData(fid,'data',false,'enum',AutodiffMassFluxSegmentsPresentEnum,'format','Boolean');
+-				WriteData(fid,'data',false,'enum',AutodiffKeepEnum,'format','Boolean');
+-				return; 
++			if ~obj.isautodiff,
++				WriteData(fid,'data',false,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
++				WriteData(fid,'data',false,'enum',AutodiffKeepEnum(),'format','Boolean');
++				return;
+ 			end
+ 
+ 			%process dependent variables {{{
+@@ -117,7 +117,7 @@
+ 					end
+ 				end
+ 				index=index-1; %get c-index numbering going
+-				WriteData(fid,'data',index,'enum',AutodiffFosForwardIndexEnum(),'format','Integer'); 
++				WriteData(fid,'data',index,'enum',AutodiffFosForwardIndexEnum(),'format','Integer');
+ 			end
+ 			%}}}
+ 			%if driver is fos_reverse, build index:  {{{
+@@ -138,7 +138,7 @@
+ 					end
+ 				end
+ 				index=index-1; %get c-index numbering going
+-				WriteData(fid,'data',index,'enum',AutodiffFosReverseIndexEnum(),'format','Integer'); 
++				WriteData(fid,'data',index,'enum',AutodiffFosReverseIndexEnum(),'format','Integer');
+ 			end
+ 			%}}}
+ 			%if driver is fov_forward, build indices:  {{{
+@@ -159,8 +159,7 @@
+ 					end
+ 				end
+ 				indices=indices-1; %get c-indices numbering going
+-
+-				WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum,'format','IntMat','mattype',3);
++				WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum(),'format','IntMat','mattype',3);
+ 			end
+ 			%}}}
+ 			%deal with mass fluxes:  {{{
+@@ -172,12 +171,12 @@
+ 				end
+ 			end
+ 			if ~isempty(mass_flux_segments), 
+-				WriteData(fid,'data',mass_flux_segments,'enum',MassFluxSegmentsEnum,'format','MatArray');
++				WriteData(fid,'data',mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray');
+ 				flag=true;
+-			else 
+-				flag=false; 
++			else
++				flag=false;
+ 			end
+-			WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum,'format','Boolean');
++			WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
+ 			%}}}
+ 			%deal with trace keep on: {{{
+ 			keep=false;
+@@ -198,7 +197,7 @@
+ 					keep=false;
+ 				end
+ 			end
+-			WriteData(fid,'data',keep,'enum',AutodiffKeepEnum,'format','Boolean');
++			WriteData(fid,'data',keep,'enum',AutodiffKeepEnum(),'format','Boolean');
+ 			%}}}
+ 
+ 		end % }}}
+Index: ../trunk-jpl/src/m/classes/dependent.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/dependent.m	(revision 13861)
++++ ../trunk-jpl/src/m/classes/dependent.m	(revision 13862)
+@@ -14,35 +14,34 @@
+ 		nods                 = 0;
+ 	end
+ 	methods
+-		 function obj= dependent(varargin) % {{{
++		function obj = dependent(varargin) % {{{
+ 
+-			 %use provided options to change fields
+-			 options=pairoptions(varargin{:});
++			%use provided options to change fields
++			options=pairoptions(varargin{:});
+ 
+-			 obj.name=getfieldvalue(options,'name','');
+-			 obj.type=getfieldvalue(options,'type','');
+-			 obj.exp=getfieldvalue(options,'exp','');
+-			 obj.segments=getfieldvalue(options,'segments',[]);
+-			 obj.index=getfieldvalue(options,'index',-1);
+-			 obj.nods=getfieldvalue(options,'nods',0);
++			obj.name=getfieldvalue(options,'name','');
++			obj.type=getfieldvalue(options,'type','');
++			obj.exp=getfieldvalue(options,'exp','');
++			obj.segments=getfieldvalue(options,'segments',[]);
++			obj.index=getfieldvalue(options,'index',-1);
++			obj.nods=getfieldvalue(options,'nods',0);
+ 
+-			 %if name is mass flux: 
+-			 if strcmpi(obj.name,'MassFlux'),
+-				 %make sure that we supplied a file and that it exists! 
+-				 if exist(obj.exp)~=2,
+-					 error('dependent checkconsistency: specified ''exp'' file does not exist!');
+-				 end
+-				 %process the file and retrieve segments
+-				 mesh=getfieldvalue(options,'mesh');
+-				 obj.segments=MeshProfileIntersection(mesh.elements,mesh.x,mesh.y,obj.exp);
+-			 end
+-		 end
+-		 %}}}
++			%if name is mass flux: 
++			if strcmpi(obj.name,'MassFlux'),
++				%make sure that we supplied a file and that it exists! 
++				if exist(obj.exp)~=2,
++					error('dependent checkconsistency: specified ''exp'' file does not exist!');
++				end
++				%process the file and retrieve segments
++				mesh=getfieldvalue(options,'mesh');
++				obj.segments=MeshProfileIntersection(mesh.elements,mesh.x,mesh.y,obj.exp);
++			end
++		end
++		%}}}
+ 		function obj = setdefaultparameters(obj) % {{{
+-		%do nothing
++			%do nothing
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,solution,analyses) % {{{
+-			%do nothing for now
+ 			if strcmpi(obj.name,'MassFlux'),
+ 				if isempty(obj.segments),
+ 					error('dependent checkconsistency error: need segments to compute this dependent response');
+@@ -56,14 +55,13 @@
+ 					error('cannot declare a dependent with a fos_reverse_index when the driver is not fos_reverse!');
+ 				end
+ 				if obj.nods==0,
+-					error('ependent checkconsistency error: nods should be set to the size of the independent variable');
++					error('dependent checkconsistency error: nods should be set to the size of the independent variable');
+ 				end
+-
+ 			end
+ 
+ 		end % }}}
+ 		function disp(obj) % {{{
+-			disp(sprintf('   dependent variable :'));
++			disp(sprintf('   dependent variable:'));
+ 
+ 			fielddisplay(obj,'name','variable name (must match corresponding Enum)');
+ 			fielddisplay(obj,'type','type of variable (''vertex'' or ''scalar'')');
+@@ -78,11 +76,11 @@
+ 
+ 		end % }}}
+ 		function scalar=typetoscalar(obj) % {{{
+-		if strcmpi(obj.type,'scalar'),
+-			scalar=0;
+-		elseif strcmpi(obj.type,'vertex'),
+-			scalar=1;
+-		end
++			if strcmpi(obj.type,'scalar'),
++				scalar=0;
++			elseif strcmpi(obj.type,'vertex'),
++				scalar=1;
++			end
+ 
+ 		end % }}}
+ 	end
+Index: ../trunk-jpl/src/m/classes/independent.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/independent.py	(revision 0)
++++ ../trunk-jpl/src/m/classes/independent.py	(revision 13862)
+@@ -0,0 +1,75 @@
++from pairoptions import *
++from MatlabFuncs import *
++from EnumDefinitions import *
++from WriteData import *
++
++class independent(object):
++	"""
++	INDEPENDENT class definition
++
++	   Usage:
++	      independent=independent();
++	"""
++
++	def __init__(self,*args):    # {{{
++		self.name                 = ''
++		self.type                 = ''
++		self.fos_forward_index    = float('NaN')
++		self.fov_forward_indices  = numpy.array([])
++		self.nods                 = 0
++
++		#set defaults
++		self.setdefaultparameters()
++
++		#use provided options to change fields
++		options=pairoptions(*args)
++
++		#OK get other fields
++		self=options.AssignObjectFields(self)
++	# }}}
++
++	def setdefaultparameters(self):    # {{{
++		#do nothing
++		return self
++	# }}}
++
++	def checkconsistency(self,md,i,solution,analyses,driver):    # {{{
++		if not isnan(self.fos_forward_index):
++			if not strcmpi(driver,'fos_forward'):
++				raise TypeError("cannot declare an independent with a fos_forward_index when the driver is not fos_forward!")
++			if self.nods==0:
++				raise TypeError("independent checkconsistency error: nods should be set to the size of the independent variable")
++
++		if self.fov_forward_indices:
++			if not strcmpi(driver,'fov_forward'):
++				raise TypeError("cannot declare an independent with fov_forward_indices when the driver is not fov_forward!")
++			if self.nods==0:
++				raise TypeError("independent checkconsistency error: nods should be set to the size of the independent variable")
++			end
++			md = checkfield(md,"autodiff.independents[%d].fov_forward_indices" % i,'>=',1,'<=',self.nods,'size',[float('NaN'),1])
++
++		return md
++	# }}}
++
++	def __repr__(self):    # {{{
++		s ="   independent variable:\n"
++
++		s+="%s\n" % fielddisplay(self,'name',"variable name (must match corresponding Enum)")
++		s+="%s\n" % fielddisplay(self,'type',"type of variable ('vertex' or 'scalar')")
++		if not isnan(self.fos_forward_index):
++			s+="%s\n" % fielddisplay(self,'fos_forward_index',"index for fos_foward driver of ADOLC")
++		if numpy.any(numpy.logical_not(numpy.isnan(self.fov_forward_indices))):
++			s+="%s\n" % fielddisplay(self,'fov_forward_indices',"indices for fov_foward driver of ADOLC")
++
++		return s
++	# }}}
++
++	def typetoscalar(self):    # {{{
++		if   strcmpi(self.type,'scalar'):
++			scalar=0
++		elif strcmpi(self.type,'vertex'):
++			scalar=1
++
++		return scalar
++	# }}}
++
+Index: ../trunk-jpl/src/m/classes/independent.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/independent.m	(revision 13861)
++++ ../trunk-jpl/src/m/classes/independent.m	(revision 13862)
+@@ -12,22 +12,21 @@
+ 		nods                 = 0;
+ 	end
+ 	methods
+-		 function obj= independent(varargin) % {{{
++		function obj = independent(varargin) % {{{
+ 
+-			 %use provided options to change fields
+-			 options=pairoptions(varargin{:});
++			%use provided options to change fields
++			options=pairoptions(varargin{:});
+ 
+-			 %OK get other fields
+-			 obj=AssignObjectFields(pairoptions(varargin{:}),obj);
++			%OK get other fields
++			obj=AssignObjectFields(pairoptions(varargin{:}),obj);
+ 
+-		 end
+-		 %}}}
++		end
++		%}}}
+ 		function obj = setdefaultparameters(obj) % {{{
+ 			%do nothing
+ 
+ 		end % }}}
+ 		function md = checkconsistency(obj,md,i,solution,analyses,driver) % {{{
+-			%do nothing for now
+ 			if ~isnan(obj.fos_forward_index),
+ 				if ~strcmpi(driver,'fos_forward'),
+ 					error('cannot declare an independent with a fos_forward_index when the driver is not fos_forward!');
+@@ -41,7 +40,6 @@
+ 				if ~strcmpi(driver,'fov_forward'),
+ 					error('cannot declare an independent with fov_forward_indices when the driver is not fov_forward!');
+ 				end
+-
+ 				if obj.nods==0,
+ 					error('independent checkconsistency error: nods should be set to the size of the independent variable');
+ 				end
+@@ -50,7 +48,7 @@
+ 
+ 		end % }}}
+ 		function disp(obj) % {{{
+-			disp(sprintf('   independent variable :'));
++			disp(sprintf('   independent variable:'));
+ 
+ 			fielddisplay(obj,'name','variable name (must match corresponding Enum)');
+ 			fielddisplay(obj,'type','type of variable (''vertex'' or ''scalar'')');
+Index: ../trunk-jpl/src/m/classes/dependent.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/dependent.py	(revision 0)
++++ ../trunk-jpl/src/m/classes/dependent.py	(revision 13862)
+@@ -0,0 +1,94 @@
++import os.path
++from pairoptions import *
++from MatlabFuncs import *
++from EnumDefinitions import *
++from WriteData import *
++#from MeshProfileIntersection import *
++
++class dependent(object):
++	"""
++	DEPENDENT class definition
++
++	   Usage:
++	      dependent=dependent();
++	"""
++
++	def __init__(self,*args):    # {{{
++		self.name                 = ''
++		self.type                 = ''
++		self.fos_reverse_index    = float('NaN')
++		self.exp                  = ''
++		self.segments             = []
++		self.index                = -1
++		self.nods                 = 0
++
++		#set defaults 
++		self.setdefaultparameters()
++
++		#use provided options to change fields
++		options=pairoptions(*args)
++
++		self.name=options.getfieldvalue('name','')
++		self.type=options.getfieldvalue('type','')
++		self.exp=options.getfieldvalue('exp','')
++		self.segments=options.getfieldvalue('segments',[])
++		self.index=options.getfieldvalue('index',-1)
++		self.nods=options.getfieldvalue('nods',0)
++
++		#if name is mass flux: 
++		if strcmpi(self.name,'MassFlux'):
++			#make sure that we supplied a file and that it exists! 
++			if not os.path.exists(self.exp):
++				raise IOError("dependent checkconsistency: specified 'exp' file does not exist!")
++			#process the file and retrieve segments
++			mesh=options.getfieldvalue('mesh')
++			raise RuntimeError("MeshProfileIntersection is not complete.")
++			self.segments=MeshProfileIntersection(mesh.elements,mesh.x,mesh.y,self.exp)
++	# }}}
++
++	def setdefaultparameters(self):    # {{{
++		#do nothing
++		return self
++	# }}}
++
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		if strcmpi(self.name,'MassFlux'):
++			if not self.segments:
++				raise RuntimeError("dependent checkconsistency error: need segments to compute this dependent response")
++			if self.index<0:
++				raise RuntimeError("dependent checkconsistency error: index for segments should be >=0")
++
++		if not isnan(self.fos_reverse_index):
++			if not strcmpi(driver,'fos_reverse'):
++				raise TypeError("cannot declare a dependent with a fos_reverse_index when the driver is not fos_reverse!")
++			if self.nods==0:
++				raise TypeError("dependent checkconsistency error: nods should be set to the size of the independent variable")
++
++		return md
++	# }}}
++
++	def __repr__(self):    # {{{
++		s ="   dependent variable:\n"
++
++		s+="%s\n" % fielddisplay(self,'name',"variable name (must match corresponding Enum)")
++		s+="%s\n" % fielddisplay(self,'type',"type of variable ('vertex' or 'scalar')")
++
++		if not isnan(self.fos_reverse_index):
++			s+="%s\n" % fielddisplay(self,'fos_reverse_index',"index for fos_reverse driver of ADOLC")
++		end
++		if self.exp:
++			s+="%s\n" % fielddisplay(self,'exp',"file needed to compute dependent variable")
++			s+="%s\n" % fielddisplay(self,'segments',"mass flux segments")
++
++		return s
++	# }}}
++
++	def typetoscalar(self):    # {{{
++		if   strcmpi(self.type,'scalar'):
++			scalar=0
++		elif strcmpi(self.type,'vertex'):
++			scalar=1
++
++		return scalar
++	# }}}
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13862-13863.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13862-13863.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13862-13863.diff	(revision 13980)
@@ -0,0 +1,165 @@
+Index: ../trunk-jpl/src/m/classes/autodiff.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.py	(revision 13862)
++++ ../trunk-jpl/src/m/classes/autodiff.py	(revision 13863)
+@@ -28,12 +28,12 @@
+ 	# }}}
+ 
+ 	def __repr__(self):    # {{{
+-		s ="   automatic differentiation parameters:"
++		s ="      automatic differentiation parameters:\n"
+ 
+ 		s+="%s\n" % fielddisplay(self,'isautodiff',"indicates if the automatic differentiation is activated")
+ 		s+="%s\n" % fielddisplay(self,'dependents',"list of dependent variables")
+ 		s+="%s\n" % fielddisplay(self,'independents',"list of independent variables")
+-		s+="%s\n" % fielddisplay(self,'driver',"ADOLC driver ('fos_forward' or 'fov_forward'")
++		s+="%s\n" % fielddisplay(self,'driver',"ADOLC driver ('fos_forward' or 'fov_forward')")
+ 
+ 		return s
+ 	# }}}
+@@ -139,7 +139,6 @@
+ 
+ 			index-=1    #get c-index numbering going
+ 			WriteData(fid,'data',index,'enum',AutodiffFosReverseIndexEnum(),'format','Integer')
+-		end
+ 		#}}}
+ 
+ 		#if driver is fov_forward, build indices:  {{{
+@@ -158,7 +157,6 @@
+ 
+ 			indices-=1    #get c-indices numbering going
+ 			WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum(),'format','IntMat','mattype',3)
+-		end
+ 		#}}}
+ 
+ 		#deal with mass fluxes:  {{{
+Index: ../trunk-jpl/src/m/classes/autodiff.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.m	(revision 13862)
++++ ../trunk-jpl/src/m/classes/autodiff.m	(revision 13863)
+@@ -42,11 +42,11 @@
+ 
+ 		end % }}}
+ 		function disp(obj) % {{{
+-			disp(sprintf('   automatic differentiation parameters:'));
++			disp(sprintf('      automatic differentiation parameters:'));
+ 			fielddisplay(obj,'isautodiff','indicates if the automatic differentiation is activated');
+ 			fielddisplay(obj,'dependents','list of dependent variables');
+ 			fielddisplay(obj,'independents','list of independent variables');
+-			fielddisplay(obj,'driver','ADOLC driver (''fos_forward'' or ''fov_forward''');
++			fielddisplay(obj,'driver','ADOLC driver (''fos_forward'' or ''fov_forward'')');
+ 		end % }}}
+ 		function marshall(obj,fid) % {{{
+ 
+Index: ../trunk-jpl/src/m/classes/independent.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/independent.py	(revision 13862)
++++ ../trunk-jpl/src/m/classes/independent.py	(revision 13863)
+@@ -1,4 +1,5 @@
+ from pairoptions import *
++from fielddisplay import *
+ from MatlabFuncs import *
+ from EnumDefinitions import *
+ from WriteData import *
+@@ -28,6 +29,19 @@
+ 		self=options.AssignObjectFields(self)
+ 	# }}}
+ 
++	def __repr__(self):    # {{{
++		s ="   independent variable:\n"
++
++		s+="%s\n" % fielddisplay(self,'name',"variable name (must match corresponding Enum)")
++		s+="%s\n" % fielddisplay(self,'type',"type of variable ('vertex' or 'scalar')")
++		if not isnan(self.fos_forward_index):
++			s+="%s\n" % fielddisplay(self,'fos_forward_index',"index for fos_foward driver of ADOLC")
++		if numpy.any(numpy.logical_not(numpy.isnan(self.fov_forward_indices))):
++			s+="%s\n" % fielddisplay(self,'fov_forward_indices',"indices for fov_foward driver of ADOLC")
++
++		return s
++	# }}}
++
+ 	def setdefaultparameters(self):    # {{{
+ 		#do nothing
+ 		return self
+@@ -45,25 +59,11 @@
+ 				raise TypeError("cannot declare an independent with fov_forward_indices when the driver is not fov_forward!")
+ 			if self.nods==0:
+ 				raise TypeError("independent checkconsistency error: nods should be set to the size of the independent variable")
+-			end
+ 			md = checkfield(md,"autodiff.independents[%d].fov_forward_indices" % i,'>=',1,'<=',self.nods,'size',[float('NaN'),1])
+ 
+ 		return md
+ 	# }}}
+ 
+-	def __repr__(self):    # {{{
+-		s ="   independent variable:\n"
+-
+-		s+="%s\n" % fielddisplay(self,'name',"variable name (must match corresponding Enum)")
+-		s+="%s\n" % fielddisplay(self,'type',"type of variable ('vertex' or 'scalar')")
+-		if not isnan(self.fos_forward_index):
+-			s+="%s\n" % fielddisplay(self,'fos_forward_index',"index for fos_foward driver of ADOLC")
+-		if numpy.any(numpy.logical_not(numpy.isnan(self.fov_forward_indices))):
+-			s+="%s\n" % fielddisplay(self,'fov_forward_indices',"indices for fov_foward driver of ADOLC")
+-
+-		return s
+-	# }}}
+-
+ 	def typetoscalar(self):    # {{{
+ 		if   strcmpi(self.type,'scalar'):
+ 			scalar=0
+Index: ../trunk-jpl/src/m/classes/dependent.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/dependent.py	(revision 13862)
++++ ../trunk-jpl/src/m/classes/dependent.py	(revision 13863)
+@@ -1,5 +1,6 @@
+ import os.path
+ from pairoptions import *
++from fielddisplay import *
+ from MatlabFuncs import *
+ from EnumDefinitions import *
+ from WriteData import *
+@@ -46,6 +47,21 @@
+ 			self.segments=MeshProfileIntersection(mesh.elements,mesh.x,mesh.y,self.exp)
+ 	# }}}
+ 
++	def __repr__(self):    # {{{
++		s ="   dependent variable:\n"
++
++		s+="%s\n" % fielddisplay(self,'name',"variable name (must match corresponding Enum)")
++		s+="%s\n" % fielddisplay(self,'type',"type of variable ('vertex' or 'scalar')")
++
++		if not isnan(self.fos_reverse_index):
++			s+="%s\n" % fielddisplay(self,'fos_reverse_index',"index for fos_reverse driver of ADOLC")
++		if self.exp:
++			s+="%s\n" % fielddisplay(self,'exp',"file needed to compute dependent variable")
++			s+="%s\n" % fielddisplay(self,'segments',"mass flux segments")
++
++		return s
++	# }}}
++
+ 	def setdefaultparameters(self):    # {{{
+ 		#do nothing
+ 		return self
+@@ -67,22 +83,6 @@
+ 		return md
+ 	# }}}
+ 
+-	def __repr__(self):    # {{{
+-		s ="   dependent variable:\n"
+-
+-		s+="%s\n" % fielddisplay(self,'name',"variable name (must match corresponding Enum)")
+-		s+="%s\n" % fielddisplay(self,'type',"type of variable ('vertex' or 'scalar')")
+-
+-		if not isnan(self.fos_reverse_index):
+-			s+="%s\n" % fielddisplay(self,'fos_reverse_index',"index for fos_reverse driver of ADOLC")
+-		end
+-		if self.exp:
+-			s+="%s\n" % fielddisplay(self,'exp',"file needed to compute dependent variable")
+-			s+="%s\n" % fielddisplay(self,'segments',"mass flux segments")
+-
+-		return s
+-	# }}}
+-
+ 	def typetoscalar(self):    # {{{
+ 		if   strcmpi(self.type,'scalar'):
+ 			scalar=0
Index: /issm/oecreview/Archive/13393-13976/ISSM-13863-13864.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13863-13864.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13863-13864.diff	(revision 13980)
@@ -0,0 +1,93 @@
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13863)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13864)
+@@ -32,6 +32,7 @@
+ 						ElementConnectivity.la\
+ 						EnumToString.la\
+ 						InterpFromMeshToMesh2d.la\
++						MeshProfileIntersection.la\
+ 						NodeConnectivity.la\
+ 						StringToEnum.la\
+ 						TriMesh.la\
+@@ -107,6 +108,10 @@
+ 												../InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h
+ InterpFromMeshToMesh2d_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
+ 
++MeshProfileIntersection_la_SOURCES = ../MeshProfileIntersection/MeshProfileIntersection.cpp\
++										../MeshProfileIntersection/MeshProfileIntersection.h
++MeshProfileIntersection_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
++
+ NodeConnectivity_la_SOURCES = ../NodeConnectivity/NodeConnectivity.cpp\
+ 										../NodeConnectivity/NodeConnectivity.h
+ NodeConnectivity_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+Index: ../trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.cpp	(revision 13863)
++++ ../trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.cpp	(revision 13864)
+@@ -10,7 +10,7 @@
+ 		index,x,y is a triangulation
+ 		filename: name of Argus style .exp file containing the segments (can be groups of disconnected segments)
+ 	output:
+-		segments: array made of x1,y1,x2,y2,element_id lines (x1,y1) and (x2,y2) are segment extremitis for a segment 
++		segments: array made of x1,y1,x2,y2,element_id lines (x1,y1) and (x2,y2) are segment extremities for a segment 
+ 		belonging to the elemnt_id element. there are as many lines in segments as there are segments intersecting the 
+ 		mesh.
+ */
+@@ -25,7 +25,7 @@
+ 	_printLine_("        index,x,y is a triangulation");
+ 	_printLine_("        filename: name of Argus style .exp file containing the segments (can be groups of disconnected segments)");
+ 	_printLine_("   output:");
+-	_printLine_("        segments: array made of x1,y1,x2,y2,element_id lines (x1,y1) and (x2,y2) are segment extremitis for a segment ");
++	_printLine_("        segments: array made of x1,y1,x2,y2,element_id lines (x1,y1) and (x2,y2) are segment extremities for a segment ");
+ 	_printLine_("        belonging to the elemnt_id element. there are as many lines in segments as there are segments intersecting the ");
+ 	_printLine_("        mesh.");
+ }/*}}}*/
+@@ -44,7 +44,7 @@
+ 	int     dummy;
+ 	
+ 	//contours
+-	mxArray*  matlabstructure=NULL;
++	DataSet *domain = NULL;
+ 	Contour<double>** contours=NULL;
+ 	int       numcontours;
+ 	Contour<double>*  contouri=NULL;
+@@ -56,12 +56,9 @@
+ 	/*Boot module: */
+ 	MODULEBOOT();
+ 
+-	/*checks on arguments on the matlab side: */
+-	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&MeshProfileIntersectionUsage);
++	/*checks on arguments: */
++	CHECKARGUMENTS(NLHS,NRHS,&MeshProfileIntersectionUsage);
+ 
+-	/*First, call expread on filename to build a contour array in the matlab workspace: */
+-	mexCallMATLAB( 1, &matlabstructure, 1, (mxArray**)&FILENAME, "expread");
+-
+ 	/*Fetch inputs: */
+ 	//index
+ 	FetchData(&double_index,&nel,&dummy,INDEX);
+@@ -77,18 +74,12 @@
+ 	FetchData(&y,&dummy,Y);
+ 
+ 	//contours
+-	numcontours=mxGetNumberOfElements(matlabstructure);
++	FetchData(&domain,FILENAME);
++	// MeshProfileIntersectionx should be modified to take DataSet directly (and perhaps SeqMat and SeqVec).
++	numcontours=domain->Size();
+ 	contours=xNew<Contour<double>*>(numcontours);
+-	for(i=0;i<numcontours;i++){
+-		//allocate
+-		contouri=xNew<Contour<double> >(1);
+-		//retrieve dimension of this contour.
+-		contouri->nods=(int)mxGetScalar(mxGetField(matlabstructure,i,"nods"));
+-		//set pointers.
+-		contouri->x=mxGetPr(mxGetField(matlabstructure,i,"x"));
+-		contouri->y=mxGetPr(mxGetField(matlabstructure,i,"y"));
+-		*(contours+i)=contouri;
+-	}
++	for(i=0;i<numcontours;i++)
++		*(contours+i)=(Contour<double>*)domain->GetObjectByOffset(i);
+ 
+ 	/* Debugging of contours :{{{1*/
+ 	/*for(i=0;i<numcontours;i++){
Index: /issm/oecreview/Archive/13393-13976/ISSM-13864-13865.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13864-13865.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13864-13865.diff	(revision 13980)
@@ -0,0 +1,98 @@
+Index: ../trunk-jpl/src/m/classes/autodiff.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/autodiff.py	(revision 13864)
++++ ../trunk-jpl/src/m/classes/autodiff.py	(revision 13865)
+@@ -1,4 +1,5 @@
+ #module imports
++import numpy
+ from dependent import *
+ from independent import *
+ from fielddisplay import fielddisplay
+@@ -110,7 +111,7 @@
+ 			index=0
+ 
+ 			for indep in self.independents:
+-				if not isnan(indep.fos_forward_index):
++				if not numpy.isnan(indep.fos_forward_index):
+ 					index+=indep.fos_forward_index
+ 					break
+ 				else:
+@@ -128,7 +129,7 @@
+ 			index=0
+ 
+ 			for dep in self.dependents:
+-				if not isnan(dep.fos_reverse_index):
++				if not numpy.isnan(dep.fos_reverse_index):
+ 					index+=dep.fos_reverse_index
+ 					break
+ 				else:
+Index: ../trunk-jpl/src/m/classes/independent.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/independent.py	(revision 13864)
++++ ../trunk-jpl/src/m/classes/independent.py	(revision 13865)
+@@ -1,3 +1,4 @@
++import numpy
+ from pairoptions import *
+ from fielddisplay import *
+ from MatlabFuncs import *
+@@ -34,7 +35,7 @@
+ 
+ 		s+="%s\n" % fielddisplay(self,'name',"variable name (must match corresponding Enum)")
+ 		s+="%s\n" % fielddisplay(self,'type',"type of variable ('vertex' or 'scalar')")
+-		if not isnan(self.fos_forward_index):
++		if not numpy.isnan(self.fos_forward_index):
+ 			s+="%s\n" % fielddisplay(self,'fos_forward_index',"index for fos_foward driver of ADOLC")
+ 		if numpy.any(numpy.logical_not(numpy.isnan(self.fov_forward_indices))):
+ 			s+="%s\n" % fielddisplay(self,'fov_forward_indices',"indices for fov_foward driver of ADOLC")
+@@ -48,7 +49,7 @@
+ 	# }}}
+ 
+ 	def checkconsistency(self,md,i,solution,analyses,driver):    # {{{
+-		if not isnan(self.fos_forward_index):
++		if not numpy.isnan(self.fos_forward_index):
+ 			if not strcmpi(driver,'fos_forward'):
+ 				raise TypeError("cannot declare an independent with a fos_forward_index when the driver is not fos_forward!")
+ 			if self.nods==0:
+Index: ../trunk-jpl/src/m/classes/dependent.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/dependent.py	(revision 13864)
++++ ../trunk-jpl/src/m/classes/dependent.py	(revision 13865)
+@@ -1,10 +1,11 @@
+ import os.path
++import numpy
+ from pairoptions import *
+ from fielddisplay import *
+ from MatlabFuncs import *
+ from EnumDefinitions import *
+ from WriteData import *
+-#from MeshProfileIntersection import *
++from MeshProfileIntersection import *
+ 
+ class dependent(object):
+ 	"""
+@@ -43,7 +44,6 @@
+ 				raise IOError("dependent checkconsistency: specified 'exp' file does not exist!")
+ 			#process the file and retrieve segments
+ 			mesh=options.getfieldvalue('mesh')
+-			raise RuntimeError("MeshProfileIntersection is not complete.")
+ 			self.segments=MeshProfileIntersection(mesh.elements,mesh.x,mesh.y,self.exp)
+ 	# }}}
+ 
+@@ -53,7 +53,7 @@
+ 		s+="%s\n" % fielddisplay(self,'name',"variable name (must match corresponding Enum)")
+ 		s+="%s\n" % fielddisplay(self,'type',"type of variable ('vertex' or 'scalar')")
+ 
+-		if not isnan(self.fos_reverse_index):
++		if not numpy.isnan(self.fos_reverse_index):
+ 			s+="%s\n" % fielddisplay(self,'fos_reverse_index',"index for fos_reverse driver of ADOLC")
+ 		if self.exp:
+ 			s+="%s\n" % fielddisplay(self,'exp',"file needed to compute dependent variable")
+@@ -74,7 +74,7 @@
+ 			if self.index<0:
+ 				raise RuntimeError("dependent checkconsistency error: index for segments should be >=0")
+ 
+-		if not isnan(self.fos_reverse_index):
++		if not numpy.isnan(self.fos_reverse_index):
+ 			if not strcmpi(driver,'fos_reverse'):
+ 				raise TypeError("cannot declare a dependent with a fos_reverse_index when the driver is not fos_reverse!")
+ 			if self.nods==0:
Index: /issm/oecreview/Archive/13393-13976/ISSM-13865-13866.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13865-13866.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13865-13866.diff	(revision 13980)
@@ -0,0 +1,100 @@
+Index: ../trunk-jpl/src/m/classes/verbose.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/verbose.py	(revision 13865)
++++ ../trunk-jpl/src/m/classes/verbose.py	(revision 13866)
+@@ -15,7 +15,9 @@
+ 	      convergence : convergence criteria
+ 	      control     : control method
+ 	      qmu         : sensitivity analysis
++	      autodiff    : AD analysis
+ 
++
+ 	   Usage:
+ 	      verbose=verbose();
+ 	      verbose=verbose(3);
+@@ -35,6 +37,7 @@
+ 		self.convergence = False
+ 		self.control     = False
+ 		self.qmu         = False
++		self.autodiff    = False
+ 		#ENDFIELDS
+ 
+ 		if not len(args):
+@@ -67,6 +70,23 @@
+ 					raise TypeError("verbose supported field values are logicals only (True or False)")
+ 	# }}}
+ 
++	def __repr__(self):    # {{{
++			
++		#BEGINDISP
++		s ="class '%s'  = \n" % type(self)
++		s+="   %15s : %s\n" % ('mprocessor',self.mprocessor)
++		s+="   %15s : %s\n" % ('module',self.module)
++		s+="   %15s : %s\n" % ('solution',self.solution)
++		s+="   %15s : %s\n" % ('solver',self.solver)
++		s+="   %15s : %s\n" % ('convergence',self.convergence)
++		s+="   %15s : %s\n" % ('control',self.control)
++		s+="   %15s : %s\n" % ('qmu',self.qmu)
++		s+="   %15s : %s\n" % ('autodiff',self.autodiff)
++		#ENDDISP
++
++		return s
++	# }}}
++
+ 	def VerboseToBinary(self):    # {{{
+ 
+ 		#BEGINVERB2BIN
+@@ -85,6 +105,8 @@
+ 			binary=binary | 32
+ 		if self.qmu:
+ 			binary=binary | 64
++		if self.autodiff:
++			binary=binary | 128
+ 		#ENDVERB2BIN
+ 
+ 		return binary
+@@ -93,13 +115,14 @@
+ 	def BinaryToVerbose(self,binary):    # {{{
+ 
+ 		#BEGINBIN2VERB
+-		self.mprocessor =bool(binary &  1)
+-		self.module     =bool(binary &  2)
+-		self.solution   =bool(binary &  4)
+-		self.solver     =bool(binary &  8)
+-		self.convergence=bool(binary & 16)
+-		self.control    =bool(binary & 32)
+-		self.qmu        =bool(binary & 64)
++		self.mprocessor =bool(binary &   1)
++		self.module     =bool(binary &   2)
++		self.solution   =bool(binary &   4)
++		self.solver     =bool(binary &   8)
++		self.convergence=bool(binary &  16)
++		self.control    =bool(binary &  32)
++		self.qmu        =bool(binary &  64)
++		self.autodiff   =bool(binary & 128)
+ 		#ENDBIN2VERB
+ 	# }}}
+ 
+@@ -107,22 +130,6 @@
+ 		return md
+ 	# }}}
+ 
+-	def __repr__(self):    # {{{
+-			
+-		#BEGINDISP
+-		s ="class '%s'  = \n" % type(self)
+-		s+="   %15s : %s\n" % ('mprocessor',self.mprocessor)
+-		s+="   %15s : %s\n" % ('module',self.module)
+-		s+="   %15s : %s\n" % ('solution',self.solution)
+-		s+="   %15s : %s\n" % ('solver',self.solver)
+-		s+="   %15s : %s\n" % ('convergence',self.convergence)
+-		s+="   %15s : %s\n" % ('control',self.control)
+-		s+="   %15s : %s\n" % ('qmu',self.qmu)
+-		#ENDDISP
+-
+-		return s
+-	# }}}
+-
+ 	def marshall(self,fid):    # {{{
+ 		WriteData(fid,'data',self.VerboseToBinary(),'enum',VerboseEnum(),'format','Integer')
+ 	# }}}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13866-13867.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13866-13867.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13866-13867.diff	(revision 13980)
@@ -0,0 +1,49 @@
+Index: ../trunk-jpl/src/m/solve/WriteData.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/WriteData.py	(revision 13866)
++++ ../trunk-jpl/src/m/solve/WriteData.py	(revision 13867)
+@@ -100,7 +100,7 @@
+ 
+ 	elif strcmpi(format,'BooleanMat'):    # {{{
+ 
+-		if isinstance(data,bool):
++		if not isinstance(data,numpy.ndarray):
+ 			data=numpy.array([data])
+ 		if len(data.shape) == 1:
+ 			if numpy.size(data):
+@@ -131,7 +131,7 @@
+ 
+ 	elif strcmpi(format,'IntMat'):    # {{{
+ 
+-		if isinstance(data,(int,long)):
++		if not isinstance(data,numpy.ndarray):
+ 			data=numpy.array([data])
+ 		if len(data.shape) == 1:
+ 			if numpy.size(data):
+@@ -162,7 +162,7 @@
+ 
+ 	elif strcmpi(format,'DoubleMat'):    # {{{
+ 
+-		if isinstance(data,(bool,int,long,float)):
++		if not isinstance(data,numpy.ndarray):
+ 			data=numpy.array([data])
+ 		if len(data.shape) == 1:
+ 			if numpy.size(data):
+@@ -196,7 +196,7 @@
+ 		#first get length of record
+ 		recordlength=4+4    #number of records + code
+ 		for matrix in data:
+-			if isinstance(matrix,(bool,int,long,float)):
++			if not isinstance(matrix,numpy.ndarray):
+ 				matrix=numpy.array([matrix])
+ 			if len(matrix.shape) == 1:
+ 				if numpy.size(matrix):
+@@ -218,7 +218,7 @@
+ 
+ 		#write each matrix: 
+ 		for matrix in data:
+-			if isinstance(matrix,(bool,int,long,float)):
++			if not isinstance(matrix,numpy.ndarray):
+ 				matrix=numpy.array([matrix])
+ 			if len(matrix.shape) == 1:
+ 				matrix=matrix.reshape(numpy.size(matrix),1)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13867-13868.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13867-13868.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13867-13868.diff	(revision 13980)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13867)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13868)
+@@ -88,9 +88,6 @@
+ 	_assert_(this->matrix);
+ 	MatAssemblyBegin(this->matrix,MAT_FINAL_ASSEMBLY);
+ 	MatAssemblyEnd(this->matrix,MAT_FINAL_ASSEMBLY);
+-	#if _PETSC_MAJOR_ == 2 
+-		MatCompress(this->matrix);
+-	#endif
+ 
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13868-13869.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13868-13869.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13868-13869.diff	(revision 13980)
@@ -0,0 +1,70 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13868)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13869)
+@@ -39,7 +39,7 @@
+ 	this->matrix=NewMat(M,N,sparsity,IssmComm::GetComm());
+ }
+ /*}}}*/
+-/*FUNCTION PetscMat(IssmDouble* serial_mat,int M,int N,IssmDouble sparsity){{{*/
++/*FUNCTION PetscMat::PetscMat(IssmDouble* serial_mat,int M,int N,IssmDouble sparsity){{{*/
+ PetscMat::PetscMat(IssmDouble* serial_mat,int M,int N,IssmDouble sparsity){
+ 
+ 	int     i;
+@@ -76,6 +76,20 @@
+ /*}}}*/
+ 
+ /*PetscMat specific routines: */
++/*FUNCTION PetscMat::AllocationInfo{{{*/
++void PetscMat::AllocationInfo(void){
++
++	MatInfo info;
++	MatGetInfo(this->matrix,MAT_GLOBAL_SUM,&info);
++	_pprintLine_("=========================== Stiffness matrix allocation info ===========================");
++	_pprintLine_("");
++	_pprintLine_(" nz_allocated: "<<info.nz_allocated);
++	_pprintLine_(" nz_used     : "<<info.nz_used);
++	_pprintLine_(" nz_unneeded : "<<info.nz_unneeded<<" ("<<double(info.nz_unneeded)/double(info.nz_allocated)*100.<<"%)");
++	_pprintLine_("");
++	_pprintLine_("========================================================================================");
++}
++/*}}}*/
+ /*FUNCTION PetscMat::Echo{{{*/
+ void PetscMat::Echo(void){
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.h	(revision 13868)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.h	(revision 13869)
+@@ -39,6 +39,7 @@
+ 		~PetscMat();
+ 		/*}}}*/
+ 		/*PetscMat specific routines {{{*/
++		void AllocationInfo(void);
+ 		void Echo(void);
+ 		void Assemble(void);
+ 		IssmDouble Norm(NormMode norm_type);
+Index: ../trunk-jpl/src/c/classes/matrix/Matrix.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/Matrix.h	(revision 13868)
++++ ../trunk-jpl/src/c/classes/matrix/Matrix.h	(revision 13869)
+@@ -188,6 +188,19 @@
+ 
+ 		}
+ 		/*}}}*/
++		/*FUNCTION AllocationInfo{{{*/
++		void AllocationInfo(void){
++			_assert_(this);
++			if(type==PetscMatType){
++				#ifdef _HAVE_PETSC_
++				this->pmatrix->AllocationInfo();
++				#endif
++			}
++			else if(type==SeqMatType){
++				//this->smatrix->AllocationInfo();
++			}
++			else _error_("Matrix type: " << type << " not supported yet!");
++		}/*}}}*/
+ 		/*FUNCTION Assemble{{{*/
+ 		void Assemble(void){
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13869-13870.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13869-13870.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13869-13870.diff	(revision 13980)
@@ -0,0 +1,83 @@
+Index: ../trunk-jpl/src/m/plot/curvedarrow.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/curvedarrow.m	(revision 13869)
++++ ../trunk-jpl/src/m/plot/curvedarrow.m	(revision 13870)
+@@ -9,11 +9,12 @@
+ %      options can be: 
+ %            'ratio': default .5 (ratio headarrow/length)
+ %            'widthratio': default is 1/10 of length
++%            'width': if you want to specify an absolute width
+ 
+ 	%recover options
+ 	options=pairoptions(varargin{:});
+ 	ratio=getfieldvalue(options,'ratio',.1);
+-	widthratio=getfieldvalue(options,'widthratio',.1);
++	arrowlength=getfieldvalue(options,'arrowlength',1);
+ 	color=getfieldvalue(options,'color','k');
+ 
+ 	%transform angle in radians
+@@ -22,7 +23,16 @@
+ 
+ 	%compute some values out of (x1,y1) and (x2,y2)
+ 	length=distance*angle;
+-	width=length*widthratio;
++	
++	if exist(options,'widthratio'),
++		widthratio=getfieldvalue(options,'widthratio');
++		width=length*widthratio;
++	else if exist(options,'width'),
++		width=getfieldvalue(options,'width');
++	else 
++		widthratio=.1;
++		width=length*widthratio;
++	end
+ 
+ 	%buidl the arrow itself: 
+ 	A=[centerx+distance, centery];
+@@ -40,13 +50,19 @@
+ 	%Build arrowhead 
+ 	E=D+2/3*(D-C);
+ 	F=C+2/3*(C-D);
++
+ 	n=(F-E)/norm(F-E,2);
+ 	m=[-n(2) n(1)];
+ 	if(angle<0)
+ 		m=-m;
+ 	end
+-	d=(distance*angle)*ratio;
+ 	
++	if exist(options,'arrowlength'),
++		d=arrowlength;
++	else
++		d=abs((distance*angle)*ratio);
++	end
++	
+ 	%G is d distance from middle of E and F: 
+ 	G=(E+F)/2+d*m;
+ 
+Index: ../trunk-jpl/src/m/plot/plot_riftrelvel.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_riftrelvel.m	(revision 13869)
++++ ../trunk-jpl/src/m/plot/plot_riftrelvel.m	(revision 13870)
+@@ -78,17 +78,17 @@
+ 		penetration=(vx2-vx1)*normal(1)+(vy2-vy1)*normal(2);
+ 		%if penetration is negative, plot in black, positive, plot in red;: ie: if rift is closing, black, if rift is opening, red.
+ 		if(penetration>0),
+-			p2=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'*','MarkerSize',markersize); set(p2,'Color',[140 140 140]/255);
++			p2=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'.','MarkerSize',markersize); set(p2,'Color',[140 140 140]/255);
+ 			isp2=1;
+ 		else
+-			p1=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'k*','MarkerSize',markersize);
++			p1=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'k.','MarkerSize',markersize);
+ 			isp1=1;
+ 		end
+ 	end
+ 
+ 	%point out the tips
+-	h2=plot(x(md.rifts.riftstruct(i).tips(1)),y(md.rifts.riftstruct(i).tips(1)),'g*','MarkerSize',markersize);
+-	plot(x(md.rifts.riftstruct(i).tips(2)),y(md.rifts.riftstruct(i).tips(2)),'g*','MarkerSize',markersize);
++	h2=plot(x(md.rifts.riftstruct(i).tips(1)),y(md.rifts.riftstruct(i).tips(1)),'g.','MarkerSize',markersize);
++	plot(x(md.rifts.riftstruct(i).tips(2)),y(md.rifts.riftstruct(i).tips(2)),'g.','MarkerSize',markersize);
+ 	segments=md.rifts.riftstruct(i).segments(:,1:2);
+ end
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13870-13871.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13870-13871.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13870-13871.diff	(revision 13980)
@@ -0,0 +1,10 @@
+Index: ../trunk-jpl/externalpackages/export_fig
+===================================================================
+--- ../trunk-jpl/externalpackages/export_fig	(revision 13870)
++++ ../trunk-jpl/externalpackages/export_fig	(revision 13871)
+
+Property changes on: ../trunk-jpl/externalpackages/export_fig
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++.ignore
Index: /issm/oecreview/Archive/13393-13976/ISSM-13871-13872.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13871-13872.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13871-13872.diff	(revision 13980)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/externalpackages/gsl/install-android.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gsl/install-android.sh	(revision 13871)
++++ ../trunk-jpl/externalpackages/gsl/install-android.sh	(revision 13872)
+@@ -24,7 +24,7 @@
+ if [[ $step == "2" || $step == "0" ]]; then
+     cd src
+     
+-    autoreconf -iv --force -I $LIBTOOL_DIR/share/aclocal/ 
++    autoreconf -iv --force -I $ISSM_DIR/externalpackages/autotools/install/share/aclocal
+ 
+     ./configure \
+         --build="i386-apple-darwin10.8.0" \
+@@ -35,6 +35,7 @@
+ 
+ #Compile gsl
+ if [[ $step == "3" || $step == "0" ]]; then
++	cd src
+     if [ $# -eq 0 ]; then
+ 	    make $j 
+     else
+@@ -43,3 +44,4 @@
+ 
+     make install
+ fi
++
+Index: ../trunk-jpl/externalpackages/gsl
+===================================================================
+--- ../trunk-jpl/externalpackages/gsl	(revision 13871)
++++ ../trunk-jpl/externalpackages/gsl	(revision 13872)
+
+Property changes on: ../trunk-jpl/externalpackages/gsl
+___________________________________________________________________
+Modified: svn:ignore
+## -1,3 +1,4 ##
++install-macosx*
+ *.gz
+ install
+ src
Index: /issm/oecreview/Archive/13393-13976/ISSM-13872-13873.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13872-13873.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13872-13873.diff	(revision 13980)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/etc/environment.sh
+===================================================================
+--- ../trunk-jpl/etc/environment.sh	(revision 13872)
++++ ../trunk-jpl/etc/environment.sh	(revision 13873)
+@@ -65,9 +65,11 @@
+ libpathappend "$MATLAB_DIR/lib"
+ 
+ MPI_DIR="$ISSM_DIR/externalpackages/mpich2/install"
+-export MPI_DIR
+-pathprepend   "$MPI_DIR/bin"
+-libpathappend "$MPI_DIR/lib"
++if [ -d "$MPI_DIR" ]; then
++	export MPI_DIR
++	pathprepend   "$MPI_DIR/bin"
++	libpathappend "$MPI_DIR/lib"
++fi
+ 
+ PETSC_DIR="$ISSM_DIR/externalpackages/petsc/install"
+ export PETSC_DIR
+@@ -194,6 +196,7 @@
+ 
+ export ANDROID_SDK_DIR="$ANDROID_DIR/android-sdk/install"
+ pathappend "$ANDROID_SDK_DIR/"
++pathappend "$ANDROID_DIR/arm-linux-android-4.0/bin/"
+ 
+ GSL_DIR="$ISSM_DIR/externalpackages/gsl/install"
+ libpathappend "$GSL_DIR/lib"
Index: /issm/oecreview/Archive/13393-13976/ISSM-13873-13874.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13873-13874.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13873-13874.diff	(revision 13980)
@@ -0,0 +1,452 @@
+Index: ../trunk-jpl/src/c/modules/MinVzx/MinVzx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVzx/MinVzx.h	(revision 13873)
++++ ../trunk-jpl/src/c/modules/MinVzx/MinVzx.h	(revision 13874)
+@@ -1,14 +0,0 @@
+-/*!\file:  MinVzx.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _MINVZX_H
+-#define _MINVZX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void MinVzx( IssmDouble* pminvz, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif  /* _MINVZX_H */
+Index: ../trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp	(revision 13873)
++++ ../trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp	(revision 13874)
+@@ -1,42 +0,0 @@
+-/*!\file MinVzx
+- */
+-
+-#include "./MinVzx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void MinVzx( IssmDouble* pminvz, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-
+-	int i;
+-	IssmDouble minvz;
+-	IssmDouble node_minvz;
+-	IssmDouble element_minvz;
+-
+-	/*Go through elements, and request velocity: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		element->MinVz(&element_minvz,process_units); //go pick up the minimum velocity in the inputs
+-
+-		if(i==0)minvz=element_minvz; //initialize minvz
+-		else{
+-			if(element_minvz<minvz)minvz=element_minvz;
+-		}
+-	}
+-	/*A safeguard in case: */
+-	if(elements->Size()==0){
+-		minvz=INFINITY;
+-	}
+-
+-	/*Figure out minimum across the cluster: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&minvz,&node_minvz,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_minvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+-	minvz=node_minvz;
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pminvz=minvz;
+-}
+Index: ../trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp	(revision 13873)
++++ ../trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp	(revision 13874)
+@@ -1,43 +0,0 @@
+-/*!\file MinVelx
+- * \brief: compute misfit between observations and model
+- */
+-
+-#include "./MinVelx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void MinVelx( IssmDouble* pminvel, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-
+-	int i;
+-	IssmDouble minvel;
+-	IssmDouble node_minvel;
+-	IssmDouble element_minvel;
+-
+-	/*Go through elements, and request velocity: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		element->MinVel(&element_minvel,process_units); //go pick up the minimum velocity in the inputs
+-
+-		if(i==0)minvel=element_minvel; //initialize minvel
+-		else{
+-			if(element_minvel<minvel)minvel=element_minvel;
+-		}
+-	}
+-	/*A safeguard in case: */
+-	if(elements->Size()==0){
+-		minvel=INFINITY;
+-	}
+-
+-	/*Figure out minimum across the cluster: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&minvel,&node_minvel,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_minvel,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+-	minvel=node_minvel;
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pminvel=minvel;
+-}
+Index: ../trunk-jpl/src/c/modules/MinVelx/MinVelx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVelx/MinVelx.h	(revision 13873)
++++ ../trunk-jpl/src/c/modules/MinVelx/MinVelx.h	(revision 13874)
+@@ -1,14 +0,0 @@
+-/*!\file:  MinVelx.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _MINVELX_H
+-#define _MINVELX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void MinVelx( IssmDouble* pminvel, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif  /* _MINVELX_H */
+Index: ../trunk-jpl/src/c/modules/MinVxx/MinVxx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVxx/MinVxx.h	(revision 13873)
++++ ../trunk-jpl/src/c/modules/MinVxx/MinVxx.h	(revision 13874)
+@@ -1,14 +0,0 @@
+-/*!\file:  MinVxx.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _MINVX_H
+-#define _MINVX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void MinVxx( IssmDouble* pminvx, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif  /* _MINVX_H */
+Index: ../trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp	(revision 13873)
++++ ../trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp	(revision 13874)
+@@ -1,42 +0,0 @@
+-/*!\file MinVxx
+- */
+-
+-#include "./MinVxx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void MinVxx( IssmDouble* pminvx, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-
+-	int i;
+-	IssmDouble minvx;
+-	IssmDouble node_minvx;
+-	IssmDouble element_minvx;
+-
+-	/*Go through elements, and request velocity: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		element->MinVx(&element_minvx,process_units); //go pick up the minimum velocity in the inputs
+-
+-		if(i==0)minvx=element_minvx; //initialize minvx
+-		else{
+-			if(element_minvx<minvx)minvx=element_minvx;
+-		}
+-	}
+-	/*A safeguard in case: */
+-	if(elements->Size()==0){
+-		minvx=INFINITY;
+-	}
+-
+-	/*Figure out minimum across the cluster: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&minvx,&node_minvx,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_minvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+-	minvx=node_minvx;
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pminvx=minvx;
+-}
+Index: ../trunk-jpl/src/c/modules/MinVyx/MinVyx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVyx/MinVyx.h	(revision 13873)
++++ ../trunk-jpl/src/c/modules/MinVyx/MinVyx.h	(revision 13874)
+@@ -1,14 +0,0 @@
+-/*!\file:  MinVyx.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _MINVYX_H
+-#define _MINVYX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void MinVyx( IssmDouble* pminvy, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif  /* _MINVYX_H */
+Index: ../trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp	(revision 13873)
++++ ../trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp	(revision 13874)
+@@ -1,42 +0,0 @@
+-/*!\file MinVyx
+- */
+-
+-#include "./MinVyx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void MinVyx( IssmDouble* pminvy, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-
+-	int i;
+-	IssmDouble minvy;
+-	IssmDouble node_minvy;
+-	IssmDouble element_minvy;
+-
+-	/*Go through elements, and request velocity: */
+-	for(i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		element->MinVy(&element_minvy,process_units); //go pick up the minimum velocity in the inputs
+-
+-		if(i==0)minvy=element_minvy; //initialize minvy
+-		else{
+-			if(element_minvy<minvy)minvy=element_minvy;
+-		}
+-	}
+-	/*A safeguard in case: */
+-	if(elements->Size()==0){
+-		minvy=INFINITY;
+-	}
+-
+-	/*Figure out minimum across the cluster: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce (&minvy,&node_minvy,1,MPI_DOUBLE,MPI_MIN,0,IssmComm::GetComm() );
+-	MPI_Bcast(&node_minvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
+-	minvy=node_minvy;
+-	#endif
+-
+-	/*Assign output pointers:*/
+-	*pminvy=minvy;
+-}
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13873)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13874)
+@@ -66,10 +66,6 @@
+ #include "./Mergesolutionfromftogx/Mergesolutionfromftogx.h"
+ #include "./MeshPartitionx/MeshPartitionx.h"
+ #include "./MeshProfileIntersectionx/MeshProfileIntersectionx.h"
+-#include "./MinVelx/MinVelx.h"
+-#include "./MinVxx/MinVxx.h"
+-#include "./MinVyx/MinVyx.h"
+-#include "./MinVzx/MinVzx.h"
+ #include "./SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h"
+ #include "./SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.h"
+ #include "./SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13873)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13874)
+@@ -481,15 +481,7 @@
+ 						./solutions/balancethickness_core.cpp
+ #}}}
+ #Responses sources  {{{
+-responses_sources = ./modules/MinVelx/MinVelx.h\
+-					     ./modules/MinVelx/MinVelx.cpp\
+-					     ./modules/MinVxx/MinVxx.h\
+-					     ./modules/MinVxx/MinVxx.cpp\
+-					     ./modules/MinVyx/MinVyx.h\
+-					     ./modules/MinVyx/MinVyx.cpp\
+-					     ./modules/MinVzx/MinVzx.h\
+-					     ./modules/MinVzx/MinVzx.cpp\
+-					     ./modules/TotalSmbx/TotalSmbx.h\
++responses_sources = ./modules/TotalSmbx/TotalSmbx.h\
+ 					     ./modules/TotalSmbx/TotalSmbx.cpp\
+ 					     ./modules/IceVolumex/IceVolumex.h\
+ 					     ./modules/IceVolumex/IceVolumex.cpp\
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13873)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13874)
+@@ -404,15 +404,15 @@
+ 
+ 		#ifdef _HAVE_RESPONSES_
+ 		case IceVolumeEnum:              IceVolumex(               responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case MinVelEnum:                 MinVelx(                  responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MinVelEnum:                 this->MinVelx(responses,process_units); break;
+ 		case MaxVelEnum:                 this->MaxVelx(                  responses,process_units); break;
+-		case MinVxEnum:                  MinVxx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MinVxEnum:                  this->MinVxx(responses,process_units); break;
+ 		case MaxVxEnum:                  this->MaxVxx(                   responses,process_units); break;
+ 		case MaxAbsVxEnum:               this->MaxAbsVxx(                responses,process_units); break;
+-		case MinVyEnum:                  MinVyx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MinVyEnum:                  this->MinVyx(responses,process_units); break;
+ 		case MaxVyEnum:                  this->MaxVyx(                   responses,process_units); break;
+ 		case MaxAbsVyEnum:               this->MaxAbsVyx(                responses,process_units); break;
+-		case MinVzEnum:                  MinVzx(                   responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case MinVzEnum:                  this->MinVzx(responses,process_units); break;
+ 		case MaxVzEnum:                  this->MaxVzx(                   responses,process_units); break;
+ 		case MaxAbsVzEnum:               this->MaxAbsVzx(                responses,process_units); break;
+ 		case MassFluxEnum:               this->MassFluxx(          responses,process_units); break;
+@@ -792,7 +792,111 @@
+ 	*pmaxvz=maxvz;
+ 
+ }/*}}}*/
++void FemModel::MinVelx(IssmDouble* pminvel,bool process_units){/*{{{*/
++
++	int i;
++	IssmDouble minvel;
++	IssmDouble node_minvel;
++	IssmDouble element_minvel;
++
++	/*Go through elements, and request velocity: */
++	minvel=INFINITY;
++	for(i=0;i<this->elements->Size();i++){
++		Element* element=(Element*)this->elements->GetObjectByOffset(i);
++		element->MinVel(&element_minvel,process_units);
++		if(element_minvel<minvel) minvel=element_minvel;
++	}
++
++	/*Figure out minimum across the cluster: */
++#ifdef _HAVE_MPI_
++	MPI_Reduce(&minvel,&node_minvel,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_minvel,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	minvel=node_minvel;
+ #endif
++
++	/*Assign output pointers:*/
++	*pminvel=minvel;
++
++}/*}}}*/
++void FemModel::MinVxx(IssmDouble* pminvx,bool process_units){/*{{{*/
++
++	int i;
++	IssmDouble minvx;
++	IssmDouble node_minvx;
++	IssmDouble element_minvx;
++
++	/*Go through elements, and request velocity: */
++	minvx=INFINITY;
++	for(i=0;i<this->elements->Size();i++){
++		Element* element=(Element*)this->elements->GetObjectByOffset(i);
++		element->MinVx(&element_minvx,process_units);
++		if(element_minvx<minvx) minvx=element_minvx;
++	}
++
++	/*Figure out minimum across the cluster: */
++#ifdef _HAVE_MPI_
++	MPI_Reduce(&minvx,&node_minvx,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_minvx,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	minvx=node_minvx;
++#endif
++
++	/*Assign output pointers:*/
++	*pminvx=minvx;
++
++}/*}}}*/
++void FemModel::MinVyx(IssmDouble* pminvy,bool process_units){/*{{{*/
++
++	int i;
++	IssmDouble minvy;
++	IssmDouble node_minvy;
++	IssmDouble element_minvy;
++
++	/*Go through elements, and request velocity: */
++	minvy=INFINITY;
++	for(i=0;i<this->elements->Size();i++){
++		Element* element=(Element*)this->elements->GetObjectByOffset(i);
++		element->MinVy(&element_minvy,process_units);
++		if(element_minvy<minvy) minvy=element_minvy;
++	}
++
++	/*Figure out minimum across the cluster: */
++#ifdef _HAVE_MPI_
++	MPI_Reduce(&minvy,&node_minvy,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_minvy,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	minvy=node_minvy;
++#endif
++
++	/*Assign output pointers:*/
++	*pminvy=minvy;
++
++}/*}}}*/
++void FemModel::MinVzx(IssmDouble* pminvz,bool process_units){/*{{{*/
++
++	int i;
++	IssmDouble minvz;
++	IssmDouble node_minvz;
++	IssmDouble element_minvz;
++
++	/*Go through elements, and request velocity: */
++	minvz=INFINITY;
++	for(i=0;i<this->elements->Size();i++){
++		Element* element=(Element*)this->elements->GetObjectByOffset(i);
++		element->MinVz(&element_minvz,process_units);
++		if(element_minvz<minvz) minvz=element_minvz;
++	}
++
++	/*Figure out minimum across the cluster: */
++#ifdef _HAVE_MPI_
++	MPI_Reduce(&minvz,&node_minvz,1,MPI_DOUBLE,MPI_MAX,0,IssmComm::GetComm() );
++	MPI_Bcast(&node_minvz,1,MPI_DOUBLE,0,IssmComm::GetComm());   
++	minvz=node_minvz;
++#endif
++
++	/*Assign output pointers:*/
++	*pminvz=minvz;
++
++}/*}}}*/
++#endif
+ #ifdef _HAVE_CONTROL_
+ void FemModel::ThicknessAbsGradientx( IssmDouble* pJ, bool process_units, int weight_index){/*{{{*/
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13873)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13874)
+@@ -69,6 +69,10 @@
+ 		void MaxVxx(IssmDouble* presponse,bool process_units);
+ 		void MaxVyx(IssmDouble* presponse,bool process_units);
+ 		void MaxVzx(IssmDouble* presponse,bool process_units);
++		void MinVelx(IssmDouble* presponse,bool process_units);
++		void MinVxx(IssmDouble* presponse,bool process_units);
++		void MinVyx(IssmDouble* presponse,bool process_units);
++		void MinVzx(IssmDouble* presponse,bool process_units);
+ 		#endif
+ 		#ifdef  _HAVE_DAKOTA_
+ 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13874-13875.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13874-13875.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13874-13875.diff	(revision 13980)
@@ -0,0 +1,393 @@
+Index: ../trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp	(revision 13874)
++++ ../trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp	(revision 13875)
+@@ -1,30 +0,0 @@
+-/*!\file IceVolumex
+- * \brief: compute total ice volume
+- */
+-
+-#include "./IceVolumex.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void IceVolumex(IssmDouble* pV, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-
+-	IssmDouble local_ice_volume = 0;
+-	IssmDouble total_ice_volume;
+-
+-	for(int i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		local_ice_volume+=element->IceVolume();
+-	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce(&local_ice_volume,&total_ice_volume,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&total_ice_volume,1,MPI_DOUBLE,0,IssmComm::GetComm());
+-	#else
+-	total_ice_volume=local_ice_volume;
+-	#endif
+-
+-	/*Assign output pointers: */
+-	*pV=total_ice_volume;
+-}
+Index: ../trunk-jpl/src/c/modules/IceVolumex/IceVolumex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/IceVolumex/IceVolumex.h	(revision 13874)
++++ ../trunk-jpl/src/c/modules/IceVolumex/IceVolumex.h	(revision 13875)
+@@ -1,14 +0,0 @@
+-/*!\file:  IceVolumex.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _ICEVOLUMEX_H
+-#define _ICEVOLUMEX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void IceVolumex(IssmDouble* pV, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif
+Index: ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13874)
++++ ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13875)
+@@ -1,56 +0,0 @@
+-/*!\file ElementResponsex
+- * \brief: compute element input  on one element only
+- */
+-
+-#include "./ElementResponsex.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void ElementResponsex( IssmDouble* presponse, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,int response_enum,bool process_units){
+-
+-	int my_rank;
+-	int i;
+-
+-	int found=0;
+-	int sumfound=0;
+-	int cpu_found=-1;
+-	int index;
+-	IssmDouble response;
+-	Element* element=NULL;
+-
+-	/*retrieve element we are interested in: */
+-	parameters->FindParam(&index,IndexEnum);
+-	my_rank=IssmComm::GetRank();
+-
+-	/*now, go through our elements, and retrieve the one with this id: index: */
+-	for(i=0;i<elements->Size();i++){
+-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		if (element->Id()==index){
+-			found=1;
+-			cpu_found=my_rank;
+-			break;
+-		}
+-	}
+-
+-	/*Broadcast whether we found the element: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( &found,&sumfound,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
+-	if(!sumfound)_error_("could not find material with id" << index << " to compute ElementResponse");
+-	#endif
+-
+-	/*Ok, we found the element, compute responseocity: */
+-	if(my_rank==cpu_found){
+-		element->ElementResponse(&response,response_enum,IuToExtEnum);
+-	}
+-
+-	/*Broadcast and plug into response: */
+-	#ifdef _HAVE_MPI_
+-	MPI_Allreduce ( &cpu_found,&cpu_found,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
+-	MPI_Bcast(&response,1,MPI_DOUBLE,cpu_found,IssmComm::GetComm()); 
+-	#endif
+-
+-	*presponse=response;
+-}
+Index: ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.h	(revision 13874)
++++ ../trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.h	(revision 13875)
+@@ -1,14 +0,0 @@
+-/*!\file:  ElementResponsex.h
+- * \brief header file for computing input average over one element
+- */ 
+-
+-#ifndef _ELEMENTRESPONSEX_H
+-#define _ELEMENTRESPONSEX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void ElementResponsex( IssmDouble* presponse, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,int response_enum,bool process_units);
+-
+-#endif  /* _ELEMENTRESPONSEX_H */
+Index: ../trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.h	(revision 13874)
++++ ../trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.h	(revision 13875)
+@@ -1,14 +0,0 @@
+-/*!\file:  TotalSmbx.h
+- * \brief header file for inverse methods misfit computation
+- */ 
+-
+-#ifndef _TOTALSMBX_H
+-#define _TOTALSMBX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void TotalSmbx(IssmDouble* pSmb, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,bool process_units);
+-
+-#endif
+Index: ../trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp	(revision 13874)
++++ ../trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp	(revision 13875)
+@@ -1,30 +0,0 @@
+-/*!\file TotalSmbx
+- * \brief: compute total ice sheet surface mass balance 
+- */
+-
+-#include "./TotalSmbx.h"
+-
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void TotalSmbx(IssmDouble* pSmb, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters,bool process_units){
+-
+-	IssmDouble local_smb = 0;
+-	IssmDouble total_smb;
+-
+-	for(int i=0;i<elements->Size();i++){
+-		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		local_smb+=element->TotalSmb();
+-	}
+-	#ifdef _HAVE_MPI_
+-	MPI_Reduce(&local_smb,&total_smb,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
+-	MPI_Bcast(&total_smb,1,MPI_DOUBLE,0,IssmComm::GetComm());
+-	#else
+-	total_smb=local_smb;
+-	#endif
+-
+-	/*Assign output pointers: */
+-	*pSmb=total_smb;
+-}
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13874)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13875)
+@@ -33,8 +33,6 @@
+ #include "./Gradjx/Gradjx.h"
+ #include "./GroundinglineMigrationx/GroundinglineMigrationx.h"
+ #include "./HoleFillerx/HoleFillerx.h"
+-#include "./TotalSmbx/TotalSmbx.h"
+-#include "./IceVolumex/IceVolumex.h"
+ #include "./InputControlUpdatex/InputControlUpdatex.h"
+ #include "./InputConvergencex/InputConvergencex.h"
+ #include "./InputDuplicatex/InputDuplicatex.h"
+@@ -62,7 +60,6 @@
+ #include "./Kml2Expx/Kml2Expx.h"
+ #include "./Krigingx/Krigingx.h"
+ #include "./Shp2Kmlx/Shp2Kmlx.h"
+-#include "./ElementResponsex/ElementResponsex.h"
+ #include "./Mergesolutionfromftogx/Mergesolutionfromftogx.h"
+ #include "./MeshPartitionx/MeshPartitionx.h"
+ #include "./MeshProfileIntersectionx/MeshProfileIntersectionx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13874)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13875)
+@@ -480,14 +480,6 @@
+ 						./modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp\
+ 						./solutions/balancethickness_core.cpp
+ #}}}
+-#Responses sources  {{{
+-responses_sources = ./modules/TotalSmbx/TotalSmbx.h\
+-					     ./modules/TotalSmbx/TotalSmbx.cpp\
+-					     ./modules/IceVolumex/IceVolumex.h\
+-					     ./modules/IceVolumex/IceVolumex.cpp\
+-					     ./modules/ElementResponsex/ElementResponsex.h\
+-					     ./modules/ElementResponsex/ElementResponsex.cpp
+-#}}}
+ #Slope sources  {{{
+ slope_sources =  ./modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp\
+ 					  ./modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp \
+@@ -862,10 +854,6 @@
+ issm_sources  +=  $(balanced_sources)
+ endif
+ 
+-if RESPONSES
+-issm_sources +=  $(responses_sources)
+-endif
+-
+ if SLOPE
+ issm_sources  +=  $(slope_sources)
+ endif
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13874)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13875)
+@@ -403,7 +403,7 @@
+ 	switch (response_descriptor_enum){
+ 
+ 		#ifdef _HAVE_RESPONSES_
+-		case IceVolumeEnum:              IceVolumex(               responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
++		case IceVolumeEnum:              this->IceVolumex(responses,process_units); break;
+ 		case MinVelEnum:                 this->MinVelx(responses,process_units); break;
+ 		case MaxVelEnum:                 this->MaxVelx(                  responses,process_units); break;
+ 		case MinVxEnum:                  this->MinVxx(responses,process_units); break;
+@@ -415,21 +415,21 @@
+ 		case MinVzEnum:                  this->MinVzx(responses,process_units); break;
+ 		case MaxVzEnum:                  this->MaxVzx(                   responses,process_units); break;
+ 		case MaxAbsVzEnum:               this->MaxAbsVzx(                responses,process_units); break;
+-		case MassFluxEnum:               this->MassFluxx(          responses,process_units); break;
+-		case SurfaceAbsVelMisfitEnum:    SurfaceAbsVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case SurfaceRelVelMisfitEnum:    SurfaceRelVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case SurfaceLogVelMisfitEnum:    SurfaceLogVelMisfitx(     responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case SurfaceLogVxVyMisfitEnum:   SurfaceLogVxVyMisfitx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case MassFluxEnum:               this->MassFluxx(         responses,process_units); break;
++		case SurfaceAbsVelMisfitEnum:    SurfaceAbsVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case SurfaceRelVelMisfitEnum:    SurfaceRelVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case SurfaceLogVelMisfitEnum:    SurfaceLogVelMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case SurfaceLogVxVyMisfitEnum:   SurfaceLogVxVyMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+ 		case SurfaceAverageVelMisfitEnum:SurfaceAverageVelMisfitx( responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case ThicknessAbsMisfitEnum:     ThicknessAbsMisfitx(      responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case ThicknessAbsGradientEnum:   this->ThicknessAbsGradientx(    responses, process_units,weight_index); break;
+-		case ThicknessAlongGradientEnum: ThicknessAlongGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case ThicknessAcrossGradientEnum:ThicknessAcrossGradientx(    responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case TotalSmbEnum:					TotalSmbx(                responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
+-		case RheologyBbarAbsGradientEnum:RheologyBbarAbsGradientx( responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case ThicknessAbsMisfitEnum:     ThicknessAbsMisfitx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case ThicknessAbsGradientEnum:   this->ThicknessAbsGradientx(responses, process_units,weight_index); break;
++		case ThicknessAlongGradientEnum: ThicknessAlongGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case ThicknessAcrossGradientEnum:ThicknessAcrossGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
++		case TotalSmbEnum:					this->TotalSmbx(responses,process_units); break;
++		case RheologyBbarAbsGradientEnum:RheologyBbarAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+ 		case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters,process_units,weight_index); break;
+-		case MaterialsRheologyBbarEnum:ElementResponsex(responses, elements,nodes, vertices, loads, materials, parameters,MaterialsRheologyBbarEnum,process_units); break;
+-		case VelEnum:ElementResponsex(responses, elements,nodes, vertices, loads, materials, parameters,VelEnum,process_units); break;
++		case MaterialsRheologyBbarEnum: this->ElementResponsex(responses,MaterialsRheologyBbarEnum,process_units); break;
++		case VelEnum:                   this->ElementResponsex(responses,VelEnum,process_units); break;
+ 		case FrictionCoefficientEnum:NodalValuex(responses, FrictionCoefficientEnum,elements,nodes, vertices, loads, materials, parameters,process_units); break;
+ 		default: _error_("response descriptor \"" << EnumToStringx(response_descriptor_enum) << "\" not supported yet!"); break;
+ 		#else
+@@ -896,7 +896,91 @@
+ 	*pminvz=minvz;
+ 
+ }/*}}}*/
++void FemModel::TotalSmbx(IssmDouble* pSmb,bool process_units){/*{{{*/
++
++	IssmDouble local_smb = 0;
++	IssmDouble total_smb;
++
++	for(int i=0;i<this->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
++		local_smb+=element->TotalSmb();
++	}
++#ifdef _HAVE_MPI_
++	MPI_Reduce(&local_smb,&total_smb,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&total_smb,1,MPI_DOUBLE,0,IssmComm::GetComm());
++#else
++	total_smb=local_smb;
+ #endif
++
++	/*Assign output pointers: */
++	*pSmb=total_smb;
++
++}/*}}}*/
++void FemModel::IceVolumex(IssmDouble* pV,bool process_units){/*{{{*/
++
++	IssmDouble local_ice_volume = 0;
++	IssmDouble total_ice_volume;
++
++	for(int i=0;i<this->elements->Size();i++){
++		Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
++		local_ice_volume+=element->IceVolume();
++	}
++	#ifdef _HAVE_MPI_
++	MPI_Reduce(&local_ice_volume,&total_ice_volume,1,MPI_DOUBLE,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&total_ice_volume,1,MPI_DOUBLE,0,IssmComm::GetComm());
++	#else
++	total_ice_volume=local_ice_volume;
++	#endif
++
++	/*Assign output pointers: */
++	*pV=total_ice_volume;
++
++}/*}}}*/
++void FemModel::ElementResponsex(IssmDouble* presponse,int response_enum,bool process_units){/*{{{*/
++
++	int found=0;
++	int sumfound=0;
++	int cpu_found=-1;
++	int index;
++	IssmDouble response;
++	Element* element=NULL;
++
++	/*retrieve element we are interested in: */
++	this->parameters->FindParam(&index,IndexEnum);
++	int my_rank=IssmComm::GetRank();
++
++	/*now, go through our elements, and retrieve the one with this id: index: */
++	for(int i=0;i<this->elements->Size();i++){
++		element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
++		if (element->Id()==index){
++			found=1;
++			cpu_found=my_rank;
++			break;
++		}
++	}
++
++	/*Broadcast whether we found the element: */
++#ifdef _HAVE_MPI_
++	MPI_Allreduce ( &found,&sumfound,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
++	if(!sumfound)_error_("could not find material with id" << index << " to compute ElementResponse");
++#endif
++
++	/*Ok, we found the element, compute responseocity: */
++	if(my_rank==cpu_found){
++		element->ElementResponse(&response,response_enum,IuToExtEnum);
++	}
++
++	/*Broadcast and plug into response: */
++#ifdef _HAVE_MPI_
++	MPI_Allreduce ( &cpu_found,&cpu_found,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
++	MPI_Bcast(&response,1,MPI_DOUBLE,cpu_found,IssmComm::GetComm()); 
++#endif
++
++	/*Assign output pointers: */
++	*presponse=response;
++
++}/*}}}*/
++#endif
+ #ifdef _HAVE_CONTROL_
+ void FemModel::ThicknessAbsGradientx( IssmDouble* pJ, bool process_units, int weight_index){/*{{{*/
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13874)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13875)
+@@ -73,6 +73,9 @@
+ 		void MinVxx(IssmDouble* presponse,bool process_units);
+ 		void MinVyx(IssmDouble* presponse,bool process_units);
+ 		void MinVzx(IssmDouble* presponse,bool process_units);
++		void TotalSmbx(IssmDouble* pSmb,bool process_units);
++		void IceVolumex(IssmDouble* pV,bool process_units);
++		void ElementResponsex(IssmDouble* presponse,int response_enum,bool process_units);
+ 		#endif
+ 		#ifdef  _HAVE_DAKOTA_
+ 		void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13875-13876.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13875-13876.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13875-13876.diff	(revision 13980)
@@ -0,0 +1,77 @@
+Index: ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp	(revision 13875)
++++ ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp	(revision 13876)
+@@ -1,52 +0,0 @@
+-/*!\file SmearFunctionx
+- * \brief: create 
+- */
+-
+-#include "./SmearFunctionx.h"
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../io/io.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void SmearFunctionx(Vec* psmearedvector,double (*WeightFunction)(double distance,double radius), int SmearedFieldEnum, double radius,Elements* elements,Nodes* nodes, Parameters* parameters){
+-
+-	Element *element = NULL;
+-	Vec x=NULL;
+-	Vec y=NULL;
+-	Vec z=NULL;
+-	Vec smearedvector=NULL;
+-	int i;
+-
+-	double* x_serial=NULL;
+-	double* y_serial=NULL;
+-	double* z_serial=NULL;
+-
+-	/*retrive parameters: */
+-	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-
+-	/*allocate: */
+-	gsize=nodes->NumberOfDofs(configuration_type,GsetEnum);
+-	smearedvector=NewVec(gsize,IssmComm::GetComm());
+-
+-	x=NewVec(gsize,IssmComm::GetComm());
+-	y=NewVec(gsize,IssmComm::GetComm());
+-	z=NewVec(gsize,IssmComm::GetComm());
+-
+-	for(i=0;i<nodes->Size();i++){
+-
+-	}
+-
+-	/*Fill smearedvector vector: */
+-	for (i=0;i<elements->Size();i++){
+-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		element->SmearFunction(smearedvector,WeightFunction,SmearedFieldEnum,radius);
+-	}
+-
+-	VecAssemblyBegin(smearedvector);
+-	VecAssemblyEnd(smearedvector);
+-
+-	/*Assign output pointers: */
+-	*psmearedvector=smearedvector;
+-
+-}
+Index: ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.h	(revision 13875)
++++ ../trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.h	(revision 13876)
+@@ -1,15 +0,0 @@
+-/*!\file:  SystemMatricesx.h
+- * \brief header file for degree of freedoms distribution routines.
+- */ 
+-
+-#ifndef _SYSTEMMATRICESX_H
+-#define _SYSTEMMATRICESX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void SystemMatricesx(Mat* pKff, Mat* pKfs, Vec* ppf, Vec* pdf, double* pkmax,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,
+-			bool kflag=true,bool pflag=true,bool penalty_kflag=true,bool penalty_pflag=true);
+-
+-#endif  /* _SYSTEMMATRICESX_H */
Index: /issm/oecreview/Archive/13393-13976/ISSM-13876-13877.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13876-13877.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13876-13877.diff	(revision 13980)
@@ -0,0 +1,460 @@
+Index: ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 13876)
++++ ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 13877)
+@@ -1,129 +0,0 @@
+-/*!\file SystemMatricesx
+- * \brief: create system matrices (stiffness matrix, loads vector)
+- */
+-
+-#include "./SystemMatricesx.h"
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../io/io.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void SystemMatricesx(Matrix<IssmDouble>** pKff, Matrix<IssmDouble>** pKfs, Vector<IssmDouble>** ppf, Vector<IssmDouble>** pdf, IssmDouble* pkmax,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,bool kflag,bool pflag,bool penalty_kflag,bool penalty_pflag){
+-
+-	/*intermediary: */
+-	int      i;
+-	int      fsize,ssize;
+-	int      connectivity, numberofdofspernode;
+-	int      analysis_type, configuration_type;
+-	Element *element = NULL;
+-	Load    *load    = NULL;
+-
+-	/*output: */
+-	Matrix<IssmDouble>*    Kff  = NULL;
+-	Matrix<IssmDouble>*    Kfs  = NULL;
+-	Vector<IssmDouble>*    pf   = NULL;
+-	Vector<IssmDouble>*    df=NULL;
+-	IssmDouble kmax = 0;
+-
+-	/*Display message*/
+-	if(VerboseModule()) _pprintLine_("   Generating matrices");
+-
+-	/*retrive parameters: */
+-	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+-	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
+-
+-	/*Get size of matrices: */
+-	fsize=nodes->NumberOfDofs(configuration_type,FsetEnum);
+-	ssize=nodes->NumberOfDofs(configuration_type,SsetEnum);
+-
+-	numberofdofspernode=nodes->MaxNumDofs(configuration_type,GsetEnum);
+-
+-	/*Checks in debugging mode {{{*/
+-	if(penalty_kflag)_assert_(kflag);
+-	if(penalty_pflag)_assert_(pflag);
+-	/*}}}*/
+-
+-	/*Compute penalty free mstiffness matrix and load vector*/
+-	if(kflag){
+-
+-		Kff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
+-		Kfs=new Matrix<IssmDouble>(fsize,ssize,connectivity,numberofdofspernode);
+-		df=new Vector<IssmDouble>(fsize);
+-
+-		/*Fill stiffness matrix from elements: */
+-		for (i=0;i<elements->Size();i++){
+-			element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-			element->CreateKMatrix(Kff,Kfs,df);
+-		}
+-
+-		/*Fill stiffness matrix from loads if loads have the current configuration_type: */
+-		for (i=0;i<loads->Size();i++){
+-			load=dynamic_cast<Load*>(loads->GetObjectByOffset(i));
+-			if (load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff,Kfs);
+-		}
+-
+-		/*Assemble matrix and doftypes and compress matrix to save memory: */
+-		Kff->Assemble();
+-		Kfs->Assemble();
+-		df->Assemble();
+-	}
+-
+-	if(pflag){
+-
+-		pf=new Vector<IssmDouble>(fsize);
+-
+-		/*Fill right hand side vector, from elements: */
+-		for (i=0;i<elements->Size();i++){
+-			element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-			element->CreatePVector(pf);
+-		}
+-
+-		/*Fill right hand side from loads if loads have the current configuration_type: */
+-		for (i=0;i<loads->Size();i++){
+-			load=dynamic_cast<Load*>(loads->GetObjectByOffset(i));
+-			if (load->InAnalysis(configuration_type)) load->CreatePVector(pf);
+-		}
+-		pf->Assemble();
+-	}
+-
+-	/*Now, figure out maximum value of K_gg, so that we can penalize it correctly: */
+-	kmax=Kff->Norm(NORM_INF);
+-
+-	/*Now, deal with penalties*/
+-	if(penalty_kflag){
+-
+-		/*Fill stiffness matrix from loads: */
+-		for (i=0;i<loads->Size();i++){
+-			load=dynamic_cast<Load*>(loads->GetObjectByOffset(i));
+-			if (load->InAnalysis(configuration_type)) load->PenaltyCreateKMatrix(Kff,Kfs,kmax);
+-		}
+-
+-		/*Assemble matrix and compress matrix to save memory: */
+-		Kff->Assemble();
+-		Kfs->Assemble();
+-	}
+-
+-	if(penalty_pflag){
+-
+-		/*Fill right hand side vector, from loads: */
+-		for (i=0;i<loads->Size();i++){
+-			load=dynamic_cast<Load*>(loads->GetObjectByOffset(i));
+-			if (load->InAnalysis(configuration_type)) load->PenaltyCreatePVector(pf,kmax);
+-		}
+-
+-		pf->Assemble();
+-	}
+-
+-	/*Assign output pointers: */
+-	if(pKff) *pKff=Kff;
+-	else      xdelete(&Kff);
+-	if(pKfs) *pKfs=Kfs;
+-	else      xdelete(&Kfs);
+-	if(ppf)  *ppf=pf;
+-	else      xdelete(&pf);
+-	if(pdf)  *pdf=df;
+-	else      xdelete(&df);
+-	if(pkmax) *pkmax=kmax;
+-}
+Index: ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.h	(revision 13876)
++++ ../trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.h	(revision 13877)
+@@ -1,15 +0,0 @@
+-/*!\file:  SystemMatricesx.h
+- * \brief header file for degree of freedoms distribution routines.
+- */ 
+-
+-#ifndef _SYSTEMMATRICESX_H
+-#define _SYSTEMMATRICESX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void SystemMatricesx(Matrix<IssmDouble>** pKff, Matrix<IssmDouble>** pKfs, Vector<IssmDouble>** ppf, Vector<IssmDouble>** pdf, IssmDouble* pkmax,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,
+-			bool kflag=true,bool pflag=true,bool penalty_kflag=true,bool penalty_pflag=true);
+-
+-#endif  /* _SYSTEMMATRICESX_H */
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13876)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13877)
+@@ -90,7 +90,6 @@
+ #include "./Solverx/Solverx.h"
+ #include "./SpcNodesx/SpcNodesx.h"
+ #include "./SurfaceAreax/SurfaceAreax.h"
+-#include "./SystemMatricesx/SystemMatricesx.h"
+ #include "./CreateJacobianMatrixx/CreateJacobianMatrixx.h"
+ #include "./TriaSearchx/TriaSearchx.h"
+ #include "./TriMeshx/TriMeshx.h"
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13876)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13877)
+@@ -298,8 +298,6 @@
+ 					./modules/EnumToStringx/EnumToStringx.h\
+ 					./modules/StringToEnumx/StringToEnumx.cpp\
+ 					./modules/StringToEnumx/StringToEnumx.h\
+-					./modules/SystemMatricesx/SystemMatricesx.cpp\
+-					./modules/SystemMatricesx/SystemMatricesx.h\
+ 					./modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp\
+ 					./modules/CreateJacobianMatrixx/CreateJacobianMatrixx.h\
+ 					./modules/ConstraintsStatex/ConstraintsStatex.cpp\
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13876)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13877)
+@@ -517,6 +517,110 @@
+ 	}
+ }
+ /*}}}*/
++void FemModel::SystemMatricesx(Matrix<IssmDouble>** pKff, Matrix<IssmDouble>** pKfs, Vector<IssmDouble>** ppf, Vector<IssmDouble>** pdf, IssmDouble* pkmax){/*{{{*/
++
++	/*intermediary: */
++	int      i;
++	int      fsize,ssize;
++	int      connectivity, numberofdofspernode;
++	int      analysis_type, configuration_type;
++	Element *element = NULL;
++	Load    *load    = NULL;
++
++	/*output: */
++	Matrix<IssmDouble> *Kff  = NULL;
++	Matrix<IssmDouble> *Kfs  = NULL;
++	Vector<IssmDouble> *pf   = NULL;
++	Vector<IssmDouble> *df   = NULL;
++	IssmDouble          kmax;
++
++	/*Display message*/
++	if(VerboseModule()) _pprintLine_("   Generating matrices");
++
++	/*retrive parameters: */
++	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
++	this->parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
++
++	/*Get size of matrices: */
++	fsize=this->nodes->NumberOfDofs(configuration_type,FsetEnum);
++	ssize=this->nodes->NumberOfDofs(configuration_type,SsetEnum);
++
++	numberofdofspernode=this->nodes->MaxNumDofs(configuration_type,GsetEnum);
++
++	/*Compute penalty free mstiffness matrix and load vector*/
++	Kff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
++	Kfs=new Matrix<IssmDouble>(fsize,ssize,connectivity,numberofdofspernode);
++	df =new Vector<IssmDouble>(fsize);
++
++	/*Fill stiffness matrix from elements: */
++	for (i=0;i<this->elements->Size();i++){
++		element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
++		element->CreateKMatrix(Kff,Kfs,df);
++	}
++
++	/*Fill stiffness matrix from loads if loads have the current configuration_type: */
++	for (i=0;i<this->loads->Size();i++){
++		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
++		if (load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff,Kfs);
++	}
++
++	/*Assemble matrices*/
++	Kff->Assemble();
++	Kfs->Assemble();
++	df->Assemble();
++
++	/*Create Load vector*/
++	pf=new Vector<IssmDouble>(fsize);
++
++	/*Fill right hand side vector, from elements: */
++	for (i=0;i<this->elements->Size();i++){
++		element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
++		element->CreatePVector(pf);
++	}
++
++	/*Fill right hand side from loads if loads have the current configuration_type: */
++	for (i=0;i<this->loads->Size();i++){
++		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
++		if (load->InAnalysis(configuration_type)) load->CreatePVector(pf);
++	}
++	pf->Assemble();
++
++	/*Now, figure out maximum value of K_gg, so that we can penalize it correctly: */
++	kmax=Kff->Norm(NORM_INF);
++
++	/*Now, deal with penalties*/
++	/*Fill stiffness matrix from loads: */
++	for (i=0;i<this->loads->Size();i++){
++		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
++		if (load->InAnalysis(configuration_type)) load->PenaltyCreateKMatrix(Kff,Kfs,kmax);
++	}
++
++	/*Assemble matrices*/
++	Kff->Assemble();
++	Kfs->Assemble();
++
++	/*Fill right hand side vector, from loads: */
++	for (i=0;i<this->loads->Size();i++){
++		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
++		if (load->InAnalysis(configuration_type)) load->PenaltyCreatePVector(pf,kmax);
++	}
++
++	/*Assemble vector*/
++	pf->Assemble();
++
++	/*Assign output pointers: */
++	if(pKff) *pKff=Kff;
++	else      xdelete(&Kff);
++	if(pKfs) *pKfs=Kfs;
++	else      xdelete(&Kfs);
++	if(ppf)  *ppf=pf;
++	else      xdelete(&pf);
++	if(pdf)  *pdf=df;
++	else      xdelete(&df);
++	if(pkmax) *pkmax=kmax;
++}
++/*}}}*/
+ void FemModel::TimeAdaptx(IssmDouble* pdt){/*{{{*/
+ 
+ 	int      i;
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13876)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13877)
+@@ -88,6 +88,7 @@
+ 		void CostFunctionx( IssmDouble* pJ);
+ 		void ThicknessAbsGradientx( IssmDouble* pJ, bool process_units,int weight_index);
+ 		#endif
++		void SystemMatricesx(Matrix<IssmDouble>** pKff, Matrix<IssmDouble>** pKfs, Vector<IssmDouble>** ppf, Vector<IssmDouble>** pdf, IssmDouble* pkmax);
+ 		void TimeAdaptx(IssmDouble* pdt);
+ 		void UpdateConstraintsx(void);
+ 		int  UpdateVertexPositionsx(void);
+Index: ../trunk-jpl/src/c/solvers/solver_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_nonlinear.cpp	(revision 13876)
++++ ../trunk-jpl/src/c/solvers/solver_nonlinear.cpp	(revision 13877)
+@@ -23,7 +23,7 @@
+ 	Vector<IssmDouble>* df  = NULL;
+ 	Vector<IssmDouble>* ys  = NULL;
+ 
+-	Loads* loads=NULL;
++	Loads* savedloads=NULL;
+ 	bool converged;
+ 	int constraints_converged;
+ 	int num_unstable_constraints;
+@@ -32,7 +32,7 @@
+ 	/*parameters:*/
+ 	int min_mechanical_constraints;
+ 	int max_nonlinear_iterations;
+-	int  configuration_type;
++	int configuration_type;
+ 
+ 	/*Recover parameters: */
+ 	femmodel->parameters->FindParam(&min_mechanical_constraints,DiagnosticRiftPenaltyThresholdEnum);
+@@ -41,14 +41,15 @@
+ 	femmodel->UpdateConstraintsx();
+ 
+ 	/*Were loads requested as output? : */
+-	if(conserve_loads) loads=static_cast<Loads*>(femmodel->loads->Copy()); //protect loads from being modified by the solution
+-	else               loads=static_cast<Loads*>(femmodel->loads);         //modify loads  in this solution
++	if(conserve_loads){
++		savedloads = static_cast<Loads*>(femmodel->loads->Copy());
++	}
+ 
+ 	count=1;
+ 	converged=false;
+ 
+ 	/*Start non-linear iteration using input velocity: */
+-	GetSolutionFromInputsx(&ug, femmodel->elements, femmodel->nodes, femmodel->vertices, loads, femmodel->materials, femmodel->parameters);
++	GetSolutionFromInputsx(&ug, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
+ 	Reducevectorgtofx(&uf, ug, femmodel->nodes,femmodel->parameters);
+ 
+ 	//Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate)
+@@ -61,7 +62,7 @@
+ 		xdelete(&old_ug);old_ug=ug;
+ 		xdelete(&old_uf);old_uf=uf;
+ 
+-		SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters);
++		femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf, Kfs, ys); xdelete(&Kfs);
+ 		Solverx(&uf, Kff, pf, old_uf, df, femmodel->parameters);
+@@ -71,7 +72,7 @@
+ 		InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);
+ 		InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);
+ 
+-		ConstraintsStatex(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,loads,femmodel->materials,femmodel->parameters);
++		ConstraintsStatex(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+ 		if(VerboseConvergence()) _pprintLine_("   number of unstable constraints: " << num_unstable_constraints);
+ 
+ 		//rift convergence
+@@ -107,7 +108,10 @@
+ 	if(VerboseConvergence()) _pprintLine_("\n   total number of iterations: " << count-1);
+ 
+ 	/*clean-up*/
+-	if(conserve_loads) delete loads;
++	if(conserve_loads){
++		delete femmodel->loads;
++		femmodel->loads=savedloads;
++	}
+ 	xdelete(&uf);
+ 	xdelete(&ug);
+ 	xdelete(&old_ug);
+Index: ../trunk-jpl/src/c/solvers/solver_linear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_linear.cpp	(revision 13876)
++++ ../trunk-jpl/src/c/solvers/solver_linear.cpp	(revision 13877)
+@@ -23,7 +23,7 @@
+ 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 	femmodel->UpdateConstraintsx();
+ 
+-	SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
+ 	CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 	Reduceloadx(pf, Kfs, ys); xdelete(&Kfs);
+ 	Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); 
+Index: ../trunk-jpl/src/c/solvers/solver_newton.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_newton.cpp	(revision 13876)
++++ ../trunk-jpl/src/c/solvers/solver_newton.cpp	(revision 13877)
+@@ -55,7 +55,7 @@
+ 		xdelete(&old_uf);old_uf=uf;
+ 
+ 		/*Solver forward model*/
+-		SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++		femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf,Kfs,ys);xdelete(&Kfs);
+ 		Solverx(&uf,Kff,pf,old_uf,df,femmodel->parameters);xdelete(&df);
+@@ -82,7 +82,7 @@
+ 		}
+ 
+ 		/*Prepare next iteration using Newton's method*/
+-		SystemMatricesx(&Kff,&Kfs,&pf,NULL,&kmax,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++		femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf,Kfs,ys);   xdelete(&Kfs);
+ 
+Index: ../trunk-jpl/src/c/solvers/solver_stokescoupling_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_stokescoupling_nonlinear.cpp	(revision 13876)
++++ ../trunk-jpl/src/c/solvers/solver_stokescoupling_nonlinear.cpp	(revision 13877)
+@@ -62,7 +62,7 @@
+ 		xdelete(&old_uf_horiz); old_uf_horiz=uf_horiz;
+ 
+ 		/*solve: */
+-		SystemMatricesx(&Kff_horiz, &Kfs_horiz, &pf_horiz, &df_horiz, NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++		femmodel->SystemMatricesx(&Kff_horiz, &Kfs_horiz, &pf_horiz, &df_horiz, NULL);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf_horiz, Kfs_horiz, ys); xdelete(&Kfs_horiz);
+ 		Solverx(&uf_horiz, Kff_horiz, pf_horiz, old_uf_horiz, df_horiz,femmodel->parameters);
+@@ -76,7 +76,7 @@
+ 		femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 
+ 		/*solve: */
+-		SystemMatricesx(&Kff_vert, &Kfs_vert, &pf_vert,  &df_vert,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++		femmodel->SystemMatricesx(&Kff_vert, &Kfs_vert, &pf_vert,  &df_vert,NULL);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf_vert, Kfs_vert, ys); xdelete(&Kfs_vert);
+ 		Solverx(&uf_vert, Kff_vert, pf_vert, NULL, df_vert,femmodel->parameters); xdelete(&Kff_vert); xdelete(&pf_vert); xdelete(&df_vert);
+Index: ../trunk-jpl/src/c/solvers/solver_thermal_nonlinear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_thermal_nonlinear.cpp	(revision 13876)
++++ ../trunk-jpl/src/c/solvers/solver_thermal_nonlinear.cpp	(revision 13877)
+@@ -52,7 +52,7 @@
+ 
+ 	for(;;){
+ 
+-		SystemMatricesx(&Kff, &Kfs, &pf,&df, &melting_offset,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++		femmodel->SystemMatricesx(&Kff, &Kfs, &pf,&df, &melting_offset);
+ 		CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 		Reduceloadx(pf, Kfs, ys); xdelete(&Kfs); xdelete(&tf);
+ 		Solverx(&tf, Kff, pf,tf_old, df, femmodel->parameters);
+Index: ../trunk-jpl/src/c/solvers/solver_adjoint_linear.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_adjoint_linear.cpp	(revision 13876)
++++ ../trunk-jpl/src/c/solvers/solver_adjoint_linear.cpp	(revision 13877)
+@@ -25,7 +25,7 @@
+ 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 	femmodel->UpdateConstraintsx();
+ 
+-	SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
++	femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);
+ 	CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type);
+ 	Reduceloadx(pf, Kfs, ys,true); xdelete(&Kfs); //true means spc = 0
+ 	Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); xdelete(&Kff); xdelete(&pf); xdelete(&df);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13877-13878.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13877-13878.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13877-13878.diff	(revision 13980)
@@ -0,0 +1,170 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13877)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13878)
+@@ -336,6 +336,48 @@
+ /*}}}*/
+ 
+ /*Modules:*/
++void FemModel::AllocateSystemMatrices(Matrix<IssmDouble>** pKff,Matrix<IssmDouble>** pKfs,Vector<IssmDouble>** pdf,Vector<IssmDouble>** ppf){ /*{{{*/
++
++	/*Intermediary*/
++	int      fsize,ssize;
++	int      connectivity, numberofdofspernode;
++	int      analysis_type, configuration_type;
++
++	/*output*/
++	Matrix<IssmDouble> *Kff  = NULL;
++	Matrix<IssmDouble> *Kfs  = NULL;
++	Vector<IssmDouble> *pf   = NULL;
++	Vector<IssmDouble> *df   = NULL;
++
++	bool oldalloc=true;
++
++	/*retrieve parameters: */
++	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
++	this->parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
++
++	/*retrieve node info*/
++	fsize=this->nodes->NumberOfDofs(configuration_type,FsetEnum);
++	ssize=this->nodes->NumberOfDofs(configuration_type,SsetEnum);
++	numberofdofspernode=this->nodes->MaxNumDofs(configuration_type,GsetEnum);
++
++	if(oldalloc){
++		Kff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
++		Kfs=new Matrix<IssmDouble>(fsize,ssize,connectivity,numberofdofspernode);
++		df =new Vector<IssmDouble>(fsize);
++		pf =new Vector<IssmDouble>(fsize);
++	}
++	else{
++		/*IN PROGRESS*/
++	}
++
++	/*Allocate output pointers*/
++	*pKff = Kff;
++	*pKfs = Kfs;
++	*pdf  = df;
++	*ppf  = pf;
++}
++/*}}}*/
+ int  FemModel::UpdateVertexPositionsx(void){ /*{{{*/
+ 
+ 	int     i;
+@@ -521,9 +563,7 @@
+ 
+ 	/*intermediary: */
+ 	int      i;
+-	int      fsize,ssize;
+-	int      connectivity, numberofdofspernode;
+-	int      analysis_type, configuration_type;
++	int      configuration_type;
+ 	Element *element = NULL;
+ 	Load    *load    = NULL;
+ 
+@@ -534,79 +574,58 @@
+ 	Vector<IssmDouble> *df   = NULL;
+ 	IssmDouble          kmax;
+ 
++
+ 	/*Display message*/
+ 	if(VerboseModule()) _pprintLine_("   Generating matrices");
+ 
+ 	/*retrive parameters: */
+-	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	this->parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
+ 
+-	/*Get size of matrices: */
+-	fsize=this->nodes->NumberOfDofs(configuration_type,FsetEnum);
+-	ssize=this->nodes->NumberOfDofs(configuration_type,SsetEnum);
+-
+-	numberofdofspernode=this->nodes->MaxNumDofs(configuration_type,GsetEnum);
+-
+ 	/*Compute penalty free mstiffness matrix and load vector*/
+-	Kff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
+-	Kfs=new Matrix<IssmDouble>(fsize,ssize,connectivity,numberofdofspernode);
+-	df =new Vector<IssmDouble>(fsize);
++	this->AllocateSystemMatrices(&Kff,&Kfs,&df,&pf);
+ 
+-	/*Fill stiffness matrix from elements: */
++	/*Fill stiffness matrix from elements and loads */
+ 	for (i=0;i<this->elements->Size();i++){
+ 		element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+ 		element->CreateKMatrix(Kff,Kfs,df);
+ 	}
+-
+-	/*Fill stiffness matrix from loads if loads have the current configuration_type: */
+ 	for (i=0;i<this->loads->Size();i++){
+ 		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+ 		if (load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff,Kfs);
+ 	}
+ 
+-	/*Assemble matrices*/
+-	Kff->Assemble();
+-	Kfs->Assemble();
+-	df->Assemble();
+ 
+-	/*Create Load vector*/
+-	pf=new Vector<IssmDouble>(fsize);
+-
+-	/*Fill right hand side vector, from elements: */
++	/*Fill right hand side vector, from elements and loads */
+ 	for (i=0;i<this->elements->Size();i++){
+ 		element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
+ 		element->CreatePVector(pf);
+ 	}
+-
+-	/*Fill right hand side from loads if loads have the current configuration_type: */
+ 	for (i=0;i<this->loads->Size();i++){
+ 		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+ 		if (load->InAnalysis(configuration_type)) load->CreatePVector(pf);
+ 	}
+-	pf->Assemble();
+ 
+-	/*Now, figure out maximum value of K_gg, so that we can penalize it correctly: */
++	/*Assemble matrices (required to get kmax)*/
++	Kff->Assemble();
++	Kfs->Assemble();
++	df->Assemble();
++
++	/*Now, figure out maximum value of stiffness matrix, so that we can penalize it correctly: */
+ 	kmax=Kff->Norm(NORM_INF);
+ 
+-	/*Now, deal with penalties*/
+-	/*Fill stiffness matrix from loads: */
++	/*Now that we have kmax, deal with penalties (only in loads)*/
+ 	for (i=0;i<this->loads->Size();i++){
+ 		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+ 		if (load->InAnalysis(configuration_type)) load->PenaltyCreateKMatrix(Kff,Kfs,kmax);
+ 	}
+-
+-	/*Assemble matrices*/
+-	Kff->Assemble();
+-	Kfs->Assemble();
+-
+-	/*Fill right hand side vector, from loads: */
+ 	for (i=0;i<this->loads->Size();i++){
+ 		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+ 		if (load->InAnalysis(configuration_type)) load->PenaltyCreatePVector(pf,kmax);
+ 	}
+ 
+-	/*Assemble vector*/
++	/*Assemble matrices and vector*/
++	Kff->Assemble();
++	Kfs->Assemble();
+ 	pf->Assemble();
+ 
+ 	/*Assign output pointers: */
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13877)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13878)
+@@ -51,6 +51,7 @@
+ 		~FemModel();
+ 
+ 		/*Methods:*/
++		void AllocateSystemMatrices(Matrix<IssmDouble>** pKff,Matrix<IssmDouble>** pKfs,Vector<IssmDouble>** pdf,Vector<IssmDouble>** ppf);
+ 		void Echo();
+ 		void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
+ 		void Solve(void);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13878-13879.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13878-13879.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13878-13879.diff	(revision 13980)
@@ -0,0 +1,746 @@
+Index: ../trunk-jpl/test/NightlyRun/test202.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test202.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test202.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test202.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test216.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test216.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test216.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test426.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.m	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test426.m	(revision 13879)
+@@ -22,7 +22,7 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2',...
+ 	'Bed3','Surface3','Thickness3','Floatingice3'};
+ field_tolerances={1e-13,1e-13,1e-13,1e-13,...
+-	1e-11,1e-11,1e-11,1e-13,...
++	1e-11,1e-10,1e-11,1e-13,...
+ 	1e-10,1e-10,1e-10,1e-13};
+ field_values={...
+ 	(md.results.TransientSolution(1).Bed),...
+Index: ../trunk-jpl/test/NightlyRun/test211.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test211.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test211.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test211.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test220.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test220.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test220.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test208.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test208.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test208.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test208.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test108.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test108.m	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test108.m	(revision 13879)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-13,1e-13};
++field_tolerances={1e-13,1e-5};
+ field_values={...
+ 	(md.results.ThermalSolution.Temperature),...
+ 	(md.results.ThermalSolution.BasalforcingsMeltingRate),...
+Index: ../trunk-jpl/test/NightlyRun/test3005.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test3005.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test3005.m
+-Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test203.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test203.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test203.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test203.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test217.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test217.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test217.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test232.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.m	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test232.m	(revision 13879)
+@@ -15,7 +15,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature1','BasalforcingsMeltingRate1','Temperature2','BasalforcingsMeltingRate2','Temperature3','BasalforcingsMeltingRate3','Temperature4','BasalforcingsMeltingRate4'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_tolerances={1e-13,1e-6,1e-13,1e-6,1e-13,1e-6,1e-13,1e-6};
+ field_values={...
+ 	(md.results.TransientSolution(1).Temperature),...
+ 	(md.results.TransientSolution(1).BasalforcingsMeltingRate),...
+Index: ../trunk-jpl/test/NightlyRun/test212.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test212.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test212.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test207.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.m	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test207.m	(revision 13879)
+@@ -12,7 +12,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature1','BasalforcingsMeltingRate1','Temperature2','BasalforcingsMeltingRate2','Temperature3','BasalforcingsMeltingRate3'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_tolerances={1e-13,1e-6,1e-13,1e-6,1e-13,1e-6};
+ field_values={...
+ 	(md.results.TransientSolution(1).Temperature),...
+ 	(md.results.TransientSolution(1).BasalforcingsMeltingRate),...
+Index: ../trunk-jpl/test/NightlyRun/test209.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test209.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test209.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test3006.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test3006.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test3006.m
+-Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test204.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test204.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test204.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test406.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test406.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test406.py	(revision 13879)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-13,1e-13]
++field_tolerances=[1e-13,1e-5]
+ field_values=[\
+ 	md.results['ThermalSolution'][1]['Temperature'],\
+ 	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
+Index: ../trunk-jpl/test/NightlyRun/test3001.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test3001.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test3001.m
+-Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test213.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test213.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test213.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test415.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test415.py	(revision 13879)
+@@ -35,7 +35,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-10,1e-10,1e-11,1e-13,1e-10,1e-09,1e-10,1e-8,1e-09,1e-6]
++field_tolerances=[1e-10,1e-9,1e-10,1e-13,1e-10,1e-09,1e-10,1e-8,1e-09,1e-6]
+ field_values=[\
+ 	md.results['SteadystateSolution'][1]['Gradient1'],\
+ 	md.results['SteadystateSolution'][1]['J'],\
+Index: ../trunk-jpl/test/NightlyRun/test3010.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test3010.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test3010.m
+-Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test3007.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test3007.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test3007.m
+-Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test205.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test205.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test205.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test205.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test219.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test219.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test219.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test3002.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test3002.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test3002.m
+-Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test214.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test214.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test214.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test406.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test406.m	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test406.m	(revision 13879)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-13,1e-13};
++field_tolerances={1e-13,1e-5};
+ field_values={...
+ 	(md.results.ThermalSolution.Temperature),...
+ 	(md.results.ThermalSolution.BasalforcingsMeltingRate),...
+Index: ../trunk-jpl/test/NightlyRun/test318.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test318.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test318.py	(revision 13879)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_tolerances=[1e-13,1e-13,1e-10,1e-10,1e-13,1e-11,1e-6]
+ field_values=[\
+ 	md.results['SteadystateSolution'][1]['Vx'],\
+ 	md.results['SteadystateSolution'][1]['Vy'],\
+Index: ../trunk-jpl/test/NightlyRun/test415.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.m	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test415.m	(revision 13879)
+@@ -23,7 +23,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-10,1e-10,1e-11,1e-13,1e-10,1e-09,1e-10,1e-8,1e-09,1e-6};
++field_tolerances={1e-10,1e-9,1e-10,1e-13,1e-10,1e-09,1e-10,1e-8,1e-09,1e-6};
+ field_values={...
+ 	(md.results.SteadystateSolution.Gradient1),...
+ 	md.results.SteadystateSolution.J,...
+Index: ../trunk-jpl/test/NightlyRun/test3008.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test3008.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test3008.m
+-Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test232.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test232.py	(revision 13879)
+@@ -25,7 +25,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Temperature1','BasalforcingsMeltingRate1','Temperature2','BasalforcingsMeltingRate2','Temperature3','BasalforcingsMeltingRate3','Temperature4','BasalforcingsMeltingRate4']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_tolerances=[1e-13,1e-6,1e-13,1e-6,1e-13,1e-6,1e-13,1e-6]
+ field_values=[\
+ 	md.results['TransientSolution'][1]['Temperature'],\
+ 	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+Index: ../trunk-jpl/test/NightlyRun/test206.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test206.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test206.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test206.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test3003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test3003.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test3003.m
+-Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test215.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test215.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test108.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test108.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test108.py	(revision 13879)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-13,1e-13]
++field_tolerances=[1e-13,1e-5]
+ field_values=[\
+ 	md.results['ThermalSolution'][1]['Temperature'],\
+ 	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
+Index: ../trunk-jpl/test/NightlyRun/test318.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test318.m	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test318.m	(revision 13879)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_tolerances={1e-13,1e-13,1e-10,1e-10,1e-13,1e-11,1e-6};
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+ 	(md.results.SteadystateSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test210.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test210.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test210.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test210.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 13879)
+@@ -32,7 +32,7 @@
+ 	'Bed2','Surface2','Thickness2','Floatingice2',\
+ 	'Bed3','Surface3','Thickness3','Floatingice3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
+-	1e-11,1e-11,1e-11,1e-13,\
++	1e-11,1e-10,1e-11,1e-13,\
+ 	1e-10,1e-10,1e-10,1e-13]
+ field_values=[\
+ 	md.results['TransientSolution'][1]['Bed'],\
+Index: ../trunk-jpl/test/NightlyRun/test3009.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test3009.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test3009.m
+-Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/NightlyRun/test207.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test207.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test207.m
+-Created on 2012-09-27 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+@@ -32,11 +20,9 @@
+ md.transient.isgroundingline=0
+ md=solve(md,TransientSolutionEnum())
+ 
+-
+ # Fields and tolerances to track changes
+-
+ field_names     =['Temperature1','BasalforcingsMeltingRate1','Temperature2','BasalforcingsMeltingRate2','Temperature3','BasalforcingsMeltingRate3']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_tolerances=[1e-13,1e-6,1e-13,1e-6,1e-13,1e-6]
+ field_values=[\
+ 	md.results['TransientSolution'][1]['Temperature'],\
+ 	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+Index: ../trunk-jpl/test/NightlyRun/test3004.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.py	(revision 13878)
++++ ../trunk-jpl/test/NightlyRun/test3004.py	(revision 13879)
+@@ -1,15 +1,3 @@
+-"""
+-== == == == == == == == == == == == == == == == == == ==
+-Auto generated python script for ISSM:   test3004.m
+-Created on 2012-09-25 via translateToPy.py Ver 1.0 by mikep
+-== == == == == == == == == == == == == == == == == == ==
+-
+-Matlab script conversion into python
+-translateToPy.py Author: Michael Pellegrin
+-translateToPy.py Date: 09/24/12
+-== == == == == == == == == == == == == == == == == == ==
+-"""
+-
+ from MatlabFuncs import *
+ from model import *
+ from EnumDefinitions import *
+Index: ../trunk-jpl/test/Archives/Archive237.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13879-13880.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13879-13880.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13879-13880.diff	(revision 13980)
@@ -0,0 +1,221 @@
+Index: ../trunk-jpl/src/c/toolkits/issm/SeqMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/SeqMat.h	(revision 13879)
++++ ../trunk-jpl/src/c/toolkits/issm/SeqMat.h	(revision 13880)
+@@ -60,6 +60,15 @@
+ 			if(M*N) this->matrix=xNewZeroInit<doubletype>(pM*pN);
+ 		}
+ 		/*}}}*/
++		/*FUNCTION SeqMat(int m,int n,int M,int N,int* d_nnz,int* o_nnz){{{*/
++		SeqMat(int m,int n,int pM,int pN,int* d_nnz,int* o_nnz){
++
++			this->M=pM;
++			this->N=pN;
++			this->matrix=NULL;
++			if(pM*pN) this->matrix=xNewZeroInit<doubletype>(pM*pN);
++		}
++		/*}}}*/
+ 		/*FUNCTION SeqMat(doubletype* serial_mat,int M,int N,doubletype sparsity){{{*/
+ 		SeqMat(doubletype* serial_mat,int pM,int pN,doubletype sparsity){
+ 
+Index: ../trunk-jpl/src/c/toolkits/issm/SeqVec.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/issm/SeqVec.h	(revision 13879)
++++ ../trunk-jpl/src/c/toolkits/issm/SeqVec.h	(revision 13880)
+@@ -48,6 +48,14 @@
+ 			if(this->M) this->vector=xNewZeroInit<doubletype>(pM);
+ 		}
+ 		/*}}}*/
++		/*FUNCTION SeqVec(int m,int M){{{*/
++		SeqVec(int pm,int pM){
++
++			this->M=pM;
++			this->vector=NULL;
++			if(this->M) this->vector=xNewZeroInit<doubletype>(pM);
++		}
++		/*}}}*/
+ 		/*FUNCTION SeqVec(int M,bool fromlocalsize){{{*/
+ 		SeqVec(int pM,bool fromlocalsize){
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13879)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13880)
+@@ -39,6 +39,16 @@
+ 	this->matrix=NewMat(M,N,sparsity,IssmComm::GetComm());
+ }
+ /*}}}*/
++/*FUNCTION PetscMat::PetscMat(int M,int N, IssmDouble sparsity){{{*/
++PetscMat::PetscMat(int m,int n,int M,int N,int* d_nnz,int* o_nnz){
++
++	MatCreate(IssmComm::GetComm(),&this->matrix);
++	MatSetSizes(this->matrix,m,n,M,N);
++	MatSetFromOptions(this->matrix);
++	MatMPIAIJSetPreallocation(this->matrix,0,d_nnz,0,o_nnz);
++
++}
++/*}}}*/
+ /*FUNCTION PetscMat::PetscMat(IssmDouble* serial_mat,int M,int N,IssmDouble sparsity){{{*/
+ PetscMat::PetscMat(IssmDouble* serial_mat,int M,int N,IssmDouble sparsity){
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.h	(revision 13879)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.h	(revision 13880)
+@@ -29,14 +29,15 @@
+ 		IssmDouble* avector;
+ 		#endif
+ 
+-		/*PetscVec constructors, destructors {{{*/
++		/*PetscVec constructors, destructors*/
+ 		PetscVec();
+ 		PetscVec(int M,bool fromlocalsize=false);
++		PetscVec(int m,int M);
+ 		PetscVec(IssmDouble* buffer, int M);
+ 		PetscVec(Vec petsc_vec);
+ 		~PetscVec();
+-		/*}}}*/
+-		/*PetscVec specific routines {{{*/
++
++		/*PetscVec specific routines*/
+ 		void Echo(void);
+ 		void Assemble(void);
+ 		void SetValues(int ssize, int* list, IssmDouble* values, InsMode mode);
+@@ -54,7 +55,6 @@
+ 		void Scale(IssmDouble scale_factor);
+ 		void PointwiseDivide(PetscVec* x,PetscVec* y);
+ 		IssmDouble Dot(PetscVec* vector);
+-		/*}}}*/
+ };
+ 
+ #endif //#ifndef _PETSCVEC_H_
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.h
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.h	(revision 13879)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.h	(revision 13880)
+@@ -30,15 +30,16 @@
+ 		IssmDouble* amatrix;
+ 		#endif
+ 
+-		/*PetscMat constructors, destructors {{{*/
++		/*PetscMat constructors, destructors*/
+ 		PetscMat();
+ 		PetscMat(int M,int N);
+ 		PetscMat(int M,int N,IssmDouble sparsity);
++		PetscMat(int m,int n,int M,int N,int* d_nnz,int* o_nnz);
+ 		PetscMat(IssmDouble* serial_mat,int M,int N,IssmDouble sparsity);
+ 		PetscMat(int M,int N,int connectivity,int numberofdofspernode);
+ 		~PetscMat();
+-		/*}}}*/
+-		/*PetscMat specific routines {{{*/
++
++		/*PetscMat specific routines*/
+ 		void AllocationInfo(void);
+ 		void Echo(void);
+ 		void Assemble(void);
+@@ -50,8 +51,6 @@
+ 		IssmDouble* ToSerial(void);
+ 		void SetValues(int m,int* idxm,int n,int* idxn,IssmDouble* values,InsMode mode);
+ 		void Convert(MatrixType type);
+-		/*}}}*/
+-
+ };
+ 
+ #endif //#ifndef _PETSCMAT_H_
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp	(revision 13879)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp	(revision 13880)
+@@ -33,6 +33,16 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION PetscVec::PetscVec(int m,int M){{{*/
++PetscVec::PetscVec(int m,int M){
++
++	VecCreate(IssmComm::GetComm(),&this->vector);
++	VecSetSizes(this->vector,m,M);
++	VecSetFromOptions(this->vector);
++	VecSet(this->vector,0.0);
++
++}
++/*}}}*/
+ /*FUNCTION PetscVec::PetscVec(Vec petsc_vec){{{*/
+ PetscVec::PetscVec(Vec petsc_vec){
+ 
+Index: ../trunk-jpl/src/c/classes/matrix/Vector.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/Vector.h	(revision 13879)
++++ ../trunk-jpl/src/c/classes/matrix/Vector.h	(revision 13880)
+@@ -74,6 +74,33 @@
+ 
+ 		}
+ 		/*}}}*/
++		/*FUNCTION Vector(int m,int M,int in_type){{{*/
++		#ifdef _HAVE_PETSC_
++		Vector(int m,int M,int in_type=PetscVecType){
++		#else
++		Vector(int m,int M,int in_type=SeqVecType){
++		#endif
++
++			#ifdef _HAVE_PETSC_
++			pvector=NULL;
++			#endif
++			svector=NULL;
++			type=in_type;
++
++			if(type==PetscVecType){
++			#ifdef _HAVE_PETSC_
++				this->pvector=new PetscVec(m,M);
++			 #else
++				_error_("Petsc matrix format not usable, as Petsc has not been compiled!");
++			 #endif
++			}
++			else if(type==SeqVecType){
++				this->svector=new SeqVec<doubletype>(m,M);
++			}
++			else _error_("Vector type: " << type << " not supported yet!");
++
++		}
++		/*}}}*/
+ 		/*FUNCTION Vector(doubletype* serial_vec,int M,int in_type){{{*/
+ 		#ifdef _HAVE_PETSC_
+ 		Vector(doubletype* serial_vec,int M,int in_type=PetscVecType){
+Index: ../trunk-jpl/src/c/classes/matrix/Matrix.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/matrix/Matrix.h	(revision 13879)
++++ ../trunk-jpl/src/c/classes/matrix/Matrix.h	(revision 13880)
+@@ -75,6 +75,33 @@
+ 
+ 		}
+ 		/*}}}*/
++		/*FUNCTION Matrix(int m,int n,int M,int N,int* d_nnz,int* o_nnz,int type){{{*/
++		#ifdef _HAVE_PETSC_
++		Matrix(int m,int n,int M,int N,int* d_nnz,int* o_nnz,int in_type=PetscMatType){
++		#else
++		Matrix(int m,int n,int M,int N,int* d_nnz,int* o_nnz,int in_type=SeqMatType){
++		#endif
++
++			#ifdef _HAVE_PETSC_
++			pmatrix=NULL;
++			#endif
++			smatrix=NULL;
++			type=in_type;
++
++			if(type==PetscMatType){
++				#ifdef _HAVE_PETSC_
++				this->pmatrix=new PetscMat(m,n,M,N,d_nnz,o_nnz);
++				#else
++				_error_("Petsc matrix format not usable, as Petsc has not been compiled!");
++				#endif
++			}
++			else if(type==SeqMatType){
++				this->smatrix=new SeqMat<doubletype>(m,n,M,N,d_nnz,o_nnz);
++			}
++			else _error_("Matrix type: " << type << " not supported yet!");
++
++		}
++		/*}}}*/
+ 		/*FUNCTION Matrix(int M,int N,IssmDouble sparsity,int in_type){{{*/
+ 		#ifdef _HAVE_PETSC_
+ 		Matrix(int M,int N,double sparsity,int in_type=PetscMatType){
Index: /issm/oecreview/Archive/13393-13976/ISSM-13880-13881.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13880-13881.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13880-13881.diff	(revision 13980)
@@ -0,0 +1,220 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13880)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13881)
+@@ -339,9 +339,12 @@
+ void FemModel::AllocateSystemMatrices(Matrix<IssmDouble>** pKff,Matrix<IssmDouble>** pKfs,Vector<IssmDouble>** pdf,Vector<IssmDouble>** ppf){ /*{{{*/
+ 
+ 	/*Intermediary*/
+-	int      fsize,ssize;
+-	int      connectivity, numberofdofspernode;
+-	int      analysis_type, configuration_type;
++	int  fsize,ssize,flocalsize,slocalsize;
++	int  connectivity, numberofdofspernode;
++	int  analysis_type,configuration_type;
++	int  m,n,M,N;
++	int *d_nnz = NULL;
++	int *o_nnz = NULL;
+ 
+ 	/*output*/
+ 	Matrix<IssmDouble> *Kff  = NULL;
+@@ -357,8 +360,11 @@
+ 	this->parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
+ 
+ 	/*retrieve node info*/
+-	fsize=this->nodes->NumberOfDofs(configuration_type,FsetEnum);
+-	ssize=this->nodes->NumberOfDofs(configuration_type,SsetEnum);
++	fsize      = this->nodes->NumberOfDofs(configuration_type,FsetEnum);
++	ssize      = this->nodes->NumberOfDofs(configuration_type,SsetEnum);
++	flocalsize = this->nodes->NumberOfDofsLocal(analysis_type,FsetEnum);
++	slocalsize = this->nodes->NumberOfDofsLocal(analysis_type,SsetEnum);
++
+ 	numberofdofspernode=this->nodes->MaxNumDofs(configuration_type,GsetEnum);
+ 
+ 	if(oldalloc){
+@@ -368,7 +374,25 @@
+ 		pf =new Vector<IssmDouble>(fsize);
+ 	}
+ 	else{
+-		/*IN PROGRESS*/
++		/*Kff*/
++		m=flocalsize; n=flocalsize; /*local  sizes*/
++		M=fsize;      N=fsize;      /*global sizes*/
++		this->MatrixNonzeros(&d_nnz,&o_nnz,FsetEnum,FsetEnum);
++		Kff=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
++		xDelete<int>(d_nnz);
++		xDelete<int>(o_nnz);
++
++		/*Kfs*/
++		m=flocalsize; n=slocalsize; /*local  sizes*/
++		M=fsize;      N=ssize;      /*global sizes*/
++		this->MatrixNonzeros(&d_nnz,&o_nnz,FsetEnum,SsetEnum);
++		Kfs=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
++		xDelete<int>(d_nnz);
++		xDelete<int>(o_nnz);
++
++		/*Vectors*/
++		df =new Vector<IssmDouble>(flocalsize,fsize);
++		pf =new Vector<IssmDouble>(flocalsize,fsize);
+ 	}
+ 
+ 	/*Allocate output pointers*/
+@@ -378,6 +402,136 @@
+ 	*ppf  = pf;
+ }
+ /*}}}*/
++void FemModel::MatrixNonzeros(int** pd_nnz,int** po_nnz,int set1enum,int set2enum){/*{{{*/
++
++	/*Intermediary*/
++	int      i,j,k,index,count;
++	int      analysis_type,configuration_type;
++	int      fsize,dim;
++	int      d_nz,o_nz;
++	Element *element = NULL;
++	int     *head    = NULL;
++	int     *next    = NULL;
++
++	/*output*/
++	int *d_nnz = NULL;
++	int *o_nnz = NULL;
++
++	/*retrive parameters: */
++	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
++	this->parameters->FindParam(&dim,MeshDimensionEnum);
++
++	/*Get vector size and number of nodes*/
++	int numnodes            = nodes->NumberOfNodes(analysis_type);
++	int numberofdofspernode = nodes->MaxNumDofs(configuration_type,GsetEnum);
++	int m                   = nodes->NumberOfDofsLocal(analysis_type,set1enum);
++
++	/*First, we are building chaining vectors so that we know what nodes are
++	 * connected to what elements. These vectors are such that:
++	 *   for(int i=head[id];i!=-1;i=next[i])
++	 * will loop over all the elements that are connected to the node number
++	 * id*/
++	if(dim==2){
++		head=xNew<int>(numnodes); for(i=0;i<numnodes;i++) head[i]=-1;
++		next=xNew<int>(elements->Size()*3); /*3 = number of nodes per element*/
++	}
++	else if(dim==3){
++		head=xNew<int>(numnodes); for(i=0;i<numnodes;i++) head[i]=-1;
++		next=xNew<int>(elements->Size()*6); /*6 = number of nodes per element*/
++	}
++	else{
++		_error_("dim "<<dim<<" not supported yet");
++	}
++	k=0;
++	for(i=0;i<elements->Size();i++){
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++		for(int j=0;j<3;j++){
++			int index =dynamic_cast<Tria*>(element)->nodes[j]->sid;//starts at 0 for a given analysis
++			_assert_(k>=0 && k<numnodes*elements->Size() && index>=0 && index<numnodes);
++			next[k]=head[index];
++			head[index]=k++;
++		}
++	}
++
++	/*OK now count number of dofs and flag each nodes for each node i*/
++	bool *flags                  = xNew<bool>(numnodes);
++	int  *d_connectivity         = xNewZeroInit<int>(numnodes);
++	int  *o_connectivity         = xNewZeroInit<int>(numnodes);
++	int  *connectivity_clone     = xNewZeroInit<int>(numnodes);
++	int  *all_connectivity_clone = xNewZeroInit<int>(numnodes);
++
++	/*Create connectivity vector*/
++	for(i=0;i<nodes->Size();i++){
++		Node* node=dynamic_cast<Node*>(nodes->GetObjectByOffset(i));
++		if(node->InAnalysis(analysis_type)){
++
++			/*Reinitialize flags to 0*/
++			for(j=0;j<numnodes;j++) flags[j]=false;
++
++			/*Loop over elements that hold node number i*/
++			_assert_(head[node->Sid()]!=-1);
++			for(j=head[node->Sid()];j!=-1;j=next[j]){
++				if(dim==2){
++					index = (int)(double(j)/3);
++				}
++				else if(dim==3){
++					index = (int)(double(j)/6);
++				}
++				else{
++					_error_("dim "<<dim<<" not supported yet");
++				}
++				element=dynamic_cast<Element*>(elements->GetObjectByOffset(index));
++				element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,set1enum,set2enum);
++				if(node->IsClone()){
++					connectivity_clone[node->Sid()]+=d_nz+o_nz;
++				}
++				else{
++					d_connectivity[node->Sid()]+=d_nz;
++					o_connectivity[node->Sid()]+=o_nz;
++				}
++			}
++		}
++	}
++	xDelete<bool>(flags);
++	xDelete<int>(head);
++	xDelete<int>(next);
++
++	/*sum over all cpus*/
++	MPI_Allreduce((void*)connectivity_clone,(void*)all_connectivity_clone,numnodes,MPI_INT,MPI_SUM,IssmComm::GetComm());
++	xDelete<int>(connectivity_clone);
++
++	if(set1enum==FsetEnum){
++		count=0;
++		d_nnz=xNew<int>(m);
++		o_nnz=xNew<int>(m);
++		for(i=0;i<nodes->Size();i++){
++			Node* node=dynamic_cast<Node*>(nodes->GetObjectByOffset(i));
++			if(node->InAnalysis(analysis_type) && !node->IsClone()){
++				for(j=0;j<node->indexing.fsize;j++){
++					_assert_(count<m);
++					d_nnz[count]=numberofdofspernode*(d_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
++					o_nnz[count]=numberofdofspernode*(o_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
++					if(d_nnz[count]>m)   d_nnz[count]=m;
++					if(o_nnz[count]>fsize-m) o_nnz[count]=fsize-m;
++					count++;
++				}
++			}
++		}
++		_assert_(m==count);
++	}
++	else{
++		_error_("STOP not implemented");
++	}
++	xDelete<int>(d_connectivity);
++	xDelete<int>(o_connectivity);
++	xDelete<int>(all_connectivity_clone);
++
++	/*Allocate ouptput pointer*/
++	*pd_nnz=d_nnz;
++	*po_nnz=o_nnz;
++
++}/*}}}*/
+ int  FemModel::UpdateVertexPositionsx(void){ /*{{{*/
+ 
+ 	int     i;
+@@ -627,6 +781,9 @@
+ 	Kff->Assemble();
+ 	Kfs->Assemble();
+ 	pf->Assemble();
++	//Kff->AllocationInfo();
++	//Kfs->AllocationInfo();
++	//_error_("STOP");
+ 
+ 	/*Assign output pointers: */
+ 	if(pKff) *pKff=Kff;
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13880)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13881)
+@@ -54,6 +54,7 @@
+ 		void AllocateSystemMatrices(Matrix<IssmDouble>** pKff,Matrix<IssmDouble>** pKfs,Vector<IssmDouble>** pdf,Vector<IssmDouble>** ppf);
+ 		void Echo();
+ 		void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
++		void MatrixNonzeros(int** pd_nnz,int** po_nnz,int set1enum,int set2enum);
+ 		void Solve(void);
+ 		void OutputResults(void);
+ 		void SetStaticComm();
Index: /issm/oecreview/Archive/13393-13976/ISSM-13881-13882.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13881-13882.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13881-13882.diff	(revision 13980)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/src/android/issm-android-inputfiles/test102.petsc
+===================================================================
+--- ../trunk-jpl/src/android/issm-android-inputfiles/test102.petsc	(revision 13881)
++++ ../trunk-jpl/src/android/issm-android-inputfiles/test102.petsc	(revision 13882)
+@@ -1,19 +1,17 @@
+ %Petsc options file: test102.petsc written from Matlab solver array
+ 
+ +NoneAnalysis
+--mat_type aij
+--ksp_type gmres
+--pc_type asm
+--sub_pc_type ilu
+--pc_asm_overlap 5
+--ksp_max_it 100
+--ksp_rtol 1e-15
++-mat_type mpiaij
++-ksp_type preonly
++-pc_type lu
++-pc_factor_mat_solver_package mumps
++-mat_mumps_icntl_14 120
++-pc_factor_shift_positive_definite true
+ 
+ +DiagnosticVertAnalysis
+--mat_type aij
+--ksp_type gmres
+--pc_type asm
+--sub_pc_type ilu
+--pc_asm_overlap 5
+--ksp_max_it 100
+--ksp_rtol 1e-15
++-mat_type mpiaij
++-ksp_type preonly
++-pc_type lu
++-pc_factor_mat_solver_package mumps
++-mat_mumps_icntl_14 120
++-pc_factor_shift_positive_definite true
+Index: ../trunk-jpl/src/android/issm-android-inputfiles/test102.bin
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13882-13883.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13882-13883.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13882-13883.diff	(revision 13980)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/etc/environment.sh
+===================================================================
+--- ../trunk-jpl/etc/environment.sh	(revision 13882)
++++ ../trunk-jpl/etc/environment.sh	(revision 13883)
+@@ -193,10 +193,10 @@
+ 
+ export ANDROID_NDK_DIR="$ANDROID_DIR/android-ndk/install"
+ pathappend "$ANDROID_NDK_DIR/"
++pathappend "$ANDROID_NDK_DIR/arm-linux-android-install/bin/"
+ 
+ export ANDROID_SDK_DIR="$ANDROID_DIR/android-sdk/install"
+ pathappend "$ANDROID_SDK_DIR/"
+-pathappend "$ANDROID_DIR/arm-linux-android-4.0/bin/"
+ 
+ GSL_DIR="$ISSM_DIR/externalpackages/gsl/install"
+ libpathappend "$GSL_DIR/lib"
Index: /issm/oecreview/Archive/13393-13976/ISSM-13883-13884.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13883-13884.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13883-13884.diff	(revision 13980)
@@ -0,0 +1,11 @@
+Index: ../trunk-jpl/externalpackages/android/android-ndk/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/android/android-ndk/install.sh	(revision 13883)
++++ ../trunk-jpl/externalpackages/android/android-ndk/install.sh	(revision 13884)
+@@ -27,5 +27,5 @@
+ # Create Standalone Development Directory
+ # Note: API-14 corresponds to Android 4.0.
+ if [[ $step == "2" || $step == "0" ]]; then
+-    $ANDROID_NDK_DIR/build/tools/make-standalone-toolchain.sh --platform=android-14 --install-dir=$ANDROID_DIR/arm-linux-android-4.0
++    $ANDROID_DIR/android-ndk/install/build/tools/make-standalone-toolchain.sh --platform=android-14 --install-dir=$ANDROID_DIR/android-ndk/install/arm-linux-android-install
+ fi
Index: /issm/oecreview/Archive/13393-13976/ISSM-13884-13885.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13884-13885.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13884-13885.diff	(revision 13980)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/etc/environment.sh
+===================================================================
+--- ../trunk-jpl/etc/environment.sh	(revision 13884)
++++ ../trunk-jpl/etc/environment.sh	(revision 13885)
+@@ -192,8 +192,7 @@
+ export ANDROID_DIR="$ISSM_DIR/externalpackages/android"
+ 
+ export ANDROID_NDK_DIR="$ANDROID_DIR/android-ndk/install"
+-pathappend "$ANDROID_NDK_DIR/"
+-pathappend "$ANDROID_NDK_DIR/arm-linux-android-install/bin/"
++pathappend "$ANDROID_NDK_DIR/arm-linux-android-install/bin"
+ 
+ export ANDROID_SDK_DIR="$ANDROID_DIR/android-sdk/install"
+ pathappend "$ANDROID_SDK_DIR/"
Index: /issm/oecreview/Archive/13393-13976/ISSM-13885-13886.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13885-13886.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13885-13886.diff	(revision 13980)
@@ -0,0 +1,84 @@
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 13885)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 13886)
+@@ -34,6 +34,7 @@
+ 		virtual void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff)=0;
+ 		virtual void   GetSolutionFromInputs(Vector<IssmDouble>* solution)=0;
+ 		virtual int    GetNodeIndex(Node* node)=0;
++		virtual int    GetNumberOfNodes(void)=0;
+ 		virtual int    Sid()=0;
+ 		virtual bool   IsFloating()=0; 
+ 		virtual bool   IsNodeOnShelf()=0; 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13885)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13886)
+@@ -1137,6 +1137,19 @@
+ 	_error_("Node provided not found among element nodes");
+ }
+ /*}}}*/
++/*FUNCTION Tria::GetNumberOfNodes{{{*/
++int Tria::GetNumberOfNodes(void){
++
++	switch(this->element_type){
++		case P1Enum:
++			return 3;
++		case P1DGEnum:
++			return 3;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++}
++/*}}}*/
+ /*FUNCTION Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype) {{{*/
+ void Tria::GetInputListOnVertices(IssmDouble* pvalue,int enumtype){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13885)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13886)
+@@ -81,6 +81,7 @@
+ 		void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
+ 		void   Delta18oParameterization(void);
+ 		int    GetNodeIndex(Node* node);
++		int    GetNumberOfNodes(void);
+ 		int    Sid();
+ 		bool   IsOnBed();
+ 		bool   IsFloating(); 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13885)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13886)
+@@ -890,6 +890,19 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Penta::GetNumberOfNodes{{{*/
++int Penta::GetNumberOfNodes(void){
++
++	switch(this->element_type){
++		case P1Enum:
++			return 6;
++		case P1DGEnum:
++			return 6;
++		default:
++			_error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
++	}
++}
++/*}}}*/
+ /*FUNCTION Penta::GetInputListOnVertices(IssmDouble* pvalue,int enumtype) {{{*/
+ void Penta::GetInputListOnVertices(IssmDouble* pvalue,int enumtype){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13885)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13886)
+@@ -86,6 +86,7 @@
+ 		void   Delta18oParameterization(void);
+ 		void   DeleteResults(void);
+ 		int    GetNodeIndex(Node* node);
++		int    GetNumberOfNodes(void);
+ 		void   GetSolutionFromInputs(Vector<IssmDouble>* solution);
+ 		IssmDouble GetZcoord(GaussPenta* gauss);
+ 		void   GetVectorFromInputs(Vector<IssmDouble>* vector,int name_enum);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13886-13887.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13886-13887.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13886-13887.diff	(revision 13980)
@@ -0,0 +1,47 @@
+Index: ../trunk-jpl/src/c/Container/Elements.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13886)
++++ ../trunk-jpl/src/c/Container/Elements.cpp	(revision 13887)
+@@ -293,6 +293,30 @@
+ 	delete patch;
+ }
+ /*}}}*/
++/*FUNCTION Elements::MaxNumNodes{{{*/
++int Elements::MaxNumNodes(void){
++
++	int max=0;
++	int allmax;
++	int numnodes=0;
++
++	/*Now go through all elements, and get how many nodes they own, unless they are clone nodes: */
++	for(int i=0;i<this->Size();i++){
++
++		Element* element=dynamic_cast<Element*>(this->GetObjectByOffset(i));
++		numnodes=element->GetNumberOfNodes();
++		if(numnodes>max)max=numnodes;
++	}
++
++	/*Grab max of all cpus: */
++	#ifdef _HAVE_MPI_
++	MPI_Allreduce((void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
++	max=allmax;
++	#endif
++
++	return max;
++}
++/*}}}*/
+ /*FUNCTION Elements::NumberOfElements{{{*/
+ int Elements::NumberOfElements(void){
+ 
+Index: ../trunk-jpl/src/c/Container/Elements.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Elements.h	(revision 13886)
++++ ../trunk-jpl/src/c/Container/Elements.h	(revision 13887)
+@@ -26,6 +26,7 @@
+ 		/*numerics*/
+ 		void   Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+ 		void   DeleteResults(void);
++		int    MaxNumNodes(void);
+ 		void   ProcessResultsUnits(void);
+ 		void   SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
+ 		void   ToResults(Results* results,Parameters* parameters);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13887-13888.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13887-13888.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13887-13888.diff	(revision 13980)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13887)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13888)
+@@ -498,7 +498,9 @@
+ 	xDelete<int>(next);
+ 
+ 	/*sum over all cpus*/
++	#ifdef _HAVE_MPI_
+ 	MPI_Allreduce((void*)connectivity_clone,(void*)all_connectivity_clone,numnodes,MPI_INT,MPI_SUM,IssmComm::GetComm());
++	#endif
+ 	xDelete<int>(connectivity_clone);
+ 
+ 	if(set1enum==FsetEnum){
Index: /issm/oecreview/Archive/13393-13976/ISSM-13888-13889.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13888-13889.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13888-13889.diff	(revision 13980)
@@ -0,0 +1,106 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13888)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13889)
+@@ -405,13 +405,13 @@
+ void FemModel::MatrixNonzeros(int** pd_nnz,int** po_nnz,int set1enum,int set2enum){/*{{{*/
+ 
+ 	/*Intermediary*/
+-	int      i,j,k,index,count;
++	int      i,j,k,index,offset,count;
+ 	int      analysis_type,configuration_type;
+-	int      fsize,dim;
+ 	int      d_nz,o_nz;
+-	Element *element = NULL;
+-	int     *head    = NULL;
+-	int     *next    = NULL;
++	Element *element      = NULL;
++	int     *head         = NULL;
++	int     *next         = NULL;
++	int     *count2offset = NULL;
+ 
+ 	/*output*/
+ 	int *d_nnz = NULL;
+@@ -420,35 +420,30 @@
+ 	/*retrive parameters: */
+ 	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	this->parameters->FindParam(&dim,MeshDimensionEnum);
+ 
+ 	/*Get vector size and number of nodes*/
+ 	int numnodes            = nodes->NumberOfNodes(analysis_type);
+ 	int numberofdofspernode = nodes->MaxNumDofs(configuration_type,GsetEnum);
+ 	int m                   = nodes->NumberOfDofsLocal(analysis_type,set1enum);
++	int numnodesperobject   = elements->MaxNumNodes();
+ 
+ 	/*First, we are building chaining vectors so that we know what nodes are
+ 	 * connected to what elements. These vectors are such that:
+ 	 *   for(int i=head[id];i!=-1;i=next[i])
+ 	 * will loop over all the elements that are connected to the node number
+ 	 * id*/
+-	if(dim==2){
+-		head=xNew<int>(numnodes); for(i=0;i<numnodes;i++) head[i]=-1;
+-		next=xNew<int>(elements->Size()*3); /*3 = number of nodes per element*/
+-	}
+-	else if(dim==3){
+-		head=xNew<int>(numnodes); for(i=0;i<numnodes;i++) head[i]=-1;
+-		next=xNew<int>(elements->Size()*6); /*6 = number of nodes per element*/
+-	}
+-	else{
+-		_error_("dim "<<dim<<" not supported yet");
+-	}
++	head         = xNew<int>(numnodes); for(i=0;i<numnodes;i++) head[i]=-1;
++	next         = xNew<int>(elements->Size()*numnodesperobject);
++	count2offset = xNew<int>(elements->Size()*numnodesperobject);
++
+ 	k=0;
+ 	for(i=0;i<elements->Size();i++){
+ 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		for(int j=0;j<3;j++){
+-			int index =dynamic_cast<Tria*>(element)->nodes[j]->sid;//starts at 0 for a given analysis
++		for(int j=0;j<numnodesperobject;j++){
++			index =dynamic_cast<Tria*>(element)->nodes[j]->sid;//starts at 0 for a given analysis
+ 			_assert_(k>=0 && k<numnodes*elements->Size() && index>=0 && index<numnodes);
++
++			count2offset[k]=i;
+ 			next[k]=head[index];
+ 			head[index]=k++;
+ 		}
+@@ -472,16 +467,8 @@
+ 			/*Loop over elements that hold node number i*/
+ 			_assert_(head[node->Sid()]!=-1);
+ 			for(j=head[node->Sid()];j!=-1;j=next[j]){
+-				if(dim==2){
+-					index = (int)(double(j)/3);
+-				}
+-				else if(dim==3){
+-					index = (int)(double(j)/6);
+-				}
+-				else{
+-					_error_("dim "<<dim<<" not supported yet");
+-				}
+-				element=dynamic_cast<Element*>(elements->GetObjectByOffset(index));
++				offset=count2offset[j];
++				element=dynamic_cast<Element*>(elements->GetObjectByOffset(offset));
+ 				element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,set1enum,set2enum);
+ 				if(node->IsClone()){
+ 					connectivity_clone[node->Sid()]+=d_nz+o_nz;
+@@ -494,6 +481,7 @@
+ 		}
+ 	}
+ 	xDelete<bool>(flags);
++	xDelete<int>(count2offset);
+ 	xDelete<int>(head);
+ 	xDelete<int>(next);
+ 
+@@ -514,8 +502,8 @@
+ 					_assert_(count<m);
+ 					d_nnz[count]=numberofdofspernode*(d_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
+ 					o_nnz[count]=numberofdofspernode*(o_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
+-					if(d_nnz[count]>m)   d_nnz[count]=m;
+-					if(o_nnz[count]>fsize-m) o_nnz[count]=fsize-m;
++					//if(d_nnz[count]>m)   d_nnz[count]=m;
++					//if(o_nnz[count]>fsize-m) o_nnz[count]=fsize-m;
+ 					count++;
+ 				}
+ 			}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13889-13890.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13889-13890.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13889-13890.diff	(revision 13980)
@@ -0,0 +1,594 @@
+Index: ../trunk-jpl/src/android/ISSM/.classpath
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/.classpath	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/.classpath	(revision 13890)
+@@ -0,0 +1,8 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<classpath>
++	<classpathentry kind="src" path="src"/>
++	<classpathentry kind="src" path="gen"/>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
++	<classpathentry kind="output" path="bin/classes"/>
++</classpath>
+Index: ../trunk-jpl/src/android/ISSM/jni/issmlib/include/fac.h
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/issmlib/include/fac.h	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/jni/issmlib/include/fac.h	(revision 13890)
+@@ -0,0 +1,5 @@
++class fac
++{
++	public:
++	long factorial(long n);
++};
+Index: ../trunk-jpl/src/android/ISSM/jni/issmlib/Android.mk
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/issmlib/Android.mk	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/jni/issmlib/Android.mk	(revision 13890)
+@@ -0,0 +1,6 @@
++LOCAL_PATH:= $(call my-dir)
++include $(CLEAR_VARS)
++LOCAL_MODULE    := libISSMCore
++LOCAL_SRC_FILES := libISSMCore.a
++LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
++include $(PREBUILT_STATIC_LIBRARY)
+Index: ../trunk-jpl/src/android/ISSM/jni/Main.cpp
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/Main.cpp	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/jni/Main.cpp	(revision 13890)
+@@ -0,0 +1,11 @@
++#include "./issmlib/include/fac.h"
++#include "com_example_issm_FacLib.h"
++#include <cstddef>
++
++JNIEXPORT jlong JNICALL Java_com_example_issm_FacLib_fac(JNIEnv *env, jclass clazz, jlong n)
++{
++	fac *f = new fac();
++	jlong result = (jlong) (f->factorial(n));
++	delete(f);
++	return (jlong) result;
++}
+Index: ../trunk-jpl/src/android/ISSM/jni/Android.mk
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/Android.mk	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/jni/Android.mk	(revision 13890)
+@@ -0,0 +1,19 @@
++LOCAL_PATH:= $(call my-dir)
++my_LOCAL_PATH:=$(LOCAL_PATH)
++
++#include $(LOCAL_PATH)/issmlib\Android.mk
++include $(call all-subdir-makefiles)
++
++
++LOCAL_PATH := $(my_LOCAL_PATH)
++
++include $(CLEAR_VARS)
++LOCAL_PATH := $(my_LOCAL_PATH)
++LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
++LOCAL_CFLAGS := -Wno-psabi
++LOCAL_LDLIBS := -llog -ldl
++LOCAL_MODULE := FacLib
++LOCAL_SRC_FILES := Main.cpp 
++LOCAL_STATIC_LIBRARIES := libISSMCore
++
++include $(BUILD_SHARED_LIBRARY)
+Index: ../trunk-jpl/src/android/ISSM/jni/com_example_issm_FacLib.h
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/com_example_issm_FacLib.h	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/jni/com_example_issm_FacLib.h	(revision 13890)
+@@ -0,0 +1,21 @@
++/* DO NOT EDIT THIS FILE - it is machine generated */
++#include <jni.h>
++/* Header for class com_example_issm_FacLib */
++
++#ifndef _Included_com_example_issm_FacLib
++#define _Included_com_example_issm_FacLib
++#ifdef __cplusplus
++extern "C" {
++#endif
++/*
++ * Class:     com_example_issm_FacLib
++ * Method:    fac
++ * Signature: (J)J
++ */
++JNIEXPORT jlong JNICALL Java_com_example_issm_FacLib_fac
++  (JNIEnv *, jclass, jlong);
++
++#ifdef __cplusplus
++}
++#endif
++#endif
+Index: ../trunk-jpl/src/android/ISSM/project.properties
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/project.properties	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/project.properties	(revision 13890)
+@@ -0,0 +1,14 @@
++# This file is automatically generated by Android Tools.
++# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
++#
++# This file must be checked in Version Control Systems.
++#
++# To customize properties used by the Ant build system edit
++# "ant.properties", and override values to adapt the script to your
++# project structure.
++#
++# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
++#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
++
++# Project target.
++target=android-15
+Index: ../trunk-jpl/src/android/ISSM/.project
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/.project	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/.project	(revision 13890)
+@@ -0,0 +1,33 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<projectDescription>
++	<name>ISSM</name>
++	<comment></comment>
++	<projects>
++	</projects>
++	<buildSpec>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>org.eclipse.jdt.core.javabuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++	</buildSpec>
++	<natures>
++		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
++		<nature>org.eclipse.jdt.core.javanature</nature>
++	</natures>
++</projectDescription>
+Index: ../trunk-jpl/src/android/ISSM/proguard-project.txt
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/proguard-project.txt	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/proguard-project.txt	(revision 13890)
+@@ -0,0 +1,20 @@
++# To enable ProGuard in your project, edit project.properties
++# to define the proguard.config property as described in that file.
++#
++# Add project specific ProGuard rules here.
++# By default, the flags in this file are appended to flags specified
++# in ${sdk.dir}/tools/proguard/proguard-android.txt
++# You can edit the include path and order by changing the ProGuard
++# include property in project.properties.
++#
++# For more details, see
++#   http://developer.android.com/guide/developing/tools/proguard.html
++
++# Add any project specific keep options here:
++
++# If your project uses WebView with JS, uncomment the following
++# and specify the fully qualified class name to the JavaScript interface
++# class:
++#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
++#   public *;
++#}
+Index: ../trunk-jpl/src/android/ISSM/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/AndroidManifest.xml	(revision 13890)
+@@ -0,0 +1,25 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.issm"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="15"
++        android:targetSdkVersion="15" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".ISSM"
++            android:label="@string/title_activity_issm" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM/src/com/example/issm/FacLib.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/src/com/example/issm/FacLib.java	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/src/com/example/issm/FacLib.java	(revision 13890)
+@@ -0,0 +1,13 @@
++package com.example.issm;
++
++public class FacLib
++{
++	public static native long fac(long n);
++	static {
++        System.loadLibrary("FacLib");
++    }
++	public static long facIterative(long n)
++	{
++		return fac(n);
++	}
++}
+
+Property changes on: ../trunk-jpl/src/android/ISSM/src/com/example/issm/FacLib.java
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/src/android/ISSM/src/com/example/issm/ISSM.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/src/com/example/issm/ISSM.java	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/src/com/example/issm/ISSM.java	(revision 13890)
+@@ -0,0 +1,39 @@
++package com.example.issm;
++
++import android.os.Bundle;
++import android.app.Activity;
++import android.text.TextUtils;
++import android.view.Menu;
++import android.view.View;
++import android.view.View.OnClickListener;
++import android.widget.Button;
++import android.widget.EditText;
++import android.widget.TextView;
++
++
++public class ISSM extends Activity implements OnClickListener {
++	private EditText input;
++	private TextView output;
++    @Override
++    public void onCreate(Bundle savedInstanceState) {
++        super.onCreate(savedInstanceState);
++        setContentView(R.layout.activity_issm);
++        this.input  = (EditText) super.findViewById(R.id.input);
++        this.output  = (TextView) super.findViewById(R.id.output);
++        Button button = (Button) super.findViewById(R.id.button1);
++        button.setOnClickListener(this);
++        
++    }
++    
++	public void onClick(View view) 
++	{
++		// TODO Auto-generated method stub
++		String input = this.input.getText().toString();
++		if(TextUtils.isEmpty(input))
++		{
++			return;
++		}
++		long result = FacLib.facIterative(Long.parseLong(input));
++		this.output.setText("Result = " + result + "\n");
++	}
++}
+Index: ../trunk-jpl/src/android/ISSM/gen/com/example/issm/R.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/gen/com/example/issm/R.java	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/gen/com/example/issm/R.java	(revision 13890)
+@@ -0,0 +1,43 @@
++/* AUTO-GENERATED FILE.  DO NOT MODIFY.
++ *
++ * This class was automatically generated by the
++ * aapt tool from the resource data it found.  It
++ * should not be modified by hand.
++ */
++
++package com.example.issm;
++
++public final class R {
++    public static final class attr {
++    }
++    public static final class dimen {
++        public static final int padding_large=0x7f040002;
++        public static final int padding_medium=0x7f040001;
++        public static final int padding_small=0x7f040000;
++    }
++    public static final class drawable {
++        public static final int ic_action_search=0x7f020000;
++        public static final int ic_launcher=0x7f020001;
++    }
++    public static final class id {
++        public static final int button1=0x7f080001;
++        public static final int input=0x7f080000;
++        public static final int menu_settings=0x7f080003;
++        public static final int output=0x7f080002;
++    }
++    public static final class layout {
++        public static final int activity_issm=0x7f030000;
++    }
++    public static final class menu {
++        public static final int activity_issm=0x7f070000;
++    }
++    public static final class string {
++        public static final int app_name=0x7f050000;
++        public static final int hello_world=0x7f050001;
++        public static final int menu_settings=0x7f050002;
++        public static final int title_activity_issm=0x7f050003;
++    }
++    public static final class style {
++        public static final int AppTheme=0x7f060000;
++    }
++}
+Index: ../trunk-jpl/src/android/ISSM/gen/com/example/issm/BuildConfig.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/gen/com/example/issm/BuildConfig.java	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/gen/com/example/issm/BuildConfig.java	(revision 13890)
+@@ -0,0 +1,6 @@
++/** Automatically generated file. DO NOT MODIFY */
++package com.example.issm;
++
++public final class BuildConfig {
++    public final static boolean DEBUG = true;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM/res/values/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/values/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/res/values/styles.xml	(revision 13890)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM/res/values/strings.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/values/strings.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/res/values/strings.xml	(revision 13890)
+@@ -0,0 +1,8 @@
++<resources>
++
++    <string name="app_name">ISSM</string>
++    <string name="hello_world">Hello world!</string>
++    <string name="menu_settings">Settings</string>
++    <string name="title_activity_issm">ISSM</string>
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM/res/values/dimens.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/values/dimens.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/res/values/dimens.xml	(revision 13890)
+@@ -0,0 +1,7 @@
++<resources>
++
++    <dimen name="padding_small">8dp</dimen>
++    <dimen name="padding_medium">8dp</dimen>
++    <dimen name="padding_large">16dp</dimen>
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-hdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/drawable-hdpi/ic_launcher.png	(revision 13889)
++++ ../trunk-jpl/src/android/ISSM/res/drawable-hdpi/ic_launcher.png	(revision 13890)
+
+Property changes on: ../trunk-jpl/src/android/ISSM/res/drawable-hdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-hdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/drawable-hdpi/ic_action_search.png	(revision 13889)
++++ ../trunk-jpl/src/android/ISSM/res/drawable-hdpi/ic_action_search.png	(revision 13890)
+
+Property changes on: ../trunk-jpl/src/android/ISSM/res/drawable-hdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/menu/activity_issm.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/menu/activity_issm.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/res/menu/activity_issm.xml	(revision 13890)
+@@ -0,0 +1,6 @@
++<menu xmlns:android="http://schemas.android.com/apk/res/android">
++    <item android:id="@+id/menu_settings"
++        android:title="@string/menu_settings"
++        android:orderInCategory="100"
++        android:showAsAction="never" />
++</menu>
+Index: ../trunk-jpl/src/android/ISSM/res/values-v11/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/values-v11/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/res/values-v11/styles.xml	(revision 13890)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-ldpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/drawable-ldpi/ic_launcher.png	(revision 13889)
++++ ../trunk-jpl/src/android/ISSM/res/drawable-ldpi/ic_launcher.png	(revision 13890)
+
+Property changes on: ../trunk-jpl/src/android/ISSM/res/drawable-ldpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/values-large/dimens.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/values-large/dimens.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/res/values-large/dimens.xml	(revision 13890)
+@@ -0,0 +1,7 @@
++<resources>
++
++    <dimen name="padding_small">8dp</dimen>
++    <dimen name="padding_medium">16dp</dimen>
++    <dimen name="padding_large">16dp</dimen>
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM/res/values-v14/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/values-v14/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/res/values-v14/styles.xml	(revision 13890)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-mdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/drawable-mdpi/ic_launcher.png	(revision 13889)
++++ ../trunk-jpl/src/android/ISSM/res/drawable-mdpi/ic_launcher.png	(revision 13890)
+
+Property changes on: ../trunk-jpl/src/android/ISSM/res/drawable-mdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-mdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/drawable-mdpi/ic_action_search.png	(revision 13889)
++++ ../trunk-jpl/src/android/ISSM/res/drawable-mdpi/ic_action_search.png	(revision 13890)
+
+Property changes on: ../trunk-jpl/src/android/ISSM/res/drawable-mdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/drawable-xhdpi/ic_launcher.png	(revision 13889)
++++ ../trunk-jpl/src/android/ISSM/res/drawable-xhdpi/ic_launcher.png	(revision 13890)
+
+Property changes on: ../trunk-jpl/src/android/ISSM/res/drawable-xhdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/drawable-xhdpi/ic_action_search.png	(revision 13889)
++++ ../trunk-jpl/src/android/ISSM/res/drawable-xhdpi/ic_action_search.png	(revision 13890)
+
+Property changes on: ../trunk-jpl/src/android/ISSM/res/drawable-xhdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/res/layout/activity_issm.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/res/layout/activity_issm.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/res/layout/activity_issm.xml	(revision 13890)
+@@ -0,0 +1,33 @@
++<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
++    xmlns:tools="http://schemas.android.com/tools"
++    android:layout_width="match_parent"
++    android:layout_height="match_parent" >
++
++    <EditText
++        android:id="@+id/input"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_alignParentLeft="true"
++        android:ems="10"
++        android:inputType="number" />
++
++    <Button
++        android:id="@+id/button1"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_alignRight="@+id/input"
++        android:layout_below="@+id/input"
++        android:layout_marginRight="46dp"
++        android:layout_marginTop="23dp"
++        android:text="calculate" />
++
++    <TextView
++        android:id="@+id/output"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_alignParentLeft="true"
++        android:layout_below="@+id/button1"
++        android:layout_marginTop="39dp"
++        android:textSize="20sp" />
++
++</RelativeLayout>
+Index: ../trunk-jpl/src/android/ISSM/ic_launcher-web.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/ic_launcher-web.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/ic_launcher-web.png	(revision 13889)
++++ ../trunk-jpl/src/android/ISSM/ic_launcher-web.png	(revision 13890)
+
+Property changes on: ../trunk-jpl/src/android/ISSM/ic_launcher-web.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/obj/local/armeabi/objs/FacLib/Main.o.d
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/obj/local/armeabi/objs/FacLib/Main.o.d	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/obj/local/armeabi/objs/FacLib/Main.o.d	(revision 13890)
+@@ -0,0 +1,14 @@
++/Users/larour/issm-uci/trunk-jpl/src/android/ISSM/obj/local/armeabi/objs/FacLib/Main.o: \
++ /Users/larour/issm-uci/trunk-jpl/src/android/ISSM/jni/Main.cpp \
++ /Users/larour/issm-uci/trunk-jpl/src/android/ISSM/jni/./issmlib/include/fac.h \
++ /Users/larour/issm-uci/trunk-jpl/src/android/ISSM/jni/com_example_issm_FacLib.h \
++ /Users/larour/issm-uci/trunk-jpl/externalpackages/android/android-ndk/install/platforms/android-14/arch-arm/usr/include/jni.h \
++ /Users/larour/issm-uci/trunk-jpl/externalpackages/android/android-ndk/install/sources/cxx-stl/system/include/cstddef
++
++/Users/larour/issm-uci/trunk-jpl/src/android/ISSM/jni/./issmlib/include/fac.h:
++
++/Users/larour/issm-uci/trunk-jpl/src/android/ISSM/jni/com_example_issm_FacLib.h:
++
++/Users/larour/issm-uci/trunk-jpl/externalpackages/android/android-ndk/install/platforms/android-14/arch-arm/usr/include/jni.h:
++
++/Users/larour/issm-uci/trunk-jpl/externalpackages/android/android-ndk/install/sources/cxx-stl/system/include/cstddef:
Index: /issm/oecreview/Archive/13393-13976/ISSM-13890-13891.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13890-13891.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13890-13891.diff	(revision 13980)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/src/android/ISSM/bin/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/bin/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/bin/AndroidManifest.xml	(revision 13891)
+@@ -0,0 +1,25 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.issm"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="15"
++        android:targetSdkVersion="15" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".ISSM"
++            android:label="@string/title_activity_issm" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM/bin
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/bin	(revision 13890)
++++ ../trunk-jpl/src/android/ISSM/bin	(revision 13891)
+
+Property changes on: ../trunk-jpl/src/android/ISSM/bin
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,6 ##
++ISSM.apk
++resources.ap_
++res
++jarlist.cache
++classes.dex
++classes
+Index: ../trunk-jpl/src/android/ISSM/libs
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/libs	(revision 13890)
++++ ../trunk-jpl/src/android/ISSM/libs	(revision 13891)
+
+Property changes on: ../trunk-jpl/src/android/ISSM/libs
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++armeabi
Index: /issm/oecreview/Archive/13393-13976/ISSM-13891-13892.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13891-13892.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13891-13892.diff	(revision 13980)
@@ -0,0 +1,81 @@
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Element.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 13891)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 13892)
+@@ -35,6 +35,8 @@
+ 		virtual void   GetSolutionFromInputs(Vector<IssmDouble>* solution)=0;
+ 		virtual int    GetNodeIndex(Node* node)=0;
+ 		virtual int    GetNumberOfNodes(void)=0;
++		virtual void   GetNodesSidList(int* sidlist)=0;
++
+ 		virtual int    Sid()=0;
+ 		virtual bool   IsFloating()=0; 
+ 		virtual bool   IsNodeOnShelf()=0; 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13891)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13892)
+@@ -1137,6 +1137,17 @@
+ 	_error_("Node provided not found among element nodes");
+ }
+ /*}}}*/
++/*FUNCTION Tria::GetNodesSidList{{{*/
++void Tria::GetNodesSidList(int* sidlist){
++
++	_assert_(sidlist);
++	_assert_(nodes);
++
++	for(int i=0;i<NUMVERTICES;i++){
++		sidlist[i]=nodes[i]->Sid();
++	}
++}
++/*}}}*/
+ /*FUNCTION Tria::GetNumberOfNodes{{{*/
+ int Tria::GetNumberOfNodes(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13891)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 13892)
+@@ -82,6 +82,7 @@
+ 		void   Delta18oParameterization(void);
+ 		int    GetNodeIndex(Node* node);
+ 		int    GetNumberOfNodes(void);
++		void   GetNodesSidList(int* sidlist);
+ 		int    Sid();
+ 		bool   IsOnBed();
+ 		bool   IsFloating(); 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13891)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13892)
+@@ -890,6 +890,17 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Penta::GetNodesSidList{{{*/
++void Penta::GetNodesSidList(int* sidlist){
++
++	_assert_(sidlist);
++	_assert_(nodes);
++
++	for(int i=0;i<NUMVERTICES;i++){
++		sidlist[i]=nodes[i]->Sid();
++	}
++}
++/*}}}*/
+ /*FUNCTION Penta::GetNumberOfNodes{{{*/
+ int Penta::GetNumberOfNodes(void){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13891)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13892)
+@@ -86,6 +86,7 @@
+ 		void   Delta18oParameterization(void);
+ 		void   DeleteResults(void);
+ 		int    GetNodeIndex(Node* node);
++		void   GetNodesSidList(int* sidlist);
+ 		int    GetNumberOfNodes(void);
+ 		void   GetSolutionFromInputs(Vector<IssmDouble>* solution);
+ 		IssmDouble GetZcoord(GaussPenta* gauss);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13892-13893.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13892-13893.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13892-13893.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13892)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13893)
+@@ -46,6 +46,7 @@
+ 	MatSetSizes(this->matrix,m,n,M,N);
+ 	MatSetFromOptions(this->matrix);
+ 	MatMPIAIJSetPreallocation(this->matrix,0,d_nnz,0,o_nnz);
++	//MatSetOption(this->matrix,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_FALSE);
+ 
+ }
+ /*}}}*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13893-13894.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13893-13894.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13893-13894.diff	(revision 13980)
@@ -0,0 +1,81 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13893)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13894)
+@@ -352,6 +352,7 @@
+ 	Vector<IssmDouble> *pf   = NULL;
+ 	Vector<IssmDouble> *df   = NULL;
+ 
++	//bool oldalloc=false;
+ 	bool oldalloc=true;
+ 
+ 	/*retrieve parameters: */
+@@ -412,6 +413,7 @@
+ 	int     *head         = NULL;
+ 	int     *next         = NULL;
+ 	int     *count2offset = NULL;
++	int     * sidlist     = NULL;
+ 
+ 	/*output*/
+ 	int *d_nnz = NULL;
+@@ -424,6 +426,7 @@
+ 	/*Get vector size and number of nodes*/
+ 	int numnodes            = nodes->NumberOfNodes(analysis_type);
+ 	int numberofdofspernode = nodes->MaxNumDofs(configuration_type,GsetEnum);
++	int N                   = nodes->NumberOfDofs(analysis_type,set2enum);
+ 	int m                   = nodes->NumberOfDofsLocal(analysis_type,set1enum);
+ 	int numnodesperobject   = elements->MaxNumNodes();
+ 
+@@ -438,15 +441,21 @@
+ 
+ 	k=0;
+ 	for(i=0;i<elements->Size();i++){
+-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		for(int j=0;j<numnodesperobject;j++){
+-			index =dynamic_cast<Tria*>(element)->nodes[j]->sid;//starts at 0 for a given analysis
+-			_assert_(k>=0 && k<numnodes*elements->Size() && index>=0 && index<numnodes);
++		element = dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++		sidlist = xNew<int>(element->GetNumberOfNodes());
++		element->GetNodesSidList(sidlist);
+ 
++		for(j=0;j<element->GetNumberOfNodes();j++){
++			index = sidlist[j];
++			_assert_(index>=0 && index<numnodes);
++
+ 			count2offset[k]=i;
+ 			next[k]=head[index];
+ 			head[index]=k++;
+ 		}
++		for(j=0;j<numnodesperobject-element->GetNumberOfNodes();j++) k++;
++
++		xDelete<int>(sidlist);
+ 	}
+ 
+ 	/*OK now count number of dofs and flag each nodes for each node i*/
+@@ -502,8 +511,8 @@
+ 					_assert_(count<m);
+ 					d_nnz[count]=numberofdofspernode*(d_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
+ 					o_nnz[count]=numberofdofspernode*(o_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
+-					//if(d_nnz[count]>m)   d_nnz[count]=m;
+-					//if(o_nnz[count]>fsize-m) o_nnz[count]=fsize-m;
++					if(d_nnz[count]>m)   d_nnz[count]=m;
++					if(o_nnz[count]>N-m) o_nnz[count]=N-m;
+ 					count++;
+ 				}
+ 			}
+@@ -718,7 +727,6 @@
+ 	Vector<IssmDouble> *df   = NULL;
+ 	IssmDouble          kmax;
+ 
+-
+ 	/*Display message*/
+ 	if(VerboseModule()) _pprintLine_("   Generating matrices");
+ 
+@@ -773,7 +781,6 @@
+ 	pf->Assemble();
+ 	//Kff->AllocationInfo();
+ 	//Kfs->AllocationInfo();
+-	//_error_("STOP");
+ 
+ 	/*Assign output pointers: */
+ 	if(pKff) *pKff=Kff;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13894-13895.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13894-13895.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13894-13895.diff	(revision 13980)
@@ -0,0 +1,19 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13894)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13895)
+@@ -91,10 +91,14 @@
+ 	int    d_nz,o_nz;
+ 
+ 	#if _PETSC_MAJOR_ >= 3 
++	#ifdef _HAVE_PETSCDEV_
+ 	const MatType type;
+ 	#else
+ 	MatType type;
+ 	#endif
++	#else
++	MatType type;
++	#endif
+ 
+ 	/*Determine local sizes: */
+ 	m=DetermineLocalSize(M,comm);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13895-13896.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13895-13896.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13895-13896.diff	(revision 13980)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/android/ISSM/jni/issmlib/libISSMCore.a
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM/jni/issmlib/libISSMCore.a
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/issmlib/libISSMCore.a	(revision 13895)
++++ ../trunk-jpl/src/android/ISSM/jni/issmlib/libISSMCore.a	(revision 13896)
+
+Property changes on: ../trunk-jpl/src/android/ISSM/jni/issmlib/libISSMCore.a
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13896-13897.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13896-13897.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13896-13897.diff	(revision 13980)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13896)
++++ ../trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp	(revision 13897)
+@@ -92,9 +92,9 @@
+ 
+ 	#if _PETSC_MAJOR_ >= 3 
+ 	#ifdef _HAVE_PETSCDEV_
++	MatType type;
++	#else
+ 	const MatType type;
+-	#else
+-	MatType type;
+ 	#endif
+ 	#else
+ 	MatType type;
Index: /issm/oecreview/Archive/13393-13976/ISSM-13897-13898.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13897-13898.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13897-13898.diff	(revision 13980)
@@ -0,0 +1,51 @@
+Index: ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java	(revision 13897)
++++ ../trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java	(revision 13898)
+@@ -94,15 +94,25 @@
+     // number of coordinates per vertex in this array
+     static final int COORDS_PER_VERTEX = 3;
+     static float triangleCoords[] = { // in counterclockwise order:
+-         0.0f,  0.622008459f, 0.0f,   // top
+-        -0.5f, -0.311004243f, 0.0f,   // bottom left
+-         0.5f, -0.311004243f, 0.0f    // bottom right
++         0.0f,  0.6f, 0.0f,   // top
++        -0.5f, -0.3f, 0.0f,   // bottom left
++         0.5f, -0.3f, 0.0f,
++         -0.5f, -0.3f, 0.0f,
++         0.0f, -1.2f, 0.0f,
++         0.5f,  -0.3f, 0.0f
++         
++         
++         
++
++
++         // bottom right
+     };
+     private final int vertexCount = triangleCoords.length / COORDS_PER_VERTEX;
+     private final int vertexStride = COORDS_PER_VERTEX * 4; // bytes per vertex
+ 
+     // Set color with red, green, blue and alpha (opacity) values
+-    float color[] = { 0.0f, 0.0f, 1.0f, 1.0f };
++    float color[] = { 0.0f, 0.0f, 1.0f, 1.0f}; //blue
++    float color1[] = {1.0f, 0.0f, 0.0f, 1.0f};
+ 
+     public Triangle() {
+         // initialize vertex byte buffer for shape coordinates
+@@ -151,10 +161,14 @@
+         mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor");
+ 
+         // Set color for drawing the triangle
+-        GLES20.glUniform4fv(mColorHandle, 1, color, 0);
+-
++        GLES20.glUniform4fv(mColorHandle, 0, color, 0);
+         // Draw the triangle
++        GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 1, vertexCount);
++        
++        
++        GLES20.glUniform4fv(mColorHandle, 0, color1, 0);
+         GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);
++        
+ 
+         // Disable vertex array
+         GLES20.glDisableVertexAttribArray(mPositionHandle);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13898-13899.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13898-13899.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13898-13899.diff	(revision 13980)
@@ -0,0 +1,73 @@
+Index: ../trunk-jpl/src/m/solve/WriteData.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/WriteData.py	(revision 13898)
++++ ../trunk-jpl/src/m/solve/WriteData.py	(revision 13899)
+@@ -16,7 +16,7 @@
+ 
+ 	#process options
+ 	#  the import above the function level doesn't work?
+-	from pairoptions import *
++	from pairoptions import pairoptions
+ 	options=pairoptions(*args)
+ 
+ 	#Get data properties
+@@ -100,8 +100,10 @@
+ 
+ 	elif strcmpi(format,'BooleanMat'):    # {{{
+ 
+-		if not isinstance(data,numpy.ndarray):
++		if   isinstance(data,bool):
+ 			data=numpy.array([data])
++		elif isinstance(data,(list,tuple)):
++			data=numpy.array(data).reshape(-1,1)
+ 		if len(data.shape) == 1:
+ 			if numpy.size(data):
+ 				data=data.reshape(numpy.size(data),1)
+@@ -131,8 +133,10 @@
+ 
+ 	elif strcmpi(format,'IntMat'):    # {{{
+ 
+-		if not isinstance(data,numpy.ndarray):
++		if   isinstance(data,(int,long)):
+ 			data=numpy.array([data])
++		elif isinstance(data,(list,tuple)):
++			data=numpy.array(data).reshape(-1,1)
+ 		if len(data.shape) == 1:
+ 			if numpy.size(data):
+ 				data=data.reshape(numpy.size(data),1)
+@@ -162,8 +166,10 @@
+ 
+ 	elif strcmpi(format,'DoubleMat'):    # {{{
+ 
+-		if not isinstance(data,numpy.ndarray):
++		if   isinstance(data,(bool,int,long,float)):
+ 			data=numpy.array([data])
++		elif isinstance(data,(list,tuple)):
++			data=numpy.array(data).reshape(-1,1)
+ 		if len(data.shape) == 1:
+ 			if numpy.size(data):
+ 				data=data.reshape(numpy.size(data),1)
+@@ -196,8 +202,10 @@
+ 		#first get length of record
+ 		recordlength=4+4    #number of records + code
+ 		for matrix in data:
+-			if not isinstance(matrix,numpy.ndarray):
++			if   isinstance(matrix,(bool,int,long,float)):
+ 				matrix=numpy.array([matrix])
++			elif isinstance(matrix,(list,tuple)):
++				matrix=numpy.array(matrix).reshape(-1,1)
+ 			if len(matrix.shape) == 1:
+ 				if numpy.size(matrix):
+ 					matrix=matrix.reshape(numpy.size(matrix),1)
+@@ -218,8 +226,10 @@
+ 
+ 		#write each matrix: 
+ 		for matrix in data:
+-			if not isinstance(matrix,numpy.ndarray):
++			if   isinstance(matrix,(bool,int,long,float)):
+ 				matrix=numpy.array([matrix])
++			elif isinstance(matrix,(list,tuple)):
++				matrix=numpy.array(matrix).reshape(-1,1)
+ 			if len(matrix.shape) == 1:
+ 				matrix=matrix.reshape(numpy.size(matrix),1)
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13899-13900.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13899-13900.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13899-13900.diff	(revision 13980)
@@ -0,0 +1,696 @@
+Index: ../trunk-jpl/test/NightlyRun/test3005.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.py	(revision 13899)
++++ ../trunk-jpl/test/NightlyRun/test3005.py	(revision 13900)
+@@ -1,24 +1,21 @@
+-from MatlabFuncs import *
+ from model import *
+-from EnumDefinitions import *
+-import numpy
+ from triangle import *
+ from setmask import *
+ from parameterize import *
+ from setflowequation import *
++from EnumDefinitions import *
+ from solve import *
++from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Square.exp',150000)
++md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.autodiff.isautodiff=true
++md.autodiff.isautodiff=True
+ md=solve(md,PrognosticSolutionEnum())
+ 
+-
+-# Fields and tolerances to track changes
+-
++#Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+Index: ../trunk-jpl/test/NightlyRun/test3019.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3019.py	(revision 13900)
+@@ -0,0 +1,46 @@
++import numpy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from independent import *
++from dependent import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++#test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup.
++md=triangle(model(),'../Exp/Square.exp',100000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++
++md.autodiff.isautodiff=True
++md.verbose.autodiff=True
++
++#first run scalar reverse mode: 
++md.autodiff.independents=[independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices)]
++md.autodiff.dependents=[dependent('name','MaxVel','type','scalar','fos_reverse_index',1)]
++md.autodiff.driver='fos_reverse'
++
++md=solve(md,TransientSolutionEnum())
++
++#recover jacobian: 
++jac_reverse=md.results['TransientSolution'][1]['AutodiffJacobian']
++
++#now run vectorial forward mode
++md.autodiff.independents=[independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',numpy.arange(0,md.mesh.numberofvertices))]
++md.autodiff.dependents=[dependent('name','MaxVel','type','scalar')]
++md.autodiff.driver='fov_forward'
++
++md=solve(md,TransientSolutionEnum())
++
++#recover jacobian: 
++jac_forward=md.results['TransientSolution'][1]['AutodiffJacobian']
++
++#Fields and tolerances to track changes
++field_names     =['Jac Forward','Jac Reverse','Jac Forward - Reverse']
++field_tolerances=[1e-13,1e-13,1e-13]
++field_values=[jac_forward,jac_reverse,jac_forward-jac_reverse]
+Index: ../trunk-jpl/test/NightlyRun/test3019.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.m	(revision 13899)
++++ ../trunk-jpl/test/NightlyRun/test3019.m	(revision 13900)
+@@ -18,7 +18,6 @@
+ %recover jacobian: 
+ jac_reverse=md.results.TransientSolution(1).AutodiffJacobian;
+ 
+-
+ %now run vectorial forward mode
+ md.autodiff.independents={independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',(1:md.mesh.numberofvertices)')};
+ md.autodiff.dependents={dependent('name','MaxVel','type','scalar')};
+@@ -29,7 +28,6 @@
+ %recover jacobian: 
+ jac_forward=md.results.TransientSolution(1).AutodiffJacobian;
+ 
+-
+ %Fields and tolerances to track changes
+ field_names     ={'Jac Forward','Jac Reverse','Jac Forward - Reverse'};
+ field_tolerances={1e-13,1e-13,1e-13};
+Index: ../trunk-jpl/test/NightlyRun/test3020.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.m	(revision 13899)
++++ ../trunk-jpl/test/NightlyRun/test3020.m	(revision 13900)
+@@ -7,9 +7,9 @@
+ md=parameterize(md,'../Par/SquareShelfConstrained.par');
+ md=setflowequation(md,'macayeal','all');
+ md.cluster=generic('name',oshostname(),'np',3);
+-md.transient.requested_outputs=[IceVolumeEnum();MaxVelEnum];
++md.transient.requested_outputs=[IceVolumeEnum();MaxVelEnum()];
+ md.verbose=verbose('autodiff',true);
+-md.diagnostic.restol=.000001;
++md.diagnostic.restol=0.000001;
+ 
+ %setup autodiff parameters
+ index=1; %this is the scalar component we are checking against
+@@ -23,11 +23,11 @@
+ 	};
+ md.autodiff.driver='fos_forward';
+ 
+-%parameters for the step-wise devivative
+-delta=.00001;
++%parameters for the step-wise derivative
++delta=0.00001;
+ h1=md.geometry.thickness(index);
+-h0=h1*(1-delta);
+-h2=h1*(1+delta);
++h0=h1*(1.-delta);
++h2=h1*(1.+delta);
+ deltaH=(h2-h0);
+ 
+ %save model:
+@@ -62,7 +62,6 @@
+ dVdh_an=(V2-V0)/deltaH;
+ dMaxVdh_an=(MaxV2-MaxV0)/deltaH;
+ 
+-
+ %evaluate derivative using ADOLC 
+ md=md2;
+ md.autodiff.isautodiff=true;
+@@ -79,7 +78,6 @@
+ disp(sprintf('dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dVdh_an,dVdh_ad));
+ disp(sprintf('dMaxV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n',dMaxVdh_an,dMaxVdh_ad));
+ 
+-
+ %Fields and tolerances to track changes
+ field_names     ={'dV/dh-dV/dh0','dMaxV/dh-dMaxV/dh0'};
+ field_tolerances={1e-13,1e-13};
+Index: ../trunk-jpl/test/NightlyRun/test3006.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.py	(revision 13899)
++++ ../trunk-jpl/test/NightlyRun/test3006.py	(revision 13900)
+@@ -1,15 +1,14 @@
+-from MatlabFuncs import *
+ from model import *
+-from EnumDefinitions import *
+-import numpy
+ from triangle import *
+ from meshconvert import *
+ from setmask import *
+ from parameterize import *
+ from setflowequation import *
++from EnumDefinitions import *
+ from solve import *
++from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Square.exp',150000)
++md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=meshconvert(md)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+@@ -17,12 +16,10 @@
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.prognostic.stabilization=3
+ md.prognostic.spcthickness=md.geometry.thickness
+-md.autodiff.isautodiff=true
++md.autodiff.isautodiff=True
+ md=solve(md,PrognosticSolutionEnum())
+ 
+-
+-# Fields and tolerances to track changes
+-
++#Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+Index: ../trunk-jpl/test/NightlyRun/test3001.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.py	(revision 13899)
++++ ../trunk-jpl/test/NightlyRun/test3001.py	(revision 13900)
+@@ -1,25 +1,22 @@
+-from MatlabFuncs import *
+ from model import *
+-from EnumDefinitions import *
+-import numpy
+ from triangle import *
+ from setmask import *
+ from parameterize import *
+ from setflowequation import *
++from EnumDefinitions import *
+ from solve import *
++from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Square.exp',50000)
++md=triangle(model(),'../Exp/Square.exp',50000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.diagnostic.requested_outputs=StressTensorEnum()
+-md.autodiff.isautodiff=true
++md.autodiff.isautodiff=True
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+-
+-# Fields and tolerances to track changes
+-
++#Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vel','Pressure',\
+ 	'StressTensorxx','StressTensoryy','StressTensorxy']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
+Index: ../trunk-jpl/test/NightlyRun/test3015.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3015.py	(revision 13900)
+@@ -0,0 +1,91 @@
++import numpy
++import copy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from independent import *
++from dependent import *
++from SetIceShelfBC import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++#This test runs test3005 with autodiff on, and checks that 
++#the value of the scalar forward difference match a step-wise differential
++
++#First configure
++md=triangle(model(),'../Exp/Square.exp',50000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.prognostic.requested_outputs=IceVolumeEnum()
++md.verbose=verbose('autodiff',True)
++
++#setup autodiff parameters
++index=0 #this is the scalar component we are checking against
++md.autodiff.independents=[\
++	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
++	]
++
++md.autodiff.dependents=[\
++	dependent('name','IceVolume','type','scalar')\
++	]
++md.autodiff.driver='fos_forward'
++
++#parameters for the step-wise derivative
++delta=0.001
++h1=md.geometry.thickness[index]
++h0=h1*(1.-delta)
++h2=h1*(1.+delta)
++deltaH=(h2-h0)
++
++#save model
++md2=copy.deepcopy(md)
++
++#evaluate derivative by forward and backward stepping 
++#forward
++md=copy.deepcopy(md2)
++md.autodiff.isautodiff=False
++md.geometry.thickness[index]=h0
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=SetIceShelfBC(md)
++
++md=solve(md,PrognosticSolutionEnum())
++V0=md.results['PrognosticSolution'][1]['IceVolume']
++
++#backward
++md=copy.deepcopy(md2)
++md.autodiff.isautodiff=False
++md.geometry.thickness[index]=h2
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=SetIceShelfBC(md)
++
++md=solve(md,PrognosticSolutionEnum())
++V2=md.results['PrognosticSolution'][1]['IceVolume']
++
++#compute resulting derivative
++dVdh_an=(V2-V0)/deltaH
++
++#evaluate derivative using ADOLC 
++md=md2
++md.autodiff.isautodiff=True
++md.geometry.thickness[index]=h1
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=SetIceShelfBC(md)
++
++md=solve(md,PrognosticSolutionEnum())
++#retrieve directly
++dVdh_ad=md.results['PrognosticSolution'][1]['AutodiffJacobian']
++
++print "dV/dh: analytical:  #16.16g\n       using adolc:  #16.16g\n" % (dVdh_an,dVdh_ad)
++
++#Fields and tolerances to track changes
++field_names     =['dV/dh-dV/dh0']
++field_tolerances=[1e-13]
++field_values=[dVdh_ad-dVdh_an]
+Index: ../trunk-jpl/test/NightlyRun/test3010.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.py	(revision 13899)
++++ ../trunk-jpl/test/NightlyRun/test3010.py	(revision 13900)
+@@ -1,27 +1,23 @@
+-from MatlabFuncs import *
+ from model import *
+-from EnumDefinitions import *
+-import numpy
+ from triangle import *
+ from setmask import *
+ from parameterize import *
+ from setflowequation import *
++from EnumDefinitions import *
+ from solve import *
++from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Square.exp',150000)
++md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.transient.requested_outputs=IceVolumeEnum()
+ 
+-
+-md.autodiff.isautodiff=true
++md.autodiff.isautodiff=True
+ md=solve(md,TransientSolutionEnum())
+ 
+-
+-# Fields and tolerances to track changes
+-
++#Fields and tolerances to track changes
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Volume1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Volume2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Volume3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
+ 						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
+Index: ../trunk-jpl/test/NightlyRun/test3007.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.py	(revision 13899)
++++ ../trunk-jpl/test/NightlyRun/test3007.py	(revision 13900)
+@@ -1,25 +1,22 @@
+-from MatlabFuncs import *
+ from model import *
+-from EnumDefinitions import *
+-import numpy
+ from triangle import *
+ from setmask import *
+ from parameterize import *
+ from setflowequation import *
++from EnumDefinitions import *
+ from solve import *
++from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Square.exp',150000)
++md=triangle(model(),'../Exp/Square.exp',150000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md=setflowequation(md,'macayeal','all')
+ md.extrude(5,3.)
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.autodiff.isautodiff=true
++md.autodiff.isautodiff=True
+ md=solve(md,PrognosticSolutionEnum())
+ 
+-
+-# Fields and tolerances to track changes
+-
++#Fields and tolerances to track changes
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+Index: ../trunk-jpl/test/NightlyRun/test3002.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.py	(revision 13899)
++++ ../trunk-jpl/test/NightlyRun/test3002.py	(revision 13900)
+@@ -1,25 +1,22 @@
+-from MatlabFuncs import *
+ from model import *
+-from EnumDefinitions import *
+-import numpy
+ from triangle import *
+ from setmask import *
+ from parameterize import *
+ from setflowequation import *
++from EnumDefinitions import *
+ from solve import *
++from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Square.exp',180000)
++md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,2.)
+ md=setflowequation(md,'macayeal','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.autodiff.isautodiff=true
++md.autodiff.isautodiff=True
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+-
+-# Fields and tolerances to track changes
+-
++#Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+Index: ../trunk-jpl/test/NightlyRun/test3020.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test3020.py	(revision 13900)
+@@ -0,0 +1,98 @@
++import numpy
++import copy
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from independent import *
++from dependent import *
++from SetIceShelfBC import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++#This test runs test3020 with autodiff on, and checks that 
++#the value of the scalar forward difference match a step-wise differential
++
++#First configure
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelfConstrained.py')
++md=setflowequation(md,'macayeal','all')
++md.cluster=generic('name',oshostname(),'np',3)
++md.transient.requested_outputs=[IceVolumeEnum(),MaxVelEnum()]
++md.verbose=verbose('autodiff',True)
++md.diagnostic.restol=0.000001
++
++#setup autodiff parameters
++index=0 #this is the scalar component we are checking against
++md.autodiff.independents=[\
++	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
++	]
++
++md.autodiff.dependents=[\
++	dependent('name','IceVolume','type','scalar'),\
++	dependent('name','MaxVel','type','scalar')\
++	]
++md.autodiff.driver='fos_forward'
++
++#parameters for the step-wise derivative
++delta=0.00001
++h1=md.geometry.thickness[index]
++h0=h1*(1.-delta)
++h2=h1*(1.+delta)
++deltaH=(h2-h0)
++
++#save model:
++md2=copy.deepcopy(md)
++
++#evaluate derivative by forward and backward stepping 
++#forward
++md=copy.deepcopy(md2)
++md.autodiff.isautodiff=False
++md.geometry.thickness[index]=h0
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=SetIceShelfBC(md)
++
++md=solve(md,TransientSolutionEnum())
++V0=md.results['TransientSolution'][3]['IceVolume']
++MaxV0=md.results['TransientSolution'][3]['MaxVel']
++
++#backward
++md=copy.deepcopy(md2)
++md.autodiff.isautodiff=False
++md.geometry.thickness[index]=h2
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=SetIceShelfBC(md)
++
++md=solve(md,TransientSolutionEnum())
++V2=md.results['TransientSolution'][3]['IceVolume']
++MaxV2=md.results['TransientSolution'][3]['MaxVel']
++
++#compute resulting derivative
++dVdh_an=(V2-V0)/deltaH
++dMaxVdh_an=(MaxV2-MaxV0)/deltaH
++
++#evaluate derivative using ADOLC 
++md=copy.deepcopy(md2)
++md.autodiff.isautodiff=True
++md.geometry.thickness[index]=h1
++md.geometry.bed=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness
++md.geometry.surface=md.geometry.bed+md.geometry.thickness
++md=SetIceShelfBC(md)
++
++md=solve(md,TransientSolutionEnum())
++#retrieve directly
++dVdh_ad=md.results['TransientSolution'][1]['AutodiffJacobian'][0]
++dMaxVdh_ad=md.results['TransientSolution'][1]['AutodiffJacobian'][1]
++
++print "dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n" % (dVdh_an,dVdh_ad)
++print "dMaxV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n" % (dMaxVdh_an,dMaxVdh_ad)
++
++#Fields and tolerances to track changes
++field_names     =['dV/dh-dV/dh0','dMaxV/dh-dMaxV/dh0']
++field_tolerances=[1e-13,1e-13]
++field_values=[dVdh_ad-dVdh_an,dMaxVdh_an-dMaxVdh_ad]
+Index: ../trunk-jpl/test/NightlyRun/test3008.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.py	(revision 13899)
++++ ../trunk-jpl/test/NightlyRun/test3008.py	(revision 13900)
+@@ -1,26 +1,23 @@
+-from MatlabFuncs import *
+ from model import *
+-from EnumDefinitions import *
+-import numpy
+ from triangle import *
+ from setmask import *
+ from parameterize import *
+ from setflowequation import *
++from EnumDefinitions import *
+ from solve import *
++from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Square.exp',180000)
++md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,1.)
+ md=setflowequation(md,'macayeal','all')
+ md.timestepping.time_step=0
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.autodiff.isautodiff=true
++md.autodiff.isautodiff=True
+ md=solve(md,ThermalSolutionEnum())
+ 
+-
+-# Fields and tolerances to track changes
+-
++#Fields and tolerances to track changes
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+Index: ../trunk-jpl/test/NightlyRun/test3015.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.m	(revision 13899)
++++ ../trunk-jpl/test/NightlyRun/test3015.m	(revision 13900)
+@@ -21,11 +21,11 @@
+ 	};
+ md.autodiff.driver='fos_forward';
+ 
+-%parameters for the step-wise devivative
+-delta=.001;
++%parameters for the step-wise derivative
++delta=0.001;
+ h1=md.geometry.thickness(index);
+-h0=h1*(1-delta);
+-h2=h1*(1+delta);
++h0=h1*(1.-delta);
++h2=h1*(1.+delta);
+ deltaH=(h2-h0);
+ 
+ %save model:
+Index: ../trunk-jpl/test/NightlyRun/test3003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.py	(revision 13899)
++++ ../trunk-jpl/test/NightlyRun/test3003.py	(revision 13900)
+@@ -1,26 +1,23 @@
+-from MatlabFuncs import *
+ from model import *
+-from EnumDefinitions import *
+-import numpy
+ from triangle import *
+ from setmask import *
+ from parameterize import *
+ from setflowequation import *
++from EnumDefinitions import *
+ from solve import *
++from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Square.exp',180000)
++md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,2.)
+ md=setflowequation(md,'pattyn','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+ md.diagnostic.requested_outputs=StressTensorEnum()
+-md.autodiff.isautodiff=true
++md.autodiff.isautodiff=True
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+-
+-# Fields and tolerances to track changes
+-
++#Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure',\
+ 	'StressTensorxx','StressTensoryy','StressTensorzz','StressTensorxy','StressTensorxz','StressTensoryz']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,\
+Index: ../trunk-jpl/test/NightlyRun/test3009.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.py	(revision 13899)
++++ ../trunk-jpl/test/NightlyRun/test3009.py	(revision 13900)
+@@ -1,14 +1,13 @@
+-from MatlabFuncs import *
+ from model import *
+-from EnumDefinitions import *
+-import numpy
+ from triangle import *
+ from setmask import *
+ from parameterize import *
+ from setflowequation import *
++from EnumDefinitions import *
+ from solve import *
++from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Square.exp',180000)
++md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,1.)
+@@ -18,12 +17,10 @@
+ md.transient.isprognostic=0
+ md.transient.isthermal=1
+ md.transient.isgroundingline=0
+-md.autodiff.isautodiff=true
++md.autodiff.isautodiff=True
+ md=solve(md,TransientSolutionEnum())
+ 
+-
+-# Fields and tolerances to track changes
+-
++#Fields and tolerances to track changes
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+Index: ../trunk-jpl/test/NightlyRun/test3004.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.py	(revision 13899)
++++ ../trunk-jpl/test/NightlyRun/test3004.py	(revision 13900)
+@@ -1,25 +1,22 @@
+-from MatlabFuncs import *
+ from model import *
+-from EnumDefinitions import *
+-import numpy
+ from triangle import *
+ from setmask import *
+ from parameterize import *
+ from setflowequation import *
++from EnumDefinitions import *
+ from solve import *
++from MatlabFuncs import *
+ 
+-md=triangle(model(),'../Exp/Square.exp',180000)
++md=triangle(model(),'../Exp/Square.exp',180000.)
+ md=setmask(md,'all','')
+ md=parameterize(md,'../Par/SquareShelfConstrained.py')
+ md.extrude(3,2.)
+ md=setflowequation(md,'stokes','all')
+ md.cluster=generic('name',oshostname(),'np',3)
+-md.autodiff.isautodiff=true
++md.autodiff.isautodiff=True
+ md=solve(md,DiagnosticSolutionEnum())
+ 
+-
+-# Fields and tolerances to track changes
+-
++#Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-08,1e-08,1e-07,1e-08,1e-08]
+ field_values=[\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13900-13901.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13900-13901.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13900-13901.diff	(revision 13980)
@@ -0,0 +1,36 @@
+Index: ../trunk-jpl/src/c/shared/Elements/PrintArrays.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/PrintArrays.cpp	(revision 13900)
++++ ../trunk-jpl/src/c/shared/Elements/PrintArrays.cpp	(revision 13901)
+@@ -12,6 +12,20 @@
+ 	}  
+ 	_printLine_("");
+ }
++void printsparsity(IssmPDouble* array,int lines,int cols){
++	_printLine_("");
++	for(int i=0;i<lines;i++){  
++		_printString_("   [ ");
++		for(int j=0;j<cols;j++){
++			if(array[i*cols+j]!=0.0)
++			 _printString_( " X");
++			else
++			 _printString_( " .");
++		}
++		_printLine_(" ]");
++	}  
++	_printLine_("");
++}
+ void printarray(int* array,int lines,int cols){
+ 	_printLine_("");
+ 	for(int i=0;i<lines;i++){  
+Index: ../trunk-jpl/src/c/shared/Elements/elements.h
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 13900)
++++ ../trunk-jpl/src/c/shared/Elements/elements.h	(revision 13901)
+@@ -39,5 +39,6 @@
+ /*Print arrays*/
+ void printarray(IssmPDouble* array,int lines,int cols=1);
+ void printarray(int* array,int lines,int cols=1);
++void printsparsity(IssmPDouble* array,int lines,int cols=1);
+ void printbinary(int n);
+ #endif //ifndef _SHARED_ELEMENTS_H_
Index: /issm/oecreview/Archive/13393-13976/ISSM-13901-13902.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13901-13902.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13901-13902.diff	(revision 13980)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13901)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13902)
+@@ -426,8 +426,10 @@
+ 	/*Get vector size and number of nodes*/
+ 	int numnodes            = nodes->NumberOfNodes(analysis_type);
+ 	int numberofdofspernode = nodes->MaxNumDofs(configuration_type,GsetEnum);
++	int M                   = nodes->NumberOfDofs(analysis_type,set1enum);
+ 	int N                   = nodes->NumberOfDofs(analysis_type,set2enum);
+ 	int m                   = nodes->NumberOfDofsLocal(analysis_type,set1enum);
++	int n                   = nodes->NumberOfDofsLocal(analysis_type,set2enum);
+ 	int numnodesperobject   = elements->MaxNumNodes();
+ 
+ 	/*First, we are building chaining vectors so that we know what nodes are
+@@ -511,8 +513,8 @@
+ 					_assert_(count<m);
+ 					d_nnz[count]=numberofdofspernode*(d_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
+ 					o_nnz[count]=numberofdofspernode*(o_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
+-					if(d_nnz[count]>m)   d_nnz[count]=m;
+-					if(o_nnz[count]>N-m) o_nnz[count]=N-m;
++					if(d_nnz[count]>n)   d_nnz[count]=n;
++					if(o_nnz[count]>N-n) o_nnz[count]=N-n;
+ 					count++;
+ 				}
+ 			}
+@@ -746,7 +748,6 @@
+ 		if (load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff,Kfs);
+ 	}
+ 
+-
+ 	/*Fill right hand side vector, from elements and loads */
+ 	for (i=0;i<this->elements->Size();i++){
+ 		element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
Index: /issm/oecreview/Archive/13393-13976/ISSM-13902-13903.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13902-13903.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13902-13903.diff	(revision 13980)
@@ -0,0 +1,100 @@
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13902)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13903)
+@@ -161,7 +161,7 @@
+ 	}
+ }
+ /*}}}*/
+-/*FUNCTION Tria::GetDofList {{{*/
++/*FUNCTION Tria::SetwiseNodeConnectivity{{{*/
+ void Tria::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
+ 	int index;
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13902)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13903)
+@@ -2606,6 +2606,69 @@
+ 	else this->nodes=NULL;
+ }
+ /*}}}*/
++/*FUNCTION Penta::SetwiseNodeConnectivity{{{*/
++void Penta::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
++
++	int index;
++	int set_enum;
++
++	/*Find node index*/
++	index = this->GetNodeIndex(node);
++
++	/*Output */
++	int d_nz = 0;
++	int o_nz = 0;
++
++	/*Loop over all nodes*/
++	for(int i=0;i<6;i++){
++
++		if(!flags[this->nodes[i]->Sid()]){
++
++			/*flag current node so that no other element processes it*/
++			flags[this->nodes[i]->Sid()]=true;
++
++			/*What set are we interested in?*/
++			if(i!=index)
++			 set_enum=set2_enum;
++			else
++			 set_enum=set1_enum;
++
++			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
++			switch(set2_enum){
++				case FsetEnum:
++					if(nodes[i]->indexing.fsize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				case GsetEnum:
++					if(nodes[i]->indexing.gsize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				case SsetEnum:
++					if(nodes[i]->indexing.ssize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				default: _error_("not supported");
++			}
++		}
++	}
++
++	/*Assign output pointers: */
++	*pd_nz=d_nz;
++	*po_nz=o_nz;
++}
++/*}}}*/
+ /*FUNCTION Penta::SpawnTria {{{*/
+ Tria*  Penta::SpawnTria(int g0, int g1, int g2){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13902)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 13903)
+@@ -79,7 +79,7 @@
+ 		void   ComputeStressTensor();
+ 		void   Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
+ 		void   SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
+-		void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum){_error_("not implemented yet");};
++		void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
+ 		void   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,Vector<IssmDouble>* df);
+ 		void   CreatePVector(Vector<IssmDouble>* pf);
+ 		void   CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13903-13904.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13903-13904.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13903-13904.diff	(revision 13980)
@@ -0,0 +1,60 @@
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13903)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13904)
+@@ -164,12 +164,6 @@
+ /*FUNCTION Tria::SetwiseNodeConnectivity{{{*/
+ void Tria::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
+-	int index;
+-	int set_enum;
+-
+-	/*Find node index*/
+-	index = this->GetNodeIndex(node);
+-
+ 	/*Output */
+ 	int d_nz = 0;
+ 	int o_nz = 0;
+@@ -182,12 +176,6 @@
+ 			/*flag current node so that no other element processes it*/
+ 			flags[this->nodes[i]->Sid()]=true;
+ 
+-			/*What set are we interested in?*/
+-			if(i!=index)
+-			 set_enum=set2_enum;
+-			else
+-			 set_enum=set1_enum;
+-
+ 			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 			switch(set2_enum){
+ 				case FsetEnum:
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13903)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13904)
+@@ -2609,12 +2609,6 @@
+ /*FUNCTION Penta::SetwiseNodeConnectivity{{{*/
+ void Penta::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
+-	int index;
+-	int set_enum;
+-
+-	/*Find node index*/
+-	index = this->GetNodeIndex(node);
+-
+ 	/*Output */
+ 	int d_nz = 0;
+ 	int o_nz = 0;
+@@ -2627,12 +2621,6 @@
+ 			/*flag current node so that no other element processes it*/
+ 			flags[this->nodes[i]->Sid()]=true;
+ 
+-			/*What set are we interested in?*/
+-			if(i!=index)
+-			 set_enum=set2_enum;
+-			else
+-			 set_enum=set1_enum;
+-
+ 			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
+ 			switch(set2_enum){
+ 				case FsetEnum:
Index: /issm/oecreview/Archive/13393-13976/ISSM-13904-13905.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13904-13905.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13904-13905.diff	(revision 13980)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/ad/todo
+===================================================================
+--- ../trunk-jpl/src/ad/todo	(revision 13904)
++++ ../trunk-jpl/src/ad/todo	(revision 13905)
+@@ -56,3 +56,10 @@
+ - run valgrind on new adolc or old adolc. send a text on how to run it. 
+ - make gdb wrapper.
+ - think about ModelProcessor setup. need to keep track, before we partition, on cpu 0, of the independent declarations. 
++
++
++MPI: what's missing that equivalent of MPI.h -> no well defined api.  
++What's exposed is the internals of it.
++
++Wanted to look at changing the way for the matrices and vertices would be implemented.
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13905-13906.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13905-13906.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13905-13906.diff	(revision 13980)
@@ -0,0 +1,44 @@
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13905)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13906)
+@@ -49,7 +49,7 @@
+ deps =  $(MATHLIB) ${PYTHONLIB}
+ 
+ #Triangle library
+-AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER
++AM_CXXFLAGS =  -DTRILIBRARY -DANSI_DECLARATORS -DNO_TIMER -D_WRAPPERS_
+ 
+ #Python part
+ AM_LDFLAGS   = $(PYTHONLINK) -shrext ${EXEEXT} -module
+@@ -74,6 +74,10 @@
+ deps += 	 	 
+ else 	 	 
+ deps += ../../c/libISSMModules.a ../../c/libISSMCore.a 	 	 
++if ADOLC
++deps += $(ADOLCLIB)
++endif
++
+ endif 
+ 
+ #Optimization flags:
+Index: ../trunk-jpl/configs/config-macosx64-larour-ad.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-larour-ad.sh	(revision 13905)
++++ ../trunk-jpl/configs/config-macosx64-larour-ad.sh	(revision 13906)
+@@ -1,5 +1,7 @@
+ #!/bin/sh
+ 
++pythonversion=2.7
++
+ ./configure \
+ 	--prefix=$ISSM_DIR \
+ 	--without-kriging  \
+@@ -7,5 +9,7 @@
+ 	--with-gsl-dir=$ISSM_DIR/externalpackages/gsl/install \
+ 	--with-adolc-dir=$ISSM_DIR/externalpackages/adolc/install \
+ 	--with-matlab-dir=$MATLAB_DIR \
++	--with-python-dir=$ISSM_DIR/externalpackages/python/install\
++	--with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
+ 	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13906-13907.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13906-13907.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13906-13907.diff	(revision 13980)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/src/c/Container/Nodes.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13906)
++++ ../trunk-jpl/src/c/Container/Nodes.cpp	(revision 13907)
+@@ -315,16 +315,11 @@
+ 	max_sid=node_max_sid;
+ 	#endif
+ 
+-	if(max_sid==1){
+-		return 0;
+-	}
+-	else{
+-		/*sid starts at 0*/
+-		max_sid++;
++	/*sid starts at 0*/
++	max_sid++;
+ 
+-		/*return*/
+-		return max_sid;
+-	}
++	/*return*/
++	return max_sid;
+ }
+ /*}}}*/
+ /*FUNCTION Nodes::Ranks{{{*/
Index: /issm/oecreview/Archive/13393-13976/ISSM-13907-13908.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13907-13908.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13907-13908.diff	(revision 13980)
@@ -0,0 +1,17 @@
+Index: ../trunk-jpl/configs/config-macosx64-chris-python.sh
+===================================================================
+--- ../trunk-jpl/configs/config-macosx64-chris-python.sh	(revision 13907)
++++ ../trunk-jpl/configs/config-macosx64-chris-python.sh	(revision 13908)
+@@ -20,12 +20,7 @@
+ 	--with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install  \
+ 	--with-petsc-arch=$ISSM_ARCH \
+ 	--with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
+-	--with-plapack-lib="-L$ISSM_DIR/externalpackages/petsc/install/ -lPLAPACK" \
+-	--with-plapack-include="-I$ISSM_DIR/externalpackages/petsc/install/include/ " \
+ 	--with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
+ 	--with-numthreads=8
+-	#--with-fortran-lib="/usr/local/gfortran/lib/libgfortran.a" \
+-	#--with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
+-	#--with-boost-dir=$ISSM_DIR/externalpackages/boost/install/ \
Index: /issm/oecreview/Archive/13393-13976/ISSM-13908-13909.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13908-13909.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13908-13909.diff	(revision 13980)
@@ -0,0 +1,150 @@
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13908)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 13909)
+@@ -1139,6 +1139,8 @@
+ /*FUNCTION Tria::GetNumberOfNodes{{{*/
+ int Tria::GetNumberOfNodes(void){
+ 
++	if(this->nodes==NULL) return 0;
++
+ 	switch(this->element_type){
+ 		case P1Enum:
+ 			return 3;
+Index: ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13908)
++++ ../trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 13909)
+@@ -904,6 +904,8 @@
+ /*FUNCTION Penta::GetNumberOfNodes{{{*/
+ int Penta::GetNumberOfNodes(void){
+ 
++	if(this->nodes==NULL) return 0;
++
+ 	switch(this->element_type){
+ 		case P1Enum:
+ 			return 6;
+Index: ../trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp	(revision 13908)
++++ ../trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp	(revision 13909)
+@@ -69,7 +69,6 @@
+ /*FUNCTION PentaHook::SetHookNodes{{{*/
+ void PentaHook::SetHookNodes(int* node_ids,int analysis_counter){
+ 	this->hnodes[analysis_counter]= new Hook(node_ids,6);
+-
+ }
+ /*}}}*/
+ /*FUNCTION PentaHook::InitHookNeighbors{{{*/
+Index: ../trunk-jpl/src/c/classes/objects/Elements/PentaHook.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Elements/PentaHook.h	(revision 13908)
++++ ../trunk-jpl/src/c/classes/objects/Elements/PentaHook.h	(revision 13909)
+@@ -12,20 +12,20 @@
+ class PentaHook{
+ 
+ 	public: 
+-		int   numanalyses; //number of analysis types
+-		Hook** hnodes; // 6 nodes for each analysis type
+-		Hook*  hmaterial; // 1 ice material
+-		Hook*  hmatpar; // 1 material parameter
+-		Hook*  hneighbors; // 2 elements, first down, second up
++		int    numanalyses;   //number of analysis types
++		Hook **hnodes;        // 6 nodes for each analysis type
++		Hook  *hmaterial;     // 1 ice material
++		Hook  *hmatpar;       // 1 material parameter
++		Hook  *hneighbors;    // 2 elements, first down, second up
+ 
+-		/*FUNCTION constructors, destructors {{{*/
++		/*constructors, destructors*/
+ 		PentaHook();
+ 		PentaHook(int in_numanalyses,int material_id, IoModel* iomodel);
+ 		~PentaHook();
++
+ 		void SetHookNodes(int* node_ids,int analysis_counter);
+ 		void SpawnTriaHook(TriaHook* triahook,int* indices);
+ 		void InitHookNeighbors(int* element_ids);
+-		/*}}}*/
+ };
+ 
+ #endif //ifndef _PENTAHOOK_H_
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13908)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13909)
+@@ -341,7 +341,7 @@
+ 	/*Intermediary*/
+ 	int  fsize,ssize,flocalsize,slocalsize;
+ 	int  connectivity, numberofdofspernode;
+-	int  analysis_type,configuration_type;
++	int  configuration_type;
+ 	int  m,n,M,N;
+ 	int *d_nnz = NULL;
+ 	int *o_nnz = NULL;
+@@ -356,15 +356,14 @@
+ 	bool oldalloc=true;
+ 
+ 	/*retrieve parameters: */
+-	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 	this->parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
+ 
+ 	/*retrieve node info*/
+ 	fsize      = this->nodes->NumberOfDofs(configuration_type,FsetEnum);
+ 	ssize      = this->nodes->NumberOfDofs(configuration_type,SsetEnum);
+-	flocalsize = this->nodes->NumberOfDofsLocal(analysis_type,FsetEnum);
+-	slocalsize = this->nodes->NumberOfDofsLocal(analysis_type,SsetEnum);
++	flocalsize = this->nodes->NumberOfDofsLocal(configuration_type,FsetEnum);
++	slocalsize = this->nodes->NumberOfDofsLocal(configuration_type,SsetEnum);
+ 
+ 	numberofdofspernode=this->nodes->MaxNumDofs(configuration_type,GsetEnum);
+ 
+@@ -407,7 +406,7 @@
+ 
+ 	/*Intermediary*/
+ 	int      i,j,k,index,offset,count;
+-	int      analysis_type,configuration_type;
++	int      configuration_type;
+ 	int      d_nz,o_nz;
+ 	Element *element      = NULL;
+ 	int     *head         = NULL;
+@@ -420,16 +419,15 @@
+ 	int *o_nnz = NULL;
+ 
+ 	/*retrive parameters: */
+-	this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+ 	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 
+ 	/*Get vector size and number of nodes*/
+-	int numnodes            = nodes->NumberOfNodes(analysis_type);
++	int numnodes            = nodes->NumberOfNodes(configuration_type);
+ 	int numberofdofspernode = nodes->MaxNumDofs(configuration_type,GsetEnum);
+-	int M                   = nodes->NumberOfDofs(analysis_type,set1enum);
+-	int N                   = nodes->NumberOfDofs(analysis_type,set2enum);
+-	int m                   = nodes->NumberOfDofsLocal(analysis_type,set1enum);
+-	int n                   = nodes->NumberOfDofsLocal(analysis_type,set2enum);
++	int M                   = nodes->NumberOfDofs(configuration_type,set1enum);
++	int N                   = nodes->NumberOfDofs(configuration_type,set2enum);
++	int m                   = nodes->NumberOfDofsLocal(configuration_type,set1enum);
++	int n                   = nodes->NumberOfDofsLocal(configuration_type,set2enum);
+ 	int numnodesperobject   = elements->MaxNumNodes();
+ 
+ 	/*First, we are building chaining vectors so that we know what nodes are
+@@ -470,7 +468,7 @@
+ 	/*Create connectivity vector*/
+ 	for(i=0;i<nodes->Size();i++){
+ 		Node* node=dynamic_cast<Node*>(nodes->GetObjectByOffset(i));
+-		if(node->InAnalysis(analysis_type)){
++		if(node->InAnalysis(configuration_type)){
+ 
+ 			/*Reinitialize flags to 0*/
+ 			for(j=0;j<numnodes;j++) flags[j]=false;
+@@ -508,7 +506,7 @@
+ 		o_nnz=xNew<int>(m);
+ 		for(i=0;i<nodes->Size();i++){
+ 			Node* node=dynamic_cast<Node*>(nodes->GetObjectByOffset(i));
+-			if(node->InAnalysis(analysis_type) && !node->IsClone()){
++			if(node->InAnalysis(configuration_type) && !node->IsClone()){
+ 				for(j=0;j<node->indexing.fsize;j++){
+ 					_assert_(count<m);
+ 					d_nnz[count]=numberofdofspernode*(d_connectivity[node->Sid()] + all_connectivity_clone[node->Sid()]);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13909-13910.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13909-13910.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13909-13910.diff	(revision 13980)
@@ -0,0 +1,30 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 13909)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 13910)
+@@ -9,6 +9,7 @@
+ from SegIntersect import *
+ from MatlabFuncs import *
+ from BamgMesher import *
++from ContourToNodes import *
+ 
+ def bamg(md,*args):
+ 	"""
+@@ -90,7 +91,7 @@
+ 
+ 			#Checks that all holes are INSIDE the principle domain outline
+ 			if i:
+-				flags=ContourToNodes(domaini['x'],domaini['y'],domain[0],0)
++				flags=ContourToNodes(domaini['x'].reshape(-1,1),domaini['y'].reshape(-1,1),domainfile,0)
+ 				if numpy.any(numpy.logical_not(flags)):
+ 					raise RuntimeError("bamg error message: All holes should be strictly inside the principal domain")
+ 
+@@ -116,7 +117,7 @@
+ 			for i,rifti in enumerate(rift):
+ 
+ 				#detect whether all points of the rift are inside the domain
+-				flags=ContourToNodes(rifti['x'],rifti['y'],domain[0],0)
++				flags=ContourToNodes(rifti['x'].reshape(-1,1),rifti['y'].reshape(-1,1),domain[0],0)
+ 				if numpy.all(numpy.logical_not(flags)):
+ 					raise RuntimeError("one rift has all its points outside of the domain outline")
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13910-13911.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13910-13911.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13910-13911.diff	(revision 13980)
@@ -0,0 +1,57 @@
+Index: ../trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh	(revision 13910)
++++ ../trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh	(revision 13911)
+@@ -21,38 +21,40 @@
+  --PETSC_DIR="$ISSM_DIR/externalpackages/petsc/src" \
+  --with-debugging=0 \
+  --with-shared-libraries=1 \
+- --with-blas-lapack-dir=/nasa/intel/mkl/10.0.011/ \
+  --known-mpi-shared-libraries=1 \
+  --with-mpi=1 \
+- --download-mumps=yes \
+- --download-blacs=yes  \
++ --with-mpi-lib=/nasa/sgi/mpt/2.06a67/lib/libmpi.so \
++ --with-mpi-include=/nasa/sgi/mpt/2.06a67/include  \
+  --download-blas=yes \
+  --download-f-blas-lapack=yes \
++ --download-mumps=yes \
++ --download-scalapack=yes \
++ --download-blacs=yes \
++ --download-plapack=no \
++ --download-metis=yes \
+  --download-parmetis=yes \
+- --download-metis=yes \
+  --download-trilinos=yes \
+  --download-euclid=yes \
+- --download-spai=yes \
+- --download-superlu=yes \
+  --download-hypre=yes \
+- --download-prometheus=yes \
+- --with-cxx=/nasa/sgi/mpt/2.06a67/bin/mpicxx \
+- --with-fc=/nasa/sgi/mpt/2.06a67/bin/mpif90 \
++ --with-cxx=icc \
++ --with-fc=ifort \
+  --COPTFLAGS="-lmpi -O3" \
+  --FOPTFLAGS="-lmpi -O3" \
+- --CXXOPTFLAGS="-lmpi -O3" 
++ --CXXOPTFLAGS="-lmpi -O3"
+ 
+ #prepare script to reconfigure petsc
+ cat > script.queue << EOF
+ #PBS -S /bin/bash
+ #PBS -l select=1:ncpus=1:model=wes 
+ #PBS -l walltime=200 
+-#PBS -W group_list=s1010 
++#PBS -W group_list=s1010
+ #PBS -m e 
++
+ . /usr/share/modules/init/bash 
+ module load comp-intel/2012.0.032 
+ module load mpi-sgi/mpt.2.06a67  
+-module load math/intel_mkl_64_10.0.011 
++module load math/intel_mkl_64_10.0.011
++
+ export PATH="$PATH:." 
+ export MPI_GROUP_MAX=64 
+ mpiexec -np 1 ./conftest-linux-gnu-ia64-intel.py
Index: /issm/oecreview/Archive/13393-13976/ISSM-13911-13912.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13911-13912.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13911-13912.diff	(revision 13980)
@@ -0,0 +1,114 @@
+Index: ../trunk-jpl/externalpackages/dakota/install-pleiades-petsc3.3.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/dakota/install-pleiades-petsc3.3.sh	(revision 0)
++++ ../trunk-jpl/externalpackages/dakota/install-pleiades-petsc3.3.sh	(revision 13912)
+@@ -0,0 +1,103 @@
++#!/bin/bash
++set -eu
++
++#Some cleanup
++rm -rf Dakota
++rm -rf src
++rm -rf install
++mkdir src install
++
++#Download from ISSM server
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/Dakota_4_3.src.tar.gz' 'Dakota_4_3.src.tar.gz'
++
++#Untar 
++tar -zxvf  Dakota_4_3.src.tar.gz
++
++#Move Dakota to src directory
++mv Dakota/* src
++rm -rf Dakota
++
++#Apply patches
++patch src/src/ParallelLibrary.C ./ParallelLibrary.C.patch
++patch src/src/ParallelLibrary.H ./ParallelLibrary.H.patch
++patch src/src/NIDRProblemDescDB.C ./NIDRProblemDescDB.C.patch
++patch src/src/NonDSampling.C ./NonDSampling.C.patch
++patch src/src/NonDLocalReliability.C ./NonDLocalReliability.C.patch
++patch src/src/NonDUnilevelRBDO.C ./NonDUnilevelRBDO.C.patch    #  source not even used?
++#patch -R src/packages/Pecos/src/LHSDriver.cpp ./LHSDriver.cpp.patch
++
++#Configure dakota
++cd src
++./configure \
++--prefix="$ISSM_DIR/externalpackages/dakota/install/" \
++--without-graphics  \
++--with-pic \
++--disable-mpi \
++--with-blas="-L$ISSM_DIR/externalpackages/petsc/install/lib -lfblas " \
++--with-lapack="-L$ISSM_DIR/externalpackages/petsc/install/lib -lflapack "
++
++#--with-blas="-L/nasa/intel/mkl/10.0.011/lib/64/ -lmkl -lmkl_lapack -liomp5 -lpthread" \
++#--with-lapack="-L/nasa/intel/mkl/10.0.011/lib/64/ -lmkl -lmkl_lapack -liomp5 -lpthread"
++#--with-blas="-L/nasa/intel/Compiler/11.1/046/mkl/lib/em64t/ -lmkl_intel_lp64 -lmkl_lapack" \
++#--with-lapack="-L/nasa/intel/Compiler/11.1/046/mkl/lib/em64t/ -lmkl_intel_lp64 -lmkl_lapack"
++
++cd ..
++
++#Before compiling, if running on 64 bits, we need to active fPIC compilation. Some packages 
++#do not register -fPIC in Dakota, which is a problem. Edit the faulty Makefiles and add the -fPIC 
++#flag to the compilation.
++cat ./src/methods/NCSUOpt/Makefile | sed 's/FFLAGS = -g -O2/FFLAGS = -g -O2 -fPIC/g' >  temp
++mv temp ./src/methods/NCSUOpt/Makefile
++
++cat ./src/methods/acro/packages/pebbl/src/Makefile | sed 's/CXXFLAGS = -O2 -fpermissive/CXXFLAGS = -O2 -fpermissive -fPIC/g' > temp
++mv temp ./src/methods/acro/packages/pebbl/src/Makefile
++
++cat ./src/methods/hopspack/src-nappspack/Makefile | sed 's/CXXFLAGS = -g -O2/CXXFLAGS = -g -O2  -fPIC/g' > temp
++mv temp ./src/methods/hopspack/src-nappspack/Makefile
++
++cat ./src/methods/hopspack/src-cddlib/Makefile | sed 's/CFLAGS = -g -O2/CFLAGS = -g -O2 -fPIC/g' > temp
++mv temp  ./src/methods/hopspack/src-cddlib/Makefile
++
++cat ./src/methods/hopspack/src-shared/Makefile | sed 's/CFLAGS = -g -O2/CFLAGS = -g -O2 -fPIC/g' > temp
++mv temp  ./src/methods/hopspack/src-shared/Makefile
++
++cat ./src/methods/hopspack/src-shared/Makefile | sed 's/CXXFLAGS = -g -O2/CXXFLAGS = -g -O2  -fPIC/g' > temp
++mv temp  ./src/methods/hopspack/src-shared/Makefile
++
++cat ./src/methods/hopspack/src-conveyor/Makefile | sed 's/CXXFLAGS = -g -O2/CXXFLAGS = -g -O2 -fPIC/g' > temp
++mv temp  ./src/methods/hopspack/src-conveyor/Makefile
++
++cat ./src/methods/hopspack/src-appspack/Makefile | sed 's/CXXFLAGS = -g -O2/CXXFLAGS = -g -O2  -fPIC/g' > temp
++mv temp ./src/methods/hopspack/src-appspack/Makefile
++
++cat ./src/methods/acro/packages/colin/src/Makefile | sed 's/CXXFLAGS = -O2 -fpermissive/CXXFLAGS = -O2 -fpermissive -fPIC/g' > temp
++mv temp ./src/methods/acro/packages/colin/src/Makefile
++
++cat ./src/methods/acro/packages/coliny/src/Makefile | sed 's/CXXFLAGS = -O2 -fpermissive/CXXFLAGS = -O2 -fpermissive -fPIC/g' > temp
++mv temp ./src/methods/acro/packages/coliny/src/Makefile
++
++cat ./src/methods/acro/packages/tpl/3po/Makefile | sed 's/CFLAGS = -O2/CFLAGS = -O2 -fPIC/g' > temp
++mv temp  ./src/methods/acro/packages/tpl/3po/Makefile
++
++cat ./src/methods/acro/packages/tpl/3po/Makefile | sed 's/CXXFLAGS = -O2 -fpermissive/CFLAGS = -O2 -fpermissive -fPIC/g' > temp
++mv temp  ./src/methods/acro/packages/tpl/3po/Makefile
++
++cat ./src/packages/ampl/Makefile | sed 's/CFLAGS = -g -O2/CFLAGS = -g -O2 -fPIC/g' > temp
++mv temp  ./src/packages/ampl/Makefile
++
++#Compile and install dakota
++cd src
++if [ $# -eq 0 ];
++then
++	make
++	make install
++else
++	make -j $1
++	make -j $1 install
++fi
++cd ..
++
++#Weird behaviour of Dakota: libamplsolver.a and amplsolver.a are not the same thing!
++cd install/lib
++mv libamplsolver.a libamplsolver.a.bak
++ln -s ../../src/packages/ampl/amplsolver.a ./libamplsolver.a
+
+Property changes on: ../trunk-jpl/externalpackages/dakota/install-pleiades-petsc3.3.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13912-13913.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13912-13913.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13912-13913.diff	(revision 13980)
@@ -0,0 +1,32 @@
+Index: ../trunk-jpl/configs/config-pleiades-petsc3.3.sh
+===================================================================
+--- ../trunk-jpl/configs/config-pleiades-petsc3.3.sh	(revision 0)
++++ ../trunk-jpl/configs/config-pleiades-petsc3.3.sh	(revision 13913)
+@@ -0,0 +1,21 @@
++#!/bin/csh
++
++./configure \
++ --prefix=$ISSM_DIR \
++ --with-wrappers=no \
++ --with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
++ --with-metis-dir=$ISSM_DIR/externalpackages/petsc/src/externalpackages/metis-5.0.2-p3 \
++ --with-petsc-dir=$ISSM_DIR/externalpackages/petsc/install \
++ --with-tao-dir=$ISSM_DIR/externalpackages/tao/install \
++ --with-mpi-include=/nasa/sgi/mpt/2.06a67/include \
++ --with-mpi-lib="-L/nasa/sgi/mpt/2.06a67/lib/ -lmpi -lpthread -lgfortran " \
++ --with-petsc-arch=$ISSM_ARCH \
++ --with-dakota-dir=$ISSM_DIR/externalpackages/dakota/install \
++ --with-blas-lapack-dir=$ISSM_DIR/externalpackages/petsc/install \
++ --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++ --with-scalapack-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++ --with-blacs-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++ --with-hypre-dir=$ISSM_DIR/externalpackages/petsc/install/ \
++ --with-graphics-lib=/usr/lib64/libX11.so \
++ --with-cxxoptflags="-O3" \
++ --with-vendor=intel-pleiades
+
+Property changes on: ../trunk-jpl/configs/config-pleiades-petsc3.3.sh
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
Index: /issm/oecreview/Archive/13393-13976/ISSM-13913-13914.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13913-13914.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13913-13914.diff	(revision 13980)
@@ -0,0 +1,27 @@
+Index: ../trunk-jpl/src/c/shared/Elements/PrintArrays.cpp
+===================================================================
+--- ../trunk-jpl/src/c/shared/Elements/PrintArrays.cpp	(revision 13913)
++++ ../trunk-jpl/src/c/shared/Elements/PrintArrays.cpp	(revision 13914)
+@@ -13,16 +13,19 @@
+ 	_printLine_("");
+ }
+ void printsparsity(IssmPDouble* array,int lines,int cols){
++	int count;
+ 	_printLine_("");
+ 	for(int i=0;i<lines;i++){  
+ 		_printString_("   [ ");
++		count = 0;
+ 		for(int j=0;j<cols;j++){
+-			if(array[i*cols+j]!=0.0)
+-			 _printString_( " X");
++			if(array[i*cols+j]!=0.0){
++				_printString_( " X"); count++;
++			}
+ 			else
+ 			 _printString_( " .");
+ 		}
+-		_printLine_(" ]");
++		_printLine_(" ] "<<i<<" => "<<count);
+ 	}  
+ 	_printLine_("");
+ }
Index: /issm/oecreview/Archive/13393-13976/ISSM-13914-13915.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13914-13915.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13914-13915.diff	(revision 13980)
@@ -0,0 +1,588 @@
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Icefront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Icefront.h	(revision 13914)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Icefront.h	(revision 13915)
+@@ -70,9 +70,12 @@
+ 		void  CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs);
+ 		void  CreatePVector(Vector<IssmDouble>* pf);
+ 		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
++		int   GetNumberOfNodes(void);
++		void  GetNodesSidList(int* sidlist);
+ 		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
+ 		void  PenaltyCreatePVector(Vector<IssmDouble>*  pf, IssmDouble kmax);
+ 		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax);
++		void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
+ 		bool  InAnalysis(int analysis_type);
+ 		/*}}}*/
+ 		/*Load management: {{{*/
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 13914)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 13915)
+@@ -33,7 +33,7 @@
+ 	this->nodes=NULL;
+ }
+ /*}}}*/
+-/*}}}*//*FUNCTION Numericalflux::Numericalflux(int id, int i, IoModel* iomodel, int analysis_type) {{{*/
++/*FUNCTION Numericalflux::Numericalflux(int id, int i, IoModel* iomodel, int analysis_type) {{{*/
+ Numericalflux::Numericalflux(int numericalflux_id,int i, IoModel* iomodel, int in_analysis_type){
+ 
+ 	/* Intermediary */
+@@ -304,6 +304,43 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Numericalflux::GetNodesSidList{{{*/
++void Numericalflux::GetNodesSidList(int* sidlist){
++
++	int type;
++	inputs->GetInputValue(&type,TypeEnum);
++	_assert_(sidlist);
++	_assert_(nodes);
++
++	switch(type){
++		case InternalEnum:
++			for(int i=0;i<NUMVERTICES_INTERNAL;i++) sidlist[i]=nodes[i]->Sid();
++			return;
++		case BoundaryEnum:
++			for(int i=0;i<NUMVERTICES_BOUNDARY;i++) sidlist[i]=nodes[i]->Sid();
++			return;
++		default:
++			_error_("Numericalflux type " << EnumToStringx(type) << " not supported yet");
++	}
++}
++/*}}}*/
++/*FUNCTION Numericalflux::GetNumberOfNodes{{{*/
++int Numericalflux::GetNumberOfNodes(void){
++
++	int type;
++	inputs->GetInputValue(&type,TypeEnum);
++
++	switch(type){
++		case InternalEnum:
++			return NUMVERTICES_INTERNAL;
++		case BoundaryEnum:
++			return NUMVERTICES_BOUNDARY;
++		default:
++			_error_("Numericalflux type " << EnumToStringx(type) << " not supported yet");
++	}
++
++}
++/*}}}*/
+ /*FUNCTION Numericalflux::PenaltyCreateKMatrix {{{*/
+ void  Numericalflux::PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,IssmDouble kmax){
+ 
+@@ -326,7 +363,58 @@
+ 	else return false;
+ }
+ /*}}}*/
++/*FUNCTION Numericalflux::SetwiseNodeConnectivity{{{*/
++void Numericalflux::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
++	/*Output */
++	int d_nz = 0;
++	int o_nz = 0;
++
++	/*Loop over all nodes*/
++	for(int i=0;i<this->GetNumberOfNodes();i++){
++
++		if(!flags[this->nodes[i]->Sid()]){
++
++			/*flag current node so that no other element processes it*/
++			flags[this->nodes[i]->Sid()]=true;
++
++			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
++			switch(set2_enum){
++				case FsetEnum:
++					if(nodes[i]->indexing.fsize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				case GsetEnum:
++					if(nodes[i]->indexing.gsize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				case SsetEnum:
++					if(nodes[i]->indexing.ssize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				default: _error_("not supported");
++			}
++		}
++	}
++
++	/*Assign output pointers: */
++	*pd_nz=d_nz;
++	*po_nz=o_nz;
++}
++/*}}}*/
++
+ /*Numericalflux management*/
+ /*FUNCTION Numericalflux::CreateKMatrixPrognostic{{{*/
+ ElementMatrix* Numericalflux::CreateKMatrixPrognostic(void){
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp	(revision 13914)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp	(revision 13915)
+@@ -147,6 +147,21 @@
+ 	this->CreateKMatrix(Jff,NULL);
+ }
+ /*}}}*/
++/*FUNCTION Penpair::GetNodesSidList{{{*/
++void Penpair::GetNodesSidList(int* sidlist){
++
++	_assert_(sidlist);
++	_assert_(nodes);
++
++	for(int i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->Sid();
++}
++/*}}}*/
++/*FUNCTION Penpair::GetNumberOfNodes{{{*/
++int Penpair::GetNumberOfNodes(void){
++
++	return NUMVERTICES;
++}
++/*}}}*/
+ /*FUNCTION Penpair::PenaltyCreateKMatrix {{{*/
+ void  Penpair::PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,IssmDouble kmax){
+ 
+@@ -190,7 +205,58 @@
+ 	else return false;
+ }
+ /*}}}*/
++/*FUNCTION Penpair::SetwiseNodeConnectivity{{{*/
++void Penpair::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
++	/*Output */
++	int d_nz = 0;
++	int o_nz = 0;
++
++	/*Loop over all nodes*/
++	for(int i=0;i<NUMVERTICES;i++){
++
++		if(!flags[this->nodes[i]->Sid()]){
++
++			/*flag current node so that no other element processes it*/
++			flags[this->nodes[i]->Sid()]=true;
++
++			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
++			switch(set2_enum){
++				case FsetEnum:
++					if(nodes[i]->indexing.fsize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				case GsetEnum:
++					if(nodes[i]->indexing.gsize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				case SsetEnum:
++					if(nodes[i]->indexing.ssize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				default: _error_("not supported");
++			}
++		}
++	}
++
++	/*Assign output pointers: */
++	*pd_nz=d_nz;
++	*po_nz=o_nz;
++}
++/*}}}*/
++
+ /*Update virtual functions definitions:*/
+ /*FUNCTION Penpair::InputUpdateFromConstant(IssmDouble constant, int name) {{{*/
+ void  Penpair::InputUpdateFromConstant(IssmDouble constant, int name){
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.h	(revision 13914)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.h	(revision 13915)
+@@ -77,9 +77,12 @@
+ 		void  CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs);
+ 		void  CreatePVector(Vector<IssmDouble>* pf);
+ 		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");};
++		void  GetNodesSidList(int* sidlist);
++		int   GetNumberOfNodes(void);
+ 		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax){_error_("Not implemented yet");};
+ 		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
+ 		void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
++		void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
+ 		bool  InAnalysis(int analysis_type);
+ 		/*}}}*/
+ 		/*Riftfront specific routines: {{{*/
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h	(revision 13914)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h	(revision 13915)
+@@ -63,10 +63,13 @@
+ 		void  SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
+ 		void  CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs);
+ 		void  CreatePVector(Vector<IssmDouble>* pf);
++		void  GetNodesSidList(int* sidlist);
++		int   GetNumberOfNodes(void);
+ 		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");};
+ 		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax){_error_("Not implemented yet");};
+ 		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
+ 		void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
++		void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
+ 		bool  InAnalysis(int analysis_type);
+ 		/*}}}*/
+ 		/*Numericalflux management:{{{*/
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Penpair.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Penpair.h	(revision 13914)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Penpair.h	(revision 13915)
+@@ -56,9 +56,12 @@
+ 		void  CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs);
+ 		void  CreatePVector(Vector<IssmDouble>* pf);
+ 		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
++		void  GetNodesSidList(int* sidlist);
++		int   GetNumberOfNodes(void);
+ 		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff,Matrix<IssmDouble>* Kfs,IssmDouble kmax);
+ 		void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
+ 		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax);
++		void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
+ 		bool  InAnalysis(int analysis_type);
+ 		/*}}}*/
+ 			/*Penpair management: {{{*/
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Load.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Load.h	(revision 13914)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Load.h	(revision 13915)
+@@ -24,6 +24,8 @@
+ 
+ 		virtual       ~Load(){};
+ 		virtual void  Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0;
++		virtual int   GetNumberOfNodes(void)=0;
++		virtual void  GetNodesSidList(int* sidlist)=0;
+ 		virtual void  SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0;
+ 		virtual void  CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs)=0;
+ 		virtual void  CreatePVector(Vector<IssmDouble>* pf)=0;
+@@ -32,5 +34,6 @@
+ 		virtual void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs, IssmDouble kmax)=0;
+ 		virtual void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax)=0;
+ 		virtual bool  InAnalysis(int analysis_type)=0;
++		virtual void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum)=0;
+ };
+ #endif
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp	(revision 13914)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp	(revision 13915)
+@@ -208,6 +208,21 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Pengrid::GetNodesSidList{{{*/
++void Pengrid::GetNodesSidList(int* sidlist){
++
++	_assert_(sidlist);
++	_assert_(node);
++
++	sidlist[0]=node->Sid();
++}
++/*}}}*/
++/*FUNCTION Pengrid::GetNumberOfNodes{{{*/
++int Pengrid::GetNumberOfNodes(void){
++
++	return NUMVERTICES;
++}
++/*}}}*/
+ /*FUNCTION Pengrid::PenaltyCreateMatrix {{{*/
+ void  Pengrid::PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,IssmDouble kmax){
+ 
+@@ -279,7 +294,54 @@
+ 	else return false;
+ }
+ /*}}}*/
++/*FUNCTION Pengrid::SetwiseNodeConnectivity{{{*/
++void Pengrid::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
++	/*Output */
++	int d_nz = 0;
++	int o_nz = 0;
++
++	if(!flags[this->node->Sid()]){
++
++		/*flag current node so that no other element processes it*/
++		flags[this->node->Sid()]=true;
++
++		/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
++		switch(set2_enum){
++			case FsetEnum:
++				if(node->indexing.fsize){
++					if(this->node->IsClone())
++					 o_nz += 1;
++					else
++					 d_nz += 1;
++				}
++				break;
++			case GsetEnum:
++				if(node->indexing.gsize){
++					if(this->node->IsClone())
++					 o_nz += 1;
++					else
++					 d_nz += 1;
++				}
++				break;
++			case SsetEnum:
++				if(node->indexing.ssize){
++					if(this->node->IsClone())
++					 o_nz += 1;
++					else
++					 d_nz += 1;
++				}
++				break;
++			default: _error_("not supported");
++		}
++	}
++
++	/*Assign output pointers: */
++	*pd_nz=d_nz;
++	*po_nz=o_nz;
++}
++/*}}}*/
++
+ /*Update virtual functions definitions:*/
+ /*FUNCTION Pengrid::InputUpdateFromVector(IssmDouble* vector, int name, int type) {{{*/
+ void  Pengrid::InputUpdateFromVector(IssmDouble* vector, int name, int type){
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 13914)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 13915)
+@@ -270,6 +270,53 @@
+ 	this->CreateKMatrix(Jff,NULL);
+ }
+ /*}}}*/
++/*FUNCTION Icefront::GetNodesSidList{{{*/
++void Icefront::GetNodesSidList(int* sidlist){
++
++	int type;
++	inputs->GetInputValue(&type,TypeEnum);
++	_assert_(sidlist);
++	_assert_(nodes);
++
++	switch(type){
++		case MacAyeal2dIceFrontEnum:
++		case MacAyeal3dIceFrontEnum:
++			for(int i=0;i<NUMVERTICESSEG;i++) sidlist[i]=nodes[i]->Sid();
++			return;
++#ifdef _HAVE_3D_
++		case PattynIceFrontEnum:
++		case StokesIceFrontEnum:
++			for(int i=0;i<NUMVERTICESQUA;i++) sidlist[i]=nodes[i]->Sid();
++			return;
++#endif
++		default:
++			_error_("Icefront type " << EnumToStringx(type) << " not supported yet");
++	}
++}
++/*}}}*/
++/*FUNCTION Icefront::GetNumberOfNodes{{{*/
++int Icefront::GetNumberOfNodes(void){
++
++	int type;
++	inputs->GetInputValue(&type,TypeEnum);
++
++	switch(type){
++		case MacAyeal2dIceFrontEnum:
++			return NUMVERTICESSEG;
++#ifdef _HAVE_3D_
++		case MacAyeal3dIceFrontEnum:
++			return NUMVERTICESSEG;
++		case PattynIceFrontEnum:
++			return NUMVERTICESQUA;
++		case StokesIceFrontEnum:
++			return NUMVERTICESQUA;
++#endif
++		default:
++			_error_("Icefront type " << EnumToStringx(type) << " not supported yet");
++	}
++
++}
++/*}}}*/
+ /*FUNCTION Icefront::PenaltyCreateKMatrix {{{*/
+ void  Icefront::PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs, IssmDouble kmax){
+ 	/*do nothing: */
+@@ -287,6 +334,57 @@
+ 	this->PenaltyCreateKMatrix(Jff,NULL,kmax);
+ }
+ /*}}}*/
++/*FUNCTION Icefront::SetwiseNodeConnectivity{{{*/
++void Icefront::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
++
++	/*Output */
++	int d_nz = 0;
++	int o_nz = 0;
++
++	/*Loop over all nodes*/
++	for(int i=0;i<this->GetNumberOfNodes();i++){
++
++		if(!flags[this->nodes[i]->Sid()]){
++
++			/*flag current node so that no other element processes it*/
++			flags[this->nodes[i]->Sid()]=true;
++
++			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
++			switch(set2_enum){
++				case FsetEnum:
++					if(nodes[i]->indexing.fsize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				case GsetEnum:
++					if(nodes[i]->indexing.gsize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				case SsetEnum:
++					if(nodes[i]->indexing.ssize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				default: _error_("not supported");
++			}
++		}
++	}
++
++	/*Assign output pointers: */
++	*pd_nz=d_nz;
++	*po_nz=o_nz;
++}
++/*}}}*/
+ /*FUNCTION Icefront::InAnalysis{{{*/
+ bool Icefront::InAnalysis(int in_analysis_type){
+ 	if (in_analysis_type==this->analysis_type)return true;
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.h	(revision 13914)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.h	(revision 13915)
+@@ -71,9 +71,12 @@
+ 		void  CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs);
+ 		void  CreatePVector(Vector<IssmDouble>* pf);
+ 		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");};
++		void  GetNodesSidList(int* sidlist);
++		int   GetNumberOfNodes(void);
+ 		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax){_error_("Not implemented yet");};
+ 		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
+ 		void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
++		void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
+ 		bool  InAnalysis(int analysis_type);
+ 		/*}}}*/
+ 		/*Pengrid management {{{*/
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp	(revision 13914)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp	(revision 13915)
+@@ -363,13 +363,79 @@
+ 	return;
+ }
+ /*}}}*/
++/*FUNCTION Riftfront::GetNodesSidList{{{*/
++void Riftfront::GetNodesSidList(int* sidlist){
++
++	_assert_(sidlist);
++	_assert_(nodes);
++
++	for(int i=0;i<NUMVERTICES;i++) sidlist[i]=nodes[i]->Sid();
++}
++/*}}}*/
++/*FUNCTION Riftfront::GetNumberOfNodes{{{*/
++int Riftfront::GetNumberOfNodes(void){
++
++	return NUMVERTICES;
++}
++/*}}}*/
+ /*FUNCTION Riftfront::InAnalysis{{{*/
+ bool Riftfront::InAnalysis(int in_analysis_type){
+ 	if (in_analysis_type==this->analysis_type) return true;
+ 	else return false;
+ }
+ /*}}}*/
++/*FUNCTION Riftfront::SetwiseNodeConnectivity{{{*/
++void Riftfront::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
++	/*Output */
++	int d_nz = 0;
++	int o_nz = 0;
++
++	/*Loop over all nodes*/
++	for(int i=0;i<NUMVERTICES;i++){
++
++		if(!flags[this->nodes[i]->Sid()]){
++
++			/*flag current node so that no other element processes it*/
++			flags[this->nodes[i]->Sid()]=true;
++
++			/*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
++			switch(set2_enum){
++				case FsetEnum:
++					if(nodes[i]->indexing.fsize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				case GsetEnum:
++					if(nodes[i]->indexing.gsize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				case SsetEnum:
++					if(nodes[i]->indexing.ssize){
++						if(this->nodes[i]->IsClone())
++						 o_nz += 1;
++						else
++						 d_nz += 1;
++					}
++					break;
++				default: _error_("not supported");
++			}
++		}
++	}
++
++	/*Assign output pointers: */
++	*pd_nz=d_nz;
++	*po_nz=o_nz;
++}
++/*}}}*/
++
+ /*Riftfront numerics*/
+ /*FUNCTION Riftfront::PenaltyCreateKMatrixDiagnosticHoriz {{{*/
+ ElementMatrix* Riftfront::PenaltyCreateKMatrixDiagnosticHoriz(IssmDouble kmax){
Index: /issm/oecreview/Archive/13393-13976/ISSM-13915-13916.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13915-13916.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13915-13916.diff	(revision 13980)
@@ -0,0 +1,112 @@
+Index: ../trunk-jpl/src/c/Container/Loads.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Loads.cpp	(revision 13915)
++++ ../trunk-jpl/src/c/Container/Loads.cpp	(revision 13916)
+@@ -52,7 +52,33 @@
+ 
+ }
+ /*}}}*/
+-/*FUNCTION Loads::NumberOfLoads{{{*/
++/*FUNCTION Loads::MaxNumNodes{{{*/
++int Loads::MaxNumNodes(int analysis_type){
++
++	int max=0;
++	int allmax;
++	int numnodes=0;
++
++	/*Now go through all loads, and get how many nodes they own, unless they are clone nodes: */
++	for(int i=0;i<this->Size();i++){
++
++		Load* load=dynamic_cast<Load*>(this->GetObjectByOffset(i));
++		if (load->InAnalysis(analysis_type)){
++			numnodes=load->GetNumberOfNodes();
++			if(numnodes>max)max=numnodes;
++		}
++	}
++
++	/*Grab max of all cpus: */
++#ifdef _HAVE_MPI_
++	MPI_Allreduce((void*)&max,(void*)&allmax,1,MPI_INT,MPI_MAX,IssmComm::GetComm());
++	max=allmax;
++#endif
++
++	return max;
++}
++/*}}}*/
++/*FUNCTION Loads::NumberOfLoads(){{{*/
+ int Loads::NumberOfLoads(void){
+ 
+ 	int localloads;
+@@ -72,6 +98,55 @@
+ 	return numberofloads;
+ }
+ /*}}}*/
++/*FUNCTION Loads::NumberOfLoads(int analysis){{{*/
++int Loads::NumberOfLoads(int analysis_type){
++
++	int localloads = 0;
++	int numberofloads;
++
++	/*Get number of local loads*/
++	for(int i=0;i<this->Size();i++){
++
++		Load* load=dynamic_cast<Load*>(this->GetObjectByOffset(i));
++
++		/*Check that this load corresponds to our analysis currently being carried out: */
++		if (load->InAnalysis(analysis_type)) localloads++;
++	}
++
++	/*figure out total number of loads combining all the cpus (no clones here)*/
++#ifdef _HAVE_MPI_
++	MPI_Reduce(&localloads,&numberofloads,1,MPI_INT,MPI_SUM,0,IssmComm::GetComm() );
++	MPI_Bcast(&numberofloads,1,MPI_INT,0,IssmComm::GetComm());
++#else
++	numberofloads=localloads;
++#endif
++
++	return numberofloads;
++}
++/*}}}*/
++/*FUNCTION Loads::Size(){{{*/
++int Loads::Size(void){
++
++	return this->DataSet::Size();
++}
++/*}}}*/
++/*FUNCTION Loads::Size(int analysis){{{*/
++int Loads::Size(int analysis_type){
++
++	int localloads = 0;
++
++	/*Get number of local loads*/
++	for(int i=0;i<this->Size();i++){
++
++		Load* load=dynamic_cast<Load*>(this->GetObjectByOffset(i));
++
++		/*Check that this load corresponds to our analysis currently being carried out: */
++		if (load->InAnalysis(analysis_type)) localloads++;
++	}
++
++	return localloads;
++}
++/*}}}*/
+ /*FUNCTION Loads::SetCurrentConfiguration{{{*/
+ void Loads::SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){
+ 
+Index: ../trunk-jpl/src/c/Container/Loads.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Loads.h	(revision 13915)
++++ ../trunk-jpl/src/c/Container/Loads.h	(revision 13916)
+@@ -25,8 +25,12 @@
+ 
+ 		/*numerics*/
+ 		void  Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
++		int   MaxNumNodes(int analysis);
+ 		int   NumberOfLoads(void);
++		int   NumberOfLoads(int analysis);
+ 		void  SetCurrentConfiguration(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
++		int   Size(int analysis);
++		int   Size(void);
+ 
+ };
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13916-13917.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13916-13917.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13916-13917.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/mesh/bamg.py
+===================================================================
+--- ../trunk-jpl/src/m/mesh/bamg.py	(revision 13916)
++++ ../trunk-jpl/src/m/mesh/bamg.py	(revision 13917)
+@@ -103,7 +103,7 @@
+ 				bamg_geometry.SubDomains=numpy.vstack((bamg_geometry.SubDomains,[2,count+1,1,1]))
+ 
+ 			#update counter
+-			count=+nods
++			count+=nods
+ 
+ 		#take care of rifts
+ 		if options.exist('rifts'):
Index: /issm/oecreview/Archive/13393-13976/ISSM-13917-13918.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13917-13918.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13917-13918.diff	(revision 13980)
@@ -0,0 +1,135 @@
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13917)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13918)
+@@ -408,11 +408,15 @@
+ 	int      i,j,k,index,offset,count;
+ 	int      configuration_type;
+ 	int      d_nz,o_nz;
+-	Element *element      = NULL;
+-	int     *head         = NULL;
+-	int     *next         = NULL;
+-	int     *count2offset = NULL;
+-	int     * sidlist     = NULL;
++	Element *element            = NULL;
++	Load    *load               = NULL;
++	int     *head_e             = NULL;
++	int     *next_e             = NULL;
++	int     *count2offset_e     = NULL;
++	int     *head_l             = NULL;
++	int     *next_l             = NULL;
++	int     *count2offset_l     = NULL;
++	int     *sidlist            = NULL;
+ 
+ 	/*output*/
+ 	int *d_nnz = NULL;
+@@ -428,16 +432,17 @@
+ 	int N                   = nodes->NumberOfDofs(configuration_type,set2enum);
+ 	int m                   = nodes->NumberOfDofsLocal(configuration_type,set1enum);
+ 	int n                   = nodes->NumberOfDofsLocal(configuration_type,set2enum);
+-	int numnodesperobject   = elements->MaxNumNodes();
++	int numnodesperelement  = elements->MaxNumNodes();
++	int numnodesperload     = loads->MaxNumNodes(configuration_type);
+ 
+ 	/*First, we are building chaining vectors so that we know what nodes are
+ 	 * connected to what elements. These vectors are such that:
+ 	 *   for(int i=head[id];i!=-1;i=next[i])
+ 	 * will loop over all the elements that are connected to the node number
+ 	 * id*/
+-	head         = xNew<int>(numnodes); for(i=0;i<numnodes;i++) head[i]=-1;
+-	next         = xNew<int>(elements->Size()*numnodesperobject);
+-	count2offset = xNew<int>(elements->Size()*numnodesperobject);
++	head_e         = xNew<int>(numnodes); for(i=0;i<numnodes;i++) head_e[i]=-1;
++	next_e         = xNew<int>(elements->Size()*numnodesperelement);
++	count2offset_e = xNew<int>(elements->Size()*numnodesperelement);
+ 
+ 	k=0;
+ 	for(i=0;i<elements->Size();i++){
+@@ -449,15 +454,39 @@
+ 			index = sidlist[j];
+ 			_assert_(index>=0 && index<numnodes);
+ 
+-			count2offset[k]=i;
+-			next[k]=head[index];
+-			head[index]=k++;
++			count2offset_e[k]=i;
++			next_e[k]=head_e[index];
++			head_e[index]=k++;
+ 		}
+-		for(j=0;j<numnodesperobject-element->GetNumberOfNodes();j++) k++;
++		for(j=0;j<numnodesperelement-element->GetNumberOfNodes();j++) k++;
+ 
+ 		xDelete<int>(sidlist);
+ 	}
+ 
++	/*Chain for loads*/
++	head_l         = xNew<int>(numnodes); for(i=0;i<numnodes;i++) head_l[i]=-1;
++	next_l         = xNew<int>(loads->Size(configuration_type)*numnodesperload);
++	count2offset_l = xNew<int>(loads->Size(configuration_type)*numnodesperload);
++	k=0;
++	for(i=0;i<loads->Size();i++){
++		load = dynamic_cast<Load*>(loads->GetObjectByOffset(i));
++		if(!load->InAnalysis(configuration_type)) continue;
++		sidlist = xNew<int>(load->GetNumberOfNodes());
++		load->GetNodesSidList(sidlist);
++
++		for(j=0;j<load->GetNumberOfNodes();j++){
++			index = sidlist[j];
++			_assert_(index>=0 && index<numnodes);
++
++			count2offset_l[k]=i;
++			next_l[k]=head_l[index];
++			head_l[index]=k++;
++		}
++		for(j=0;j<numnodesperload-load->GetNumberOfNodes();j++) k++;
++
++		xDelete<int>(sidlist);
++	}
++
+ 	/*OK now count number of dofs and flag each nodes for each node i*/
+ 	bool *flags                  = xNew<bool>(numnodes);
+ 	int  *d_connectivity         = xNewZeroInit<int>(numnodes);
+@@ -474,9 +503,9 @@
+ 			for(j=0;j<numnodes;j++) flags[j]=false;
+ 
+ 			/*Loop over elements that hold node number i*/
+-			_assert_(head[node->Sid()]!=-1);
+-			for(j=head[node->Sid()];j!=-1;j=next[j]){
+-				offset=count2offset[j];
++			_assert_(head_e[node->Sid()]!=-1 || head_l[node->Sid()]!=-1);
++			for(j=head_e[node->Sid()];j!=-1;j=next_e[j]){
++				offset=count2offset_e[j];
+ 				element=dynamic_cast<Element*>(elements->GetObjectByOffset(offset));
+ 				element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,set1enum,set2enum);
+ 				if(node->IsClone()){
+@@ -487,12 +516,27 @@
+ 					o_connectivity[node->Sid()]+=o_nz;
+ 				}
+ 			}
++			for(j=head_l[node->Sid()];j!=-1;j=next_l[j]){
++				offset=count2offset_l[j];
++				load=dynamic_cast<Load*>(loads->GetObjectByOffset(offset));
++				load->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,set1enum,set2enum);
++				if(node->IsClone()){
++					connectivity_clone[node->Sid()]+=d_nz+o_nz;
++				}
++				else{
++					d_connectivity[node->Sid()]+=d_nz;
++					o_connectivity[node->Sid()]+=o_nz;
++				}
++			}
+ 		}
+ 	}
+ 	xDelete<bool>(flags);
+-	xDelete<int>(count2offset);
+-	xDelete<int>(head);
+-	xDelete<int>(next);
++	xDelete<int>(count2offset_e);
++	xDelete<int>(head_e);
++	xDelete<int>(next_e);
++	xDelete<int>(count2offset_l);
++	xDelete<int>(head_l);
++	xDelete<int>(next_l);
+ 
+ 	/*sum over all cpus*/
+ 	#ifdef _HAVE_MPI_
Index: /issm/oecreview/Archive/13393-13976/ISSM-13918-13919.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13918-13919.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13918-13919.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/configs/config-discover.sh
+===================================================================
+--- ../trunk-jpl/configs/config-discover.sh	(revision 13918)
++++ ../trunk-jpl/configs/config-discover.sh	(revision 13919)
+@@ -21,6 +21,6 @@
+  --with-mumps-dir=$ISSM_DIR/externalpackages/petsc/install \
+  --with-tao-dir=$ISSM_DIR/externalpackages/tao/install \
+  --with-graphics-lib=/usr/lib64/libX11.so \
+- --with-cxxoptflags="-O3 -xS" \
++ --with-cxxoptflags="-O3 -xS -DMPICH_IGNORE_CXX_SEEK" \
+  --with-vendor=intel-discover
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13919-13920.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13919-13920.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13919-13920.diff	(revision 13980)
@@ -0,0 +1,14 @@
+Index: ../trunk-jpl/src/m/classes/clusters/discover.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 13919)
++++ ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 13920)
+@@ -105,7 +105,8 @@
+ 			 fprintf(fid,'#PBS -o %s.outlog \n',modelname);
+ 			 fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+-			 fprintf(fid,'module load comp/intel-10.1.023\n');
++			 fprintf(fid,'module purge\n');
++			 fprintf(fid,'module load comp/comp/intel-11.1.038\n');
+ 			 fprintf(fid,'module load mpi/impi-4.0.3.008\n');
+ 			 fprintf(fid,'module load lib/mkl-10.1.2.024\n\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n\n');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13920-13921.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13920-13921.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13920-13921.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/classes/clusters/discover.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 13920)
++++ ../trunk-jpl/src/m/classes/clusters/discover.m	(revision 13921)
+@@ -106,7 +106,7 @@
+ 			 fprintf(fid,'#PBS -e %s.errlog \n\n',modelname);
+ 			 fprintf(fid,'. /usr/share/modules/init/bash\n\n');
+ 			 fprintf(fid,'module purge\n');
+-			 fprintf(fid,'module load comp/comp/intel-11.1.038\n');
++			 fprintf(fid,'module load comp/intel-11.1.038\n');
+ 			 fprintf(fid,'module load mpi/impi-4.0.3.008\n');
+ 			 fprintf(fid,'module load lib/mkl-10.1.2.024\n\n');
+ 			 fprintf(fid,'export PATH="$PATH:."\n\n');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13921-13922.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13921-13922.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13921-13922.diff	(revision 13980)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test410.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.m	(revision 13921)
++++ ../trunk-jpl/test/NightlyRun/test410.m	(revision 13922)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-10,1e-10,1e-09,1e-10,1e-13,1e-10,1e-06};
++field_tolerances={1e-09,1e-09,1e-09,1e-10,1e-13,1e-10,1e-06};
+ field_values={...
+ 	(md.results.SteadystateSolution.Vx),...
+ 	(md.results.SteadystateSolution.Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test410.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.py	(revision 13921)
++++ ../trunk-jpl/test/NightlyRun/test410.py	(revision 13922)
+@@ -19,7 +19,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-10,1e-10,1e-09,1e-10,1e-13,1e-10,1e-06]
++field_tolerances=[1e-09,1e-09,1e-09,1e-10,1e-13,1e-10,1e-06]
+ field_values=[\
+ 	md.results['SteadystateSolution'][1]['Vx'],\
+ 	md.results['SteadystateSolution'][1]['Vy'],\
Index: /issm/oecreview/Archive/13393-13976/ISSM-13922-13923.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13922-13923.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13922-13923.diff	(revision 13980)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/src/wrappers/python/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13922)
++++ ../trunk-jpl/src/wrappers/python/Makefile.am	(revision 13923)
+@@ -32,6 +32,7 @@
+ 						ElementConnectivity.la\
+ 						EnumToString.la\
+ 						InterpFromMeshToMesh2d.la\
++						InterpFromGridToMesh.la\
+ 						MeshProfileIntersection.la\
+ 						NodeConnectivity.la\
+ 						StringToEnum.la\
+@@ -112,6 +113,10 @@
+ 												../InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h
+ InterpFromMeshToMesh2d_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
+ 
++InterpFromGridToMesh_la_SOURCES = ../InterpFromGridToMesh/InterpFromGridToMesh.cpp\
++												../InterpFromGridToMesh/InterpFromGridToMesh.h
++InterpFromGridToMesh_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB) $(MULTITHREADINGLIB)
++
+ MeshProfileIntersection_la_SOURCES = ../MeshProfileIntersection/MeshProfileIntersection.cpp\
+ 										../MeshProfileIntersection/MeshProfileIntersection.h
+ MeshProfileIntersection_la_LIBADD = ${deps} $(MPILIB) $(PETSCLIB)
+Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.cpp
+===================================================================
+--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.cpp	(revision 13922)
++++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.cpp	(revision 13923)
+@@ -47,10 +47,12 @@
+ 	MODULEBOOT();
+ 
+ 	/*checks on arguments on the matlab side: */
++	#ifdef _HAVE_MATLAB_MODULES_
+ 	if((nlhs!=NLHS) || (nrhs!=6 && nrhs!=7)){
+ 		InterpFromGridToMeshUsage();
+ 		_error_("usage. See above");
+ 	}
++	#endif
+ 
+ 	/*Input datasets: */
+ 	FetchData(&x,&x_rows,NULL,XHANDLE);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13923-13924.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13923-13924.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13923-13924.diff	(revision 13980)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/test/NightlyRun/test3015.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.py	(revision 13923)
++++ ../trunk-jpl/test/NightlyRun/test3015.py	(revision 13924)
+@@ -25,7 +25,7 @@
+ md.verbose=verbose('autodiff',True)
+ 
+ #setup autodiff parameters
+-index=0 #this is the scalar component we are checking against
++index=1 #this is the scalar component we are checking against
+ md.autodiff.independents=[\
+ 	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test3020.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.py	(revision 13923)
++++ ../trunk-jpl/test/NightlyRun/test3020.py	(revision 13924)
+@@ -26,7 +26,7 @@
+ md.diagnostic.restol=0.000001
+ 
+ #setup autodiff parameters
+-index=0 #this is the scalar component we are checking against
++index=1 #this is the scalar component we are checking against
+ md.autodiff.independents=[\
+ 	independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fos_forward_index',index)
+ 	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13924-13925.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13924-13925.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13924-13925.diff	(revision 13980)
@@ -0,0 +1,433 @@
+Index: ../trunk-jpl/src/c/Container/Loads.cpp
+===================================================================
+--- ../trunk-jpl/src/c/Container/Loads.cpp	(revision 13924)
++++ ../trunk-jpl/src/c/Container/Loads.cpp	(revision 13925)
+@@ -52,6 +52,33 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Loads::IsPenalty{{{*/
++bool Loads::IsPenalty(int analysis_type){
++
++	int ispenalty=0;
++	int allispenalty=0;
++
++	/*Now go through all loads, and get how many nodes they own, unless they are clone nodes: */
++	for(int i=0;i<this->Size();i++){
++
++		Load* load=dynamic_cast<Load*>(this->GetObjectByOffset(i));
++		if (load->InAnalysis(analysis_type)){
++			if(load->IsPenalty()) ispenalty++;
++		}
++	}
++
++	/*Grab sum of all cpus: */
++#ifdef _HAVE_MPI_
++	MPI_Allreduce((void*)&ispenalty,(void*)&allispenalty,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
++	ispenalty=allispenalty;
++#endif
++
++	if(ispenalty)
++	 return true;
++	else
++	 return false;
++}
++/*}}}*/
+ /*FUNCTION Loads::MaxNumNodes{{{*/
+ int Loads::MaxNumNodes(int analysis_type){
+ 
+Index: ../trunk-jpl/src/c/Container/Loads.h
+===================================================================
+--- ../trunk-jpl/src/c/Container/Loads.h	(revision 13924)
++++ ../trunk-jpl/src/c/Container/Loads.h	(revision 13925)
+@@ -25,6 +25,7 @@
+ 
+ 		/*numerics*/
+ 		void  Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters);
++		bool  IsPenalty(int analysis);
+ 		int   MaxNumNodes(int analysis);
+ 		int   NumberOfLoads(void);
+ 		int   NumberOfLoads(int analysis);
+Index: ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 13924)
++++ ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 13925)
+@@ -11,21 +11,28 @@
+ 	Vector<IssmDouble>* uf=NULL;
+ 
+ 	/*variables: */
+-	int i;
+-	int configuration_type;
+-	int fsize;
+-	IssmDouble* ug_serial=NULL;
++	int         configuration_type;
++	int         fsize;
++	IssmDouble *ug_serial = NULL;
++	bool        oldalloc  = true;
+ 
+ 	/*first figure out fsize: */
+ 	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 	fsize=nodes->NumberOfDofs(configuration_type,FsetEnum);
+ 
++	int    analysis_type;
++	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++	int flocalsize = nodes->NumberOfDofsLocal(analysis_type,FsetEnum);
++
+ 	if(fsize==0){
+ 		uf=NULL;
+ 	}
+ 	else{
+ 		/*allocate: */
+-		uf=new Vector<IssmDouble>(fsize);
++		if(oldalloc)
++		 uf=new Vector<IssmDouble>(fsize);
++		else
++		 uf=new Vector<IssmDouble>(flocalsize,fsize);
+ 
+ 		if(nodes->NumberOfNodes(configuration_type)){ 
+ 
+@@ -33,7 +40,7 @@
+ 			ug_serial=ug->ToMPISerial();
+ 
+ 			/*Go through all nodes, and ask them to retrieve values from ug, and plug them into uf: */
+-			for(i=0;i<nodes->Size();i++){
++			for(int i=0;i<nodes->Size();i++){
+ 
+ 				Node* node=(Node*)nodes->GetObjectByOffset(i);
+ 
+Index: ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp
+===================================================================
+--- ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13924)
++++ ../trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 13925)
+@@ -39,7 +39,7 @@
+ 	this->matrix=NewMat(M,N,sparsity,IssmComm::GetComm());
+ }
+ /*}}}*/
+-/*FUNCTION PetscMat::PetscMat(int M,int N, IssmDouble sparsity){{{*/
++/*FUNCTION PetscMat::PetscMat(int m,int n,int M,int N,int* d_nnz,int* o_nnz){{{*/
+ PetscMat::PetscMat(int m,int n,int M,int N,int* d_nnz,int* o_nnz){
+ 
+ 	MatCreate(IssmComm::GetComm(),&this->matrix);
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Icefront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Icefront.h	(revision 13924)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Icefront.h	(revision 13925)
+@@ -72,6 +72,7 @@
+ 		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
+ 		int   GetNumberOfNodes(void);
+ 		void  GetNodesSidList(int* sidlist);
++		bool  IsPenalty(void);
+ 		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
+ 		void  PenaltyCreatePVector(Vector<IssmDouble>*  pf, IssmDouble kmax);
+ 		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax);
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 13924)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 13925)
+@@ -341,6 +341,11 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Numericalflux::IsPenalty{{{*/
++bool Numericalflux::IsPenalty(void){
++	return false;
++}
++/*}}}*/
+ /*FUNCTION Numericalflux::PenaltyCreateKMatrix {{{*/
+ void  Numericalflux::PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,IssmDouble kmax){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp	(revision 13924)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp	(revision 13925)
+@@ -162,6 +162,11 @@
+ 	return NUMVERTICES;
+ }
+ /*}}}*/
++/*FUNCTION Penpair::IsPenalty{{{*/
++bool Penpair::IsPenalty(void){
++	return true;
++}
++/*}}}*/
+ /*FUNCTION Penpair::PenaltyCreateKMatrix {{{*/
+ void  Penpair::PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,IssmDouble kmax){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.h	(revision 13924)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.h	(revision 13925)
+@@ -79,6 +79,7 @@
+ 		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");};
+ 		void  GetNodesSidList(int* sidlist);
+ 		int   GetNumberOfNodes(void);
++		bool  IsPenalty(void);
+ 		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax){_error_("Not implemented yet");};
+ 		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
+ 		void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h	(revision 13924)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h	(revision 13925)
+@@ -66,6 +66,7 @@
+ 		void  GetNodesSidList(int* sidlist);
+ 		int   GetNumberOfNodes(void);
+ 		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");};
++		bool  IsPenalty(void);
+ 		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax){_error_("Not implemented yet");};
+ 		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
+ 		void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Penpair.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Penpair.h	(revision 13924)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Penpair.h	(revision 13925)
+@@ -58,6 +58,7 @@
+ 		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff);
+ 		void  GetNodesSidList(int* sidlist);
+ 		int   GetNumberOfNodes(void);
++		bool  IsPenalty(void);
+ 		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff,Matrix<IssmDouble>* Kfs,IssmDouble kmax);
+ 		void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
+ 		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax);
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Load.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Load.h	(revision 13924)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Load.h	(revision 13925)
+@@ -24,6 +24,7 @@
+ 
+ 		virtual       ~Load(){};
+ 		virtual void  Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0;
++		virtual bool  IsPenalty(void)=0;
+ 		virtual int   GetNumberOfNodes(void)=0;
+ 		virtual void  GetNodesSidList(int* sidlist)=0;
+ 		virtual void  SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0;
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp	(revision 13924)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp	(revision 13925)
+@@ -294,6 +294,11 @@
+ 	else return false;
+ }
+ /*}}}*/
++/*FUNCTION Pengrid::IsPenalty{{{*/
++bool Pengrid::IsPenalty(void){
++	return true;
++}
++/*}}}*/
+ /*FUNCTION Pengrid::SetwiseNodeConnectivity{{{*/
+ void Pengrid::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
+ 
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 13924)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 13925)
+@@ -317,6 +317,11 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Icefront::IsPenalty{{{*/
++bool Icefront::IsPenalty(void){
++	return false;
++}
++/*}}}*/
+ /*FUNCTION Icefront::PenaltyCreateKMatrix {{{*/
+ void  Icefront::PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs, IssmDouble kmax){
+ 	/*do nothing: */
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.h	(revision 13924)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Pengrid.h	(revision 13925)
+@@ -73,6 +73,7 @@
+ 		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");};
+ 		void  GetNodesSidList(int* sidlist);
+ 		int   GetNumberOfNodes(void);
++		bool  IsPenalty(void);
+ 		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax){_error_("Not implemented yet");};
+ 		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
+ 		void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
+Index: ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp	(revision 13924)
++++ ../trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp	(revision 13925)
+@@ -294,6 +294,11 @@
+ 
+ }
+ /*}}}*/
++/*FUNCTION Riftfront::IsPenalty{{{*/
++bool Riftfront::IsPenalty(void){
++	return true;
++}
++/*}}}*/
+ /*FUNCTION Riftfront::SetCurrentConfiguration {{{*/
+ void  Riftfront::SetCurrentConfiguration(Elements* elementsin,Loads* loadsin,Nodes* nodesin,Vertices* verticesin,Materials* materialsin,Parameters* parametersin){
+ 
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13924)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13925)
+@@ -352,7 +352,6 @@
+ 	Vector<IssmDouble> *pf   = NULL;
+ 	Vector<IssmDouble> *df   = NULL;
+ 
+-	//bool oldalloc=false;
+ 	bool oldalloc=true;
+ 
+ 	/*retrieve parameters: */
+@@ -368,38 +367,37 @@
+ 	numberofdofspernode=this->nodes->MaxNumDofs(configuration_type,GsetEnum);
+ 
+ 	if(oldalloc){
+-		Kff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
+-		Kfs=new Matrix<IssmDouble>(fsize,ssize,connectivity,numberofdofspernode);
+-		df =new Vector<IssmDouble>(fsize);
+-		pf =new Vector<IssmDouble>(fsize);
++		if(pKff) Kff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
++		if(pKfs) Kfs=new Matrix<IssmDouble>(fsize,ssize,connectivity,numberofdofspernode);
++		if(pdf)  df =new Vector<IssmDouble>(fsize);
++		if(ppf)  pf =new Vector<IssmDouble>(fsize);
+ 	}
+ 	else{
+-		/*Kff*/
+-		m=flocalsize; n=flocalsize; /*local  sizes*/
+-		M=fsize;      N=fsize;      /*global sizes*/
+-		this->MatrixNonzeros(&d_nnz,&o_nnz,FsetEnum,FsetEnum);
+-		Kff=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
+-		xDelete<int>(d_nnz);
+-		xDelete<int>(o_nnz);
+-
+-		/*Kfs*/
+-		m=flocalsize; n=slocalsize; /*local  sizes*/
+-		M=fsize;      N=ssize;      /*global sizes*/
+-		this->MatrixNonzeros(&d_nnz,&o_nnz,FsetEnum,SsetEnum);
+-		Kfs=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
+-		xDelete<int>(d_nnz);
+-		xDelete<int>(o_nnz);
+-
+-		/*Vectors*/
+-		df =new Vector<IssmDouble>(flocalsize,fsize);
+-		pf =new Vector<IssmDouble>(flocalsize,fsize);
++		if(pKff){
++			m=flocalsize; n=flocalsize; /*local  sizes*/
++			M=fsize;      N=fsize;      /*global sizes*/
++			this->MatrixNonzeros(&d_nnz,&o_nnz,FsetEnum,FsetEnum);
++			Kff=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
++			xDelete<int>(d_nnz);
++			xDelete<int>(o_nnz);
++		}
++		if(pKfs){
++			m=flocalsize; n=slocalsize; /*local  sizes*/
++			M=fsize;      N=ssize;      /*global sizes*/
++			this->MatrixNonzeros(&d_nnz,&o_nnz,FsetEnum,SsetEnum);
++			Kfs=new Matrix<IssmDouble>(m,n,M,N,d_nnz,o_nnz);
++			xDelete<int>(d_nnz);
++			xDelete<int>(o_nnz);
++		}
++		if(pdf) df =new Vector<IssmDouble>(flocalsize,fsize);
++		if(ppf) pf =new Vector<IssmDouble>(flocalsize,fsize);
+ 	}
+ 
+ 	/*Allocate output pointers*/
+-	*pKff = Kff;
+-	*pKfs = Kfs;
+-	*pdf  = df;
+-	*ppf  = pf;
++	if(pKff) *pKff = Kff;
++	if(pKfs) *pKfs = Kfs;
++	if(pdf)  *pdf  = df;
++	if(ppf)  *ppf  = pf;
+ }
+ /*}}}*/
+ void FemModel::MatrixNonzeros(int** pd_nnz,int** po_nnz,int set1enum,int set2enum){/*{{{*/
+@@ -769,7 +767,7 @@
+ 	Matrix<IssmDouble> *Kfs  = NULL;
+ 	Vector<IssmDouble> *pf   = NULL;
+ 	Vector<IssmDouble> *df   = NULL;
+-	IssmDouble          kmax;
++	IssmDouble          kmax = 0;
+ 
+ 	/*Display message*/
+ 	if(VerboseModule()) _pprintLine_("   Generating matrices");
+@@ -777,7 +775,30 @@
+ 	/*retrive parameters: */
+ 	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 
+-	/*Compute penalty free mstiffness matrix and load vector*/
++	/*First, we might need to do a dry run to get kmax if penalties are employed*/
++	if(loads->IsPenalty(configuration_type)){
++
++		/*Allocate Kff_temp*/
++		Matrix<IssmDouble> *Kff_temp = NULL;
++		this->AllocateSystemMatrices(&Kff_temp,NULL,NULL,NULL);
++
++		/*Get complete stiffness matrix without penalties*/
++		for (i=0;i<this->elements->Size();i++){
++			element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
++			element->CreateKMatrix(Kff_temp,NULL,NULL);
++		}
++		for (i=0;i<this->loads->Size();i++){
++			load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
++			if(load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff_temp,NULL);
++		}
++		Kff_temp->Assemble();
++
++		/*Now, figure out maximum value of stiffness matrix, so that we can penalize it correctly: */
++		kmax=Kff_temp->Norm(NORM_INF);
++		delete Kff_temp;
++	}
++
++	/*Allocate stiffness matrices and load vector*/
+ 	this->AllocateSystemMatrices(&Kff,&Kfs,&df,&pf);
+ 
+ 	/*Fill stiffness matrix from elements and loads */
+@@ -787,7 +808,7 @@
+ 	}
+ 	for (i=0;i<this->loads->Size();i++){
+ 		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+-		if (load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff,Kfs);
++		if(load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff,Kfs);
+ 	}
+ 
+ 	/*Fill right hand side vector, from elements and loads */
+@@ -797,31 +818,26 @@
+ 	}
+ 	for (i=0;i<this->loads->Size();i++){
+ 		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+-		if (load->InAnalysis(configuration_type)) load->CreatePVector(pf);
++		if(load->InAnalysis(configuration_type)) load->CreatePVector(pf);
+ 	}
+ 
+-	/*Assemble matrices (required to get kmax)*/
+-	Kff->Assemble();
+-	Kfs->Assemble();
+-	df->Assemble();
+-
+-	/*Now, figure out maximum value of stiffness matrix, so that we can penalize it correctly: */
+-	kmax=Kff->Norm(NORM_INF);
+-
+-	/*Now that we have kmax, deal with penalties (only in loads)*/
+-	for (i=0;i<this->loads->Size();i++){
+-		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+-		if (load->InAnalysis(configuration_type)) load->PenaltyCreateKMatrix(Kff,Kfs,kmax);
++	/*Now deal with penalties (only in loads)*/
++	if(loads->IsPenalty(configuration_type)){
++		for (i=0;i<this->loads->Size();i++){
++			load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
++			if(load->InAnalysis(configuration_type)) load->PenaltyCreateKMatrix(Kff,Kfs,kmax);
++		}
++		for (i=0;i<this->loads->Size();i++){
++			load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
++			if(load->InAnalysis(configuration_type)) load->PenaltyCreatePVector(pf,kmax);
++		}
+ 	}
+-	for (i=0;i<this->loads->Size();i++){
+-		load=dynamic_cast<Load*>(this->loads->GetObjectByOffset(i));
+-		if (load->InAnalysis(configuration_type)) load->PenaltyCreatePVector(pf,kmax);
+-	}
+ 
+ 	/*Assemble matrices and vector*/
+ 	Kff->Assemble();
+ 	Kfs->Assemble();
+ 	pf->Assemble();
++	df->Assemble();
+ 	//Kff->AllocationInfo();
+ 	//Kfs->AllocationInfo();
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13925-13926.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13925-13926.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13925-13926.diff	(revision 13980)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/test/Archives/Archive237.nc
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13926-13927.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13926-13927.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13926-13927.diff	(revision 13980)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/src/android/ISSM/jni/issmlib/libISSMCore.a
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13927-13928.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13927-13928.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13927-13928.diff	(revision 13980)
@@ -0,0 +1,23 @@
+Index: ../trunk-jpl/src/android/ISSM/jni/issmlib/include/fac.h
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/issmlib/include/fac.h	(revision 13927)
++++ ../trunk-jpl/src/android/ISSM/jni/issmlib/include/fac.h	(revision 13928)
+@@ -1,5 +0,0 @@
+-class fac
+-{
+-	public:
+-	long factorial(long n);
+-};
+Index: ../trunk-jpl/src/android/ISSM/jni/issmlib/Android.mk
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/issmlib/Android.mk	(revision 13927)
++++ ../trunk-jpl/src/android/ISSM/jni/issmlib/Android.mk	(revision 13928)
+@@ -1,6 +1,6 @@
+ LOCAL_PATH:= $(call my-dir)
+ include $(CLEAR_VARS)
+ LOCAL_MODULE    := libISSMCore
+-LOCAL_SRC_FILES := libISSMCore.a
+-LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
++LOCAL_SRC_FILES := ../../../../../lib/libISSMCore.a
++LOCAL_EXPORT_C_INCLUDES := ../../../../c/android/
+ include $(PREBUILT_STATIC_LIBRARY)
Index: /issm/oecreview/Archive/13393-13976/ISSM-13928-13929.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13928-13929.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13928-13929.diff	(revision 13980)
@@ -0,0 +1,4 @@
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13929-13930.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13929-13930.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13929-13930.diff	(revision 13980)
@@ -0,0 +1,31 @@
+Index: ../trunk-jpl/src/android/helloworld/ISSM/bin
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/bin	(revision 13929)
++++ ../trunk-jpl/src/android/helloworld/ISSM/bin	(revision 13930)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/bin
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++classes.dex
++com.*
+Index: ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm	(revision 13929)
++++ ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm	(revision 13930)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++*.class
+Index: ../trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app
+===================================================================
+--- ../trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app	(revision 13929)
++++ ../trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app	(revision 13930)
+
+Property changes on: ../trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1 ##
++*.class
Index: /issm/oecreview/Archive/13393-13976/ISSM-13930-13931.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13930-13931.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13930-13931.diff	(revision 13980)
@@ -0,0 +1,182 @@
+Index: ../trunk-jpl/src/android/ISSM/obj/local/armeabi/objs/FacLib/Main.o.d
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/obj/local/armeabi/objs/FacLib/Main.o.d	(revision 13930)
++++ ../trunk-jpl/src/android/ISSM/obj/local/armeabi/objs/FacLib/Main.o.d	(revision 13931)
+@@ -1,14 +0,0 @@
+-/Users/larour/issm-uci/trunk-jpl/src/android/ISSM/obj/local/armeabi/objs/FacLib/Main.o: \
+- /Users/larour/issm-uci/trunk-jpl/src/android/ISSM/jni/Main.cpp \
+- /Users/larour/issm-uci/trunk-jpl/src/android/ISSM/jni/./issmlib/include/fac.h \
+- /Users/larour/issm-uci/trunk-jpl/src/android/ISSM/jni/com_example_issm_FacLib.h \
+- /Users/larour/issm-uci/trunk-jpl/externalpackages/android/android-ndk/install/platforms/android-14/arch-arm/usr/include/jni.h \
+- /Users/larour/issm-uci/trunk-jpl/externalpackages/android/android-ndk/install/sources/cxx-stl/system/include/cstddef
+-
+-/Users/larour/issm-uci/trunk-jpl/src/android/ISSM/jni/./issmlib/include/fac.h:
+-
+-/Users/larour/issm-uci/trunk-jpl/src/android/ISSM/jni/com_example_issm_FacLib.h:
+-
+-/Users/larour/issm-uci/trunk-jpl/externalpackages/android/android-ndk/install/platforms/android-14/arch-arm/usr/include/jni.h:
+-
+-/Users/larour/issm-uci/trunk-jpl/externalpackages/android/android-ndk/install/sources/cxx-stl/system/include/cstddef:
+Index: ../trunk-jpl/src/android/ISSM/jni/com_example_issm_FacLib.h
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/com_example_issm_FacLib.h	(revision 13930)
++++ ../trunk-jpl/src/android/ISSM/jni/com_example_issm_FacLib.h	(revision 13931)
+@@ -1,21 +0,0 @@
+-/* DO NOT EDIT THIS FILE - it is machine generated */
+-#include <jni.h>
+-/* Header for class com_example_issm_FacLib */
+-
+-#ifndef _Included_com_example_issm_FacLib
+-#define _Included_com_example_issm_FacLib
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-/*
+- * Class:     com_example_issm_FacLib
+- * Method:    fac
+- * Signature: (J)J
+- */
+-JNIEXPORT jlong JNICALL Java_com_example_issm_FacLib_fac
+-  (JNIEnv *, jclass, jlong);
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif
+Index: ../trunk-jpl/src/android/ISSM/jni/issmlib/Android.mk
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/issmlib/Android.mk	(revision 13930)
++++ ../trunk-jpl/src/android/ISSM/jni/issmlib/Android.mk	(revision 13931)
+@@ -1,6 +1,6 @@
+ LOCAL_PATH:= $(call my-dir)
+ include $(CLEAR_VARS)
+ LOCAL_MODULE    := libISSMCore
+-LOCAL_SRC_FILES := ../../../../../lib/libISSMCore.a
++LOCAL_SRC_FILES := ../../../../c/libISSMCore.a
+ LOCAL_EXPORT_C_INCLUDES := ../../../../c/android/
+ include $(PREBUILT_STATIC_LIBRARY)
+Index: ../trunk-jpl/src/android/ISSM/jni/Main.cpp
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/Main.cpp	(revision 13930)
++++ ../trunk-jpl/src/android/ISSM/jni/Main.cpp	(revision 13931)
+@@ -1,8 +1,8 @@
+-#include "./issmlib/include/fac.h"
+-#include "com_example_issm_FacLib.h"
++#include "../../../c/android/fac.h"
++#include "com_example_issm_IssmJni.h"
+ #include <cstddef>
+ 
+-JNIEXPORT jlong JNICALL Java_com_example_issm_FacLib_fac(JNIEnv *env, jclass clazz, jlong n)
++JNIEXPORT jlong JNICALL Java_com_example_issm_IssmJni_fac(JNIEnv *env, jclass clazz, jlong n)
+ {
+ 	fac *f = new fac();
+ 	jlong result = (jlong) (f->factorial(n));
+Index: ../trunk-jpl/src/android/ISSM/jni/Android.mk
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/Android.mk	(revision 13930)
++++ ../trunk-jpl/src/android/ISSM/jni/Android.mk	(revision 13931)
+@@ -12,7 +12,7 @@
+ LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
+ LOCAL_CFLAGS := -Wno-psabi
+ LOCAL_LDLIBS := -llog -ldl
+-LOCAL_MODULE := FacLib
++LOCAL_MODULE := IssmJni
+ LOCAL_SRC_FILES := Main.cpp 
+ LOCAL_STATIC_LIBRARIES := libISSMCore
+ 
+Index: ../trunk-jpl/src/android/ISSM/jni/com_example_issm_IssmJni.h
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/com_example_issm_IssmJni.h	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/jni/com_example_issm_IssmJni.h	(revision 13931)
+@@ -0,0 +1,21 @@
++/* DO NOT EDIT THIS FILE - it is machine generated */
++#include <jni.h>
++/* Header for class com_example_issm_IssmJni */
++
++#ifndef _Included_com_example_issm_IssmJni
++#define _Included_com_example_issm_IssmJni
++#ifdef __cplusplus
++extern "C" {
++#endif
++/*
++ * Class:     com_example_issm_IssmJni
++ * Method:    fac
++ * Signature: (J)J
++ */
++JNIEXPORT jlong JNICALL Java_com_example_issm_IssmJni_fac
++  (JNIEnv *, jclass, jlong);
++
++#ifdef __cplusplus
++}
++#endif
++#endif
+Index: ../trunk-jpl/src/android/ISSM/src/com/example/issm/ISSM.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/src/com/example/issm/ISSM.java	(revision 13930)
++++ ../trunk-jpl/src/android/ISSM/src/com/example/issm/ISSM.java	(revision 13931)
+@@ -33,7 +33,7 @@
+ 		{
+ 			return;
+ 		}
+-		long result = FacLib.facIterative(Long.parseLong(input));
++		long result = IssmJni.facIterative(Long.parseLong(input));
+ 		this.output.setText("Result = " + result + "\n");
+ 	}
+ }
+Index: ../trunk-jpl/src/android/ISSM/src/com/example/issm/IssmJni.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/src/com/example/issm/IssmJni.java	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/src/com/example/issm/IssmJni.java	(revision 13931)
+@@ -0,0 +1,13 @@
++package com.example.issm;
++
++public class IssmJni
++{
++	public static native long fac(long n);
++	static {
++        System.loadLibrary("IssmJni");
++    }
++	public static long facIterative(long n)
++	{
++		return fac(n);
++	}
++}
+
+Property changes on: ../trunk-jpl/src/android/ISSM/src/com/example/issm/IssmJni.java
+___________________________________________________________________
+Added: svn:executable
+## -0,0 +1 ##
++*
+Index: ../trunk-jpl/src/android/ISSM/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/Makefile.am	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/Makefile.am	(revision 13931)
+@@ -0,0 +1,15 @@
++EXTRA_DIST =  AndroidManifest.xml  assets gen jni obj project.properties src Makefile.am bin ic_launcher-web.png libs proguard-project.txt res
++
++#Generate JNI library using the ndk-build capabilities:
++if SHAREDLIBS 	 	 
++deps = 	 	 
++else 	 	 
++deps = ../../c/libISSMCore.a 	 	 
++endif
++
++install-exec-am: all
++all: libs/armeabi/libIssmJni.so
++
++libs/armeabi/libIssmJni.so:  $(deps)
++	$(ANDROID_NDK_DIR)/ndk-build -C ./jni clean
++	$(ANDROID_NDK_DIR)/ndk-build -C ./jni
+Index: ../trunk-jpl/src/android/ISSM
+===================================================================
+--- ../trunk-jpl/src/android/ISSM	(revision 13930)
++++ ../trunk-jpl/src/android/ISSM	(revision 13931)
+
+Property changes on: ../trunk-jpl/src/android/ISSM
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,4 ##
++Makefile.in
++Makefile
++libs
++obj
Index: /issm/oecreview/Archive/13393-13976/ISSM-13931-13932.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13931-13932.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13931-13932.diff	(revision 13980)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/android/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/android/Makefile.am	(revision 0)
++++ ../trunk-jpl/src/android/Makefile.am	(revision 13932)
+@@ -0,0 +1,2 @@
++EXTRA_DIST =  Factorial ISSM_App  Makefile.am helloworld issm-android-inputfiles two-libs
++SUBDIRS = ISSM
+Index: ../trunk-jpl/src/android
+===================================================================
+--- ../trunk-jpl/src/android	(revision 13931)
++++ ../trunk-jpl/src/android	(revision 13932)
+
+Property changes on: ../trunk-jpl/src/android
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,2 ##
++Makefile.in
++Makefile
Index: /issm/oecreview/Archive/13393-13976/ISSM-13932-13933.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13932-13933.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13932-13933.diff	(revision 13980)
@@ -0,0 +1,18 @@
+Index: ../trunk-jpl/src/android/ISSM/src/com/example/issm/FacLib.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/src/com/example/issm/FacLib.java	(revision 13932)
++++ ../trunk-jpl/src/android/ISSM/src/com/example/issm/FacLib.java	(revision 13933)
+@@ -1,13 +0,0 @@
+-package com.example.issm;
+-
+-public class FacLib
+-{
+-	public static native long fac(long n);
+-	static {
+-        System.loadLibrary("FacLib");
+-    }
+-	public static long facIterative(long n)
+-	{
+-		return fac(n);
+-	}
+-}
Index: /issm/oecreview/Archive/13393-13976/ISSM-13933-13934.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13933-13934.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13933-13934.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/test/NightlyRun/runme.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.py	(revision 13933)
++++ ../trunk-jpl/test/NightlyRun/runme.py	(revision 13934)
+@@ -49,7 +49,7 @@
+ 
+ 	#Process options
+ 	#GET benchmark {{{
+-	if not ismember(benchmark,['all','nightly','ismip','eismint','thermal','mesh','validation','tranforcing']):
++	if not ismember(benchmark,['all','nightly','ismip','eismint','thermal','mesh','validation','tranforcing','adolc']):
+ 		print "runme warning: benchmark '%s' not supported, defaulting to test 'nightly'." % benchmark
+ 		benchmark='nightly'
+ 	# }}}
+@@ -106,6 +106,8 @@
+ 		test_ids=test_ids.intersection(set(range(1301,1400)))
+ 	elif strcmpi(benchmark,'mesh'):
+ 		test_ids=test_ids.intersection(set(range(1401,1500)))
++	elif strcmpi(benchmark,'adolc'):
++		test_ids=test_ids.intersection(set(range(3001,3020)))
+ 	elif strcmpi(benchmark,'validation'):
+ 		test_ids=test_ids.intersection(set(range(1001,2000)))
+ 	elif strcmpi(benchmark,'tranforcing'):
Index: /issm/oecreview/Archive/13393-13976/ISSM-13934-13935.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13934-13935.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13934-13935.diff	(revision 13980)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/m4/issm_options.m4
+===================================================================
+--- ../trunk-jpl/m4/issm_options.m4	(revision 13934)
++++ ../trunk-jpl/m4/issm_options.m4	(revision 13935)
+@@ -1317,20 +1317,29 @@
+ 	dnl }}}
+ 	dnl with-android{{{
+ 	AC_ARG_WITH([android],
+-		AS_HELP_STRING([--with-android = YES], [compile with android capabilities (default is no)]),
++		AS_HELP_STRING([--with-android = EXE], [compile with android capabilities (default is no, alternatives are exe and jni)]),
+ 		[ANDROID=$withval],[ANDROID=no]) 
+ 	AC_MSG_CHECKING(for android capability compilation)
+ 
+-	if test "x$ANDROID" = "xyes"; then
++	if test "x$ANDROID" = "xjni"; then
+ 
+ 		dnl defaults
+-		HAVE_ANDROID=yes
++		HAVE_ANDROID=jni
+ 
+ 		AC_DEFINE([_HAVE_ANDROID_],[1],[with android capability])
++	elif test "x$ANDROID" = "xexe"; then
++		dnl defaults
++		HAVE_ANDROID=exe
++
++		AC_DEFINE([_HAVE_ANDROID_],[1],[with android capability])
++	elif test "x$ANDROID" = "xno"; then
++		HAVE_ANDROID=no
+ 	else
+-		HAVE_ANDROID=no
++	  AC_MSG_ERROR([--with-android should be either no, exe or jni])
+ 	fi
+-	AM_CONDITIONAL([ANDROID], [test x$HAVE_ANDROID = xyes])
++	AM_CONDITIONAL([ANDROID], [test x$HAVE_ANDROID != xno])
++	AM_CONDITIONAL([ANDROIDJNI], [test x$HAVE_ANDROID = xjni])
++	AM_CONDITIONAL([ANDROIDEXE], [test x$HAVE_ANDROID = xexe])
+ 	AC_MSG_RESULT($HAVE_ANDROID)
+ 	dnl }}}
+ 	dnl with-3d{{{
Index: /issm/oecreview/Archive/13393-13976/ISSM-13935-13936.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13935-13936.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13935-13936.diff	(revision 13980)
@@ -0,0 +1,56 @@
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13935)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13936)
+@@ -928,7 +928,15 @@
+ #}}}
+ 
+ #Executable {{{
++if ANDROID
++if ANDROIDEXE
+ bin_PROGRAMS = issm 
++else
++bin_PROGRAMS = 
++endif
++else
++bin_PROGRAMS = issm 
++endif
+ 
+ #Standard libraries
+ LDADD = ./libISSMCore.a ./libISSMOverload.a
+Index: ../trunk-jpl/src/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/Makefile.am	(revision 13935)
++++ ../trunk-jpl/src/Makefile.am	(revision 13936)
+@@ -1,2 +1,5 @@
+ EXTRA_DIST =  perl pro
+ SUBDIRS = c m wrappers 
++if ANDROID
++SUBDIRS += android
++endif
+Index: ../trunk-jpl/configs/config-arm-linux.sh
+===================================================================
+--- ../trunk-jpl/configs/config-arm-linux.sh	(revision 13935)
++++ ../trunk-jpl/configs/config-arm-linux.sh	(revision 13936)
+@@ -5,7 +5,7 @@
+     --build="i386-apple-darwin10.8.0" \
+     --host="arm-linux-androideabi" \
+     --enable-shared \
+-    --with-android \
++    --with-android=jni\
+     --without-fortran \
+ 	--without-wrappers \
+ 	--without-kriging \
+Index: ../trunk-jpl/configure.ac
+===================================================================
+--- ../trunk-jpl/configure.ac	(revision 13935)
++++ ../trunk-jpl/configure.ac	(revision 13936)
+@@ -38,6 +38,8 @@
+ 			src/wrappers/Makefile
+ 			src/wrappers/python/Makefile
+ 			src/wrappers/matlab/Makefile
++			src/android/Makefile
++			src/android/ISSM/Makefile
+ 			src/m/Makefile])
+ 
+ #End of configure.ac
Index: /issm/oecreview/Archive/13393-13976/ISSM-13936-13937.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13936-13937.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13936-13937.diff	(revision 13980)
@@ -0,0 +1,149 @@
+Index: ../trunk-jpl/src/m/io/savevars.py
+===================================================================
+--- ../trunk-jpl/src/m/io/savevars.py	(revision 0)
++++ ../trunk-jpl/src/m/io/savevars.py	(revision 13937)
+@@ -0,0 +1,61 @@
++import shelve
++import os.path
++
++def savevars(*args):
++	"""
++	SAVEVARS - function to save variables to a file.
++
++	This function saves one or more variables to a file.  The names of the variables
++	must be supplied.  If more than one variable is specified, it may be done with
++	lists of names and values or a dictionary of name:value pairs.  All the variables
++	in the workspace may be saved by specifying the globals() dictionary, but this
++	may include a lot of extraneous data.
++
++	Usage:
++	   savevars('a',a,'file.dat')
++	   savevars(['a','b'],[a,b],'file.dat')
++	   savevars({'a':a,'b':b},'file.dat')
++	   savevars(globals(),'file.dat')
++
++	"""
++
++	nvdict={}
++	filename=''
++
++	if   isinstance(args[0],(str,unicode)):    # (name,value,filename)
++		nvdict[args[0]]=args[1]
++		if len(args) >= 3 and isinstance(args[2],(str,unicode)):
++			filename=args[2]
++
++	elif isinstance(args[0],list):    # ([names],[values],filename)
++		for name,value in zip(args[0],args[1]):
++			nvdict[name]=value
++		if len(args) >= 3 and isinstance(args[2],(str,unicode)):
++			filename=args[2]
++
++	elif isinstance(args[0],dict):    # ({names:values},filename)
++		nvdict=args[0]
++		if len(args) >= 2 and isinstance(args[1],(str,unicode)):
++			filename=args[1]
++
++	else:
++		raise TypeError("Unrecognized input arguments.")
++
++	if not filename:
++		filename='/tmp/shelve.out'
++	if os.path.exists(filename):
++		print "Shelving variables to existing file '%s'." % filename
++	else:
++		print "Shelving variables to new file '%s'." % filename
++
++	my_shelf = shelve.open(filename,'c') # 'c' for create if not exist, else 'n' for new
++
++	for name,value in nvdict.iteritems():
++		try:
++			my_shelf[name] = value
++			print "Variable '%s' shelved." % name
++		except TypeError:
++			print "Variable '%s' not shelved." % name
++
++	my_shelf.close()
++
+Index: ../trunk-jpl/src/m/io/loadvars.py
+===================================================================
+--- ../trunk-jpl/src/m/io/loadvars.py	(revision 0)
++++ ../trunk-jpl/src/m/io/loadvars.py	(revision 13937)
+@@ -0,0 +1,78 @@
++import shelve
++import os.path
++
++def loadvars(*args):
++	"""
++	LOADVARS - function to load variables to a file.
++
++	This function loads one or more variables from a file.  The names of the variables
++	must be supplied.  If more than one variable is specified, it may be done with
++	a list of names or a dictionary of name as keys.  The output type will correspond
++	to the input type.  All the variables in the file may be loaded by specifying an
++	empty dictionary.
++
++	Usage:
++	   a=loadvars('a','file.dat')
++	   [a,b]=loadvars(['a','b'],'file.dat')
++	   nvdict=loadvars({'a':None,'b':None},'file.dat')
++	   nvdict=loadvars({},'file.dat')
++
++	"""
++
++	nvdict={}
++	filename=''
++
++	if   isinstance(args[0],(str,unicode)):    # (name,filename)
++		nvdict[args[0]]=None
++		if len(args) >= 2 and isinstance(args[1],(str,unicode)):
++			filename=args[1]
++
++	elif isinstance(args[0],list):    # ([names],filename)
++		for name in args[0]:
++			nvdict[name]=None
++		if len(args) >= 2 and isinstance(args[1],(str,unicode)):
++			filename=args[1]
++
++	elif isinstance(args[0],dict):    # ({names:values},filename)
++		nvdict=args[0]
++		if len(args) >= 2 and isinstance(args[1],(str,unicode)):
++			filename=args[1]
++
++	else:
++		raise TypeError("Unrecognized input arguments.")
++
++	if not filename:
++		filename='/tmp/shelve.out'
++	if os.path.exists(filename):
++		print "Loading variables from file '%s'." % filename
++	else:
++		raise IOError("File '%s' not found." % filename)
++
++	my_shelf = shelve.open(filename,'r') # 'r' for read-only
++
++	if nvdict:
++		for name in nvdict.iterkeys():
++			try:
++				nvdict[name] = my_shelf[name]
++				print "Variable '%s' loaded." % name
++			except KeyError:
++				value = None
++				print "Variable '%s' not found." % name
++
++	else:
++		for name in my_shelf.iterkeys():
++			nvdict[name] = my_shelf[name]
++			print "Variable '%s' loaded." % name
++
++	my_shelf.close()
++
++	if   isinstance(args[0],(str,unicode)):    # (name,filename)
++		return nvdict[args[0]]
++
++	elif isinstance(args[0],list):    # ([names],filename)
++		value=[nvdict[name] for name in args[0]]
++		return value
++
++	elif isinstance(args[0],dict):    # ({names:values},filename)
++		return nvdict
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13937-13938.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13937-13938.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13937-13938.diff	(revision 13980)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 13937)
++++ ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 13938)
+@@ -14,7 +14,7 @@
+ 	int         configuration_type;
+ 	int         fsize;
+ 	IssmDouble *ug_serial = NULL;
+-	bool        oldalloc  = true;
++	bool        oldalloc  = false;
+ 
+ 	/*first figure out fsize: */
+ 	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13937)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13938)
+@@ -352,7 +352,7 @@
+ 	Vector<IssmDouble> *pf   = NULL;
+ 	Vector<IssmDouble> *df   = NULL;
+ 
+-	bool oldalloc=true;
++	bool oldalloc=false;
+ 
+ 	/*retrieve parameters: */
+ 	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13938-13939.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13938-13939.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13938-13939.diff	(revision 13980)
@@ -0,0 +1,216 @@
+Index: ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp	(revision 13938)
++++ ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp	(revision 13939)
+@@ -1,47 +0,0 @@
+-/*!\file CreateJacobianMatrixx
+- * \brief: create system matrices (stiffness matrix, loads vector)
+- */
+-
+-#include "./CreateJacobianMatrixx.h"
+-#include "../../shared/shared.h"
+-#include "../../include/include.h"
+-#include "../../io/io.h"
+-#include "../../toolkits/toolkits.h"
+-#include "../../EnumDefinitions/EnumDefinitions.h"
+-
+-void CreateJacobianMatrixx(Matrix<IssmDouble>** pJff,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,IssmDouble kmax){
+-
+-	int      i,connectivity;
+-	int      numberofdofspernode;
+-	int      fsize,configuration_type;
+-	Element *element = NULL;
+-	Load    *load    = NULL;
+-	Matrix<IssmDouble>*  Jff     = NULL;
+-
+-	/*Checks*/
+-	_assert_(nodes && elements);
+-
+-	/*Recover some parameters*/
+-	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+-	parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
+-	fsize=nodes->NumberOfDofs(configuration_type,FsetEnum);
+-	numberofdofspernode=nodes->MaxNumDofs(configuration_type,GsetEnum);
+-
+-	/*Initialize Jacobian Matrix*/
+-	Jff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
+-
+-	/*Create and assemble matrix*/
+-	for(i=0;i<elements->Size();i++){
+-		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+-		element->CreateJacobianMatrix(Jff);
+-	}
+-	for (i=0;i<loads->Size();i++){
+-		load=(Load*)loads->GetObjectByOffset(i);
+-		if(load->InAnalysis(configuration_type)) load->CreateJacobianMatrix(Jff);
+-		if(load->InAnalysis(configuration_type)) load->PenaltyCreateJacobianMatrix(Jff,kmax);
+-	}
+-	Jff->Assemble();
+-
+-	/*Assign output pointer*/
+-	*pJff=Jff;
+-}
+Index: ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.h	(revision 13938)
++++ ../trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.h	(revision 13939)
+@@ -1,14 +0,0 @@
+-/*!\file:  CreateJacobianMatrixx.h
+- * \brief header file for degree of freedoms distribution routines.
+- */ 
+-
+-#ifndef _CREATEJACOBIANMATRIXX_H
+-#define _CREATEJACOBIANMATRIXX_H
+-
+-#include "../../Container/Container.h"
+-#include "../../classes/objects/objects.h"
+-
+-/* local prototypes: */
+-void CreateJacobianMatrixx(Matrix<IssmDouble>** pJff,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,IssmDouble kmax);
+-
+-#endif  /* _CREATEJACOBIANMATRIXX_H */
+Index: ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 13938)
++++ ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 13939)
+@@ -14,7 +14,7 @@
+ 	int         configuration_type;
+ 	int         fsize;
+ 	IssmDouble *ug_serial = NULL;
+-	bool        oldalloc  = false;
++	bool        oldalloc  = true;
+ 
+ 	/*first figure out fsize: */
+ 	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+Index: ../trunk-jpl/src/c/modules/modules.h
+===================================================================
+--- ../trunk-jpl/src/c/modules/modules.h	(revision 13938)
++++ ../trunk-jpl/src/c/modules/modules.h	(revision 13939)
+@@ -90,7 +90,6 @@
+ #include "./Solverx/Solverx.h"
+ #include "./SpcNodesx/SpcNodesx.h"
+ #include "./SurfaceAreax/SurfaceAreax.h"
+-#include "./CreateJacobianMatrixx/CreateJacobianMatrixx.h"
+ #include "./TriaSearchx/TriaSearchx.h"
+ #include "./TriMeshx/TriMeshx.h"
+ #include "./TriMeshProcessRiftsx/TriMeshProcessRiftsx.h"
+Index: ../trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp	(revision 13938)
++++ ../trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp	(revision 13939)
+@@ -19,6 +19,7 @@
+ 	int         Kfsm,Kfsn;
+ 	int         global_m,global_n;
+ 	bool        fromlocalsize = true;
++	bool        oldalloc  = true;
+ 
+ 	if(VerboseModule()) _pprintLine_("   Dirichlet lifting applied to load vector");
+ 
+@@ -30,7 +31,11 @@
+ 
+ 		/*pf = pf - Kfs * y_s;*/
+ 		Kfs->GetLocalSize(&Kfsm,&Kfsn);
+-		Kfsy_s=new Vector<IssmDouble>(Kfsm,fromlocalsize);
++		if(oldalloc)
++		 Kfsy_s=new Vector<IssmDouble>(Kfsm,fromlocalsize);
++		else
++		 Kfsy_s=new Vector<IssmDouble>(Kfsm,global_m);
++
+ 		if (flag_ys0){
+ 
+ 			/*Create y_s0, full of 0: */
+Index: ../trunk-jpl/src/c/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/c/Makefile.am	(revision 13938)
++++ ../trunk-jpl/src/c/Makefile.am	(revision 13939)
+@@ -298,8 +298,6 @@
+ 					./modules/EnumToStringx/EnumToStringx.h\
+ 					./modules/StringToEnumx/StringToEnumx.cpp\
+ 					./modules/StringToEnumx/StringToEnumx.h\
+-					./modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp\
+-					./modules/CreateJacobianMatrixx/CreateJacobianMatrixx.h\
+ 					./modules/ConstraintsStatex/ConstraintsStatex.cpp\
+ 					./modules/ConstraintsStatex/ConstraintsStatex.h\
+ 					./modules/ConstraintsStatex/ConstraintsStateLocal.h\
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13938)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13939)
+@@ -352,7 +352,7 @@
+ 	Vector<IssmDouble> *pf   = NULL;
+ 	Vector<IssmDouble> *df   = NULL;
+ 
+-	bool oldalloc=false;
++	bool oldalloc=true;
+ 
+ 	/*retrieve parameters: */
+ 	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+@@ -537,9 +537,9 @@
+ 	xDelete<int>(next_l);
+ 
+ 	/*sum over all cpus*/
+-	#ifdef _HAVE_MPI_
++#ifdef _HAVE_MPI_
+ 	MPI_Allreduce((void*)connectivity_clone,(void*)all_connectivity_clone,numnodes,MPI_INT,MPI_SUM,IssmComm::GetComm());
+-	#endif
++#endif
+ 	xDelete<int>(connectivity_clone);
+ 
+ 	if(set1enum==FsetEnum){
+@@ -573,6 +573,44 @@
+ 	*po_nnz=o_nnz;
+ 
+ }/*}}}*/
++void FemModel::CreateJacobianMatrixx(Matrix<IssmDouble>** pJff,IssmDouble kmax){/*{{{*/
++
++	int      i,connectivity;
++	int      numberofdofspernode;
++	int      fsize,configuration_type;
++	Element *element = NULL;
++	Load    *load    = NULL;
++	Matrix<IssmDouble>* Jff = NULL;
++
++	/*Checks*/
++	_assert_(nodes && elements);
++
++	/*Recover some parameters*/
++	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
++	parameters->FindParam(&connectivity,MeshAverageVertexConnectivityEnum);
++	fsize=nodes->NumberOfDofs(configuration_type,FsetEnum);
++	numberofdofspernode=nodes->MaxNumDofs(configuration_type,GsetEnum);
++
++	/*Initialize Jacobian Matrix*/
++	this->AllocateSystemMatrices(&Jff,NULL,NULL,NULL);
++	Jff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
++
++	/*Create and assemble matrix*/
++	for(i=0;i<elements->Size();i++){
++		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
++		element->CreateJacobianMatrix(Jff);
++	}
++	for (i=0;i<loads->Size();i++){
++		load=(Load*)loads->GetObjectByOffset(i);
++		if(load->InAnalysis(configuration_type)) load->CreateJacobianMatrix(Jff);
++		if(load->InAnalysis(configuration_type)) load->PenaltyCreateJacobianMatrix(Jff,kmax);
++	}
++	Jff->Assemble();
++
++	/*Assign output pointer*/
++	*pJff=Jff;
++
++}/*}}}*/
+ int  FemModel::UpdateVertexPositionsx(void){ /*{{{*/
+ 
+ 	int     i;
+Index: ../trunk-jpl/src/c/classes/FemModel.h
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.h	(revision 13938)
++++ ../trunk-jpl/src/c/classes/FemModel.h	(revision 13939)
+@@ -52,6 +52,7 @@
+ 
+ 		/*Methods:*/
+ 		void AllocateSystemMatrices(Matrix<IssmDouble>** pKff,Matrix<IssmDouble>** pKfs,Vector<IssmDouble>** pdf,Vector<IssmDouble>** ppf);
++		void CreateJacobianMatrixx(Matrix<IssmDouble>** pJff,IssmDouble kmax);
+ 		void Echo();
+ 		void InitFromFiles(char* rootpath, char* inputfilename, char* outputfilename, char* petscfilename, char* lockfilename, const int solution_type,const int* analyses,const int nummodels);
+ 		void MatrixNonzeros(int** pd_nnz,int** po_nnz,int set1enum,int set2enum);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13939-13940.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13939-13940.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13939-13940.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/solvers/solver_newton.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solvers/solver_newton.cpp	(revision 13939)
++++ ../trunk-jpl/src/c/solvers/solver_newton.cpp	(revision 13940)
+@@ -89,7 +89,7 @@
+ 		pJf=pf->Duplicate(); Kff->MatMult(uf,pJf); xdelete(&Kff);
+ 		pJf->Scale(-1.0); pJf->AXPY(pf,+1.0);     xdelete(&pf);
+ 
+-		CreateJacobianMatrixx(&Jff,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,kmax);
++		femmodel->CreateJacobianMatrixx(&Jff,kmax);
+ 		Solverx(&duf,Jff,pJf,NULL,NULL,femmodel->parameters); xdelete(&Jff); xdelete(&pJf);
+ 		uf->AXPY(duf, 1.0); xdelete(&duf);
+ 		Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);xdelete(&ys);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13940-13941.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13940-13941.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13940-13941.diff	(revision 13980)
@@ -0,0 +1,110 @@
+Index: ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 13940)
++++ ../trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 13941)
+@@ -14,7 +14,7 @@
+ 	int         configuration_type;
+ 	int         fsize;
+ 	IssmDouble *ug_serial = NULL;
+-	bool        oldalloc  = true;
++	bool        oldalloc  = false;
+ 
+ 	/*first figure out fsize: */
+ 	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+Index: ../trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp	(revision 13940)
++++ ../trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp	(revision 13941)
+@@ -19,7 +19,7 @@
+ 	int         Kfsm,Kfsn;
+ 	int         global_m,global_n;
+ 	bool        fromlocalsize = true;
+-	bool        oldalloc  = true;
++	bool        oldalloc  = false;
+ 
+ 	if(VerboseModule()) _pprintLine_("   Dirichlet lifting applied to load vector");
+ 
+Index: ../trunk-jpl/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.cpp	(revision 13940)
++++ ../trunk-jpl/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.cpp	(revision 13941)
+@@ -20,12 +20,21 @@
+ 	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+ 	ssize=nodes->NumberOfDofs(configuration_type,SsetEnum);
+ 
++	int analysis_type;
++	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
++	int slocalsize = nodes->NumberOfDofsLocal(analysis_type,SsetEnum);
++
++	bool oldalloc = false;
++
+ 	if(ssize==0){
+ 		ys=NULL;
+ 	}
+ 	else{
+ 		/*allocate: */
+-		ys=new Vector<IssmDouble>(ssize);
++		if(oldalloc)
++		 ys=new Vector<IssmDouble>(ssize);
++		else
++		 ys=new Vector<IssmDouble>(slocalsize,ssize);
+ 
+ 		if(nodes->NumberOfNodes(configuration_type)){ 
+ 
+Index: ../trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp
+===================================================================
+--- ../trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp	(revision 13940)
++++ ../trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp	(revision 13941)
+@@ -11,23 +11,24 @@
+ 
+ void CreateNodalConstraintsx( Vector<IssmDouble>** pys, Nodes* nodes,int configuration_type){
+ 
+-	int i;
++	bool  oldalloc  = false;
+ 
+-	/*intermediary: */
+-	int  numberofdofs;
+-
+ 	/*output: */
+ 	Vector<IssmDouble>* ys=NULL;
+ 
+ 	/*figure out how many dofs we have: */
+-	numberofdofs=nodes->NumberOfDofs(configuration_type,SsetEnum);
++	int ssize=nodes->NumberOfDofs(configuration_type,SsetEnum);
++	int slocalsize = nodes->NumberOfDofsLocal(configuration_type,SsetEnum);
+ 
+ 	/*allocate:*/
+-	ys=new Vector<IssmDouble>(numberofdofs);
++	if(oldalloc)
++	 ys=new Vector<IssmDouble>(ssize);
++	else
++	 ys=new Vector<IssmDouble>(slocalsize,ssize);
+ 
+ 	/*go through all nodes, and for the ones corresponding to this configuration_type, fill the 
+ 	 * constraints vector with the constraint values: */
+-	for (i=0;i<nodes->Size();i++){
++	for(int i=0;i<nodes->Size();i++){
+ 		Node* node=(Node*)nodes->GetObjectByOffset(i);
+ 		if (node->InAnalysis(configuration_type)){
+ 			node->CreateNodalConstraints(ys);
+Index: ../trunk-jpl/src/c/classes/FemModel.cpp
+===================================================================
+--- ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13940)
++++ ../trunk-jpl/src/c/classes/FemModel.cpp	(revision 13941)
+@@ -352,7 +352,7 @@
+ 	Vector<IssmDouble> *pf   = NULL;
+ 	Vector<IssmDouble> *df   = NULL;
+ 
+-	bool oldalloc=true;
++	bool oldalloc=false;
+ 
+ 	/*retrieve parameters: */
+ 	this->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+@@ -593,7 +593,6 @@
+ 
+ 	/*Initialize Jacobian Matrix*/
+ 	this->AllocateSystemMatrices(&Jff,NULL,NULL,NULL);
+-	Jff=new Matrix<IssmDouble>(fsize,fsize,connectivity,numberofdofspernode);
+ 
+ 	/*Create and assemble matrix*/
+ 	for(i=0;i<elements->Size();i++){
Index: /issm/oecreview/Archive/13393-13976/ISSM-13941-13942.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13941-13942.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13941-13942.diff	(revision 13980)
@@ -0,0 +1,40 @@
+Index: ../trunk-jpl/src/m/io/loadmodel.py
+===================================================================
+--- ../trunk-jpl/src/m/io/loadmodel.py	(revision 0)
++++ ../trunk-jpl/src/m/io/loadmodel.py	(revision 13942)
+@@ -0,0 +1,35 @@
++import os.path
++from loadvars import *
++
++def loadmodel(path):
++	"""
++	LOADMODEL - load a model using built-in load module
++
++	   check that model prototype has not changed. if so, adapt to new model prototype.
++	
++	   Usage:
++	      md=loadmodel(path)
++	"""
++
++	#check existence
++	if os.path.exists(path):
++		#do nothing
++		pass
++	else:
++		raise IOError("loadmodel error message: file '%s' does not exist" % path)
++
++	try:
++		#recover model on file and name it md
++		struc=loadvars({},path)
++
++		name=[key for key in struc.iterkeys()]
++		if len(name)>1:
++			raise IOError("loadmodel error message: file '%s' contains several variables. Only one model should be present." % path)
++
++		md=struc[name[0]]
++		return md
++
++	except Exception as me:
++		print me
++		raise IOError("could not load model '%s'" % path)
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13942-13943.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13942-13943.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13942-13943.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/externalpackages/gsl/install-android.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/gsl/install-android.sh	(revision 13942)
++++ ../trunk-jpl/externalpackages/gsl/install-android.sh	(revision 13943)
+@@ -23,6 +23,8 @@
+ #Configure gsl
+ if [[ $step == "2" || $step == "0" ]]; then
+     cd src
++
++    patch Makefile.am < Makefile.am.patch
+     
+     autoreconf -iv --force -I $ISSM_DIR/externalpackages/autotools/install/share/aclocal
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13943-13944.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13943-13944.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13943-13944.diff	(revision 13980)
@@ -0,0 +1,91 @@
+Index: ../trunk-jpl/test/NightlyRun/test312.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test312.m	(revision 13943)
++++ ../trunk-jpl/test/NightlyRun/test312.m	(revision 13944)
+@@ -9,7 +9,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Temperature','BasalforcingsMeltingRate'};
+-field_tolerances={1e-13,1e-13};
++field_tolerances={1e-13,1e-8};
+ field_values={...
+ 	(md.results.ThermalSolution.Temperature),...
+ 	(md.results.ThermalSolution.BasalforcingsMeltingRate),...
+Index: ../trunk-jpl/test/NightlyRun/test505.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.py	(revision 13943)
++++ ../trunk-jpl/test/NightlyRun/test505.py	(revision 13944)
+@@ -18,7 +18,7 @@
+ # Fields and tolerances to track changes
+ field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2']
+-field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
++field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12,1e-12,1e-13,1e-11,1e-11,1e-12,1e-11,1e-8]
+ field_values=[\
+ 	md.results['TransientSolution'][1]['Vx'],\
+ 	md.results['TransientSolution'][1]['Vy'],\
+Index: ../trunk-jpl/test/NightlyRun/test312.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test312.py	(revision 13943)
++++ ../trunk-jpl/test/NightlyRun/test312.py	(revision 13944)
+@@ -18,7 +18,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+-field_tolerances=[1e-13,1e-13]
++field_tolerances=[1e-13,1e-8]
+ field_values=[\
+ 	md.results['ThermalSolution'][1]['Temperature'],\
+ 	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
+Index: ../trunk-jpl/test/NightlyRun/test237.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.py	(revision 13943)
++++ ../trunk-jpl/test/NightlyRun/test237.py	(revision 13944)
+@@ -64,12 +64,12 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
+-	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
+-	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++		'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
++		'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
+ field_tolerances=[\
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,\
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,\
+-	1e-13,1e-13,1e-08,1e-13,1e-13,1e-10,1e-10,1e-10,1e-13,1e-8]
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,1e-13,1e-13,1e-13,1e-8,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,1e-13,1e-13,1e-13,1e-8,\
++	1e-13,1e-13,1e-08,1e-13,1e-13,1e-8,1e-10,1e-10,1e-13,1e-8]
+ field_values=[\
+ 	md.results['TransientSolution'][1]['Vx'],\
+ 	md.results['TransientSolution'][1]['Vy'],\
+Index: ../trunk-jpl/test/NightlyRun/test505.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.m	(revision 13943)
++++ ../trunk-jpl/test/NightlyRun/test505.m	(revision 13944)
+@@ -9,7 +9,7 @@
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2'};
+-field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
++field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12,1e-12,1e-13,1e-11,1e-11,1e-12,1e-11,1e-8};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test237.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.m	(revision 13943)
++++ ../trunk-jpl/test/NightlyRun/test237.m	(revision 13944)
+@@ -56,9 +56,9 @@
+ 	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
+ 	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+ field_tolerances={...
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,...
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,...
+-	1e-13,1e-13,1e-08,1e-13,1e-13,1e-10,1e-10,1e-10,1e-13,1e-8};
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,1e-8,1e-13,1e-13,1e-8,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,1e-8,1e-13,1e-13,1e-8,...
++	1e-13,1e-13,1e-08,1e-13,1e-13,1e-8,1e-8,1e-10,1e-13,1e-8};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
Index: /issm/oecreview/Archive/13393-13976/ISSM-13944-13945.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13944-13945.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13944-13945.diff	(revision 13980)
@@ -0,0 +1,98 @@
+Index: ../trunk-jpl/test/NightlyRun/test119.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.py	(revision 13944)
++++ ../trunk-jpl/test/NightlyRun/test119.py	(revision 13945)
+@@ -22,7 +22,7 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['x1','y1','x2','y2','nbelements','elapsed time']
+-field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,0.5]
++field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,0.7]
+ field_values=[\
+ 	x1, y1,\
+ 	x2, y2,\
+Index: ../trunk-jpl/test/NightlyRun/test119.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test119.m	(revision 13944)
++++ ../trunk-jpl/test/NightlyRun/test119.m	(revision 13945)
+@@ -17,7 +17,7 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'x1','y1','x2','y2','nbelements','elapsed time'};
+-field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,0.5};
++field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,0.7};
+ field_values={...
+ 	x1, y1,...
+ 	x2, y2,...
+Index: ../trunk-jpl/test/NightlyRun/test505.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.py	(revision 13944)
++++ ../trunk-jpl/test/NightlyRun/test505.py	(revision 13945)
+@@ -18,7 +18,8 @@
+ # Fields and tolerances to track changes
+ field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2']
+-field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12,1e-12,1e-13,1e-11,1e-11,1e-12,1e-11,1e-8]
++field_tolerances=[1e-12,1e-12,1e-10,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13, \
++						1e-13,1e-12,1e-10,1e-12,1e-13,1e-11,1e-11,1e-12,1e-11,1e-8]
+ field_values=[\
+ 	md.results['TransientSolution'][1]['Vx'],\
+ 	md.results['TransientSolution'][1]['Vy'],\
+Index: ../trunk-jpl/test/NightlyRun/test237.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.py	(revision 13944)
++++ ../trunk-jpl/test/NightlyRun/test237.py	(revision 13945)
+@@ -64,12 +64,12 @@
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', \
+-		'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
+-		'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
++						'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', \
++						'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3']
+ field_tolerances=[\
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,1e-13,1e-13,1e-13,1e-8,\
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,1e-13,1e-13,1e-13,1e-8,\
+-	1e-13,1e-13,1e-08,1e-13,1e-13,1e-8,1e-10,1e-10,1e-13,1e-8]
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,1e-8,1e-13,1e-13,1e-8,\
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,1e-8,1e-13,1e-13,1e-8,\
++	1e-13,1e-13,1e-08,1e-13,1e-13,1e-8,1e-8,1e-10,1e-13,1e-8]
+ field_values=[\
+ 	md.results['TransientSolution'][1]['Vx'],\
+ 	md.results['TransientSolution'][1]['Vy'],\
+Index: ../trunk-jpl/test/NightlyRun/test505.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.m	(revision 13944)
++++ ../trunk-jpl/test/NightlyRun/test505.m	(revision 13945)
+@@ -9,7 +9,8 @@
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2'};
+-field_tolerances={1e-12,1e-12,1e-12,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-12,1e-12,1e-12,1e-13,1e-11,1e-11,1e-12,1e-11,1e-8};
++field_tolerances={1e-12,1e-12,1e-10,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
++						1e-13,1e-12,1e-10,1e-12,1e-13,1e-11,1e-11,1e-12,1e-11,1e-8};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
+Index: ../trunk-jpl/test/NightlyRun/test237.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.m	(revision 13944)
++++ ../trunk-jpl/test/NightlyRun/test237.m	(revision 13945)
+@@ -53,12 +53,12 @@
+ 
+ %Fields and tolerances to track changes
+ field_names     ={'Vx1','Vy1','Vz1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Temperature1','BasalforcingsMeltingRate1', ...
+-	'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
+-	'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
++						'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2', ...
++						'Vx3','Vy3','Vz3','Vel3','Pressure3','Bed3','Surface3','Thickness3','Temperature3','BasalforcingsMeltingRate3'};
+ field_tolerances={...
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,1e-8,1e-13,1e-13,1e-8,...
+-	1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,1e-8,1e-13,1e-13,1e-8,...
+-	1e-13,1e-13,1e-08,1e-13,1e-13,1e-8,1e-8,1e-10,1e-13,1e-8};
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,1e-8,1e-8,1e-13,1e-8,...
++	1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,1e-8,1e-8,1e-13,1e-8,...
++	1e-13,1e-13,1e-08,1e-13,1e-13,1e-8,1e-8,1e-8,1e-13,1e-8};
+ field_values={...
+ 	(md.results.TransientSolution(1).Vx),...
+ 	(md.results.TransientSolution(1).Vy),...
Index: /issm/oecreview/Archive/13393-13976/ISSM-13945-13946.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13945-13946.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13945-13946.diff	(revision 13980)
@@ -0,0 +1,480 @@
+Index: ../trunk-jpl/src/m/classes/organizer.m
+===================================================================
+--- ../trunk-jpl/src/m/classes/organizer.m	(revision 13945)
++++ ../trunk-jpl/src/m/classes/organizer.m	(revision 13946)
+@@ -9,158 +9,157 @@
+ %   Usage:
+ %      org = organizer(varargin)
+ %
+-%
+ %   Examples:
+ %      org = organizer('repository','Models/','prefix','AGU2015','steps',0);  %build an empty organizer object with a given repository
+ 
+ classdef organizer
+     properties (SetAccess=private) 
+-		 % {{{
+-		 currentstep   =0;
+-	 end
++		% {{{
++		currentstep   =0;
++	end
+     properties (SetAccess=public) 
+-		 repository    ='./';
+-		 prefix        ='model.';
+-		 trunkprefix   ='';
+-		 steps         =[];
+-		 requestedsteps=[0];
+-		 %}}}
+-	 end
+-	 methods
+-		 function org=organizer(varargin) % {{{
++		repository    ='./';
++		prefix        ='model.';
++		trunkprefix   ='';
++		steps         =[];
++		requestedsteps=[0];
++		%}}}
++	end
++	methods
++		function org=organizer(varargin) % {{{
+ 
+-			 %process options
+-			 options=pairoptions(varargin{:});
++			%process options
++			options=pairoptions(varargin{:});
+ 
+-			 %Get prefix
+-			 prefix=getfieldvalue(options,'prefix','model.');
+-			 if ~ischar(prefix),                            error('prefix is not a string'); end
+-			 if ~strcmp(regexprep(prefix,'\s+',''),prefix), error('prefix should not have any white space'); end
+-			 org.prefix=prefix;
++			%Get prefix
++			prefix=getfieldvalue(options,'prefix','model.');
++			if ~ischar(prefix),                            error('prefix is not a string'); end
++			if ~strcmp(regexprep(prefix,'\s+',''),prefix), error('prefix should not have any white space'); end
++			org.prefix=prefix;
+ 
+-			 %Get repository
+-			 repository=getfieldvalue(options,'repository','./');
+-			 if ~ischar(repository),        error('repository is not a string'); end
+-			 if exist(repository,'dir')~=7, error(['Directory ' repository ' not found']), end
+-			 org.repository=repository;
++			%Get repository
++			repository=getfieldvalue(options,'repository','./');
++			if ~ischar(repository),        error('repository is not a string'); end
++			if exist(repository,'dir')~=7, error(['Directory ' repository ' not found']), end
++			org.repository=repository;
+ 
+-			 %Get repository
+-			 org.requestedsteps=getfieldvalue(options,'steps',0);
++			%Get steps
++			org.requestedsteps=getfieldvalue(options,'steps',0);
+ 
+-			 %Get trunk prefix (only if provided by user)
+-			 if exist(options,'trunkprefix'),
+-				 trunkprefix=getfieldvalue(options,'trunkprefix','');
+-				 if ~ischar(trunkprefix),                                 error('trunkprefix is not a string'); end
+-				 if ~strcmp(regexprep(trunkprefix,'\s+',''),trunkprefix), error('trunkprefix should not have any white space'); end
+-				 org.trunkprefix=trunkprefix;
+-			 end
+-		 end
+-		 %}}}
+-		 function disp(org) % {{{
+-			 disp(sprintf('   Repository: ''%s''',org.repository));
+-			 disp(sprintf('   Prefix:     ''%s''',org.prefix));
+-			 if isempty(org.steps)
+-				 disp('   no step');
+-			 else
+-				 for i=1:length(org.steps),
+-					 disp(sprintf('   step #%2i: ''%s''',org.steps(i).id,org.steps(i).string));
+-				 end
+-			 end
+-		 end
+-		 %}}}
+-		 function md=load(org,string),% {{{
++			%Get trunk prefix (only if provided by user)
++			if exist(options,'trunkprefix'),
++				trunkprefix=getfieldvalue(options,'trunkprefix','');
++				if ~ischar(trunkprefix),                                 error('trunkprefix is not a string'); end
++				if ~strcmp(regexprep(trunkprefix,'\s+',''),trunkprefix), error('trunkprefix should not have any white space'); end
++				org.trunkprefix=trunkprefix;
++			end
++		end
++		%}}}
++		function disp(org) % {{{
++			disp(sprintf('   Repository: ''%s''',org.repository));
++			disp(sprintf('   Prefix:     ''%s''',org.prefix));
++			if isempty(org.steps)
++				disp('   no step');
++			else
++				for i=1:length(org.steps),
++					disp(sprintf('   step #%2i: ''%s''',org.steps(i).id,org.steps(i).string));
++				end
++			end
++		end
++		%}}}
++		function md=load(org,string),% {{{
+ 
+-			 %Get model path
+-			 if ~ischar(string), error('argument provided is not a string'); end
+-			 path=[org.repository '/' org.prefix string];
++			%Get model path
++			if ~ischar(string), error('argument provided is not a string'); end
++			path=[org.repository '/' org.prefix string];
+ 
+-			 %figure out if the model is there
+-			 if exist(path,'file'),
+-				 struc=load(path,'-mat');
+-				 name=char(fieldnames(struc));
+-				 md=struc.(name);
+-				 if nargout,
+-					 varargout{1}=md;
+-				 end
+-			 else
+-				 error(['Could not find ' path ]);
+-			 end
+-		 end%}}}
+-		 function md=loadmodel(org,string),% {{{
++			%figure out if the model is there
++			if exist(path,'file'),
++				struc=load(path,'-mat');
++				name=char(fieldnames(struc));
++				md=struc.(name);
++				if nargout,
++					varargout{1}=md;
++				end
++			else
++				error(['Could not find ' path ]);
++			end
++		end%}}}
++		function md=loadmodel(org,string),% {{{
+ 
+-			 %Get model path
+-			 if ~ischar(string), error('argument provided is not a string'); end
+-			 path=[org.repository '/' org.prefix string];
++			%Get model path
++			if ~ischar(string), error('argument provided is not a string'); end
++			path=[org.repository '/' org.prefix string];
+ 
+-			 %figure out if the model is there, otherwise, we have to use the default path supplied by user.
+-			 if exist(path,'file') | exist([path '.mat'],'file'),
+-				 md=loadmodel(path);
+-				 return;
+-			 end
++			%figure out if the model is there, otherwise, we have to use the default path supplied by user.
++			if exist(path,'file') | exist([path '.mat'],'file'),
++				md=loadmodel(path);
++				return;
++			end
+ 
+-			 %If we are here, the model has not been found. Try trunk prefix if provided
+-			 if ~isempty(org.trunkprefix),
+-				 path2=[org.repository '/' org.trunkprefix string];
+-				 if ~exist(path2,'file'),
+-					 error(['Could neither find ' path ', nor ' path2]);
+-				 else
+-					 disp(['--> Branching ' org.prefix ' from trunk ' org.trunkprefix]);
+-					 md=loadmodel(path2);
+-					 return;
+-				 end
+-			 else
+-				 error(['Could not find ' path ]);
+-			 end
+-		 end%}}}
+-		 function bool=perform(org,string) % {{{
++			%If we are here, the model has not been found. Try trunk prefix if provided
++			if ~isempty(org.trunkprefix),
++				path2=[org.repository '/' org.trunkprefix string];
++				if ~exist(path2,'file'),
++					error(['Could find neither ' path ', nor ' path2]);
++				else
++					disp(['--> Branching ' org.prefix ' from trunk ' org.trunkprefix]);
++					md=loadmodel(path2);
++					return;
++				end
++			else
++				error(['Could not find ' path ]);
++			end
++		end%}}}
++		function bool=perform(org,string) % {{{
+ 
+-			 bool=false;
++			bool=false;
+ 
+-			 %Some checks
+-			 if ~ischar(string),                            error('Step provided should be a string'); end
+-			 if ~strcmp(regexprep(string,'\s+',''),string), error('Step provided should not have any white space'); end
+-			 if (org.currentstep>0 & ismember({string},{org.steps.string})) 
+-				 error(['Step ' string ' already present. Change name']); 
+-			 end
++			%Some checks
++			if ~ischar(string),                            error('Step provided should be a string'); end
++			if ~strcmp(regexprep(string,'\s+',''),string), error('Step provided should not have any white space'); end
++			if (org.currentstep>0 & ismember({string},{org.steps.string})) 
++				error(['Step ' string ' already present. Change name']); 
++			end
+ 
+-			 %Add step
+-			 org.steps(end+1).id=length(org.steps)+1;
+-			 org.steps(end).string=string;
+-			 org.currentstep=org.currentstep+1;
++			%Add step
++			org.steps(end+1).id=length(org.steps)+1;
++			org.steps(end).string=string;
++			org.currentstep=org.currentstep+1;
+ 
+-			 %if requestedsteps = 0, print all steps in org 
+-			 if any(org.requestedsteps==0),
+-				 if org.currentstep==1,
+-					 disp(sprintf('   prefix: %s',org.prefix));
+-				 end
+-				 disp(sprintf('   step #%2i : %s',org.steps(org.currentstep).id,org.steps(org.currentstep).string));
+-			 end
++			%if requestedsteps = 0, print all steps in org 
++			if any(org.requestedsteps==0),
++				if org.currentstep==1,
++					disp(sprintf('   prefix: %s',org.prefix));
++				end
++				disp(sprintf('   step #%2i : %s',org.steps(org.currentstep).id,org.steps(org.currentstep).string));
++			end
+ 
+-			 %Ok, now if currentstep is a member of steps, return true
+-			 if ismember(org.currentstep,org.requestedsteps),
+-				 disp(sprintf('\n   step #%i : %s\n',org.steps(org.currentstep).id,org.steps(org.currentstep).string));
+-				 bool=true;
+-			 end
++			%Ok, now if currentstep is a member of steps, return true
++			if ismember(org.currentstep,org.requestedsteps),
++				disp(sprintf('\n   step #%i : %s\n',org.steps(org.currentstep).id,org.steps(org.currentstep).string));
++				bool=true;
++			end
+ 
+-			 %assign org back to calling workspace
+-			 assignin('caller',inputname(1),org);
++			%assign org back to calling workspace
++			assignin('caller',inputname(1),org);
+ 
+-		 end%}}}
+-		 function savemodel(org,md) % {{{
++		end%}}}
++		function savemodel(org,md) % {{{
+ 
+-			 %check
+-			 if (org.currentstep==0), error('Cannot save model because organizer (org) is empty! Make sure you did not skip any perform call'); end
+-			 if (org.currentstep>length(org.steps)), error('Cannot save model because organizer (org) is not up to date!'); end
++			%check
++			if (org.currentstep==0), error('Cannot save model because organizer (org) is empty! Make sure you did not skip any perform call'); end
++			if (org.currentstep>length(org.steps)), error('Cannot save model because organizer (org) is not up to date!'); end
+ 
+-			 name=[org.repository '/' org.prefix org.steps(org.currentstep).string ];
+-			 disp(['saving model as: ' name]);
++			name=[org.repository '/' org.prefix org.steps(org.currentstep).string ];
++			disp(['saving model as: ' name]);
+ 
+-			 %check that md is a model
+-			 if ~isa(md,'model'), warning('third argument is not a model'); end
+-			 if (org.currentstep>length(org.steps)), error(['organizer error message: element with id ' num2str(org.currentstep) ' not found']); end
++			%check that md is a model
++			if ~isa(md,'model'), warning('second argument is not a model'); end
++			if (org.currentstep>length(org.steps)), error(['organizer error message: element with id ' num2str(org.currentstep) ' not found']); end
+ 
+-			 %save model
+-			 save(name,'md','-v7.3');
+-		 end%}}}
++			%save model
++			save(name,'md','-v7.3');
++		end%}}}
+ 	end
+ end
+Index: ../trunk-jpl/src/m/classes/verbose.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/verbose.py	(revision 13945)
++++ ../trunk-jpl/src/m/classes/verbose.py	(revision 13946)
+@@ -17,7 +17,6 @@
+ 	      qmu         : sensitivity analysis
+ 	      autodiff    : AD analysis
+ 
+-
+ 	   Usage:
+ 	      verbose=verbose();
+ 	      verbose=verbose(3);
+Index: ../trunk-jpl/src/m/classes/organizer.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/organizer.py	(revision 0)
++++ ../trunk-jpl/src/m/classes/organizer.py	(revision 13946)
+@@ -0,0 +1,175 @@
++import os.path
++from collections import OrderedDict
++from pairoptions import *
++from loadvars import *
++from loadmodel import *
++from savevars import *
++
++class organizer(object):
++	"""
++	ORGANIZER class definition
++
++	   Supported options:
++	      repository: directory where all models will be saved
++	      prefix:     prefix for saved model names
++	      steps:      requested steps
++	      trunkprefix:prefix of previous run with a different prefix. Used to branch.
++
++	   Usage:
++	      org = organizer(varargin)
++
++	   Examples:
++	      org = organizer('repository','Models/','prefix','AGU2015','steps',0);  %build an empty organizer object with a given repository
++	"""
++
++	def __init__(self,*args):    # {{{
++		self._currentstep  =0
++		self.repository    ='./'
++		self.prefix        ='model.'
++		self.trunkprefix   =''
++		self.steps         =[]
++		self.requestedsteps=[0]
++
++		#process options
++		options=pairoptions(*args)
++
++		#Get prefix
++		prefix=options.getfieldvalue('prefix','model.')
++		if not isinstance(prefix,(str,unicode)):
++			raise TypeError("prefix is not a string")
++		if not strcmp(prefix,prefix.strip()) or len(prefix.split()) > 1:
++			raise TypeError("prefix should not have any white space")
++		self.prefix=prefix
++
++		#Get repository
++		repository=options.getfieldvalue('repository','./')
++		if not isinstance(repository(str,unicode)):
++			raise TypeError("repository is not a string")
++		if not os.path.isdir(repository):
++			raise IOError("Directory '%s' not found" % repository)
++		self.repository=repository
++
++		#Get steps
++		self.requestedsteps=options.getfieldvalue('steps',[0])
++
++		#Get trunk prefix (only if provided by user)
++		if options.exist('trunkprefix'):
++			trunkprefix=options.getfieldvalue('trunkprefix','')
++			if not isinstance(trunkprefix(str,unicode)):
++				raise TypeError("trunkprefix is not a string")
++			if not strcmp(trunkprefix,trunkprefix.strip()) or len(trunkprefix.split()) > 1:
++				raise TypeError("trunkprefix should not have any white space")
++			self.trunkprefix=trunkprefix
++	#}}}
++
++	def __repr__(self):    # {{{
++		s =""
++
++		s+="%s\n" % "   Repository: '%s'" % self.repository
++		s+="%s\n" % "   Prefix:     '%s'" % self.prefix
++		if not self.steps:
++			s+="%s\n" % "   no step"
++		else:
++			for step in self.steps:
++				s+="%s\n" % "   step #%2i: '%s'",step['id'],step['string']
++	#}}}
++
++	def load(self,string):    # {{{
++
++		#Get model path
++		if not isinstance(string,(str,unicode)):
++			raise TypeError("argument provided is not a string")
++		path=os.path.join(self.repository,self.prefix+string)
++
++		#figure out if the model is there
++		if os.path.exists(path):
++			struc=loadvars({},path)
++			name=name=[key for key in struc.iterkeys()]
++			md=struc.name[0]
++		else:
++			raise IOError("Could not find '%s'" % path)
++
++		return md
++	#}}}
++
++	def loadmodel(self,string):    # {{{
++
++		#Get model path
++		if not isinstance(string,(str,unicode)):
++			raise TypeError("argument provided is not a string")
++		path=os.path.join(self.repository,self.prefix+string)
++
++		#figure out if the model is there, otherwise, we have to use the default path supplied by user.
++		if os.path.exists(path):
++			md=loadmodel(path)
++			return md
++
++		#If we are here, the model has not been found. Try trunk prefix if provided
++		if self.trunkprefix:
++			path2=os.path.join(self.repository,self.trunkprefix+string)
++			if not os.path.exists(path2):
++				raise IOError("Could find neither '%s' nor '%s'" % (path,path2))
++			else:
++				print "--> Branching '%s' from trunk '%s'" % (self.prefix,self.trunkprefix)
++				md=loadmodel(path2)
++				return md
++		else:
++			raise IOerror("Could not find '%s'" % path)
++	#}}}
++
++	def perform(self,string):    # {{{
++
++		bool=False
++
++		#Some checks
++		if not isinstance(string,(str,unicode)):
++			raise TypeError("Step provided should be a string")
++		if not strcmp(string,string.strip()) or len(string.split()) > 1:
++			raise TypeError("Step provided should not have any white space")
++		if self._currentstep>0 and string in [step['string'] for step in self.steps]:
++			raise RuntimeError("Step '%s' already present. Change name" % string) 
++
++		#Add step
++		self.steps.append(OrderedDict())
++		self.steps[-1]['id']=len(self.steps)+1
++		self.steps[-1]['string']=string
++		self._currentstep+=1
++
++		#if requestedsteps = 0, print all steps in self 
++		if any(self.requestedsteps==0):
++			if self._currentstep==1:
++				print "   prefix: %s" % self.prefix
++			print "   step #%2i : %s" % (self.steps[self._currentstep-1]['id'],self.steps[self._currentstep-1]['string'])
++
++		#Ok, now if _currentstep is a member of steps, return true
++		if self._currentstep in self.requestedsteps:
++			print "\n   step #%i : %s\n" % (self.steps[self._currentstep-1]['id'],self.steps[self._currentstep-1]['string'])
++			bool=True
++
++		#assign self back to calling workspace
++		# (no need, since Python modifies class instance directly)
++
++		return bool
++	#}}}
++
++	def savemodel(self,md):    # {{{
++
++		#check
++		if self._currentstep==0:
++			raise RuntimeError("Cannot save model because organizer (org) is empty! Make sure you did not skip any perform call")
++		if self._currentstep>len(self.steps):
++			raise RuntimeError("Cannot save model because organizer (org) is not up to date!")
++
++		name=os.path.join(self.repository,self.prefix+self.steps[self._currentstep-1]['string'])
++		print "saving model as: '%s'" % name
++
++		#check that md is a model
++		if not isinstance(md,model):
++			print("second argument is not a model")
++		if self._currentstep>len(self.steps):
++			raise RuntimeError("organizer error message: element with id %d not found" % self._currentstep)
++
++		#save model
++		savevars('md',md,name)
++	#}}}
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13946-13947.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13946-13947.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13946-13947.diff	(revision 13980)
@@ -0,0 +1,184 @@
+Index: ../trunk-jpl/src/m/classes/organizer.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/organizer.py	(revision 13946)
++++ ../trunk-jpl/src/m/classes/organizer.py	(revision 13947)
+@@ -83,7 +83,7 @@
+ 
+ 		#figure out if the model is there
+ 		if os.path.exists(path):
+-			struc=loadvars({},path)
++			struc=loadvars(path)
+ 			name=name=[key for key in struc.iterkeys()]
+ 			md=struc.name[0]
+ 		else:
+@@ -170,6 +170,6 @@
+ 			raise RuntimeError("organizer error message: element with id %d not found" % self._currentstep)
+ 
+ 		#save model
+-		savevars('md',md,name)
++		savevars(name,'md',md)
+ 	#}}}
+ 
+Index: ../trunk-jpl/src/m/io/savevars.py
+===================================================================
+--- ../trunk-jpl/src/m/io/savevars.py	(revision 13946)
++++ ../trunk-jpl/src/m/io/savevars.py	(revision 13947)
+@@ -12,37 +12,37 @@
+ 	may include a lot of extraneous data.
+ 
+ 	Usage:
+-	   savevars('a',a,'file.dat')
+-	   savevars(['a','b'],[a,b],'file.dat')
+-	   savevars({'a':a,'b':b},'file.dat')
+-	   savevars(globals(),'file.dat')
++	   savevars('shelve.dat','a',a)
++	   savevars('shelve.dat',['a','b'],[a,b])
++	   savevars('shelve.dat',{'a':a,'b':b})
++	   savevars('shelve.dat',globals())
+ 
+ 	"""
+ 
++	filename=''
+ 	nvdict={}
+-	filename=''
+ 
+-	if   isinstance(args[0],(str,unicode)):    # (name,value,filename)
+-		nvdict[args[0]]=args[1]
+-		if len(args) >= 3 and isinstance(args[2],(str,unicode)):
+-			filename=args[2]
++	if len(args) >= 1 and isinstance(args[0],(str,unicode)):
++		filename=args[0]
++		if not filename:
++			filename='/tmp/shelve.dat'
+ 
+-	elif isinstance(args[0],list):    # ([names],[values],filename)
+-		for name,value in zip(args[0],args[1]):
++	else:
++		raise TypeError("Missing file name.")
++
++	if   len(args) >= 3 and isinstance(args[1],(str,unicode)):    # (filename,name,value)
++		nvdict[args[1]]=args[2]
++
++	elif len(args) >= 3 and isinstance(args[1],list) and isinstance(args[2],list):    # (filename,[names],[values])
++		for name,value in zip(args[1],args[2]):
+ 			nvdict[name]=value
+-		if len(args) >= 3 and isinstance(args[2],(str,unicode)):
+-			filename=args[2]
+ 
+-	elif isinstance(args[0],dict):    # ({names:values},filename)
+-		nvdict=args[0]
+-		if len(args) >= 2 and isinstance(args[1],(str,unicode)):
+-			filename=args[1]
++	elif len(args) >= 2 and isinstance(args[1],dict):    # (filename,{names:values})
++		nvdict=args[1]
+ 
+ 	else:
+ 		raise TypeError("Unrecognized input arguments.")
+ 
+-	if not filename:
+-		filename='/tmp/shelve.out'
+ 	if os.path.exists(filename):
+ 		print "Shelving variables to existing file '%s'." % filename
+ 	else:
+Index: ../trunk-jpl/src/m/io/loadvars.py
+===================================================================
+--- ../trunk-jpl/src/m/io/loadvars.py	(revision 13946)
++++ ../trunk-jpl/src/m/io/loadvars.py	(revision 13947)
+@@ -8,41 +8,44 @@
+ 	This function loads one or more variables from a file.  The names of the variables
+ 	must be supplied.  If more than one variable is specified, it may be done with
+ 	a list of names or a dictionary of name as keys.  The output type will correspond
+-	to the input type.  All the variables in the file may be loaded by specifying an
+-	empty dictionary.
++	to the input type.  All the variables in the file may be loaded by specifying only
++	the file name.
+ 
+ 	Usage:
+-	   a=loadvars('a','file.dat')
+-	   [a,b]=loadvars(['a','b'],'file.dat')
+-	   nvdict=loadvars({'a':None,'b':None},'file.dat')
+-	   nvdict=loadvars({},'file.dat')
++	   a=loadvars('shelve.dat','a')
++	   [a,b]=loadvars('shelve.dat',['a','b'])
++	   nvdict=loadvars('shelve.dat',{'a':None,'b':None})
++	   nvdict=loadvars('shelve.dat')
+ 
+ 	"""
+ 
++	filename=''
+ 	nvdict={}
+-	filename=''
+ 
+-	if   isinstance(args[0],(str,unicode)):    # (name,filename)
+-		nvdict[args[0]]=None
+-		if len(args) >= 2 and isinstance(args[1],(str,unicode)):
+-			filename=args[1]
++	if len(args) >= 1 and isinstance(args[0],(str,unicode)):
++		filename=args[0]
++		if not filename:
++			filename='/tmp/shelve.dat'
+ 
+-	elif isinstance(args[0],list):    # ([names],filename)
+-		for name in args[0]:
++	else:
++		raise TypeError("Missing file name.")
++
++	if   len(args) >= 2 and isinstance(args[1],(str,unicode)):    # (filename,name)
++		nvdict[args[1]]=None
++
++	elif len(args) >= 2 and isinstance(args[1],list):    # (filename,[names])
++		for name in args[1]:
+ 			nvdict[name]=None
+-		if len(args) >= 2 and isinstance(args[1],(str,unicode)):
+-			filename=args[1]
+ 
+-	elif isinstance(args[0],dict):    # ({names:values},filename)
+-		nvdict=args[0]
+-		if len(args) >= 2 and isinstance(args[1],(str,unicode)):
+-			filename=args[1]
++	elif len(args) >= 2 and isinstance(args[1],dict):    # (filename,{names:values})
++		nvdict=args[1]
+ 
++	elif len(args) == 1:    #  (filename)
++		pass
++
+ 	else:
+ 		raise TypeError("Unrecognized input arguments.")
+ 
+-	if not filename:
+-		filename='/tmp/shelve.out'
+ 	if os.path.exists(filename):
+ 		print "Loading variables from file '%s'." % filename
+ 	else:
+@@ -66,13 +69,13 @@
+ 
+ 	my_shelf.close()
+ 
+-	if   isinstance(args[0],(str,unicode)):    # (name,filename)
+-		return nvdict[args[0]]
++	if   len(args) >= 2 and isinstance(args[1],(str,unicode)):    # (value)
++		return nvdict[args[1]]
+ 
+-	elif isinstance(args[0],list):    # ([names],filename)
+-		value=[nvdict[name] for name in args[0]]
++	elif len(args) >= 2 and isinstance(args[1],list):    # ([values])
++		value=[nvdict[name] for name in args[1]]
+ 		return value
+ 
+-	elif isinstance(args[0],dict):    # ({names:values},filename)
++	elif (len(args) >= 2 and isinstance(args[1],dict)) or (len(args) == 1):    # ({names:values})
+ 		return nvdict
+ 
+Index: ../trunk-jpl/src/m/io/loadmodel.py
+===================================================================
+--- ../trunk-jpl/src/m/io/loadmodel.py	(revision 13946)
++++ ../trunk-jpl/src/m/io/loadmodel.py	(revision 13947)
+@@ -20,7 +20,7 @@
+ 
+ 	try:
+ 		#recover model on file and name it md
+-		struc=loadvars({},path)
++		struc=loadvars(path)
+ 
+ 		name=[key for key in struc.iterkeys()]
+ 		if len(name)>1:
Index: /issm/oecreview/Archive/13393-13976/ISSM-13947-13948.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13947-13948.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13947-13948.diff	(revision 13980)
@@ -0,0 +1,24147 @@
+Index: ../trunk-jpl/externalpackages/shapelib/shapefile.pdf
+===================================================================
+--- ../trunk-jpl/externalpackages/shapelib/shapefile.pdf	(revision 13947)
++++ ../trunk-jpl/externalpackages/shapelib/shapefile.pdf	(revision 13948)
+@@ -1,2482 +0,0 @@
+-%PDF-1.2
+-%âãÏÓ
+-161 0 obj
+-<< 
+-/Linearized 1 
+-/O 165 
+-/H [ 1629 531 ] 
+-/L 126626 
+-/E 18072 
+-/N 34 
+-/T 123287 
+->> 
+-endobj
+-                                                     xref
+-161 47 
+-0000000016 00000 n
+-0000001309 00000 n
+-0000001430 00000 n
+-0000001573 00000 n
+-0000002160 00000 n
+-0000002318 00000 n
+-0000002401 00000 n
+-0000002496 00000 n
+-0000002583 00000 n
+-0000002708 00000 n
+-0000002775 00000 n
+-0000002899 00000 n
+-0000002966 00000 n
+-0000003085 00000 n
+-0000003152 00000 n
+-0000003276 00000 n
+-0000003342 00000 n
+-0000003467 00000 n
+-0000003533 00000 n
+-0000003599 00000 n
+-0000003665 00000 n
+-0000003992 00000 n
+-0000004047 00000 n
+-0000004102 00000 n
+-0000004157 00000 n
+-0000004212 00000 n
+-0000004267 00000 n
+-0000004322 00000 n
+-0000004690 00000 n
+-0000004712 00000 n
+-0000004802 00000 n
+-0000006199 00000 n
+-0000006311 00000 n
+-0000007197 00000 n
+-0000007276 00000 n
+-0000007852 00000 n
+-0000008592 00000 n
+-0000009568 00000 n
+-0000010568 00000 n
+-0000011540 00000 n
+-0000012472 00000 n
+-0000013817 00000 n
+-0000015235 00000 n
+-0000016536 00000 n
+-0000017268 00000 n
+-0000001629 00000 n
+-0000002138 00000 n
+-trailer
+-<<
+-/Size 208
+-/Info 160 0 R 
+-/Encrypt 163 0 R 
+-/Root 162 0 R 
+-/Prev 123276 
+-/ID[<40c30521639addb075fa03038cf6b7a5><40c30521639addb075fa03038cf6b7a5>]
+->>
+-startxref
+-0
+-%%EOF
+-    
+-162 0 obj
+-<< 
+-/Type /Catalog 
+-/Pages 156 0 R 
+-/Outlines 166 0 R 
+-/PageMode /UseOutlines 
+-/OpenAction 164 0 R 
+->> 
+-endobj
+-163 0 obj
+-<< 
+-/Filter /Standard 
+-/V 1 
+-/R 2 
+-/O (T­\r¢oY$¬ÌEW¸¨n[¼ihmâº.Ha?)
+-/U (sÁÜÓ4ÙD,ªL0W/öUo`eØ%R$Â)
+-/P 65492 
+->> 
+-endobj
+-164 0 obj
+-<< 
+-/S /GoTo 
+-/D [ 165 0 R /Fit ] 
+->> 
+-endobj
+-206 0 obj
+-<< /S 399 /O 511 /Filter /FlateDecode /Length 207 0 R >> 
+-stream
+-Xñã"ÝEêÐ`r3Wän'àö-ÍO´IÀxkÁäò9Â°NP`Ë2ì¯ífì^_qh¢;:/
+I\Æsj øî1/
+¤U wÝ[wN³±iGÿýÝî}÷%@è¸ºÿv÷Yê
+xáClh`éX
+iþéºÏ
+è´äowT	îø¥ÓðL
+Î
+£â0{!LdRø´ÛdWÓ×ì\SÁ~%ÇýÄóãëÎa87ùâÿß¤#Êwð»Cºèñ¡v­ÐX%7¿]~'ãGè2-¾ox	!o5tªÈ¬ß|Lf2â½¢ª«Ì6q\vÀ
+÷û³½·ÃÝ+I
+
+ÅÀëZëì¬÷qoE|CgmI³$'ï
+F´¨0îI6Ò#Ø°ºÊ Dþ@{? l¡£W
+U°Bæ¨pZ1ÇÖ1áÖkíç\sæ	Ckè|½±4J÷÷5o¦N»hUEþ,
+-[ÝÏ¦gqU9ÏÄñnLÖ
+-endstream
+-endobj
+-207 0 obj
+-415 
+-endobj
+-165 0 obj
+-<< 
+-/Type /Page 
+-/Parent 155 0 R 
+-/Resources 181 0 R 
+-/Contents 188 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-166 0 obj
+-<< 
+-/Count 7 
+-/Type /Outlines 
+-/First 167 0 R 
+-/Last 168 0 R 
+->> 
+-endobj
+-167 0 obj
+-<< 
+-/Title (y¤þ½ôUlÄ"\)Ê¦
+)
+-/Parent 166 0 R 
+-/A 180 0 R 
+-/Next 177 0 R 
+->> 
+-endobj
+-168 0 obj
+-<< 
+-/Title (ÃÊ²'S/)
+-/Prev 169 0 R 
+-/Parent 166 0 R 
+-/A 170 0 R 
+->> 
+-endobj
+-169 0 obj
+-<< 
+-/Title (6°-¹Yç¼Q¶Óà	òO¥~\\ð{î^¶W)
+-/Next 168 0 R 
+-/Prev 171 0 R 
+-/Parent 166 0 R 
+-/A 172 0 R 
+->> 
+-endobj
+-170 0 obj
+-<< 
+-/S /GoTo 
+-/D [ 113 0 R /XYZ -104 797 1 ] 
+->> 
+-endobj
+-171 0 obj
+-<< 
+-/Title (/¼ QÇä]&wF|,!PÃÌoÔåU¼±)
+-/Next 169 0 R 
+-/Prev 173 0 R 
+-/Parent 166 0 R 
+-/A 174 0 R 
+->> 
+-endobj
+-172 0 obj
+-<< 
+-/S /GoTo 
+-/D [ 109 0 R /XYZ -104 797 1 ] 
+->> 
+-endobj
+-173 0 obj
+-<< 
+-/Title (ÀÎ­ÕAûÜ,[½"«ðlrOm)
+-/Next 171 0 R 
+-/Prev 175 0 R 
+-/Parent 166 0 R 
+-/A 176 0 R 
+->> 
+-endobj
+-174 0 obj
+-<< 
+-/S /GoTo 
+-/D [ 101 0 R /XYZ -104 642 1 ] 
+->> 
+-endobj
+-175 0 obj
+-<< 
+-/Title (Ä\rØ©`Àyàp.i~¨8»ódÇk
+¦è1)
+-/Next 173 0 R 
+-/Prev 177 0 R 
+-/Parent 166 0 R 
+-/A 178 0 R 
+->> 
+-endobj
+-176 0 obj
+-<< 
+-/S /GoTo 
+-/D [ 29 0 R /XYZ -104 797 1 ] 
+->> 
+-endobj
+-177 0 obj
+-<< 
+-/Title (¼üÉÏ¦
+Û ,«×?uäñä¤¨
+,iXëiìí$|Wú)
+-/Next 175 0 R 
+-/Prev 167 0 R 
+-/Parent 166 0 R 
+-/A 179 0 R 
+->> 
+-endobj
+-178 0 obj
+-<< 
+-/S /GoTo 
+-/D [ 17 0 R /XYZ -104 642 1 ] 
+->> 
+-endobj
+-179 0 obj
+-<< 
+-/S /GoTo 
+-/D [ 17 0 R /XYZ -104 797 1 ] 
+->> 
+-endobj
+-180 0 obj
+-<< 
+-/S /GoTo 
+-/D [ 13 0 R /XYZ -104 797 1 ] 
+->> 
+-endobj
+-181 0 obj
+-<< 
+-/ProcSet [ /PDF /Text /ImageC /ImageI ] 
+-/Font << /F1 190 0 R /F3 192 0 R >> 
+-/XObject << /Im1 200 0 R /Im2 201 0 R /Im3 202 0 R /Im4 203 0 R /Im5 204 0 R 
+-/Im6 205 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+-/ColorSpace << /CS3 185 0 R /CS4 184 0 R /CS5 182 0 R /CS6 183 0 R /CS7 186 0 R 
+-/CS8 187 0 R >> 
+->> 
+-endobj
+-182 0 obj
+-[ 
+-/Indexed /DeviceRGB 255 198 0 R 
+-]
+-endobj
+-183 0 obj
+-[ 
+-/Indexed /DeviceRGB 255 199 0 R 
+-]
+-endobj
+-184 0 obj
+-[ 
+-/Indexed /DeviceRGB 255 197 0 R 
+-]
+-endobj
+-185 0 obj
+-[ 
+-/Indexed /DeviceRGB 255 193 0 R 
+-]
+-endobj
+-186 0 obj
+-[ 
+-/Indexed /DeviceRGB 255 196 0 R 
+-]
+-endobj
+-187 0 obj
+-[ 
+-/Indexed /DeviceRGB 127 195 0 R 
+-]
+-endobj
+-188 0 obj
+-<< /Filter /FlateDecode /Length 189 0 R >> 
+-stream
+-Õ1ýEú×EÎWKSC3
+-ÌØÞ®PXÔnBFÈ#rDw£Ó­èz:Hf¾Ù:9;ÝÍ¾#>Sw ]V"§H®¢#
+&WVM"×*Bù¡Iaý8B:Ê6ß-Ì
+øaÓ×¥\,7jûµiÓ
+\ö'ke@ó"åÜäô½
+-4U§y`ógaÇ>êRºútÊGy°áÏ`rh
+-ä1qG¹O/ºÄÇ/CLô>Ý­-ÍûX/CLîêÔr±yµg°I=-¹í|(vY<&Ë¡Å5³qHï1	ÀÅ8bM@{KU¿ÏûÔK
+-i²
+%B·¼ Ü@f¹Sú¼þ±q>
+-endstream
+-endobj
+-189 0 obj
+-288 
+-endobj
+-190 0 obj
+-<< 
+-/Type /Font 
+-/Subtype /Type1 
+-/Name /F1 
+-/BaseFont /Times-Roman 
+->> 
+-endobj
+-191 0 obj
+-<< 
+-/Type /Encoding 
+-/Differences [ 0 /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis 
+-/ring /cedilla /hungarumlaut /ogonek /caron /dotlessi /fi /fl /Lslash 
+-/lslash /Zcaron /zcaron /minus 39 /quotesingle 96 /grave 130 /quotesinglbase 
+-/florin /quotedblbase /ellipsis /dagger /daggerdbl /circumflex /perthousand 
+-/Scaron /guilsinglleft /OE 145 /quoteleft /quoteright /quotedblleft 
+-/quotedblright /bullet /endash /emdash /tilde /trademark /scaron 
+-/guilsinglright /oe 159 /Ydieresis 164 /currency 166 /brokenbar 
+-168 /dieresis /copyright /ordfeminine 172 /logicalnot /hyphen /registered 
+-/macron /degree /plusminus /twosuperior /threesuperior /acute /mu 
+-183 /periodcentered /cedilla /onesuperior /ordmasculine 188 /onequarter 
+-/onehalf /threequarters 192 /Agrave /Aacute /Acircumflex /Atilde 
+-/Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis 
+-/Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute 
+-/Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute 
+-/Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute 
+-/acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute 
+-/ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis 
+-/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide 
+-/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis 
+-] 
+->> 
+-endobj
+-192 0 obj
+-<< 
+-/Type /Font 
+-/Subtype /Type1 
+-/Name /F3 
+-/Encoding 191 0 R 
+-/BaseFont /Helvetica-Bold 
+->> 
+-endobj
+-193 0 obj
+-<< /Filter /ASCII85Decode /Length 808 >> 
+-stream
+-ÛDnä?H²5dï]±ùâvJ«¸¥ °ç£o@vUâ&;W
+ãêô¡§qÔÖÉµ~=·ráÄ«ÆFÕê	1QÇ£,öZùÛN{O
+ÚRû5a®rWKÎ¢`E;Ë³
+_ÀÛH½¦©bGÍèÆè|:Û	õ§±ùï$RÀ
+x"·UÕÇQ
+­zk
+¢yåÕÆÔµ½Z&Ëï.,à£ß©.«Ñ3Ã/ábfUUl
+-_Û«{
+lºfnTó
+-QñtJN
+£9ÕO~,:V;ºZ·ñ4v=Hfs_½ÛO#Á¾	-x?ÈûÜ¿ð«Yþµ<H¼¼£ÖjttýÈr3u=¼pÁrkÝo.¹¨WxÜcdk ëKØOÆ^!L[
+-qÙ$Úß£dVE»çNÞ¸¬^ô·Ñ
+üââeg£ýÆ¢%¾}ªr*s0Ab¼×ç$BÉkù%zÝº>0þhñ] ±.qìÕb3£äÿ»a¢ââp¦¼Òäí6²Æ0ZmûP¿ÅTAÉv²ªþ2Ùì¡r:ÿÃv:ÜEbWâÚÿÚrÏÁsdæCÂã.´µpëe$°×ä¨óéó
+m¨ûXÓÎµÈá!öx_`k u ¿Øú®ïåîúýÙR¬NZmÝ7ÜÐ`[ªî,Ì?´FzC&ô
+w¢
+-w|JLp­®,ÑuÊC¹K87"ÓLÔ
+bòÁÎ¶Í­
+qUÞ:¾¼µc²aL-ùq *
+^4¹ï²ª¹§²;_¨´B`*7îùaáïÊ¢;r*è¾cú
+ÁVäiwh(¾³kCxßFè¡QÉ¿ÜlæêòÑMèt/u¹ÓÜá@FÊlCÕÐ¡ò´ñH6·±½ãrwè¢ 7®íáeÔ.Ùåèûs×±2irmý¾Z¿
+76DÌô7´)ðèøæDKõÍsðop«ÕZb]-ù§¿+t×>F¿A¶|4
+-endstream
+-endobj
+-194 0 obj
+-<< 
+-/Type /ExtGState 
+-/SA false 
+-/OP false 
+-/HT /Default 
+->> 
+-endobj
+-195 0 obj
+-<< /Filter /ASCII85Decode /Length 498 >> 
+-stream
+-ÁÑÛñeÉ-}?QìÅÛÃ ¨f÷%ükýFê
+)xòÉÑ^¹	Ü®q¾:(ãf
+mLUåt¦õ¼'FÅGAÈç[´+0Xì° ¯´2ÃÀ~;67>'¹fWGf8ÚÆ]µ¢Mã/¨Àû¡ 
+ª
+±°4È±¼,;þm«zÒµ
+Å
+*ÏSf9´ó	í_$Î¼q¸{YC¢¬zjB×öÖ[spzIá&Sëò-ñ*@{fÎ-/jÞÐ!^
+p*58gï«ßÿ×¥
+éZ(
+y@Y¡¯û³YÝ«·ïõ¦Aè
+ô¦[[@%öÐØ¸WAÑZ1ÎßÂ fÖe¥ÖEaIü*3õ­Bü65M¡Yò"
+f¤ÙdÿÂ
+§àg
+S=í¨>ÅÚgGì0R¯·èÕ<Î
+>õÒ3ü4lä2-Vx5m¡µìRèa
+-¥ñÖÏ
+û,/.' PE!üvéE^m'E ÏÜpyC
+:y·$íxÅny0JG/ØîÌz3]w%sÒVº¯ô¹!Fâ
+-TÎ¸§RÌ;3îz~lÈ)3{rH}
+=¸"kÐZt³LHñçö
+Bê°qÅN
+-endstream
+-endobj
+-196 0 obj
+-<< /Filter /ASCII85Decode /Length 662 >> 
+-stream
+-Á³ã}î¸	ºLº:ÿÐA$]TëB*)Ó,`»üæ[§	ì:
+-Ôã#
+-B2W×´Z¸OïYÆ[òÂÐ²5l;å\íÔ?c|£o<êÎèäz]8¬xõJpÍ©mïíÄÏ:Iky~ÂñÕFjW
+Ý8ØCQíØ­Ú+
+9(EêÅSX´¬ ZâTS
+pÏ²¯~ë¹vßüïôâ±%·µz¨$¬>#ýÿBN>ÎÆ:ÛE	§Îf¬j
+µEæ
+Où¼/*Ñ9V«ÄCtÄ§âÐ.Y4ú
+õ::mç,K×?Þè.Êb3vbVÜÆ¯ÞT«~K$º¾VTR4ä*K
+ª`[Ýìòdn©FIëó\ªtPj(6¦ñÖnÐxÈJÇ{pl³cuÓ
+×ÚÅÐj->QæwÔÿ¹¤Xc¬ÏÂ¤ÊË­×NR·O¸@z¦Ê*gi%Ùáãä
+TsñîR¼®¥O^\4&oÃ¨.]Ü
+¸Â <Ñ¸Ö¡
+_GãCHÞ;eäNÅRÈê÷©=áJ4ñ{H2ÐDVj1#7üPp{%¨r3EY±Ï
+NJÈ©@
+-%±Û
+öNª²U(Ó9G[Æ:RcÙF_Î­ÃN¢}µQMÕ>ûIli{©Z­Ô¨\öÉ=
+-1]V(ÿ6Ô)Á(?1ª°7^dùùë A¹N­*ãðªs ád*F
+×0ÕkmÑ
+-÷
+-ÏB«¸¸;\=·ýaO÷eÜn'pé|Ðß\C®u ¶HYá7ä
+
+BOälÕEVÉ
+É£±ÈÒ°ªßê
+-endstream
+-endobj
+-197 0 obj
+-<< /Filter /ASCII85Decode /Length 898 >> 
+-stream
+-1árÖ´nâ
+-ª}
+-^_hnW%<å}ÃRáóK}I¶rçu»Úf¼¢ï">|¿ó
+,nâ35Áùg0!
+u¬ø
+h[ }Oéa)8
+$úÝ9/;y.AÂ¡°¤ÅnLz±/U)áÍ£3í$üI§g<Â¡ÍPÇÃ%§¶{miTÄ- ÉXµ÷ôt	G
+-
+-s~køê¹@3Ü1\=÷d)¦H
+~]?FÎVý
+úåãàû
+D¾<Ên}%Ëc¢þÒ¢O÷!ù]äû/EaI-C$'$wÈ¯Ðì!ðYãë¦o9IÎ$ËÉ]ßÍ¬¦û"®âòº3¬÷Z(y¯£ã¥bnÔu
+ã§~|¥°¾Ú¢0?«»î=±{¤â	À Õn	Ôá©¸
+²]~?N
+-G®ÙÀAÆÈ¦
+Z­_qÚ§¬BÊßÞ®CjÕØÈmhè"¢Ì
+Ê4&[¬Ý÷2	]
+-)¢UD$ufó%Øªµ~¢2gØ±mÀWÄ
+-øf ­S`À8á
+ì°­´üóû÷§×da0Ç}Ì?S¨ÉóWá<INßÑî_<à©eþúd¼Px'z@Kï³7Ïµaö}^÷ñ
+¤e²#ì$[
+-c
+	ðï'£¯ñÏ	¨Å,
+-ÓfÖ³0Ú¼%Æ]k/P·>.«'qé5¯ä<óÍ×%ØéÇÙý¤ìo±òØ_Äý_]¡Ò6ZZÿ
+Pæ¿J$ÉÖ
+
+RoY¶»¸ö_ØßV_©w/YÒ¨.íú¬Wýõ}»pVEùÿs \*Tx
+-d¡Ù[ãsho¬
+Pg·x)t_dbü¸¢vNåcæNS8D
+Èù.iQÉã#s3o>DïGÏH>×(ýj{sÅ¸èðZ#ï¯ç9 5ïÈ©¼ÉÏÖ/"ñ)
+&Vfb¬öY¨êúÙ)Ôb(
+fË¥ßuÉGV2âH8ß]5GH>&¥Ñ`*#\u*²O¯¬68A!Woº#ÏîZb3ûÒ#ôÕ
+#ïERÛk2Àõð
+
+T2Zà¢­íêõ_[8Â ùpVPåÑºg,
+-endstream
+-endobj
+-198 0 obj
+-<< /Filter /ASCII85Decode /Length 922 >> 
+-stream
+-
+-)	óJ)=ï§Ø¨þÛÞDZz²AÞÔH
+ÐÉ~ÉE×(F£Ð">ñ5@å´~lýÐKoÀXtmÎNLUÛa`¯Ø,Y1´ôVAyÉãØ"°Ö$
++;ÁðvdàÌ8*eËWPBË#RËh8yzÌ¸mDiÇ
+-B°iisÊ{($ÞúïDqEJªVªõÀ
+{ê'
+oî'0Ø,|ûÚ0t9è;&¹Yô8Ó~¨¡Ýy:à+®dñPìà{^o|ÞÝ[¬ëáëÐ]Ê¡¶âèE<
+-£ä%b
+xæì°³ë	*º
+¼®ÄäÑDÓF'yðªûîÓÖë/qpL§?ÊÚM)ÙË-úA(à¬Ð##Ë9sgu ÷ÝàõÈâ®,ÿ%þN²É®]ÿ÷é²&ØÔ&ð
+yxÔ9É/vC°ûç|Öy·QLÈ!íg
+|u«´H!a§Â6ûèêðs¯¾ÑîE]!|Y1²Ð£âQ9aì¬f;Q¹}CDuBå;'ôp%Éúª<.p
+Ù½SÓ!<4U½Ò(
+Å*Õ¶C¬IpG
+-ãôAóÀ[A¬HÅ òÞÒj£ØÃÎÝ
+ÞæG º¦äÐì² 
+!/(ú¯ÈRbøäHnÑ±G¤fåÇA9NvÚ Î\3°·´:  ¼?Åh®ýüù°brD¤ñã]nf
+BûÙ°#sÎ«Ä
+Øs
+N
+o×Z%Í¾GF¨ìE³dJÙT[ºÀÿÃüÐ>qSc"Mvå*Â·óTñÏiõÍ:Çjo]\ó:ßÒìMÒ©u±3¾Bn3ïïÜàBNB'þÓí^fò%QÌk5aª[¯
+u6 ³.l
+-eQ|[C
+£¾W§¥Ïu¶6Ð)Áõô;xc*/êè¡
+~w©Cì
+°Áé
+qri¤º§âÇb4/¶sQz _x
+@n÷/©rGâë
+})4;èü&QV®òxå¦òY
+gB-æ±7v
+ï/´%2æ*\Ê
+-.@°
+->`ûáÐ£eà5b;ÖÚ=¸´Äâé°å¾
+y°.ÊM= 69cìbÐÇ
+-endstream
+-endobj
+-199 0 obj
+-<< /Filter /ASCII85Decode /Length 894 >> 
+-stream
+-öæ¸e
+Sõ	í
+- PI^Ùõ¬0	7-2ã=Ù6({Oùn·nÂ1(:6sÔ
+fâ;¬bL¥ÅtÄf|úöù4¾í
+RÐÑv×g+03)úTêa¦×ÔÅpwK`Aödþ my4j®»Á§¶tFâg:K¥åÍ.¼Y¥Ó¼°k>86>
+T¼ï'#¥ÄÎÉÑ<-|¹ðÚ¬¯,HxùP7 ä[b¸E
+-SY:u
+%'U&ü³*2Íñ|Ä&é\ó+ÆÝ¨¹bí9KGfþìã×´ºE¢7~ï_ÜÕÑSÑ4+2p³XJ9sÐ86OíiÔëþ} È]È|a
+-íÝkÐ4}ÆÑ£ÚPñ#j
+ÎsêÞQ½Ô
+Í
+rÌZ1Yæ¾Ií.Ü3í»¥TÌ1ô@êKêôvì|zØCEºÉp
+< æNfÇH¿xhÅ1lÍÀ`¹sìO8©mº°²r¼{Ö?¡IñlW:ëo¸£üÖê©÷Ù×ÃúZJ3i²LNÊì8¸¼'­Ã
+ÑRH8¿¹CMãÐó|
+-8o
+-]XLç¶ô\MA!ÍmìýÙ@ÇX£3du¡åµ£4Å½
+-öìo°Ìú.Õä
+FE³ûâ_jãô¾L·7]¶·Í³½¬
+ÜWÈ|(
+
+æÆ½¯c¯tQ×ÿ¹*PÔ CÆ±ÊUïr9Cµê¥¾ÜÛ|<'r4Ä¥!íBþë[^ÃrÃz
+°­Ç
+-.9`
+-¯0a`Zù¥/¯
+-
+©wÅ»Ó}"[©¹ÄPþ:+ÇþFýõÿ ç&*ëÒróî¶çùy?ÌþÐüô,jCMxt
+-N¡EVßµªMQË:Íµ:e5ë5fü)cQø+¾ê-çÁìÚÖ^5yM
+Wª´q'Wîûz#ÙnÀ£éJ£3¶(fÝË8¡@	w$$D)F#~ó~í%ÎsÝEïÌmLøTs±
+ÿqÅË
+W­²\mªë
+-n_µ«oâ+Ê4
+ñz<Fë'"Fc	;RØo5!%|Oû»"MÛ$k1@.ã
+-
+éû8
+-endstream
+-endobj
+-200 0 obj
+-<< /Type /XObject /Subtype /Image /Name /Im1 /Width 90 /Height 21 /BitsPerComponent 8 
+-/ColorSpace 185 0 R /Length 754 /Filter /LZWDecode >> 
+-stream
+-íÔÊ{ÈÈâ}
+r"ÂÚQNÖÅÙ1Í/äëO!
+-
+¸#ÿ¡<
+s/\ÐÍÏpD!Rm«Ë
+-ÐÊimW»1W·ià%Ü¥U¬^ä&
+ø¯¯ "äî~
+È¿!Ôó
+9¨a"
+ÎdÓö§À_9ôþp\TqØ­5
+-ÏÃSñÀÜ$qsÑ¬±=Í6ÿX£ã½ö¤¹MÐ¥vUÃèhk²k­q}P¿wþÞ!E8GÌ x×6Vñ;4T[	f(AÈ ­4âýL-TVë¶r,É
+ä
+£
+-w
+Ò
+HÙdµ¤"µ©öÑ²mqPÇ-è«;µ×ØÙôD!ßØØaXÙM]¾rHmÑm
+-ðöæük
+-L³bèx9x<Å<XôÏiu°¼=;d¥9Þ/´1h£g¿ÇDRíÐðÞà.¸ß-RÃÐc
+çdîSåIâòú #	øå ¦®!ºØèP^w3@¥ð*f¦oÇxè¸äkÀÒ÷ó#õvÍP,c-µQ*6A$ÐÌßÁrPÝOãñ
+-ZàÏ°¦}áÈÊÇ
+-7L7£6
+â²Jds`ü1i=xzl.
+bÖ1H8ø.¥íêqøöÜô4 A°GÜì"_W4
+7]¦Zªóó¼ÌÄÿc
+Qê7NàÀP&\Bl
+û«¦3O`G¬HpÓñ®l| Òx¦QÔ%{+Òï«¾än[õ:èªiîq{æTUM#§Ã¨Þ%"Á
+_]n»c\+xAáòÛàÖqz²YË¶»YÂ´ñK>UåJ 
+5ùF¦û
+ @ëy)
+Â9?d¨DHáãVHÿf¸aÔ|1ÐéëÎÑª¤ÆS3¶
+cÃü{ÎÖÖ
+Tvº%I²\ ø(â¸ßÇÃã.9®ØF3}Ã¸(I 5U¸Yä÷+7)ËÕô
+-endstream
+-endobj
+-201 0 obj
+-<< /Type /XObject /Subtype /Image /Name /Im2 /Width 90 /Height 21 /BitsPerComponent 8 
+-/ColorSpace 184 0 R /Length 1166 /Filter /LZWDecode >> 
+-stream
+-Y|ù'núQu"m(!ÆÓÚ³ÓÝ>¤XÈ¦-¦c²ºý¢ÀÓÍLyÏûÎ÷"Pe 2þ¾q7ÜUø	ëJ7dÝÕ'
+-GÒJ¿£è?ÚyGÎô£Ýi´ÈÌÂE¬0ó»ø¥8=b*ö¦N2ïfÞ>Î{iÂ^J_§è¶ÕÌ*LFtÇõDáö¿PwBdQ¡!÷ÉH:ùx
+áV#o!ù
+1=ÕMÝ?JUQÙm
+?h/pL	²2óUxµº~
+'uW­5ÂB"@ô¸¥ÐÀ%,H°Ób£é2yæªln
+-ó[8Ü`r£zizæ½ÂnX(»g?øTÏºÈóª­ü®Æ-FU¼ÏiÑnQ7ºôÚi@'¨Ø$-Å)çâX¤ÃW³þ7Qd²fCº7Sr]ì}TYeµüÎ1ýµbB@îÙê¿Ý­4eaºî
+	¿^Å
+nÒH
+-6$ôvL;G<ÕÓæóPB-
+,ís´+1G/÷ýÞü¦ô28×sàåù}Dz~^¬/¤§NØ¡<,oGÆ0ÀO§c@
+Ùo+uM{­¥å)
+ºE
+-noYÚ#oÎ>Þ	À
+
+Øh}Qºæqjõð51àTAÊø<a)Îïõ(Dey½o¯ó±¿ôÁx@d.jß|=í°
+f}T.2N
+ËaÊ×FånN£;:
+½®Yú­ú2­øXA­`ÌmL[Yñû$6Àw²d«åÃ¹Hç`«ÃèÚ(KPÀ¹ËXÜ ëx6o%M¸êÜ\¥¡]$­á"+z7Ö7n!@,Ê÷ãó U 5É¶;Z_aÊMÔ´Ó­*q÷
+%#+2:h©ÓY"bqQ«NíA`¾+é*ûUl?Â)À°­Aà
+ç<_à!Ïtj²µVºË´ÊD½âèp=Â²ÙD<
+¶
+TK±ùrF$z÷oucÞÊ²(î0ÖéP¦òÄ©õÊ£±Mt¸ÿ«7T:³"UÓóÞ£ªÇQõ÷SãËÏTxOÎ'ötë¯­v
+Õ%ÖiX¤ùËd0¹¬Àj<ZH·
+AÏQöYS xC"ºo3=e¾ø~ÉÌÙì'VZ4õ³ømGd"8`i-ÄºÆá#uDPðì8!eÍÓ
+­8­¶nÖ§¶
+üíqobH
+
+-ÿW¾¾
+<(t
+ú%IwßÝ±«AÄUÕdDn 
+³þ}Q<;°ü_Ãª
+@	ánÞÊB^áPß
+
+&zSpØ=6Qh7{;GúFÀÄÄÅM9x<u{Ä1[¤1áýäE¯Õ?ªú$í­g2k\jè	_¬¯`*s²r9Qfu'×¬Ñ$xÃq¨E©-îæ¨1Z»nÜlEÜ²N@ç
+-endstream
+-endobj
+-202 0 obj
+-<< /Type /XObject /Subtype /Image /Name /Im3 /Width 90 /Height 21 /BitsPerComponent 8 
+-/ColorSpace 182 0 R /Length 1239 /Filter /LZWDecode >> 
+-stream
+-5
+-ìdÎrAò`ßár:ÜÈ·,îç?¸ñèµ4Y´ï+ÈN.w'
+I(®øËé¦äøíØ!;Zên±!cùë~¬BüÄsÖ¦0X¥-I¿*¡ )ÙÜR¶U?+Ó
+&
+-øn¦ÆU{ÎF£}³	ÌSm¯¾+o7;²2½}rë4Ïx<lÇÍ<
+cé.fû''åÑo®Xô'øgµÛH÷¤_ì
+-!¼ÙyõHáÔ¶'
+lÀ
+-u&¼°ôÁÊ,»g¬,Å
+-~s=eß¡(n0«×^ÅÛÛSr#Ä¤Ðc:ÈÑuûÃÐ=t³$¡VÌª§·rßóµeô²±*@ÓãÊVùå®Úz®Ø¾es7%­»2{'8
+b	¡TðØØö,»dCª®&r}£ÓPU,Û^ÔÀi_Ñpìøof]cPû\#^ÖÑC2`FªãÕTF¾Éào+\"48I#Ñ¡ê«ÚÅ¶½lDã>ÿØ ÛfZPÌÌ¹¡Ê÷üÑ@  ¦Þévxmü±ö,Áu
+GAzFzA$*
+jE¾Ô5ÒõßÓas¤¸zéPëU 
+º_jSvIÂ
+³Ä¥º­åÆ$E6ì0©AhqÛ¦t=È5¨´âÐxJñ¡âÛ¦çÿ=¶2 ëõ\æª°ÑlV=
+(Iú½
+-N¨H&qÃ
+B×bÄ3eÐÚÏ	
+ç
+ÑIDRDÃkV®¦Ã|Hó×Qþs¯¢ëÖ¸\6µ¨-
+pã|2ã¯¯
+¨A9¾ê£ilÂF:
+BúIrDõÅI0"VópÜPænË7i(#×¶¤ÐçqYÖ`#WßGºêma²9ÒÝÚµ§ûñ}ÞüéØ{´SÍw}§S $?£}N`¨¶
+-!/~»0q¨<"_z£!Éê æfW7eM)fÄ®ÞoÒ;Z×ìÔz|n¿ø¬M4ËJXK´
+¶;ê?½ÀØ5p)(4~Õ-®pÀlIÚìõFm¥þ
+¾¨
+
+ËçóU!ÌñS¼«Ã°Êe(U®ÏE'0P
+5?«öÚ8n{;XÇûdÏJ:©vsHlÙ@©åÀÝìä#,ÝËjõ³bÌ
+ïsÐ·yÏuvnwl¢/å|H@÷cÕGédùåóî)ö{ó-éfâJç+ÛJ¿íTìh³,j±ÊæÒ<pT­=6Frÿ$GÓK½½fÕ(ÙTlõÿuËh!×ÝÈF¸(`y##{Þâ¾Ð(|×
+ÅWÕÀm
+JÕ®lÍÊÛ
+w®aZ~>ÌTGOAù1t­=¯ióÍjp/bÜÍ¥
+2èPÂÉpsWþ^SÛ¸³1ºµdãß.°[4ßÈ3ÄÁYMx>&æK»ï§ 3cÁÊ!´8	ÿ{Í
+-¾õÏämÔ5«¸á(¶t{¬|ß·
+-eh&GT_º3ö ¡Õ>ÏB¾kø>c&¥
+¡ó¼k
+S9'Äq°h4
+-endstream
+-endobj
+-203 0 obj
+-<< /Type /XObject /Subtype /Image /Name /Im4 /Width 90 /Height 21 /BitsPerComponent 8 
+-/ColorSpace 183 0 R /Length 1122 /Filter /LZWDecode >> 
+-stream
+-K^<®%Ý'SSh¼¼Ð¬»ºaz|ý°g>Æé¿PrÓ%C,¼B³¦ÿOâe
+µ¶¼ÂÔD3»U×ÈÿRØbCoh¿´áj?FµÖïQÉ9ëæÁ­H4I~·DNñC^
+óh=
+-´/¤¬;çÜe|3Þb[°Fÿ¦q;t¯*Üìôcüp4º
+-Ù¹Õ^ÇN¯e-Ö®à³ôNf%z;
+-L¡õÜ@¼öUe|6´å
+ øe ø»
+f6¤/"3{°­÷bÃkqèÇnÛ¿q²*Ôïþ¼	ãÀíWwÃyºãö&OS°èçÄp
+¤¹Æè¸ÆÏÿ8§r¶{k¤Y·y¢ë®>?Sxm2^ìd®<
+Z¸FÍsE1%ôã¦û½d¿ç²g¡
+*öUM·mY
+AÄ|ÅV"aRþ?%
+@
+ÑSxµy;øFáÖÕøý]ö,ä?4¼>èq
+-ë VÃ×4YASe9(
+a/í¯gìkïv`+ýø¼
+ÒÑ¥qxJÐ&VØÏL0&ï#úÊ¶
+"x×Q­Ñü-Á$µ7
+-C_Êß¶ÐLý£Æ |#1´Kø¾ñîàã Ó
+ßU`Õ£Æâõ¯$#5HA½ò]µì°]r^Ù¶ÞIÀvîö ·óiµù p·QÜÒLÑÿ·®:ú¨
+òÿÐoÛù÷ï¶G +sB£g&h)1ðL¼Æ¶<Øá°ÂC]ï¾ÝÉÅ·Ùßf¯HÕOñi,"l³<¢øI$ct¸£- ?!!øÙ¢þÏj©µõé,óåsq5î+ä¨®9	;tS·_òfÅ7¨·ÿÏ Á¥Ö*dcþeWN3URr mLþæw
+/¸d#Í Äü²å"¢¾*ñµÙ
+ïKhJuKõ~àfÈRÛ)Qcx4âxÂ_÷¤î=ûË·»½1é [¶0ü¿¶%m³¤Â`.[H¨£Rt¦ª<{D]¯:Á(4ÜG]Ôhì±z½Dm¬ÿDGhù
+¤o³³9dërHÅ-ä×Úò¼õ¾fpÌú¼_ ^5¯Så£ê
+ë¾5Ïz58©:fú~%³ 8¶xÊ¾Tlö^k|´Y}ÚÞ
+¥íp?/'2#LÝ%VÃM)0Õóã­%Ñ/o
+-gü©ÅÎîläûªLBéos®©V¨Ðýà¸úÀÈsÙeä`FôÄM5-Ä]-åº
+-X%du)ç¸j/ä¯|!püÕ¾søjÀø¦Æ%/pÕY=ìÌçó£gÃ3QL:¬*|c!9BsõÍ
+-Sbè²äÄ: kþrÝT²9áÌl{òÁ©J
+-endstream
+-endobj
+-204 0 obj
+-<< /Type /XObject /Subtype /Image /Name /Im5 /Width 90 /Height 21 /BitsPerComponent 8 
+-/ColorSpace 186 0 R /Length 554 /Filter /LZWDecode >> 
+-stream
+-PÚ¢èÜ$ß·lûàBEæèò©óº9M:X J]MÁê´«i$£­
+Ø{^6X¥¸&ÀÇ Å3¤ìHúþ¼
+-Ûw²$ïÑú
+áéyê/Ôê"¡ûÚ
+ÇM¢p¥ÌG²îwj¿³>³áî²`«hÑ°þ±æùD¥4}H<â+âÞnAö1ï¤²uúFÊ!K|ªóß¤c7j¡ôºEÁ¥GÓhÚ`üR
+ ËM÷¹YÐRQsmÌøÔ¸êüosbâÂ
+
+Àñ:¤¶¦V!§r´l¨xAE
+JÃ4iâ/x½jé½TuáÿxÝpÓÕ¶¬+;-Ân(UBM/ÀÑüsÓ¹oOçå²\Ìò.åwU	*]
+eµmÃýøNá<¢yéZý.
+-×¼¹2k	ëØ
+ÓÊ@Ùwßt¼MC¶úsRð2;Xì¦:ÞnÍÃt^ÁyÈE­¬ÇÝ×(,J
+~&eUíÝs5]·IèíU20üifO]­Õ«;­>õ\ådìcìcj]³²
+\âñ=øÍ~E]½³ú´3æÉ LÎvÉûÅ
+L8*üCp.Wä4Â
+
+-iïÍ^(
+VÁA£Òncú6
+Ú1º¨83/Hy¾Â}ñ
+zrÌw¥XïyÀø?÷¢,DeðÖ»gêÎ
+-endstream
+-endobj
+-205 0 obj
+-<< /Type /XObject /Subtype /Image /Name /Im6 /Width 90 /Height 15 /BitsPerComponent 8 
+-/ColorSpace 187 0 R /Length 474 /Filter /LZWDecode >> 
+-stream
+-$d´øÇªÑdY=ÐâÊvÿa!ySè
+Nçß2UM¥­
+¹Å{êXõ¼óC&ñ¶d¨ÊÞÊÍëùCê?k?´i$Ü»7Ù8 pâ5ðÅçsÑORFÓ§%UdD!&Ì²ÒTø*Gò­©R¸»6.->bïv£ÄòdÃ:­Ê9¨Ó¨`ª9ÒF¿gj¡ß
+'qß9Eu4÷g:E©Õý9<Sº³ËyÕJlÉ!u
+îãªË
+-8P©Z×£5²¥Ü3&(¯6kSã·
+-
+-"{
+RB~pf¶ãTF
+ÅñÀ?KÇbÍ
+Ö«2^J4äaæØSÀ¯(¡ÆÙ0~ûâ¾x)/BÈ±ÂÓ
+RtJ½Ø/5TD/«°Z
+Ò!u³m'1Ï3p
+?0È	1K<P_Îû|Ý~b\Úé<×·Y­ 
+}Ñ(º³ÛôRP
+®Ñ3t£p¯ü	òªÕ]b:¼ÄWCÜ$nÍ^¼C
+-ésF¡yê%Üº:çé6~ü-¹±qkïQTÅrãjHùø>,Ùìè vö{äî½fÜK­ÊU_
+-endstream
+-endobj
+-1 0 obj
+-<< 
+-/Type /Page 
+-/Parent 155 0 R 
+-/Resources 2 0 R 
+-/Contents 3 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-2 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F4 138 0 R /F5 139 0 R /F6 140 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-3 0 obj
+-<< /Filter /FlateDecode /Length 4 0 R >> 
+-stream
+-l·'þ<X/,r¸÷®¿ øe
+É=?Sj(Sù¹/×¢ó.&Il3ÒYlQÅk3î¨N¶Ù¬{3CkL·¾ó'ý8²@6tÏüFF4øÑäz253øé\HÖÃ#qwD¡nºð7RH÷
+]ya¨\!µD-ß1Ó¦Ú¬3õÈxIn|Ç
+ø×£N;éhí¡	
+æ,º**«O,K×ü¹^9i	Õ"ÓTÃì?ÄvþÎP§¡Ô²wØ8pijÊñFDK4ÎPPo(Ø
+i0µF>æ`ÂfÇªZ5)N¿)W í%0
+ñü
+õp(Oµ<9:þÍ¿Y£*Ñ@v
+-f±73Õ×~%y^Ôe[S8³h¿rõdÆþ¹$ùJ¢
+ö­Lrºõ0W´M!¦ÜOk¤	g1Ïw5Ýí¢Xç²ÛD¾
+19{å7ø2<úÍæÜcÜ-<|n"í[KMAVYÁ%$ô v{»fë>
+m5:ËÍÐxwú@|³
+µâ#ª}j;´
+ÍýÖPc¥fìGîê
+R¶u
+Zª÷ÍÅÐ@cÕ:`4kÒ/¡È>ÿct;ÂòlÆ$ûqMf«B/}XÂZwú]3!Cùé¤Jáþ{ÀÂ}y³ù¥ºõÈ+
+2Ék0#H=*]5
+
+-=úÆÕc·Ä9*á·4kpW÷æHftèOE°ëÛ·ß áÂ]*ØÕóãÁ;j	,¹YËÙ@uRÚúqæ(òas¤èøÖLaU
+Ó¾#FÚ.Õ\;¢÷G­~'ø£<®,u5ð¼C2q[ÿ¨\J´}ÕlÍC?¸62N`ÖbÉ³½;¾'²þ£Öpêj»àÎÿÏ
+-Väô ´\ÝUÈ¹áöìaN=+r
+RúøÑUVÝ#rCzçRÅV>~Ëì«,æ²½à%ûG2vß§ÜcMAÙÖn
+-n(hy¡;¿£öfEáIE¤9%óÞ¡pMXD`¿a	µ¶sw\ÐäÓD²,§eU¨)ÍÀT¾.ö*¨òüêýç
+Rì
+d[²¿iå(à.|¶
+-äg¾Ö«ðôÀ
+Tÿ(Ð\#sà¯úV,OB<ÅÃVÐ|W¢lY
+-L4r¼r0ìhK=ÐU êé«=WøKîô¶HYµ:pl
+-ñé¬pQ¹AÌ0ëOv#å
+-«Æ~«²lqn8ò Ñ|Å,5a¢NP¬xÄ{ÑRö²EÊ;^ 7 /êú)÷ÙÚ`èÜ¥ºk0ùÕJvÁV»É`jÅaSL÷rí|vn'»O¹.d(TÚ¿T.Ñ-rç
+Äi~(ýÒ$,A¯æ\L&Ñ ÐæVþ«ïº~`U\V(º¼M½~)»QÜ¨l/§Å_'×
+íöá.Þ=â7aj,ÑJ,Å«4®5'<\tmÌ¨Ý;ÅÂ-²DùÐFôÀ©Ö÷¥¢ßÑï¤§)¨ÀC§ßßvWþtGEaðc>°Kùr
+- åé.Í|òÓÕ)Èú6Ð
+-òÂ|¹Õið|kK\ {bD<N¬ü¾úÚö:vÿRRÕ{ô0 a×5a#S~9ÿþá>V<ÞbWyN
+-N§¾5ô
+-j Èö°-ÚlÁ5#ïÀ³uk¨4ØýÀßAwi¸& P÷eô!ØqQGaÃ=2¹¬[^*n ­³I¶<{m)ä/Â&©¼Ó"î><«S9×|jí¢,Çln²,_ÜjÕ°Ø¹¢¹",
+¾oµ­M¼z8ÉUdk#ºÁ6E\<öQ\EßÉVk#®R
+K rK\v|ë
+ÇGÄùT&h´UË*ãý(k4 å×ÅÔ4èÛÌ[üdÎËÔ44¥·!l?é¦^'v±e¢²®ãÑ§tWCU@k)Ô
+'P(ö\:Oãg4*2ódH°q[`Õ¹"#[
+ý·F
+§#jìuaäX[ÖO+ÐáÇ4¦u;noÇ.Ó½ôZzdKRyÑð
+û
+Ã
+-WCñTë*&£}E
+!
+¯¤ûâò¢ìfH+87¹J#QN:d!{û°[ôôþQ5È#4u8
+% ½BîÞ 9 ØÔ--qÜíÚz_X÷{n@mÚÞgÑºÍôpì­xoIµ;á:4Êsã×¿{'
+áÌ²z|
+©{»÷b)W®;¯æ`"°àëÒáòì¸oþ
+©ÓdÁ
+~tçä¶³åSb$Ñï>Xö[[Æª3$izÞhÛ>\	Ê6«t
+#¿þÆ²
+-óÖ¯KÖPÏ£Ô{zàþFË2[YUÀÓÅó`©µ¾ï\[9Ã· ¢
+³¬úÂÐ
+! ,j:°³íkÂ ·]Ü(a	%wE!%ÆrLü|Y[W¹-3DÚÊvû|¹ºVG3T¬y¢b¥ð/1;Ö¤n{lSì QÚ)Etc6öÕ·îIÞÇ~îÍôVkÐ&
+
+Rqf)o
+-bqØ+íÕ - @¸iªRÍ
+-æôhV1ç]½Ì!]j¦H!S\[kö
+
+-
+-\Ö°G
+-r}(OY"»ÞÖ¼H#2áßd?47¡
+Pþûñ!_u;0§dº0Q°`¸L
+9Å&ÂWo¼"®	Ñ
+ÁO
+-
+-%2Ñ¬ªS)~CÜ¤'BSñ­¾k°fc0
+-uû=
+BGõó±áJÉ7ß(é÷ÞºE3!©ÓWzP³(PÍ¤¦ýIµkuúÐQ]Q;à s{T&òÑÄT
+-63ÆnÃ:xå1UKÀkuUý¦7÷$Chq8{-Ë$`|j[bbÔÔK	ñ­ªø¸
+-@uó!¤o$qMüðR~.i|
+Ðbø
+ýªÎëJ@~¬Zif²ëLØt´VD÷±×
+ìÚã¨"¬i'Í±ÚwS8ç(,«Êòâ0ë [ù
+?h4ntS'#¨;W÷*øj´¦ÅöäNÎPnI8h;ö¯ÈÅñÚü×ï
+ÝãÉ¿üëe¢é²»¡JÊEí\%»ª%ç|/Ù<,³èÕÃp¹ ÈÞÛçõw´ÆhQ§a>nÓ»O¶ü¥($üCa]ýú?/^1ë×æNÊ4O;ÕSdÓjÈ@}fàOecÖ´QsI«@2êýþ^
+
+-K¤ ¯4f
+$þÙáe£úEìÎ¨r,k;úñYùÙØÍqî*kPÑ{]b÷?«³¡ a9¾URj«ë'õýÊ$+ûµGñ¶
+Èì68íÈD8
+-L£Ôõ_Rñsm´ÀIjik®(
+ì¿ÀHúìZKFÝü9¸ylªÒÂAðçQbC7EQ,;öØ×ð%ÙfjK£¹'Þ51dÇä¥µÑ»³A®P¿~ôT^úF#lk+kÊó1tm¢ÂÉØ©Ò+òDÁ.Ì´
+-)ÑW oíÓ
+ÁêòEà5O½WwÉáiÌ>E¸_¼Ï÷¦4I
+X4¨é$Á5åùAÀ	m²qfø°pVBü¡VÊoB0uxAßª_'ÐÒ`Qc°0 èmj¨R
+á¡v Òá
+õËgO×²
+«KfÅ\¨
+-?¿PTùV§&,ÂB
+-NÁ£ò Î0°ü+ØTb°y§qIõ. å«Q¡ÍS
+uå1íCR·bp1ÁÉ
+õæÌ\óc'òþ`ÌÁâ¤}È[¶}àäâÝSTSBh18
+Îåk8CÁmÎhÑt]B4õQñ¦¹º$û
+gK «+/otfH9`<ñ³hBóÖ¢Í0I#o«oøtT.â»<´Ã	
+×<÷ú]z+#:¢·Y&@62Iú@ÊG¤´Hµðj³ø7ò·ÙL9Cø;æE*.Z:É±RRÀ$*õHe;Q1ýåô¢¼~}Ã¸åØòy@ñ¶i:¤eâ_Ï7V_Yr9nÓÿT5çáüÁ`­IeËOrmZ´~Må	,-Ü´-°$Ja ],â
+·:ÛÏ¼°ç!ÊÇk¼®Ñþ-§IïGÕýHN)
+Ëöí&rZ
+L¤GÝÐ 
+h\
+COÎw9Gì:áqÜJÏÔã
+-)rÌç?p«¬É­V¯äf#eÜÓz9W"¡êÓëãzJk~±æVÃká ¢o²²\gÐ?¿ÛíHG»ß°JîzqdZ¢pö°ÞÊìè¼>éã@
+ÜAc<`#¿·ãùiYueld0ñÀ]AÁ=´ì¾rKP©.æMòj´´¸ô®RE~Û¥7CEÍ­£
+BzËõ7¸
+äD«ÊVÔùªñàÇöº\]{A	h¯gJmìÛ
+´~#ÌSÌæÎäÃ#³SºÇXaOiBõóãM,Ð ØOØâWgO¸{d¤}gàFØf45ÁäG@º ?g´pº}?âÐÐËÂÀ©ÖA¶ð©µw Uvÿ§ºâf`èôZ7ñ
+}ã¶wÛaÇ³øF¦¶BýyS^¸óµøøÉîj`§¨Ù=ÕáV¯8Ùa!ÝîÜZã0²i.]w¼fPLèÝ¯U>ZnU?T¸ªÔÐ[	ö9I.`<åÌùu éÐ"Å'@ò>4>>)òN)`ÚéË?mNÀàÝ§mÉÛ l¯ÕÕy7Ë
+-endstream
+-endobj
+-4 0 obj
+-3845 
+-endobj
+-5 0 obj
+-<< 
+-/Type /Page 
+-/Parent 155 0 R 
+-/Resources 6 0 R 
+-/Contents 7 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-6 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-7 0 obj
+-<< /Filter /FlateDecode /Length 8 0 R >> 
+-stream
+-²'º6Öæ{úg\ëiÁC&ªtyqðYsÎYÙbÖ9NûaSE!R(×tõmß¦üV<6ác/3&{\æÈ¨¸ÓEüp¸®ai¡ÞÅg
+ö¿áU+inRËö9Ôºò!¹5'^»©ÁP÷
+-
+³
+-±Rç·xM¦0èAHÏãû¹S
+-q<îìy£ì/]ör(lpåé.R§ûÐZÏuØ§7-ä.i.pVî&·ÕàÄÙÁÆ¦¨æyÉ%®á¨Þ³ll6Ë~.|ËÉþ
+-ËÉ²a(@(pcÄÇ;`ÿHò{³æ\½Uþ	ÖXÔÜÖ
+²ÆyoØÓÑJaaï½vøéÐ¦
+Û
+Ä^FÅÕ¼gàøù9Åp^îør}¬IDv¶
+-È«xfâk
+
+ÉØÅìà½íS#õuÄ«Âõ´©·*7x®Æ²Ýmåm,RÜ8
+N½å	ÆSX1e6¦âQËSÇÓ°`y´gID½Zà8­rJÚAt¿q@/ìÔ×W~Ê
+§Åû°#Xo°T°¹îØ~W&¡5ïUáäC¼óOÛMìýÜ7°!µZ£¡ë
+
+Ü .º'*!MÄNÎïÉ­ðqÇ^!·4
+-endstream
+-endobj
+-8 0 obj
+-536 
+-endobj
+-9 0 obj
+-<< 
+-/Type /Page 
+-/Parent 155 0 R 
+-/Resources 10 0 R 
+-/Contents 11 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-10 0 obj
+-<< 
+-/ProcSet [ /PDF ] 
+->> 
+-endobj
+-11 0 obj
+-<< /Filter /FlateDecode /Length 12 0 R >> 
+-stream
+-
+dÎ%çÈ
+-endstream
+-endobj
+-12 0 obj
+-8 
+-endobj
+-13 0 obj
+-<< 
+-/Type /Page 
+-/Parent 155 0 R 
+-/Resources 14 0 R 
+-/Contents 15 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-14 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F4 138 0 R /F5 139 0 R /F6 140 0 R /F7 141 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-15 0 obj
+-<< /Filter /FlateDecode /Length 16 0 R >> 
+-stream
+-ádf7	0°îõßÚÆj¹
+a
+-^¥Mµ
+ódÛ*Je¼¹ KCÔ@î
+-1ñÚØÃ%§#{Åø÷R¨§weéNø.Íçú8È¶Ê*Ì®Ò±ðr®ÿ£å¾ûýým¶6¿oÅ.M½º!.<VKû&³HÓ©è}«$:+Éï,Ì5UYw¢v¨G
+-ènaLYÚY¥GRÍ{Ô<
+:þTä¼pUnÍô¹Ïbã	Ì§üì
+5ÿñsÿdNCwÞ¿Îu¹åÐié«ÄIUªª3¢{irHÊÔÔèiÌ<;öêa<=æàCÀG
+:éS)
+-Ey-ZÈÐÆ	ÌlìÈhM)Ü6¡o
+Ð ÖæóRä)ØNò¥ÒòáÓU
+®ê©pGÊ
+zàE
+-¾
+/>X)í+à`\ÅFSÈ;þ:#®¸cGmnð
+ÐÎ*zjzw'ïú']+,Ä5×yüØMøÕ\ÇMÿû°×§iÁ[*³!ý1/Ã F2ZÔbÆ¬s§àÜ
+µÕ:÷e±R(2{.ÐòÖòýð1bE£¦í^Äê31
+A?+ÇÔÏÒAÇkôhû^§ï(´u&1
+Öv¼´t8ÕRÈá
+Ì¯ÌH|¿§¯'MA´[äÜÂ°îC4­gksÇ tcµeÆV* ô0RÇhX.5jøFK¾Ág$J¦k5ºé´¶ùBZ	ï-ìô>[tË:q
+Íþók¾uÏÙnh"L§
+-ÙÃw>T6öË&'Û{¢³-ð[Ài9µÁ9â¬Ü	{
+ÐáÚ0DÍeL[
+,$Ì±Ü®oUwPU
+jRð
+b	ÄÐ¬]'_Cá6zF%/myÛ¤«0¨÷iÓß	Q´H6.ª½¼Á¨kî%Íó&«çÂÎ*ü)L¬ãÄWh)¿
+æ°m%wKCH{!äEÍì{
+-U#ÒýüÌ£ògèC 
+ZYÿ3;ÚuÁª÷úyè!nPkäçò%
+-Â&T¨?»Ú/või
+wj&×	À
+¢½\
+-
+Lp¨Ä7êç÷ª¸|R«aÂMÏDÎ\êb`K£ *Q!;.Üñôáé]±Þé¸à^>»A«øú3
+$Î÷ìµÂãÌÀëU?¤¹éÖ8î.Íçû$Öß
+8ô]ç||âj]ÆãÈ-¡8LÎssµN¦.¹r9ª=[²{ÔBtCxf¼<dÖ$½3àÞzÙýé'wnÅõÙ
+%²DË,Êrò9ät¿£»Í¸¯ÇÊ:SÇCÃ³jV6¤£ãðcÍÙ.¶jº&¦û>8ýe¤v TÝ,ØÏåKÀòÙl­ô-Ç;Úæi¦þ\¡{o2Æl+Ç!£w°\>£]Gì^;S¨8tZ·­é¯
+ÙÀâÏh>ÆùwªéL¬¿®´ÝýøË)45¬q J:$äjgÂø?,H¤ßUô²²­é³cHl²ÓØ.ÆE&4iVPÖÀB$j_õQâÆßWX½ÞdHIqóì
+ÉN
+ÙÝäL ¾!Ïä\
+»·®LñV~¡ O
+ñçAvf½ÊêÛÀ÷.Õã
+,¬GFQÅSì¹.Y *cwjnM
+ý¨§OÌÓkÍåb4;ëh
+6Ç«¨cuÓ·ÜnSJGßX (­Ýà±g`\°ö`á!P&ãj[Ãdu;¯ô.dI
+c5àÂo¸×.TÏá¸ä±B
+µ¿y¬p²8ÉÔB1ÿYñ ©(+³* ®ª¢á_û-[,¹îÀ4óÓØ|O))-¼OÚlSôíp>>Bk¼ÿo	&£ÌÆ@ÀÞ,Â,Ýõþ)=
+ýøóV
+-SmvI;µÛ=WK¼Ó?>¿ò¿
+%4\
+$²y¼
+³:ü¤ï¯Ó`Yfh
+
+-"{ð@÷)»LfRÑRÝ0·««ÆI:ú²FÖÓxpäÍâ¦Êl%«ê½|V(´¾È÷ÈÜ#t×Å¬¦£ÚgÏPÁ´wª®èÉtnåº%J¥exÃnxÐíò ZªP¬g®~z­ßë§¶½ÔS}ÿXï:¿ózø¤
+  EÁWU
+-Ö¦èñZ®V^vè­ÞøÅ"á4wÂÉ)#F¶ó&*â5pÄ[6qÓÄ ¯$BÞ5BÉâ^õ¥í¯Ç³¶
+-!oèíp°%ÂÞÿ£ù¹²zÏ©êèJh©Ân¨g}g1JÎáaiFJÌ)Ïöã­ªd~ë«yÜj²~`ª-ÇÄdu³Q¯Ú[U*xÁûË¤õÄôz}­u
+¾Lw_û!03áWËéc|Ò ~®4} ÓTòì	îºÝ¥°=?Ì<ð~q}Eì³RÙr/(ÖJ`BdT:DQÀpâÆËdkk[âåÿ´ÎåûI>ââÎFïíFåú Kb¦ð2üíÒôá~XØ<÷Ø«yöð
+Þ[HK,VXG|¡îþ¬þCñ¡¾Õxáè¼cè;Ñ³Zuö´gì
+y?»È]øµDñÒÜ}In&ÍMm}CÎ ÁSy¥bQ÷aXkÎ¢?]ÐkNÚ¬§¢ÕGpÚ)ÿ[²Ð3ã¥Ü¶Àö¸²¤ÛN Yl®ß: üÚ¾sÏ¶¸Të ´Õ wu.éÈ¦½½
+-W/ÀaS7Ûp³Ps2MNQÉ½Á°60k3º
+¾ºÇÕ6lÜ´HÎ>Q_§Ë¤£$¦S¾
+CÇ B|~u¶_ñö"ÐH#hÊU«ÝjYßã°G°Âöìoneyß/ø¡rêr3¯r	Ò½3m4>K*(ä·\å·kçEYë­=Ê°¯ûm¯ììý8@ÜU("W¯þS2X4[Oýù¸å Ü¨Sô`Ò¯êv/}I¸°á¦8AùÞ'Æ×Á
+ätñÚpÊ.ßµzYö¥RKCÚY ­àDôàBßi µöÜïª0~ôîá0:·6m±§»ÅÊÅÄçÜøðp Ì«3qÃ
+-¥ßÅ¹±ÔÿÔ@ õc¿¼ÕÄï1±°¿òBÞT­Ôüzö,m¶
+n4ÄÔ(	2¸?fæãÉ¢(ÈÑ¹=.ófqEU
+ç=Ç*ð³ÆìÞúeñ$HÏ
+
+!ªK8u Ó
+V$³eìÌ[;C0
+-endstream
+-endobj
+-16 0 obj
+-2597 
+-endobj
+-17 0 obj
+-<< 
+-/Type /Page 
+-/Parent 155 0 R 
+-/Resources 18 0 R 
+-/Contents 19 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-18 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F4 138 0 R /F5 139 0 R /F6 140 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-19 0 obj
+-<< /Filter /FlateDecode /Length 20 0 R >> 
+-stream
+-[áj/:çÎ
+Rbæ¸I
+¼BCSË}i_'°UWHý­¿		
+~¶(sW
+ÝB2
+=toõy÷µA4ÇÕ¯ÉHqvðçQ¯ô|§9ÙÇµX ·þ«
+-x
+O³õå¥Ù3M
+-·æú@ÇwBÀâXÑÅD½(
+2ØRÓÎmbcj×~7Ï³¿HO~ÊË.½,ì{Zr.&m Ö¸{y·x.ù°tíÝ%³èØ£¼ÜW³àé Âé¸1~Å"Öi÷¬
+~p0ê©70èª+ÀÐ®/¯BDÌwÈ°"XY-hÕ¥ñ/
+è¤9·$×3@w0[@V
+*ðÝñ²V¡K6±Ì:gÞJ´AârãP
+-~%Éi& ý`i¯¤É©°ñOiàq¥ynóHÊÛ·D¦öê,0lW`¦°='J¦1û^B¾v*ÜÜ_ÚÓEª6pù£PÂN¡wcÒ°fÚ
+xqãðÀjÉ©HL8E°Åvê¨îjI	¿WO"LÎZÔ9A²-æ=«Gà SAÀ¡©Ì± ÉmB
+ËÈsÿcÉ«tF=@­@é÷¯¤íKçµDò3 '.¼;)i{ÞãqªViH }
+-é®{
+ëpÒA%2ÚÞÆê
+ìÐ±¾ºERØ|±$Ñ~å
+­åµv²IÿÌMS¾~»	OL:
+-l[
+´n½±ÿ|z
+LÈ±%§$ìÿyæ6E
+B ê:
+rØ
+-
+Y(ZwáXfh:V@
+ïO?ÙÒCÿf
+-}³
+p¡â¤"©8øÎùòïá\³§¾ue>{§O>±lè=a
+
+-©&J>²C3±ä TÿãëgþîW§
+J(öâÜ¾Ôì×`-Ä6Óo´TM*tpÈ¡î§ñ²ðk¼»fÙá¸>olÄpNe±ìu0ãÔ[
+#·ÙôzôË§i¹
+æÔÜcvÜÿ
+×m¯U[mK§«*y
+-¹2W©ç JÿQiæô¾±cã°±f+³¿Oû­ô»sAS'Z÷/¸zJ½NUx¬êËÜ¿S~
+¾@çä7I
+0d|Ø1¬»	Ñúïñ
+{o
+Ñý%S·õ©(\é øÁG)Ö°Z?ïÕ¨D];È'ÖV^Y®÷)O«ä8myq8ÝZµÆïêâY>
+K33×­Öå&Ñ ¹¦a+
+-©VÚ
+-I0µ-Äjçh7µ6å¼b¤}ÁÏ'H+ËKìiNåáÒÅß>üqò2
+Ú]Ø>×wsÏ¿ç
+-UöãÞPÖáB7
+-
+ÂSwäiâ=!±z1Oª£ÏàÂðÝ9ék·zÁÍäd´ÌzO% û
+ØJîÇ®ºÌt·,$6ñ_ûGFÔE
+-}âñö·«+LlÀª`)kjq	äÒU£
+R÷¸"h;w=y¦>Dw¬ßô¡¤êÊ¸.$
+ýùôºÃÿxµþTÔè¼ 6
+-«¸Jl!ÊUÓ<TiACù-rÖye"§ÁAû÷òDV 4^J7=oÏç¥
+>sU¸Ë®ÛsÌÒp~ZWÛf¡6]üZ/àY~¿TæmÅõøÑ70ÏÏ>µoÈçov¹2Ì®ö|ÀÅ%÷IªÎø Ââ¦>æß#út×ôW*
+/
+ÛkíUÙ[4X£MïZI¾ÝôWÞù{ãù¯\¸·{/ÄmçÒàîf­ÙÚ|Û¹T>wõ:>'ðÍ#8R²£ÊUlÕç¿0Ó)AjÚÖùïÍýL­´)=«Up°×#/«µ î5Á,IÊß9F
+-törwò
+-+ìë¢õ ~4`cÀúEÌïíÙrÀ9s½Ê{_!+ôàMh#]ì]4»ë<¡oÐ\Ôuå$eÆxè£mHð¦q
+5gIäÌ5¥^
+ôà¹Pn´fêÒRÍ¬
+¡(´ÞÒÞJ+b_|ÈT¿Ó
+¤aY¬A;³ñÅHÍ1Vyj
+ÅbæÇ4¯à$D®ý58÷}°4<
+-Ûzìâ¯ö¶Q
+è×rlÎ?è£Ïþa§GàÜ0cýNe6ÛwavuL¨`ÇsÞOd¤¦sNô=ëëüö^QÌÂ
+
+Ë
+u
+@7&Ë#òPMD( zÆ
+ÍÅÜy¹h9$`åhzu³q¥=êwâ=¥ôïÈ-§Ö
+vZÞ üÎkqWlâgùÙÊ5ÿEõíîi=ÄÝ,{Î$Ã'Â16ê·>¹ro¦=zÑV%]È7Äm´¢
+"ÄwD3ÕfïÁa¯w¼Lò@·ÁÓun6È¼ÛMngk°1$ÕÇvÙ°õ!ãÑy&
+
+ÇqNKu1í¯ª©fàÝ$_ïaç="ýUÈ!2¶+wláHüô¿}zø]s;fR\ÎþNû¶Öü²¿*­ÊmûCLÙµ¹ÑJmúf©)¯bç¸©jc!#Í='-ê­,òéP
+ ©c¹ÕåÁ¢¾á¶¹?*BÅþ6/PH«iÂ@«®òñçjtpºú
+ù+«Kv
+%3ùýAlg»¶ÈñÎP6
+-ua5K)Ðz¡OÈNæR&ÈEß`s6chXîxäIü¢W¦](üÐË8&|Zât"7·Ä^Ä¥,hGút
+àêÜ`y«ÁÈhâ¸ÙÓÖõODvÆH¾!Âð)'UQ:<ç|÷
+~»öyD¶-+]ÊºK½^CÐ¶r]ð:½­ÊËr1ó°îrãÈ¨iâ
+LÃÂË|~»ØE¿ç¢@ÿ¹eÖô=
+-%(ñ©ó¡£þ.q<M0×er_
+¼Vínåo
+»2ti
+-²y±¯ÌÁâNðú}Ü
+:Ô|×®;aëYö3§îËþûo×øE§C,Fs­ÕÕa¿cÎF5ª°
+-ø'GKü?ñ0]GsÝ(Ó±¿a¨·NÐ'¦	îñã#ÔöT÷¤o rQT,ÅÈÌAÀ+RÞðôÿf&-Ê/õì¡*¶OºtTèÜ]Ù
+À¹¶WN×£VE$Øª6~«`dð­íUg¯Võ¶uùøÐ"MEVÌÓtÒ¡V{g|<BÛ}y¡¦¤H!Q
+-(á"hú%
+-Dh¢$ ¯Èf
+Ûúÿ¸­Ac¯q»Ú(Ê¦@ÿJ$øß¼k]÷
+ð¨r`|?
+aeÛM"ÚZä¢eB:¾þr>Ãy(þ7~×º¦ÂýÓø
+N¼üBa$3á½2c_G½m}®jw5*ÑuYq(GgãJmmv
+@ØM°Ìµ
+
+2*	yßé	û"
+ëÂ3&<ÍS
+-0æ­,e/4P>vOéaî¼ Òä÷wçî²!ÐÓøè×ÔhV9Ù$LQé#Å-£
+-[¢wJÙøFÃ!Õ»YCÅ¦é²?ÊèfÿglÙíÇ
+-
+2ÿÄÐ=ù1àÓÁ`ãA}RÄê´ª
+ûrçY+["±&9U¤Ûyî4Å@°=&
+Òô.®@é³û0ÛÈãs`r
+-£
+-ðU
+»þ/u¶S¥Ìõ[®Ñ1
+æ¤çY óf
+P
+_öC¯s*SA
+þ#B7öÁ&WÐùµôÝ,ÆÉ+ïv
+-Lß&ßä¦½®©ÑB33m$¥í[½¬Ë?ø$ºiçT
+v¹äNjeò:~¤'
+3Q.r.Xàeùæ[Sèrù>Ri5È'áËúz/þ4@ò Äy`Á3¹lÿ.ß-o>2`¢lfás¯¯<ª/H¿ AðUÆjëñG³n
+-»ÚÅ®pC[_¢
+Î
+ª6ÈàwP};
+-XUÔÚ¾ïúOz¾èFôB
+°
+ÖpÀÒLÚE/
+-x&²ë
+§c'ÊsÛ
+-endstream
+-endobj
+-20 0 obj
+-3169 
+-endobj
+-21 0 obj
+-<< 
+-/Type /Page 
+-/Parent 155 0 R 
+-/Resources 22 0 R 
+-/Contents 23 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-22 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F4 138 0 R /F5 139 0 R /F7 141 0 R /F8 142 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-23 0 obj
+-<< /Filter /FlateDecode /Length 24 0 R >> 
+-stream
+-RâOÞ>thn,3#_\Rbe$£).F1¸X;Ü£ré+
+-IÚ}oO!Cgv©f¿-Ô5÷ÐÎ="ÙÿÐÅàgÝS(t4ØÁ4ç%#¾¡íb£V×¼m.ïEõ Ùÿ
+BÆzÃvëXJv uíázøQê¬w«Ô+9ºj%¥Ñ#r´B©mTg&
+-°oaî[Ó[Y±g./Ó|Û³è0Gü×$ ¡ÿÿ¤eÈF¿ÇB]=ÅÔâ¦
+o Zä
+âÆAÓ§a!¢PñPóÁëKR <wceX
+-PfmO>ÁT&âýêc<í1ëLÖCça{gkx´öîÀþQ	ïuâ_§Ëiw©èÙñvðhÀU«t_ÝàêU_èøÚèù}
+-Ó1R­8®¯ar
+NdÄ0¦)º
+-<B¯á'¨±/d Çàu¤±¬¶]gOCb5K`à	Ñ
+£Pö,f-§°híûÞ¦aêß46%I=eè
+-\ñ_ê(C´ÓÊ` ·lñArayAÛ×|h,UÆª*3"Ù³¾4eÌ5ÊÞ
+,ÖGyc¶Å=ÌÔúNrÑeê
+7!úÓc&ùü1­aî¬ü¿G:I5f¶ÂÄî¨Ó
+-ôajE$ÖëD×rd
+ U:V3|»&®qÕOÄ©ð`4nõ?÷¶6E:¥ú·hF¿IÃÕ:üä%¦]C¬µ-þRFñl¨ÙN=oRl@zMf&/sw´d/IHUrX/°Ù	¨QíX×Ä¦Ç¤øºj(!­a4Z;µQÛkrRÞeKºv
+ý«XÆ¿ÊG=zòYýuäþÑg'}ªO±íO®¼¼qå¯µV&kì"¸qKq-H#(­¬<Ës^ÚüýÃöOr`;@z'vPéÓ
++¸çõ ¦XBH£ÅÇGÒÊ¹îX«ÒÜz8sÝLjÊ@pï²A¦ÅXä
+Áî2pr¿{Ó	D¬fÜ
+ýs
+-õd
+K¯²ú\Å'D.GLû-£oªÕ
+CTtë7¤*âþq Àa¿5þ!ñØAKx"!Ñ÷T¿»þV¾#\t=_r©Z
+§æà¡è{½ØëHïÐ§ÏUÂëÉrÇ"¿Lù S¨Ý!´
+j4ºÁn sû1&oa=jáIW¾leÕw9Çu»"]±"ó{°ª#2Ã¸¯´Ë7?ãoà©µîË²ß8/8I·EBÑT
+ØÞ¢|÷"duùè®ÀÔW(?VïLvË£äÔßÎ¯:ÏHÇÀ£õåèì£X £ú×ã}/æ:9^
+^¯;XLö¬Sÿôm"Ó
+-]§¢Ãò¿ ½ÜBt8B½ Ã)7âDÖNEàñJÃÎÚÄOOYk&Åsí¹Ò¸$ìRÆkA
+-bVþÌgi
+?ûE[ k%ì4(Õ"mxËJÖÔÁ$à ;zÙÜïÞØ0ù/&Í
+ 	Slº¶æ,çÊà·òhO=\ùDQäº!<=ñÉQ(¬VÈ¯À%é¶
+-}ëÛÑP^z
+ùS-Ò~îÍô¶ÖÞDýßÚ@Ø³8UÍpGþðI
+»ì¨\$«ÉtÌ_Ü¨&
+¿-yÅdÅãYUäZ;èÈ¤Ðu?c
+
+ø¡Pl1óm4lêõm¤Å¢¿!U¿âÑÑ{
+[c\ÊV¯¢ê¯¥{±'lohôÝfÔc<Ä¤ "Vq\Äõc\mÇÍÔL¥Z`{ýO]Ñ
+-ÃïNdK/ôÁåìõ\>úMômîh§ G\:Dþ
+¹ì(µC ý6à+À@.ÜìOúÇF4Cø¢ÚÖtQÁÎ:í
+¢<ADX
+b\@õTvì$Ýp]^TØõ\|å
+-Z#¥³Ôæå@Rýay×(h­6Ú#÷,{W]Z8>a~
+6~u2e¹]B<§~UÂí½ïS®Zw Á¹/º:3BÚ
+-é
+úPäl=üfOí_C=ðï
+;u¯dW<IôÎÖãL1úç
+-ES{[
+1çÃN÷¯b"K=~x{nÂûùzUùvÚaFWX.¥-Ù
+-N<W
+V¾=íü4!9úG2`}¸õÏÆõçÎS×!ÉvD¾µ¢ÆùØùøHSo}¬ð9gÄ¾ø£3Eák
+)Úäs3W÷@þ³GG$XS.j
+È
+-ñ-PØIoÞíH$ª!öñ6	iì×ìðA¥áµÿDÉ
+FÂc_Îg¼CÐODÝ÷¸
+µdÆÈTêæÈx]¾·¨D
+Ázð°Ô¤à3Ïz
+-¯
+Z½-
+-ylH¿é¹
+6ÿ©Uda7$Hü¾Êîb¹$ÿÚô&I" 5º-vðo,ôßG$[I´­¿N¡³
+-endstream
+-endobj
+-24 0 obj
+-1964 
+-endobj
+-25 0 obj
+-<< 
+-/Type /Page 
+-/Parent 155 0 R 
+-/Resources 26 0 R 
+-/Contents 27 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-26 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-27 0 obj
+-<< /Filter /FlateDecode /Length 28 0 R >> 
+-stream
+-WôÏG{uVÓ³ÚÆ©S)&è2¡3x_Nz+ñT¼¬°jþñÕü]®SIÉR
+-«STY·Ó­txüNÈàõû~¨éV~±`2ÚB1ÞëaÒYÆ_N­MºÃåÑ ôs(ACÀ*-ä
+-ñ´}7VK"
+x´û¸úÄ		çë$Í=@5
+- }IÆ#mÝö
+Á2B²§âVQC£¢f4_ê´Ò¹yJjÃHãO]_:°³­bOËft
+-í ¹ì³"Ê¼câr]­|ç
+-=7VýõYc-Jgr¥}Üxu½49(6PÆ:²ð[ºVU+UÚ"éÿ·F[h¥ê×#§ß·0Rä(ÆyHX/#¦UýÜ
+2
+ñ71ø
+çG7<[£6GrüAõ#-n²M¶çúF(ó¦-þQÛ;pg.
+
+N%Ü^?âCÑÈ
+jÏ6ß4_éPÚ
+ÀÂd^jÕÿøìÅ£ëÆ
+ùgeCÈ0K-}f©!·|oÌ6YV
+óÇ®Ëá:£RÅLk·xUvª\!§
+-7îî;E§âEGÖhtncCKû±´
+TTKm«NçcÅá·û°0uÉ
+ë¸Y'­ý¯á©OØÆªk÷q	lÙ=J¸*RRÑc>îþîH~¢ö7ÓßMCAb5«¬d[
+-v_°WyÅU wê(¿)>ÂçW9dÌÜà×$}d=Øp17}O}÷Á>¿;D¦ø =RÄýÁf¯õ«cu¶Z÷Åý,ÑhæwHá4nÅ
+ÇB0ï=Åi¼Z<ªN½GËuÎk¶AYg¦ñtRF*xh
+5Êêê
+Á/ÛdìxYwgïi¦]hùÛ{äF$×¦· ä®pyRz. ºr§¼þ8yÑ¼ýYÉÎÖQd
+Ò$`.²2)D£3ÊÃ·Y|vQ3¼1Ûß5@Í¥ÀÓ ëÍëX$û­|2ñ,°)£Ah04¹59d*ëSE=æe___O"søM¬§p
+-¼¯ Y*ë¾ÖÂ ¨0"îà +BHhy²±°:vÇ+¤À¯Að=bý¶þg\ÎSec+µT«øñ{*ÆøèBáðAÌ¤Ñ!äUN=*>n¶Â¿$ÕÿA¦öÉ4ii¸[8¡o#¿UÞ7ÀJOçGTêÝ[d
+yÁGbDOäÅ1Xï¢
+ÝRôôJß£ ç7¸*OÍ5½ôd|
+-^}*©ß¬¾&Cº[dsô6ûÖYôy{¬ëzXGGä1é
+n1¸;]³âA2±
+hSIFºjsUßa±
+-µ0,d
+5ÞqrpLùFFz4îqNí®õççR ¼X¿I¿Ã
+x c¢ÀVÂÆs&?½î,û¯ó|z<=Çô0äxð¯Ï	
+¸²À,¢gÝrG8^1¦yðÛ. 	¾ ´^I	C¼·ÞTß
+-8º¥ýsÔ
+1ª×*U·«ý×t¦záw*È$Äà ¯¶¯Tà94gV×,¿ìé0¦X2i*Ùn9á»)Âªö­ 1êÌéæê-Rç¬/ÊþvdµM³Ò
+-§¼9qêup±]\é¿Óa²~"béò/G$Ñ O¶ ÿoÊ8
+-"zcÖ1ó&'
+Z&OmSiAfïKô/pçÓ«ÑS\Þ]¤t®ì©üðcVòÔ³Ä(ë-,\³6ûdNk³H9¶Ñ\pÂz$W±¸¨ ;#z:@y·4¿k¯hÔ·;kÅµÅíë2cÇîËen±KRÉ%iiÞ3w,t
+ºÖ¼NØ1îÍ¨
+¤-¤ÂzFÃdj¦iÐn¤ô°6¦ÂøåÓ¥ÊöUpo,å:zçÃ¿Éù÷¹%
+-»Ö¾bx:mz¯K
+¥9g3`¥ä?å¤¥6Ã¦UîCPWÇÒ8¯ö¸¥J
+ö\'ö}F2ø-jw¯°­¯
+!¸äJ.ê
+-Éù
+fÃ 5V
+-µsÜb_ÙÖ¿5Ò;]
+<å­Cã÷<ýÆë,H¬bö9§ÉKæJä¶¹+çïÜWúP
+-endstream
+-endobj
+-28 0 obj
+-1737 
+-endobj
+-29 0 obj
+-<< 
+-/Type /Page 
+-/Parent 155 0 R 
+-/Resources 30 0 R 
+-/Contents 31 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-30 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R /F7 141 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-31 0 obj
+-<< /Filter /FlateDecode /Length 32 0 R >> 
+-stream
+-Ôì·\EÊÿ8dÍ`
+ìð¹G§Õ=Ò_ðóuÇ
+KF@ê
+-ÄõãÃ5Jï}
+ª9YáÑÆáVíhEc\Ï(T({ÊlÇcTï³Üã?éú^/°î*løÝ@~hºâÝ?54Ô¹æ
+¢ïÍ^jpkW0iÉ-±ÏM(
+,ã¬á¥ÿ[*8
+&
+opBFËÃéÖõj:uß©h÷å"¥® McÃp
+
+gÆ2¼{ÅÝéT ©£){F3æ\L
+}:3!õk?bW7R_2Ç¿Có?d^sN½,ÓLóNUR~à¬¸««yµF9
+-³ÄÕÝ	ë¡ã©OljcF¢@dO?Ú*E!hZÄ~ YÝiìÒùQ
+X«Ñ
+-:G¹rÏmø?æÈ¥ÐºäÐ$'6}«×IÞ©	ÃÞ²ÀEÅsOFsùJ Æé$ùa3ÓOÆ£Æ]óØÊ7SeÏ¢¤y?AÅ0$x'ïé¿en=21$BÁ> 5 T5Ðþ_*È×r
+OÃ_âä¡
+¾´«8
+al¾*o:¹FNÆF!ÜÙ	ÿ©ËÕt|ÈÅÊ78³Öp<j°.®Äµ¦c^8@:8dþënmAu2õÃäG£À7^\!3ÅüìÞ¡ ºNÃÐ¬>îe(ÆSTøI
+I]¥ýë¤
+O¡ÕñÞÔ0>ø 8ÆWèHb¤;>æÌÉÌd¢ Ñ~ò¶²9¹^SÃ\·Å©cT6JHS3ÆCÙÚõ¿::7ìZ²0þÈÀ¿­´!p1ô'hk%&^SÐ
+Í¾/*3@°±nCvÛG*fè8Øè^=U¨R+gqçÃ8½ýÜöp×xGÝ`×EdÎG§p|ÈçÒy¥ Ã9ý
+-]ß÷´§ãî;SThí9««|ùYØ1ÆßMqõgh ö°u0'yú¦ £zÃ¸î,ªízt}¾èÄ÷MwõÖÓXñ°ðCªZÜd(fàÌH)Ô ©rr /qzÍdÊmÀ$¨ì t0cÛ59¶f)Ê])1
+-
+pIçÇ¢g½Yà§-IxhÁÞo.
+-«,&±Ë1e¶«e	ôðÓ±awßZÔ¸4·<¼6P!Õò¯î
+²Fãúb&BZADßg¿Ä?Í5]e(hoèòwükê/3þè­«÷ I½ô)È´Óæñû¹
+FouTE
+-S
+ØßPÑÜ,P% öÖâ ¾
+-
+Ö>¬D98Iñæ´¾bÚ¡Î*è@1Ýåºrÿ;¹|ßÍ½
+ÆÅÍ<ê?}[¨Ù¿Ll¹jQ.Â>`Ë­T¶¾'¤÷¦ëH
+-
+;L¡ çA
+Ö
+%zp0uÃÐ´ßøu
+-Ó0*åte½¥½s%if?±VNy=xFö~°÷âuDúê±ê
+¾k{þ
+RÆêa·«ü¶äbmU¾nG[ê%<Ë'Uº¼£,%°Ûÿßî6Ãw
+.BðÜ­¤Ä	ÓK6}©$«jÿk{­q½©
+NÒ@i}M@8v+tNhÇSg
+°F 
+×) +#
+-ïü3ë<Èþöþ\ÈÚ
+-Él÷Ð3îÌY¬*UÇ9KÖí@ùÊ'F¯ôý½RðßÛ?>4S4'Éö¯
+?
+oD¤¨µ¼?eiÏØj
+-g2Ð÷
+-èÂLâo>K#O£EbÎòyÃ\TVé0ð[í
+ÇGõ -1`#Nâ²
++iXà<7­*¦·:U²ÐÂõÊ
+ð«.4opÍÍÒ{îQÑÿ'ÿhÇ§
+-y`¼
+-º¹rNçñ÷ðI$Ó¤3-#nÙ¼U]IÍí4
+d³ÝLfR#,Øºe(Q°·ÉG@Xç¾ÎwUæ8_|fö©f1 "ÍRBú,_^­P¨Ý.66|sÌÙIÏÄÏ1ý
+úK,ñòÚÈ*kTóâª'Eüï*
+­2Õ
+-6:q=fª¼?ÁÖÙÅgõì©~Üq.!h>ôMÛ<]>WFÝéÎ/·Rï l²Ö,¼Üôt&å
+Ó>½¤bû=ìmêvÁ
+-]wAsùì¬Ü
+3E{èÏjê?5NU
+WêðÖÃÐÕC£ü]üäNíY¾ÎñQ«fOÍ}pJ"5`ááte³YðîþÔÑ6¦tm¿jy°üÿJñº'9x_
+"Ê,Ò¬q#|éÏÔ<Ó8Ì3,£L»ÿ´mÿ?º~	Ñ.*nÆV
+-Ü«l
+a8
+ý®nXgü°XG¦§e)¡þR½«öNYcÝZÑkb¿òie
+Y½xbðnÖD`íà¯ ^® v8øñbä,ZHMCøâN
+×5ûµú
+-eéK²\°(SCsÙuÛ =ÓoªÌñçÊ_öü}sðþJ
+m[1Y4b]Q"Ô:wEÐ¤)r3¼U¦ÑMí'ªÍ«ov é(Æò\0¤nÏ1!\Ð>3AÒôØTEg³×o_äÇKP³D­¡g
+-áßú m8xÒì¨xvI:.#ÛÛªõh­ÔÝDÜp¸
+ÓÍEÔ	bÿùþ¶¨NXIÌ ûBB;ñ
+_9Þ
+%oX£ö³m¶¾Býéå
+
+-#a;'ß0´fNÎ"2ÓhIºÒcÉ&ËpÛÔe©ÿÝuOÙÌ7í¹/¼ðeÈÇtçÌáu
+BüÝ[¡hÓvæUTî¦ß2ÉÅZ¹Ð¿(bK¡àß*æ¶jÆ©ñæÎ?ÇÅAtÔ£SI	G;;
+w_d {ïÒÅý4´Iñ?YÇ÷Â
+b6;÷@þ§Ç3_xaF ÝÓ$Ênóå0®¥¯Àªáî-ÁoÈV¢R/2
+Ò­4m¸PÈ 
+- 
+ùó*=¡CÒ^
+séìUðñ©Fñ+¾ S^]Ã
+-3+Â?O~eWuc­|Rv<òó´ÔÑ
+vÐ,´	àÅXf?ÞL !"âÈÎ¾O©4À«iÝ¿Ñrmª9¿sÕvE$
+®tÈ)Í­rª.YKùæë¾F)ONïñÔ­S÷ÕSü=v{y=q@j´0«¨âv1¯S§=Yà`ü Ú#¤Á§5çË¦ÃÄv¤êÃÅÉPØ|3\ÜP
+õÓn
+ß³é}ìÓ¶hÓWßÛE
+y×üÚöÚ Õ£#z:äÍ½&8Æ>_
+^úÚZãZQÞ}ÙC.Üáÿ­=>¦z%ÞÕ°:èµ3óô(½ÒnÀæ£îXêÜ[3P2¬­òJÎçõKÄÓ~ø
+¢8£,¬F
+
+-	Ø]ÃÎ'Å
+aÓêÿÅÜÂ^¹Ã1t
+¬¥}ûÆôä
+tÌw»&èôa (û?[9b²õdäÓáú#
+-endstream
+-endobj
+-32 0 obj
+-2761 
+-endobj
+-33 0 obj
+-<< 
+-/Type /Page 
+-/Parent 155 0 R 
+-/Resources 34 0 R 
+-/Contents 35 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-34 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R /F6 140 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-35 0 obj
+-<< /Filter /FlateDecode /Length 36 0 R >> 
+-stream
+-[{4|ù(@j- ¿äV#ôÀDÔç1`~¸B³§l­)tÏªÍg4×ÞÕD/]qqsæàõèý,ÀO¨S1ðÈñÙ|RMÐQóLP¦²A7#d
+-Ú9¥ªôxèâó¹	+|ÐsÐzEº+
+-HA}¤ÕyMÌÞ§ûç´y¹6n©ÒóíÅT=ÍJ%þ\¡[¿a"dRãÔ+
+ÊëQv|Ô]sTeYù$<	Á°ö²)Cí%º
+à46ó}v°Ä. y0Àw87çc~QGg]~äû«V¹BïøÐ´6ö|Ø-°Ý1ÜÌ S#8<FÛÞÌ/xÉQÁnÆ,¨ÉÍ'úk*îÕø·¾zZLÂ/óöhÔÚwv}
+-c
+-rþ_¸7p»
+-¸	K[
+¯H%#?£Ë®Ä Á§.ßîvÓ ýnÀ<]ICx!D ©zjPþ¸çL¹¹Mßmñ
+-,	Á:Qt¨À3
+øRèõ!â0öôÌ }e¸×À¨qx=Ñ|ÒdÖCÃÂ
+¡û5¥ïWËâ4^~éFyCåJâÚ.RAVGN#Ô@=Qº-B5øú° zã0ÿ#³­uFCmërâÌbÄÃ#d¨ÝÿøÃÔhä1ºÅ'ÌvtzÉÐ_ÃRB&Æ¶G6x´´¯
+ærA
+-Âÿ<´
+-QËµ¶ülAÉª_B< "­¸Å
+-ÊÄeú²dËÃdRUyÑ³©iâ
+)Ä¹29z)(2óÞ+ë EãpÁGóvÜYÒìB«Qð;UÀÑ1^½=Û@Ë¾2Bhå"Í=A¯¦À²!öðh§ÜTÉSp::$²bCÕºÛm­*@S-ë¾¹]Cæj×¤S»ÎsJ· 
+%²-pÔbX9
+A(Ï(H­?ü¦ú»8xðþ
+Ä`N)fæuëç+u:ÌPsNN@»[("¹tÈ£ÿm1fÑ	*44WÊÓpcÊ	ÈÌbOS_Rô­OSF¨5zvíÍÖw²T|üXÿÜ^®! x³
+AÅÁìµî/¦¦!;¤Í5Î@{­y[¾o cxhµß»×û"VuAN¸b32<	l®GÄã
+ó­ù 9¥Ë
+-rmL«¡=CìwW£}
+ÐsvGîyfþëßå$ËÆó¢oÁwk£ï®ð´
+S>v½[T&ÙGf9}s4nÕ{^êÝºB$
+--
+-
+G×ðeB XÎá×£¼«l«×¿ÐVR
+õ¹ÖûyKö B^#§S¸Gô
+§	¸wé.ÆBzÄ
+-àø¤¾qaåDÐÍì³å
+¼Ù,àþ?JÚ²åLÚ_§[½yEz,Ï%
+Í¿Èþ¥`¿ßÏ ý±)ý÷hè»è¸å`òõ'ï¯UEµí37mÝ9ÿ¥Ò/~`Ô¤-
+æ¥:VIÑª3½¿P	 ;«+fâçÏÞ÷¥¡
+-æ*º 
+6Ã{?¯ íæÎ·ÐH$ïyAö
+:-MºÁæ¶·3
+ï+5_;©:[\XâuF
+¸6XÖ¤Xó:F\$ÎÓ]­É×|M úþbíÚåOTÔ<áää²¯>5ã¹Â
+ÊÛ
+-endstream
+-endobj
+-36 0 obj
+-1355 
+-endobj
+-37 0 obj
+-<< 
+-/Type /Page 
+-/Parent 157 0 R 
+-/Resources 38 0 R 
+-/Contents 39 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-38 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-39 0 obj
+-<< /Filter /FlateDecode /Length 40 0 R >> 
+-stream
+-ÿ
+~é¥@Ç©ú0´õ}¢fDÜ;\§
+Ý#økY½å®¤Ø©^è=~ÀµøùA»éçi{J°»\&G59± AB)jåëÊÞ
+HY9Ó£¸/Qg=gã¢åC³ÇüìDº6¶?cÞûWWÅÆ23GQ9P
+Ý§ù§· Åæ¡
+ ùÂ
+xÙïÚ-¡Î,ö=>ç3 RÂ·i+
+ý¥
+ó¤!*>òô.dI¶ò6
+Ábõ1Ðí2AUõx÷§s¸ë
+Hê?³áq8¯º¬gÞ»¶¤+ ©L¾SÊ
+1¥¿¹äç7sgp[Ç|Ó]ùñ~!âåJ¸SOòy)z­é^0øhý:ô°e­"¡ÈKÅÒ.I1ÕlLm¿áJ)aoéÇ§¶g'ÇÒ,ní
+§2O	lç³
+M²ñ,Bê5V·|P-þKÐÞi dKrQä¿ãå
+ß¨í¸{ñJÿß|µ||î5£W;S(Áø60üò
+VoÚ¾ïuÑ"8oà{ÕÉÆ8·ì#Àe{ät[¦¾ÉµBàRküv3¤®EJ67x3È)_¹÷÷úBZjÕâe¿ßSc
+(i?RÑº 
+< IÄ$öPÊáÄIe ÁçÉ´º_5æ{[vÖ»IwÆoz
+§ÿ
+-¢Äi)>:´ÍUÓ¼ö»ý
+FÂ)Éò×·Æu+MRüáUÄÆ©67òrImG[=¤\Iª(Õ.
+©v}y«TÑéÌÚxZÌ,Ó%Øi#ÿâKc
+c47 ³îìÞ¬ÓÄk31Zò#öHox^VÒûP¬7U_"´¨cû.ÝPA(ÃãJc|C:ï¼2"qöh(ô¨r±Ðð ëñÁá¬|§Kà#MÊ!Åt
+ÊÿáùüjU=A9¬
+;D²
+óÛR×D¼vã¹"^ üåG½~æÅ&%Å½éZÎ&S26±Uô?xLw3I¦ÅÅ$[@'rá`á²øÐ Ìe0µéÇ}àD#ÿ<E äªØÿ	ùûäVÉcðùJÔ^ºº-}Ñ:¾íÕTx'ÊµÄu¸
+þ®¼z&T-ë&]~z	ÝHKÌÊ9Úõî'uEJ·,
+-C¢µ÷äXÙa+yT0cÌ(Gþu®¡*wm¬ÚÓXÃ­èâLd¨XöäýÙöñÊëGµ|âÂyßÓËÕ¢\~ÔÿhÄÖ|åµ×.W
+sOÌ¢ú¦ÄÿHe¾^Ê°üì«1x²è\$ÞAÀº5ai¤
+à¿CÑb
+*Ã=ð/Ód®ÃÖa
+-xà¦"q¼*R0Ù4]Ì(ÀÇþìÅÃ£}×{æ¶`:¶ûÅçU²©³X;÷±8Áª÷¿¢V»±Ôf)åXÆQ©øq1ûÍröNo®èÙ!H	J® 4/jp&Çé>Æ±âá×mcÍéìDÑE¦ØôpY¤õÐ íã
+Î¾Frvou;\
+-I³È½TZvuî +°G¸úÞµáx£´¬ØÌóI9ßÖ0B(àyÚýëZ.ÁyìþYÒ`ÎÉ$N#f"ú*f¹ì±AÊ0
+·¨¼Ô
+$VÏzèØÙ'@nü-^Y©'¤
+-Ñójm1¶YªAØ fHLmväN0úØ
+ú/®-½Ç$´î®ûóB¿ÀõLÊÝfû·S]¢!b½÷PÂÏudjõMÕW
+v(ÈI¨7T&F³ú·Jw0Ç*ó©¤Hd#bÄä0ønã'Æe^Ôp¾æÊèûÿAú
+³¾wïSÕìKø¢§Ó
+¾gÄfF±Doç[/DaÝ¡
+ê]-ÝÕ±XºoíãU}»:wªÀô;OåÿF]W)múª0ô?%Vdl2s¢!M'¨<^nU Ø«rW/g±Os)O`Vo
+Õ]È<¡
+-µ\IÝYlÚI*@©v·iÉÓÙ"ÜjGm­Dæ¢)º-"ÅRî][@^p¥ºý¬hV0üw£§ºÓ'0
+UsSJxzÐî+Þ[|6]¹®ó ÉïcGz
+Vz¹ùT&~èDz³"-%àÇ·S
+dûæ»9\egtævøZ2W
+-¯ÐÄ,d¨ñT¥{ÞèÍA`X¡4 ´®EÏw?äiÕ1dÅ^X
+»:4ÒØVH&oï<bÜ0Õ±QVÆHzÆfEÈ1OE=¦Ër7P÷
+_Ì®\¿»
+I·r?
+ÿKZÅ}UõSIî#^\a3ïòÖ
+k(¨åá¶£¨¬/»»Á5V»!A¼ìZ<bò10ú
+-8XeÁtZòG7Ó=]XNjeÒ¡Pþn±[É×tLÆn«ì\EöæüoBF¯¬&ì¼Àæ9Ð7Ì¤
+-º¶Õ8ræRëb?¨²e6 }ë¦ÖýÝ5<
+æBckÁ=çTÐ
+~Þ;Éä1Ug{âPçÓ¾ëOIq®>kcù
+-endstream
+-endobj
+-40 0 obj
+-2047 
+-endobj
+-41 0 obj
+-<< 
+-/Type /Page 
+-/Parent 157 0 R 
+-/Resources 42 0 R 
+-/Contents 43 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-42 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-43 0 obj
+-<< /Filter /FlateDecode /Length 44 0 R >> 
+-stream
+-i\¬TþÄQ@²AÞK/+ßdY aq§^Ïæ¡0<ÿ6o4^3¿pëªS·!(
+âý	
+-{Ø5ô|6¡Em.Æo×)¬
+GÏ"8Íf/Ð 
+Æ*¹ÍhmfT¢qbàÐëYî#Z¡ç+cÅí+ ÌXtÉ~jLT´|ìóc°çÒó
+;Î÷>¾E,þ´H÷Ó´iBë÷Öí³¥i¢£FTYHøí°Ä6Ý
+¡ÊÙè>øÎMî3töÞ<Îè®)ýS2YaFCèÉáiôû§û?6\/û ÿ:¬8Ñ¢»?û+öàw
+-0D'9e4Âxyåz*
+ªÇ"%þM²/þ
+mÑ¶YOz£j
+@ÒÐ
+£m4}Z©×§òQ»Ù
+8KJ'©²ómççK¿Vã Ó¬ÉV
+ÜÝüL}ØqÓ(qµ2Js"r
+Ò29z©Ï+&æ	Ù'Ñ³RéMÑÊÇ_$úËòÆ
+×©´\iq?:²i¢ÓåU²R
+]Ó'
+-+Þzoèí÷áö¼+¯çÚÒacM{8ñØ¡SqÄs§Tº1ô¢-Yü¨$OBÝqUå\±î*vcñóàÞ#ïº
+´]YfòºÀÓ¸P<åZ»TÀvÚön¸3V¬ð§å-!
+½>Io4D
+hYþVØâ_é}ßD["@çÒ*Á{%YaaÓ¢ûö?ÞºÜÎÿÃæBãYçüïìëhÊþ¤Ë²µîÆ$-ñÃ¢+C-þ8Hçü,`pó
+F!{FÙ¬ó
+]ÍÕzà-)*åËvð¶!Öæ¤cé[×® !Ú"µf¯¼zÄl då @ô²ÁÖ=¯ét¢cåYËÝ:ÎµævL,uÊûÚì9_`ZÈ¹^ãJ>ò¹15[c$0ÜÔòLåan£]DHÇRÚø%
+-S®QR¶ßKÌð>J5ÈkW|¥`zjýrãjs©²µä!hT\q_+9RÍ8ãý­î/´rØv÷¾ Çn¢Éí[òN2%D©`3Êé^CI]	GÑ6Wí
+pÞª-S)ë*Sé^úÝä¨ö"`
+âÈX5E´jÊëwðÝw+YYrV
+£fMòÖ
+Jè
+ce }Ðzó½³&
+I+¾A÷hzáSí)àúxNÏµ¨ØL«ðÐA·pl*4d5¨
+ -oð©Mä¢ÓÈHç9 ºþÏýàÑ0bsùMjj£`k´¯h[]Ù?¿²íóGV*|ü¸ËH
+EÇhlãAeH;ùûÜé±ýÉrÚy6>¹F³ÉÎe/z-¦	ÅSeG({Bý®Ö[®¨¹öÖ:¬·ÌCÆ#v£
+--ïä
+-ÆCö
+¤µJ0°>ÕåØÎ1ý½pÈóÞ}~E}m8ÕÅÇÛ>
+;
+Ò¢¶§ítF9©2²å®%êÁÛ'n¾ÊYÔ9Ò
+s~\Ô0ÊÔÞá¼ÍùúFuvëJìsº%¢ì¬
+è[R]
+²XäLï³¯hUÒ»"3ZDE
+%>>àê*SïG¹OrÔsÃ3©¥i/¬Ë ~kÈíÕQóYm
+ÿ
+Y@a"}
+ ¿$B÷<ûDG}N#^#Æ¼>éEîåHÊ$Û&jD°59	Â0±HêÕë£Ý¨ÎÚúÐý?n<hä¿çë+33ÇR'Üõ¸úHt.S*"bxÕî ¢\íB5ajMÝ±wúaz^Ñç:ðiN§Y(
+íÇï¨^±>ÇãhÀ·ÜØ³ÎN'Ì"$à¦^o1ÁñÿA{öô.é· ûD÷ÿ.:6"<¬ôêØ1_Àæÿ6$3x¹0Çä¶0ÙTÿú·z\ÞàG}
+¢e¦öe!KÛ+mW»:UÿÏ¤
+÷p
+µ
+4%d
+XDÙâ-Î½x=Ûº8JC±E³Þ¶©
+-?YëI°};$ÅOÝ³ðKÓ
+)À¢ÒÄ¸Å¢Î¨TMµöæ 0sZ7GºPB¡©îj%OmãËÒ
+¬3Ô
+-é's;õ+Bq¼¢µB>K<gï¶Ô5tæAqKªBêSHXSb³gMÇÙàÆ51oÖ
+©ëuØ,äfJ%µÜàJ_Q"'8ä/:
+2Y²#tþùÊ2ÛþñÇør!øzzºÝkÇ(Êª@_GÍO
+¹úsú¦ÑÞz¢iÖ%ÎÀ
+t¤ÞSÔgi¶
+	zÀüY«.ñk4 |ÌC¼¶RVÆ{¬Nm
+d±,%zO(ª2:r KÎ'BX®²Úf+	Pª8ÖºÁdÃµÎ\Ô
+·&qa	ý&
+UH6ó²ÝnVºI=/ñy}C æÐ Gõ\wýç-ð¨®Å(d¥á¹ï9µ°GîÌ9ÖA"ºõ(¤á]ÅvuÍ8JRt+p¢tªsÝ*ápG°£$w+À¤Þ£ª
+p¨ôÆ3ML¡TSsK3:¢HfIFèôdgHN
+PÉÙx©4HÆ \Mñ¡b6^®²²o¹
+ 2lÏòÀ
+~	" éxµ:çRå®êªÕf/ÔB§QJKpáÆ´¼+ k¾áFzÓ(14ÓÐ*»	E·#jÆÊ%C×®ÆÆg#íêV|_Ñ®8OúÈ´«kó*Hë_ú:È
+Q3«ç­4¤¶ÿ
+ð8E¨
+¶XötÄCtìíUö¶³1¿§wcPU¹çyAÊzõ
+Aï5s{t%¡Ë¢
+-endstream
+-endobj
+-44 0 obj
+-2280 
+-endobj
+-45 0 obj
+-<< 
+-/Type /Page 
+-/Parent 157 0 R 
+-/Resources 46 0 R 
+-/Contents 47 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-46 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R /F8 142 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-47 0 obj
+-<< /Filter /FlateDecode /Length 48 0 R >> 
+-stream
+-E6ÃÁ?Mî¾võÖ ¨gØÛfÄæäX9Z.o+
+£¾?):Úg^fÊßËÄ!Í@ºüÂ9ºU@M¼þ¶ºjÖ1q|^Þ_
+ævt=G`CF®â Ow]!Üú§ÚH°v×\
+ºZ%¼¿ê¯âÉ	ùÈBs³	Gòvû­
+@ù6
+Ã9a¹dgEAÂuó¹õá×3z	L¸3ðÉe¤SA¼àêâ}D+þGhâZ
+ÓÅ7sü!ÔÀ¨GXz3Òoòz.Ê¨Ô
+-÷²y þ\÷»hVÔÊX«¢ÎLÉÔ)ëL­Hè!):ÑÐnÇÄÀîÍëßq4¿[/¤v#¨¤ü à
+é
+-ÄSdçº^¯¾qxk»'¬(Ã[7þ<¯ ²âôù5=KU_C©ù8åe#G<,}}ÿ¸õÅ÷bË
+BI¹B&¾"+Õ|ü«9=&Afa[aâ¸{+¿È8·ö²äÎÜ¯å_¤á¶nÔ»qAò¢ÅÒ:ðÃAQ0YhL"ÐöZ;¸üióëÌÃëS
+Ç×mV=Éyýn\G@&ò/½Ð-Ù¹]ªAÍË÷à|ë4ÃÃz¡Å>)´±~Ô4Qc2Ýüãè|#¼VË»ÏgÜG
+úà_7ßGç¤é®^s[=aÌ¸Í%ÝåÅÙG¾Åéð
+ÈÄ7æLÌ,35R>²O5UHpAyáÈ]ÑåÀ+SoèN ñ¦v®0
+rB;lâwP,¦åæûiäÍï;ÛéX]£ÑJ
+Ø?|ºÝÑ]hå6¸ç©nÂ,hû&ò«Ï£¡Y0~ÙâT!ãº
+-ïTÈHðvD
+g®`føbÅôJ¿QLßÊeµ'oC»'22«æs]fðó
+IVôc´¥Ý³`ÇÙÅ£(¦1ô¾Î?d |æýK^ä#ÙP` Y`Ä=ÆËáK|åÙîÐ²iÕ;
+ Ö´h
+®béï#¿»±´±ÙRûÅûyöoëSã]Ý29õ7}`·»ü7~#Ø~òå1w¹è× !ámk¶Mi´Ên31
+-# Yt[þMxÈpû]*q	N2ò^prÑ\Û@¾2R'!uÜÏr×ì4ä½f¹Vhá¦aßqß¹ïà2öjýµ2¹a ×Rêí¦zÝ¡
+-x§RÑ? `L`* Ëàk<vy¦ÝADV}ÿeÜGæÓÂõU1¥cP,0¼~G~Õµ_Ñö0o#aÔ9èo',=e+:¹î×
+-ª1/ÛÔ­ß(	Qvûÿý!ôH«'êA%E_©E^l¬àú?
+-ÏT !poL¼Éø:HQlF8Úø>Ý¼éð9ºÁ{á· £º[A8Õ2à
+âãÿJÀí`%;[O>YÑÑÙùÕjìÃ´!´½LÄßhh3È`*åÃ­Ö·.³f7PÄÔg&k4XH×Ñ
+-*ú²²¸ ¦dÀÕÊ¹·Rë\ãÏZN[Q¸Ý|@ÒÚÀ
+-:Ö%JùEØZ~¥ý:uyÏ
+>WGFQÆ³EúêâuîJÿ%ôÀâÑ!A¹¾¡éßeê±%
+ß¨
+[X'-
+¨æ5
+ûÒWKk×¡Ç°XØbNC÷°1&¶©ãÕtIS)b"îa?ÛFCf52ü~ÉjvsÍ2tf¼¾Ûç¤N«D	
+-ëPõsØñöÅ6XÎ {4öí
+¸í;[ðaÖË¹yuî-ëJ(§~É­Lö°:<	ö"0S"Þ
+t²©ç >á?v>
+æè×ÍDÜ© lèÙÝÙ&
+-fò{¶fØj¡ Ë½W
+bc½ZÉý)
+á
+-?tª¹
+- ·²=5ea/aI:ãRË{
+u&ïÏù$',
+bïeO)©±¾t
+Ûý?tA±î²¬áð?;È tI^àoÇóÚæÁ
+KÏ´Ä{zß¡qÆ§cðßÄÏ1ØlËO5Ã¢yÌ"
+Z
+
+Íó·ùÜ&×QÞÿÿµvêÁï#«¬%ã× K¸ÔW
+-y
+Ú^ã
+ò
+Æ¿{°0JµÆ×G {Z%Öµ$©^ýE
+-!ÃÃqÉ{"'±ÊX'£ï¦¸Ø÷ÀwãN
+\üéùAÄ
+-É5F­×WÏ
+-ÂgòGØ
+»}rìxÇ÷Ñ|tA$5M·`%½y
+Â3
+-ï¾½\JÊ¥ÂJ{3îl\ó­ð'¨rþ¹·ßýø
+¯}®ÀAüÎ?_7o²ðHEwÛvlFD¾`gÚ³ÿ	
+-ÏÁ· ±½Uò%:ôùÜÞ¬<9^Æ]ÑOº:ªTjâbxj«ÝI¢Oßö9»ß¤$F:±hRPªc0¾£³O¹[²°æe¥;¬ìÇUºë<
+-.RíY|¦W['Û­ñÚÔ¹@&2¶Cv¿²¸u}=ó
+	¿b#f
+ó¢~°PTû
+»Õ³
+-ãÖ²
+É	*h4ÖfÑYLa»ÛÀ;8uJ©Ùþ:
+-¢H^yTä/.%o
+-endstream
+-endobj
+-48 0 obj
+-2080 
+-endobj
+-49 0 obj
+-<< 
+-/Type /Page 
+-/Parent 157 0 R 
+-/Resources 50 0 R 
+-/Contents 51 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-50 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R /F6 140 0 R /F7 141 0 R /F8 142 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-51 0 obj
+-<< /Filter /FlateDecode /Length 52 0 R >> 
+-stream
+-6,ÇðO­
+
+("Áf1ñä_ßÅó¹O«L,à÷~­HWÝ+A.Páºî
+9àA¹¶îýÏìxW/?Ô¤¡Ë>¢¢ýúrøQèT0ûá·Îe d[`ÇD
+Wôè)³QÄ?ayr
+Ní	d<+ôõ ³xñã1%{·yîû»íû
+n[
+Â»p+ lZÓ®×3j½b¿>¾jdâ
+ÑU©KÌÈUÃïv¡¡´éÖùüõcP]¬j >ï£Òzlü%ÿjØ8*fàpæ²}GHÍBÇ::[ºâVwdA?ìOf©
+éÌ"t©ÝJÃòKýeUê2ÈJ~ýfÒb	
+ó½`èûÞZ§ÈIóßp+¶J
+¥56À/Þ¼¤øíW¨õ^þÈWÏ3ÝÂ¤óu2âDY$w×q
+?H©s$·ìð¨Ëü§¤CFÿWÕr'âÑÃpó(2ÖßþûÍ
+FÉå»¼Jò IbWw¼ÖQ#ïò>¢Í¹áÉ3qu­	åãI|åóó¯n,¸ÅÌFHTº\á·"Ài[/i÷Ûá¦8l(µ¸àZãJ`Éa&ÀÖuÕÂ¾/w=»¤BÙ$×j
+ZÃ;ù½º]õà'Væ´×ëqMÅ¤c¦­ÅÙy
+Z´±?aÎ
+¥ÇºNÅ@	FÅ²¤Z/`öw2¶2¸H)Oâ¤Ìøé@,c
+ÅÕµê	ÀÙ7úªë\mNèÜ¬RàóÈRè*?á´ }ÓØé.ö¥æÿÈ­õ´áÀë¥YK´ÂÇÅõyâRU#wíUºy'
+°ÚRL-¶:IÆ L*Ë±ËbRðøÉóbðÎgÞaM~`2û6#µ_K¬ÈµáKm!üÓr~¢ DÊöÂRÍW®a¼PjJí
+äd5òu"1E!3rµæT(lm-Yô¤fèþ;¢²©KåÑâÊRßè~b~HæOÒlyº6UâîÈ
+¬b2õd¨èovnEºúö
+]^¤øÙxØZQä÷'hÜ>qõÕæÀt?
+XØ
+¨ò#±×i¾Zë3ìÄXOÔ	CÔut
+9NÒLM
+-¦¨ÖÈs#ôvHº)iýð|sd¤2"¦ûÿ½ÊRîRÍ}ßj<Æ
+öÊ{*5á¯ÕUÛ
+7Mèr-Øh6_¬·~ó\$#×2rK&[4?ä¹*´¾4Ña>¨»k>F·¼ó­"Ü?}Øno
+ïû+Í¹ÁYjóh´ÕùX2©³@CæIËÅÃÖ32¿ÃÆárçnSCë§ãáÿJ#$LüÙ§¨gàÉN3Î
+â¹ËmPÌXx¿`ØãÂ¾Kë(:§Zj/0O6}
+gþã È	b1Ì<Hb¢ÞBåº7í 4
+vÑàEÂÎë¯Öqï_üAø¥ÇHIe4?Þ?JC@;B@§ßÆ,vBóNÞx=fÆØKÉldB lÞf$*´ï
+É¶kÄº¨2MÓðq0J½J'¾2VÛ¾¬{dâ_³Ù¬¹aÁGÐ¨ÙVOvnO¦2¨ÞæîBW1ßöÿ/S±¹ûIvð]Ì[RÚâ!ïø^jÜéÎW&/æDAlöó)Y
+r$,ÅÑ}-°çØ HJwZÕp|znv"ûp|hQ®aûÒ®o¨RÁ<
+½°¼#Mb¯çªxìà4?y zYùH¼Q,XÜ°7ìðy"O>ñ	£P-|¹9âÜIxÛùSè*õÈð<íEüö_#
+-aëáíÁpÃZç2NËwÌEZ²*FßY×[ZÎ9?è-~óõÅB·`æ´G8_Ç4tDµIý,o<
+-.'#ÞH¥Ìzk³j<Ù(ØÙòºÒX&ìJö5¹ùºÖ¦/ÿêæZæ
+-PõÇ
+·Ü1ë5]x¤ø)V<"D+mØË;F»¶ ÃGÿe¦ç':×¸÷ÛðÛ\ÉÈÀl·³
+ëç °Ì¢
+Ged§è*,½­¶Áì´¹´@³w´Ô-
+-v0ÇÕ¶Mx
+Qö¦|
+¹îáDSÄÓ"zqvB5y¼æ¸ä¤Ãéèâ·VmÙ"èùv<æëÓ1ËÐ
+yYû	pf÷?VvëDeÎ/¯ú»2%z¹&¥æ
+M#½A0[«l0Ú-WÍñðjK?Y»43<ìPESeåZÇ¹üj®-C£1-ÿn(°B ²L1éGpÆ^
+^"ë,DÑ¬þs½N`ÉÕ1âXóÿsNø¹Täde]JÏ7
+ê3n.6ÒêÖöÔ×²£S¨êa/ö´LÒè!1Ð~N5þa¬pS5j%Ô
+:<ÅRæÂõ
+m ä@ñÂÈêYÌ%Xq÷6kÈÕ%"
+òãSÝ=
+Qò¾4k
+ÂÈ!·ÿAÛèfâÊMÀ9Vä¦0ÁW_qoà±U²ÊÌ.=üåS§¥§ÀÊs&²wÅx~,J¤¥_¤øõü>	UVé1­ÈÍb&`þ¨Þ­÷[Å¸U p¿FæÍÁ5Âüþ±_¾@þÝ±2tè¢²ÆL
+t¾D	209}. ;Í@ÿÚ
+(X
+-Áí1U¡²âën$í6Ú1KOö¾5øËÚ¬b§1Ë¯XÚí6dÁV	 qú¯yÔ
+-endstream
+-endobj
+-52 0 obj
+-2200 
+-endobj
+-53 0 obj
+-<< 
+-/Type /Page 
+-/Parent 157 0 R 
+-/Resources 54 0 R 
+-/Contents 55 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-54 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-55 0 obj
+-<< /Filter /FlateDecode /Length 56 0 R >> 
+-stream
+-­ß:ÒC:å1 ð$ /&sðyÁáà]`¤2©ð´?[S
+Ö3@[çå ~
+¯Ì9ª
+æklm&<
+-B|Z!Q³éJî*md·ÓQøV².õ³­©ðNÕ!U¹<¸Z¡
+-E9âÇðx1"áç¬
+6
+ø'úNach+ªÂo{>´Ié¬rïërÇNv
+e"è5.åø¹ÞãÊG|Ç"<¬ÃÝ7¶yf	9ÇÔyU
+;ÄÅ}¥ëS¡òI¥,Ô¹µ³¯
+Ë^blðì¢?Ö' HEô­3¤gÛFÞV¡i° j'§ÁÈ>P
+'%>`Åñh/|Q+ÊØÉêÉ|}N_oð6ü7õð5Ù$g¨?­%\·¢Iüàäâ9
+-£áüÜ{[ÿ?(à©yÂCW
+p"q>~íçòæ¾Uá:Ñïuæ2QÕ
+¾ù-´¯¾í
+-J
+àSLõö«IÁM!À^|
+kMRó
+-Pß
+-	*gû ,-Y¿çS,´2ö}Ë¯¡	âÆXxÅª¸b88(gËSg³ÿ&ð±8æþTÃ&n!½ÿ«ú Ù
+`¯¦v!¾ìn§ÅÇG¹n¨°4~¢.âç±ÒAïWF*¼Ra
+^îç¼`,¼¿K
+-ü±øËptøûÔ.fpr
+srlTnJ­
+-7½ú°
+|{ ­Ë´i
+Â÷/\þTÞ5Âð9u*Òæ|Gz?KÃÙÏG¨ûÔ}¼tÉcÙeÐ°ïÿ±Ýoö¿;.Õ£.LA\ðáÍEíÕiØÌýWÚ"7_¶R²Ýß(Ã´k6*)[¼Dw1H
+aÁ¿D0yô.´´sYVØ$ãå×
+
+å0)Ôlÿ=(¹Máäj©¹Klü¨
+-ÜáEÄÝ¼LSql¢50ß°íÖy@B£áñòï°M
+
+-ln ,èRïkT_sEü924ßî¢nÍ»rS"XË7á}
+-a#<Í?v(Kt;Ú6
+é±èñi®¼Ó"rDúÞr~Ú)¯?ÁO?¦¢EÚÞ ólS`ëv|'ÝÒ(Ç¨w N¾
+°­ÇbâR¹µ£:òs¯Û,²îD¬yæ°¶näóX/0çÐ %!r
+-4Cxj¨ËÎ©"|PN É4¤GÏ~,1Kþ~T÷K3%R(Ú¡Oe3`
+ºi®û$¬f¯
+-Íù¸Ó=aäxËõýpÂ|ûÑçt´
+EîâSªnL¥yq;?#]Õ¶8àã¥Í
+K
+ôÓZr³z9³ ­µ:Ú^<1KÜÌÊU$×uCA\öÓÕìÕ*Ãp«¢¥ûÆç[PÛãè6F]Ý²ofÕö©[Ù
+-¦u«	©õ¨C39[;Ê?GùÏQpuµU£4Üù«à;=mÓ
+^bb p³Eî;Å'q1$üóU h£d/%0¢h
+I 1lÞÛ îLøPÂ1qíi%`ô1§ê:ñxÀ^û{°q"£õà÷êF¥#¯ë%(z
+e4d<ÆOéÎJÖl°m¿J|QºY4PåÓFG:Æñ
+Èé\|á.^
+ºÞ \Ï£¿ÐòüþÖ´Q®,Ä§ïr¿Î¤
+-endstream
+-endobj
+-56 0 obj
+-1323 
+-endobj
+-57 0 obj
+-<< 
+-/Type /Page 
+-/Parent 157 0 R 
+-/Resources 58 0 R 
+-/Contents 59 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-58 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-59 0 obj
+-<< /Filter /FlateDecode /Length 60 0 R >> 
+-stream
+-õúmî0lÏá£ì@XôR¯íÃ=mÝ.Á<aBbËÜ.FåïÝI·Ç/Úã¾d@ÏýM
+T¿?Ä²<Ty¡¼ÔE?·aê>¦ìöÞÉ7¾7AóE¼ËF_Î¸ù4ã
+- Y]>ýþU´
+[Û¬RpÈ tãCéUOº7SUa:h`G#+_0ÿ
+W¿BòT[ÀPqBýDíÆèí=@4ÙùIÍ
+<æüú³kZÏW+÷
+ÍÀ#vuØ1¦02_§j{	O/¼ÏÙ¯ø¥¾lføÓF`o«7AqÞ$ ¼`£Ûa°¶vüoªíì~ ÿRbMªBa#_;ã!cüÏ¢¶«Ú£hZ.7(¤Zù;¹,}5I"G
+-ª	X/ãgü3<C©æªÝ
+y
+7&=ðdH¢^¬¨ [>_»9+pÿäRðís[p$ÎùÇWÜEVOòÈä$éÔYÂµô|ë¯½Ò7@ péh.ª}íÏëibÙðÇsEK¯ØÒÍ#¸|`Ê¥üþíb§Ã¨	1s9z}xG\*ÛÓþ³KNìè¾-2
+Æ-2ö"GªÖËð
+,G ±mg6ö-
+-þ|úy÷
+~ï°¾S¼fz§Ì¨Ú¿¤#?í¯
+®uÁæa&[5öý.3¡Møm9_ÏNp¼èGÌäJqK2ïîE[ÔÔkªå(I°æ&Z¼8;pªä¼Üq.P5ß¡sUÇ0XbúkK7Ð||Hw1¼HXÿãº©&c0þ3ø:¶""vO·;Tùo¿ÃÉÍYlû¸Z,î
+·fB(ýsw9÷Mk@?ëSaûË¡Ä>TÏJÉ®TÏ
+©ú{ÇÑ/¡oo ¸lÊ¨¡`íg¾0~EKB­¥àiËà^^wù«¹YïdP²kÿ,.wEîÕÿ+_TúªiD²ÇÈZvLõ%q8Ü±ÅÂb.UP2O#ÒÓpFGN_yÜu<þ/:Q©<23{ÍÛdôuj3±¡grHt~ÐQü¢Òñ
+Ãrö¹êíúþ+ÙfÈ5vvâ°áZAÜnÊ²-¶µÿ	±ØgW` +ISú¨ý?¸ÂMÒèR²¯\Ù¨T«
+pæì¾ØæëÈ²¹ÀîºvWýïîYÁ
+¨Á<º´;¹ ³Ó0Ñ¨cÞÌ1Åb*%ÁÇý'¹=ZQFxè<ÿ±aäÖdõRÎZ}Yx¬ÐZDÛµ#+¼BæüN/¿ÞòM·q³Ík52"}
+v8ä¾ë}]gÝ¥X*Ó=¶EñS- ª
+-¥¢ßáÐ`H)w·
+´ã>kð³Y%¸-­2Ê½#ü*;83"ÿL»îüc¯4J¡D`>!þa¥gê
+-ôè| Þ]cõ{Ø¼°ª
+-E¥R½¤&î5ÙKMå úéWæJÝxÌþ+ÇË9fJÎG&,	¾Ã^ù=]K¼o.°³íu|á/ ®u
+¸ÇàÒ¡+v ûç+Ö¾Ú¯c¡c·[ýÓ!î¼ºû
+O¬ãQÌ×VÃx`
+2Oõxiý:À3ýã+KtQË»ªÅ-¾ÁCÐí÷`âjÂðÂýÔºtQ
+Åp·/
+ÓS
+-Orj	ÒôMj´®üãfB®Fd)xfûvS½þÃUQ	ÆÛß«JiþèÀpOTË¥_®
+>m©7ëm9¦pôòÒê}" a{ð¶2üñ~`+ZÇ"oí¼WÙmS©Ð·Äi¡ªÖßb¬_zÀwÙxùòyô°Y§þ²Q¼b,
+ê¢.³þ¶·$ôë°pUXÂX®ø¦+
+-«&¶ÇU?/ãe¢Qh!;uvO6Æ`¡ÙÍpv8Aõ`x¼§-SÒmSãK«0 «]3+
+MA¯-óåJ2Y:âÎÎ
+ÇØ@ÿG&¤R
+¤¶ÄöÎ,Ñ·k
+Õ0®¸ âÆá*âYWúOJ²®üªn¿IMáhàl4ýÈÌL®}ÍY~öëc3ÛT:¶ZéEÉDXC78ÑÀ ~¤ô[
+x¦zýljå2Þ5ËÜïæÚÈöþèålÓîZýÈÔlÖ¤Â!wxâ<<÷{Ò¡ß! Íð| ¾PnüõóÜeæÃ¼83o±9ñ`ès­:aôÿÀ	û4¢jF·7yYXe]">î:KI¨æ­©îmbÖ°dïK;/­Ö
+á«è7?ü£öZ¶w×§¨:
+`Q?£ Ýçù´kò~#Olkú²^oN7H× ã}õm4#ô­æ­
+-dÂ(Ï|´;Z%L"
+×®%Ï«®ÚBãØ]Ïq
+DÌÝUcÛ*»õ`Ê°^¸q½	ß
+-qµg
+-ÉÐR1·YP¥xýäµC+½]â}
+ÃonÎ¥ô³BGÿm)àYé
+-æ]7bmHY9zxZø.eozé-à»cÐË7S
+-ÅXÇ|N3B,tÜô
+-endstream
+-endobj
+-60 0 obj
+-2098 
+-endobj
+-61 0 obj
+-<< 
+-/Type /Page 
+-/Parent 157 0 R 
+-/Resources 62 0 R 
+-/Contents 63 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-62 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R /F6 140 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-63 0 obj
+-<< /Filter /FlateDecode /Length 64 0 R >> 
+-stream
+-uñÆÍÁk÷(æw
+¼¹ÖáÈtËÛ°#¦`dÛqãx!±ÅÙÞI9®§-PËØ¼¢¤¾½í³N]Z8P
+ßi¾þá¶h
+CµÖ`(<^àï½÷[~î¯:KWë
+K!«t%a¢h1$®²·ð¤`üãóÜtqà9¹ý©QñuQ(­&SÄAfá¢á:çD»OÖÒup<R3^0×{fÿ?ú(àþÕó¹úÇ||¨|}É-ÕãòÅÈ>aÊ¼gòô^é	ñ× ®àÜþñ£¸dÞ«5óÜþå²ÍùãØp¨ÄOìa÷p|A[d9(PaÑª¬8GÑ¡L©®'Î±OND¬qß
+{fIeC¤aDÝñ¿¥ç±DE^>i(sÊUÈOý¦ó¨ªþØËf´øóöµÔB~*Ã,Yr¸þòÂkH;J¹®H
+=]z o´%Û²4§1²5~-,mYÉ[:Ò±¸¡D±2¬y_DFrÉ60ëAã1Â¢æÜì*¢ ÓnTJP_V:Éì³ª
+Ù/îpfë}«üØê®y
+Ø¿ýÒ?F±¡öì<äîT¼VB"=ñ'äÇ
+-$F>yÖÌOu[K}öö
+/cÆÄ[vo EÁX[çÖ^òR¦U¾hË2_o3&Úè¨þLPÙÀ¶9*+ýìÆrÉýÆDÝøIµvG¾Ûõ èÂÆÿ ½NlY·)Oñ×5Vsx±¶"®çù­>i8·
+êÓF¦b/x»ÙõM2ò\BàrÙU2°ÀÌ(àpFÒDª
+Ò`êhâ½eÑ5ôÄuA'<-W
+²J&Åµ]óA@së¬Ýú¯§ÿ" ¶ÂAÕÐ¡ònþÌH°g[õ²¨ÄuÛRÜîÿ­õ[ÇÊ·QÑlãa8MÈ~_;UpáòL"é+ØÅ!kò£Ð{ÝÄãØlU%bXýÿòÖic*°Ê»e#Õ¶ÃÚïiVÛÌb¡êÉ	CÑz`jR\[È ýmRô>!JP8VÅ¥Eo:ü½
+ýzL©ú¹ª^-Ëtî	ÆÿéïíÖmÈPOs}úBaÇ]z=þ#Ü8d-
+)
+¯Â
+ïÌ¨´©ËE?VVFÏõ!B¼zÓ öþñÍ:òÖ¿êãCoÑ¦%0*
+ÃàåÅ´SäTÚ^6li~o×w½ÒF,Cûà>l=£÷Ü[­ÒïÖ^Òl?*UUnæs:CÄñ°íM¶øÙkÿ\oÕ7½¼ssì{.§PIº#\
+¶
+-N¹ÝPàí-<Ñþd-oÙ=N° õí%æ
+^CR	~LÎQ¸¶ýï\'ÿnI^¢ÛîÜQP{&ÈéªÞ¯î/×ØÒÇ:k^u: }-îRîaúÅfVöÔ_| ~§ýë«æeR
+-Ô¶=È¡âOâ
+-ç_vóyºå0ÅÖ¨Ì.	^ao#'{Û:ÚQ	=â
+NR{ðD DõÈô*«
+-
+-æöàÚ6eªMkÿ=ÍñO§AHãÇòÔû§s¡Û7\ºj}ñÎp2i~1MÕyçW 0LÊu1X³c^Ç5ê`£%?Wt¿q¾ëå´´yM<LFUrôJædÊ1KÎö¸ÌEür½9ßåïôF~}ÞìtDmÍÍ'f´S>Àc¾è
+MÊvJÜ`æR/?=Ú¡¹
+¤¯TõÑêdþø ¾/7
+aLL]Lº.Ä/Åº,?þ·uZquã¸AoËb%ù
+Tzø8ù·V+J£üµqÇ[Óõ wÒE x ã¾õÊ2,rõ
+)¶êÎÚÊ}äÞúu3ÍO`
+#{Ð^Cö
+`héÁ.ÿöß)ó4ê"£s;{.çXå.á¢KÐCE-Àëu÷DØ¨lÜó`Çp¨Ä-¤ÕD°ØÅ°IÚ@ßRaþwwÛÓ'áÅÌöNF<ßRÑµ>­¿°CåÛÔq¾>²4M£Ù~;ØaG_¨[Âë÷£+¨°Û§þj96	Â%=«×õ:JóVüëCè¢¡%'¨
+á;cNûDÃ¼Éóz¾
+-TÁWà(pR´õKþD¦%ºJLðÀÝ«½Vó²:!ànÈ?42ú{ªüS&õà§1·m»¤'8cÉ¨v÷·Ô¹}^ >YË¥Xn)ÆuE³>ØJ6`
+-:Y¾^ø ÄÀ Ql¾­Ô¯öR
+]Q¬Çì^#¼N¯3¯±
+¬
+Z@Îãtó/&U3z­ïH æ[Ñ§­Ânöµ¬J-Î<?Û¢k+úhç3{}Yw)ïæésa\AÒ°)yZºÜ 
+-[´góÍbÁöíâ1ªÉH¸Chw{KÕ
+ÙÎ{*;ÚMn	ôï:t(oÂ	bYlòSÑl­eQ#Ú
+-äÍØDàÿàáT¿ö±9+
+-f7ãBíisÀ
+-¦TP1qÈßBÜ%
+-o}Ò	(Yé
+-òw¸æ²|2xýwHýî6×¿ÎéÐËzä±´ÃXO õýt¹9 ¡cÝt~Ø4)7[åg¬üvrÑ6·Koe»$kþî|K×m:§µ?µÌéZ-jïúÊPÙ·×
+
+¤Â$á»<?½0¿ªÓH|ÿO7·^cä
+ºÄ*XÉkoºó:AÔXÊ|m?ÚêìÝ¬5gühÒ×¯¢°nûZ
+ËY
+]Ð»Ø.©¬	Â­Ø
+´óÝÍmKÀiCó%dn#pxMÕ)~{W] ×Ûû¸ò¤*,Æí1 	VxV=
+:
+-endstream
+-endobj
+-64 0 obj
+-2301 
+-endobj
+-65 0 obj
+-<< 
+-/Type /Page 
+-/Parent 157 0 R 
+-/Resources 66 0 R 
+-/Contents 67 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-66 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-67 0 obj
+-<< /Filter /FlateDecode /Length 68 0 R >> 
+-stream
+-Fá÷BÂíÃÿ+ÏH'/h
+PÚÃ4
+-´\
+1aû}¿ÞôjÁÎáÝâ·wÆÓÕÓ¶§szæ¼pFüJå^é,Gà
+7nûè*ñÚN
+-]
+-ÉËÄ0:3ÁîÃÖ
+-ÉXüx¢g©
+æI?³;ZmÏ;¥ù`@¨g³lFÛ,Ä  Øg
+ ~¬Ç?H¸ÇdïÜ£9ï{ÚG¹eÎ	ì¼©VúûH-!
+©Í:µñ%òÜVõ¡tìü¦=v¥yÁÂR2ÛFrs5lªO -ll62yK®:$~s;
+-íÝ¥´Ç»7¢Û!D*EÏYCÿñxLè­k8>:ÙYzÀ
+
+\ÄÿSªîÛ;jum±
+-øBæ
+cõK3ÃóêNí¸ÖpòNH*»ünwpþ}«j
+-pBã H|Z®#T>nÚf±
+±?J#÷Ã ñyåï>âÈ°AÝ\çüÉö±­0÷/Á&àåv
+½ÔûðHHÆu>u­ÄEíp® XçÉc;
+-jCOä;Þ°¿*ºw÷§oÏ¶¤-*À»m4DlþØFm	Õ?öÐª\PUÃD°ï¥®p`q¥xPx´´ÀçiãÕÊN=ª
+B÷PÚÊÿ¸`¤û´¦
+lî¤êC
+-ª	©ýÔ;vÙKÜfnkÇÄbìß?´Ïuè 
+¤(LZÍ	}
+ëTès¨]\ê ¬ÊQD
+Ï,ª8NÒ|rCG§ð´AÃQ³elFº4©zX´0§<SXx´É{kgÍ$%=RÁ«§ÛèE³_Ûr(!É^Çä¥PeÐ÷»âä ÊÃ
+-þ~F
+-Cu
+
+|ð¶bó]ÎÑê¤nInÝCÞÑ
+¹ð²÷CPRB\,cû]5õkýÍïæ¤°Î
+U¬XT¥Ô
+ØÉJºXÞÎ>=E3ÈÑ	V®tßÖÿQèçó	¼q ù
+¨:%ß§?_AÆØáð£¼Ä	T¹iRH[@AuØøQSGE°»I7\äÄ
+-OÖç¹SØ
+·tñb´kyH [Á½ª¤ÏéÝù	x½¯®3zÉ.oíùreK¤-«©Dó4ïºbdÏÑTMI¢ê¸	<Xa@	ØÙ[8ýÜt{ÉófKþ¯ð EêßüòÐ¿Å]Õt"³rMá6	¾,>ím~.XåçÄÓhÓ+4ØKñ%>Z@gT
+
+ÚçhnI;çèÚèð+¿¶*Ãë$ 
+[8ÓQ¢Ðz
+V¶Ö%Ñø¤0÷ï¢â_k(8-'w:6Lov
+ÚªPÏØ¾B¸ÔÖìTÂñÎã¡Å\|ÿz'È4OõUW½k)íwîS}4)Rö<Q¦âo¨WE«òÊÊ4ñÿìyHµP59ò·ü"ÝQöüâEÿV
+
+-ÕÊçáïQ(¹Æ÷ô%Ò>öÀ:á%é[Fë5^D
+x
+µ~´Í^ÚxM8¼¨éI?ùpËµf?
+k}y1LË¸îî§
+
+-Éì{£Â(êºTýáÊVL¦Òï
+÷ÁgôE]u0KJKâðËk2~ä!°ÇÕ¾ PC²&âe ¸
+u·+ÝÇjú×ÌT>kJ¯°ßøGB,jÚÕ,Z#Òcî`<æÔEã¸hOz×	á@GíNkH½l$^í8s1RTêføö
+UÙÕ\]QE]=+ûå'
+à¸§
+-endstream
+-endobj
+-68 0 obj
+-1384 
+-endobj
+-69 0 obj
+-<< 
+-/Type /Page 
+-/Parent 157 0 R 
+-/Resources 70 0 R 
+-/Contents 71 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-70 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R /F6 140 0 R /F7 141 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-71 0 obj
+-<< /Filter /FlateDecode /Length 72 0 R >> 
+-stream
+-ZårX~Ùã©YwñPÐ¸GÔ¾¾îO`|ë"c²¬l©ÜzgÒ+Àþ;#u{uYJí
+-ÿ
+ðÿZùïë»Àæ£èpi©	ÐIYÒà1ýEÒt
+
+üï·WbÁ±ËF*8UÉÖáxý»ò7,át·ýkGü¤)Q¯L`|mÍþRÊJ\«2Õ("þ%0KçÎ¿·Q­w°Çöw}ú¨üHº9'~>Ý0Ï°{Çÿ¶¤VcÈü×a<1` nH2ù²ãë¨nÞK79	Ã>ëºFÅµvÅù
+òè8
+ÅÎiV«ÝùØrªÔ\åäBIÃ0ljë·.í£rd­¿õ~ûñuAàÜ=#a·îÖ)
+-ÞÆÈù{²ÑCBû0Ô
+öº
+¯Âô;R¯½ EõÞeàF
+]-}ÊÆÂXÿÞ;~= ¬<Lé%ºÀ66¤,³ÕC6·ßÊDfÕ¶qé¢ËÔÑîe*3ç/¥°/Ö&
+²Õ
+- 3sPì©Ðr½Áx
+%Æ
+Å¹ÛUÑkp\­òkæÒaÈÒy*]¥eü¿Áö#ûQVûGòpÖ©óÝ\VÒhrîÅLª
+¡aÀô2f0?[ÉQàlc&LfwvXè©Us åfHðS¾ÅY<âJÕ·|zu<¼ÃubRG¹ØõÜõÝ
+V.%ð[ |mÏÙÅ±h±Rv»±?<SY¢j³»9g L!4¥_ºô±>ß×]ãT@3
+-±}^Ñ¥-	¨ù v÷ö÷|
+©­ËF.÷èïõü)Ë:K
+­N<gÿ¬EÚ4 c6zRå!}Ã£ë¶
+{¾BN ¸¾LÍAHÙ;8
+zn¥Ö:4EÀy
+I8î°ñ~l÷¢vH×HÏM
+-¤ÞÍ¡£n
+-²ìÞ
+
+ipr
+I5:A'Çç5`PË
+­´«òûÿj ¯Û¼Z5ëÚô7R
+§ªR]òÎg±ÉnÌ  DÂï3ô´Ì
+-ÎÛåCLÑn(ÒêI|ÖòÔÙÒpMý;Êî
+-{çøG¸¿rÄbAqàÜe¹  ¦Ç'FGÿÌøAÑ\ËÂ.®rSÍ:F
+?ÄõËªÔìÁÆk:¹Ù|Ê+ØçD*Á&tþß¶¨ÙÃõï~6ø£:#q·¢%«
+-¶5Þ
+-À²p(-%}'9¡<¢*!AJaö¼¶¦Ùü8rz¶KâÞeéË*´`n(Y³/:3ïLkJ
+-ý|#LBÈæ9Úê
+úîîv ö666²
+ØÕw¤LÊ
+ò\Fð£qJV5ÞKò©Ö"iÊ
+@¿1#?5À
+T4C
+5Z©Å1N[>(þå'b°á>6
+ô&Ûiú@ÁÍß*¿[ª©
+
+RÍDïõèAáú[+é²Éïa¼Å
+ÕÊh±º¿çÎ¡ß­±ÁW¾G»ãóMUìB
+ëë þ¤{ñÑ¢nL6a9ØÈØCÈzv¨)È	qäPª:tSRêª!uÔ§ý}ÙºöÊ+ïXC·¡×¢E;[¨Ã°ËÿÉ^ÂG
+M9EÑµCH¬ÉÛ»´´9\BÇÀsgE®Åæu¯Yjxãa·UÞÁ¨ö/=Þ¸ÍE¯/n=ô¿¾-ÅQtÞa¤ß1Z 4>9zz^5ÍmìUö}´ÅsÇ^­/ù!Òárá~"²K,Çt*úõµ+ôâ×ÃÊê¬S½X2¾^Ñÿ+O,)²þ»sü
+nþ×®9jfeµÖÐL@B,dôÏYPÖmt©aôWßic^ÞJ2Ê÷ÍÛ
+-UþÆÌqÿÂmÎXæØ_LcDâ3°ÈñÆÂCîý,«=hCJ*ª´;b`5D£¡¹+Ó4Ã×bJÌ)JÒ;àáÁ
+×ùÜÊX(ý sñ£0TÄr=%Oµ^°ü'³ö£ôåQØïk	ó
+-èÞwP\[1¢ÿÁÇôÀs5×ì²Ãß¦%Gó}3í
+Êì)=Æ
+£éW.=ÕÍ¶T"ùÙïZÔ
+åÉÕ^Óë@¸ä 
+-×Ü(w
+`1þOzu¤~#YOa&
+»ÓEu{U|uÁqÄ¢JÕ
+£TýÖÿ
+s3³ì¶Ýþx2x<yQ}Q×<
+c¼DØj\b¢×¨37BÁ¹R.\o
+}ä 0²¿N«°Í%W£kùº§GÛ<åÖARÙ
+üÒà:ÀX+$ì5àDçéúV¹c©Â²"ü"J|Y·
+h Ã¼|²Åm¾½ÞÒy1#àá&Çc>çXNÇÍz6HÂh¸ßM»ûmùå¦e30r«~Æ
+-VÌ gBïA@éïC'-	½m&
+ÿ=cÑC½)
+¨
+¥f vLõê_,< 3åÿx¯>¤e²³i !t<¼¹§r´ö¦¨Ï
+-endstream
+-endobj
+-72 0 obj
+-2026 
+-endobj
+-73 0 obj
+-<< 
+-/Type /Page 
+-/Parent 157 0 R 
+-/Resources 74 0 R 
+-/Contents 75 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-74 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-75 0 obj
+-<< /Filter /FlateDecode /Length 76 0 R >> 
+-stream
+-&LzpºBI]Ñ«µØDvyÈQ\!
+-Ó­/ê
+-'ù¶1&¥Ø»ä±ù×F1R;ÖuF
+ö¬>¸8ýrNÿî+{Í/»
+®7
+ÆM¿I
+Zf
+
+³`Ùj´EHÿ±sX½üRlhú0ühõtÓ~,ÅµÎ§ß`Ñ[ÅñzÙÖZ=°
+nTé&¨ö5_'1s¿ÔiOOEHöTé±~DQU*Ësª+¼¶ég
+-ûu¾ûñwÌ~	
+Þ çßW*¯}>ú
+vÿ
+Ú{ÊÛÌßÇÁÀ
+õ¸dø1³×µégo:û2V­gûvUôå/
+tWU£¨äº
+îÒxB1íBGK»
+-!û£,g6Æ;ñÔU×Ö¹âI8#îÓmþøZ
+'éÐË5RÓæÓÙt}±sðÏâèd¯{ÏT ý
+'ªní·
+{
+-ÇáÇ¼.é1Z2ºH×q%§÷H4¿õæÐ­¾L
+Ôí'ÒfÞ¥ ëÏU8î¾Û!¦îµÀUÖGN2!´íÅí¥¼ò×,5\£ôä­µd,<óöÝ´kö´à`¼îÓü¢*ßÙb3Ý¦,§û¢É«þ¶®®"kÑÉ
+-ã±ð©%î|6¡ÿïè49l_ø×õÖ>óäe;RðÞ
+ôÊÝs âÚbQjA2UNmaØÓà 
+-Vp¯GQÄÒÈwð¢ôuED
+Õñ¥tU/0ÑR`ºÄÞÄsÿ¯Yoné¯ ²"y¨?
+²-¹ÏJö8¥h-mÛQ¿ô:!ÙAÆ8}«@Ù®Uó×°?_'î.OOÛ®l
+':-úµ5è	pPæ½ò$Ë
+8ÚÔÛ­yO9Hª
+c
+êj®ÏG,ªëer\¢+3cÁ?aØ
+ç9Í	ß1«N³²¿t´Q!áA°ÊN[\X;yYò;Wûl;;ÎIÔ%[ÛAÃgF¹óäú£Tf²
+ð^3
+R	ä®rÖ¿vÖ:[Âc~½|£á/8÷¿Ó`·|-;µ9e/Nz£«
+L³ä
+¸ç.NËÏ®×"YcW3;\JIPÜ×5Ïó¾ì-JÚw;u"î¯½Ë=zU]YkðÎ¹
+jøc÷T·å½o¦À\og¤½²
+zÔ«mä²u'2tùû±9ÊæÅÜÄ
+QzøËE|¥À<%J't5U¦ðå)'Ðiýàÿ©h"Ð
+ÚPiS¡eÂDD*À]K%¸
+-{9Xhd9øàSËÓç
+ÙèjÆ §Öº¹ß×¨ó§Óû²¦ Úö$¥Ïæk`Ê}¶0|ë ¢ìß?"©C]÷BÂ`X÷©­ù¾h½hØ
+ëÇÍ+ª'% 6
+Ó,åõx¼®ØÅaHÞ¡&
+
+÷)·qñ±pkA7îÙÎâw¼·
+,¶dn
+ Når6iRÙS
+Íx
+-ê=.Ù?^	ãoa+Bwv	 Ègï¦6	ª×Á¾ÐïmÜVÃ\)#lþ÷_I·äv¹Wðå4Î=Ñ;ãün'â<ä
+B?{À
+"«Bóyh¦IW­rrü¬ =^D ryµ4"V¥\p`î(6úA4½yÈËrn8ÌÉèlcuÕ_PðÒë\ãÉãÊg|(¸µ
+$Ñúoé¦\ÄT± M=2¼¿±GuåáÛõ?:än%¥@?òáí§4"Í¬Ò­J¦nbÊº=*¼ß£vs
+
+\ßTauë`ÑdìO
+
+_¦l³
+-òi5©	
+$1¡]hN]èÅnò(/¯<äö¸°ãÚåÂ_ÀQDÍå
+§þ­^Ç´ 
+W¯Sû"yæ_f¥¬Û¯Ä¯Y]]5 e¼Ï'!aª+öó:ÜïýohVåÏ¸ì¥© úËSþÆ6¹¡ò
+-endstream
+-endobj
+-76 0 obj
+-1581 
+-endobj
+-77 0 obj
+-<< 
+-/Type /Page 
+-/Parent 158 0 R 
+-/Resources 78 0 R 
+-/Contents 79 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-78 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-79 0 obj
+-<< /Filter /FlateDecode /Length 80 0 R >> 
+-stream
+-^|Ðña
+«ë«Ç~¿m¾»?îÏB
+-^³¸ :[rç½í(æýåÔâ >h¸êùWwe}~I¨¹"uÔ±içYµ¥ÖMZU¦ÙJ/íêÈ»¤Pi§÷çÙ(,t:\>åÈHS¡1ýú4³L,Ç"ªúÊýTÊ
+jØ@¡õ£¤b8&¨AnÎSÎXâìÙEÃ,=õÊ!S×Æ¸ÔG&Aá­
+¿ï2):Â½t¨ÕqÔ·q¿
+ßÈXÀÆ¥H*Ê³/¯ðz,¸
+ÿfÞøÔ¬å¬ä¯¤8ã%Ùgìal£«¬+7¾b^(?tÏ¤_¡Ëü!ð´¤ZGúVí¼bÂkïÒr´ÉwÿjA<J7¢Ýtõë 9«	
+Ênã5S®8.«LIsdoç¿k1¾#Þ¶Z÷
+JªD+"©³8[QçTSyV£!zKh£úÑnYÅ]ÒEõwÓ=P%nRi¶:¥§äTwz¢. ï
+æ^ÝßËºG82J­Y»eñÒM®FÌz×ö~JÏe´ÃzùÞ@¶¡)[Á4§Õ¥pàANz0nº:üJ^&c¨WËþÞÆ%iãØ+7´£0AðÝ¢£ÍàÏóçõßG
+:©¨0DzúÏï<©ú*9üÝÌxÉS@(tOJ¿w<J8¨MÃý¬ 
+¼oËò	EPdÿ±Ûn
+$£Mß´ 8¾MëÐ¿Ï
+Nþ{9Úb]¤ÂI¸¦-YÖFP	RµØ¼
+ÅvGLÛ°{ÚÅñ¢È@¤'¡LÖVnvøneÆäp7Dx!ü
+-ÒxZV¥jÛ:âë¾Ðvþ­æE*<Í2eAí
+¡yÅºØ¤½
+ÉV
+&èàæ"ÂKFúES}üâÿM!§õÚóþlÐÚ0×TÆþ_ªN+Ú3nj@$iTgeÉ`ñÙ£·< å°:ÄÎ9
+ÐkÞôßI?xÏq]siÜ¤Ò<ò×QÏNðÉÊ7ê»¤Àbê³
+-J)ØK?`¹Ü,ÊIÓ9Y«B!(
+-Íþ¨ø	aoZ­ÁX yÃ$àóg
+¾"þ3\¨À×-Ð3Ï­SsyE_¤í¥Ú+ö¶,Û´{tWââÛñÇ+w
+joi¹ýo
+ñ«ã«cñR?¿ózHl2k±­Ýá¨\¹Ø[[c9þã&©ë
+-9ñÄQº¸Dú¯|îmÛIiÄ
+Y&«PÆüé.ÛÌBÈo=Å>²TF}Evq7)ëÅ#Â
+-\ÞÈéQ îÁÕ°!èÑÅSÝôl}%3-1¶]¬çm4:06ö®ÎC\ºhWMã­@ûõ*ÃâuR³}-R
+ªèªòêç\
+xT
+1óõ´rDs
+J	ÿç7Þ(Æ7ù¼ýÎè^Ú
+ÂÍ´µYk±S«sGÕÙõ÷ç§°òøs³9OönÏÁÈ«mÒPâ¬_ÔÒÏ
+)ÿòu85¢ÿC~n§çICÍ6Â¸ÔfÃ	ëj©_
+K$H Õ|ß%~ËvçªØc*
+-« G¾-,|* Ë#	ÜÂ¬SÔzÝq¿ã'D?#
+}=ÆÌrb#ò¬»=Y°nWRPçyMÍzP·EõÇò¼þG0Czÿùr¹<{k8[Õÿ
+B?òFÒºæÙ¤SRBõm»¯¿8Ñß
+-Ë·ÂpjÆ¾©§¼]%ÌI3±MµIzeWL|um/}°Ð
+è§ùú»þG´7|¬S(6%ó	¢ÚÜ¶!	UÃæ>9Zö8,É
+wMæMEÂç4c
+®J²-Ø¼|~J8ÃèDÙ©õËçSï)ê³tçäYò*Ç-D..GêO(ø>/
+:»ª±Ó/L
+oq3¸³üöÈaÔ/uY'ÒØÑñ¦
+-% eÂõ2Â,PhGýÈ»ï:ù/c"lLc}|¦»N\ÄOØÈÓ»«<DW{òÈjÒDgÞ
+³¶oÄíì^p@Be:P'8=ÍS
+
+-
+-aOå°qÝæcR)½èæÈÐqÎÖ×ßk
+w-ÐAÎY'8z<~½Üû$?õ³Ëj»reC+ÓöïâÖm»8æ&¶4Ó ÏIYùg+
+JÁN
+°&Õ®Æê)ìßøèÖLÑ;ôV
+-çöìýÃqói¬c37@
+4ÀÌòÿeï8è/Û±gi
+-endstream
+-endobj
+-80 0 obj
+-1812 
+-endobj
+-81 0 obj
+-<< 
+-/Type /Page 
+-/Parent 158 0 R 
+-/Resources 82 0 R 
+-/Contents 83 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-82 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-83 0 obj
+-<< /Filter /FlateDecode /Length 84 0 R >> 
+-stream
+-À´¬_UßÿvÕè£Z,0y¸4ñLÆÏR3d8On
+ùëíåÑ8
+-ïd`nIøs½9©Òh&
+ã{µcõ&ßû<ÔVB]$ÇøkÍw½)¢Òh'ÊfNÂ ¸,4Ïð ÿÙ7y>üºTÈìßÚ§ÍÎxf ÃVúd½.Üx8Ûnä|¬Ê3³ó®[Ô9a\°.@
+3Ñó¯mH¶*Í$]këÑ^
+TDÀV½\ØÕuh	²;mPxÊ4:S2m4öêt×î	û®u,
++}
+èl´j«b°e^­4g
+K<jm·>0gØ6Û/¥^Ù:ÁC¿J&2_ª
+<Üêuµ¦óÁ7ÏtgÃ[NÙõ ¨ßìT÷Ttò²·¼¬{èûÌ¢Ù¯×ßÚ_¤ÔyB§øÅ¼YYzSZØö«>fÚK&Q« -~H¿+U[ 3r
+¸%3ïêùgj
+-)5çcç1Mbnoü³1)~âà~¢Æ
+K
+;ìQJX8ÃÓÊÐ¥ÑA3aÉQ=>ÃYb,ç
+~òelê¢6
+-ÙyPIE2Ïuf:¾2¸
+m!I°Íº¥YÐ¹ÚüºÜ}at-_
+ºÊïº(õÖR
+ùuYCzb6Ê¿'	«+®ÍþRÖj)ïê0þ¹#"<qèK ÿÆ¹S3Ë=)ùW %!÷/mþá
+:ØÞªÌV1°ØÒng°·E«äéçVÈÇ¸ºN ²½[gr¦®.U¤!Ý!¤#?ÇT)·ÅBÝsiex8`TãÐ¯ÓÜÔ¬tåÁÿÔ²ÏüîÌ
+òOú®ÈkË½º
+!¨Ð|¼t! ÁO>9:/pý
+-mî+>zÃ0N¢ÌÏÙ*íÏý1
+-ÅQ1¥JXF«y2:ì,åø×¦gÑüì$Ý1ÒQÂjDÝY3Åj;CØÌîzâÀÌò(°ßãÇG,ZÒãPð»
+b%Åù!ÛX âÛ©m
+=µÛibãpú¸ôñþxÊ^]*3
+@¸e~çÐ9î
+mõÀ÷ØÈIW¶5©¼±2<¡ ØoYzì¹B,
+-Ê­ü¦ubAÑ!¾g|ÆÇzXÌ )ìµZ0`¯{[Ðx28ÏCAý[_UÕæèÄu¼éî/t
+©$´à 
+-"ðó6Ëþ*ÙMïS¤ÎÍÐq8ÆuÓûNLî/ûÞ²!J ë$üxEü;dx=±§
++$XÇijg^®@¬B[¾lKÑt¼Ì¢@Û¤
+-èt¨"|Û,u}ÅJw=/>´";([¬`}©¹
+§WËF«ÓUJñù'N­rd.®KÊ%Ö>ÁcfßóqPðä;óv4V¤
+ØÉ É ©qÑl²×ääèíTxé¬YÖ`Êä-½í)¥Ciõãô{`EªÑæ úzmmwÔé
+:Õ2ãÛoZU@ãc5(ò¹ÄV$kÔÄ£·åjCÏôLtß/§5[ì3]Ð1C_=L5¸æàH"Û'öWe ÕR,µ°À|n
+x6wºÖÑÞt\_²zh ¿¢J¹ø¢²ß`B= MþV§0Ý©¥n\G v'd·~4µ×,¤½¶{ð°ànÙÿ9³· £syé"~¥5²]íØý&ÃJëê°D¦°¯é¡Ý«zCb(âç¢jð~q»Xü%%îõCb£bs÷fÍíÔ^ ä§>5ÚæYA¨*ê?¶½á¨Üñ	§Ã ÿ<÷! ¹"+¦uüÄ¶Ë#3eÓïI9ßHÔâ(æX3þkkîöÊíi¿O+ÚçåLµ'£Vo
+Átzð:PÂJ²}Ï÷÷FªÇ©
+
+")Í®ãF~9âDÔîèìQa´a;Õ
+¿
+-àu3ßYéÉ5ìñO·CnihVwj«i+1x3LYõpóîMµü÷Hd¿¾lµwþÎ>pãÏóC¾Ñl:_üeèçÂös`y¼ÐKII'©l>·tbÊ~÷&!ÿ¸1ÏoP¸eWØþf.Ô°$vÓÂ(eÂ¥£vÃlL«QN¤5¼-
+¹Lhm
+!Ý;ÍFÃ>è¾¯007Râ
+-£wÒáàÐ?õF¶q¡ag
+-},ÿûßHeÔ2
+¤GWÕ¹ü®üAÜIy®ùSì2K¦=Øa
+K´ýlí+
+¥.±C°¤fzã~_8äÁ
+÷d,j*5¾q!¢$»	¼-ÌÊëfNr­gVõ¼Î_.kw¶µÿþã¨¬¥®Ë1²:fü£b2SD6ÿ]îKÛ²6gíÈB¤÷:'´Ø3y¶>üxî{õÐ$®ãe»@Ç\«"ÈÅê
+yµýpQóp×KJÞ	yTß~ãzÄÒ ßá_Gòëaõ
+-(m*/e%õ®éÁ}ÖJ%Hcu
+E
+-ùùÜCN²ctW¥RI_Ð;ê|]Çã6ïsÓØÜzgîTÐ*v¶¤¶e
+ ç^Q]ªüªgói=på¹Èð´þI­
+-SlWßê
+
+-endstream
+-endobj
+-84 0 obj
+-2116 
+-endobj
+-85 0 obj
+-<< 
+-/Type /Page 
+-/Parent 158 0 R 
+-/Resources 86 0 R 
+-/Contents 87 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-86 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-87 0 obj
+-<< /Filter /FlateDecode /Length 88 0 R >> 
+-stream
+-ÑÉUÒM¾Ðé5M	8îKz"qeLþI^IuulºÌ«Ò£¥Ãf
+-^7êäE`
+º×PJ­ÞLå!M={Gü	n  49Ú
+5M¨5é|,w¾¯~¬4õgÓO£q¬ÆG
+ð­rg¥í3
+õýJ(ep©`qü 5dúû(»ë¯<¶`q5¡áK{øeoÂVý%	§Ã²Yácî±©
+wªêñçðñKç
+%ôt
+>
+-¢	.`UÙ'z³ ÖÕKÔYêÖ½äNË_Çázz¬%Ê~Fv<®z½ÝFlbÔûì&q`@ø¬°ãudHÃèçÒ
+oÇ°UnYÌZñ²
+ÎãÂõªPÃIìwô>4¯ðziðõÌ½
+µ¦n=]9Çh
+-GûVÎËã2\q
+zX@4ÎQØºwÞ§*ëOäsø¾(@
+_?_Ìùÿ©Á"Qk8'Êq~\èZ+túÆ@5ÐDT5D
+Ô@x
+ yÜÙ3¶`v'ô@S´+íUDO#
+-Iÿ9}8ò=:#ô@ÄsU0Nlãý«BA[^ÁmThÅíåTvãÇ
+-B2M¥^5åº<`G
+ÚÙMZ¬Ía®$pFÔìÏâú¹"OCY°j¡wÁÕ((í³èfd	M
+ôk´ì ;µd æ=Lê1Müxáïû«:f·u
+¼za¡
+-XSÚ4u­añ×cÄ}§mF_äÍ¶Q N@0ªö
+
+G2Ùò^ÚÝ.v«Ôº7X¦jeÂñ1ü&üv2Ñ±çÔªfïHüÅÛÖîj»;ÇôÚ
+-ï ~Ï
+óÇÏÞp¡Ð
+ÜÀµ0Îå+eÊ¹~4OÛî±#ªv¢CkK´øÃQ=,ËL´®1ù§c° ïnFVyEHÜ<èÙEï!¤:.o½¯)B¬7
+O^t
+»²
+ÄõãWÿ_L÷+¬ÀööL©{UÜfu48HØKª J9oõ`r¤4½cèô´Ûè9UÊS>³Ý»
+qÏb6ÚÇë[­ù¡"½Áeo
+¼hªÆEÄëñº&lð§ENQ ¤Ý%¥¸©ðÄ_½ÆE¶ÿe
+-5Ã·QGøÌºV+)È­§g~Â¼àIâBeN$XÌUçµW!½Ý±&éï¶¯u>8Ö?r ?ÈE:Æ(ÂÓòaO¬âÁKör6bx<13XZû«\ÌGºóµ
+¸ÚÍ¹ÙGÏ©­ìI E8NAð+v0P%#hòÖ
+-Fh¹xËQ¹Gýôî6Êñx5Ý¡¬RW÷âÝqÊ¯-öi9îeÇqÂôGh{=&:äI<@Í!ÈÒÏ<à
+[Ê2-C¾[ávå
+Þ34¢>¨e*tR7ýe1j¤fP¿D!¬Âvîxà¸1+
+ßi1I:ä,®1»
+-UgÚ5µèûù2Qà±¥~÷ªgÈ[
+>¶àêÉk¾òCR»4Fù¤g¥0H«ÁDJÊÉ,ø
+¾1i_<ÑþÄF0Ý/sÞØBâ&¼j:Hp¤VþÀ¹¯¥ê¹Æöv
+ÉsæÁ<&{úrbyq¬Q!jÈªX¼ò>Xû"K	?îéBq{°fÊE¨1"U3=BµwnbeØH
+#Ýuü¨ÌÌ!±<¶ÿ¸íÞ
+ØB#ö¼4MX$i;Ê
+-0ÈíÆÓºMÕ[D$ñå¯×Ná¥ÜTÆùÖ="1£¾v}_Çû×øR |ãó©å4Q!R`9@ý¼ù¬0s(¦o¼Ç¦&ÜäIo¯h¥bOÃ'B
+þ3Íòö±%éEÛ
+½|ún|ëZ­éÐ|;G/MÙ,Ê¯ýÿO¬Ìý3ÖðAç»÷1uwÈ%\
+cÃÍ]Ûªÿ+k°óÜHi7¶Jï©Ì¶
+-endstream
+-endobj
+-88 0 obj
+-1557 
+-endobj
+-89 0 obj
+-<< 
+-/Type /Page 
+-/Parent 158 0 R 
+-/Resources 90 0 R 
+-/Contents 91 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-90 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R /F6 140 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-91 0 obj
+-<< /Filter /FlateDecode /Length 92 0 R >> 
+-stream
+--FµþR'Â¢.îÝµ¤
+-M1Ex*¡ò½I|Ü½·e¡é'_i¨úF}G5¸ÀÑZUðÄÏ2LÀQú¶ÍETùúC0+ßàá:¡_!r5Döü00¥å,ç®W*µuÍîøðï÷­|móÙN
+¬ï:«Ñ¶¹	r0w
+?©kuI!õe_àÇ\¢âó°9³gxzFÿB2¦
+=)¼3ÌMê
+uÎ²Õr²É
+¢Ç~YÐß»Û¤j}¬TÈCñPë,ô=JYj§Ï\
+Îíj2;¢W²©Gß\´ó
+-²²î¯ÂQ@Ü*«ôkÃÛ±ÓöÁßþÖ­Kè<¡âøæ.D²T".{
+-\_'ä
+V°T¼µ¦þ±DPD_ìåj;Åâ
+qiH÷,ú´±Ñ½wÐÜùÕ÷RÂæÔ_UÇÍ0ã
+/TAâÉ<å:^ã§¥
+¬-:Ix£1cæ´ÕÿÓïß
+-9fðFÒqÙÏéiG"áÍÕ½BõiõtÊÓ
+\)/TW¬DÙþ|æÑkø	2dÝv à
+-y<|c<q
+Ú²õJÚ^Òû>»Âuì4cöHPH¢RÕ­ñÜNEÍÙ³x$¨ÈWf³A}b'Oãò %OXØîXy;ïÕ^%¶e&*5ÉÐÊ#XÚ¨'8ô¿TÍG¨pý6¤CTaE
+OM%
+-­à^¹åsXO´)¤ûMOý 3
+ª[!ÔA.6aRâ©õûÈúö.Á, ±Ô=­gB;ëjG/u*
+-¬hA0;Fj±AQJ?zÔ½
+xÁï0v³\¦¼jìíi:bªÕêÃ p°å
+¼7M¿\¥ñhxz çÜ
+¿?4*á© ¥:`¦-¶³}
+²àtä@É.û&q«o*h²Údfy°ðMÖzä¿(
+²ôòRT=tõv}¤búÔ)«`zNQ
+%
+T@éãñ·fNï@_c¬^æ©u;ÎGù«èvåÏ@_+ùó
+kØÞ{J_3ï½ªs±)_äßKñ ÿI)°xþÔôiZðmøäfÇaæßØßýQ#Ò¼
+³k¥WºW¾SêK8´Di%2UIÝ¸Ó£·
+rCÙìoÜâ+
+P+
+-i?È
+Ï
+­ävßY åU·=MèEzcsà
+é:)½t%IB5'ÁLÓYm[øÌGåË²0bÊM}+¨
+-~Çî1þjèëkWD)
+øÈy§´G#Ø£Gæ©}rM
+íò=Û%}z,òú?4*àÕ~êNño½fK~
+'°W®
+
+ gù:íÈ
+Ò.suýÊÊF\w¾N©¦¦Y»]¦Ý
+0on¾ôæACn'Y°ZegG{õ
+°||²V>++NB¤¨Üpf± éa¼T	·î2=HÔèí\=°«!åS*öûPÈ
+-BoÜ:Ì«AxýÚ²ñÄ¦F@ÄÏ±2§(kg 1¼;h©ëÜ­zgnø´ùÎ®;Aé{è£ù¤v0¦±òzÃÊÕ(Åj
+ÛåÆ§
+0ë
++p@§_|AÏÇ@A\´¼bÉ:óiÈ-#y9VÒ
+¤«å|¥t4@cÞ-ï}è|	1
+?~àAåR>UG
+dUÌ
+JwòólU¶lv÷+îoºßÂ«P0û$ç+%_¾ÖÍ`ýD`¡-5/f¹âK_ÿn:hVLäÉ1>²ÑB ÇýPðLe÷3<ô·ëìì0zýò3½Þ?#¯e-`GWÜ
+-¥UiýÊì3';ïSûTæ à[ðaÏ¦kíè
+-dA¯X50³¾M!<¹øõ;}VÿÆº¼jèë¯·çÖ6æÂNóºÛ<íbyznµ~ô°bmrN
+Â¦o»Ïàå,©òrÔ\wþõÓVY¦v³¨Uã¥XíÖ¹­#¡|ùÿiyÇÈNj¡«Às-2fDKèhÓñÅ?öBÚÞ¹¶ÅJ1é)Â
+-yº
+-LÀä©OúP­+ÞÓõÁ´þ½
+ù½hsÁõ
+Ôë;
+-­nÍ°a»d¿|?­ß¾úà¢ÑMd\È|#JJÂ§ÛS#^hqÔ'g:©4óºA%Úõr`ôçk!dÜ{Ä9+ªæ0(ûÑyö¼½
+-lDA%wk¯z(²<Ìv]<ÆÉP¢ìèé¤3%d¾eå#ãÚ ,Ã9&U2 I(èÌ¢FÜ
+ÜC°cR³ÿ¨0Z	Ìµ§¾Æ
+Eó=ñúã¦éí¯âSÂ½<mÔª^¶"ø#ºw2UJð
+GÃ~)©¬8K6Ë{pÈødÑÒ¾÷]ì±Õ¬/|cµN	Er´øq@û|Ì6þhíåcrâYòã!­Ö¥Õ'Eª6Ýy
+-f5×Û+"D<
+W	lÉldÅÞ¢q6ë'@ÞÎý*âjÑ~NêYèÅø
+'Ãà¿Uµ	qõ3¼ÚJJ9åî«V0¾ûr£,(%ØdQ\A[Î`ÖVòÒ¬QuÁµ§Hø÷/.%­ey¥q·úG´ØÎt,q!m·Ä%½+à6+u,ZÑ`ý+4¶ìïÿ¯ÛÁòÙ ôúq `ß»,¹B¥9´|Ä
+	¢îæÂ4	OðçUQòú
+É=ÊmmÞ(rqÜË]Õ£ÿHÓÿ`zÐàh]ü3$hXl@8é Z&ÆîôaÓï]óÚ ´¬,ï$á~HgP
+!XÃ¶Hß¸| SÁKæèØ¡ûÅùuERí,dÚÂ
+^¼Od%PøíCýú¯eV2î é
+-KL«!âH;èðuY×y.8ó~3
+
+-J|õ
+-î
+-endstream
+-endobj
+-92 0 obj
+-2360 
+-endobj
+-93 0 obj
+-<< 
+-/Type /Page 
+-/Parent 158 0 R 
+-/Resources 94 0 R 
+-/Contents 95 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-94 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R /F6 140 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-95 0 obj
+-<< /Filter /FlateDecode /Length 96 0 R >> 
+-stream
+-»"~(pÞÖ£CsãXðåÚö5ødcÊ]ÙV>ô×¬Owõ¤¯³{g±ÁW
+-±GÈ¨O7EÉ
+a4c³D¡·Ö
+íxSvÌGÐ©âÎ
+)ÃÝ¿òñÌð]À|³6Îøµ¿È  v`®ò®#M±7ñ"ÈuÎÖ-ÙösREðãU°oÐ²¥°-è>¾»dZP9±
+z`&T,bY!:ã¬iìÆ
+©lù´~XrÏ?YKW©<×T
+²æÑ+ÿ©´éU´b9JGn+ßF»p¡;
+-{þÞö®î`E{HG§(J.qæóÜ*$ß!s	Öüö
+·¥Å0ÐHOíÉìÓú¯pÀ
+ÿ¼ÀâëÌ.Ófy
+-Sg1Z
+¢Sg,«ïª*<©
+>¬pU$~vñm¥¡5¾ÌöÈÎ´Êê[`ù	¿ßi©KØÁ@úÔ'9:¯y·áaüÍ
+
+øE 
+¢Þ¯V÷o!äB½ÁTX2«ç-ó1¥u\X%¹êù±ÁAÈ­r·Ü[Ò'GW»YrpvÑüèVìExÅÍhµ9I_	h
+-dÄßÆP^Xèôóa.Lø ão+ßûmS EåF|ãËvÁxb)Ì\ÿ~åõÐµP£»2Ð
+-àÈºx¤ÃÇ
+';ý>M6X'ò/õ+6¯¬~â²0#Ñê9lï/Óu®/ùC|¬
+»-â_Ðçµ;¹âeHÊ­²78^xW<ÐÍå²C¬ö­ÅB'&ýW­_#X
+-x§y9jÊ¸ÁF/5Ü¼Ø¼ç¨VÍ£ ¤a}ìt½²ú½]Î=Q Ï­íCtj=L WÈaÞíÆà¢ü³OÅ
+f ¬ô"{uÐGTmJlxnÕuZ;áNÑ¼^NÃD) 
+9×_îlJG.Iâqê=ÑÖ9A¢kxhHÚñ
+HÙ;±[%`ñnãÑe¼ÿ¼µ
+Ú
+-äê1Îy¾½æo
+-':Tª×»<O^
+-
+4LnÄìwáÞ
+zt
+-yÃCÄdäWÖçNaçùõQÎ
+^ãºCáäp[º`uLz@íIþàëGk¥¾BüÂã¼Bl¶iZ,<±ÜÉy.RÓ=SýÔi%Û8õ9Ê£¼ÇN}¦í
+-Ç­;TÒ.¿®Ã×)xI
+-òt´
+
+lXÕæ;Ç -1+^+aÂ
+-ªÇÍ¿'pqâDÂe§®)B®1£â4B¤¤´¹ìËâÝ·[áÇ'8
+0¸~
+,;ÓÆÚ¼Å2qÄ¤*´Ü«øâwI¿ô+C#àýÝÄ	1Û6ÎctÏ
+-]¹ë&¬Izî
+"ÿ'#ÅTï¶øB
+|Ro¼ìy»ïh
+gñä¤6Í¥ò¯*v2Ñ(*&üwÿå
+ìJ©çè3Åg0¡µ2J©Õ!ãºd
+úÑº{¡­~®Qh¡Æ9[eÎM"nÄJkÁ©8
+jJ~ßÿª</åukÛ;'
+0eò5ëyóBúñ£SÐ£±Ñà
+ÐÓE[Û
+-à(EM®
+ 6dpÉýÜ
+?Ñ{VF^ï¤­%^aô¥ßôÌ¶e³­Òëþú¬Á«´þw
+?6%²Y3»$ö»þå%]_|ºR¢b¦
+ôúpïøK·¥Vì
+
+?!tã_Ê6_6?©íZ^hüH}¹è®Wº-
+-qíg\äqÌÿöÞ@ÎJ.Tì¿Y°fßb¬vædõ^DÒõCÝ|ÇÊåPt$yÅþ"¹XUE-òÃXä¯¡¿z¸:zÅc
+Ve¢Nb8²|ÝKRTÿX·Fáþ ãeÿ
+-³½°5ã
+
+EÔlQ n[hô0IÀ±ù
+tÔM=«SÓÀ2flv¦§0LáàbÇü@7dp§
+$E?zï[4
+-ÐÓX~à¼õ¨Ï!©,|XÂ0©À`¸ÄåSz¨®U¸K­ÅP"ð&¤¬ßÿ
+-S9³ z(
+
+-$°ú1 fPüÂzõ\zúªè5¾÷[ñO;c`Wüß ÷]* ùãµÏ6¨ðMåE¶¹øÛêJn3;!ðÐìÈ×VÇÐ¢ÆCÎ<H
+z ¼ùMô¦éñ|j~·\
+-ûVÊëÐü}-'Yßc]'ßdt&
+-æì9Õ} ÁBýÁò¥UüÖÄ´ÎDx]ZÇ¿#èå
+-rÇºà*Ø	:¯ç-¡-Ò¡ú=ÃÎY_®¨øc4ÔãXiFaÇ¤µåº¨d¿4È54F?>
+i9uþ7pOkË0ZÉâÇ%Ðu :ë{¨ùª«ÛuÌ +{.¦ 
+¯Á9,ááÜvôp­¥>°}:0
+
+T±Q>@`Ë6XÞb(b¤ jä÷ý@üºF¿KÎ+Ã°¦V¸Ü
+Ô<R!»!ERºGWkÕFô.ü£
+-o°¡Ä²!' m+Æ¢ 6µOV|O\R±TFÔhújÿ_öÖÃR÷y2äÝE©Òêéaf1
+öâË
+jóóÍï.¡sdÖù)#)·îY;¸"V§#F*$¢~+2Ò6·òïö3 KÜäGe»¥eãú
+-ójPÒ¶ÅµJðRÞp8bXAöëËsU3;3g×ßEò«_¾¸Oâ2,µ$ì¿²ltN¨TÈûù½!zOéI :ï
+Gb¨=¼îðWóËãÍ¾ê£Yu1'@«#ÄÈôÊ3$ðL£~£idÓ.ÌI"qæÀÒúR	^Å 
+-endstream
+-endobj
+-96 0 obj
+-2278 
+-endobj
+-97 0 obj
+-<< 
+-/Type /Page 
+-/Parent 158 0 R 
+-/Resources 98 0 R 
+-/Contents 99 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-98 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-99 0 obj
+-<< /Filter /FlateDecode /Length 100 0 R >> 
+-stream
+- (&­S;ªÙdº_ï
+%­¿ºï¿^$2,03=ÿáéòlë6zªDØê5M1 10}[¼ßÅ³¢
+-Dà¤ &þºâîEä
+Ü
+@ÃÛYLü«W%^\¡
+ù±|
+­>XlÀÒ½ÀJ
+Lß|Ð~¥¦.t3)·
+ö¨{>ÈÔËlPjSæx~¦ê9lRe2`5_`~/É n¬cÅ#`?Y¥ÕKD6-òÕ%Vû¡¬ðwG¥V`ûõ]Z¬O
+-ßì­ß[
+ÖAè/c®ÒÆ}ñ-àH³§¬K%ìä)âÃcTÛ
+w5;h¥,SrRôóÁáÍ¸º¾,v6!)?õëúa¹ù=9
+÷ÄÑf¾ô9çý¯ßËWð§@<Ó¿l¾ÆÛÈ\u37¶-ÒÊã·ìBHÞV¦kvDo*Ç,Xô=åðß¬ÚÆè°
+­·#qßÄ<zâ*NAfÌ¤80ÕÛQú îÙþò·ñÊÜ&õ­UB,áµ
+ÇicKGæþOYÞ4Y§' äÊêÐÅ\"mà¬¢0¼'³ªÈü¨®¼Jß>Rl#¨êém¼>gÍU¬+epaÞ¿®4ÂæÑu"v sNàÁpV{M(
+ø¬PÛrîÌQÏ2üýNðÅ`<\C
+%ZéPW,æGOT*D
+-¯SxVÄ»ò-ó"ï+³»GåFQkövPÒ±7J1üá
+ÇFR
+P~Ê;É&<9¡
+-4
+»ÕÕr¥×A±üçÕ|Ëy33añB!ÖÕçý¶ïs	wàÎ
+
+-¹È8G'Ò"àWRMÿ³_
+-Ed-hÿx¼G'yaµO¦õarN Ä°¹æH®°\
+Hu¥¨UU
+-6¸·îírïï®ê3ù¬
+PMÉ~xÚ%%t%3¶ê+®ü'óÔ²	³nIiû¦¡~Éáÿ5¸³ÁQDVä ùhFàãsZ¹}¡7#ÿºE#>ÈÒC5¡ìfgN 2'Z-N´F\ÛêÃ¨XNP®ìëìN#HùÇ¥í)0¤jZs¸Îâû»´ç
+Òeß3v¥ôÉ4u9aYöáÉ=
+-S4N¾Z}ÍÃ§æO|g;â@k
+Im$`ø¸J\¼üâ°y$û
+D¿¥ìöQµ¿,úâµ ×Õn¾í
+Ï¯{ÇæÑÃvÝ1&ß.XÛE
+J×_~áYµ	ü"¾-¢ÒühKú=½RºwÐÔ7("ç©.¥a«>Úð^q§/sµv}£§æÍÒoåY¶Pú~³ÊlûUwÛ,3u~khzÜâæÊHÄTÄ@o8'éJºÖýÇ^P«fhb/¦·m;´²ÀÊ£$; ÀD1÷öªFl6/N^ÏÀÎ½é2*¿¼?9²;ÚÊ¤7= mº:¥l¿ò;ð?ú¾
+kþ¼È±××Hd°Ð¹
+-f`üB"£+÷O<w½YívZEwm\F¿ÄDÊâ¥^i=üRw-q¾*×©(ãøB¾N,
+-PW¶
+2ÝUòÛü´¸Sá²n
+¼0$+EþÛßµ2,H>Lù}¡
+ãÇPÇYí
+-y0Oæ\«"^t,OFÌ^G¾õÈä3CZLë^òFZe/<#óEä÷Àñ÷6Ó>ÙüÈÖiy![MYëw$ð{¶²¹Ò1Y:½ö0ØGÁêô	êrógd;®<ÞÑT«¹ä÷	öÚµÃÂçÏ4ë"}wêf
+Æ[Õeð°îãHxñ8ïà_¦É
++Me0ÌÞ>D
+zÈÂ?5º)ªfG0%ç¢¤éÍXWkYäÓi[ÂnrBù$
+hz/ÁM&5aûr7JéÙÕ[NGåöÂQ Gõ
+ø
+-¹«z[jÛõmÒ¸Lù.íiéÎ
+-fú7©áø+ùÃ«ë·Ïí89ô3k©ø±7Ipß¦
+,,ÑÐz ÔÃxÁà/ê~Æ'½¹áäÓOÙAg×¸ÿ2­aÈw®¸Ù#û®+ðÑñ `pÑ
+-óª*1­}&¤miV¹<
+§¼è}|i*Gkøø¦ø9ÌPåN	nÞÍ2ÅÀ[¿"N[<Áé
+^å¯;ï*;-sYö¯ÜPøð|÷'ÁIÕmv½Èçá
+-endstream
+-endobj
+-100 0 obj
+-1794 
+-endobj
+-101 0 obj
+-<< 
+-/Type /Page 
+-/Parent 158 0 R 
+-/Resources 102 0 R 
+-/Contents 103 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-102 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R /F6 140 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-103 0 obj
+-<< /Filter /FlateDecode /Length 104 0 R >> 
+-stream
+-Ñ³/cé]¶2ùÆï¨B}Q&> ¦ G
+QË
+?J>sº|Ù[[Pl¶Á.kúÐ nÉÒ­X|2§ýW'W	­%Ë zOd
+-$ÆáìÏ ùñí,üÓù®` ÿ±ô³hùvnÂ Þö·¬¾{©Ø¥Hæ\ÇîÉm*åøÂÂ0I
+*!¥sA·ûEÏ£­âJ¾xnø9¨;lDëÄ)OË£üê¾¤ÂÈÿÃùs¥³æ¸ï¥1q5í%Öv¹
+G|ÊØ\SNi8y\MÔîøû.fÈjP¶y
+QqmHzMO
+­í5ÁòEÌ_UºÁ·´lÛ¥¢7+®Z?ÃßËr(w¦¹ZÐ¢ñqf	[æQ¨úÉå¯Sõ~ÕÿÄ÷	wØ%+Æ9ÔPÍQ,¦²
+-¤µ\DMµÞ·Á¼È=¡à &T;àÚn
+-
+ò\
+ú¸-ÃfL#«°×
+-ÅìàJJ¶NzÚí¾`¤ºgâgÍj¢ð4IW¢MZÕuÁU
+-ÐÏWmê,¶¾.8ÊßÀ&ïL!ª¾ÍÄ²)ïÍ1Ì3iÝEÌQìÚ){¿µ câ§r¼À"p tdÑÔsq<|2ì
+êb÷)$z^³³õ?ÐÛ%s ÎwüÃ:ñz«(çJµÚÚù¶É3Hë/vøm]Ó¢q¯n<®T¸ÛoµáØt¯:éu?nZ=´I
+ÖJ¼Òø}
+$­ ¶&nÒAÁEdD]Ú(E7ù2qòë\
+?,åô¬3,ÛµÝ,1sÎø-¤*÷Ví¤V>Ö]äýðø­øA¥¶§-N4_¤zãÖÔ,n
+¨05×Ôû|ö'4·èh<3à".ykWN4Wêåÿg·zÆµç«zyÊ!
+-]hÑiOAoxÎI&XR¹)ÙeýbT?]3n" µ¸<¡Ø|ì(	þ
+ï´{rÛòÍ«ìÄýý¯ÓÔsÎ*,Þ°Ç
+*.SÊ¦Ó=¼¿U\ßÓÌT/È~GÏNQ
+-m)àÃk¶ºr¶k»ÆUz
+-
+äEûêE"^Äþea:ÃÂ&àlþüþÍUöAóo|4AÚçYVÎ	S%¢åC}ßøárÅ$Î2;z§¾ëXDyMit
+-å Ú¸Ã~±¦ô.jÄFz&º»¸ëââU^¤%ªPQ³¯,]4¯}D¾¥Ç²à¿uÑ^«9û¡¢kÿÜ
+K:tö¦¡!ñ!| ¬'³ël0¥B:6Ö´72O7¬ð£ÑÂ
+¾ÐL¸XR3@ðØPv~é÷Xaºø²#rFTå¢YIÚ,¿®åÝNA´³(9·x=ÌË÷*!Pûò Oº`P¨d÷
+ÿJ¹Ñ´$²ÊÐ1YBeRóM×Ó;³Ì>{¨MÔãÅÖL<f¸YÕoÕ1{ô¾ .Øöt§e²@X:âltaâ&æR5 .T
+-
+á5éwF0Ô
+ì7ç>ß@{
+-½
+ÙÊÆü·Pa¹Gï;ãÇõÌjQP1óÅ»»Ë¤"72Á=
+
+-«I7)E
+Á8µ	nÉ!-TóR1Y
+$He4L,èhcZ î»¾Çs@Àygæ!e4ütÔìÿÙ9q
+e÷?qè/Âñîã®k¹q?¦fz{ªÜtÐQ.=]ÔÕ
+ØÜUMª¿Õ¦q!¸ºû"Ê
+-/s};~´öLy¦?³I])ßÍú=.¸î§ô#^\wbþ
+äÝECþ£ÍßäU¨ÚôoW½øö=3ÄýTå$ï)
+bú¤@ÙÞ°lÀãO¥áfÒ¿
+BÑÇÌ^(
+-
+@
+XÇuI=É
+Zl	Ôì%
+é!¸ÅYLÈ?
+c¤¼nÔìs7dóY0¿ê©âD
+sÎ4`}>r)éå
+¹¨­ð1
+ø~zâ
+-o
+`fxF¬Ì°öü+:{)ìusD ,~û(SÀ©iñî;øð#á]öS¸R2ç
+-ï«ïî6Q#(ßA×Ð­fÅãï5j½
+-wÖmf²Í"ÈDgL0Ç`¡èÏZùÇ®
+²Ä×`¸ywËC
+pºÿd¨7Ôv*Lº"QÝ åÃs­Æ»`³á¦t DÁÿ£"F]¦eÝ1Ý
+E¤àL¢×º`·íè?{"ê
+ÅCuOüjõ[Î1`4ñ sÄUj#óÒ@
+$ÿØGÞø2?A+×7®F±q>vqCxÙ
+û°p©Vd>ÂÕwâ6O~[CÁ»[
+-N¸ÙÊHÙ|³#P¬ÿÆ¤ÿ`8+Ïp¹¯Ô3ª5¾ï?UE4ÁÅýeèS¶V£»íg4|=l;v0¬Oõ¼ßWz6«\, áÉóo¶ùÔâßY3Å»L"ÝeíCì¡¨»g5«´ÂLU´»&
+IÂÙtýPQ"Ub¥òãÄ5ác0í¨wvÆ27c
+ÄýM[
+-C]4?s×Ì]wÔÇl¼°Úzú<èÏàîÄ°^<ô[lkjdG¨§hì?óÿ×dþäC;ümrÍi½ËKål·ön¡ùo«Mbk¾½æ.Gq*BK¼;U§jü$mT1P|ÉGSüoßi4MáøÓ
+
+l¸²~
+§CIJÒ}NîÆéØðKÂäiÅû\_VåfæûÇ i(N' 'Fã¹zM´ù På ¢ÂKÖnÃ´È~êd|¶ÏÜMxÓ½)^BFÀ@=á`4lð¸ÓÈã½ìÓ¡läo
+©úrÂëÐïÔïI
+B\Dtr©ýì=lY¤o×
+cÞ»c
+-ºqG¯¯¤
+Ó´1×VZÔ·Úé@ðE<÷Ë´¯¾Ð4y²°Ý
+þKplso}ø¥È>¶«ÞDCQR
+¢Îu±ß#I±ìÉÉF
+-7gÈÆ
+ÎW§
+-endstream
+-endobj
+-104 0 obj
+-2378 
+-endobj
+-105 0 obj
+-<< 
+-/Type /Page 
+-/Parent 158 0 R 
+-/Resources 106 0 R 
+-/Contents 107 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-106 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F5 139 0 R /F6 140 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-107 0 obj
+-<< /Filter /FlateDecode /Length 108 0 R >> 
+-stream
+-ÖéH«åØÕ
+ÖB@¤uc³bÖ7v"ËÛ#ðÅát ·ðü;ÇRB¾Qòlàª·{þ9P+8ïmÑ¨P{êÔº£)1qXîþ(Ñ
+`\	iÒ+
+-#£¹ºQÑµþ0Ü"ðèLPLÓwG|¤+g2ý#´f1¿ Sþ¶³û
+~Ù´a=¤O¿ *Y,rp=Ú'£Ï¯¥èÆI.÷Â³ÔNÄyóx/Ê²Q4¸®±D+¦¦XMÆgÜ­Ô;Ò$úªÚc4ÕÑ¢¿tú¹Npþvm+ý«3N
+ï2%b]¾
+!#^¢f
+s¦³·«;Qh0¶Ù¡ðÃ7Aé»
+,å0§÷`¥p(¾=oÕ»DCTQGÃ5è?y0Ã7IëçîJl¿/òuiN¿
+Í¯¾_ÈÛ^áÊabø¯møÖd¡ç![ÇÖCµvuÙ?}dxb7=V¾ü {=ÛÛâUås)5.§bÕÁ9´9AsÚÂDÂqÆÌ&1²£Óº¿£Qª1´ç-g@c6ØÕ
+÷
+ØXµ¬£²¢¢(Õm
+£Õ£Áü}ò/O¿¡Ö{j_}¿Ê¿&.óæÉ>®Áwøµõ¿a"CÕ<sûÞÂ¢>qÚSò_
+,¥¼xV?¢/uøÇÛð1ôc
+3ñ"cVP?«}Ïý\
+eÔÿLMkÔJ¿¦[ø
+-»S+ðZÈ~²ºI'qQög³¸á¹tÏ¬Uê4eÄ¿ÕËé\ÏYaÃà,}ôEø
+J
+g
+ 4
+-È!
+o»f#»ú¸zÛ´H\®á[7t°¦)FW£M£"R|uÄ¨ÓlóµË/hc®^l£iþë
+|ÓÕ@î
+-OoÔ
+)PgIJhù8ÕÀ¿¼Ec³Ø±dðíà~8+ðzÃÅn"L59;B¡àª·fY8Íe
+úM(¤ÚêFÒ5g
+ÁjÚâxaól¶~S.Sg7dÇ»Pn;ÇÜ8 5·*«¯CÅ}#²È¬©ùÀ9ÚiâRyä¿×Î?
+mÃýÀê=Nì{S¯?êVÊ+náò\ì\Ó
+-¬ö4Nå0gß4rtî0±`
+Ýð
+ËØyÎF_
+÷
+dUu~1ë¼³Þ
+ùÚÃì{dUn×¿#M{Pa¥IT<ÑrÎ{ºô¡j
+ug}ãË@9o$!iì"hs|ú Ê_òÊÑõéÕvrUkB«,|á|RwîñexÉÁåSe7J(õTìÖ:hÿìÎÈOBÿh
+-µªøkÜ"^òÀ
+-³À?²8TQé_ÉÅ¼3£¶â×vM3~¸ÜIÉ
+³¬ßïÙ<Ïº,WëÂ>o	=/>~çò\À4
+-:m´aDfÑá56Ý.IS¦QÛÙÊ^Sòøhó
+[wc³Hæ»Î
+ò£êdÀ)aVÇqÍPf$ê©ÛS1ª(I
+ý{Üè§¬³
+Q¸»3àóºÑ¿«Wn,ÅÉ%¹ênÒMWñþ ¡ûHªFye@Ë3¬a4
+ïm])"U£=
+§S3u»,«H9[c²8ë5¶kT ÎaÐz¯7øñ ÓjÌÌuÕ¹þ[-u3·$À$6mXxÙ¿W¼ÐÚºÙ#CÒ
+wÉ[\®v½Ìø
+CVÐSîÊüU
+<ðûj¢³¯8æçÆFkñÇ²¥uÝ"ßEÙÇ-¥
+
+tüÜ1¯ç
+Yd(QÚ
+QRr]Æß
+§e
+- üjÝ¤YXQñÖù(ØötfÀ-zm6%Èòã¬B¨	;ûåUåÒ÷^óø¯8Ä$«vÛC!Â­××ZÑ¾¸ÞÕÐðÛüú7öýÛ&YRµÈ9ü°nzdaøE]$ýCe_âj>Ùc¦qþü´-a2Ò~õãåy_q¸+ýàÆZÂ,w¬k¨w
+8)¨ïKYösiJÊãqîÞPÓýn·B6$!Éïä$ü½ëûÌötïúÃHPÊ§ôù  
+-Ç¶?­×î¸\k7r­úQDX)¾9¶&z"e@6&
+¨Ëºd+ë
+Y|q?ºf/¼3³]WS:M@R¬¸¨ÊIK¼<¤µ*kÊùl¦¨ÕÁiRâk4¸°ÈWba(³ùXÚ¿ò4
+>Ñ½3u
+zCR1,MXÀn
+Ôÿ­a+÷#ð ö.Lv³äse³;tÒë¤Ã	Ô½µNN¾óµº
+-BÐ¨©ba-cÍóÃ¼zÆ`X	
+\Õ¬W*è©ÔbI¦T¸µ´l"¿ôºÎÇ¶Ç¸Wj.È¿
+-endstream
+-endobj
+-108 0 obj
+-1935 
+-endobj
+-109 0 obj
+-<< 
+-/Type /Page 
+-/Parent 158 0 R 
+-/Resources 110 0 R 
+-/Contents 111 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-110 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F4 138 0 R /F5 139 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-111 0 obj
+-<< /Filter /FlateDecode /Length 112 0 R >> 
+-stream
+-«)0à×Ù2§
+
+0°KÄ£4 ïiu¦~p¬v«T÷ªTÕ´ÔR£_teI.;
+%üûÌópqmöW@7?ÀË»×ót.éªà$öàjoÄ%D®8
+4hê¶ªëk}=*	®æÉ»M
+-ïm~cÐ\­÷PÔg,Om¼nºiË¥­
+q¨}Ó/KDÓÅ-âyyåë|+KçN{jbRD5X³dÙné?ßo«tÞÞ¼y- Æãy±
+¥ hjQºa}^@ÌKÚæ´ëûcyS Zø×h¬b½ÿ/M¶c¤K*Ò
+ µM]:Ô(åÇnù3ÌT*Ç°nµ@>ªº®l6 ï
+w:ÏB&Ûd}ãIvÀLHÛçQq´É]ÓzÑïiP
+®xPnQ
+7:¦"ãU©x/¡ãÒ]>`z£ÚÝ Ë
+-ÚÐ^squ¦¥v=
+6Rut7F¹Õ®³ORA²Z	àyáÄÞJÚæ
+($µùXÛk|dñc·ÞÁ!Ã ¼ÚÓudAÁeúûv¤ê­RÃ;""p£
+ê
+
+-42`Y®¡¨àã¼nÇT(íË#S=ëFå"ø?Æ0ÐÃC N`ï	Ï<cx;M®©¦Ø©eÖÚ>#ÕÈVÈãÞð*íëºÉ!@%áX$èÞúwä*µQ>pÒÒm ¸©æØ¯Í
+´
+3ßÀRüË9Ðst¡cäþKçfôl¹a¤ø÷0¢Àj:'[eÝÄñf?±a W¬èÊî×qÚ`oR{_n#ý(
+-³/pÙ©Êº·	Yç¨È	5µÌ" -Ñoeáp `t/¶$Ó½ä§nþk$ãý¿Ñ½(úø¨	o¨n¾ûÌA  Þù#?[w wà.çÙ¹ýCm¹6º*-{k6ìMëL¼É'MØEÅ3ÉjkÂVV} ]¿´ÀëjÀGw2÷ÅÞõCJ×%%%qK6ÆÂÂÄFlÝåèíú­
+-;qÿ	AF½%
+Ag
+ ùà¨®(
+ÙX_Ù,Paü%(öY_PÉÞJ,}³E©é¨õCÒÑÀåD\
+>el
+-åDHÉ²2î­ïÌRÃË
+ø÷X8æ»Áÿ#JëYeNUmìÀkî]û)¼}ÕþÍUÍ¾qØð"xÅcú¤e¢À(Mº@¸®íÃèÜ
+ÍSt¿ÊÊvæÁüsà§å:©ad|
+ç?
+¬O¼;#U2O¡òFGLÛ6n"
+y#¥D*­£ÖGÆ7"ÔxY"P­KÛjñÕªD¿/çÝ}kÍ)Îè[h=EùÈÆ°kJ[()ÅW¿j8ôæM¢l(dÜ{
+ÀRjéAâ1oÃ
+-gOBÌL5\}T	Áÿ
+zqË¥Ó >gx¢WóÈø
+HàV%Òîj²|ï
+Ëùì³¬þ}<e	Á7ùÉ¢|7g%yVQ[ðéW2Z±&¯*ù?·åL?g' È´Þm7nÄ«	WWì
+-ç0á#HkéÁGzY¹ëù
+Á¿l_#Aðú°c^PovU7
+-endstream
+-endobj
+-112 0 obj
+-1298 
+-endobj
+-113 0 obj
+-<< 
+-/Type /Page 
+-/Parent 158 0 R 
+-/Resources 114 0 R 
+-/Contents 115 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-114 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F4 138 0 R /F5 139 0 R /F6 140 0 R /F9 143 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-115 0 obj
+-<< /Filter /FlateDecode /Length 116 0 R >> 
+-stream
+-4=*7Óè¿b}h¹OµZ?ôD5×'ÓG«
+>àæà*Ë/D¢ òqÁÞ»î_ª+rV¢pÁ÷Þú]çØ5¸«ÅLN.ÎÁ °;Cg¿HéN>	Ú¾\À
+}dfUt¥XÙ¿BPsdDnïv
+-,
+ÙÝ¥¸1°O4ÕtÍ¯>jâÓDÑlZ4å³ÑJI8ÏÌ­¸ñ¦fJ\*RA Ë
+XoÙ
+<vÓ7?¨3YùhÌ®»è°<Kõã$cÈÖ~Ì	aª¬Bfg:q¿#¯ >Ú¾è³æü*cÃR±\*²7$ÏÃ
+/~'u Ê=*´O#
+zÕîþuÁ.WØäw<±í©Û[vñ%Xâ
+/+ýxPlTÀj¿ÄT¹·ÇâÞ¿ï,°p|ijÌm­ã×ìH1ùA­!²«qug`'Np6<Oð×¾£©ÄQ(³mÜ[ÿóiEÒù
+/O´kSÑÂÉÃËWØ*É
+T¯&Öå~
+­8nïy&U³PÁÈ£óxFå¦QÈ[iQyWkâà¼úM?àº¤²Æz
+M´KÉ`Y<*¯$÷àBÝ|;,$;rè»êêSíÊÙ;B9b>ÿjsà.P?N
+.#)z±tÜç®¾ !QÎ}­¡Í-×È~×Ohñe(¢ l8Û¾[OÿxI¶Ðju%Õé£
+x¸`ÔãÂx¬\dvd`aPÄu`»Àë!(Ûr&ù/n;v5
+(!¢òx.Ã;òé+Fà±Î6OÚ© ¶ÝÝ§×õ]±É
+`Øë0fóq®NÍ;üªô
+-Ò~¤Õ`sHÐ(¤,¨ümCÔV+Êji[¶øM¢° }ø.Wj$åaë¡Î½öuõORÂµ0¿whBâiõÅgAnÝ¯XBÒ£V,?ÕNsúj3bÛ¦rûBüîk<äÊ|!í}dL%%äá´ìè'/t¥'¶*©BE¨
+Í@·í±ûuuwÂXÈÆÛ­0äÏu ü{¾.¦ÛèÄV6êp/S[>³L }Aø'ªôA±DÊp!f íÑ¾äîØ{­ q
+ñQ°Fï4
+93¤"óÖLÒ±©UY"¿×S¤FÐ7FÛª
+ÜeøÇtýdoài6KÂGX4ÊuÂ
+-ô&WèëU2Ìµ\À©×?`õþV(0É¿åÄ%ÞHØåiÖRØ½
+(úÿ
+hW°ýN?hwÃ½q]Þ.áÙ0p±Ü	ðèá}
+÷6i©É®º7ÖþSÅBëN¥e½&jÍñQø!nè]ÑpÉbX=Pâ
+h âSmôWT»VU[H,
+-qìÑ/UDN
+95ú;h_:¿ª×XÎ êî½Ò­.Óô½×(u;j¦|Øqù¹Lt¢ÊIØù2oJà7Ç8Ë¬äÊ èL&§ÕZ>n7ÊtºFóÚ¿
+r
+-ùBÕ;
+öªMçYrV]åµÙtS¸k)cr_YY C6ú
+PÉôïxi©§À7]Îñ){¥Û{¤®Óî­Î¼ë
+}!¥â|dQQmkÇôØ3V5°½°.Ý;GÇÆkQ±buDRö
+-íJWîýÐ
+0å%/½'Y¼(
+J:
+7?&Ç&n­:Ð|ëàê	øJ'éÂÜÝo!ÌiÃU«hÓ×¼ª¼^òÇT®6só³Ì¦qy×[p(=ÙË;^é¹[dÕÜýÙÍ3
+-£ÖÈÝQ÷RüùN#)Kh 
+-ðm
+-¾KSí=+y8²èhGâÔÀHB&÷Ð ¶+¢NZXL=Ô`SEÓ1:)<ÃèùYÖ­È´©ß¦¢k;¥¼×Q[È}&a+yØµÚú¹\ëõd½yÊÙ4(×¼Ô=|Çö)ÂÓ.3`Z£¤¦¢Øùë)#
+Ø¸	ðéÌéÖ¸h6]»m/\ÿñ¦
+ÁÈªú
+N¦ñêÒêü¾Y3{'ÐÕðx J©Ûìß¢
+bÔ
+µ8AéHÖOßÖ¯DU#jP
+Á¸C!·îtsAÒ ¦TÝþ
+-¬îd¤vé`b*7-IÑ<µf.5Êçþ5¾µ½aU§c÷iZC½é2X3# ~Î·ác)¦PÕm.6¹Ö 
+ÆÀ¿®¿< QLªThk2zËî­,@üiç£
+i"ôù>]Ö/jï«fîG?lGJÊÞaà]ï"eí÷jvk1g´s(À@Ðzñ0ðÜ ²ód_ãÍ÷ÄÇA<î8)D¾vExÄ7UØ¨¡@
+Á¨Ø-×þ|Ï½Ò§LmýÁu`ª
+CÄgo´êöòJlê0,J@ï©Ûì~IR²«_·ô¢d æÄ+g
+QZm$ÑpÂÈÓB 5ô¿,dPÚ3K4Ä©ÿ×nI~ñÅ¤AÕ
+²pPt¢yÙ¬oÉÅsÁÿë;7QbAÔªØí
+D
+I*
+vB>ÎÂÏjäÂNÞ]iæÍ@Ï2D:W¯+N<©ÛÅÃCOÏHDòå§ðð<úUÈn ¹xÁ
+p"Ý~^êM|ûºÓZ*cÊ¬æîSâ
+@A!ç±ë
+-dvÿõäsË÷ÍB¨°â¨Ï/ùxû`éÑpÕ)Viì&9Ñê|ÓüàÇ(ùÅFç=ôAw¿â
+}¡á(Ø/Õ¬ÈË1DL;ÇiQ1÷åå¶e?*ønØ4K¾ó³xFÈ´êéä° ñ
+9¼S2/à+g`3\«Påw
+]ÀcßsY Es¸hs
+ÁM`âÞPó/Q7kélxéÆImW{î´Þ,;`ÕßnR;
+Wü«FUF<:U"ï¿
+-c
+äÁzÛù"
+yXìÕºì
+½ ì.TYB}Áá9Rµñ´èÔCè6/ÁiVÙýÆB+8QL"ëH'*¨DAËßEPCú	$ñgRÞ¦É· ñ9Òö´ j¼-Ö É¾ñâø¸Ù£ªÇi>
+-¡f¼Q1ûÒ®N`õ[ðqùË9Ýã kîÁð BÑC
+(@Bý½ºG|º,Ø¦
+0ne.4
+ÅP$=¡ï=¹ËðC@ÑÐMc/[ËÓÅ°²
+ÍjLîB¶¯)
+-t>*Râ±<Ö&NK¿OúEA¢{:Z~ûn¸ìÕ;3»Ïy-bè
+-endstream
+-endobj
+-116 0 obj
+-2590 
+-endobj
+-117 0 obj
+-<< 
+-/Type /Page 
+-/Parent 159 0 R 
+-/Resources 118 0 R 
+-/Contents 119 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-118 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F4 138 0 R /F5 139 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-119 0 obj
+-<< /Filter /FlateDecode /Length 120 0 R >> 
+-stream
+-yìP0D®¢JE²][È
+ÃzæRqDÇOäx<çµÁùV*ÓZÒøÞý«}ÔT@íÜì5eÄ¤<×²+A¯Í]IgÙ¸>¿[òá»	nló
+-ïÅMt
+]`1Ãõ;¸A	$ÔàâÀ%
+BãÎl>Ïeì7+?C  1&(éïSX>XMDIiÞ¬4B¬$tÅËÜ3Ååf>,ìdÑØùÐÒDÝ^ë
+ç`ÑÌ:6Ê-éA`?8t@	
+Û~7Tøk'¿ fÿØÛ6½Ìl@ÈH7¹«ýõB®S« ^-ãÒñ?.8Â«±O¬¾ÞYÁÄNSülL²B>/ò
+â þ¤qy¸+
+-*åwè÷Ùê«ÌÚvbñeI×u~"üyé{Ò¦	Æ1ý¿T:}³Qm;
+a)
+- r«òB²)&*ö}¶¯$
+-Fã
+ÇH
+µQÖEî0Þz vtz[ÿ$U=Qø¿Ý¾
+¡-äFàsWR²Ãê[hÁsÔr	<×oÖÂmùÈ¡Üæ¯]ÚùQ#sNmeJ*GM¶îªCýAµ{ÕÇ^­lÊÈÏË÷Ø§P1c7±:©.ÎH´ÑÝBævþ+Ã²|ê@£Ö
+v`v¨#&b
+ð@U´µ+ÝH­
+ç#Nª?6 4ÉO¥Àº"Ë<¬gUÍp²Ü1àù¬}ÁÊ1HLE±¹ÒµV9
+õëAë
+z~7èÛ!)U·ùbæèÄÁ½Äð
+ÙÚT<K{BòVêá	
+AByv»/ÔAt×÷üÄ)·,mrj^Aw«îøÓ°äZñ6¦"4½H³î ÷¸øÕ`
+¦ U-
+5¿ýï ¥mx0[øF
+-Zc/'ùº^'-/°*û¯[ÊªdAÞÐ, ÷6Fõõ¥v7»ößòÁo%(z$
+Y§ªt!_¼öæoþ'§£äp³Ózò¸eðL¢¨ÒvÖÚÎw@Ý=Ò~J&í]QUµB²âYÂñÏ0ôBÜïø7±PèW²øÁ÷ÓÏ"'¨à7èåõä"öFE 6¸[rêa-ÍÕ/«{b?yRÚ@ÞÉ&J+ùgqiÓ×ÉOÒkâÜ¢À0k¤©´
+»¼hñ
+Ýá¹ÛõÎ¨®¡¢ßnÛÜUü]FÝfP u¿e/¾ÏE}3õQsÊªÖfãûüT'µ`CSÏeðXõ¢Û.òäïrßª4
+-ñEï3ØãKgdLæñØ»3©f_3àÏOr\_ü~È8Q'Ïßq« 
+-=
+4Ôè*ëªÞ
+-pá¼V^
+ÑÍó·êäoòÅni}è´t¶·ÝZFë5çk¦ú$¸ÁÖÅx¨faMNF(ÌýZóÛ¤Ô^÷öétn½
+ÑrL&ik§ûöiS¾Ë0¥×ÜÞEoôqÚ¶ÏÀ(íÄæVRFóZ{"Æ
+Ë±_ÅÒn¤
+-öµq{y
+-Iùäqa¢[j·8ÿÎ¦h{à>j,íáÞ¶Oë¿ò$õ´ÄÅÚ~Sìª¦x|5ÕZÑm{{)»á(ÛØ&q
+ÅlÈAì³w[¯å"À©<¿þ1ÏÂqð¼['_höÑ*VzpÂ[ï>4	¦ÛN63t[ÄlP°â¤iNÞÆLæ­údcå`U/ÓÙ2µWDÐA³ 5ß!eZ ÑP°ÌJ¾hßÎÝ¥±Nðx]4)MèÂ|#Îâ¨{S`-½gqbß
+î
+z[sÓìæ
+-¸M÷<Md¨ñ
+-dÓóÄù¿W mfE2`8Ì|¯ß%ÓdVÿ9
+-µ
+S¾jd^
+àÊñÄ(ÁÀLu¶29£»½1ü°í{°T¾øM´8.[°óäW9a+T;q
+ÆùS¦èF¾»±³ ­÷tU_QçÀÐ/+'½NÄNCeÒ8¦JJäòís
+-b
+-r5àÔ¶[
+¾7ÉüþÈkE
+¸Üeéþé©Á_]äÔ7[J\ª#Ô®8 ý
+1ÚÏJF®ÉÐ7ka
+IË´Jüxñ¸
+-M5ÝÙòÍ£èï)ÓðMµ¼F9
+-ÐlwÆGÈ"ÔÚ={¢~	TãPH×<Ð
+_0öý¿¿xëßÑÊ£
+[¯æþ¤ðCõ`´Ìß¿Ô27Z"F)e­é¤ñú(úò¸+t+"e
+%-3p2D
+ãkkû½Õßzax&Çñóª<!P¡.Ò=ßb1çµ¡{4R$[ÛZ ÷ØÖÎý]RÍãqv×¼rÌ¨2t
+¹à  -ÆÈàäÌ5%6wÂ!¡`ÃdyÕv¾VkÔÒ/~ñbþñv~
+q{ÍC
+êõVnò¢ _EÉÃdbO´!ü¨Ù|xN
+-x$ô
+-Òs&Ä°jïdª/êý0kÎ£8à2ÌpC@à1é
+-½
+ãëß;Öü
+-tHMøôè©2Îñ>é:Å:üPì¡u+]ÚÖwµkìnxYËpÿ>YëûõõEJ6Kýì¸P¶çàgÌºÿJÃððÕ¦­¸^aÌé'ÃÏCçj
+ÿá
+ Î2ñYN¨äOtV¤:ÓWr'U3
+f÷ØÁÕVbRÅó£rÁÌ
+Iîìºn¿saMnÈ(vW"àCXjUþ=AGB¯/WpëjuÖb-hÞNGÍæwË+Î»äVÐ!åpÙì©¯ð÷1KGëP
+;fÖÍ	&>½É®·²¡FdÀ?Â9¥æ¿÷
+úw2cçe
+EÊK,e]À¾PF¸q
+-¤ñ¤¬|vë3÷	Õ»}
+×joç|¿kOF§n.×Ã×
+±I0¯Þ
+-æ.}W:ÄSE9Ïà/¢)Ïª¢Þ+P
+-Ô`åçe´Ê5<&`,ÔÇ8
+í
+-Q
+Cþ§ÁÍÔ¦S#rGÐ3þ¿ª	`QåÐ¸*±Ix[_<®x&äáÑËW¦áZ6½$©FÔ(¾«þïÓ{.ãìå·|hqoBÝ¾^K¹7ë~J
+«µv}éëÜ|fë³(3½g5VÌ®ùU¾
+ÏzZ@Ó×Wø]Á­&\äÅó
+Þ©Ly¦eô nS<p8½©¥èbÃ¢%íäýÁßóÒ
+rO}7¹o­ {4x^#Èðä+»¹Uy!QÞÌv.U1âHñì³LáéXk1çÂ-`XÏGò
+m ÑP8Ò¦ÒóF×YÀîÙÃ¸÷UÝ¶ÙöÆo«¨Ò¶ £-êò¸2C
+AÏùH%w.Ó()e#µNKÀáÚ¬ÎÝ¸;³óE}Ð:ùÿê¤¤¶ÿ[$@
+¸ôÎa'?8¤ &G¥ÔÍÊÖ&'fÁ=¡D2K ó(§¶Aâ
+ÖÐdºÕ´Ó)6Y-ªqìÔÃZctü{/b
+C§¡LÌóé;JrP£S¿Í 
+K.¢+*×cËÝé#­ÿA«
+-¤`ÝãËØåïë¡9<µV8q}yS6¦+.WØZÌÈñ2WHëê(
+T;á¨-ÝIÒ¦W?×ÊX«
+-ÎÑ(têæ±?HÌ/;
+-endstream
+-endobj
+-120 0 obj
+-2950 
+-endobj
+-121 0 obj
+-<< 
+-/Type /Page 
+-/Parent 159 0 R 
+-/Resources 122 0 R 
+-/Contents 123 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-122 0 obj
+-<< 
+-/ProcSet [ /PDF /Text ] 
+-/Font << /F1 190 0 R /F4 138 0 R /F5 139 0 R >> 
+-/ExtGState << /GS1 194 0 R >> 
+->> 
+-endobj
+-123 0 obj
+-<< /Filter /FlateDecode /Length 124 0 R >> 
+-stream
+-|LI£Ì+ó®
+èSÊÉMºE^¯ ÑÂî¥
+-ÎÜ½QkbJVêìàí>@cÝû*!pBf²ÐÜÃ
+M=ø-3ÀîÂ:ãT ¡ÏYà÷}»ù×ø¡XM,ååóäGèÖs÷à¶mÑ¥Á¦Ï]ÙóëQÄ£|ovï.ùx¯(4Çß÷ _ÅÐ,1
+ßl+F)¨£s3Pÿh¾Õ
+ 6#Ã³K¿äí
+-¡$ªÉâÝLCô1üW9ãp±¿®Ã4_Q·
+
+-TJ5aß¼´×Uò)S& ¾òT||ix,M¡ÿ
+2ØjäcèPXÿ oäBà9RFç&
+-¬P'S~À¦ßû³ãpBé
+U¬Ï%ÿÛÆäPH¢Èù§÷"ZÃõúlZÙ/K¿BÅDÐÙ¬uË¶gÜc°
+b>ISLe:GxòÎ¬ùd¬7Ã%K!JÜtÙ
+¯d¤«U×Wz.ÁLt:|3ÝT4³C'è>	b{7"`ä«Ûmïoë¶zâð½ÁÖÉ(
+>hÑ04ÔdiËô&º{·E(*0DòE¸y±`ÿ -Í.vZ#C×EGïõ'±ï	l \dÞµ1J»<M{ÅÖ}fß6´¦5vñ
+( ú¸iûäØJZéÌ×Bø¡ovs<VÉ!0ÇÐwqãÑV¥ý\:i<ðü
+-ýÞyòà#ªêé &áoÜ<ÃÒ¸$~fèdä
+/â*'îjqHp¨¯·üÞtµjz·éf$ÎuLuíÞ¶é~¶T_\Ý s
+@ý7ÂÎÂ5	Ý%àÓâ#dblÄÜÎ·}-®íýX.;R(ö
+{V¼jÓ#Åo¯Ö¯&÷%·è ØY3øàL¯t½õÜ{cß°
+*8§²5?_z7
+-"ûÉ,ÙpÃµ4
+É&¹uîIT£¼ã_ZAÒl
+4²K­ãï,,ÇÏÄÛ¤ÂÆ|ßhdCuÓWÌ©}HÆÆ
+¸v(D{ïSr¨¸ë¹±Æ
+gµ
+-½KÚJ¯æî~¡ä·`?)[-áÛ§íOE3P?a¯Pgè	¯sBôHÞÏÆg²qu
+Ûß¨ªBàioòÌ3YN{8«\dWuéâåøc'H»v15ÉÝÉº¿.Or\BK
+-RÕ©ò·T/4©Æâð[UP9Õ¡=;Â¬7$ìÝéPëMo|üC
+Íé¶~Ó%òyÀ>^·
+
+E¯¨l>
+}è">vðm¿ä
+sÒ6¦J3$úÆ¯Óy¡êtÑ8gMÚ^	E$Á¯üÄ¶ö`åÀ#iþÈb9
+ `.-
+
+K($	j2¾ T1mâ.NÅÐãkÛ3åÂÓ§©N÷v
+é¾O} <2ïU ¸Êÿ¢X¤MYX/¦H¼Lr¨1lyq<¤ûå4æt=
+!ÄÃ$9;ªgßh°¶1¹PÕ
+»/Èq}
+kõÕÆ WIîE¹zOX "` 5»&Àý§ø]cÕ~wä6ÐÆùé¢c6F	ïÆ¥ädKÓ)ÙMOð+Ò«s"«Í
+-$Â
+-#¤¬ØmRgi
+-4ÈZD8!R
+i¶TÄN;ÈPÃ&´Ë6Ä,¿]À¤pÃ Ò6Þ §C!
+ãÍa)§0:3Á7¨RRë1j2ÑF~DRË!m­
+ç£YÀ£?A
+5â4úk'¤VQÜËb¾u§@5¬àiMú>¼Q
+¢|tfðqûñÌpÅa]Þ ïZHáªd!zÝÂD))d
+ÅAÑ
+0Î
+·°³Â¶B{*¾öÚÑ÷\" 7rîîñt[NÖJI¼s6Íþ_ÆµËÛNòlÒÁ~>DíÆ:¯æÉ×³m¡½RUJvZWx«à|Õjøx°cw¥Å8`ºÎ%(µ±7dë[ kWóc¶
+j@ìg³§¿ùµ"èÙçüa­cDêýÆÅbÏoÈg¦6 ãvéOöOä÷+e 4BYÔ1E¥WÐX³
+-ÅAm':R¤8ý»ÝÉí0.(äL*Â¢cO1M:m×î8°W åýKùfv~Pn·_$+×ÍÉgy ??d`lê)[>ÊÅßupÅÝsøÚf§ªû5S
+:xui_;Ã
+-&áÐ2#êúÿ^u0z1
+t?¶þ&i±*ÁõRKz+µµCJY%ø2
+
+ñï«táu\d ¸Ãª(ç¨Æy2T÷ÑHK¥oQù­Ns×{î]Õ nbÕ®*But°î©xPÀæRÈX'Ð·g1ùßóÒP$)?×ÁçMqåùºÞ0XG~i°E1À9c·
+--/ªò+f¦zù
+L¶°cøûÏÖÂ	c9	Ò*v
+ì´°«£ÒI8æòl¨MëêëFÙ¥bcöaIc:2
+-A¿Þ=ìÉ©\ãÞÐ¨
+êÑ6C8­
+-ïÃä/¨ZDìèà$íÕHá
+-øaµî3U+q[~H63"XË
+-v\Áé·!HJÿHÇvZ°9êS.
+-g8!2ý?û·¼§WH
+-~Ä
+-endstream
+-endobj
+-124 0 obj
+-2139 
+-endobj
+-125 0 obj
+-<< 
+-/Type /Page 
+-/Parent 159 0 R 
+-/Resources 126 0 R 
+-/Contents 127 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-126 0 obj
+-<< 
+-/ProcSet [ /PDF ] 
+->> 
+-endobj
+-127 0 obj
+-<< /Length 10 /Filter /FlateDecode >> 
+-stream
+- øÅkNyÓ
+-endstream
+-endobj
+-128 0 obj
+-<< 
+-/Type /Page 
+-/Parent 159 0 R 
+-/Resources 129 0 R 
+-/Contents 130 0 R 
+-/MediaBox [ 0 0 612 792 ] 
+-/CropBox [ 0 0 612 792 ] 
+-/Rotate 0 
+->> 
+-endobj
+-129 0 obj
+-<< 
+-/ProcSet [ /PDF /Text /ImageC /ImageI ] 
+-/Font << /F6 153 0 R /F8 150 0 R >> 
+-/XObject << /Im1 132 0 R /Im2 133 0 R /Im3 134 0 R >> 
+-/ExtGState << /GS1 135 0 R /GS2 136 0 R /GS3 137 0 R >> 
+-/ColorSpace << /CS20 148 0 R /CS21 146 0 R /CS22 144 0 R >> 
+->> 
+-endobj
+-130 0 obj
+-<< /Filter /FlateDecode /Length 131 0 R >> 
+-stream
+-bàÁþËN¾8CÃBI¢ô Yúw©ÆºPï\óÎVÑª¤§´I
+uÓ+]êKî¦Ø Î@¡;êfv
+l
+¤Þ¿f?ûÞü¡µ\z¨þCLã4öu½öÞ0yi¥­0mâÍzÑân)
+ë|Û¸jmÌæsZÂ±ç¥¼Hlåû÷ þëö³Û 
+
+gè²	á¿bm
+ÃCÕ. EÌÍ76õú¢ ¦··ú¤¥²~¬Ãæ~,Dµz©GÏÇ¬²'	V$Ù:%ÎIZ+?ç~ëýö4ï²eÍÕ
+-Æ
+<=¯ägªðlVÇ¦l¨)¨â-1
+ùñgË#ãÂFx­)Ê×iØ¥ªÊ36îïÇr,S¡Hãr¼STÒ)éDÜÍPÞçB+
+-wÈlÈ$­
+ü×g%«M¬C}oHMÛD8ù²ã_0Êã<"óB±ÿ ãN£S½Ú'
+-
+Ea ó)1ÞÓ
+-­ý%ÎX¸TÂØN¨o	5I.¸e^>NâYPÁjû
+F ìRå Àq+Æù ûÍb6¾+tMÉù»ÑêÈÎáÎÅGûV%{dèøÜÄJÞÅ+!aÌs®a
+§t²K8qä
+-Rá¨/À½^RI<=§Ð[ iq:-¨ÍhÿN3G±8gÔ
+ÒüJ"áxñYðGj¹		Q:Veï­¤¦N·khôi_Í¡<UKÉ­¾¬%zhA+ö³uW­¯¢¬F±ØÍ L¯û=KU¾Qâ %b[¾üCwÄ¯ca=¨Ôyäÿg§»ntý%sºâöªAGvó"zS~IÕ+¸¬pÈëýÊB8Çô<Â/á¦Tü©an/bxÀ¨Ô7Ú%1?Ù²íQ¾Êeû ðu>_»Å6úHCoG?]´§VO¹ é*·ÂRrlþ­²¬} >ÏUz-#S_î}¯~cÂ¿nB½¶Kd¿)'.æ²«B=>R«L%kÐ°p74óå*W×39øðý
+HYÛ0áòÈ}Ð·#ÁA{ßy3Y¼	<Ð¯ÿtÏsê¡²Æo°fMºÒñÅ¾1JNÇþzö<vò=A
+si¸®Z³;ú¥ÖÆéûÐÐ ª¹ÎPéõ÷/C\q	ÃÈ
+Üc	J±½å§ xm¸,co¶]ù}ã-3ä±Üï?Þ-ê¯¢úby! l5ò}­*VÄR8[V®f×j':ãÞnâÿaþz:XTG¸S=ò
+Å:]u
+-Aúî§ðaIk@T-ífâKçÓiOøÒ£ÌÖ)JJuí²Mß8lÆ£çþDç0ä)ØgÀFE)Ô| ý°¿H´=;eöØOÕ7Ì
+-åM_¿yÆ<~ïÊüCs
+Q
+-þP|Ó:_ÉYà­i
+-ÂT÷ºÁ,Uàiò<ã_ùqéåA¾${êKÎö¬/±×°º0S{°Â[âA¤!°«iSºæ³È¼fð©¢!?3Ä&n"6©azÁxiGß
+´Ó¾àÂ8¹Ó61þvãFÂÅlÚ0
+-ÿàS}¾91£ÛÞÕF
+[®ãnóé+
+£o9Ð÷´ÂvRîEh#ªîý
+AÜ®ÏP-ÞáÄÇ
+-?§Ïª+ÙÂ Q£Ä~h_ú*Ó|E7þ jKdì1â¹ßiçÁ
+Q«í<ë\+
+zë68¼¥æÛ6·'ØI}éV>.Yt
+ÞY&ÃÅùn}?ÜFW<R:}0ô_ðÏò&ó¬hý¹; 3$d¤íÎ&Ã}ZËMl½±é[ãDÖ©Ä
+c4ÉØWÑ,RHß&tø<Tö®cÃfìÌ
+-I?èA!{Øg5xEÐ÷Dx£ÊÕIùnògÍñÇ2âþý_Ü|¬KÃd
+£*-BxÖ
+³Kço®QézFÂaØþ­±´\Z}*þjªA':ÌéRºûj
+¿ºÈe*(Ãî(õí×­q² ¢j÷)Í¶©PXÇxG©båXl]ÿ0Y3u¦Ý+í;"Ó¾fYpnã1äÙÇÊCD§|`Yf,C£ø]óckÆÝ¦Ü-``Z¨î>
+·Lp:¥ítâKJà~o90ð÷
+ÌCÝ
+-/Íin(þ¿üñªôXµÛâz%ð­¶´á @é
+ÿ`bã±
+RÎrü>ý)
+jKÖúV{à:«
+XÏ/ç
+¨r:7òn5>Ìà3vÑ\oG:Qél@Í|ª´¶`É¤òÑ,7MÜ¢X[[Võ¿ [5áñB[V´IÓÍB"j
+bQj¿è©t@jf­±±³rÒÆ~ rpÒÆ3|SÒùE5YÙñ¬
+_ôÆ»tx?+bLBF0ð_\¸¬ØøÁ£8§ °x<­oÁ!±@^:
+-ø
+næÃïïÅÓÉwÃGê@¯ãëwröPvkÇ
+MQ¥É¥æ
+#©25;q»ar6°^ÔåÆêéýÇr¨l©ËÙ7§õ³ÅN%«ÇÉ©ìü%Ð®Ðø¸ÀÇ®ü~
+Ü÷tk×Ò¾RFñ¹ËN×aª`ëªY9Ãykø¶NGá¯\
+Ø{xî
+æ<0gKõd6m2b=_a+]¸¹&mI8Ø:1±óPHáHÊHý
+N;îbÙ¹Kál}h0 ­KfAO£'­º)WbóçÁ:|Dk/	÷¼Ã¶Ø`q¬¼bôæ$äØk5ÜlkâLåûøu²ÞÚ&<à×=
+0k3H2Òæ´òØ¸îÄÒ­BVuZÏpëR]ÖUÎ¾®SQÞê1ÉÈÀ*ë¸¬ªpDÝAÆÕA¨ZÌÜ
+-±©ÄWÅr-j9I#,~
+]
+·;ç% lÉ
+
+
+vkIrbéÚhp/JYòó
+g	)U#t|éá¤Ìr£ßîá'8CHü9)txí_ß5(/û[K¹Ç
+vÏÕÿÕvhkÁ
+óntÊ¶{
+ µ·x>8ù£ë¢".?lñP÷VÁszHËûÉØP8ÎÆ¯{ûÅ¹Æ¡n|ûÐCê#É`ßè;÷Aáæ¡qH_
+À7¡h­@÷eñ[ªbµÛ{þ8
+-$ÆÔ\cm)sPX²U}öL	§¬¶)¯ü«Çä²æ¿Í/X·
+Ø+$B¸Â"z¿ ÌUxF#
+Å½éÏð 2réKßj«]xÛYIkù_.j
+8Õ`þ\dêIìa+`Dj[AïäL¦Ë`\`Ð¯üªsV1:HÒ-kGY3àc
+õ£¡4-­¯ä®iû^Ú¨Î@:ñ®G qðúÀ¥vØ I¦*`ç
+)I+þZs{üÉñ/imù²üzà?ØËÜU¤ÝêòéÚ(Nõ$Ú©é
+-»ó»w:]½_ÌðÒ×.ÑkÙËð@0ÞDÒJËg×rÉ£GéáÜ$o;ä»'XÔº±¥\ø³KQ{Á³úbÅÅ6
+jI¬,.Ð³3éRX¯
+%'}Ü
+âùú
+-­ï:­#Õ[Í?n+òµ2u¶êB)¿k.Ú´äÄ(ßÅ×®ó£{xHÓðä ÃVÁkö
+-ÀC°GìÕi""Ó RM$Q.$·úSPú|0¬~Æ*ùÊï®R@GÑD¹­ÑrípãÍ¸z2@ª$BÚOãYáí
+-B«ÿ§rÓkÖ)Aäk¦ÕdãÂ·áZ»×®ò£XAÆO?±¦-¨Ï®µmÆqßÆ'²,ä3%Y°Wk®¨±KÐ:àÆqVàt*ÏP¡É½Ñ!$X%K s;ÕláÕ±æfE:-2
+aJèÜÇT*Ë¦â+.úçD¸üÙ²};ø|oârû)%tN#O7¥P66ËlXjãØ?
+þ
+-ÓÜ3N¿çeÞ+(¨Xv9©}¤sP^y<U³?­6[åÞ]*3g³Ýs	W½B_Æ'¢ºù¨½J
+&,ä[hu¶µøp
+-0ßöø l|2ïb´©!z²è3Óý
+-Ç×*¤å6U04QX/nÖuxoC6C¢üÕgn?=}:Gí®Kðá	à#>wMzRe¡ôOD_X Ã&¯¸µ× {§§½u|ÐRÑ·½
+-µ±	@[!]Ëýoñþ¨þ\´±Ë?vRD\ËÀ
+v
+
+£MeýOªÏÂSùs1oE)Ó
+LÝÂ¦Út¢¶È|gí@3ïjõÕ¥z
+-òÎØòKxò
+-zjNúS_ãdkvþî\`0*pËý/Íë3eXqJE¼æ¥ô:×ÅØò¥õk4Ä
+-
+óB|>5ñlf
+-
+«h3ÌXþæ¿¾ðtV.KN¸DS*w$ô¥ÉÅ|ÒÅv.ZWØ¸âñÜé^
+êÑÁ0LÅÐy¸?·²Ù"T[LNv°m ëêý§"­KÌ{êfÿ
+-&6j²Lì:gàñ0þa}GoO W]Ê#¼¶Ñw·ÃNG I¤FÕPþjGìéØ§ß§SF-B'pVÇêüÄ35Içë¯Pú;îB]û©¦¬T
+Çs}{yü8êÉxÕ(
+Uð®(WuP×oR÷ÿ|,ÜqÓÉy0±.K:ºÒ;x²·£¾õ>ã%û.[DÝOaý×ã&¬+îÆý¶Iµåu9·ÊKÌY
+-=K)¢2ìmRÊ=]«ºÌ«x_XÌBºÊ]=àí¡<	ve_aÊ¸»£²L;JËV{æd
+-4âHAäµSºT±7,ÇÜò=r¶#ml¢ëË&¨3*1f\(ù*`b æÎVÓÈ£¼1öÁ¯­J*±¼£ø
+-¸
+3ÎxÀçGÛÈ^Æ4¦¾j~Ùë='HYùÏvÀ$ì@Í
+Ïú­"iÅVi ¥»)1°0iëêv¦ä©ù1¢áñ¦äûö0ÙæíßÇFHÉ
+-pÜÓ#cC
+èQiS0qÁÙY-:yäRnªg^ã1K+d<^âèÖ
+Ü¼ÄëIRÈåõwý8*E¹&ô<ôIãjèJôþ98K§}cõà^zÃE´[D0 ]
+-%6 J]
+^v¼Ò(µ%=%¦	®âó¥k-zfã^>ðtvû"
+
+§a.}¶r>VÏjÍx©XWØñ\)x È
+-¡¹ÔS
+Ï9í»/QÌbjÌdÛ!Nñ
+eK_­Ðÿ!cSqðØWu¢GXÝDÐÙÆa
+Â:éÆÀ_f åÙu¯3QÂNÀ
+fÿ²
+-±¾û]V>ÎuqÃ­ð$Ê]ªötÏ t'Ô½I~&4Ý­´äõ×«è? é¨^ê¤»d
+íé­«³Ü.ZD/­¬W6õÇo`V!/p
+Yú7ÞTW]p(¿L\c´O[>kõ9
+-BÖ¥oY£mmhäð;ó®of
+ÂÁ&ÐGsä]ÅæÎN
+®{«³¥t ÃÐo\­yaÄá 2è}ò¾ê
+Á³-éÀà~¤â3"XºÈ2±{R,O41
+o?ê+Ó.¿:j
+8÷¢ÇÈ?Ä`ÁAÂ;v;BÆ 8_	vwÛiöãØ CÒ¯­³ð¸úy±¦öñ­@-ÞE}:
+-jÐ`-
+Ê`é~R
+-
++ð{ÁÈ¦¯ãA¹ó¹2ãeæâ<@
+"QÉÌY=õ/O(T8¥
+Ñöýl-#GÞûR?þ}E£º{oIzÈØaðê{Só8
+¥H
+C	9E{Ôz§
+tSÃ	iü'/)e÷¸NR·ß«¸Ûmc ¾Ãp:VÁÅ´¹ãê´ùR||Ø¡ë-
+-dê¥
+*u~þºwRä6 0(XÀ¨ÑP\NLÍq¹&í>¢yù»¿HöT©«éãqü#½«ÄQ9Y-¼âN¬¡»yZWÊ@´ÝX±
+÷¥
+ö ´áÙP,â¾zè®Cs-â®Ë/ññNd¢èÁn°(
+)Ã
+- 
+¼«
+´e»ÃäpÈÆ<zªmçH=í`óq
+-½y4\WXW©-­ äëW[Sñýä?O.TeÅ','GcWtP
+²Á'-Ò¸dX×÷qÜ>è«óÌ¤¾p@§HúPÈá^Ò
+tÜõyl?90#p÷þHM÷NÙànsÄr&>ö¹\S£"Ô²çn?0örkBÿÕçòõ±+³oAB
+ï¹@¨±Â×>Ñ N§ï±]#¬
+Y®ì
+Äv¾JÏ \ÉqßN¿(¤{÷Ía±nUOÆÇ+F%¾Ã
+{3Fú@þoù¢d)xéØWzéÍeEAÏÖj¦Km4¯ÇèÖºKÃ.äuÌKXßå¼Ð2aD(¥3{6ðÎ¸È®2GNnÑ&l±ÇE-E^HTA
+<Ô êäy:DkxÁoXo>âÉ_¨¶ÊbøíëÉ`ºèi=f-+Q°iénFÑåÂpÙ]D_Õ&%O\ûr"T 7{Fë,ß3b>>ê&0¡\z­tý
+-`s¯5©Ò¥È
+U0g%sAÜTùW²em2RüdóGTÈpéú.{D+n ª®cju3<¦ê&×M*Ìy	Is5}«674º|Û¹Ö¨A&§ú,É°ÖYÕÌ^xídé7i¾:ö²ét¾óûñ2YD´ßÀ
+
+À¿ë¸Ñ;Ïæ}5RF½PFïs»Á{¢åÏÙ
+Raå1SÚ$ß£Áôë~Î[ÐG%/0õBô
+âÄ$av	Y]g\()BÃÏÆktl
+=ä£°²IQ4Ù1J¸¢³ÅÂÔÙA,ØÐ.2zxO6
+3Rvæ+1©· ÃóâL|
+Cû1fIÇÎÊ}ø.ã¾¨ÚòÍ/F
+&6mcW³ÁÎò	
+&e¦ "Qb¶àòzBDÜù­ÚåÂê ã§Òv¤»M;EÁÔ=À¬úJØbQ
+ùNÊRSü	[3|Á3Æ s¢öô?Ã6äUw#QòmýÑU)Ð81SPèÈm1CAêâÎÂpôé¨ÒÍëL¤¨u4ßñØóù]Í4åwÕå
+øf*ÿòÄ­(¬¬ ãxÏ0Ó¹æÖÀ8<Ý¦R9CØÓ°áÖê½DNùO`u÷Ë¬s
+-~¹Æ'Hu_£Õã÷AsQª¿1Ãk·ô!E_{
+-í.õ1¨aþú¢÷Ç2\SÆ³fßf¸¾ül$Pòñáª#²j?[,¯SJ.ê8ë2ÛÍ¾÷¿Ú÷ß´IíS
+àzh·8ÞSív
+9*OþlÿÎÙß£6Ë@:|èÙ8ïpCÀQþm!§ëC°~ú9­Ëpj9;çNÄk¸¾þÂh
+æÏe¥°'#D&>3à«wweþ^	GñªêÄ»ðÔÜÈFýd+8½UyóAåÝ$So$MµO¨n·ÆZD
+¶/ÿåÇ?ûÃrâE¢þ®&	õR·N\ÖjPÍÍk
+V¢c\ev¸^ºc%XÐç®Bñjea>e¢OFÊs
+JÕqTÍ1?ÓùbþnXHMÁL£VÞO33?/É`x2pÉTî
+'w8G¼hìlvÀlâæÐ¦¦áyïØ×:7
+-þ
+µ'ÛädF¹KK
+|mâ
+j/ÉmÍs«Õ
+U2Ù¤õ¸`®³µâÓÛ
+-RÀ2OÎÚÛ¼ûôú©M®
+]ÈÌáÇRöÔEîUg¤rR¼vNº1Î/,tV º`&
+.Ù\½r5Ç_õP"iú+[ÌR½Vå7s`ýªad·Tv,jkFö¸¯Uw$¬z[
+-Sõ·ÏÜåm
+-P´ÐÈ÷Ï7·ÇÕªQ
+?tV,kt+aªy¹ldÇNÑF
+orÌk¨_wt D3ºê@gÙÐ[KwEdZJ+t^?NÉcÊÝÔæe0Jk`1²W'
+TeÁQç°ÍEk}c£jH{3i
+Ê
+<rGPìhà³ÓääÓ|xê]oÁË`/T4%,(z²fÎ? O"
+-´C'¡afk±çfzýSÙ]Næê¾ on ù°ÁªAAi5
+-¯ac%t"ûG8b21@¯<0:& Qâ}ß·8ËÌ
+.î¦Ýëb6©ß¥õ!d¹»;f'ÍûX 9ýÙmå!\nsàãÆ
+ÈËm/nRNìu
+a ?^pi¬ç<"÷ÿ°
+-ÌõESóG:6ãM
+÷^øD«n·T¿®ü¤<S¦sÃG?jö»oP Ô[½ [ºoÿC¢$un»
+-ÇVÁÅ´â¸¹vú"Í¤9ÐÂs¨!37é,mAôMX[l«(Eáúexábðµ^{Ôxì¥
+T^Àë»K"dÝQ°Ö~ÞÔÁÿÕý¿vÙÚa¬@t®ïW
+#ÇnÊÔ
+-s£F×3ô N¨?ÎÉ´;.°z¬À-ùõ²üìéòÒFyæá(i£¨j©ÑÈ¹
+-XáäêMd=GÆBÄ]+ÄG¾æ_Ã×äTYç"GM	¨nØÄþa.Ï´´V¥ªó¦0°k3ò¾ý­;]4Z­¤ÂßÚ·n­g8¡¡¶¤#}tÞ5i3tôûZUE9È­~µ1©§:BwÈ^@
+OêÌ³îJ
+- âîg{s()fÄÂûv[ÄJÍö\>QÐ²ù~ ÝÃÉN!jD6¯ÁATÊè/8aúÐã
+ÉF5c6$$|Q¥±¯ØðU£«>¡¥ùjÆ
+òäÅ^IÕÌ	útoá\«µW²
+-A£"/Òu³4Ãa<VúG:»vBph¼KÌ?kÝGCrbÌÙq`/Nf^CÖUë	!iÈ¦(
+GGbÆEL¼åj6µ±Bã'{&KJH0YÎìöÔV=^äj:VeIOÍZ$]B-°`yá59l6·;þÝùq)#WØ¼
+-P¹Ê	Vé­
+½¼©Nñx6S9}çF>EÇÃX9F¼aëH>ßOt'%ºâãÜ©¾&úýið
+úûÇahÅ¿÷ÅC306âÒ6~Ê'i¨>¶WOßÆìïÖ­ïaMÃ«¢Ê{
+-T´÷?7£Àæ±èñ8£IéQ2ô@_/lT¢Ñëq/Öà&în±6Ín'LÕ´\
+-ý6V¡QÚRns°²ßÌÅ0ürj!ÀBfÇkÿbdºS¹P$	o
+-áíJÖ	w	È¿ W,E½é{a0b
+Ó
+Íså&L^CÚÚJK#`$¦&Ä6Aæ·K¦q#?(`b
+OK¢æ±X«BéyFÔT/gLD¯AhÁ¼xMßüúÿnPÍn)2>Âè¬~}ºÖ\Ým]
+-Y#.?ÉE[#eÌïÚä`is{Y³³Ç?BÑ"/J.»SW©³O½ù'p'Þ(A^­éÒ9&ì]{T;%H(¹ðrÌÆo¹XF55[­gÞ[Ð
+ß	}¶±° 
+-
+á
+2<üy
+3ÊCÐw
+--âIfÉ:aàv|k
+èÃAédeásUÈf·6z¯£<ì¶ÌsÕóÙEl1+ýÝ;l¹Ý<GréÒHDOhö©Î^/ÖH@¿}½(¢(«J0°ñôüKµªUðÌ%8fsãBn¯â;ý*¸_û ê5á¥È;èýg¶
+È=wúã0ÿmk
+¡AÈgÒ´µÃ
+-°jFþo¡ét,|È¢,ß¹B¶	B+pÏ
+-Ð)*­	b÷>
+G8^.5§W¢qIÂ(H_:["PNÕÌÛ;íþßð©Ë~nÄ¿ÖÒé·U$(²Å¨©÷[jä ·ôe¬ªÙË¦VÌ¿ÞYÂ
+¹srËZw	4]IBFrÅÅä.§¡Ànj6vÀ)Yz¼Fï`Í
+rÕeAv*#
+ªøºrpa(gé#%ÎstT;YSçú+Å+6¤î&â ]Ê~S¢ISOÔ5ûÎ ¡®­ú9çNlTf¯ÑÕc%Ù×ä{Í¥ý!6Ô¬Ñò£ë*SÎò¹;ÝI¥ß"rd}}«Ùes;ð §Yû²²®ïO).+Å(íæ5Î0?Þ¼Cþ`´5¦kÚk JÚú{{Ú}êû¶æîLÿZ¡(urè -
+Î/Ýf^¸²
+,)Ý2Ú5àÝ¶
+00ÿyú,
+Ë.>­yí%	TÇÓ4qÌ>uZY+Ch#¸{^<\@Bó¯Ï_k­Ïyûau#ÞàÎ¨7D`=D'hgyùRQ­ âëÍHÿËýZºHÑ4[fÏVÐX
+ù,°<Y0øúhoÄédN£çßãáüÏ)ß;Æ
+¸[÷
+-©g½Ôh7Ê$ÕmAÒ-C§~ü±qÝ¡^$pª5÷qtò¤µE(ã³
+-epð=Ü  Q{5¾jßÿÍäKý3DÃøv¿Éa´ÌHb³ëMól±Ä\ýb÷Ôjg1ì'¾é~âúKÇ©ÝöjlíTÎå
+Xásº
+*n/+ÅÜÛxÆÀ 53³ÜD¾1ç,
+¼¤ª§GçæºNF¹¶ß¾ûzùi
+ qÇ¿Ê}i­°¯³+º
+SE °¿!µ` ÂEÝùö£=d¾ú®[â½
+¹ÊÛ½µ(ÐÍÐzaèÏ»ßÄ®¶9G|µ|úÿFäìUÆ?IÀõ"È6Øç|D(L¸öµ*Òc±Ó'àHÙÜgú
+ÐÛ¢¦ryç
+-.	§²ÀÝ¶K1d-[5âÔs¶´.Îû0XµËr+M{YuÌ
+ù[
+÷Óp_ïèÓ¿ ÆäÖr§c`-íÉÄcukÛ­ä<
+-¢²íÄÔþ'¸ìSÀëý<øò&JJI±·jµ4oçq@ºJ
+¶ÃèNÈ*/{A$¨¡ÍÌ½ ¥-Ûñ¤^yû¼ÈP;hk
+&ÓÀï(úxÈ)"¢þåËt§N
+ï*áH
+l$Cµ@ÔX©È«b>½D·e¯4Ú¤õjôM=Ì
+Ý¿¤sñÁ=kcÎ5Öß§êaéê¤¡ÜÄhÝ/ñq°'ÝêA&¶ßïZTYfûâAþÔåìÇ»Ý:p8¯ouûÈJpë³ê®qÆ`q. Qùµñï£òåÖüF´«ÐyÌÆ?êÐÄ¬t¬-ÂX¤{	
+F¥xÙ!3»[a
+lËAÕé"
+Jx%
+ñë­È¡ Kxwfõä9)zÔyúÿÔ¾|xL¡"iQ
+!^¡MÂ	:fzñä,Úëo»ëü-BþòÐâë²µVP»Ý½mcr¶ss?Z¯
+3â~a2ÓpPð
+Y!æ>ÁÞ4¯JI
+-iz°nçUc±ÈÞÝþ"Ý%¶£Dð!:Ñ%}swíðz]KNðÇ,l¡Qòÿõ|,ÉÛâ´o©÷7|Ì1péúAÝ
+
+YÏ/_ J<¶ã¨øT*?
+Ò$`ÚÂèJ9ùßPÍ
+°ä3ýÃ²`0[`ÓãXu~hP¼t~Q'ÃÅæGºõÒ7ïÁQéúô-dfÝÏ0ÕUÕFEñ/@ëåÒ¯­pýÌTf#Éð|\¤X¬!E+!"U¥D
+^×ðøØéû15Ûq÷ªêT'm
+åQsÕ%³²¡øcëïs{ $5¡Å+Xsì.@£XÁÆ;ï¶Ù
+-§íMïlMù£Úè´ Z8Åèõ
+-?´i>ÈÛÉñéÃ3®FJ
+¢{®U#oG¼ß%e¡â @BËC ¡@LÂ³
+i­ªCeçü"ªÒ±[RçføÄÎ-[<©*ÑüéÛ®3ã9#k ¾MæN´"Î#>O{Ï%w	nÉF¯ÿÇî£ØecçVÐ¾< g¡\ö
+U²÷VST)@½u
+-ù£ê±Wú
+vàÉk¤§K>êÿnã
+@åjqªÁÉßD
+{VÖ8ìÆPD¢µÁMtÓºå<«
+4
+è7ÙÛßBc
+#¡ ^ÉsHqÎöÍB¼³Op îLúÞÍð¿oÏ*FJÅÀ*ZÆujïí¼®ÈÍ
+ìÕÙÀºÂÖ
+ËÛ¢¬àöÒóFYÞNÑXH¯CCÀzÙÛ¢áÊ8+ÄNyÿ»	ð`ÿÓlodu]î¨Ô¢} Ó
+]dðXj
+nØ×3<iÃÿ1oXìs¹®qÌ¤@µá
+/+·]IªílÆÃ0°v
+
+-ÆÂã­¯j q`ùÕx³cü
+-*[ÝnFÁ@	
+-Ë]31q£ïK|dqPÁÏÚô[RÅ
+u] ð úvyuÚñ<¦ÒkP
+KÂûOØ:Ö)Ce
+¿ø
+²½]sºÂGÕpw;%}G8PÝÔ*ê×Â6tÅSôibUèVR>fHæ÷
+âÇc*ÜOø¸7íwuÿIç
+òú àDÕÕÌßýÚ
+¸tm
+Üa7Ð
+1~H¼
+&ÃVlßÝfÃ6ôÞ¤D}ªÌé$®ÞÌ^ø,]È@$Õª¥¸ûWÊ\+I
+-O@¯ËNGµr}q¸'zÔzý$Ü2ºk?ïãBk9Ç·Ó3¹¹Ì _e]óÚÅVlâlM[®®Ë§Ö»?X\(|§(Çü*<ÿÆ3É|dð¬Sjcg\sz
+ï»¦$ý'é3VÀIñgÌAE3¶vcxÎ	ÆCòÐbñ°AXð¡ãã
+Èé¼FÝ7¯8ß_VÀLYÜ)ØÓúËÔCAÆhò)U 
+WÍs)ðTÕÍö¡Í
+"ìß¸ïn»ôß`Iã:þ$¦Ö¢EiîÄ¨ýK××Wg½¢Øÿd
+³EôÜ¦z^-¨Y)mïéUq¸r
+¤,¨
+û¼
+&"`Ä"ÊzÐq)6õßÐNµÈ¬¡£à;Ööö ®fèA¦²ÌúþÉëÅB²±^þ>zÄsûÚüäö,s¼ÒMÈÎ|j{®O»\NiCº¾Ïã¯züv¡?vÑÂEÓì¦ üíöþe=/ÖÆ^BÅY#ÍP Ç@Å­°P$dÎ¬ý«ðâ  /ÕþáÑ?w%­3:Ìè1¸«ê-âon
+-Êºçb/8Zn¤-E÷gu½8
+-Ý+
+ØÏÄÞ;ìÀ=@MÀÕP¡Fß¹k¿]¬q<*e­sÒT./Â´«ò±;g@F(ªM
+-^ù',¾~uÉîÅîc´F*7hE ±ÏË®K©+Ò¼zËläÚ&êô½
+ÖE¶¬¢	*PÅ3gõçÌ_¦G1=¦`<Õ®|ô0\Býs5ºØÏÛOý0n7î\a¸¨P»ÿ&£6Ì®@Ä~ðÞ¯Ì
+Þ>S¾ËÑÓL¯[°Uº¬2©sè·×éy
+º×°>Ö¼½Ö¹VQ.!£zøÈ2ÙÙjC½Ç±¬<ÝX
+ÐZËda±a62êùa¡®¹úU®- 6R:ï½mgDõLq¢Úý·èÅ«Rh
+Eg¢:½¯b>x %åp8PZf³CÑooîþé	¾58¯ÈüY¤òi<ººnÌxmË®¨¶'áÒéè*pu}üïCýc¬Njð £Æú
+-&S±:Ð×à9ÅÊ¥¦®J>1lé,
+¼±ªÉ[×ç¤>ò@¼=ºÝ
+-KÚ,[]}Ü
+äÂáÔLò©­jµ½
+-
+¯ZU¾ÉN-ÄwÅ
+dÊq1|h]¥W4IR3¡tßIõNv)ìÿ	Ø"Aô}g¤aÄ¶é3AYöPp¬Õøf8-e`ö>lñWTZ®
+-N¥£x7K÷W;¶OWðjÕ0¸ºÕP¨Öôüû¡A^ý1p
+
+-^úÁí
+¤DÐß0-q/s
+«Ð%f8l4ú9
+-§¾U¸®öx PD
+ÇARÐW¨à(bÑðåïæ©OÑ+³Þs>
+B´ÎcßBuf1¢¡A¿YRÕæ6+D®%ÉRÿR!{)æOÇMëA<;å~6ÉôÅYÏî,£YÌZ¶FËõ\Ëþñ×ªQuPb^}Z0¯Í þz¾¥kf
+]Ç
+-Æ
+´ÓÀ]kg¡lÌbnjÍIsdEÎØ}ôçtëB±ø®4ÁYä¢»WñoùÀtÅ´îSPËâµÏ"¸¯(ozUzºcÛÜÖ¸ý7
+¥Ø|fÈÿ¯»ÎÛÑ
+°B ¥bËdô
+;Á
+5«y
+-jm1Ò¡¼
+·µ±ÿh\"!NröäêSöv·;Zî'ÚcÌ
+Äï_2\é¸¬5½Ò^
+-Dÿó''îE"ÛÚ1Ü6ñ3¯ü
+zÀèzåFõðÝ£\9çb¥Û¿×,
+¶þuÇ÷ë« 'öëñº²ëøÖ"|ÎDgÚ8Úç_
+bç¶u?»ÁÁ9d
+V@aP³Cê§ïx ¦
+kÌD©¡_3à¼ Â>ÌVp+
+ò]³8b]u
+-¦Æ
+-õ|÷å·cãúM}ÕLe´q÷Gú¤Hg¡ÎÈ_Åó
+Î l»¥
+ûc§Ðyã$õò½Û0­ic1Åa:(ìã!q DM_æÐ3mqJ
+-é%¢/á5\8ç*ÅæÃ_2mh`U$xeDh%ÿí´#òÄñìNç«IôÔ@'òî ÜÊ
+ç7WýÆãúN?öRè_Ä[T>Æ«p ë6§
+K"$¸þE©[Q{-QL¸KNp´¥% W*#w«
+I]íKhý ÅÛkÉ6HÏÔ#;A6§é¥"V!í¡×²8	\è{%D<D{¿"û^
+®È
+¹ùFKjÅ{&X2®×j;ß-Âjw´ªõú<ÝúhµÐ93p¤XÇÁW¦ò"£^N4Èíìp*jl¼Â
+wïØ$¥³Al	öì
+-ìÚ4¼BØæfg¸CÄ
+Mà½9~¸	ÿÉ
+e¸ »ÆaÐ19WäÍ'ÅhµéwöpA.VeLñ»àÙ!/¢l¢Óm#ÆDá
+-
+Na¾4¦}²çÝ__²ªaÎîvÈ?P¿BËÔ'"6Ú¾FèÛ°
+4øúÈ·8¼bFRe|ä }¼=Ú:¼	íãÕ.
+#ô&D Zß%*ò
+*\\6gsàã¿V¨×,¹ÙhgïVu]¶ÇÄ!Jxv«KqÛuÓ+V·ó7ËYÐ®AéÍ,­q
+]§¬{Z8¨9¹¤c+
+º|U¼-äÑ|hÌ²/=boÖä§³w!È<J.±¬CRb£GÔªÙg5mÁ5Ïæ
+ØL#ñD¯´.I½ðtÒ£vÙ8¢Sÿà¶	MìÏÊÌ
+-DÍoo´É_Ø¡÷¦W¢Ì1YQlZôEHVWó#:nLcõÏáY·L¯¥&48¡¿¬
+z
+úþãFBÁ>PâHb»:ÓÙJKWàÝÔÀ
+-«õBY]Èíp¶~}×*·ÓäÐ
+xëiK+¬Óìgþ/ä
+-IªF58 ÎVvv×~Xp»DYÅZ_h49Ê ­ò	w±ÙÀ¹0ªcÞhSx7Ô)¥s¿Ã§Yf?/-"::?Z,òúî a
+-8ÏÔJª×3¸üf÷þ¡µ
+âÏoß\Ï3Ó"`úå¿p¿
+-þ¹+ÑÌKn U¿~¬HzV}  ¡~6ðgEAeg #¸ÿRtK¡DÊo=H
+-zAnE÷­±ÜÉ´0ÎÇ¤q7d9¨Üfë9d
+AÇF³|^Qõ¥DP¢ZÌ¹¤ §Ç8v÷íÕ
+þ
+óëÈ1»æYu(å
+;e<é>Éø2qò(hÞ8cçùîdáM»ÐªØÇS®aqDú.©d2ñ4%¿ëlVÉúür`rfÅâeÙ¯|Q÷ÔúB\ç¤äË;"àêl\¢
+-+@ðgkcÿn2XñôV
+-m§®
+bó±¨Ø³ÓïüÕQ2ºóÆ½_éâMëÔw9 ÕkxÅ)½wâ
+Ô¨(rsùç<9eý¦Ç(*A{ÆõÚ2vR{Fú¡*£Ív ¿ÏÒQ¼Ê ÖiÿÜÖþ+@NË
+T5³¨d_®n&êÖªd£¾{yi©ÌÉ(×·«CWg5`cøÇÔ`P®_`bb}zâ­WtXqöºôâ±J{ëK:Bº"VÚä¥.LJëÿlbqxË¶HHïÓ.cÏjbÛ
+7D8Iy§Á>v,¤£
+ÐÜ4¥Åãr\É>¢×z¸á¦ê3Bgp¼PPðqO[(T»²¿P`V§éÕW0¢s~/dv°êY£Ú·«Æymø¢§($
+-G©öÄït?ãÛÉ	Q]Þ1vj×@Uë-ª:OËå7,c2â2÷K$UA¬c×DQ÷ò[¬tÿãà&
+Ã¨b,jIÝñõ3é/ÇÂF¼Maäé)à)±¿³Bn©ÅïÑ
+
++#ïjGóSPÅzÇÝ8º
+Å¶cØnm}Ñö_¿rg'¡Rt*­D@,Y\½¿Qþ ó¢T¶ß±+ô
+¹d5åµó¨)|àº'°cª öu:ò¶âZÀlïóDwËiÌqæ>m«ÐX
+-â7t
+¥ÙÕ.V¢$ÚÃ¶µ
+Y"§VÕKx1Öc²ÜãlGP"¶RÖÌÕ:b¯auÒÂewláv;
+DÍ
+-­¼è `¡	Çú
+ÿÈ»ÅKä¦^=f©£¶;`ltQöüTe×¢Ã 9)ÃcäFhÈ4=^Ç2Àá{*­Ç:Ç
+-ËÊ¡-Z(¸
+g¿mÍ°»6vSn
+Ó/}b9úÊI1+ejb¹FçðåWÅx%
+Ïµª6¿3Sî&Dv)¥[(TýE`ËË½rk.AÝ%°¦ð\5²_Ô
+ó¤\9^ê¼\
+
+°c2¥Z¡,S4RöW\FN²Bß¥RFP>/Éíö©V®SóÎ§ò°EûS¥ÈG¸
+{tæî¤xk¯>Âj«Ð¿¿¯NÒ½%Øü}¯`È­+AÛ¡
+Å É) Îqu.Fë(¾Æ Ê§°
+ñ^ôÓ.¡þ=nôÚ3h
+ãÆSWdïí­ÃHPäAý
+p®·ÆÐ%½Îü»¹ÆS½°|/ß@÷­N ·ÄLÁ
+ÑÆ .=h¶(ÿ:Ç;¡@û
+Àø§
+-iª#i@Uaõ
+£¯·F|ý×
+ö[Û} Ã9À<ûâ]Ïñµ
+-kz¹u¯-Ý7°­¤#¡Þ»y`Mh'¨9úBNæ{à[ÇGn½ÆÎ%hÓ6c¥N&ÿe>îÌs¢QPcW]®ª4ÄïaEÃ²Gùû3ùKWWë
+)Ìªÿµn¤n ^y®
+qUhîãþÊåa
+C¿33Ô¡]6cÂÖ}ÝÙê}Z¡jOÙ¸ç
+îDáÄ·"pê
+-2D±Þ°ãî~aÖ°ýÒi(ÅJù
+-ö§¸»Ý­ÛdaÂèÜ	æÂXÐb&¸ªwê²ò|
+-á«¨îR&\Ëçbáw@ ´¨æh7
+<¡cRÉ
+~ÓÓú©üÏ;Æ)ß3ÜÞî¤ÉÔ«¬¹<su /ª\y t¦ATikvGdß,/40­°Øia÷½r»ßéË|Q¬Ël¬n!$¿'.r½¬ÿ¦Åp§ê:v­ù½OkÚÄiv9E
+dGÆwM­ïf?Ö}¨U`Ê
+TôfÓþÞ·¢ïÆÀGJµF÷}®ï	W¿>¾äâuî­Öñ?Ï)Z6P8Éô_,º3®®8eiöaÝ1t%ãiFÖãËÌ&Æ
+Ò4ìt_g7©ôíBv
+-(Àeôø
+#ñ«6Ïê?mé¢20¾¾áS)¾é]^]¸W
+|Í¿í(
+-úüU æå\Þ¸;8@:÷	m%ÓKÎîö5ç¸7H©È1Î¶ÁÑéÐ\ùë6nÂz#LfzÝ­ÍÅûß-Ç½Ãáý ;õ´Æ°
+n¢²QÊç¯[ç±	?9ó,+*¢e{äLÊ®ªCOóðÜ§ê|NdQ+ÿlY
+CÑZwÆÜsu5«Õº!±°»òõÞ¸«Ú¶£<¨9²N~G#À1AVÒ¡kzMøà¨ÁÄÀFaêb=5*2aåÓ|¥ã¨}Ï1Õß3/
+-ªT
+¬P¨}Ñ£éâ£·»xRWa!À -F>ØS ô2Lä;Ì;èwQI"Úf»¢{"Lè´R!æjô@ûÃàÓÀµt)Å[ÜÇ
+
+Ä°ô~Ç¯!Záp÷³?g\®kwÈug
+X(¶CÚ.ûË¶0eGCr÷h_Ç.1&¢qZß$7ÈJ=,ÔLOEoÓDø@ÌY==üZH<+c×
+µR
+-XÆÓf¢	GzÚ´IÈ!ª½tÎ¹ô=à²6¾ÿÅr
+-+ae{
+²öñ¯Q³dr]E
+¥:vÈe 4 þ@Ä^J×¦óoæ
+-ÛRÂ2F»ê4«gK3á-ÃG/¢ÀÖÉEVVoó
+-ª'¥ø `£¸pd*=;JÓtýöæ
+m^SYdÿ&ûô"TÄ¶¢_@uàµ*#ùºÞ1oÖ2îYY:zPWGé,=#P Fx¼ð?ÿ6&J²,l7Qz±HÁ9|SW{È"£
+FO
+-@-6|dúip6g¬!ä ©S
+Â PÊvô(Ä@|U·Â"-­±|¸
+- Þ½.
+tp
+qê©ß&ÿàR!?Á(´à[/-m
+ý$µZZãüüþ¤§àýSD5Hº°ßÊ0Cc?³|/L8\ì|²]»#·ÒÏx,àÓùíÀ
+d=døªîSìSIÅ2É½fÀà±Óù*^]¥	ÌÔ³×W&ß±¢g'&ÒJ½¾` q$å ³?iô¶ÚÊÃAóÌÃSü)òå¦
+-iTì¦*O*XÖFµðÂA0öÔf¤Ñ¥ÚÎäÀÂÈoÇÂ·Ò¿°Wpÿè.iàÓÉº/Îáê«µýDì¥Ä 0µÂ*ËÔãøáéØØ°³bMéïõ=?M÷®Yø#wÃ²ºBãc¥
+ÝQÐDDù
+-2;ÛªÁkP%ùóþ7W·
+Qè+2xéü!-ÀI~FÃßÁµ]q
+A
+tàhL+á/BáË-yÂ9ê¶Jÿ7ä®ãÇÎ¯ça7ÛvZ¨×¹ï¢sÕ4+S»ê~[b¶Æ¶ehå
+ñ¢Mµ"Åb´RÑ+H#ÿWÝ©\#qæEâñBmöí7¥Á=TòT=KyÚQtÛeØ}`{Ê×¬ÅXÌ¢-ýï[Ù®+¼HB×w
+QV
+ÅH×EX· !¹DW¥nXãÚwsòóåÉ[Ewâ£Ífº×$W±	XëI÷ÔäÖ\ãcæ£R5§ëÌþ¢;ýv	ÚæF|
+Ýù/oÀüëba_[kxæ÷r¡;îüà77Æµ4+W
+x
+ó¢ç1Áö|K»íxOÍõ@­uC+ëÓJß"TÂ
+8}æ[}.J¿Oæ9×Íu¨P"Ðu@BBNã3¼2Ûü:ëvàT¼j±°ÆYeùò®Ëó©w:eÎQüíyk>þ³	7Ê)D¸v ý¾I
+ûÈ-%Lb¬dRæOï 	ë¹* ½ÜWÅ2 %éCÙ¾K«P_^¡Ïþ>ý¿QÑ©mâåyoãÐ(¥uMéí¹Ùex¯ñLWç Uê[¿±qc/ÌO¼nè¤¦=ßÝ7³Ô>õqHëÔÇÛµt¹ì/*q»´R¡ÐEÄó0JAþþùgSz=ÊsD(Åô¿¬\Bc	ÖøKr!ú
+øxy`<`£
+Ø2sg¿2ÅÜ~é
+-Þ%}ßï%
+¸¨ê¢>i}µVB~ïDî[u.LñxÄD~¨À×»Sg§^¹Vsöï(_kcí²L5äÍ[C~b3æ0jÊBñð¨ç~ÑÝ#
+Ó;?Ïµ´oÃÍZI×69Cf"Ä1c -îoi,³>
+-ÿr\¢évÖù«û)ªËvµä!ñH*,ër±úYÊ8K«¤íµÂ>Z?ÐU¶p
+îQD70Zæ·ï´:±Eîã¹ïëÛL![ÌPW¤çÌ{%ÿ-»$rÈpÓ
+( ¶ä÷êm»ü7wó :Øp¦T!!?Ì3Au¦oÆ9»KÉîÇ<|¹æs©É
+TOïu£(íù@êG~Ææ19*Ò%åÛUÜm¨ütà\Ø-#Wí­2:{¿
+-Ïotë!ÚÊÌRdÙA^ [(6[õ³Ðõë¯#ÐfjP_ÉõùPÐTá½Í»°¾ºÍÃÈ;Ö
+Á¤C¾8°æùÅÕUEàir°ïØk¢ðceí ÄÙ5}od­¢
+9¥V9jû9§°nd+öÑ
+¿ÅÊÒÅ~.¢uâTÊñÀJCüì¦àfélïAÏÌ< oÕ0LA~;<VÃâ¼yÔóõ`³í
+-Õ\t¦LÓDõ!È c)T{íFt¨Â°ug/
+-c'nÐãBÑ
+-Ê	Pak
+Ï¹d¿(z_`7ml'eéþÛùñ½^þY³þS±	a¶ùÒ,]l®ê¢ê¤{ö®6#ÉíÏe.óÙ]o Ë!ó¾}>óct^ñm+L¦ÆËaÆçú<ò4Ç
+°òØxITØi&
+-ÞÞÃÕÀåZ/2»ªµ)T 
+>(ðÙÍ£'Êõ­ ÓÍ
+-³½/Pø¹`:|iC;ô(êå'Â6 ^&§%·AeÆ4ÏBRêÛò,¥í£'ø£ìá¸ÉÈT
+À\¸*:vÅ&lïR
+ÖªSaóy×x~å{Ä:ÊÕ_yqÎ
+-ÅÃEtHüÝ¬±3Ê<§ü7¬TÂä
+sïÙ½ê1 
+-±y:«'³¢ã^"ÑVòÁ8+åEø.6®å-Ú	¡
+ÔõZ{i­ÔÖ¼Úq÷ÿÈÁ^ßæ{fÙ¢l÷	^Í¦¬Þ#äTó¹¬I!}
+ù?×-lÞõò6K:b)íMx@Í§SS¹,Ä3¢;ÍKt©a²£¸!
+-Âw_´
+-ÎL&ÑørÀÜìuwéqLHFg6ÞK´¢nùcøÞ0ÑÕ
+-K_GÔ±'tKþHüf~ÒoXe}µ
+UK@]xkòz¨®{>Y(s¡ÛóáÎîÔtÕÜ¬­£6ÃÁÈúD7= ÄOpÉàM»Ær«þáÓâ"´®N³ÚSKt
+½ÝÊ`Ô¶¤¸)¿|v±ÄÉvxNªo`a+Í
+Õ
+-"@S
+qáÒG1­{I¬A 97Çí
+-9}/!~N!,` ¤Ä2vÏSÝÐ%Qi<B&-S7@)/Þ÷2´ìs}5¿¶CÉ/÷^jl¹!Ó×ðêxàøl.Ôp»
+{C¨ì¬Ô&q~ª1
+÷¶tÕ2¢GÁµä
+ÀØ9ò¢À«(¼wN ï±Ãî¬è®ä
+ïì9°Ìeg
+-
+las0Äò14TÍQâ}ë 0BìK"äübI·áBß
+8'»zs.ïWÔt2Õ$Íñ¨7Ed	ßRèO9Óª#P80ç.	ãÌ¼!ø
+3héÕÐÈh°²áÄî¿.ßóRÒÒ¸5téòz-3ZÐC`5e	=Í$¹îHzàÃú4Wî÷èjö U²xà¼û¿gvóI} Bl|ïÿ? #ÜÔ[¯ÆfcËê«zB!6ÌU+Ì¨ÂÚ¬>òàý\%JTpIþ@ä
+§_N'ÝæÈ,Í
+-©V?HK CÐ<f¤SW])år\X	ÙÞL{Ì¶¨r
+Ø
+º<2³
+ý\Aß7®
+|ác·3 á
+¿6Üt®lZ\à&
+\¡«öve,}DüÑUV}VµL#ù=GUéæV»Á-=q
+ÁS´E^A(Ä3±>('!PÃû7ËÞ¸µZi^Þ¥LÞõgv¦KXsÉ nÞëÕm¼g7r¬¼L¼ô¯
+-j}7Qx+Î4§;ä*ù$d°§CÚQãKãì0FG´0,sÂG®:]kRuS*
+B+w",=ä;®]Á³ 8×'òËÃoÃà:^cP
+-aò
+#C¬;zÔT¢«hylIr
+%^bMU0SKäö\
+°+Û,~åNË9Ë:ÂñB!ÕS÷a¦µOLÌ`£¼îÂì¥psßìÅ¨
+#ñ9ÎnDÔZÆ¥RL,6¶ï[oÿõÜfpA{N^·=6Êã
+¦
+Ø«:
+T¿_Þæ×6;ÿÌÔIHÇ/ßvêú¿³7mÒoÊò
+¶3B½JÙÈ
+ß ®uaÝ5tïÕlju'\-ÁJò:ªÏ#î©û ßOOrØ³¿ja°Vj
+æÅ
+ììQÛ£^F
+ÖóÊï£Hål}¯Ä%Ùo|rà6«gôQüÐ¤jèÐM
+ aàó]­a3BÒ0ÔÍáV01ÔÉèX$náEb'ÓÆáðû°kñS4AYs/9ù{¨ùäÒ(j¢¨-÷ëôü^2Tc°Â
+Ü¯ÃªÇqV¥pÃíá
+->ßñÐlÇUl1
+ ôEªIm
+->63kWê·Ø1Ò±P(ª~mZå:ÂÝ_ÜDªHÓèG
+`Ô¾K]
+RçÆÙxfd8J±MZÇªv×iòsíø{<E*çÞèæ,¢+î	zó¶ÞðÅôrÇ8y5,8ý=!)þ_ÊÅ±Áî`þXÊB¾)2±l£Û!ØyêÂ
+-%Mè¢
+-jÛû
+*¨;ÕÛ=-'óÅy¶Êà#m /ññ:ñ!4h¦|Ä:Á>5Ý¯
+( kG7´ì|Ä¯^ÔnÌÁ}w£ë»¤8ËM*ü½¹ô<î¸µjÃ
+O	É
+-äbnm-
+-¯nÁÆ ÕÖ ¬75%8Û3_ ¶yÓæ}#¶Y$bÑùÅNê{Ù»p/)
+ÃÞe+æ/ÈëÂ´ÉÐ@T±¿³¹£©Í3å®DôU?.µyêb.½Í.hI
+wË¾ñ:F!Ý[gõ¨ÿ^{È65}ù"µÝó[þ²h(Á ÍÐ«¼ôy~âl]AÚÁ~*rúW«Vº¢EÈØ®«ûU_^ÃSfeþ÷­xt´*èhK!ûÀá®ÙW#Ø/Ù7sgV
+°s-Q0¢ÀvO!¬vW÷yQÞ¦:­c
+"#çÒò»SGq£4iU¤ÐµIß$ÎîÓÛª wTßK[b\tÉt-s
+Ð³Æ<::8¾{`üV	VLØ%]ÿýØÄ×§
+#6WNÄ°	!^U¹^¹DûiÏf¥?Ù¯@Û*Ü4«pìÍ\Í<sð§ÛiïèùQÙFÁq!²1Qg¦ólLR¸þøÜV¼Ò 
+å¥Þ0S©]bvÅªÎÒZxÂ'¿Éÿ°é#,ü×pÞÀïÐ<?UçDô#Äj¼åv¯Ó~YXHSô»Ï2Ç§0²ÃÔB½ËÛç÷«?¤ wôÂCg0}gFÐ¹ñYpy¤oÜêÙR¤ª·ù-©¸«XqÃ®mÖOm^¼7T<Um¬ÓÛ{Nj^ôó})kéMOz?egSïÒVçêú}8ÃkôÄg©¯ÎêF(Hì{JÀ3,`
+-±Àà!!Çß&Èýø1vhÖ¦ÿ
+
+¥ÔÖ&HÄb
+`
+-¹q~ùÈ"¾H
+ìL
+-
+eÅÅûDÅÜ°óæ`e¦2Öÿ¢à@3%0Xèa;²
+-
+ÃÞÂà9eiÖ-Åòí
+-Ñ5ro¨MÿÉÉ	ÚÍ%ð¦¦åèòØ@äyÛM6ÔLé+dÉÿ
+¡§ßÑxzæd)Ï_`?£­Ttã£;òLÊ²m$W{Ã`qÁZröæ
+-·ÐXXZ×YøíÉüKöMd;	e(
+-V|êºÐ¥Ý
+ysFã/¾ÁY6 =ÙjóÌCa^
+³¦ëÀÒO/ îJÿ6l	xJùÁL
+ø¤ý¾6måVóz2(¬ý1=h½c­\Ç¡Ás$ÝÇ` §ÈÿA×'Ãá²ü;Ì¾x¦GîeÉ
+æ6Ã
+D½èw£
+(¯ó/¹çº²igsÝ=j¬¯Qm7¸¶e,ô¡Å§ulaÓ|ÈÿÌr0	ÊB£]×·´»7£²9¤%åY3¦ð8Û_¶Ð_QÇL×U¤°B1á(ä­YÕÝ³¡
+-úw>IC´v¼¤BÔ[=©ÔI®SÒ7L,n{ÔO/zæ¾T Oüí¿ØêC+%¸êÐQóÓâµiöô9Ó³Õ¦VÚÐÒº­yîV7]üÚ¦c¢
+ðrâ
+ÿ=|JîäñØ§*"éKþ0_:JÎéð©PMêÅB=D1Ã[7
+N
+|.vuËþ¢$uÜgâæM$ÒÐ£¾¼ën$rKÏ;ÂÈ-M#:IkP¶ù¯2p·É£
+UVÞÏpï¥dÌÌ÷RäpÏ%áëb70æ~rsé|¢@°-eèÛFTÃ7pÈÈ7E}®7´åüR§.<Æ #¤ÈÑ2úfë{×ê
+ÁÉ`Ý
+í	.¥:,»ð­<aEÕþÛåó &u
+-Ã¬mm©H
+-à80%yïJ¬°Ã×®
+°<Ú´·(
+Cz"Â¿+µ¯XÎDËRÑÙ·ß3ååü_W
+vó2m¦nlrN°H
+-EPOy²ì(Ý
+-DBv.®æ.eti6;¾GÂS³SÏZ²Óy¢vw-	'©À,`þÂ*
+13HÑ
+-\Ò»é­àÍ¿ÌTµþàxÁ+(Ug8x\ê4Z*h¿¶Ã)¥ÇO@XÛNíî÷IÑõ©ãâ'ËNaïÅìj\.¨aÙ)KºþnÆ@WZ6áÞ?Ó!znã[!
+NëaSÉ
+µðK<ÈW÷7<ÌþEÎ;ÉÒUl­oÓÝSHÅqUáô[Õ7ÄW"]ûB o9«ÙÅGÒ_ª£Ç9<Æª  f©4¹r)
+ÅÓìmäÿÏ~>­­øV8@cÕ¥ýÊ¶+A`¬.fþÖ(©¡è3í[ò
+YÕÂ06}
+±å3§|õøJ&µ«'àòV7c?öcÏnÄÍ:õ½öð?+ßLZÙ8tß&Ç
+pUÔ6
+-`§øihâ²«Ê½Âð
+[Ì`Ù
+HÅrÂã(ËÓ¸§åï®
+-¨Hf\yÛè¡
+¬ãB^{L©mmùørÐ¦
+÷âzM\2Z;uMr#p»¿&o¨­2
+I}oIîô4`à$
+-q±)«§zWÅXµ\ØºÎ	kÑ 8JÊ¿Ùê@É´ê©Ééù¨¦¾*Ø\ëDn
+-óIÍIý$¦^#ô©D\ä
+-
+ÿTA=
+{ýì_>ýÊc;O¼ý7r,<G½é»~gHC:Ïøs3¡Ë¸QÀ/
+-W[òRÅqÂø¨KÂÙ0³<  f§)HX¼N+å	°èÌì£gYdiHT¦	[(~\äîØ
+-¾VZ^EzÂ¸ôÀnU6jx®M·õ;tú/Ô{<Í~èØñS¯ÿÛ4`V¯c
+â»
+
+¿ ^©Ã¿*oÏÀcJ{Ktyæó_í°é Gbkî:xÚÂpÝI¢{
+Ç,ÚrY]én¢kl½ïàÃ	G}
+-ÑS`âyä²Ü
+Åx6)U¹¶mõkÕGg»à/+<Lâ¾K
+³©ïæî3*óçòCÄÓ{)5Ðü!ú¡ûª¾½ª/ÈpÔXÕX<i2iáÿÓgc°Ç®Ñ»ëÁEþÙL8I>]ÁïèDªÝI
+zéÈJ-xÄkÃo¼·k«ÛýáË ú.°ªÂ$
+­(·&Wn8þ~3 .MÜ	ç­~6°zW:rÙz$ÃuÛ(¬(ÜCCu0üxëôgöÔ®]> n 
+s¡bî~´
+:,4ßYGYÐræ81ßójÙÿÎAæ%"#®ÃÖ¼Îô³@6y³°³Ó²/`
+-¦à¨Õìâ
+´â
+ØØ´æUuN¬³­Ä3ý38ÃPÆ
+°_vÌ1g{ïnÂ¢çÒTæ^2áÀuÁËl³*ýªÀ¢Ã°-fà¬xÁÛ¿FõWz±ÏhÈáH<G3.n MJ°úà ö£ë,Pc¯È³ºÀê&Ô|Q
+ý\Å·B_©Å»Y¼ ²ZHÄ
+È{¶ê¶F¼OÆ®³LÏxÓMVeTV
+ßÁ¡byjlì³g¨è$_Ù-¼ø>?%y¾ÔoÅ>µãqª}Ë¥&i/r# {Z©&.×éÕ=EL}_~ËÂd`&cÙ
+\´ñÔd	ÒÉÖ)	HÐq'?«tÈñBÁfÄè¼jöX|ÇN ú^^¥GLL%.|g-à*fª éPLÒ ÁYÖ"ÄºçL^
+-ï°×¬æºf®ó
+þzw_ý¥ïd¥?÷È(\uSÔÆÚD¢Èw  Y¢ Ñ@xÛ(8ôNÁÀF$¿'ÑF¨Q84`å=<9Q	½*öFf(4Aúð#w
+-endstream
+-endobj
+-131 0 obj
+-21844 
+-endobj
+-132 0 obj
+-<< /Type /XObject /Subtype /Image /Name /Im1 /Width 50 /Height 11 /BitsPerComponent 8 
+-/ColorSpace 148 0 R /Length 229 /Filter /LZWDecode >> 
+-stream
+-t
+{ÐKælÆQMQ¸f`%®
+@'­[ëúFY !Ò¢×$È§ÁÀêÙ
+¸Ûð%øóA
+å¤N
+-
+!Q°ÌeN§Ü½»91rF+Ð}
+XÁX§èvz¡Ñà¬nù+qWæpã®K­9	â
+
+³¡åE=]wLÎÉÅ4D+DáJ`9íÜbDÚ=
+-joÔåTÅÞ¼èU8ôî|ÃÄÃâdäIüÎ=Â·ï%ýïhDñSW2µ6
+Ø_}vºl05é
+-endstream
+-endobj
+-133 0 obj
+-<< /Type /XObject /Subtype /Image /Name /Im2 /Width 50 /Height 11 /BitsPerComponent 8 
+-/ColorSpace 146 0 R /Length 320 /Filter /LZWDecode >> 
+-stream
+-¹²â$HXÌuØ
+ q¦GæM)M3
+bq©ÖÒ¦¡ÅË\ðÙªC«>	_±Âif_×(õ)ðÃENÏÖÙ,¸ÚÑ¬UÿÅ¾¬ÝîÞì}j]:ä¶
+µ
+¯Ú
+_2§nõÛú
+
+Þ±Ä)u26|®§¶ç>Éÿ,¼iòë²>uchg ¹ÜÚ8ùpWÚ«êXW)©¹¯iSK÷¶"c[æ£ygñJÞÃÕ2Ó8ÔOÚõ 9¿ Á
+îDÓ|'ÚQ-©q¼Î5$jP«ªëÆ§Å$Daµÿü=±êíÔxsç,ÝËWX
+-Þò*å
+âõs>;ÂbþÀ4h3Ã{è]¦¸t£K¢ÂÌ·ÅËü Þ_¾çh6JÄ¼~a¹v~v
+-endstream
+-endobj
+-134 0 obj
+-<< /Type /XObject /Subtype /Image /Name /Im3 /Width 50 /Height 7 /BitsPerComponent 8 
+-/ColorSpace 144 0 R /Length 220 /Filter /LZWDecode >> 
+-stream
+-_6-$WóËHèGiem¾CBT¬¶³G¡,*gÚÊÆöâøJ"Ï¥G%UÝßñûQv%
+QÀ2&ÕûBù±¾§Ev,0LÁLUû½\óíëlì1G£aÍàfÊÌàÍ§Îöq@â"w6Ø1¸álj×JÜòKÉ¿×ð×£Q§¹î®¿*Wã
+-ã2<iëI	zÄ
+tÛI~pFèìíºú^X¶º¶{ó1%^Mî»ðý5êPaH'ú«çõ
+-øâY¸ü!v
+-endstream
+-endobj
+-135 0 obj
+-<< 
+-/Type /ExtGState 
+-/SA false 
+-/OP false 
+-/HT /Default 
+->> 
+-endobj
+-136 0 obj
+-<< 
+-/Type /ExtGState 
+-/SA true 
+-/OP false 
+-/HT /Default 
+->> 
+-endobj
+-137 0 obj
+-<< 
+-/Type /ExtGState 
+-/SA false 
+-/OP true 
+-/HT /Default 
+->> 
+-endobj
+-138 0 obj
+-<< 
+-/Type /Font 
+-/Subtype /Type1 
+-/Name /F4 
+-/Encoding 191 0 R 
+-/BaseFont /Times-Roman 
+->> 
+-endobj
+-139 0 obj
+-<< 
+-/Type /Font 
+-/Subtype /Type1 
+-/Name /F5 
+-/BaseFont /Times-Bold 
+->> 
+-endobj
+-140 0 obj
+-<< 
+-/Type /Font 
+-/Subtype /Type1 
+-/Name /F6 
+-/BaseFont /Times-Italic 
+->> 
+-endobj
+-141 0 obj
+-<< 
+-/Type /Font 
+-/Subtype /Type1 
+-/Name /F7 
+-/BaseFont /Symbol 
+->> 
+-endobj
+-142 0 obj
+-<< 
+-/Type /Font 
+-/Subtype /Type1 
+-/Name /F8 
+-/BaseFont /Helvetica 
+->> 
+-endobj
+-143 0 obj
+-<< 
+-/Type /Font 
+-/Subtype /Type1 
+-/Name /F9 
+-/BaseFont /Times-BoldItalic 
+->> 
+-endobj
+-144 0 obj
+-[ 
+-/Indexed /DeviceRGB 127 145 0 R 
+-]
+-endobj
+-145 0 obj
+-<< /Filter /ASCII85Decode /Length 409 >> 
+-stream
+-FÐtæþÃ¥ÝÔN<í ¯¹Ñe1	Ë»JõCJËx¶u¤ðSÄàúøW|¿Üæ,1¾}3zîPì`<'¢	}p+¦g,ÝÎ¹>//!iÖw¿r¯l5VoY7É°¼ø3Ç«_
+ü/NK7TÂ\X÷ÎÄsWeÁC~6w
+Àm®Ð½Ð¢ßò !Ñ×e³
+y	ó½6`PÛ?êä.)&Ayã¬
+¶ÜTfeýÄÜ;è
+-W°?ÌßÞí{rù]âµ+å×§í3ÔñR²:6cÉb%÷«ÒI­òÆF¯m÷ôK©ÔXýÎ Öx5×÷ñßÅ`»èÙ³ï*
+-zÓÛ0·x÷+C<É
+ÊIõf:~K
+aÎhªDØýÎ
+H,·d~.^7øsúäxÔ(øüø»d¬SÁEPTñO§:
+-Ót²ZOyu[ÿ6tqEä>|Z
+d
+~ò`Ð>
+-/ÈOKñùi
+-endstream
+-endobj
+-146 0 obj
+-[ 
+-/Indexed /DeviceRGB 127 147 0 R 
+-]
+-endobj
+-147 0 obj
+-<< /Filter /ASCII85Decode /Length 429 >> 
+-stream
+-¾gçSÏ·¥ËJ*ÄÝP emñ@{J¥¿"Ï²÷A_"}"æ¹ÁH4l®våzÏ
+Ö_=³%<¶,¤<{ZÁ×+âÎ#­Î1ÎÚ;ûÚ³+ÕtºûßÃM±Ð±úFõõnÑh
+-'ì'	nL9#wÇbJÁ-c©
+XÛ])ÞíPxÍ¿ä	N7
+<³C`ñêhÞ95Ý¸YD?^PÓbÞ­<fÃLï%Ê`$Õj?W¿WÅÏîãØ°0ËíÜ+<Y-àþA!ºbØ¶ì³¬îé~±åH§îôÎ¨U½ò
+ $u
+f¢|&D®
+L GIf
+MûÐðÈ ð
+ 8¯ÏrÇ­×²£rUúõ¬NÀ¨[ÄÐº@êu»î
+-ã²ziÛ(ÆÄe]kÉO
+½e&,nZmÏ«O5è$Ó4­Ôe¤à]ÒÁ5feö9¸ï·#`
+ã=Í¼âkñ¶C~I$ëRëóCB&Dã°,mhö¥®é
+fÊcRjgØÁ&¨ÅF©.
+-endstream
+-endobj
+-148 0 obj
+-[ 
+-/Indexed /DeviceRGB 127 149 0 R 
+-]
+-endobj
+-149 0 obj
+-<< /Filter /ASCII85Decode /Length 352 >> 
+-stream
+-
+ößÂ`ÇìÄvÃf^
+ÒúÚê¥ GðZ¶ôsoØÛÓü7Ýwöu#ý¼ø¯ù/[vÙÀ@&îJÀn½ÿK07hY©`1a¾4®^e Ü}W OûÈØ ö>	I¬E·r¤¿0BÁ!ÙÙá| B÷qÒLÌðnÎ|KDhý %ÚØò0§D`PvTT
+µáá}0.ZkäqZdªDÿ;4å
+ò÷>ªË´
+kXïç0÷&ïH3qÄ'VðO1tûÀT=È|)zÅ3
+-aò_û½fT{8æ<ÙAè¦^æïÖ$
+ÐN?hBôº÷Àdy°1èõûªÃÌìæX´X3r2xvÄÑ
+ ÞÜu{üÀò¡¼®#lo©'+Éï×kiÛBRô¬¯ 	e¯w»¹OF7ä
+- 
+-endstream
+-endobj
+-150 0 obj
+-<< 
+-/Type /Font 
+-/Subtype /Type1 
+-/Name /F8 
+-/FirstChar 32 
+-/LastChar 255 
+-/Widths [ 333 333 500 660 667 1000 889 278 389 389 556 660 333 333 333 278 
+-667 667 667 667 667 667 667 667 667 667 333 333 660 660 660 611 
+-740 778 778 778 778 722 667 833 833 389 667 833 667 944 833 833 
+-722 833 778 722 722 833 778 1000 778 778 722 389 278 389 660 500 
+-333 667 667 667 667 667 389 667 667 333 333 667 333 1000 667 667 
+-667 667 444 611 444 667 611 944 667 611 556 389 278 389 660 333 
+-778 778 778 722 833 833 833 667 667 667 667 667 667 667 667 667 
+-667 667 333 333 333 333 667 667 667 667 667 667 667 667 667 667 
+-667 400 667 667 667 500 850 667 800 800 950 333 333 0 1000 833 0 
+-660 0 0 667 667 0 0 0 0 0 400 400 0 1000 667 611 333 660 0 667 0 
+-0 667 667 1000 0 778 778 833 1000 1000 500 1000 500 500 278 278 
+-660 0 611 778 167 660 333 333 667 667 667 333 278 500 1000 778 722 
+-778 722 722 389 389 389 389 833 833 0 833 833 833 833 333 333 333 
+-333 333 333 333 333 333 333 333 ] 
+-/Encoding 152 0 R 
+-/BaseFont /Helvetica-Black 
+-/FontDescriptor 151 0 R 
+->> 
+-endobj
+-151 0 obj
+-<< 
+-/Type /FontDescriptor 
+-/Ascent 720 
+-/CapHeight 720 
+-/Descent -178 
+-/Flags 262176 
+-/FontBBox [ -167 -232 1007 1013 ] 
+-/FontName /Helvetica-Black 
+-/ItalicAngle 0 
+-/StemV 208 
+-/XHeight 524 
+->> 
+-endobj
+-152 0 obj
+-<< 
+-/Type /Encoding 
+-/Differences [ 39 /quotesingle 96 /grave 128 /Adieresis /Aring /Ccedilla /Eacute 
+-/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis 
+-/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis 
+-/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve 
+-/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis 
+-/dagger /degree 164 /section /bullet /paragraph /germandbls /registered 
+-/copyright /trademark /acute /dieresis /notequal /AE /Oslash /infinity 
+-/plusminus /lessequal /greaterequal /yen /mu /partialdiff /summation 
+-/product /pi /integral /ordfeminine /ordmasculine /Omega /ae /oslash 
+-/questiondown /exclamdown /logicalnot /radical /florin /approxequal 
+-/Delta /guillemotleft /guillemotright /ellipsis /blank /Agrave /Atilde 
+-/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft 
+-/quoteright /divide /lozenge /ydieresis /Ydieresis /fraction /currency 
+-/guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered 
+-/quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex 
+-/Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave 
+-/Oacute /Ocircumflex /apple /Ograve /Uacute /Ucircumflex /Ugrave 
+-246 /circumflex /tilde /macron /breve /dotaccent /ring /cedilla 
+-/hungarumlaut /ogonek /caron ] 
+->> 
+-endobj
+-153 0 obj
+-<< 
+-/Type /Font 
+-/Subtype /Type1 
+-/Name /F6 
+-/FirstChar 32 
+-/LastChar 255 
+-/Widths [ 278 333 278 556 556 889 667 222 333 333 389 660 278 333 278 278 556 
+-556 556 556 556 556 556 556 556 556 278 278 660 660 660 500 800 
+-667 667 722 722 611 556 778 722 278 500 667 556 833 722 778 611 
+-778 667 611 556 722 611 889 611 611 611 333 278 333 660 500 333 
+-556 611 556 611 556 278 611 556 222 222 500 222 833 556 556 611 
+-611 333 500 278 556 500 722 500 500 500 333 222 333 660 278 667 
+-667 722 611 722 778 722 556 556 556 556 556 556 556 556 556 556 
+-556 222 222 222 222 556 556 556 556 556 556 556 556 556 556 556 
+-400 556 556 556 500 650 500 800 800 940 333 333 0 1000 778 0 660 
+-0 0 556 556 0 0 0 0 0 334 334 0 889 556 500 333 660 0 556 0 0 556 
+-556 1000 0 667 667 778 1000 944 500 1000 389 389 222 222 660 0 500 
+-611 167 556 389 389 500 500 556 278 222 389 1000 667 611 667 611 
+-611 278 278 278 278 778 778 0 778 722 722 722 222 333 333 333 333 
+-333 333 333 333 333 333 ] 
+-/Encoding 152 0 R 
+-/BaseFont /Helvetica-Light 
+-/FontDescriptor 154 0 R 
+->> 
+-endobj
+-154 0 obj
+-<< 
+-/Type /FontDescriptor 
+-/Ascent 720 
+-/CapHeight 720 
+-/Descent -204 
+-/Flags 32 
+-/FontBBox [ -164 -212 1000 979 ] 
+-/FontName /Helvetica-Light 
+-/ItalicAngle 0 
+-/StemV 60 
+-/XHeight 518 
+->> 
+-endobj
+-155 0 obj
+-<< 
+-/Type /Pages 
+-/Kids [ 165 0 R 1 0 R 5 0 R 9 0 R 13 0 R 17 0 R 21 0 R 25 0 R 29 0 R 33 0 R 
+-] 
+-/Count 10 
+-/Parent 156 0 R 
+->> 
+-endobj
+-156 0 obj
+-<< 
+-/Type /Pages 
+-/Kids [ 155 0 R 157 0 R 158 0 R 159 0 R ] 
+-/Count 34 
+->> 
+-endobj
+-157 0 obj
+-<< 
+-/Type /Pages 
+-/Kids [ 37 0 R 41 0 R 45 0 R 49 0 R 53 0 R 57 0 R 61 0 R 65 0 R 69 0 R 73 0 R 
+-] 
+-/Count 10 
+-/Parent 156 0 R 
+->> 
+-endobj
+-158 0 obj
+-<< 
+-/Type /Pages 
+-/Kids [ 77 0 R 81 0 R 85 0 R 89 0 R 93 0 R 97 0 R 101 0 R 105 0 R 109 0 R 
+-113 0 R ] 
+-/Count 10 
+-/Parent 156 0 R 
+->> 
+-endobj
+-159 0 obj
+-<< 
+-/Type /Pages 
+-/Kids [ 117 0 R 121 0 R 125 0 R 128 0 R ] 
+-/Count 4 
+-/Parent 156 0 R 
+->> 
+-endobj
+-160 0 obj
+-<< 
+-/CreationDate (ê¥èæë¸fki\r©O)
+-/Producer (
+Ë©ó³¿¯¯2\(HñJÏt,ÅrÄ
+rHÛ;|¯H)
+-/Title (ûÕñ³î'>=UôC\\þcoÃ
++q]èzÁ6j©O²I/)
+-/Author (ûÕ)
+-/ModDate (ê¥èæë¸fkk«H)
+->> 
+-endobj
+-xref
+-0 161 
+-0000000000 65535 f
+-0000017920 00000 n
+-0000018072 00000 n
+-0000018200 00000 n
+-0000022121 00000 n
+-0000022142 00000 n
+-0000022294 00000 n
+-0000022410 00000 n
+-0000023022 00000 n
+-0000023042 00000 n
+-0000023196 00000 n
+-0000023239 00000 n
+-0000023325 00000 n
+-0000023344 00000 n
+-0000023499 00000 n
+-0000023652 00000 n
+-0000026327 00000 n
+-0000026349 00000 n
+-0000026504 00000 n
+-0000026645 00000 n
+-0000029892 00000 n
+-0000029914 00000 n
+-0000030069 00000 n
+-0000030222 00000 n
+-0000032264 00000 n
+-0000032286 00000 n
+-0000032441 00000 n
+-0000032558 00000 n
+-0000034373 00000 n
+-0000034395 00000 n
+-0000034550 00000 n
+-0000034679 00000 n
+-0000037518 00000 n
+-0000037540 00000 n
+-0000037695 00000 n
+-0000037824 00000 n
+-0000039257 00000 n
+-0000039279 00000 n
+-0000039434 00000 n
+-0000039551 00000 n
+-0000041676 00000 n
+-0000041698 00000 n
+-0000041853 00000 n
+-0000041970 00000 n
+-0000044328 00000 n
+-0000044350 00000 n
+-0000044505 00000 n
+-0000044634 00000 n
+-0000046792 00000 n
+-0000046814 00000 n
+-0000046969 00000 n
+-0000047122 00000 n
+-0000049400 00000 n
+-0000049422 00000 n
+-0000049577 00000 n
+-0000049694 00000 n
+-0000051095 00000 n
+-0000051117 00000 n
+-0000051272 00000 n
+-0000051389 00000 n
+-0000053565 00000 n
+-0000053587 00000 n
+-0000053742 00000 n
+-0000053871 00000 n
+-0000056250 00000 n
+-0000056272 00000 n
+-0000056427 00000 n
+-0000056532 00000 n
+-0000057994 00000 n
+-0000058016 00000 n
+-0000058171 00000 n
+-0000058312 00000 n
+-0000060416 00000 n
+-0000060438 00000 n
+-0000060593 00000 n
+-0000060710 00000 n
+-0000062369 00000 n
+-0000062391 00000 n
+-0000062546 00000 n
+-0000062651 00000 n
+-0000064541 00000 n
+-0000064563 00000 n
+-0000064718 00000 n
+-0000064835 00000 n
+-0000067029 00000 n
+-0000067051 00000 n
+-0000067206 00000 n
+-0000067311 00000 n
+-0000068946 00000 n
+-0000068968 00000 n
+-0000069123 00000 n
+-0000069252 00000 n
+-0000071690 00000 n
+-0000071712 00000 n
+-0000071867 00000 n
+-0000071996 00000 n
+-0000074352 00000 n
+-0000074374 00000 n
+-0000074529 00000 n
+-0000074634 00000 n
+-0000076507 00000 n
+-0000076530 00000 n
+-0000076688 00000 n
+-0000076818 00000 n
+-0000079276 00000 n
+-0000079299 00000 n
+-0000079457 00000 n
+-0000079587 00000 n
+-0000081602 00000 n
+-0000081625 00000 n
+-0000081783 00000 n
+-0000081913 00000 n
+-0000083291 00000 n
+-0000083314 00000 n
+-0000083472 00000 n
+-0000083626 00000 n
+-0000086296 00000 n
+-0000086319 00000 n
+-0000086477 00000 n
+-0000086607 00000 n
+-0000089637 00000 n
+-0000089660 00000 n
+-0000089818 00000 n
+-0000089948 00000 n
+-0000092167 00000 n
+-0000092190 00000 n
+-0000092348 00000 n
+-0000092392 00000 n
+-0000092477 00000 n
+-0000092635 00000 n
+-0000092911 00000 n
+-0000114835 00000 n
+-0000114859 00000 n
+-0000115266 00000 n
+-0000115764 00000 n
+-0000116161 00000 n
+-0000116240 00000 n
+-0000116318 00000 n
+-0000116396 00000 n
+-0000116505 00000 n
+-0000116594 00000 n
+-0000116685 00000 n
+-0000116770 00000 n
+-0000116858 00000 n
+-0000116953 00000 n
+-0000117008 00000 n
+-0000117495 00000 n
+-0000117550 00000 n
+-0000118057 00000 n
+-0000118112 00000 n
+-0000118542 00000 n
+-0000119610 00000 n
+-0000119822 00000 n
+-0000121160 00000 n
+-0000122223 00000 n
+-0000122429 00000 n
+-0000122576 00000 n
+-0000122669 00000 n
+-0000122818 00000 n
+-0000122971 00000 n
+-0000123080 00000 n
+-trailer
+-<<
+-/Size 161
+-/ID[<40c30521639addb075fa03038cf6b7a5><40c30521639addb075fa03038cf6b7a5>]
+->>
+-startxref
+-173
+-%%EOF
+Index: ../trunk-jpl/externalpackages/shapelib/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/shapelib/install.sh	(revision 13947)
++++ ../trunk-jpl/externalpackages/shapelib/install.sh	(revision 13948)
+@@ -9,7 +9,8 @@
+ 
+ #Download from ISSM server
+ $ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/shapelib-1.2.10.tar.gz' 'shapelib-1.2.10.tar.gz'
+-$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/shape_eg_data.zip' 'shape_eg_data.zip'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/shape_eg_data.zip'  'shape_eg_data.zip'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/docs/shapefile.pdf' 'shapefile.pdf'
+ 
+ # Untar 
+ tar -xvzf shapelib-1.2.10.tar.gz
+Index: ../trunk-jpl/externalpackages/chaco/chaco_guide.pdf
+===================================================================
+--- ../trunk-jpl/externalpackages/chaco/chaco_guide.pdf	(revision 13947)
++++ ../trunk-jpl/externalpackages/chaco/chaco_guide.pdf	(revision 13948)
+@@ -1,7336 +0,0 @@
+-%PDF-1.4
+-%Çì¢
+-5 0 obj
+-<</Length 6 0 R/Filter /FlateDecode>>
+-stream
+-xXËnÜ6-ÐÐ®À#õB7ã q3in
+3ÃF±(95üó½|sd7hØ$÷uÎ¹º
+-ã%a,þº
+âðøÙ·A¥â|à_×]x±	Î¯Q
+
+nvÖ(L,JÊ°«(/ÃM¬>½xYeIñóÍ_*«¨Äðò¦	VO#ÛÎzñpÄqãeÂ!xãfõ¹oYÇ&Ú<_£4ãÕ5m)áôù7*Pæz³d¢ûa¼eqdl|~ùãLíÄQGe)}´$Q\ª÷oVÊV.l½Û{¸ÎÄ5ªªL=¿Æ©
+-|ÇQEa,·Ü
+¨Ø1MD
+Ú±©qbvÓñG.ïæ¶½úef\¾.Ó(Æ§¿ÉÜI÷Õ«tä:i8s98Ä­Ú¬QÍpU:©ã\SäkÚ7#«el
+|Gíõ
+«ýÏ¯óÜnH¿Ö8JåV«ïQ
+ÚHßÈ
+ÖõÕõ°ãÂ6
+'i7¸h³oi«×N±ØÀ¾"Î2Q©ç`Fd)J
+Õ{" FZû[b<F2
+-#£\ú³d%.ý7«ív¾é?g°%ïß)Æ(*÷eÊì!¤ëP"ç RÛ«[@?©§'")mR	.I`äxÐÁ cëHÆxX¿ÏòÌùÁ$´P*`©îÈ\ $vT7vsßö
+¾L
+ÉÓ¨0H8Ã¶¥[!ê¯mÈ¥È_GtRuòÍò)	v&ö¬^Þ«üPáÖNôïGË<l*Ú5Nb¿fÍ k[Ï"LQ+à÷R¼­ÁÑP^h*$d±#ò¤¸
+-*b­jr$[ÖB¨ô!G@úi%ÆÆp´ÈPT6RÔa§àPe
+F-µÄÝS¬÷Óv¦"µ-&©ñ»IÝ
+-Ô×å¢Ñ-þêe¾H0ÙxWdOue|Ù
+D³}O­11
+-P®1jÙ
+>($¤
+-´ÔåRD¸üFªÄÉ*i[åYð/³FyK(º3Òz9¾Æb}ªóloã±e51ù`Qu
+Y´qz§Óa!
+ iu>±ØÕë
+ï.pÕÂ8m<yê¨T¤7µÊÌ;Héx´Ù«6¶"BMRÊ´dy´¯,DÙþ [Aö­©©°§j"Ñ
+«mqÅ«÷`}ÝÎòzfÕI½ÇÐpi­sKÇ¤XÞ¡ÿJÇ
+Ü%ýÃ[ÖëQÃw[P[ìTKl&ævb­âJî¢µ´y¦"É\¾#Sq+Ò4ÚÜ4+éPÈM/"&:Ö
+[:êlÀH<u,Í&&.É#(²ÕñWÙ^8,
+-X¯ÃL¶P±c
+@~
+Ôv©7ù
+\zX )UmE6MVU ¹cÒÌ|$
+ì	''BsXjÙÞ6ØÔ¥AaÚ&
+HÑt¨|ùáLçÈÑp
+5`<h?õ+y"1
+ý©Ô<>2ZSnàCì}Jô{,9§­
+èFOP¨¦yQkÙÐ+"¥÷þUoÍjTZ"ê
+N¹£oÀÜÜ×§s@.2ãé,¸æäâIèZ½äqÚÂÁÒlO{ÑÝÎ[4
+y{ J	  %öbÁÌ¥B^p=Úå-NØtè´Æ¡4³Ø#9£¶j9*_µ¥¢ßûÙYI¼Ó~<­'¢yëK0q*psÉ
+
+<3çê ÍAoÿ|6Fº£#í ñi-Fj@@jlCU}!ñq,ÂÌ$r?4ÒÇ*¯þOú<yÐÁ*$'qNRìn¤å4ÿUd,<IiÕ-àÂH9×¾»å(4²ao¥÷|Ýq=N}­û34±l1s)+uÀÎ±b5'©Íì¨*=õfÊûå8hÆéT&ÒÃÜ@úÇx
+-S¿F²B¶%ÜÈã°.8dÓjnªYá1 à°#µ<^%êã<óÌ
+0ÆtdâfÕåÙg#6ÛöG§	È½ÅL¢cï N]±i©nÂºÑiKÅûô÷µ¥ãÌJ@H8«[
+Æë+YÃ¶écµÃDRTr:+´|Þï)7&¹:¸¹Á¨éþ¢Þ^)9°µÖ
+'jäº¯6ÁÇà6ê
+\EEED¨ªÄ7£«àüê]83
+-ÎQpþZüºøðþ\]ß¯®ÂÿåhxËoJTM}pîÜGû
+øÜ$($Jv)ÔIm¡ÖøqEÐ²­³lV¸%k
+qùý Úk±L=Dhf[²écïûUâ#¾<X-
+Nþ§¿øi[ù½ä	âUþ-õ¢\Dâ,öÇày\óÓendstream
+-endobj
+-6 0 obj
+-1891
+-endobj
+-137 0 obj
+-<</Length 138 0 R/Filter /FlateDecode>>
+-stream
+-xí[IsÛ6¾kò#tTfÜzK;iÇM2nuzÐôÀÐ°ÄLRN:þó@l$ÈÈKåÀâIÁ£!ïÃ{ß[p=w
+àÍ]ú#
+ÒbæÎ!×³ëYä@ú	ôç´ÿ¸½úûä=4_^Í yìÎC7vh¾,f
+ðrù÷
+Og_^ÎË
+-¦C^è|äz¥lñÏìwãE|àN(æÀuU%
+(rb1¢#¯>P.ê
+Èñ9ðé×£ï ­È
+HÌ~Á¦ï^óßdø
+®O}'öÇêwøÿ¡årÛÖs\ëí@S"A 5¦ 
+-Î­ÖOmY¹¦ßw?5«EKNÖ\×]¤y¢øå_Ë_0ö]5ÝImV®ç©a0[-ÎË¦MòêÎønàÀo°m
+-9®õÞ`È ØÇª xò)ªÏí`®a°5ÛVÌK#G°æ#6å~\¬uµØI«]Ëf®¢
+WUmºx©/cåÖÛ' Tü
+T4æ]Þy±ÍqÁh#BN  À`àxÊ&-¥
+g u¦8Ê¼±O!tâGî¹m:8®õNb*2?ÁS¿ÑF)ÜzÔmFÑÃU0P/>Ë
+-³OnÛz¡áÏË-qR`%å%3\>Rþø0úNdÕVØ'·m=ZØIµÌ¡ã¢9qô
+MêÙsæDÅ'Zfï1÷¹K7¥(DÐûbQi8n¤M
+-S3
+)w=°°ÏIòuUgí¦h¨©0·À5¾49NÀÆ Ô!ô2£¬A­þéü¸ÝÈ8f'gÉ6-ÅÊ1cßS êPBûvùDqÌJLàä2
+Ñ1È£Ø?)Îâõ
+
+-h`
+-hfåãC§mÍÀ¦hÄè Ó;)Çõ<9ÌlÉOÒ U Ô''#W·Õgk\
+-Ô5U~ÓùòXÅ2x$B¦Y[öÉ.ØCFË[\Ùz·ï²ÒDRºeñ
+Ø'·m=ÂHâÌH¸¼ßåmcVkE	ß¾}gBúªúû,¶È>¹më9NÜ{A?îeþTN__^2FhÙ²^íÊ´d,×«ÿ0L¡Ê
+ÐXNåa@cÑé87lðõé3<Õþçëy8ngÑH|KB­- ×EVªØv[WÛdÈÜpÕ±XÑ*bV7;ÆT­ëÄSôV.ív
+¿a¼7nºF!#
+Ö)Vþ··T3ùHq#Ãb¤Ï4ª¥:Ét'U	ªª^áæ§÷+ü;×L
+ª.Ã	#æ>ôÃÆóP?^ðr¼I¢¿}Ã(_Kì[
+-îíÝ
+ÏÃyÖ8iÆÑ!AÏ
+î
+-vNõ°ý`µl^¸Fçã=	
+b²Ið¦DäÃXEl4µIÌÿzÝ
+-³Ûß[CÒ`ÜÓ nn;«i6C©mòM§PÂÙ	IÅ]ª´Ö}K]Õce?¦dõtô&7B{	²Åì
+µUýW Þ#ò%k7B{økÖ´ú¤Á
+-yÐyÖ»lüQ¨Øñ±ÄD¿ÒÉçPtÅP
+ù*¢SEvö^Uu´]uÒEªê}£:)Ñê-ç?3î%¿aut~Keï×u²ÝtNCëÙÍäWÊn½ÈÇl¼Væ:ÔØ' Ê½¦o|wEìÚ­êK¶{+½c2Ó»P¦F
+V4,<¯=·OþPô
+HØøf
+yW$$\îf¬x$!ÂOvá<S¬tÒþ|ïvÚVÆ°¢Ù³Øx!³uÒÊj£¯e!îs×$8píÈ6
+×z§çMÎ¨?^(ÒTÇ¿FºkpðöãÒ¡}òGanOhÀ
+-F@ÏfþÑàú¶ÙäS®§ñ·ÇîÞóÏ½r:àÿÁHýç
+Í¾0i´»ô
+-T¢ulæKÝ[Å?¡î¿A¸õ4 aIÕß°
+:©(rOÛJ¦þÒ$Ow¹¸×²_É`èdDé­ÁH'à¡KõþøÈU%
+Íx]xo«²ç
+¾GÇ6Å
+J±IÇÀL:}S«rF
+-À½«µm7Oè`R8r&«5J·úÁ÷ÅÁg¥U1{Ñ­Ed­g
+-zZÄGPËÀÈvub¤ {ï^Î
+-îØ&Ø{Ñð(X-®õKTÛ®`a=}}Rö£
+-§=¼Ä·x]wwÐ#yiµØd-qæ»Z¿ô
+-÷öÛöù¸Ö;4
+hÕâ}Ö¤8ÏW»F«G~(Ð¼Å~\oüQ@!b=àæð	JÈ¿ô-ærÞ,g¿ÂÉ]Bendstream
+-endobj
+-138 0 obj
+-1875
+-endobj
+-178 0 obj
+-<</Length 179 0 R/Filter /FlateDecode>>
+-stream
+-xíVËÓ0ÝG|Dí¢Æo',H @ÑlF,Bê¦AMÜIS¡ù{®8	I² iTÉ¹ûÆçøø>bûøAV8|ÿ<x"ÄìÏ9Æã¬
+_'ÁËÏDA"åa²
+slHH°B
+-ÇHFaR+âuò- EÄ$Û`õÑ
+-pï÷«´NKÝèú´Þ1^5û´YIÞ*Fwi©l"QöMm$mÒV=çyQåm¦_Íã¹±P2Ôækæ
+Å´yeÝq»
+£w&öÿnüßö?
+ÿ3¢)Íuo8a["ì<Ö.ÁlïWï
+-àáà(vãdg»Q}®
+f òh7E©ç Q Í¿´§Ëó_ËÕºcÑ»7yðKîTw>
+ÏºIË0s°?7û43Îè&h»ÚÖöçÒ4{];£&=Ö&.
+õÄ ]NÝW
+-eE³²öik7ðË*sctPª;kw`oÑª{"Wû0g{	§ ÛÙ\UL
+ñ¶Â2½m
+³ÝÖ«¬
+ÓCáL@Iëq~F`!õLêEû¯<-¯z!
+QÎtøþÞ
+mµuòÊcD½»
+dú®»wG"m¦¼¢-l#Ñülª1#íãªW_è¤§KQÙ~iÂ
+	råk:*õ÷õÎÔeÚ.ôY|X|»¸<ÿµ¨ÓË}2EýmÛ:c$d¸®wi¦Û8 ÅXDÚû·£BÖK¾$rtþ8-ÏÿG¼÷¸¡
+- (GmWåå6	>ÁóÇW
+endstream
+-endobj
+-179 0 obj
+-640
+-endobj
+-184 0 obj
+-<</Length 185 0 R/Filter /FlateDecode>>
+-stream
+-x¥ZÛÛÆÍ3ãÊ7ðÍÜ*Âä£e9É¦b9¶×å$T
+fÁYr,Xá²ûç3îÆ+¹ÊrI&¹u÷9§{ðqGIºÍþCu^ÄË¿é¿ÇÅÇÅ6ÊÌûÿ\on¯ØúÁ4_ÞÜ-ûÃ:Y&IËM¼Êíòæ¼X%ÑÕÍ/d¥[Ýãæ°XÝ¤iJ·où8ªÊ6åÐðÁ>F
+LCIße×«¶±C¿þ!Ùà:òÌÌëú\ßÁ(»Zí(ð¥
+¿ììB2û°k¬ÕljÛgm}±e»ì¢ï2d'¿ìí`zW~M
+[/|G»Ë"ýX'ÑTn
+-yo_Xe]Û³Ù8ÆNCØ6T?9Ã»Ñ=¸ÎÓÒl0)LgýË~uh¯ÖI
+Ç«j<Ëæê7ÿXäíp0Ñ>ö«[è.ïZ}d¦{VDNÕî¹
+-ßÒ¢½jÎxÌ²$ò»ùú$ª¬kÖá{Ø¬ó(³;Y%3°¿;ßÍW7î-,Ï¯ÄXÎ.®¿bM15
+-'ßTúSº½ªz;C
+ÓvÑëÐÏÇ/àxÉ
+x
+ýVÛ¸ªÛÆ»ÜXËv=·c
+
+ÝÁ ~éûðmÇÁÙ3#ó;q²Cè`¶{mC5è»9n@4Î3p8@"û|º÷^Ô)©Ýþ ¿æû£Nv;²ÕïÇAG¹µ2òmèç
+QjÇÚ®"Û`ü3·µ£¯s
+è[vT²iÇ£ÝhÐX3GAuØþ÷YôØêC 
+_ä/Ä9`.äÐ6_ÚYX¼è,vy<	÷TÌ;°
+H=~¨?eµ/ÇÛK~òÊ9
+-
+ðç6pßµ·â¶¶½ÖÙÎ>H§ßHyP¹¢`­¡Á¬6Òàsr8Á¹åyà¤9
+
+Ñ0ÊlQCÿÒÈÐyì<	{*mâý
+-0i+<<]@,ôýUxN«Ä^½tk	°Èµhlpýg}8¸ÞF¶3D~øC[Èp
+8åö(?L,
+CÀ>tl9U«t4ÄÄahÕÿc6Dã¹VÔ}
+@Ipr<'\.p¬F¯ÎÊ¹çes×Ã¦©Qq<4*j4VZO£Ào4AXd§¸Óì{ïh®?bòM}Òæ¿5*Ñ@DãìHì-ìç¤,Ø,ÏvdGä)	E
+-*
+-åvvèhË^ïk ¡£D¯ïÊ	ôNÕz>kìG½P=¨[é#p9nOG
+xÉ¬¾B%Ú:ÝÿØ ?§´®ÛZ)iû;#P¨'Ü[Ãê
+sä8Äóîq.´:Ñ¹Ï"Dg	`cç)É
+*Ç^
+âcçÄQùR//f³÷ñøJ/¨0
+>	+MW°Üü¬c~îÛ³ô½ÔÝwÔ}ï?ëq{3¦f³B^¸¡)qÙ¯
+
+ÙÈì,´§q2öOÊy÷Tx§ä*\yS¸3¬ØÛ­­ÔL
+¨m¿Nýà?+l=öT2}ñì
+×T¤þ¬
+8¤"<Ä?@/ApÿÊO­ð'ç!i¿¢
+ä?¬
+*ëÕèÁ¯+üÃZöº5ðd¾5
+À\ÂÉT,`
+-Áá ò
+ÔÖmbæ´Ø%E\£c4í (
+"¦^D-Eç;Ü*ïé 
+Ð%ºSÕÅÄã.IÜß×ª¨x¶¤Èöîä¼ØÖJË½»¶®Û©¸Úë}ÒÉ]ÈI7,ìÔÑÌu×®Ë>LGåQ ë¾{4ì
+|¼P= ¥´úyh"wxÂK4-f²Ìðñå
+ÂE§z	
+EzprS¦¯
+¬úcP_ø	p½äf5[2þgÅ
+-³DSºnÚï!ÞªF
+ô
+ULÓ§º}Ê
+-ó°%ùùY
+³b5WBÓÍ5þèJF
+-.a4²×ÑWº%@øÙV)ç
+ÏµÍqG'
+vä¸í]À0NK81Ê²ÌëÆs6=Qo?ãè¿ÊÍNVc×¹`Ê 
+-Ñ8îY³ÿhÓ/ßÜú0ÍMáðE5P4 ÃÞâÖ9Þ`ÌLN
+-Ï
+-Ðkx¸iæüÈ ÎRô#<¼A`>0ÎAõ¿´n°,c
+-ÛA
+ÝìÁýÊsBÛ÷JG¶ãÐún|ñ%®
+Õáf¢J@¤£®Ò{}ú®aýÐ3å£¯$Q¿iùÍb2I«
+-%5GÙyõQép:#!yUïÜÆ~©¼Kv!
+[¬TWÄ¼µã£e-\8àÄvÞ
+X²:?ÓÜìrImCþ8
+SdÆ
+-,é4aÚ`pà»
+£PíÓîø³	³:õä
+ôNTË~µ$Ó;»'	çÂkvÊñ+ÇcÌYBÊÿnlâì ©ÀRÒÞ^ü*OüW²
+-!
+Ê±Kj5Ò£-oÂZtGÿÆ«µ
+-³Û¢f
+-Æ÷Ø£Ù	ýhÒÌÑcízµãÇÔk®¡'Í{ ¶+¬íÎnª×oºV
+jÌ
+z
+U|°{7M4Â«/Ë[_C%g1µ2:ê½ª
+íc&+7/i¸uQJ}¨úWÕõèOî¼ðç¶RÖ5)»@ °tåª¬¶AùoÌü6ðÑ MÔEúú[:í.å»snÂ½þ^o[TP^ÀOî4S®ymÙqäÀãOêÇþX·È«oU_}u¦ýfRG"æEýÞß Qnp¡B%[1/,Ì¥ P¡=¡ÀbGö/¡kë0÷7¤
+ZÐ\u\(·cý!¬:]:,¯SÑðs÷EHô¡ÿ¨Q¡9¼iö]|6Ý¼PóÖ¾H¥MexË²ÊÇ°É¸ba5­AÖµ::@ÎX
+¸ÞYGs0ÈêÈLbëDUD¥wð¿éd'ÂXXRRf
+ìS'ö
+¼ë èü^>Uã>¨¼ÏL0]·G£b~?[LÖ<æxrÿ(AºÓdÆôVúÔµW-Ä9ó{ª	:ÍJ¦:r!¢©êb¨¾
+-á}À	ÐðB	ÖÞæ¦:­&v|W¹3KÅOjH¡
+
+K~!
+üí%­ÀJ6BX.h´f¨±²ãîÉ¶1ÈÏÕÞ	ö!Á9¯%¤ëOEú{írÈKºüd¸6ï¯ 	Òù¦ÍÝà /¢Àª
+
+-0öHÃDþÕÐY%»\aáÐjË=&µFvMÊnÐt¶ûô§òUcEuÎòmD:¨1ñPGÌÌÝ
+/5©¨Õ"ÓÏ\©õF^@e®´
+d±óIKæ¾Âh3¤v%îÅ­ªÝ]Îó6Xå
+ËvGfgS>Ä|ÇWB©Ì2¢mU¢¢µ×Èþæóò.ãÂÎ
+¢¹o=sÃàç2ëwd9^|ýb;é/
+-çÚïí»¯PÑ:ï´·È31«ÙÃÎé"ùÆV¼Ò âµ_}w;ÕL+}]­!ýL'%ë¼
+$o¦tÂ×dðð	©!\ÕBë`Ï:
+²qäÒGUÉÆ³M.ïºöìúQÂ:ì;k)uØ4KàD­Jy^Û0iãy®'V};vðNÉ.-f¼ÅXÂ§û^:WÕq;î§d¯ºÅ['$e+|"fPbôÖÍ©Q@®¸ Á¶ôF+ÚÄyépï¯¹P+Aðì/jù a¼&¦ºUÄd×ÈÁ¿õ@lv}ç;º
+-
+©väU¡éèyÎrd­mxu ºe~^L
+-V?;aFgz\ùêR&>ìê
+]¸÷Kà²<¸P«wÔW¹<þÊnu(ñ´Æ%ùµ:ª gØ¯$HÛ\¬jCeâS
+fªöÈcgdLùòÛN¢
+ìK VÆñ²|å¯~ÐrÈ¿Q4yÇÇG*Iþj±})«OØ
+¹[|Fs§:6.fó-<ÌÏ. 1ÂºÑ¬ç÷ó(ÛzwýïNVý³vhßJq|cÉ8¥
+-QN.SÆæ
+rl5Âäýè
+)j@j
+;DV
+üãS5³X#îâeÐó
+¿fLã
+½%º
+-x&êOÂ½ÁùÿF?A"6ùifÛ]
+»¨1EPðÏ7çp/L<óí¢ò¶7t t*'T£
+Ên¨¾¹Y|¿ø¸ÔXµ´¯ÅæË
+-]¶L²RË^óíëÅëëoC7ÊÅëÉâõßÍ?oþõµþßõÛåß\/¿ÿ
+oá¦Ivá5ÜØ^5%
+
+-û
+.#!sX?³hÆgþ3 ÏK.ÜÚ¦Ez·µ0ÛÁ
+-dþµ¿
+-Î6Á[]KNÜE{
+dØ½Î³üg;¼Ë§AëåDønbeÛó«FôâWå»w£jPÂÐÚª§;õ=
+JàÅ6óV¡9iû6ùA ð;«ÙûÖß@÷1½§½þã·òIéÀ_|ã
+-qL \8Á,|üà?-ùÏ_½qæ±Øô(8LÐ_êPê¾ÒÁBéÖV>AòAÛÐ@Ð±5÷í½fÁ\>KllQ¸±òÁN)½:èlº2ù1nÒËzçWæðÊ}ßi¨t²|¸Â-½?V
+-nÐþ9"À÷ÿäpbendstream
+-endobj
+-185 0 obj
+-3706
+-endobj
+-236 0 obj
+-<</Length 237 0 R/Filter /FlateDecode>>
+-stream
+-x½ZÛrÛFÝgk÷X~1]+A\¼I¶*Q*N|Q*»¡·*8¤°&ËÊþüÎôÌt7 RqR»vÊ1
+æÒÓ}ú
+ü:÷=Ì}ý»(ö3þµú»ý:[z¡þøu±_\ÏÎÞT½DóëÍLÀS1BxÉ<õ3/YÎ¯÷³ÕâúVVÏOEâûþB~EßIõ3Ö?»[élêÝ®~þ¯ëogBDºS~½VoßÕÖµ)êý>¯ÖíWÐîìmàg8SÆÞ2¾·\êW}¿E½Ï¯ÿ=c/²].^ÜæEíµ·¹}öAãý¬o¥-í-ïÇõ­Sdºs53×y¥&s×È¶ÕÏT¯vÔ}OO$®³}ÅÚæú~q»¯×úQxkü÷Oã¹
+·éV>LØÛÛ£=Àý
+õdÔÄÒÄý¼mû=3}w«~´`÷eæ®G3áfòì¶÷v[W^U
+L]Û{ÝvÖQÍw»çÐ<È
+u#%^è:Ø±c{xpVÆÀó|8 1VµÜÉNÒÍã5y²­kðþ=ÏûY9ÆSh
+-puÜÎÕB¹è¡¸»¬sûHh·pnÏCdêí¡ {{yþòÕådG#ß¶×aYµ]Ó]YW-R»+íÕ%4i¦ð¤é«aØÚöêJ_¬¥gì!202ùáO`yáùÑÄ1ûÀ>	ï2C6¥\¦
+
+ìóÐCcIc,FS,½dülåÜj&Ð±{pV¸³k¬.¿ÙÉÛxo¶Ð@Ð_¥µþB@ÍF»Ú
+ïQë8D;¯8²m¢cvµhû¢PÀµéw°D¹®
+qû¼Ð4öj¡P@¢×Üôå®Ãð~2`8¾ë«ÿ®úÝ×Wß¼6Ó
+Øs«Wxýòò
+!¶hà!Ð5ùû
+ 5	¹<?	Îöjã&cÀG¤
+9øF!Ä¹vÞÈ}«QS¹ ÎaËT±»sþý»+hjÐ6÷ÚN­$o`1±OyÃzEs
+k½áÕÄÙ·à·
+ZY{[÷;|±ê»QÄçÑ4²èv`Ê(¤å[F£ýp¿ËÎZìFyÍòçº¶@ïn<©¤Ý^\x]Úì
+9àÃ,¶J
+-Õ¸S¶gâÖØuÃ
+-³áÓÎZàJpyH{É5hîÉp9äFØí8±Z§
+-j².ÿZô»®0ÇÓ0óuH0<ØÊ®¤pOHG(1 2
+c­è}p
+0^V#§³èÆI%ïÉº{Á@Ü SèSÐ·ýv+[ð¬rË¢-+`@Üä;åm[j(cI[÷Ma,Êè¢ÞX5$ °{ ÖÉÞ¾²A	"¨àãôêß&+X\
+ÍS8¥¾5Óä$iºz³xÝ,$#
+Û
+g$v¹øp-ÖÒRVkivgÑ¡õ.oò½Ê¨MK¾w&³%&
+-
+²..Oos¾¼Ò S$_jjj&ã	< µ·]Ø"·Êâ¾°/·Ò½òÑX bËÈw=$?h¬f[=ëÜ¯µÔs:a=Uµñý
+-~p'ÒÇv
+-§z
+¹£
+FQväýûqÓw®2RëB®ûº±×5^m#çö-í>ò îmý'0ï
+òeÀ)i²ø
+7)$nÁLzPFZð4´ñ
+¸TÓ¸k
+--|ÍáÐ¥ÒxÇácô
+-ÖÚÔ7}ÛUZÚ÷µw"sDDÒÖîQW[^
+o°0 §sþß©Þ5eN¾`\8Ë\xS7ä°Ä®áê£Ìh
+-ßÈ
+JÎú®Üð¬VÍº¼½ý:}S5æQÅ^ÍÃDe¸@W!.®fgW¯æJªÈÙÙOs1;ûFÿïâõ
+õÏÕËù_fWó7²H
+DÍHÔ?×ûYsëO=
+8ñ è¡Ñ¢e
+-,
+
+iVÅ¿¼ø¯=pkÚ"½öØþÇkÌÅ->HR=©Hµ¯ùúÝÕw?|?M7	Ò)§. *
+ùãNp§xbÙ*
+yrÀ()Åú1©b_Ð$Q
+däÕù?&æÜa0ïòfY×ý©­
+-IIéþfç8Ë h$Ë÷Ýý# Ô1
+
+Ûg
+{¸j·çß¿<ìnæÊ¶0¿»eNG¾±Ä1Ó´4íhP##·uÈR%»7Ùõ¦
+Ð1q{>bèÊ0ØÍÉÕCÛÉ½$
+-ÁFíG½·º+Õh~?ªa­Ô<ll°X&+ÅÙ:
+ÍãÂÆ/zgµÖ?AËùÊb"TÎúïãCmÀ¨ð!ë¶c?tfòO@På9KéÒ¡T,QÑÄS\æ>¼
+-"â«{@F£6 -!_ðÐi,^^^üøõat
+-"Hº/Aa¦L5·3ôâÃ3ý/:³(zÚëó·ç¯Þ
+âµDBÞ7ùIl¦Ä(X[ôTJoPC,«© !	
+OcL¼Ì; ÇÂ¡^vó&È®­£óòpWòyÛß4µâ>¶Ö­	{ÙLbóÇEýÁbOJ
+×!{hqÈ6àC¦L:ùng`OiV7Ô/[©<¡Í·òwFðþ¶,¬N¤ê¾-¡ ­Ö<%IÛß±:©ÝÉXmÃ£Ëê3jÂäreØ¿áÈ¸¨lª¾5Ð¼}ØÛjñ±¤BGî
+-
+¸ÚVuåÊQY0ÙäxbnV!üLó
+-:Eß8,Ìmbe¬®ÀÅøÕ£õ9U®³èäÀÅ:p Y÷X¤%1gØ\t°
+ÇËJgW«&åÔÈ»]^Èç©O4-IÐrY.àvä:ÉÈeêñ¨¤M÷ÉÀr3öJê*wÞreJ¼«Phá&=*a%=·[OÛ÷yQ
+uÓÞ»oò;[Hôþ²ËU?paú¦#a;LeÛ&®©ri{bz¸·:ÿb	
+BØggt(fIÞß#Éä_VÕc
+o£C+6äLs§)7XTè¦c ¤EGÙs¹Óg6VÖ% â/jè|S{­¦£xXJhÂ	)áø6¾d´¥¡
+4$üÎm1øÍC«ÅQ¥@gS<1É
+J±mdÎPdÓÔûqIGørIG5×6^b\7ô,5Dø;
+v8WÏ¥ã
+äl¤°k2{4k¹yp'¯BOÀ*¨äúÓ-Á~>%$ÃM{eÏ%YRr[µÉO
+2»ÓX	LdÓHFÏÖýB´ÁJc
+æØÕ·öd /W:áaÍ­Ù=Øó4y#ÇTLüî¤¯*ë6
+´ÈO¬Úò£­Ûc÷ãô­0uT¢¶5xÞå:
+åB
+!ô	1³ùTª%Ev=<3
+²DDw£îwéÎlÄðPÀÔÇ>
+-vÇ-ý
+7â
+t5<¥¨ÆnØÄ÷P®]`H ~àûÅ
+-´1
+³E\¨nD
+å3C
+ªÐ·´Ø®¶»lp,þ
+eYë:®H;BÒßïb(Þ
+å·ôL,Êô
+Ä±KÅqÀc:¹eÕE
+Èì@!Ñ~E[Á[>¦I{£T\êBb.¾Ï§
+-MÄÙö0ÄÃªìá.ÑMdC$?Á7Í~¿I9Àsà
+-Ôñàç ¸úAe<6)ÆÓ@{
+/BhÙà9ç/Ôºù×GKÝAA¹WèÊøÿ¿Ô
+,csl j>ÈÃZ÷súr«)Ù
+-#óÚ>ÃS&q¥²c'%zäÍ¶wJFø¬rÖydtùÀáÍA¦n¤X!
+)Îû]½«c
+Ù×æTQ4!
+ùmÄâ»zß&¶X¹1ï ×E:ÆuvÒ¯Ùö5ûöaS7roà§Ãõ>¯øÀT×"¬åû÷¾*ÂµÞ]£ð©Tgò3_¡ÍÏ1[£UQ¸Â]_
+ h%w~ùÉóð+z£ë;­²¶æJ¯lÅÁ~ßÀÎ¿¦¹)¢Em>Òß¸Y¸LØöÀ´|ùT«Z´å¶*Ø*ûjzÆ½iòÂMpmÅV$'4ØDÊ®ì÷°æµØdÄ¶¶ë&ühjckÄ!ûÆ´µ õU1ý·úDÆ"äÃôÐÛn£Rf#¡²$l£Úk_+Z¡tßR¥¤HhÑ@:ú¦$ÐÞÄ£õgRb
+KjH,NS
+=ÚH1óÙ·Ñendstream
+-endobj
+-237 0 obj
+-3388
+-endobj
+-275 0 obj
+-<</Length 276 0 R/Filter /FlateDecode>>
+-stream
+-x¥ZmÛ¸þ¾®a¿¬ëÝþØ×"½ è%Û
+·´2mëN/(ïf?ß!9
+(yw¯½à ­LRäpæyòËõ*£ëúgÊæjuýøÿpõåj
+Äê?ý.ë?Ý^½ûæÐ1J®o÷W¡þa^q
+D×ùjdëëÛæjñX
+-Çî<¼½ýõ*ÕËÕõíîjÑª©¾CÕµúÛ4Þ2M$¹S51ÕþØ}2
+ò
+Gûê÷(VýÀ^½	 ´£i´
+-2ÛècÑß:ùý¾b§~Ì7n¢:Vvõ{¬m/ÑK=ö:È#ûµV¿ÉÛYwÊ¨Ã~ÙQýÁÌfD¶Ï©ïîkÑèÁÓU°¶ïBv<=Z¸
+-bûù²8
+Äa°Æë]ÆëX}L#ÂÛEÙ½]«Õj±ð«§A½ÔSníKµoöqoÑt°åF¿¦¶OoÿsûWdNØBÿÞ*ä @7Ê"ZÛvq{¶ÍÌ´
+«ºgý¶Ð@õß¬M6cç-Ú6¾7Óq[´
+ÒwÓy¨Ún³ã,HFöô23}U`£t×<fýZ5Úm³JuHõ÷V7_GAjç}¨
+pSCA´¶@¡»&¡ólÝ1
+-RêWTuc;ãé	o¬EïÏ´joc%íóÖgÝJc¢h©8"©Å©ÙG*_pÒvliö&sÖ(vÔkPK
+i
+ðJÄ
+ð¤Ô:O?êVÌDÓ~3ÁÿI½XSHþòáÝç§¦©õÒ¬ûÅÆá~Ê¾n§>ç¼aÑõÞîÎM jE?TEm¢4Ucx8DBlÔßCçz¨Å¢Ì¡Üx«X»lõ÷?ÂzµS_W
+«"×Ø@k
+Òk$.Þ>
+1EëÕ×	P§áâ ¾é
+«Wvxi>E»
+\kn@:0`6G>±Á
+-çîÏ³ÏÁ§ñc>xîf±«~(a35Í¸íFf¼Sú»I[ÕI3*¯Ïv!ã-åÀ~ì
+]-z Az±
+`¸QD
+åÐãjh¢ßzîc~f,©sî>] ¿ªD­Q#^» 	×ÛYýËuñãZºÓ
+VâÙ
+-Ì&
+bGDÂçÔ^²k	rgÇØ°_7¨i"ß7©óÄØyïûcQvGJV¤¾ãs,z=l?;Q>eUJËx£?å,=DEYû¢ÔÆOXtõâËOìôZS3÷FÒq÷§ÿq@MC±qõÉw¹	¸©Ò£EÌ1c1øCâDõüsTÒ§©soÈ)+)ÔNöÝ½ßïÃjwFa«Y9È~EFÌèèq«WjÆ¡:
+1"]ô£1ï²)êúî­¶óf
+-s³4æÀ_)f°¨UúxD¾)ë9Î¢ÁâÑ·äÎ4¡QZ?@xµ²ÚÁ<îMg¹SÛ=`TíÎ]g,Òæë£ó2«dµÑC÷ª
+ã	ÅíÕ·$¾;ái]ä²ðY¾Ê3(¸õ­v
+-\bílÈï÷ÕÁxB´v 3re
+ÆHÙ=>e|jä·ÐÖ0¨Ìõ3Ð
+-Y×dµ8ôÅ©Ú[|$.lsÑ÷ Kê}¦:-ÑOyhÁ=)d
+^Ø~Ñ¢GfSÉÒäh1Ó^ÀÁ2JÓþ?Á³Uæ	VP8Ø{^üdA4§UÂ\Éå×J[Ä~N/§¹¤<ÏaEßVí÷&ÜÖÄâÜWRm¶¦
+-âß<6/·v;£ksZÁìÀ§w­(×¼¤e¥Gm¥ãÆ~LÌ.[q4¯'w`f~0u4vs;K%¨Uk6	3ôÊ¼^ÊÝHE/BiDB9øLxrÕ
+âPç²Rº
+Ò[ÎÿÔ­ÔrÀÈåú%ñÛPiÛU«Öþ^ØWØ%
+Éñd¾¬i
+;Z[ÊÉÈ¢qÏæVÕëÄª©Zèí7+siýÚ2&:ï1ëñSD5~uF`Ý3yF?|§O'¾±
+ÀAôMÕü0aQÛs*äè ¤ønmÏ«öQ
+¨I!cÚL
+-[§`¸`¦ BU^k"4ûíTRÆÝïÔRìp
+-QZ¯ÆD@¸ÊÒÆ
+¶j@¤úhÄÑ¦Àì&ËºGIÐÿw£¤YÙ*!fÝU
+-
+?µ)dL¡-6"ufl!eÑW5ñ2cA¦
+¯ªiNÔv;Õ
+EÆt$Dmc#mÄ^wÝ
+%¥Nl?KI	QKyQ¨+&õQÍá/
+ùÐjÑøå
+Ó
+-ÍuUÔvb(ªz>>óì÷Äç?Õ¯9/àÈj*¢`å9¡Ñryây!ÃcÆ«è¾ã¸IÄX¹õr"ÿ½MT4Ë
+MüÛç$¶
+À1LÝjÞû
+jýödÂÛEaCR
+-ÅäZ«:ÀW7Ð@Ï"£5muÕjOtm³[	P7ÊW_Úº~gRßÿNræ¦øªN ´áy
+×iÏ£D¬¾	/3")BÞÜy:½ÀÐéñh (ôíß¶nÄuÐåª)aæçYÂ@Ò)ÜìTy ²ÝÊR«]Üdjn÷ÔMUjyoØôñu9· ]{QÌXÄiê2öZØSí^!q?cBIß aÄj1ÔÜÑ)STPÂ6H-ãlÅ!E_ugY?9ÈQ=*W?0aKÔfzª-ñÚ³¬÷#úî÷]ßHçQØÞõ]1 %s
+;¤^h
+L
+ìdúPiX¡#sh^pÒY1º8¹böÊ"iÂÊwµ·«àÖcMö4ÌU©ö®JM1`¢Ec5?[nc
+ßy0f^	Û=t½ £9½\×²°MMÍºmNJëÅfÂ¶ñÝB|-ÅþvÃö{ñèN¤À(
+¥;ÄYObiòQwtSBHõNH´
+j¦WìI%É¨JÊ3Ø~Öu!s+sþã®û²ÉÂù¥ ²ú¹Z¼°¯4}/6ÈÍèÀ0¡² Ú³®u¶¢½
+-2ð|ßwê
+&°ï»Æv+	ñ8·£8ÖxÁöÏÆ±ÝÑp¢Ûj@
+-s,7-³÷o³²ì+²Ó¢í
+ofé+
+	ùf´æ6J×h¶Ì×l7JÒySÂÁä{¹#5[s`åÚ7&©àzå	í².¤4åp0¿#÷½$EÎª¨
+è«#©³Byî{: ,ÆP
+Ï·+%TÍEêª
+ò
+-'Xõ&
+£MbvæÇóÅ_ÑÓA¸Ô±cß-f
+ GÖ{©(Þ½½q°ÇJÏ³ZòKGfp3o/÷Ä×óß`RôÅª[À¸ÞDàûóG ¹TÞ@ãã¾ÞÌ2M­
+-éæ0öÁç¢6ACøgÎ_/Û¹^8
+Í³¹
+ú©(1u÷
+{&m%A&
+|Ã@K:ñÆ
+wýo4"µCÍ ¥Ë¶¸»;ØJTäöÁïÌ)crùd_½ºÙ4ñÇ^
+lâBçD(YX ¹³w	"_GsÕ"«Émã3*Z¾'tK Fåë¤§ëlK.×@ºìAoöªoðÎéõYzQ
+-cÔeé*ÛÈa2Þ%Ë:^ B?Øhîá{2=
+a³ ÞÒwr¿ñ}}*QKÙ@eîé8vÓãd3;ÔÄ#+_èCßz¥&¯qMÛKÂLUð`ÅoZlÃ
+¿ÉaØÜV <»\ç&Xd´& `Â·Ó¢.ªÓ.zj}¨»{éF
+-ïÌ
+Ì0b/2¢Ëöj<¤u=Ê·^º¾LV:¢wÈ;|±«ó4O
+-iÜ5&
+Ü
+ê¹
+§^ºMÂùîE×Ù#À¸2ÎÐà9õ8òæ½Í
+%fØ $^wáu£ZvX8bÒk¼Uj§øún®
+Ì®xÐè|Ý_Õ36êEa9àÔÚþöW¾Rß.7õä¼Hz%Ïß.båÑSZVPa!
+Þ¶fâÏm)ß)ðWíc<ïuÆéø
+-Ü	¨ÌjÌtoÑxx¼kª¢W0çrx<|w'Vªn«,.Y Öd~GV®R÷ÂfÅZMA*¤Õ
+þ[CF×ZgR§Oiî²{[F¦ÜÉ¶ÊB©¥sWóËh|
+
+W
+6GlfzxýÆî
+0æ¯aü¤1)$
+6g[mì>h;U[~¡»áë¹£_ÎxÇN7(Ê/ñ9¡¾hKÐC(<Rv±ñ
+
+
+Ó{"â««ËUÖR)¿ñGu(ëK
+éÜÁ¹«GäqI­ïñæ£[â89B¡
+-k®àÜÌ»áF¯ÀÄdªÑO·W¿À¿ÿë¿¡Þendstream
+-endobj
+-276 0 obj
+-3497
+-endobj
+-282 0 obj
+-<</Length 283 0 R/Filter /FlateDecode>>
+-stream
+-x½ZYÛÆÎ3K?'ªj`åIR{}DD+EåaãàâÐjã?ï«»P¢RIÅ*Ë$Ìôôñ}_7ü°ô½ \úêû°«þò;ø÷~ñ°È½Hý£àwÕòåfqó.ÈàÁ0^n@ÿp
+,×þ2ó×^/7Õb»zýñùuú¾¿ê
+û¸kàú°/¼çÿÜü°/]2c³çnk¸!Vwý^ö²Áï½z4¡õôÅ;ÑÉûrm¯õ=®RÞ7-ØRuWz¿wëãÔËÔùaëÕ«£ ë6ÿ/Z{ylîØ®d½+}ÑÁâ^ÜYtlºÞ}nnïªi
+wk×\ëý¯#?÷8rìå¹Yõt]/w¢/öîî8;YÂaÎø)Ï·¬Þ¡Aæe©³­hE	hs^³*ú#z¿s6î:øÎþÎµÙ¼¶­õÆvÓUó6#àfì6â£úb§×Lé4ÛÕ±Cáû­nô-IâÅîÀµÚè:3o
+ïV¢3
+322öÜc}ÑV²¿ÀMqFþ;µÚnßKð$'{Ä¥¸:ûLB¬\?h¡Ï³|I¼Ð¹*öB½hî­Ý6GÈV¸Fx
+ß9GV§Ö=ö=ÿÇÁ¿¹½èÅôæíªt!Þ	Hý{ #·«'·ÙmÊ}rU*ÊÒØæìçGSV¶ëNî!ç´Ô­k¨}çÌV©)ZG]^óð£ùæÅî¤*Ys|
+`Wôõú\´ú®@c5­§ËÞ=ÂÍ£5K5å`ë¢ëÖVWêc¶«Í±è°lÉ»¯?þd`d­ØT)s&VCÙËÒ$¥»F
+SèÌ=´ëúÇ\`D½7aM1=·«·ëU¡k(ýPÁ¢çê£*Yr1úæNvðÒÔÀb°»ÔÔåÓÇçi`½µÑº¨èr)ULè
+úPñ<ÙúÜ
+ÞJÓä:\üóy°I¡SQÅe£t"N´<ìFé87±¾¶¨³V¦<¾ÊÃ^= ßÇS$#ªrïO;Tòwùä~94­Û©2Á]6Fj
+Ò¸d
+Ú|tkÑã{ÙíN`+K¼Íµ18ù÷8FðG'@¤5W7bõÅjGê:sV§²ïò$
+%
+¢ì
+
+b¹	þ]NÉ½¦6]£!*Æ0°½tõx
+ø¢Ó(!¢·9°t»
+-(¥fÄ ;"­
+ »OB¶
+Ö=ºO#­ýl;1pz_àè»Þ:/'ù4pWQ3R¹ôû¸²:§MG^L@!rTæ
+n³õþ
+-i÷íª sn
+
+NP´cÝ¹kªÓÐ3áQ_ÑÁ^%¬"Ë&¼:SQÉ¸ö;yWâe
+-¯<'52É»¶'ÔkMU¹H»¤^
+-µ$ÅühR£	»H
+Ôi4Â:XÀÓ¥®ÔUïbé¥ÕæÕñì !ëÇ!ÃÔæ
+Y°¼Y
+-Ù´n¬ÔEP|]çT]BwÊp°ÒùÉ!&õÓé¼Òçºîh¥nN¦ÚÓ(t{Ô=ê¨ixÔV:Ì³ -ÚBt#¦³M4R.*´Ê ¸0ç1ÓüGº¿êøsu¡½ã!5K5»ôÙ²Ù1/mèÊ6e>o÷Î´i)coèÒLK-Æè,×ÄÓÿ
+& HrÂ,
+pú´iûÃ°v÷o²Ø:>)¹9%ïúàYJAL6¢î[q:^Y/ô~©«H-¡ký/
+Ò/ooQ"Z2v.l5Ð¦VèT_s¥ðu±eÆ772é	:sÙ
+-ÀXoC×v£i$MP
+Å[·5[{
+KÛÚA*ÅfèáFo $»ÙZ7#»äRns\ÒmWgz¢8&#MÇð+µÁ+õÆt½	Ù£ZðyV¨6q>Há[<ajXÃ2u÷h_30éF¼gØ¹0õcD
+· ì)
+-"ø
+Í/c¸rúõa(Z$!ë_7¯(Ü·é¸Ä¦
+- ýò¬Äëd»VÞ1¥À
+Òõið%Xkj¢"P°d"B&ÍÄ(Âé¡Ó¹<>«¸YÐ¿Á¡«Y/ÅÛÏ¢:Ù
+HÊj»G­\æf{Cá hÖ9
+@|2¼
+ùÙov\ó}°¦ 4%À«5
+$¢5#
+ }ÖlÊ'qgOS*Þª½°(1[u·a¯k!3[ºéNdl5å²ÙÌ$ÜLºÝ hûV<C#àºl÷²yu&8,ª¥ùÉÏ<Seu±ÃÒ»\¡ASN&«ßh¨t
+Ú¦Út(<»Ðiã22d3eßO²Ñµ:ÆÝ¨úSÛ"ôOJ
+ä 7Øé½iï³¡Ãí^H×u¬µë1ºÊ`Ö¯¥vvìGó!:qW[ÌçZm­Hët<`/±÷x
+²3-wñ²m Â	!Æ
+-jçSç7ïBMswÀáÍÍ/6ê×ÅÛÅÃ22/$®ãeä ?ÖË>@ß°«/o7·?/ûv(7¿.ÅÍ÷ê¯¿¼ÿÜþuù§ÅëÛåÛoxÁ­ÁWj`	é®Æj±~±úùõæÝí«÷sNæÃdh,ÁýfH¦Cñaçùùes½nÈº½ÍÑDÃ)ë}4*¬ûyg×¤EpRc¤©ù¶9ÏJÇ
+wÚ	`óg¬´M=f½ÖÈÉãð±Vôõ«ïßÌüÒHä¿Õ<æ9´ZÕ
+2ÂMo2êeØ0
+Ë'ÞÅpÏ6J$©ìä¸T¸%
+-P
+é
+#GdújY$Ueøÿ²
+5´Få÷ïo¿ûû¼*±1Û²¡6Á1óQs²UY8$
+-Bêî7ï>¼gXÎøãªnêmÉbW=?òb
+-Å7 äÃH®ÜNGR£×5g'RoËB´fvüI#c÷äÊ#1@¿U32vv,NË
+çËFQ¡Öo)qý`Ò|ºéÞü=.Ó¯_h¢ø;2êwvî5z¹@$3
+Ò2û"&L'9u²ÕóyíùR´÷Ø t£÷´¡Nêtu¯{êuW¿ZW´ØQÜgãÌ±,Üã%+#í
+J4ã¾æeøQZ}
+,ÔÖ|=ËÕ««ñDLM5íôÐ¼)ÏTÈîÊÒKþ;Ó'3~Rél:UÌ3æ¨~6ðü2©5§^Vv`ÈíÁvÄ¬môíd%áá´U§ë1ac¿¨
+lÆ8ëGQÒ½[8_qÉfõ½éÒã¬bíÕ´6º'¯¬¸XÖá5­?ÎìËC6 pÛ0Xg0ï#K¸JÈúfèàd*>|GaD>Â8OÿÇôqîÿK	³X~ÖºçRì¡k­óvÆÐuÃìíS[¨! ,
+µôÂ)éùÌ±Ò
+NáÏ/Æ9á
+-úH?ÙùÎí/F×T/bTï»¸L;ö²*®°5dÉFLÛy­ÚvKY®]b7ßMÒ8^*OtÄà¦
+uÈÛÅÛendstream
+-endobj
+-283 0 obj
+-2842
+-endobj
+-298 0 obj
+-<</Length 299 0 R/Filter /FlateDecode>>
+-stream
+-x[Yã¶ÎóØß 7kªf´â!Jz¯xSe'N¦ÊÚ<@$FÇ,Aví?
+î&(y
+§ìHâ ¯¿þù°X¯t±¶ÿ
+Êæn½ø»ù÷t÷án·Êì?îÿ\6¯îÞü{¿1¦ùâéù.q
+E$«b±]ïWÅnñÔÜ-ÓÕýÓ¯wÉvîÌ
+OÕÝòmë~Iý×Ãrè»ûÇt½^/«±
+T×®îÿûôóþdïß&ôüÂ½ MWáOî
+ëUï\¾ôÝ±¶¿oÖ«"ß/gUºg3zÝ
+Þðèî®íjT~Òù*	·
+-gÓzî)»±÷Of
+·ÿµ{vOf«}.ôKÈW[2ú²¼L
+-k²k^ÆáÑÙá1ÛnWë|l¬ü\N02Næ,¸M¯ö[¸æfdüË
+¯Û
+U+®W¢vÌVp³ù}ìý·ÖÅ·kø^Û4êay4
+¶ën¥IAN(»6é¢Ú`ÃÝklX
+-&¬¤.{
+Tn-[6z49ã¥íi'÷ûc¶ßZ'ÜpÆµÉÆ¾ÿÔ³ö»Ù¬Ð©&ÖÜÞaÞnb¾h9
+Æ:<.Â^cß[Óc},³_f?GZi~îÂ¯/¢M¦pIL¦¬d`§mR4ÌÁ¿ÅÏs<Bæë­
+-\<¬C{8ÁqCÁ!|¼${üé`Ç
+èÎ­Ï}n¤Ð6ºà«Ð>,Ö½¬Rú×Î».ËVYs
+2¸Æ°x(è´V¼ò}pÓòé¬4Ä¦ÿ%IgÁÙ. %òÕ¾ u=<w=Øg²Eóè)O\
+°`z©åC°{¥^U%mõ»I£ì1RêÉËáÜ`(Øqàb%_fÁ#ÿêÆÙc"$yk¹*U_
+-¿ÖÂGpJøeøqÀ ¥qÍ
+õÐ[ð6c{ÌÊmâdµR&L}´ä99SKùfL*ëw}%{!öBàekÝ²C/µ	õ9ê6bèÕG÷ëú,J
+k¿	;¦vi»§è}; Tq NèÜ³
+-F{
+ÛJ4
+ 62ÇÓÇ<ÝÛÐ¥dze/æÅB7ku-Ýkòfà
+1ØsWBkº%àuNó«EïAÍLñµ²¡q[MNzGlÈw¯*X G=@ïHnÂûÁª2æ%àsEª­ÀRY&x	9Ü+÷Ü§K&ÜÕRjÝõ:	FVROdüoÎ¢t.0
++æa)ªÊX@K¿½DT.k×ÜWW2c!~
+-É.£7~¯zYgKÉ,Nùö®tè8
+`piOnÔÀ²!qT]EÝPq7ÌGq
+÷ä*!BC
+Óx¤ï# ³cm
+§A®YUê
+¡í¬øø"7c ã%$µH©\«t9<ÙQ&ÍæìË±·Æk#s
+-
+í÷hÈÔ!<ÔÕP}vkCCÄcnãHpÑlj>gÒµðñ8Öï}dåó2
+BuãS®0MÆJD¾!§
++x
+æûLÂ¶ÕÏLyeôz"å
+ß·
+À7õE#$òD_»Iý½Ä8<7«GK"º¬kuÂÈ"zãH¢//Ñ)ãÇ9º=ålx!oÃ°jLÜL@öb¡ínN·BTK	syS
+¹òFþ0F4`ÞtuwÂÄ1}
+ÃjÂ§s 4)Ä{@gÎ&hCa°ZÏCO5¤
+¥Ö7DÃ»&£ÆeÆ#ÍØ
+dñ\cJ	
+4Ç=-ÚD9dÒ«q
+Ù«¾Æ¹c&8«AB
+-
+Ìç,ó Ê3c#eÜb	Iý <
+ÜÖP;ÄÍ¨*Ø>#¬í>b|#5 3OÌw¦óx[dH¦1iÒyP«Ï<øqíu±Ú¾»_yïÑî¯`ç7@Õh$
+-d¸ÁÈú£E¢FCÍ
+9]è+-	K'-
+-
+-oK
+V|w¼mhãn?Ý5b}#ÚÖ1z@áC½Ø1g¢Mö¯ÀjI$8Ç\ÔjåÖ'_Ú©À`_¢¥
+ú
+-óªi}ò?ãTÃEW`}Ç'ÉúØDm1cKñ"ªö3¿³\á8-
+U¹Qûn
+-f[/W[f­"m¿\åi9Nçó=ö9·ëO¢
+îÁ½ËRëCL
+í¦BxëAÛP+LN.qg×ÄxH  
+ûÝëÔ·?ýì¢Õ
+4»6ü¯Üä)éºØxù#ÈHá~èÏLÕ¯é ÛX_IAõeùR49|¥#¼6]¼6¼$ÆAGXDÊV|YLÆÀ(A°¤Ñ]ýÏ©gøªl:ÍÏZ
+
+ O
+ã,ºàµ¶È7109ÄÄ×qæº@2kÍ¸âSÜQF
+-3Ã÷¾ Ô·wg»ÌÇÜ¾ÃÞÎ±Ù^Âë«ÍùÞaÔkì	H
+-&øM~ÊÎn`Ô¬ÚêS¯ª8²nK	EñÕ@ãùáD7û
+ºÃ	34¸oDÙwÚ§oo®5®E¼
+-Ì>½5K²í2ô¬¬Ïlùek8tCyÃeP?	½
+)ÂJ¦Uv Ì(
+-+ $ÀFË/µ*¡R¤LÝ¹ýCìÒµàu¯DNè³§a&¬ÖS×# 
+ ör;@Ißpè1:*\5fqÁøh°6Å;
+eq³¯½!
+-R$Õ9^Ny~æÈÊ
+«c _Sâ¨¡9ÚB]Ï'.E{ýrlC¡	¤7Æ²VªÓÙsæ4aú.Òøþ+dÍ¯Ðçd|»H¯Â1|XþÕ3·z# Ê1
+-GqµÜK"»bZõ
+l5°Ü14ù(>K;D­
+UvÚ²kÇ)sK¯H:N[çåæ
+-;ï¥¨Â³¬xîa
+7x6Êj
+Ëâ®r¯qxôbeçéEbÉu|Ì³h /1³B=â&oYf_Ãp4åM@û\óQ;<dÝxy]<Ât7Ê })Ãn&µÝ© Õ»øÃèaÖ³/«S5Ãß¹µl»p	c¬på&´&½ÑCW÷^R²µh~¼½YÂ|;Êä¿Ð
+¸µoc«J\l{kºÁfÊF@tÖJ´á¬¯¾¯<¼À>ÄHïÛÊzUæBË4lnæ^;­)%ÕÁ+Æ¦·À½
+\¸¹í$ù¥{üM¦¦VoµzÉbÃ´Rí¥­IþìÚìciò³­ì>Ù¦õ1Ý:Üg¯ZÕý1
+ÕoÈ
+Õ+Ãú¥PE¯¤V½ÀÍº
+nöò»ßpGK^bAØ/7Ö®JkuÂÂÆ
+f²¦^ÕnÌ÷xC#øL­h%K¶j¼ùj><¦{Ûjc
+xw¡Fb8G-!îúvóÄÙPI3Ñ1ÃÃÉÛvLëú!¼ÖtdºåRjZ{¶_áÝ3æ!°Ë/ì
+ß+*kù¯ÆMf$hÛãF8ÍÅl*»Íå5'øIænº?^uPb¥
+§_vx¼ê,LÊæ©þ2ëz»þ=LÕ´&µ¼ùÜÔ´aT/á
+-
+<¢ª.[V>æ-ØJ
+1ØÐãÇ!ì<ä3tøü\
+-n2wG°ØÍ¬"*M{è´/Øö&¶HEõ»ÏÂÓôUC¾§Xá¿Ù$­lt I]\<9
+-àÊV¡ÈÜ¦8íez
+"^>S¿½¾
+p"Âß >M7z#í26eÄTJ(
+lË÷àÂp.$awìÀKK­¬Fí­kïî¯Ýhçëlì
+f'"ò16àª¤hÆ>T
+Úc
+¦bË»CÇÅ\qg÷aùÈ·)ËHºxM
+Ø°å{PµÆ0
+-ö5Ê,ª%¶ûð+¿_7À~Âtéß¡vîIY/õ±
+-J9 ?À&-³hT±þmÒ$¹ÕX9Ý®I¢
+ãè¹µy¢-!ï¦ýÝSÍ7Ìµ¤Óm"
+-î¸cárUFÚ£ò*ï'ÿ6µÚMOæ5ïtãª³ÙO
+îÏ{äO¡®øã®PÖ÷
+-WÊº»S~í>áûÃàÕlóÿ
+ÑVv}/QíÚ
+-ò"ÔñaÆæÅÐ*ó0qøiÄ#E¨Øù¦"µ#Oø5b½ü0"6«mÂOé0øUú`ÞT×spÑ©
+-
+ÍØ°ÿ½$Ús¡sNÊáßgªWÒ`Ñ~ôþZÂ µ"ÑA®$ùÃ<¬+II$·S;çc¼ôJxI¯`dòÖI
+-Ð?Ø®EÔ`Çmêìl#
+s!ÔVhUðÂNtþÚûGF3Õåìpi,À®'JoÐÌGè
+-M´©a*72å¤5 Ê·ôæahýúBÿ~
+%×'4³· 
+á¥Qöf<°ç\ÊÏ·­,|õív	íàÄM !I8ÿ¬ÙÃì`ÃÜí
+æ¼ì(UïÙHlË4&#+]örí9D©ÏDWXîó¸¾Eq«ò%+¦$m¶È{~Ø6®úm×þþìñÒÙc±QíôY§º;:qÓ7+ú¢5,3ÜèwWpu`O4ª=2u¥?àPÊN8 ü
+ ½¨õÕJÀP
+¦Z«åæ¦TtÐ¹&0VB&+WÒ­±Ð+S-
+-½¢ãÞµ|¦ÎÕôdÏsÐÐI%²­gï2ï»§»ï>,=îoòÅÖ°µí>[ìRS÷{ûÇ_¿½{óöÇ
+É
+y÷æEr÷æû¯ÿõù¿·ß.þr÷ÝÛÅÏâo'Ò$»òÇkÇW÷nóÁýñ°"þö=ãÂuî4Ùwd§:9wää1gÌØî¾Ç}¼Dg¹½öYÅk 3Û*3
+ö?#Øó,Ä'#
+Çs	¤]ÂÎ=F¬¤§Ò
+Î¦;åWæú
+êÉN-¯ýb°0ÿ=£ÞÄÎmZÝÞöè0 $ íGð
+º70J`¾èÝñ8_0uPô;JÒà4×®BàsWu6Ï1FwñË×­ùÁ
+-þoulV%{W±ý½¸ÃúùîÈ¯øÙendstream
+-endobj
+-299 0 obj
+-4039
+-endobj
+-310 0 obj
+-<</Length 311 0 R/Filter /FlateDecode>>
+-stream
+-x­[KÛÆÎVå7ðªj"
+$ÈC¶ãØíÄv6å×,8K
+
+ÇRkÿùÌ³»gÔÊ©È%y=ýøúëîáûå:åZþg(Åzùµø{Z¼_ì¢TþQÐËfùÅÝâÍOq.
+L²åÝã"VÜÆË8£í2_ï£íny×,V}÷ëbårý»ãâ°ú±b}Óõìæõm¼]¯×«¢®_ÿr÷ÅN>«n[=©ÇÌ/¬yÉy)ÝF{{¹è¼ï£½Y}Õv£¼ÄzCêEÏëgùÑf­3óQ÷¨O¥¬æMï§¢Vï£ÌÞ6ðSË_E[²HãÞöV]¯Ì¢ÝÎn}(sMv«özîò(Ý.ãunËìD©Ø.ÕXF®räíI-íêåëhc)»æ<ÅÈ»V­¾G½è+q
+%v/Â.Jyk"üy]7µÇ¢VoÜ¤ÑÆ®ÒèWnÀpÏ¾¾#5¬üeí¬¦ka)%BÏ_ä
+]oAÃï<VÅ0X½¼ÙQË¹¶vå
++ùØm¬Ú<ò2µpèTcU(Å$;Aï FÇ¹j*ðÞ½ÀÆ­vciuzÓ
+t7²kJ°õÒ
+7Èsì·Ê9ßü´ß@XnÖ¨·/«B8ºn£-e\²ÇNGx^W×êÁØJtô¯à?UÆ@êq0û»ÆÎu
+t7¦c$*Ý¡¹>bhßÎIjfE©Þ³ÖvÕË4ÜKwÆzøö¬ï[òÁø[6Lç³
+-²Án8QE²ë{6ÀS­~hH
+-ÜW4"ªÕ.³(M¨Ä&
+uØ¤©DkaIÁãµ6X`®-êhFÒkÖÒÿæ
+-¯^c|F<JÂîF¹Ôñ$R Ý»øðuøe`z^Éù,ãÊ¹Á)aZç-kò+z@ÏB; GA:Þ¸ÔZ^*Wz~9Am1«`Êä^Ç åc»¸}X½jùÈ¬æXÍÖjDe
+äíº©Ô¦ ¨ª/ÀqûHÊfjYïÄê¼Q´Ì8a£Bµ
+
+êUX¢³7H2kOÊ;
+Â¬ðV i£3¯ÑJ-òåû8rÂ(áM¯J0­'Ýºmâß|,
+YqòABÈÏ|@2wQê$r¼6
+r\ã×^ ¢C·ñ9¡?-³¨­Þ
+-.C´½eûîAø¦R
+1*$X»ÞL^fÃhÌnV¢@¸JÛ9\çâíÑÏoDkÕ
+-eÏá	 \c3!bC¬ä3¨Güò529`µ¾w[/²wúâ\al|í×)ðfAÞ]%Á¤Ý!®Äl
+-3àò¤4 
+ ¸SÅÀ
+-»mvøÎ&(%YëJ¤RÀë?ñ#(¬+x
+gWÄæ=0»är·A=ÛØÿ
+-æÁ"oÌÚFÁ@ó¢Yeï3ÅK¨:ìzn&$yU  N0©*HÃÔØ·ÈT¢ e;¥1_
+
+7[¹P?o©Á.È«%gTÊNHéZlGàáB³MF(kÁé¼2Êþú
+-ü!ß¤-±%:£%Bd
+-ùÐõ4r Ùº*'ÕrÙË½Ei@6¿ k!.ÌÈZ¢k£7âØGÛpå­à>Ïú
+#/üGfåqjÕ àF] Û{òPTà¡«Hõê~¯Å=`\ò*¾e¡\A9öEZ3´Ï0
+Ï/¼µNP1ËkGÚ
+ÁwX¬Ù
+dc'ub'y1tôÚ=¼FQÉ}nìRcÅá6RÄçB Ü­V^²SNj=I¤Ulò¾;õÁ?ø]¶9j6²Cnò*b×ê
+l¾amÉìBªê
+-Wm;«àwâGµ*â¥µ·±?Üp]AÑQ$>Äº·uêz Að
+ºZab½e8P¼ÕaoÆc3à6'&ø° i¶{Ce ½A³;àùÐ10Ö
+¦VWLmÍßÈ"I¶1>Ã²U%ÊðÂrÔ'ó	Dæ>Òêúg9æò¸Æ#Ó&u"ånqëtB²=Bà?ü ,+6õBD®v
+$
+>I¯
+üeM·RJ? Sm!={(jÙTaúXMëÒOÂÀT$ÓäÈ÷edõ]ÃegBª*Í7rß¤>µõ$`Â½¦ªlÉàþ|Åªx×ýk)x#üÿ¦S¼ÅVVÏB\]zCà¢ÓõÐm"49@ó¹Õ'
+Tãlôì õ¹6üÄD5Ü|¤4¦ÖoØXAÿv°W=6?ùgÂó4$é
+ì@ ¥ìñlSs­ÚmBð$ûâÈºÏ Î*MÜ¶$½
+Ø vHÒ¶BåòãwÓ?ÓË´«S)=ãµõÏ
+OY<õtd5<Å)ÌLÀy
+-ãiB
+-L$@2Ï7d)­ìl
+-æ4EW1¸
+?Ã^êÒâ`hZ¬Ñ1¡4Z¯Þ
+¦aÔ¨(bÉ« ^è-»¸|çài.²
+-8p°HÄUÛ¤ãÞ
+-Òü³ØP¶#x
+-£	LL-S u£ÝtzDËÒhV
+-Çw©ÜC`ì[Ö·¿íïßé]ì
+ß¯¾ýîþõÒ%¦GP@?ê×ÚÂõ¨ý­ùÏ½pe.¸	-1¯ß£ÂGn4´-4~_ô`Í7{;_Jhï\f/0ðÄÎÂ° ®asÛw
+­Ð]`G ýriá6¿icnc2ÌHq¸Ì¯
+©8¬jèz
+HG0÷«rê{Ý² 3ÀQGíküjÒ:¬4¯ÇVlÚ"RêîAÇÖDÂêî~5«ùç±Òè®v=°û×3Ð¿!NËíÅöÚ£=l±ÇóÖfL§²&^
+-fA0ð,eó¶ã/A
+{ª¶ÅGúzÜ`;ø¥¹!
+2>Êù¤OS
+½S
+-eÎJÂ×Á?jV
+òÀ¢üÙN
+-EÂ±©
+-\2&½Ü¬ìMºWÖ£Z
+l%ÞLÉ V	<´²xìUSZFÅhÃFëOpáÔ%x¢ÊÕ²AãÆ6&ÿó¶S¡lhXqÔ
+jëÀ(5£à1Ö£Æ	`II
+2/$AV 
+ÂBö·sÅënèÎZû
+-QÆ³ÃS¨Wl'l´W;ÁÅ`ùû^
+Ü²®8!32}° =BÍ,SÓWÚ6¾·Cå^å ÝÇ²ÍÀ £íu§¦!
+­,dÝT]Û+ä$
+²@Í¶8®½Ù	©øSàÒ~
+ÓoZYÔB§j?tPmO\9l[Õ);ÂMµ|£Ý)É×¿{Â :yÈVVmG>PH*°óÔp
+4{á
+Uy`ZBêÚKñ<Z[¿Ø)*
+-Þ
+sWqÛÒÈ#Âq-
+¯²3¸Ã 
+ÈFµEFÌþø¬õû
+²§$,Þù<[#2¬LWÁ]*=gÛ
+Æê§zûécáã¯âÞ^Ï"ÃËkº·o	ù4ø8¬3:£* 
+-]dYY
+-ÚWØøó*¶$Ýz%ª	Ú.ù/óBªQ
+
+éOnH»,²cX¬^ßBïZ
+-øÌÏE)ÁMMg
+-<wóxñ6QðÜB¼µ5)¶á¤+Ù³Z<g²Ò9±$4ÇFÁöNc5Xí;ÝÆÜ.%ÉÛ¬x×y¬¨2·è
+-ZØb1XJeÈ`4ê?Ò Ìùp®ôºÝ)R}Søí'ÒóÔsÒ"QWEÍ¤ú
+v®Öv'IZ
+Ùú¯O¤
+-o¨º©AU_ð-Ð5Ð}Õb@¨Ö$xë8¡<á§â¶«:Òö´fÄ#óàÃ0j%%üê_­-Y¶?¥µ¨VóÀÏã ïÓ¹ÅM´ízä
+-káó2DÍÉq¼`°<×Åõ2	ÕÕP:¹~U±F7±(Iú¾3£iÑ0¸@ë¢ÆÁoL'²~Ê ÔzÝÏÕL¨ÅÀuØÀm§,õ|JûA8Q©£¨øI¸Ýi¦eø×Íëp
+-j' hÓOScU:s: Äöº!jPIyDÈ
+úPÔð.ÏÞÌ
+­O8B6gmè
+AÁª×7¥Jp,
+ÜnW³n÷dáÞ;G½T
+òÂÀõa\¯	ÃÆ2ò S
+¯½Â8ä÷z²¿Ê£á4¨ilKCNódÏ	®hß
+´
+ïê=i'ª²ÓÂ
+T
+N3m;]ÙùHbeÙSo-³.Ãã·nØrÍ¡ÊF¨«%+T'R®ÅÑh0h1ó&C­ysk
+-CÕ]%ð<
+-±çðð@
+_=àÉÎÊ|Drj¹jÊÑ8?©é¡ûAÎa~Â¨Ä­BbHìd)ÁIA0?º2HrN¢»ÇÎ}Û9_ÎÍOEWç5.à8÷E)¸ùÝc	þ0°ÞÐ
+:"
+iiZ²Ä{Å?
+>.!KàÂ@:ì\ÜZ¹KD´uýàÓÍÉñ
+èOuï<Fçl±úvê<­MÃtýíIDFÍ8ö]
+-ïäîA¶$mâY@¿»_ùí»bgIW¤$mÒ
+&¾íþZöj4V9%ÀR:Ääíq0S:`
+#]>×µ§3ÇÝg¨9WèM
+½%6zÊI>hi¬ ÔêW P}@×Êâ\<Ô4Þ)iÀÈ±» %ìüÒûIE²|¾s¦<ÐÿÆSò×¯dWTÒ4®%¤¶*bîÜ+¸ ìãFÛIÚÁJ%¯[¥ykRÀ?|lOÏÎ Í®;Ðá1¢,5IéTvª
+}0&uÇæÌ{®ÛèkuA¶\ôéÀ/!Éb¿cOÐ8ÁdQ(ÇoJ=ÈÖ08%òauì 
+0 ð×¨jBL>²;SBÐÁ
+þ®
+-zxceéçR
+×~î,Þ+ãJWÙ
+­¾ W¢7éÎÆÍ+_0 wª¼÷«»Å÷K¡Á¥ú¢[¶ÌKÈ÷ér»O¢x¿ßûâíâÍÛï¹°ÅñâÍ7ò/~øRüïíßZ|õvùã'|±.ÓoÖ­¥Î5¶4èð´øè#Û
+-ßp`¶,ÒñÆ§ö²ÐsÃ[õ{bZJçú=
+0ãsd'UËßO°xY´ë~Ïç;Ý5Oh°BÅ¢Ô0£xû½÷D×tº´\ü ÀùÃendstream
+-endobj
+-311 0 obj
+-4166
+-endobj
+-330 0 obj
+-<</Length 331 0 R/Filter /FlateDecode>>
+-stream
+-x[Ûrã6ÝgUj¿Aª17Qâc&ÙõÎLU.®Êf`
+-¶ð¢áel'?¿ èníJ¶I§Oî¾®Ã ×¡þûPÔ«pýoõïýêëj$ús.êõûÕ»_¢z0N×7w«ÈÜ¸Öy¸Þ
+yí×7õjs×ÍñÍÍï«$ö{õãê°¹-{Y
+eÛ¼¹¶anDußvåpª{u%ÓWÎ¼¸­¤ûNÙ¸{}[ãÕ¾
+F¡ê7ÿ»ùïê*x¿¶zAêeïõÛ£DOÈ¼}s+ú²0S
+-Ô]<ÿ,Æj0s°
+¾üd
+mf/¨Iè+i¥öj©[Ü©UsÓSkû²¹7JÙëÔOÄ½EÏ]{îJ1[YîÛgÑ
+-¥^
+JßÛÛç\Ë¦W÷DUg{yâ¾]öæJ
+äÎDÇ®R54]«U©-âs
+qÏ6EÛujÏ¬ÜTûÔKc4ÖP°C-1_VÚíµ]á ý`¦çzÓ<§ÅØlî;q>á`¯å²2vO¶lX·þæ3ÀÌf.jóµ-.ñ¶¼ÛQ¡K/QMÓ^þ¾ïÇÚnÊUtïÚÎ
+³§·õe}®ÊvJ"Ý´
+ÍØyï²ÙêqoVOëÃ¥½²s~ÐödYÞüÁy|k®%4Zí¿M|Ùe´:¿ØôÆQ:ÊOd-ÑÝf~Òvø~2´ ×Äl"Zû°éÇ³ÆaOÔüí *w½1oQ!a¿3tÅNE²SbãÉwny¼ø¢k{ããöo|v1É2å)5%ÂäC>(lÇÁÍ¾÷¢;â²Ú
+GiµËØ.Î8
+¬ñvzOç^¹àozE òÏoæÁ¶XÂ#${aI­ýä?¢ÞÕKë;ÜZÈ¢Ç
+ üÙÁ 9zÅàÁ¶lÊº4ãfèÍÒáM¯Ñg^ä
+9Ë¸PÆ|êY¸è¹ÙÀ¶ï~w!JrýM1ýM"© ·"°t¾ÁÑéôEëÄ?o´ÃÕ
+c?ÔTå`Ö}C:D*?U%+÷í¢­Ïã H7_
+-²(»b,±çJÊ±±ZlÞ:Zï6"àÌÑ
+,é9#
+³õ}¨Ã ;§$ãTqCÏ [±'Í3Í'¯5m¤<©8
+áæÓç³»¶à¸*ÐÛ»
+â«¶Cl;÷Iù<-W  *­yw1cA*J
+älcÀ
+-JTl' 9%ÜZ4!=Fîö'$59JO]).F#¥aºIúzÚMqé PÍ¬p{5µ¼%[í
+l
+Vì
+-
+-¢rPcò¸ÛÇ²L;'·r)Ùk\
+;îî_å7ë;F'ªÉâ|yØT¢´TBÏPÙN«47U~Î+zXÕ6A~¦°Kúï@ =uÉO¾	vQ«2_ÍÈEdÕN Ah
+pÍ
+" ½öÌ×É_DQ¨
+ÂF 2Ó P3S"±0»H,É«E ´
+¨ >.³"æ\¦D©L
+mIù
+rÆ¶£Ø0ç­Ã}Ê4)!ßÊXC×Ìà
+¼àtjmù
+ksöìq
+ð3iÚó ÀÎÅ7ìãô¹{b62ócbä9I­2.3"¯lGK}¼
+oëç¦Á?¡x¨òÄóBð1ÖñÐ+Í¯âX=ùdóv¢­QÁÅD¸_GÙ»CÀÊ¿-SÙóYò2ñF) #,¥Ý:_ï/9aò¾n;Ð}¦TZe¨
+ÉÄ0M>¥ªjêUØlgúÄ²$]
+ù|jh©õG¥¶é¾è}Ñc/XªÊ34
+-È*6'¹4´ÊFÏpÇ>6vµ;Ê$_Äà²8Bj;ÊCc{²iÇû@º°Á.KäÌä@£½ÕÌ,Ä	Òóì´¬¥#zÚÚ+AÆU¶À¡Òh
+-dè9ýà"
+Ê_
+-YAó°F
+ëMV±V7
+þ²Zkg®kÒ
+
+¦M_=K¤ ÷qJþVKÑ ý«sc ÞÅÑ¶±iOF[çoÈÂÜþF¶ÂSA
+En¶sõ-æé&^ÂÑ/¥(üÉ¬±3£J¹²É
+ÅI`æ¨[Î<yî$&ËÕÌüË¢ê[ÎeSTãñå
+Üe_Þ7ø\îíßÌ}Ö_ <Cnì<¿Ûh¦Mñd_
+¹õ0ñç+WAq
+t	gXV²ì°Æ%äßBc6#Ëé_cos"VWm& pÅcÏ -	í
+ïV óü± Õ7®R/^P}8Á
+-FJ;r/1g*kdÎåLy¨hÏPùªáhLU
+r¬ãøý(¶L&¸àð
+£è0/ú&UÎ
+BrÇ
+-rÎ´¼ì6ÌôoN%Ó$b¦Lt±`ÿ2z®ÒØ2»
+^Z£Ã'»´,ä{ñ)¦úTr
+-µ{o
+&'ñ(&Ù&©ðR_@âNR-,àJæó
+Ö<goÓTFL:KýòÆzê!~Øî	!j~5	g Dæ¶ÂòWvm|ôª¼,&óßÀz%OÒõ
+¦°ÈH
+~Â¼øò¸Ö{§Ýz©ð¼éB¥Tzmaí½Tp#cÞe
+-9ûî,½¤Í¦/­¤yitBás»am¨ëJÈø^Ê£ûV´±
+xî,ÂÛí¡Ém3V«5´ùv.è´¬×-øÀv¤Àkò¬=ÍçÑÂ`%lù?äCí¯¸ËgfTGè¤ò;³}°¨%
+ÒA	gpRÂî4°
+-Oc°(¼¬úæÞ2sjn»
+©±0SòQ£Ë
+-Xýi17i×Íï¼:µéÕ
+-»ÏBYòñ/ÀuOéÞãbh1¯NEèÂ¤jêkCtF:lÞËBT¹g|ê¶wXEûóÖnÒ¬7²
+-dz¶¹íÜbés´fL6¯æ¹
+'K°å»mÊÄJÝ
+U¡]Ä
+&éf
+-hÃÙ
+¯«N)¥Ä¬!UØßxËº~à@ ì\£.t,@_Ñ__îc1ï2+ËWù)eKqà(Úç(Àzî>t63ÊÄû±eC9Ë
+
+-Ø Ñ a'ÂòÉgÌÂ(0×¤Ù3 ¥­o¡Q`.°0Ds)åí¹îLuÑaóMÉ¢ÁÓ+]V¾Æô)µbê²¹²:04.Ì
+¹¬ËIï¯´v
+¤7²ÚasÄnÍèzZ)SJ¯kÕ<®¤Ø.Ó'»T³¸-+Å
+- ¢yQl>WôÖ0ìr ¡G_!ÚIðxð!>ï¦ÊÇsÕ¶æ
+î§õ:ðä§M¿îª¸±¦qAñxÔ	(!qâ÷ØTL÷Ô{¨¡Â
+-èØè¾¹:5IÉÞ²iÎV¦4Ríõ`yú
+@»¶ÎÒLa~°fÒÏTÏX·ÐÆ-Ë¼1ã÷¬%i
+åâ;}`VêQ÷ªÑ¶¢ñ
+O -NH÷gó Üyú
+vöëÆ¢nç,Ø6kå¶õ¦®a=pø|ïäØ5²ñà{Oa^¡Î±±Éwßü<
+-v¨BiÅ¸fE±-0ó÷ÇÓ÷ããc×9¤<®U¶rçÓx¬ÏI(ÇPT$ÊÍüÛÞ\íYº5±./ã,cI)'_"¨9ØJ{nþB)T¬«°N^6:õ
+¦ôýQvÊ¶Dó×'.óÐÍÇO*µû¢_ç¦ýqeHGÏ1ÍÏ0»»°ä3)õk)X­²ZÜ4m® Lî«@Ó½×Uÿø)pÐúQ®ÿÈZ²X¸ªG/ñ ]
+~ØÀ\P$Ë2LpÆjE@!/;´ø¤=>ôL²}ëÆºkÇÎ}nñÉ½(DA5±£{È«·i]ðÄ=²
+-;AJEùMoSÕ<öØ;à¨5£cµ¾Ýo¾ï}ËMHèò*RÄg>~zÃû±ËApzê:ÖÉï<)å!ï)áÖÈbVv:5¥
+-£om4ÖÙ/UU
+NÈI´tâ3¬¦°ï]*mûÉIÄª½
+*vÂTé3Vý,0»¨E.ÄKFkJ®^q«}è'.¤í8GT3
+ÃÅ"rèj]8à{ÉL®%{3/	±Ûyñçò+^Ë2 ë
+-»ñp^þù¼Ã¨6;ÌNe\Ö´9¶±ÂÎ^Ú0¸Ý´ Ì¦%¹©3êz+ó*ÙÚ:)ÌßÜu-4/	
+-6ßU~)ïËÆ"3TwzáuUNgK¬¬çäÄ:Ëµ
+IÀúwXçm"ÂK{_+¸RâÑyMÛ¸c³\}ÿ
+Ó,d¬íØóE¦HÍÒ4bçájzRÎÕ¦öñ%8ò\ç` Îáû¥í_·a 0§"4Ú µTP¡;	`üÕH"ÌM¦*'½ñ¹Ý1¸zÇ
+ìì 9B!Uf¡ý¼¨Ä9mwd'ý0ÝBg¢ºPb2é8;XZ«½ó
+-ÈñòæöÚ«¬l¥ÔIÀÒ¥GåtO>¡æ´
+-õÛBBò£ÃI98âÏB_»
+_ÏÖ©Y-´*ÁKØ©?
+x}åÇÕÏ«¯k¥DÖæ2éz§Dì.OÖ;-Wò\ÿòæýõêÝõçõÐrõî·u´z÷ý÷?ý þïú_ë¬~¼^ÿüæÄQ2ÿe>÷®Àº×ÐÔ¿Íq¢ÙWÍú¼ãß¥CaêÄ9Ý¢5X¿*AÈlÁøÀò8E)þú,ÝÝb§ç¾l>|VÄ(%¹õîÃç7tdÐj:%ûÚûÆ]:WíDøIB0æ
+-ÖIúÒËöad¦î*b'
+Uþºj
+bTº3ÈÑ64Û£ñóêÿ-)cendstream
+-endobj
+-331 0 obj
+-3923
+-endobj
+-346 0 obj
+-<</Length 347 0 R/Filter /FlateDecode>>
+-stream
+-x­[IsëÆ¾«ò#T9ñU0V<ä=]ÄÖMÏp°ðayÒÿ|z¦gº¶+±ËUÙzùúëîñ§û0âûPÿë
+Êö.¼ÿ+ü÷z÷é.ýy!Ëöþw_}
+a`Þ?¾ÜEæÅ>º?
+÷Çð
+òûÇön7
+¼?áåcu÷´;«V=|ØGY»Ï~xüû]aîÞ«aªK5º/Ao²Câ'»b
+ë×NUzâôdvê]Ýé_¢$8Åö~¨Ô LÂàä>zóYêæ{Ú]
+Ó«ÁÂc?nÅèúÔEYÂìfîcº­½ÕÓYÿ<wëUm6Ýp3ßAÿ[³À¾xÚ=Û=©¡î^8`#zoûät
+âû(ÓZ³%B>U?Ô¯uW40ô ¾Åå
+á9}¶û
+näÈ"[JgWtvg$çyÐþ!gq©úõl·s ýL 1{
+-³rÄ¹'<0«,&»¢ììkauQº~6G¹bG$M-L½ò÷û´«êÏuÅû³RÎB¡Å~½5!¥Ëjg§ w/G5ú}ªßÃ@¥³
+-úÍ0NfÝå*)¯Òýn½N
+³fnJà
+-}-%ìú¹©¬µ²(HPn[änFj1kyíHpP7*|0ß'9Çâ¬zß<«0³+% z7^Ö,
+s
+Ük5höÉA
+g<×£ï©ýË¤:ÔStÔ%ôÄQÍZ¨F'öüq
+.C=u5_ÒÿÓîÕ¥9Ìx ·ô Æ¹FO6Êb
+	ÓDc+«©ðNñ´kÍ¦|5ìÌö¢±Å¾âSp$³¨ÛKSµÖo*]äÐ@Æ ÃKj{Tï$ÞäÀâýÕp¬ãÆ×
+|è/ô>Ð´âcH¦$.í
+Ä¥liEWõíÊÖ@öW£XÌQ,9é3­|/vQÌ
+-ÜÉþ=ÕÁhÜî{÷FÃ·ï
+Ðã(gq[ÈöÅ}<
+´}¤-CÇlO
+-FS	8Âè
+è¹h®T(ôR+ôÃ
+-¡g
+Ï
+wÅ4apÚñN¡jÈ¾oþÓ®UÓ\ü
+ÕÅ¿TASÒÏµiB+4Ã |EM<óÄÛaú	Ñ
+7ÝæÉúâ=0áÓÅ4ÅÛ¹.­p)Àï(&ß@Qæ=Ø3Ç¶h5N15áê_wv
+øøxð?QbÁÜ
+-V²`°æ
+@­*öÚ§pÊe ® ¥!ZÆcµâí#-áéyJóIÓ
+-ÉQcÜéP¹çb<×}
+!úI²KîQ½_îø
+üñ^"¬mPì+^íã0
+-$ì^
+-Øü3b.æìbÈ~M<ÁÈ@
+ëÔhOÅ}mô@
+Qô/ÖÙ7¬
+-ô¦
+-äù1oÄãÛÄXÐA7Ï
+Ô0Ã>P}´
+¦L
+ÙÒ8ÓÞEX
+-Z·ô°÷UÝDF
+TésÀGýùñ >×ac r§^ ÷ÏÅä¯¾;eû	mxn½[@ s¨øHØëÎ$2!Òí0GC,È«ªÜz¥ÙØyA $wÜZe1
+.Ò×
+éñé
+-«£°&HV3¨¦êÏ¾E(¤f1)´*@Ú¯,<Y§ZfBåÂxØKÉ=m#ðªz8Ú È¼?!X¼ôC[L
+-q
+-Ø3Ð`&)ªÊ,AÔÓ[çTDIjZPæz`â= $àK"«CùãdjuªÀñ§T8þÙ­02òX´IÚ1
+kÌVhÑ3Ú1ÙÁsÞ×Ï
+ÒfíàaX)A¹aHÒGïÌN èµ
+Iñ
+-æ½eÍGiìD©[ ìí=Ð·Q+Û0ùEÑÌ<0ó¨4d$bA$³E õ50É¾±w&µ8_J;ÅPTwe­Ý
+exÌ¼Üªx¯éx ´Kþu¹æÅð³÷`B`iúßxDòsC¸£¥\dê,¸v
+TJ¬»(J °.{H4G_júîüÌ0X÷ÎÛACsõ²o/3|ì+¾òEµEöÆxéµû
+Oéª Hñ¢da­~zÖ²ÉY»µÂEKÜÒ
+$êãnüøç !àµ×õ+Rkv½uõAØä\Ö&pâ"ÀÓîOj,úÈµa;åÌ
+{±Éº,PV¹ÌÃW~îl8ËE¢UzSÊbâÜÿa+Æ'!2ÇÏEÙßª 
+-êmãâÏã(¾iv©á.ãw
+1b[¥Hj	Ý5¸ëüÌåEó`0>[Ìi.Å{1öÄØ1Ùy¨6×krä~{öªÈ"æ¼óheÙ´I!Y& áîO\Ñ1Ê+CÓ¨~2ÚôLìN¹â+ÉÏx
+-VSQÃî¢Aðó
+-XòñÒì/z^ÁÐoôÖ#
+-ÿÔY9$"åä¨6³'Á7
+9x »
+AºÅ^ª¡
+-ë$+3
+jaSáÙ:&§ÊuÓ ¡P<½Púy
+%ñ'Q¹
+-»º9!gSV@}¼ò+ÁÀÁÑtnçM8¹G[s3
+¶jÌ
+-GU\2àe OX µXóñ#ØúÓüa,¡ÒÇÍ¡E°
+/º]q_4ª \
+ef£¢-2õ`./E=ÁÅðÊÙÑ<¼¥ÚOýÞ±\$ÍÜ*+xM¨¬ÑrDÖLÿ
+J
+-ëÚX:q}ÇüöJW]F
+-ð²lÐ­ïésgK1,ÕåüúË7ð7/¦­«#-Å¢´Å
+nKÊégýÜHÓCL¸çÓab/ÊaãjÏ~áØÔ0H¾û«
+-ºhT¡,Ä[9Ðv:ü£H*ÜýàbÀ%
+- ²®±U³2%Us­IHXO²¢öþ¿Þªq,Ð.SÆ
+ Ä»3îS"6%<á
+-¼fíö=â¸B/sy¤¤+S:yµEá£p´¯_$9ÔðûTw9ÀW"eÄÓ³¬ù©¥4j,ßÁ
+¸
+<=
+Õ"2É,ÓØÊxAÑ
+àë±!2­øãõN3×Ãë·ð¸«¨,iHõ)Eï
+-Ï ¬§§<Yøìöz`<Ü©wUÎîÅ>ÁD^6&ëµ0­À3nYáï%Ë2¬p]Á	Ô¦í±ÑkP)ÕQCÛêaigÂvO¢»37DÈÖznÊÔJ
+-
+-_!·¹Ûý
+þ3Á
+¼>ünì[õvFâ	J«+JörB"¹öÛ¯Væ)>K3LO¢[U;R+xàz³I:ár½~¢B×*Þ
+M`cçiý>³/YQ"òÇ(	ê½U´í[wo¬_0
+¯Ïx¶
+#ºqÑ._wM ËÑTv7¼
+iqký^'ÑÛÅÅ22e:éÆý
+®Z^Ku Ñs¯!srLòñ{î~Kâç*@¹iàÅåQAþV£ëÖh:déèQð¡¶åª+\9°Û·ugá'
+-å É0Çxaj_ë¹ÖsÀ²@õ#PÌ5´xãôVÀ´%
+ØtU;l'Ld\NÏÓïuÇ¶Óó+¾x¥ëé h
+?_>ÍõäppÊÕ³%z¶½Î¡çµv))¾ZfÙ^
+Òê±LJbE"gc³OeÖ['ÁÛêÎ÷g3kþ/¦L¤D#©¤[xJe{)yT~F%fV<éÐH§!±@¤	
+3Çä,
+-µòå«U¸iÆuQ¢ND¡Ü
+-P0í=ÿ¨»Éû&nV² JMEÝ Xü¿>ÓÙÙ»¨2GÈë-e?_ÛÈO6næ
+×
+A¿¿QCx[t?}ÍC«ìMª(dâTÿ)¼²Ù×b%U¦IPV¹{
+ë2CÓ¯7'
+r
+-
+×r¦(
+êßÈ<R!ßiÝ0>ô&±7°ÐNöòªæq/HbßÞ
+-24EFÑÖ^B¸¸8Z³fbTir©ðúÉÒ-I
+þôÍ·>Ìãl*H3ÒÖÏ\ùîÉfr2¿ÄðÔ_æÁ!l¶ÐÈÕc¼ÕÂ
+ÆXl]
+
+-ùm 
+K:m`&YSä¿`ÆNlVf±¼î°)³ãý%\ºÆI/Ppò^Û£fªBLß|øLëÊÍWN©<RùÅÇ
+-Y.âjùÐ?7ªE
+Ï#Ød½Q`ZµÑ5|Jà°ÉOÅß ÉÅ³í{çO¾o j/çb¬×Ç)pç
+:O£.QçBªæÇH©
+#Û® (nW
+
+N?ðåË¸¥§©óÖ|&G
+ÙjnÄ¾L$Ô C:,´ù$îËôy¾B¼ÛD÷É!ô%$
+@UGÍ7ÒJèºÕznµ
+ÊK!Éª$üýÅ^ó°LLÐ
+^ô'Føï=ÙÚ6q|w±5'@Öc q¯Ý^Ný°lAÊÂîAÜ¤hi¨ß¹ÕÙ¨äw;Í¬²ÁÜ±}sqëÜö©Re]QÝQ~dÉ¼--
+Te3qi?JbÑ:ý=mpn¨ßªÿ§¹s9qñZøP/ªsÔgÆ¾%Ã%ßf¶e
+A¯º«pë?wéËä_g¿XÛNÙ?.îbqf³"Ñ|÷Èã¶´Øæqù28m¾Y§EO|¨DÇa^ß´EÂT
+
+IxÒ>ã{
+
+ú(Òüùñî_ðï×íß
+-endstream
+-endobj
+-347 0 obj
+-3791
+-endobj
+-350 0 obj
+-<</Length 351 0 R/Filter /FlateDecode>>
+-stream
+-x¥[ÛrãÆ}ýz«V4î$8åTÊ»ªÊkfH,.\ \IOÏôLwc J²í-¹$0¾>}füå:ÚÄÉudþøe{]ÿ
+þ}¸úrµÛ¤æûü\¶×¹»úñ}¼
+ìúîþ*¶?ÜÆ×ûèzí7Åîú®½:Ü
+ë¡~÷ÃmGQtóé<ýðñîW9LWÀãw<1
+kø½0¿«aÒeSþù¶îìó»díèyÝwudvHø`þ[7=]¡ýÀõÓ©QºóS¶õtìÝ¬êIéfc¯Íî:Î­ìøw<Î¨Û¬|òëO~aå4¨w´>ÿÇ÷ûíYì7Y¹ùëQýwÿ<UôHFô
+í¨É~'nZ?
+Í0I´)2²gM
+ùoä}â­ìíèïÝJmÄë0VÁ	`×0|
+mRÒ|Ñ`
+ûDjÄMa­cWüIµ 7	½aæ÷kôlÌ·Yºobi£þä×\Õc9èÓÛÈÜ6f`;£âx»ÙyÃ?±wQ/Ð¬~ÐÓ±õ_håÖÝï7)hÝÍBÎ¾rH 7Iö>«®ZY|ý4ÕÝ(¶8õþ©³³émÒ@>súénç}ÃÂªÎJÑ<üj¬ÀÛ¦úÉ/Ã.Ý/XldçÏ6{FÉM[æÌ<ÄÉGÌË}²ñËº;Â`f¦ÂlÓæ·
+-N[lE(
+-`ë²wÏwh7M!á_`
+-ÈdgvK7V¨m üÙÑ@EoÓCæ,Ä*&
+½cióA&!Øô«
+¬y£ üJ­Y$2·UÓ Ìé¼ä'Ïx{nráÊA¬Ó3g²vB¬Äo*ýUWöåw·¿:¶«º2?ã×&DBÐ1}M']õèàKÖ
+Û9wÑu6~?Èë¼Û8¥´·yø¹ëÃºDi¯hc%¶Êùþ¦­©âBñ·zpoKLÙÎëÍæÐ3@Ì?tzy6'SëAwþ1Lúx¿ßPåèÏAÙ¸Íb»"Îé¡e½Uç«ö\½¹¿
+òw>?TxÌ»Õôðqô'+Ô³ª_¥òlñk«ejO
+8ÌV&T¸1¬A!U|µSào_½ïÏèH^BXo}òÃ÷]Y3
+'Z;¦YlP
+-éS3æ
+v (A§ð+·-Ã
+ð9kßñ±ë¨iQ?Í69e»G.¤ån~À(`h!Ë	r>èV7jhïß-ÃM¿?p&ÞÓXà%PBË¹6qWÙfû2aJ#÷³-|hÏâFOÛ­eÉÒ©
+ÏÓL(Nß»þwºlõJ¡Y_/+$KÆÇ^«WÆdEª=7®tT
+½8óÂ>f|\vË8Òã
+-w
+]#¥á§F9ë*&0=ådùxÄ	<Ó|/%Þ27"å±Î&½«X]áä*oÅ£­ñ
+2ë×Wé-ª^9&6
+-4©
+}
+-ß0BVëç
+-]eÁKÁfÚu9©»"kéÂ>ÙF÷
+`b,Ì{m®,ãõÒ|pq>rÙña`Áß²ÍOÅ´x/ a@­î  ]bg4ü7öHß¶¸\±Õs§K»TÈÔ­·taØÚ{ý8Ív^#Û~CïýäÉdÐ Kdñ®]ÅóÉ[·w5
+ÖÊ¶Ç¸¤×L\M97\ÛÚ|n]Øs:R+3p·x?ôÄ"W·[¿Ò&½ßWJï1ÑGûfí ýjë?Ü3\Z/I%ký° ¬Ô7í~úD DË <7ÁDÿØû%ØèB¸ëoÈ¨¸ÀÙFâ¾mê'ÓÇPºÐ
+-¢ê£ê¡&ô-¥QÚË"·¢°%\
+Àîö+ý
+Bç;¼X¬ÄÛ
+ö«ÛH>°­W{þ\1rä]'¨rNô=ú#|*8ÒÜ¥FcpOªyâH.
+q¨#|)C$èpsô?ã)y&E9Âr"E2sÊÐ1.x§÷ZDrAB@M pÇGÀ\ÞYEC©[p,dtójdÆìÞx»è7ãßS£
+-ìpËN[eéãynÕñJ¬áÊ;Ð: Á·Ûq\ÛW$Iß1ì1[nÈDì#Æ
+-Ü©<Ô§$5)_û £LLö0å ¹$
+P½y7»Ð w	î7^9³IBüÔ@Ñ]Ð¡3Fõ)h=E[tìOã²Id&ár&ÈØV9á{v-õº
+-t#®ûUµi5
+äûa,2FàO%ÜZ
+Õèj9Q^,Ê½ïHö×©
+ÀµìEÉÙ´ókØÜ!Å-¹Ä!%¸ÌLõ·¹÷^d]ªºjêaç	`Ã±
+Y¨cm )ÜÓ
+õÑ6Â
+-G=N¾pÄÐ)NqÙ
+
+-Ç {"Éh$(sh¹:(ÃL.4Á¤¢lÁæ(jÕ
+éþ.Ç2ÁÑ^§0É\;ÂÔ-né
+g"[VÑ°Å ËìPÕÃ;Z0Ø¢²éxrØ
+s|½¹
+ù°íBh¨]%3#®[èÈE{´>HiKÃ~¿Ç
+-ËiÁ¶å¢8ä¼9nÂT|©u1¨}hÆoGicÀ÷kÇù[GDÌ`b­À­ä1ÝÛ÷fþ+À§¶#g´í"ºº®
+\F¼Ôu¿êÁ/Ü	«p*CI:T5q7¡AgÀÛ/jò
+ÄHâcjç94pVDõ*''sæÒCp"â!ôäÈbR
+®iÎLu©'Y®µæ@¸ÐÓ³ÈuËáfw¸!ôYíí%ºÜ?âÖ;,z«.m/QàÍ:rg6ðÜÙ,ÊÏt
+êúVÊM$!GnT
+ÙÎäûQO°³Mñào±üÂá[u¦«ìÉªz
+-x]@¹*Ñ<7Dµ©òLiá(\4gÿî|æ2Éò¡+¾0¼+<:"³"§'
+B#5Õz ÛÓP]UMÞ]uÈÿ@w)0J¸mæTìÀ]ÙÌé
+è¹e R¹ñ
+-I
+	¯«ÀÒ !GÃFúk:¡4ãð þû_k¾Qï¬¼ÈÊsç09¿4Ùò³<Oÿìò¿ØRÃw
+Ï²8d­":mc@WT÷ªÆÃ0Ù?GÊ%­
+å[åàHÔá%¸xºÎäÄq®<ú 2º«=²­!n)éL
+/NË/zy-7üª^´8²S Güì+k´hn¸¼½¡ÜãÙdD$îRÚÝCñ
+@`ANVX¤c9ËÔcßðiîÔ
+Nzì5±^é\K%åB'
+-T4&©ýóÍ¢zcÓé6ùóâUEºíó¶UýáujS°MOÝð
+-ð`¥dåæB%ÃábQ\TkÌ)ôfÑUýB]ò
+×iò6æ%aÛ<»[>Sî¦ðm![¥ö
+-F.`ý}Iá0«ñ'CüÐ¦¨TµVA\¦	6	a±¤¾=KxQ
+÷sôâ¡ê=8Ök
+Qk¢~ñú¤
+hVÏQl.F xu
+
+¼Êk(ÑXR1cIEìÚ}éçZcýÐSß
+)ñNo
+z®Ì	z
+ÖÀU5çcÂDJ0e±ÿ8ü]1×²ïÀð¤ ¥»ýüØßc?Á
+-íº&g Lê¯ÎÝyíê6í!H,bn÷
+ß¾þ£Ícpøp[ø)ï£ñufÇFÌ9·|=ìhõo¼1(HWS«* ]»ZMk®µ3¿CÕÈÂt¾º%
+0ìåxlL~nOÈ%þjs4ÑGÐÕAZ}:ò
+-%q¡ðÞ
+ÝóJ*=çqåþç-.cý FãþRª=ë6AÏ/w©$}8©Þû»>xö²¸ë#-ÐÏ8¶~ÏójÞ¡¨"®è,àÅöóÂíB7¬Fe/pVð9
+-ö	%3õüÎÓÇV5c×ÙeuK
+x­]õDJ\7[ö[/qàÅn}ÿã8Õ:üâ
+#÷°Ø²½iÝºñÍ¯±aö¯Uá*üÂN+5èÚS9çð­¥ÌBvð= ¾ÁÞD¢#^xÚiç»
+tr7»%wãî¦» U8dëêG ó8u²þ®,w«ªêþ;tW.\úÞ4>N2Ù®49LçntqóJw¥
+-]]Ïåír¹ÔwÉâÞêäoÜëàjXô
+¿ª®üÖ;~
+%³£áÕ&èþ)#;/ÀÇcÿ`0C³¹hé×^1Ô>×&¡å-'ìaSy¿©ýr:<à
+lEZöÙOb!-7F¹1gÞËtÊ9õÜ90ÊCæ·¦ .¨hhÀOºóÌÍOõÞ7T´çÆyWï·s?iïL´ÇAïø
+ÔHBÉL\ :ì>º¿Tåó%#ÏAM­]L*|·§áF><·m3çØ_¨\ÅT¯2¤,<
+P!
+ò
+-îkWT3R'æÀÐ&¯Â¡½:ìÏ
+kã#SQõ´	Q>Vr·¬2¡ô¯þ/"!Cê¤é/æB3¾pA\ºöìÿúàn
+-ð¨ð­X
+´Þ&±Í¼-i
+óÔÏwW¿Áÿ,
+-Èendstream
+-endobj
+-351 0 obj
+-3741
+-endobj
+-357 0 obj
+-<</Length 358 0 R/Filter /FlateDecode>>
+-stream
+-x¥[KsãÆÎYñ5wæà*nEÂOÊÁÞ8±'~¬ª\	å@$b<(<V+ûÏgfº§»1 »âc.Î£§ûë¯¿}Zm<?Xmôÿì¬¾Ú¬þªþ=^=]í¼Pÿc¾³zõùÝÕÛïü­úa­î
+¯|óÅ¿ÚoVÛÍÞKv«»úê°.ÊcÑ¼¹ñ£Íf³>wíCUÔ½ýsû¨>ÅúÓp*ìÇÇ¶«ßüp÷7=~
+ðáÞ"5Ç]~µþl|s÷g;oà×ÂoåÏý¾þÝÂ¯c/´¿þÃÂ¯}oc}ýxïíìÏ§2Óß¡ìàÙa}²ûM»²§}>a`ûEWMZ©?h¨szL²Õ¯$úQÙÛÇ¾ÈnP[²RW§§§¿_ãâö>­.òb»³³¥Ç´Ìuä÷o<³ø-oè}ñA?ò·Þ6±û):³ÒËGXöýXÐz­Yí~çíì\fL1^S6Ç
+q2óÃdãElË¶Ì
+-;ùú ÿ[
+æÅ(¡gØiëØIØ
+-Õ
+|
+u1Z
+'ïù¤è
+¼H«­
+NhûmäíV~¤7¥',c§ÈKìôF´57¼ï¦ø8 
+ÉÝú"Óçl,%^åÍsóØ>
+½ÈÌbâ
+
+e©y%è¶Yªxd¾þÇò|¶ßE¡··ã?sáHy1³	ç_ØÙPÄë~9òõ0ùÊi»kóÓ=»Ü³²¼~sd?U
+D¿íËú\¥ÜD
+-Zaõ¢ÉÚ±ÁÉb2':É©3
+ðÿÓBÇ]óâ1
+¯¿Jì§¶·¬bgÈ|dÿºW
+Pé³þ`æ
+-Ôá<z+0qÖ)7=¶
+-#Ê
+.Ü¿?
+#s<lRçHè'·µÇ}ylOèÓÜñsÇæU¯}Â!
+>ûaÚä8«
+-Zy9Öè×
+æO0òzõØ¥çYS¸ã²cºÞçC¶Ò¾£±o|{ûöýK]ÕÅ
+-ÜðñÙÂð0
+-{°d´¦hzÌ8w4
+þY
+?Viw,èO¸K1-ú \ÀÀ¨y§OÁ
+-¿àê9Àëýg8¥$úhËÙà:Û±×f5o
+
+wÕ/=¦åb{
+-äbõ{ÂlÐ£0ãªùzÇ°¢ÑP$a|SFoÆr0ïªL·¥ííØÓTe!`Xiý&×YFO°ao\p©®<e	Íh
+kEjYa¹Vjc©.!T'
+yÁqâH¿´V5îAîEéÊ¸¡IT
+-!Ü8xÖÖ6c®¿lù
+0[c÷
+k¨fx{á\?0eÉiÚ³smW½Ìw!pò@7/´¬zXvy×6}ñ4Üãi /ñCîk°gh²¢ Âj[0=amØ
+-#±o>ªì³-ÒÁ~.ùSo_Ns>Äb -¥¦ôX¨'=ÝBµÌ³Ã®P¬eÌd[BoËqÁðf½¶øF;gë:7!0	FÁ;Hà,éªC¢1s2 . D®:¨m£Î&Ä'pà«Gâ
+-^Bè
+
+-áÖ:­m§^
+->g3ãX¸d°AE«ÿ»&±Ç
+
+ðÆ
+¦Â=ÔÙ=¿*kÇ°"Î35ºÊ7YW_ð "rã¯Ö¡#úEn
+Ëj0	"MNrÒ:·9¨2-èà?@é±c`ÇcÈ¸%a½¢]
+IbÑ
+jL´  y1®Ò_¸gRE9ùgU6?gBÃSj
+#`éË¸G¡ØäÉA@¦&»¶>Ã¼
+,ÎsLï®­ýÍÏáæSê½Ìw'Z_Öö48S³= $Ð)Áv
+,âÝz)ehTN)rTiKþ.
+ZÇ°á³!ÓL.@8p	é;çTQ=$¦üDTÁzÓ×nëT1s5VEß³Ò
+-Ëö7:õÌaÍ¼ápn8zû"òPâ2²Õ9å©weA}Ðëb¹ÌD«q
+è1:VD×·Õ,"cQoÂêw'8riC¬dmeUùZEBA\§¥vní9+k·â«¥ºVPRóÞ+H
+eìÑUÛ÷nán'#|¢æ¤
+
+sSdÕ}dv!Ðõcr	Ì!ðbÌÀü¤dtJuø]Ù+Önö²enDYo7g¼tpì¢ ³N!ÅYÝG6××¬ûÝ)ÍÚ#Içó0Ä#v-K|ÄrCTËä´+ö6Ê° )ªÈR(-d4Î(ÇÌØF2U)G;ð
+3cB³õºûöõâÕWöíø±¤VÆé¶l³Ù.­T¡"ï!íi©ìÍzÕ¢_ 'êå
+-w¾kVCYXD-Òs ±~b²ßùù@¤<ÙwÌúõk;A,í|Q¤~ïàå°d®ÈÚºb}ã°6¨y)¹Øt
+¡  7$ÕÅ0-TÌì
+
+- øÙK.A
+Bm9ÓÏÁÏ>ùEËaýDS[{Ëò
+
+FÒGÖèP<qüÏ.ßÃÉ	ïñÈ8
+àçZ¿'°ÎTIRèReÎÍi÷Pª2ª+!àf_;l
+-Gðèdas/h¢1*Íõå4PBIÈ&°§×Ú.ÇI|Xs­Æ<Ýò |'âáÐÂtõÿÑÝÅ
+ª
+Ñ¨oîUN®rê4VE
+-:U«ôvÔÅ,ð73Î
+ØVÅíØõEõHû£ýY7²<QÖ42õ¼B!ÉvT¥«Ä=hè¡l=É²;9êÔòõ=ób§cZcu[[g©.dûkKÆ·SÔsÿb¦¹$ì *6èx>"¡,MÂïI*
+-o1À<;éª®Ü1:@Ìbì Ls,Ù4N¿
+µBª[
+Á
+ªæÁ|8¨^
+±&<._ 3EJ
+-4&Í¸Ì.dXûê³¾û÷×ïõÈ_Ü]}{õ´
+-¡­z£xÌNßv¿
+-ýÂ8Ýhýüöêíí?VC7Wo¿_ùWo¿Ôÿ÷ù7ïÔnÿ¼úÍÕ·«oAV.±A`Èj¸5Ê]­Õ¿¾ùbÎée¤Üw)õáÚÎñÞx#ÏÁå¹ì§R$Ú^´`ZÖûø°àÍGÛ#¦g»å
+-ÜëÄPÔ9C×bj
+¢	ÊèB0U)VW/AåÞÅ\&´éU$òTýQÕ¤Ê
+[!OC÷ "É­Âð:ýÑ!ìµ2ÛÐ#P7[¿	bc¶Í_tËWè&Á=×>ª|BEd,å°AâWÏ]
+V$N}[Û$FVU¤&ËH
+©=FB
+¦ñNÆÆL«´Ç¶ªZs?÷×nÁµ(D0Aéáö±MËPØ¤U3­GÛËIÓÈ¦#Ù j@~§ò»8åôY5öÖ ËàzR» ]âÈçüMT{]Q¥ºÛ'J³HB®¬zZ
+-ð«êÉ¼ü­J~
+-þÔm¢ÌËNÃhwq-S}Z9	5g9<W+ @Vãe(©Êºä¤j'[Ñ81­þéÉ
+$£7S6*
+ÇR`Ú#«Þø35!¢PáWµúb]ÃNÈès}Cwdp>W:e[Ð"âwA½½ ¶ÃWÎ:
+-
+[ä8ýÀää(Çr5Òb'¦±Z¢Ú	y[§ezT°ÝðÝ¡#
+Bà
+ÜiC¨Ø©P?«¬¦ÄªòEÐ|tÜ 8¡
+-õPÆò<åýïg)äf75n-QXpøsM©ðÓZ¿+&+&BÑãâìÖÙ¿iáïª¹ìsªÖÒ±Óª2á©(,zíÑ¼ðS
+½b Õ©P\
+N<]¨rh\©e=IÎHâf­ÇâÙEÞÓ&®Ç&ï
+në¸
+-q¥+Æ²+PÅ}ÁI¯óíÌëÔ(cË,j¸%Nf|mL}Ï)°²¡eµDü?Ý)¹
+@ðÂ(Z1ÙIüaT§×&`o1MFË×)	ØÈv½ß "{ïÜÒàQ	8bÆQ·g<¯Hz¼}4í~ÃRû¾:$ÅMº
+-Ê
+bÄ&8ö|!ÅöKe1
+ç¦Zî(Ú»âÖ²AØ*\v¢D.(É~³è¹J^´Å«Öaø$]áâÅqò±ãsE^Tê7´sJjr@_Íw*J{'Ë÷·R à
+å¦Ç@ÐbÏÀû¼§. R=UnGÛí
+ª]pJHVyóã×$²Õ4!ðA¿á]q®RÔD
+YÈø|D£×2_c>¥
+-iÅx30Å5f8ªÔ¶¡+%'XÞ½¡d-y98¢lø»IEÅ84a(eK2ºûcÀ/ÈÙ ¦Õ-ö·ÂprYk!ssV!
+-Þ
+-K4ÿÒ,;Û)q/ûQ¶[JüÐ&½3Yò¯\%Ål@¦vÁëW¬+:yÍ§oB°
+-ÅÜÁ,zÖHÜiê+¨¾·|%d¤4¦|Ï¶ìw¤+º"ÍN³
+¡é`Û¼# îPNjdnßcáóvGñ4ÑÛÉ!+Iµ¢ªÄØà{
+Í÷|'-â>Û	ý/*0(^Ë&ô©Ìs,Å¼ú¸KÛ&g¥æðÓýZ}ZÐ
+:f¡j!§Ó6ËOðþt$;»xÃLPÇSy<a(¥Ýí
+iÒ</	)ØP\ÞÙsm5Ð
+ª|Ì°	
+bäÒ¥Áµ®#2ùsíoëÀÓwpm)BÙOc#.òÿF!ÈÛv
+8EÓE5ðvI±h><MJ÷ÝcqïîäðàÃzì¢Å48ñsW¤}k¯b8·T.i½Ú±^}wD/$?:K÷ä6ûÀq ~
++ ½èr?4Ã|B¾pr«ZÛrÍuÛ¡Rãõë¼¨
+{9Âe3¯D'49YNM5E+Ò¥*,¯0¸Ê~©¼NG©EÍ]ìMn&=ì¬ÿÖ nY';Ýãu3-ðô
+-Mü{7þT±\Óª?Tþ2µk¡®¨T¤/t=Ú®<Nþ2PÊDÏçl
+º÷RÔôZ}Ó@²~Éõ[¦7ñíÕÀ±E«endstream
+-endobj
+-358 0 obj
+-4084
+-endobj
+-370 0 obj
+-<</Length 371 0 R/Filter /FlateDecode>>
+-stream
+-x­[Ûn
+¹}Wý=©·ï3ó
+-²ÁÛBöaÖ­
+jq_ä¾H¿>$«XUÍiÙ5îé
+/ÅªS§éÏ×q¤×±ýã/êö*¾þùÿtõùjeö?÷@^×íõ/wW?¿O¶æÃ4¿¾{¸JÜÛäz_oã}Tî®ïÚ«Í¿ÞÞýçjkÅ×wÇ«Ã¦5Moo"ãMÕ
+Íei/?Ô=ß?¤ñÇÿãYOg=¿l+ÝëÜ^õÔ ºZþÎ½¹°+Ý|Ó¹øz¯§¯þ³ñÑWOÃÜúÛz¤^ûNß¾ýx÷÷«[7­¤°sSúAÙéd0¢Á4Ñ¼ß©ë¯÷mUã¨F'Ã}Ò)þü¡üý0ûSßUþZMºïÆËÅÌ2¸Öã·¾õ²s¯<Úí`ü4õÁôÞº±¸¡W'céqZ.ëªQÔ­âÑô<õºe]ã}gldû(ÏÁM6u]øûßàFûÝH÷3Mó¬æA®Gßñ©wîËhßll¥o@
+-
+x{ýù¬k÷AaÜÜp¶ÜæY¥´úþc¥êÔ­qæ½drK
+¿G^d~ÿë<ÙfQJ¢Ô#9,©{&o£âµUEk7¶UÓDîmB
+6w¼¯NGºîÛÇy2#wîÈ$fRÖfYÂkh×ÞÜJ{«nóKÛ7ÅÊÜëÑ8
+õNó ßZlªæÔ&ú[û È-ÔÀx5Ù¹¨·Ø	n}æ¡
+-ûÕçÙvE£=¤Û®,©ÁõRðVz'ÕpÄ½nÞýÜ'-£\ÀÄëszÀîv<ØiÐG]¹øuk
+ãý¶2O,ØÙ>·ÑÖÉawvñs8lÒ
+ãÎ ª3ö1p{4Ý;«'lU0°ãQ»®ÔNÍûÝàè)r-³/y`ï/#ÿ®T!&a\ÑÉ½í¢Ò[î¾²Aå¬ä2R
+Þ9¸¯<zº}lÈ÷­_7ê`Ií¨Oî¶Ç®
+-C)ßPå f\O\»îk=Ôsk]Rë|îj $ç(·QFÑ|ö
+-«
+-)-:Äõè<=o³}-\²Y]
+
+*ÝPÊ
+{4HIV>ÈY³Iü÷y#µçà¯ä1¬Ë]F1Éñàé)¨J¸Ýeo®©+|ì
+DÌ^?°3¡ÅÜ
+þ¾Q­ïNÓ4jrþ
+
+V÷>þ)+âßNI6Óæ6àcL'ÏrKãdþÝêÔ`üÅ`ÆëW`¶.åÝQ©5\#Â¹ÀºjR
+
+cJ^ü(|"p?
+Ïr	Ã}3Î÷Ö
+ºî¤h
+e	ü`¤F&Ý*vÒªC{ori	U%öU`´£<wÚºÉ
+-#OnE²ýÞF¹ð
+ZAïHxl3;Fh,ãxàB[Â
+»
+-ÞÓ*¡Ø±ffs\2"ÌÒÒ ¿ó-qÅ,m¦¹ó)Ø$Eî
+ãÃw¯T;Þ`´dY`¾ý|¹&`æÁ§7|öÆÛíahnwÒä<:ïþ÷þQD0sÓÐ"_[À«iÛ}£°5ì<p)Ó&zþBÈászý°Õ
+óº ½8­
+Î 3}uÔ øeÌòOÜ'´
+øÖÝ°ñ?ïâMÄ	QdñtôµQ¤sôæ@`I9#éBæ÷
+" êH
+æD
+¼c«E
+ËÛ{v¢¾S¸ÄÊ|_nï+<n|Å?|ÐHû$Iµk´dLk¼Uê6S¼Ë	Ô.Ú^
+-îº
+-¦5pYvqAÄÀGpÌérÙå1©g}Ñ¤hõ
+-6bÈñóé\y	þvA
+S
+Ï,ÌE¯Ì>~1ûmÝ.Òåe|¼
+°í°SfÔú"feÊAÜ³äDá»z	ÞÉÖ£Ïú#â?¿O·1I$"û2ÛF|«BÖr1Oà c87ç0½xÁ®
+¯Ò?èa4¾
+`,w+TmXÁ÷m
+sÅ/æ<
+n°dÊlSH5¥UÃgåâI¹» ?TöR8§iÎöq,o`q|%Üæ ð
+õOõÜ (sN%f
+{fÐéBr¢²ßAëz¯ðøØ¥ØR
+ãÅ?S¦HBí9
+¾ c}yãº
+aNcÌ_e¼L
+c
+-
+Ix®ZØ ÑCÐó{7nöËÐ/OúÉÓQkÏaAñGÈ`%< n
+-Ì=l+iDÀs¡2aòó²H(Ð¤ðÃì	-$58Ä¯;W¾ ¶dBàNc¯3üã)P.
+
+oüòû
+²øÝ´iu
+n ºh Ð|¼©êÁJçÃæÕ£
+ª{W
+»÷«iôý<)¤
+IVrå={× "-¹X5¾4b\¨/g}uõm¶uXxaÓÌ845 W@ï
+4¾ªæÙ¼¥n¨
+G¾eux>
+-Ù× ÌJD¾$ÙÎ
+ÒäãEõK}>?RõÚõT.Ò×½p ¡bÅ¡QeegÛ?§¼ä$å%QDÎ
+õ
+~±
+ÀÊµhí¾Frîèj Ï""z§óÐÏ§sØßÊÈ 'Rù4Ë2~ààÆì\2ÕÈàeBS1ÆKÊç
+-FTÆEA1
+ïÒølzù-ò1@ØþUríáü¼u[9«@Êj­ÏÞä;¨ù"Ì¿A
+£åC °¬ W"Bh
+-j_!çp2¬Úcu
+-G­JANôCHôþïtoì9á JããèÛ
+ Io$¿
+aôhj6G}êôa.9}óPëwöÚA×w äéb?¨ô-tûu¤.µD{JÉà¡UòTGº
+-ÆÕ­¿1_É} ý¾ÑyÂ`]Òï­Pûaù2ù6¼ûuï
+ã^ûU«cãRçÓ
+bFnä$¹RR]MYY4¸PªC{%d>>6ºvÁC/Íb7Pñ6ÓÚ¶Ns5 îK'EßÉ
+-=ì Ør&ý@­=ð¦×Ðß8ïÔH"Sá*)Hs#ò\»ï>3AïYý}X¯Ä½Ó@+öÎútfVïòîn·µ>mùmVÚ|ÛÒË]Sÿæç¹:b©0ã£!pKÑ
+.õTá7DeýæÝvA÷`[yÄ~¤ÍQ5¶-pÅ2¼øâ
+æen)¯þF«O5YLÞ!Ù3«6©ã
+-ÝÁí
+-3áRg?pxMzucc"c²»á
+-K
+·.tTÖÒ!Ì
+-=e\)
+-UAmûü6åhñS	&M 
+-=Ó¾©/º­ÄÆå>ÀôUrB·õy¦$ªLILeL$°n2ãéJ>T_ì9ZßeiTp\"@Ë³;)zP¦X
+JÑf1]-×KGUk/pÊ1^fÒþÑ0K¯Äðþñ
+\lwyörÉ¬þÐ [
+-ÁU#Cbóá	§'À{ã8·ø¢/ó ¤ÍpkÀÉ>-iúê,/EHq¸
+hYY÷ssôÔÀÎQ@T;2¯AÈá°
+-âïÛòÑNGP|ÍEY6
+ñÏI­MÜ}øÇf%ïÛ½
+-r.Årã-ï/Êîw¿ýüá¥mf\0
+û£]
+
+-KÌÎPs:ÐävyÏß`±'I@ã`ÉH³ùry#$ÍýâÐbGÇkÄjce¶%ïr¶G"Lôò4TçK<D¢,BJ.m
+r
+\s±Ë´0 Ð\
+-ÿ¡Tø¦ëÛVl®úØÛ¬tNÁ»¨DI7 Ëd©T%ÌÊmÙ9¤¸µî
+ã
+·;&
+£cß@b.JQ®á®	e\äÎ#SÔZçMÖ"+ÈzÂÍ÷Xl3ª·éUà½¹,÷þR
+-ß5é;	ÔxÜxJ>è÷£JfÄ|óãM ÁÑ¿»õIIG
+	DºpI
+-¼H*Öw:Dè}ÛË~d?«¤¸ 9	5|>ü¢'Îym¯f¨èÌÛZ2ªûj0ÉÃ°ý­Ê`
+
+òÖ¾ÎàO àÕ!É>"I4
+L$" v¿¿3èìkcBßÐáÉëyìµ£jâ º(Ì1Eó
+q )hÄÁiþaÙ:ì:3Ù¯&±Õ;ÿTk_K¿Üs
+-åÈàñÚ¸kÞ.püæâ@Ö9î¤?V!
+À¨ðôÝo¾ÃA½é;¯}q_Ä0¸MM3¼ÅW×NZ¡´9Rh
+_èOÈSwÖ¡}B×ôÀÃzB=
+-úÚmnµYÍ¡Fj/k¸çQð(¢«~u1Ûÿeç»jÆ
+GÊÜ
+W¿ñGìäqÁKïÒg¬0(oê	Ì
+-UDÉ²o3jhu½iøgàóßLû®Çcü
+Ùã;¹½¼±ÂÝ¡û¡J·|Ar¸2á²Ó*6¦^¢°´Z_[±\Ç>@q¿Ák3
+­aVx!uä
+«
+<à¢5hm4ïUÀÑ(jýÁ`»ÏnI
+-ÔÏFÖ¼,¾+	{$I%û/¡û»~ÉüÏÎÈÄ§ôk+=ÂâÓ
+_;V"_!ÎýsÌf9-iûNmêdÊ­&²ÛEQ3"aZì¢)Ðã $Ó }ºÏ
+ªqâêÄrÃúªÚ'8Ø_È4iÂ¥	ÒÝb÷á°zª_¹,<¿[ärUò lò²Öâ_#@UË¥;UîÛz}t±åæO;Yìò§`Aä ¾
+*/A3LYÜaÁ»å	l¬O!(ZÀèCèøÑB¡"¡½òÀd°¼Ôq&+K?sÞ"FãÙ!§3³Ù°Y¼äþØÅVH«$h­Å
+-V¹¢Ì½Mvî %¤ûjÛ·þzwõÎüù/ÉUú!endstream
+-endobj
+-371 0 obj
+-3960
+-endobj
+-376 0 obj
+-<</Length 377 0 R/Filter /FlateDecode>>
+-stream
+-x[KsÇ¾Ó¹æÎUHûª
+ÅJ¹b3ÉÒa¹kíÚ(:>=Ó=Ý½³ ì$®¸ÀÝWO÷÷}Ý3þx½YGñõÆþãÍÕæú/ðÿÓÕÇ«Ý:±ÿs/ôï²¹þÃÝÕo¿¶Ð0N¯ï
+®"÷â6ºÞo®·ý:ß]ß5W«ñ\´¯î~¸·ë$îW«·E[þØ
+-kû<Ý¯ÓVþüøê6Úl6+ÓW¦-
+-üÙ?«öXÅhxÛ'çîÕû»¿]EqºNbê÷Év¸[G~
+óÉ>¢u¼ó#þÆ÷	3]ilM
+ºÞµáuÑôÔgmï×;ßÊT'«ÌÖ{?7xÎc×~ìn<Þusìâu_GÝ ÷©3Ùmâ$íàýùue5´ºbûç'×|¿Yïçcø÷Ó0uýì[*l £1üËÇ¢«±êÚÁ?é
+ü
+ª©Àð§ÛÐk
+v÷ë
+wöì
+;|7ÿXÈô°
+G?ÄS5ÉQºÎÓkø7tG&`Ë²SYv­³8\¶³ì»UG.TÅ K"#¸÷Þ»ÆÑô¿z÷jMëÈ¬·Roßw~ä¡®N8ÃdÏÎ
+só½5ÕPv-ºPÂ^
+î;¸:²[tÅ.Ðv£=q¿³v Ä@7
+-þ£l
+ß([=öÝ}m
+3p­Þ½¨
+p¹QÂÆ]É®ºÉù~.UôÆ=Ú[õsÕ\ðî$r
+-÷áf½Ðá(j72` Lo~Ñ£&Ý+û³UþC=
+q§²í³zÝbÙö9º:ö-"óËzº/J
+-N?Ìê}p&î36¦u{Û8a¬'Ú¶À×w3þ¼ùí÷ÏMcf,°þèºJåêS×Óã§é:õ§°Æ
+ÊèvXµàjÄÏ¶²{ý¨ËbÇª1·<ê?Yûvfx5¢³ÀÓ$ZspwywêúÑÅFàNÙ¨sýgb"²Úm
+-
+e2¸­Ü¨¹xÍÔ.w E72m²éO"¯^»¬TÜdèêOäÙì M8þ
+-ØÀT¬6ëîæGA={ª2rÙM¿s¹@¯Ä(ê¾KWÅñíôÖw$ñ^'CþÁl÷tFKÈîà4ù¹8n@
+Z×Ã¡5;
+®×R§[I¤½kÈ;Øuù_nüÌë±:VÎ9­x£iÒêÆÞ=Îg|fqÊO¿DôËÛPÜ&qb­-PðooN%0<lL4NÉÁLq*ìè·±rî¨yõ!2ÌvÙBm
+;³O@|í#V_© Àgz+Ò,¶é:~÷ê&ð_µ®TâcrK°c+8\f1÷2Þ´
+È±Í<
+}ítyæóhÚ##Ý! lÖ[ÿ1Qârj©¢
+×Ë¹)ü~ÙæÇÁöË
+
+ãð^ýæBãX äôE£¸i+q9
+-#mNÄª1|G.»æqå:H\ý¤0c¯Ù¹ÏÅÌùæ;
+ÌéhBØ¬)<¦m\
+Úé­ðëFÄ
+ªðxÎmG
+!Y:
+-2
+-ç­XÍk
+¾×§sUÒ3vÜs:@_uÝWrÃ!°&îèåéþË>Ø*eÐR?¼;ügÜ¬\ÖB¡µÇ`9Õw
+a¬üv¡àçïÔTÞ1ÄºlcõéIÍ¦¬fEÂ>Qf&áß
+Oé
+¿Z¯ìz
+7 Ò¦º5OHª»eêGÅ
+-ZË1µ5¼¦w«ûi$­
+-9
+ø©àÕì÷hz÷ó:æ¸Í%3úA8ú)Æ©7lÕÇÞ|²9d0 /Ê¾âð']|»
+-Âê5y÷h3VVÛ Ù¬Ex!_`®ZRsEÜÎd!é´d/`
+-ºt)K)
+-L>ªFVãÓI >L¸(àPçél
+¥o¾{q5«AïÜU¥¡ÓôÅ¼¬Æ2ÖÅåÄ]ë=S%ô^]¹/`×«#äÖæQINqêüÓìÞèlºâÈct±¨j»×Ð ÷
+-Sê(¦u´v4·8µ:WÈ¥U&yy¢Øb¿¢Y*}ÈH]¤Â1çÚ&JXýº9¬ *¹¾cÃØg¾M¸º9<GNýmbûªPw@BVÔ×AàizÍJÀà6Á`_ÊV?Ci³sïDG|±
+sÜÏ
+ðÒÿåý
+AùúÅ0e³|¡
+ïùûu5§Ù*¸]ù
+-òÂFø¬7'3$ë¸4%!Úìfå1\X
+-,0åÚjtg³¥÷Q^d
+:f&4Q;ÍäÖéãxtÕ S%í5ÎkÊ¶
+-7f^f(b¤ÿý§áÒKÓ­°øR²9Á5KkP1Ì«@ ¹¬Ò¬3id>i £
+!½PRQ½ù
+-í
+r
+Ü´ HÜÇ/.t¸0¯Ëyö*)áÔ úYqÈKëEê½4¼²]:¸\Ergd¼_Ýîð_ÖHL
+ÿq6 óp?~Fç¹qa3ã$¿¬Ï|1s
+êì¯ÝG,²«¾kx@[ºÝÏÇv
+³Ý¼ç÷EÕ©µF{T)ýÄÇïT
+-èÜil<(qVJûj¹ªx)]øDE	I¾¥Ú§òÓìN¸à[¾ë¡ÔH®Ê1rÉVWIpB[
+»M'Tã9%Ý¸tB,
+EÌã§å(´ªê¬½T2
+îEÖUª{ÜtËgdæ}&Ä­åç¢ìÜ­s5KÆ7^267
+åÂB<«²
+añÒ*Ù^Í«Òî@n+³<Ýc÷(jwø?¸ICÙ'®:
+h÷è·Mÿ.Q$ÅÂÁëþ.'¬½âù,y»ÜNaÀ}.
+-ä7Ö
+-reäñªÖÅ-_Ó7ÙA©¸rü©ï Dë ¨|_óröä¥o¤ÎvÞð9TiúsÑLb×Gÿ¢Üs³QH1Ë+äð­ýÊû¡ba¬NÏ=ÐYékäZÝÕ:ß$»t¶¢Rü¦ò¬
+·Ê·;	
+-®µ³O\}Xé¿ZÊá)é
+-EÜfbSE
+ìX_R¯Þ­¾ío¦V
+²úÁÜPºQÄÛûe¨ýIû|¡
+v¹ÚÄgeâÚãùb0×®!·ÇDá« p¾í` ¤P2nyªßð¹Ó¹hÿó¶j×
+ØÓ:äÛÖP½+íBÎª
+É
+-ay~ã'{dLÕçÁëGR.cPUÒísõÃÑÐ]2ôÔËîIy§[5×wþÓ­TtºþW%%ÛUù´¦èå¼{»ùµîèS&þ·Ê?@þwC¾qÑö=T"u §r^ÌðmÑzpXCb'ðÃÔ´±èê291ôW?Fr¤!sdèõL¬DGuÒçÕÑANor>fì9<
+-ò
+%°ún:qæ{ÆÑ2
+-^°s(Üzrïb=î ;ó±6E"Í+¾×Ô/ >%·j
+-: 
+¨D­,ÔÍ
+IÅ)tþ××heUøÔ^ÿ½aêÏ¤sô=/ûéÌ
++[ZwÉ¼Ù=þàfùCG¥»^µÿ Hªjó 1Xõ8Dè5äðùµ4ÐíþÛ×ÊHü½8ÿ´pÅÑ>¡¦ëCþnõÍ[ ã°X9?1ì>&íQE ûû	
+Y§
+èõT-s-ÅÙå-ôÑ=ûøÞÆÉN,8Vøì¸ÍBç§ tª4­NX{¿#L§Ñ#½ò\ñùòå):WW¥HYüÙ	ÈåÇ/3ÌWa=
+
+pt
+¨hðÒI;¾l	¹þowÊ¼Hks<Õ¬ÊÉWøý ÍQ¢ÝOM§Ì#êéu
+-Ükqðn~OdyöÊm
+'VY¦\ ©]}ÌW
+lÕX¨Ú|äÔÒY²*!^8!s¼
+æ}5Ø
+-
+-ÕQ2U4ù~Î#geÏ¤ ´H^©Ò·8{O²¯,3°¥g
+Ã/æÉ>6Ð×f¼éÝ¬UÈV#ö£
+-_®úcïíä9Ø¦§kNJØáq,2k¬HXÇùwcrUW?:²Ð'åD0¹b5
+M|]p^_Rr,Þ¤s=&òBI&þÕßW{ý³/}£þ÷¨ätLLE©qÉ2ÚÒÜðcÇ²ø³
+m¥º«C© 
+-ÉãmÝ¹.èÄqëÇ~4ý<üÍ)`Vðó#ïü%´XÒró¶ ¥mÕé½¤ù
+ëÒ^£ùx©jXUih
+-1ÀL¼1M{
+Ù"~Õf§êÂm²')gsÃ¶RöVåÎ
+âÝürä°§ªoüÎ
+¬¹*¥FÒò(*ï[}sÔ¿äj×ªû¢zô6ñPØ±X
+ù(Ð
+M1T®ÙÜÄùi¤¥>N	R9ÐåÏÏt.
+
+?³
+-ûÏùcY³Ø1¯=÷·ÐprªvôË sZ
+^(ÑýÈåò¤þyN¦Õ«!ÞZáÙ¾þlÉíå¼
+
+ %V'KS[û£
+uüìì*Öå
+ rEC.¤zêzb(i¿´Xö³ª­ìMO"xpjÄ_Ý>âB²Å"{$~µÌWêÉWBBâÖ°/W©OîD
+Ë"©ÊÞ~æÅÈªeé´×e×þ0µ%KüD¼'ÕM×.îü¬«SÝÝÓ¶d\knê
+Ôry
+-~q;
+RÙv¾u£éù@VÚ-u~xÕß
+-×­@.9»¸¨«1#	`Á
+4o¹æë®-»òº|;ú[î¢J2á+T¾
+ bú©å¾î¤i!Af+»¦1­WrÍéùÂ"09.0ò$föê> ÜÎd¢Cÿ_<ÖÂè@4]ãSú¦Öìj©°]çp°U¦¹_
+Vª#ÓLÑ
+- TÈu
+-tICß`LÇ^í0QfGùóÝÕ?àÿ-¥ö,endstream
+-endobj
+-377 0 obj
+-4037
+-endobj
+-383 0 obj
+-<</Length 384 0 R/Filter /FlateDecode>>
+-stream
+-x½[YsÛFÞg%?o¡«D7GÛëì*±ãµÍè<@äDL 4 ZÖæÏïÌôôC²Sµål%+áÌôùõ×­O3ß
+Âoþ?lË
+ö/ýïþâÓÅÊÌ?öüy[Î­/®ÞKýbÏÖ·½±fAxélég^º­ËùúÉúO½RêûëÝÅüþTlóãñÞ\2ø®¹~i.\½ÍZS¼ôüokx@|4¼påèBµæpéEøZgß	¾²WjòNëñÒ[âõSÞtEWÔ]#½¾;[»nÄ;Øe/ÁÍç]1ô½¯´îÓø
+üW[µ³_Î¼,
+>{ÜÌOOïûóºm£òü±þåbeyF?©efÞ¼®Ü$Ã¶.í>"?ZÜö`VÀ©xÑÙ÷C>kÑº+!
+ãÔ¨[-0½
+'l ÛØ[áÛZ«pDçV£wr{Á÷"ÜÂÛÃÊ[â¥úÖ^XBEé®}QZIÊÝß:µ°Q
+P-´IµÛD±P¸¸m¨«½¹¾}{~8ÕÇÓê¬&p×·îÍ\©J?Ç[Õµö
+8fKÞæVkaà­b|ÖÇå}ÜX£vgm3ÞÈ7âKõçð½$}P3 è%ê×þ0Ï«s(\çÕùØGõÙJô¡}üK¿¿sj·MAgÚÙC­Ro|\½)sOªçîÃPBØÜhý¶s°LâÅtó¶nP
+-çÊÞ|²
+-;£{Ý-ðS
+¾¾ÅÇºCb¼=¿=W[óf~[NVüæ=ÊD¿æ¨i±¢Bã ]wªQmG_«ñ§{ûdòÊõù²S^ß´²fÚ
+êóqçÌÛfaÞÚNù`WoC?#SVd`&/Öo.>Í"È
+­§`yËlÄZ¡É"Ï®/®®_Íºæ¬.®ÞÏ«ÿ<ûÏsý×ÿýãâÅõìÍ7$¹Î2q¢?B
+5YæúÕ³§/þöüÅÈ|côJùAcí+G¯üyíµ$ä/ã/±7ikwqm
+/IÛ&ZkÒaÇmæ7{Õ°.rØDç):2¥ºÍµCbvðÍ·8;P
+¥
+ÿW5õ8Øà¥Û"/õ
+óz¹¬×{ãÀ#øúlÝ³¢Ç1ä
+-ööÂ
+ºÐAÞ¾á;ILøË©©ur*[|®¨pm¸­ü%
+z½*Þ?û®òéN++
+<àÖr{ú8£E+,Øÿú¬? Ñ$¡©Ãg
+zË¸û± $D
+E àäMìDGõM
+]ÄÆñÍcÉH9:âÏðöFç
+}ÝÝ¡ÄM¸CDRµOlÈÝýÃ
+ÊØÊË
+n}àSõ5Â]®¹ÿ
+Ë-Åjª!Q·EYhÅ£òì@â'mùvBÐô+HG
+ØcDöhzv.è
+ÕuúK]©ùa
+x1Húb
+8è5Å
+¦DÒuÝ|l]N´
+]üÆ":k`vkÛFiÐg#ý='£TÎªÚÚÇ°kóAAÇ{ÜL[jä`#ýußä§CRµÝf!éÍüKQâ·
+ÌákM±/t¦Ä%ìÎ4|_8
+yCe)Kk
+-ÕÁF[ë©1cn·¾q%¡G5Á÷"Ov·ª­Ý¼M¸)kÁ¦þþk¼I)ÒÞäÛ!¾úè /CÓÆÆó¦ÀÐg+ìò
+Jg¯
+³BXf¥ÚXÚ¢À
+ý\Søh!ÈÇôUM¥#b^ýõ¾¨c1
+-XLîÊ~Lö£CâT_AÝ#¡­Û@ëÆÛáì´Ñ[evò{ÓÇqâNUHE×ª¡jÝ¨+åbïPEZü©AìdV¶0÷î¨"²:méÇ
+ %Wh"`)¨·ÜX¿I§bÂEò;l¢áa}N3öF}A¢å³ 
+ew¸ xÉÖ]Õ
+Ê¨4U±Àm7æòð±BHÚÎðV´:_cË_;¯IØÉ)³AÙJvkpQFFnuúÖ0ÜÞ±à
+0 Ö
+¡Ï|À¾
+{L 
+G%ôñ@ÐFôÖÐb®Úu,¨V%8; ¼µÝkbþ±ÚAüM1öÕäfGJyç²fH|$ÒF10¡d¡&ñizsëö¦Â¢´1o;|¡*gìwjÚlLÂHÁäk
+ØKögd@G5 {«\àDë(bÅÝi~²_¦¼P#hçõÐûR0Qüx;L4#!¯t4FÈþ©@R©¸§tØ²sðØ$% ¬¡j4¡=Î
+-Ãs5£¾ØíÕPñqÊ&
+-zw	SçB*ßB
+-á
+ÝYûþgçn 
+§ä
+,
+OC¯g­)QhÙæ&äºzW+(ÄÙòuÒ%¹j>#òÒí8¬kk%á]M¾{¬÷÷Ãø7÷L¢/¼7¤*#RÎ2Q9Yi¨Ý%âÐ wô®;T&XÛúB »¥êÌàIpC´[	 Î³÷
+OqÌñdÉUµ#© %ÂÁ¹sÐWû$-&ýnð¹* _I@ÑÁ3ôû
+
+K&}
+´*EÎß»h<ì<í¹
+d¤1¯9~ëNÐëzZ9
+£Ha®rLlP2±c~9ßí,¸
+Rè¹uÕqÚU
+§'øu(ÝÒ¾ÛjÛùÛV`[ìÔåã3|THI*"VA¤
+_>Oè`3gF+ºTT
+h}JÆåÉ3PV&LÑÍ]]m*TÖ¡Î ôzì
+ÅÙ,þ°±mÉæ{È{Êé!u5¨-&ó4ö
+æ¯I¸.L:
+Èt8±fÛiÿ`w( ×ÐoQ;¯+
+ÒLÇ¶­ïÁ:z/_íèdE.ª­!¬×ny *J1ü]as!
+ÔÜýDëª¯é`BâPhh¬sE¢|>LE3Á]º,´¶7¬«Áìá,\K+ÊQç²"#$px
+Ì¬aFù¼ òÚ¡n]ØezQÎhí$ÛúÆ#hÔÞ¢éiÕK6
+{­OF?¶
+h}dÂAIg,yðúö>°4¼ø
+
+-¢dÉù ¡â³úÇÊÓß6À=ÝC	é|Åi`
+I0¤n	@NÎ
+Èêüq
+Â¾Å(¶a÷yØ-³Tº¦Ö&FìÞ
+-Â¶%ípètûDÏ_?}ûÎö(F-0K#ÓB	Wéwi¡D¶QÁAL
+å·/~1ÝÞ"ù=÷¦ÕbØ
+±ÝbäC¯3ÀØiôÜ£,M¾ëÙtY cñèl£ÅÉùË,ä{öz½~ýj$x]
+&½æ¬è«Qôþ5ÔäWºj	ûÁ¨¹æâcH
+T¦LìLìGØÄ»o-÷#0v!¢µÅ ®
+-Ó¬×Ê
+ Ì(©ceR\Ø¯Êj
+o»Â³¨ÇFê`ëæTh¸¸ßûÌ8°ÖçÆuÂ{½ÂDTåÓSHÃ©;@öZ vóäÖ¾â.¿ã<VeBÆHà{îâÐ^ijUÝ¶Î
+-eeif«d
+-eÈn
+5lÍ]ÕÉ^ÍtIS1ða£ÙoÓi$l'>Òð»¤ßÂÒpey
+5^¼ÿ×úÝØ0â
+°¸öÁ9Ç%qð=Ð#ç#þþÐ¹èëEDIx÷?²ýi£ùÏO_¾O1ôÖÎ¹Y´Û³.¦dïq
+^)³Ôß_{¥¸ìèZ¶ð'¤{54éÁ;yò
+ßþ¦æêOøÛdç»>iÌ}ù¹::®2ê»)Ó§"ºö 0Á+Ú¾ÉÁÆÚpä­/üÎV~# N&|q2ôI½Þ¨jV_¸h.L»èú4ð
+)wÅªQn®Nãsë° ÿý)¸/UÊ/s)¦Ã÷\=`oTª0©oM¶¿h{¢õaZ;EÛ9¢(êÍtGÎjÏB\uóA¿µÃ,=NoBÐP>0M­íigÜ Ø/Iu¼sv
+\a.å ¦üÚ@H$Ç
+-Æ±`	§¸Ï§ôÙ¢qöYT0>f¹eà´s¦½¦u^µØiÉø3°
+-ÁÔ8Â#©º¤ÁD¯£ô-Jþ#ënÈ[Û®yÊþÐpHWÑÑBWØãç¹ËÑk.*C| ÷%&¿¦½ÓñÜ:s¤k¿¾¼t²$ãè0&ÙM3ZÐ
+süDÂûF3ÚxÌh
+`[Ü¦¬4$&è(á³e
+-
+4¾¼Í[× õ!
+÷Ø_0Þ=h?6ÝMÜt7ßG$²
+-Ö´
+5îü?# {ô­qK«
+DpÂ«7â¥%lÈ+wsÎ\4¼=·6!g@ÓÔ\Þ­¢É¹Øm8åd³÷µÏh1Çì­*/íõ%%|(ø[{=Ìåï
+1JìNÄlÓHÉ`Â}Ýª¦á6©&ì"I®¬`F³f¼Àæ
+-`FØã±Ï
+-YhQº¬#ðÏ¯ÆÚH¹¡ß·Ëz9
+Ô]£QÇ¢<
+UéòHZ
+-ËÆ,V$ùuWoÂÇÝç-Y	Q.m÷$!Â[7yËv-j£Zù¬
+ª\ÿ0ær(J
+
+ÓèÚÏ
+öámAk ¾Ê;}ûûØ§#î¾ 8ªÑ
+µ$øè±¥¥°*
+ËYáXQÍ*æ½2wl>ZÊ0¬,hl>âOúãþ¤ýh¼Z	Ã#àÙûB}Fò´wþá$5
+-ïwÐ`*2[f[ÄBCã×iÛ5ì_1.Ð&0¼Û(baß6uI«#Çm;
+-\}AGÍÝÃ)÷Âól¯G+?VìA2å
+-É#ìàH½I£ßÓÂT«×f²	ì;Î?­)·n"F
+R
+ô;}~5W}­¸Sì¾sÀ@¡ë»÷Ì]Òñ:XÎÝæphpõz¨[®îVeþ²áÈíTpCaÕ±
+ð­Ãra®=×Ý¡-ÿlæYÜqÿb3¿i¨\üØïáñÎE6
+-¬(+¤gû?µDÐ¯='0RýUÝ!*¸±±hX²+>c	u×Dm þ
+-ÎLÊà>ÞöàfþæúêÝ}Y
+?6B8·î/x©5¢KEÙÖåéÜê
+_*êWUì©$&t=²¤mW7æ-ü-P$JüJ©
+J>É²%3
+tünÀ(Ð1*-éx°ñ¡ÉÙhÇrR¨+1Päêl¬©à7«ÊYªÁöâz,3ì.é
+÷au÷ÎWå`þÕy(
+-ÿx$á
+×
+Ä4{nóâ:´\qð\¢±
+R©ñ&LQeèLôQød¢óÝå4a»])	¹¤Òß\üÓQendstream
+-endobj
+-384 0 obj
+-4301
+-endobj
+-414 0 obj
+-<</Length 415 0 R/Filter /FlateDecode>>
+-stream
+-x½[YÛÆÎ3ãòoà©ª],n'IÞÄËVT\	¥,å"
+-WkÿùÌÑÓÝ3 ×N
+b%p¹úøúëñ§¥ïáÒÿâ°ðÿíÉÔ
+þ\
+¯¶«Û`-:ñr{¿ÔË`¹ñkã¥Ùr{XìVw/.ß÷WÕ8VýÛ¿/¢Äócñí¶\¬Æ¼}±ý÷"\{µuC%#ßÛ¤Ð¸¯ÚªÏÇª/È[w²!Ð¿äïÀ÷¢P7ìVÃÑ,¡û¼QkcÏt(ºéØèqãÈ^«Çz|P
+K½,¶oß¨ZòVõ
+#ÚQ?µt4MC½oë/
+-½Óxí
+¦ûØèÕf´üû|r­q -DªÆÖ¦Ó-AhíÞüêîÕÏÄÃñAI6
+PÜgä°P	|Sú YÓ ßu½ÖWàmpj½®Ì7ô|Óô(2/0ìúëv¯d$#âØ[£FqÁý}×ò¶¨ÔÒÌKãg¶^Z®B]bsBºBòÍA6oÈ §f¬êµ¥X5zÅ(ßA\±\%"ñw*¤Æá½@-4ð/5£ÜwS]jì±
+"èóQKüêv ·]´`mxrq±§öËëeYÖcÝµ¹Zv¢üV÷S[è7õ¨Þ­=Ë~ÌÕA"_Â
+f
+-<pYÜÃ;¡ìa¨>MU[µ-pÀôb=B`È_û>?>áòfßõÂ/y
+ÃGpÑ
+ÄF1u[ôU>ákr
+-Á:°ê'sêSkH¦,l
+¼%; ³RÆx	~Ð×ÕÐ1ÐÙ6Ê¦ÊÇ¦.r©A	y
+Òýp?VÊ«¢ÈH
+ýaÒÏ\
+Õ¸AFpw8N£B}¸!©µÏ4Ñiï¤i
+Qy
+¤´!A7aNä 9¬!ÉH <ùD÷¿ÖUÙh}/I¹pçÅØõJ÷ûV(sZH4ô
+-ù"^Xî-¼·)=  |	ÆÎ"Í·U½×ª6½	Ï.GF8®=Îe,s@V¸¹Ã|ìë¢ÒèÑJ ¨° ´s±ABY)¶4^èQf »h
+ 
+-EÞ-ÄbpÐ
+(4Ç¾»2 ©¾,j°æDÄ
+-£ÁÔ®ÔnDèCpHÕ4D/¦VGvL#99ÉØxõÆc±q0qÌ´iüÑZC;ã^
+-Øáê! Ð©n¥XÂ¦ÃR±î5m¥;
+´xD,-ñd$Û³
+-æäylCÑÜ¥=ðéÄ6È­òÙ»zÏË²¯HTL¾«á×QXDS
+
+¡ªfÚtÀRtS-)ó÷º¬j!Z¬è{ÎÖ1M
+srd!
+-¹k»(©aèj"Ùð3tÕí±X%GÔ×yÑéÏXøä[ñ
+bò²ldÚËÀ©0i
+î§FV
+ª?cÜQ0ÑRyîuaúR3®¡pÐ×Ñ)bCU¦óPth¤8çý©9§¡ê¿Â_ûIèûBñPqÁ$ÉBIwÄ~û²ê%ÊKÝ¨Kàm+³
+-Î
+-	o¤ù½
+-pâ±ÙsiÔZIaÛ44ÌìÓ@§²»S;
+FçS
+T1ï;+Ä´9nÆySOb«Lj°A\Ø­n¤1©O¹­dXÆ~Qß¯y®aä¯ºk[±òª4£Ü©.Å»'óNÑmmÛå¾2­µ²yõ,¤bKhshÈ²Uh¼-DRæÇÓÐ`
+éu¬R
+RËHóÑM*ó~Æà`áLh
+s¸ªòÖVø ¸¤Ö,ÃêjkP9Ã®2u¢¾¦ýHë¡@Gq±T»|¨µ
+¦jMG$
+&ÎtîÓnB5]
+- zm{1¦i<d	ÄÑ[Ç+Õ^£3¤8ø1¬D£J
+B{9®é¡ïð4ÌË(Äøb Å¶dØ,¸ßgÐ!.®¯8¾ñt
+Ý<Ï-ó1¿ËµiÅ,éú}ÞÖ¿Õ%Â<KHR2£
+iï¥vlÎk24¨4=@\}Â·
+år÷3¸oê:ªjP¹³!!VÄ¶{cÒ«ÔáµW·¡¿Á@Êkï®ß¾¿þþõõ,ÚnD"p,é¾ÛdÍ°«¬¢¯q$X­J[¬xPÌ<úó|^¢X3\ Ðnloïw{û~¾%2V:&ðAÛ®ýµê»/´
+²åS':y.c_¥¤³,	çWÊÝZYòsùË 7ó<J`ÐÏ
+?Ï)ß<55-_4>b=
+-«6P÷¥¾
+¯¿8ÁýOÓ³'²_e reÆ.
+gJ&.?¸Þ.Þ.>-#]ô½0ø"·Ú,£$Ê­Å«ÅÕÍwË±ªÅÕOË`qõüãÕ¯Å_7_/ÿ´¸¾Y¾ýUbË<P&"ÅäãPþö léæÍõ÷/¿[l¼Á¤z'¸.Tv¶*]SeYqNÏ¬<èzLÀ?
+!ï¢4¦us¼Éz²¥
+-ú »ÏU1oN5ÁÔz2f<òÖµ4\²Ú¯F 
+~j1Z·Êi2¹Ô^ª'
+¦FEëUõM¦o¬$³«JY/àj©¬*£ YæuáøîêáD*Û;9ª.
+]£>9¡1"ÍjÄSS:ÙÝsx!]:Dç÷=.×©Ü©ãdfMLÂ¸K0Áöã ByD%Íõpá
+-±¾wÅ.ÔvkÚCÕÈÈ»Uy¾oó#Ä³"Zh¶áèdvþÏª}}¤öéÅ­¤®ÞÞ\½{:
+H?¹îk¹pwÎÆØ
+1ÉôI¥`Çj$ÑõP]@Èæñõ&o_»Á]­ÙA@bì=a¶|*^æ+IÅUÇ5JM­
+í
+sy:÷æå÷¯ÿõÃ»Ó!@2F|¨ÿ°QªêPÿ·ÿüqý
+
+vzQü°2ç
+-QñJí)FEf døá
+C4íÃMXsJûÐE²0Èììî]ÝãÌgO³Ó
+6 C0`%*UÏçE×²³ÿ±uí
+-Ðâ$ÀnTÈJÁ`nPÖæàÊü×VyÏÍ]w¿º®£¢Y &æ''²£È×b`Ù¨Î =<f
+NòL¬
+6!¾8dÐtçÒ>¾
+yúÖÂc»O.D(þ
+-ÐË­$XqCÐÀM¥¦l8
+FôEë"
+¸Êø`ºÐgìáÇëÛíûÛWs^*±]îN¹6+~?,I×ðL
+'©äjòþÉL##Ùpcg/qçì
+-
+ª÷õß5 
+-	«¸1ÍLjo½¶%^
+9q¼w¶ZIIû¬døL¥È?í61|Þdvø+¡q í|ã³,Ý©ñØ±W~Â_àtg`:ïdÚ®Ç
+,
+±î¤;]-Âd `Yª£Ëü4{u
+-òÎ¢Ã4u[Ífê¦ñ8f*'q lüBI^·ÏÑ¹w¥«K¦0üßUÍ`Õ÷]ÓtígÎèJ <rÎ
+úQ
+-:½Ná
+Pßñv¶>Gá
+³ìÇ"tÌ _ÂØxØ£×C%¾¼Ýè Ó¥ÎÍnìLº­
+ñ
+-	«CÃÜZ3Õîé{õ¾Í )«)g¹
+2ïÕ P¿ )oæf}ßw»s¼fe5i9³H]:L³¢«Q.ÒûfPÄÌì¹²Ôï :"`;b9A[ís¹
+yYT
+|AâÄ²1«ªÏ}°¤Ùé¡æø­Ö"Ò©
+-°Z´8Ä4àNgÕ¶kËÊ\
+-kÙ'@¦ÂêÞÁ ó¿²*¦1ÄPã`¾ÈÎÓ¬ÙôêÖ©Ò±¢i×ìÂÇÄÅ
+2±Àê':0Ïs¶ÖaäébÃÙH¨F÷÷$8;]ÓqD=öäUi{VÆrcB7çrºÆ¯|
+Î/}#{¨áªYQ5@*å{<YX3ôÍy>òÄú ü
+kµ)!1÷ðë¬
+)°³píÌ
+-ÝK
+-|
+dÇÞ°;ºéÛ¡EHö$öá¦cëÈ`G¥"uÚÔGØ.-nVhP4cGxÝ`Í
+ÁÏ£ý×SÛ¾®òE}[õ­X^wÂn î¢
+5²Û¤Yÿ´÷ðlÂS¼¨ 2UÁ¦b\	
+È »±ÎZúbªñEÕTÀ9ø¥ô(7
+#/=ÔG3>¶""¥e©/"&æ\Ç4#
+h)2ÐÐ Þ°4µ¤c½$TÂoo ³fß&NÅU0þ¡Í~ãØ «}Ý×"IR!ß2Ñ~fÇMùÏ,û¶#û3w½	Äva
+-¯?j±Eü8Ùr
+¡ºÀÞ,NëÝü¡ËÔhvÃÃìÎ®0.ÌÎäç×
+é"ØãÕvÇ§5µÀ¾/zµ8×ª¾lß 1ïDÞIi"ÞA0fâSî	÷ãbc
+ê;·þrêò~7ÓÕØ	G)O¼*$/Nhcf·yt@ßÕò2±6dv»áét|ÃàMY&ó|a¸ûº¥kÄuYåè¢à;pX>Zx¬âP«³&>å[{ë
+ô
+-
+rîykbõ¹¬sU;8`)m(ÃÄ VúVrdG¾CÅ@!J(À"´ÊÒÝ4
+;äÆÔ:HÒsw
+<'yÚ­nN¤$
+uóéòÙXçMC ¨a`sî'à´)ß$LJÈ\«lÍï9?à°I-ìiðs¨(»w+X°ÚS*§
+®óWîúq>sº°s&j°²Ça7t4ÿCBãÙl
+®U¹
+'Ü`õ?°®
+4
+óÐW<+XË¯Ô	ÁÛÅ ÇTendstream
+-endobj
+-415 0 obj
+-3896
+-endobj
+-419 0 obj
+-<</Length 420 0 R/Filter /FlateDecode>>
+-stream
+-x¥[KÛÆÎÑÕ'_x¤*Kx¬T­$ÛYÅXpHÂî ´ÒÏ<zºìÊq¬²
+-óìéþúëîÑý|Ñ|¥ÿ¸â2[Íÿ¡þ=Íîg Öÿü¹¸Ì_íf/ÞkÕ1Jæ»ã,4á|»¯WÛ ÛÌwÙ¢ìï~
+nµïêM
+o
+-¼éëhKßUBÊ¢ s»Æ4Nk|ÎmwøùÁô¦»~VM}Òo¢4ØºöK)ÌâU°v/
+Y¶íB6m[Ú.ë8p»³6ZÑª
+-ý"
+-Vî÷¹¼úMÔ@
+í·
+-R6ÔyÑ~úÖ
+-O¯Ìhá:~°âï¼ê´É*
+âh
+¦úÍÔ×¼Ùã6~[AÓ vâ¹æ2¯*Qé÷	;¢¹\ûN	âÆÈ6¤1.¢mó_º
+-ðd§Û
+KR6A
+-/÷»çËpµZ-D÷ü×Ý¿f¡Ù
+n¼	B
+@ÅG!->
+¿sÙ¢ëõ¦³¾
+Ê¶Ëk8÷­{ÛY}AeºÊfie][½32Q;o¤U
+R°öÜôÕÁ¼¤Õ²Ù­IQ.e]^JÓ!#{\}Ö¯>kjØ¦Yèéûy±¢`å^!B¥ntÜ_0}]yW6¦s·uï[«[L
+wÆdÄµRm4¯@=¥($I%ãk~ÂÁ3fFêà¾úýâc«DiYª½+CES·åAH3Jk¥
+Åx{
+-Ðtxñ
+-qh¿8æE×H%{hZÖ¦M 0ð4
+À£2®ÔS+µLe3§mú"i<©kÌZ' y¨ìçf pÆÂFêt5i/ØÀ©ïÛ_µ©µw	)²(CË
+l0%xíÎ`BÊ ÕKMß³sr{q¥=XÁÊzPù^
+;»®ª"·@AÖ¸â¶Wpn¡e
+-rEpË¡#EÑË¶4PÐûýá 4V5­Yö&c.
+ý{s-EN(!ÐË%à¹2o®IzþZYHÙùî(Å6]@)y)%pcus/½T«Æ®ðð¥qæ íÃI 
+ä=Éo&ä©ÿ Âã°fÙÉã]ÿ¼ZÑµ@öCãaq»ÞºqInåÏÂÊKéo:8	På JOâ[s#qZîæ|bò*¢
+À4}§lQÜ÷VJ
+¡õu!ñyô
+¬fLÂðÆÙ
+"C«ÀàIØU!½2dÝ!¥uÂøÀï:Ìe_IBÏ¿).SEäîÜT¬b%ôI(ñkãZ©npÍÅ=£:²µæJsOµ²-;ótÈ<qh£_¸ÇÜ*u²a
+E04¸ïÁUäÒ4Î2´Þý`iÄÌh¤{c0VcÓ88ñØçhö
+ÔÐT7[~Q¬QÞÓÈ)²û)õslåd±%jµW¤>*^Rõ+ÁÈ¾86òâÆ7¯r'i
+-ù0§u1¼=5zë9£?ØiÝêß)wå³hß=¾ÜÇvßÌð+ý°mÉWÌ´T@¿±_g
+ß¿]^V­ÐÛÙ¢rÒçÉ*Yñi:¸¼ÐÎ¢*Û3¨Û2,Ó)Ø	vÀ\Ä^[
+k(ÅQxmÞ|ÛÇ7ê1ÑQkÇ7ao~µ;ñvR§È­3ÑïÎyal`æ
+-
+¡U¸p`{ Õ7çòós­á®"ËHã%Ó÷»²Uí¨)¡ñ~qa³É1þÐË|Ãs2yeáÎ«TaM2%L@½ÒÆFÌ©:o¯×{÷ü§¥ãHÏsyWªäðl·\Ëàû
+xlRD3
+-lE×È<¬NñÖ?¦
+?üðX[UUá!Ò¥8[_ueeDÌh¬+hùáÇÀî»ÅíÑ©ÅeÝ+F
+
+@Ú·
+·/ÖjÓ?´
+·õî¾Ï
+ÖH,RÆ']î[[Þ¤-3u¼±úyªÇ·<©zL]DwÆ³@7w~4<5	Y×5w°¨dE^#R(@Ð
+èM
+}=
+±¶Bc.îzàXV´ÌßWú ;Åî>ËåÉvB,:LÖ#ÆÈÒ;CFñúQ.óÛã8lÄº«µ*^* 2Á@ä,F¼ÞÅÅrç!ÄP²±áø
+ËX4_¼V[Ätu&ÁHÅë·?év¯w³g÷óØ¦É|ÅÁzÏã­f§:Yøêvöâö§y'{1{ñË<½ø§þÏ«7ß©ÿÝ~?ÿÓìõíüçßKä+Âdb¨ÀS\²ÖÑÎ'¾yûï7#§Ä#YÕR¶bYuÊ3%ÍxçjÇîóîí^?9°¡"Ö¢]ê¦þ,dcu%Ù2{lÁ
+É¹(?YÈaÛÚpbZµVóoC¾@´´O£å0-TXø¹¡_@'p!ÅUÛøa¿Â ádèîcÉ®=åÕm20QÈÐ¿c[
+-$¿×*·mËà÷ÁõmêêÁµüxä6ÚFN9Viá$Z»×ÚKÞ¸/-f~ÊÎwÎ-,ÃM¢³
+L
+uã	Bâ29¡dF§&
+1>ºÆHr 
+²åÀ¸ÎÆLÀU¥
+-I2äzp¤´AËVrÉ¯WëUcKâDÇDOì:jÖ¶a4
+DÇj
+Ö
+Ú=0ÌVþ^z\l¡VAòÆ£½¾ |<+5%º	®Í|D%yº/JÃ6ñaBÌ-=â«IÇ'`oÍ	'ñ9'ñ@ù-õÇìC;::_ÎO§,±Ì]Ù4veÈ
+Ñ%fü8Ñ^Ô:ÿÕ:ÚË#4"Må3îÀ×lßK_!÷F3¼s||ÛÇPqµÐìñ$
+K$Í!ý¸ÎD
+-¹_TUê¨"=ÃóRV<+!7òÆYä	'cÏ$}"¦Ü+R¦}5¼)×i
+--Bk¤[xè*ÇK«}É*
+¦^¬ùC J'ï{MH!iZ`XØ6´µX×Fë9`°O¨6EûY
+Ff°e^W'Q+=¾«Äe³é@ªª¿VBge!qÁýhüIãoð÷fµ´o&zçøËDgæ®O;s]R½Î NLÌ
+ÛûYsoJÉ­áèÊ+'9XÖy8¡Ø`r'Käù[øª=#|Õs<m"]üþÑeFSðTù·ãåQÚs":*"hã*
+-ÙÅG¸w>-$$<8$L¨~\/¡×®Çº(yÅé(éWéÞ/Ð¯5èùxr 81&o¦Ä
+­EîR¦8ÏYæ\ÑH)%úÀÒÆÚ!jgõ}¯|¾×õsÄ
+
+c]Y÷rZ`¨ov)eA®ÕN
+¾U¥Ùªëø Hà
+`
+dvxqP8»Å¼çÎeÍ4§Ñ J@£2þ½æúFS	ôº¯üðswìURM
+2Oó+²;¶³3E]³!óâ#¦`îÆn#Gv]@´ÁëÃ´'	Zä¹A«óëY>'IX÷n1Ví]gøæ¯Ï§rÒtû
+á	ÕªÌï(óÈxÆïüU·Â[àÚ)¸q} O<Zwûàå
+-´ 0*1bêë¼Ð ËµÆö	©JùvEt×?)ÌûÕ·*'¨x*ù¬x¼`-ÂÞ3àQõ¨$ãð,
+?7òÞG±1NcuYæukøÀÎTØ¨éyÂGð2àÓ *m4.{T¨
+­çÇ¼.>7fá,h/÷ø~ 
+OW=qóÂCJî9
+EÃr¹#c<k×NÖ9Üå¡ÌOMMÏÐ°¼XøÒµ9B
+tl½eu0â¸
+{:ãÇN¨x[Ì£SPFê
+ìÄ'PAí 
+Jy:CöTïí`æ$óë¹oGtU>â°(xb<¸¦0Â¼Ç
+-M+ÊÝXïêNÄ."|=
+ôÕ»uÜ
+·×¸T
+ñl-å	\S72ºÍèT+*
+-p6¿fUrÌ*D<>n¤²ÎÑÂ¶óÍà×¨¦¡(/W
+
+ó£Úö¢ë(z
+-aj¢ff
+·èôN	e©£Mù¿a³ÈO
+-ÊÛQLWGrYÂ®Y¥0Ä&º¸K8
+qo­Ä:éêÔÈ²;_À=ÏîÇéT2ø¢r÷
+óo:|üú7
+-¹)ÊÈ}<ë¸||
+k
+1gÃ;Ä
+--Þ¨H¸aàXpg5Òe¼5!µ»
+äZ cê6õÆJ¬G8Ú®7k|_fef¡Ýc6,2
+éìØQbíÒØ+»¾ã
+-ìÞl*cË{¤$Ì½]í.PkÌP°R¼²gau;á@/ìé­¬uP4cÞê\÷=
+-bâTª®+z¿ðbøT¶@(¡7qeËú³0_X
+êø@ó	÷¤iÌaTü3Þ¥v¢a¶5DcY¶¸©gl¤ó¥~Ûc÷"#"Ä6¹älÂ½è[ò³4d³ªgC,ßfÍÙÄsß]ûÎUI«pMÓ#ð"îXòÔ¼½Â
+-Y#»äìÑ»
+XP³üáPyôýãTÅRäH>þ¬.aùosûgg®DÓ¿÷3
+éRÔ8®+±
+¿ä±Þø<rr=,yø¹{öt_Éý\sÝ
+»Ñ­ÝåÊ¥@ß04¶ÂCß0 7ßgî
+-ÞÇß¸º`$%Æç'®>r_Ôer°+è<A±qcâR*S vãr6dHms¨
+-tYkgnÈoFÁ¢}ÕÀàÍF_ïõÅp½´xgb@?YÜ#*`Nøï»j¯O¹fs÷æP	sß+º`ïV(»C´JWÄ¸ËÖãUÂ
+eÊ;ÂYCÄÿï¯92çnXðuBaI7¢øM±:Mhm×t¶ðÃþrÆÿxÿÈýÑ¿°6}ÓV	Yx¤Ý%P[ßÛ£¾J}VÑ4[bR¶Êu®!)
+7º¹Àðóì¿;òØendstream
+-endobj
+-420 0 obj
+-4023
+-endobj
+-427 0 obj
+-<</Length 428 0 R/Filter /FlateDecode>>
+-stream
+-x½[msÛÆîg¿`¼¿|´S¹Uã¸Ã6ÓQú"A5È (YÉï½ìíî
+@JIã
+
+-î{»û<ûÜêËÒ÷péËÿÌÍaá/ÿ*þÞ-¾,r/Ôüóæ°|·^¼ùT$âÁ0^®w@}q,
+ù
+æËõa±úf_nº×ëÿ
+o/ÌÅíëíbµ)[ù}zIª/Ý¬î__¾ï¯ª~×õ×ÿYÿ}'z
+òR>ø^nîo:x`S6êî0ÇÑV}õª­%V
+Ó×Gy!÷r
+åÖÌ:ª1ÔÌúÞÀYéáÞ|
+-3ß*
+<|±ËP¦×c½}yø¾¬ûA½A»zÁØáÂP'¯Ej
+}ñ½xrt
+÷ºµ&k¯ïöê
+ßKcnÂRkqyq¼
+íÕ³Û»J-7
+-iÀMß
+-CÝÞ)'8Èo1(pUe
+ÔóÍ©eÌw¤õÔc±W¤ç§n¼ÌÜT«+AèefAÛj¬úCÝV[eè4'ã|[õ­°YÙþú¡V«Ì}ôzÌ(,ËkúWIìX+ìICÙ~_mÍuÇEFó8¼Q¼
+ïIÊûiGö8´ÜeËÏõ×Ks±íÚ_ª¾3?tÇv[öOz?2ÒÍêÂÜZãëtý¶ÂYv}w0
+^
+-a!.D|)~ôbf&æ×è£MÙ
+gTv
+-t÷Ù¥&lïGOã
+}©ã(¥=WK×2/'±
+keÓE( g®å
+Lx³ô-¤Dtù¾ïîË»r¬;å@i*ßZu(e>¹Y½BïFF³á;ÊÝBÑyó±W®7^×õå¨ÇJ#zÅM×µØGµHåÄY6ªÒ3Vúr,zª ýøc¥hû{j
+-/<µ¥02öFK<Ê¾}yÉÜ/0I_F
+/³å¾OWï¯?^É;¯Ö_FÌK ý4ó²bE,úîzñæú»åØ«ÅÁâÍßä?ï¾ÿFüïú/Ë?-®®?¼ bùcH%ÁT&³ß¿ý´¾^_ÿããjSÞõç|WÃ_'O&äO"0~~­­Igí¶Þw`'ÐÈ{½Vy¶ 
+-4piÝ86ÃæiÓ ÌÄtÜ#ò
+-såDî9Uxtª3J£XìDÜ¤'ÄrqyÒ¾	l[íÊc3
+ö ÈÇ7\àé®
+Ì<»
+-ôÜT¼;ÅÃE|U½dBRý²¡=öN$ÕæÉüT}Å×¡¬XvÅ¯[³îùÒ×^/$s1±6`6¸u÷*µÁêÁú®­_É
+ê
+üï
+-½¯¶G>I?Q
+-8
+-DÓ}îÍ Â
+ÌÛ("m¸}^l2&ÆZ¾bÜ-{?ÝU­HM£!ç2(äê1Ä&÷U9¨yS"eïCìéÙá
+wGuiJ	ãÂ
+-1¡ØF~õyè¸Y°LWò,³3$>x@Yí à^¥éP¨
+D½êÎHâµ6 äÿ4a©=&üÔJìã
+ê-B°§*Jcl(7¬4õ#ü]	Ø0îÓmzZäpM¥ÁÈ®R
+éºøBª¡vCó}|!|Ì¹E t<Î²Kâ¹xç¶ê¾¼mªycwU7Î2+ÀÖ8ÉyßU¶fOcbGR«¤MHQSj¯KCc_Z°ÃXUNqÓv°:3
+U5­Að¶ÚàlIA<Ez±»9Ú|bBÅ[4tâæ
+6Cr"ªTóü{Çmº~º
+ÃX´{á".8fLq"i ¥Ú7ÙÞoºÃýß(§¸VB4m8¬ÃÐ"g÷«¯¾
+ë^mÆªk'CRe²Ly¶ßc©SCD³ÞkW3FOh
+II»UL®v°
+-9Ûe;2íi}SÞk×p9-UËÝÁxå¦¶Þ¸¤^óíJY\ÞT*!¨Z1¯«§Vucd¸È0àVÔîmgkFøà<£rëÆäI`M?"®»©¾ïâVÍI8<-ÕûºÁ
+¡6Í'
+-V+¯7ì¨ÃSúpL9¥NU¯ê %
+-:æYÃUÂ\½&C	+&±<!«ïë@¬Ð!bä°×;7{ÃæÙeAÈäëë«Oß~-SÂ\nL±E½òG)ð¯¸PËEÊ¿®DòÍÕÓJUçVIÆø;Õ/
+3©)RúúÓ?¯&r¥éBËL
+Òí(ÿÐ?}ªFû'¹Î|B &eÓÆ dTè¥¼)ElÂ"¶ðf<	>DNÉe¢KÍòsV)éÕ&Ð©(Ï>O!TËÃ!pÊ5æq
+@Á­ÜÈ<ØÔB¹c¼Á¦óLÉÌ£°Ð­=I8ý+£ÙÆ¢öhUòÑÜ÷~Ç²é?/£5](HýB+îòçî·@.1LÃ>0PÏ·H£x Åà^­÷ºçÍ-
+U£ueZ[°çvF÷Vêa@nyÞ:ÉZ'ÊäUÙ
+@SNðÒÙîU2¸#ÌJ*ÁPb.Æ¡"îP~Ö0ã.Ü¬°b/²kâê4[£
+iªµåÁB
+¹7z¢e<e¡¢Í{ALbI®/·j@õÓ-(ÙAà3âðßAÙÖþ`Î¢4æ©ÍÖïûj¨ú0X
+-ç·e#¸òàqÃõ´
+-5ê®íðb,RIDkKîéà¯Ï@}áêÔ'JÐë^öÏaðû·~p°LÂ8n8©ÑÄ "¤æ6õ/tô²;¶É­];0*U5Æà·¢À~2¾Ûv£ù¥
+-®¨Øn@!c
+H1\cÈZ) Ro§©STÕ®(ÄM×A?A¼W10Zï§mF6z_j¸¼}[tAVÔ#þ0Ö|#yòp°x7'q,Ï¢©dtô\^LØÚt58:9\0rc
+¤ø!£øfEüT7gGoqß
+õ9«µîé
+óÜÐ:ËûZ¥­ ×BYVßÎ">EÄFiB
+i|*
+©°(í¥÷?F='Ñ	Ð#$Àðàµ½ñ+Æ
+ô<ôäÍC1F;ÅåDûöHz#÷5u¡Vî kÔÐ';[o×
+4æ¬ç$­÷|t^e,ëÍÎY"ß,õå]_UÛºA÷FùYyÿ
+%wÆ';8>¡âØBxÂÌ>3à
+>ßó'ª×7GûÐe
+-½FÙ09Ts6Xö¨÷"wlÆc
+-+?vãøG½ù,0©oÍÖTCûçÑÔG$£iEÚí]9Æ2W¢!²°0Òú@¹:åºÑr·Âà§ÎbO/P:³ÎÉÿ{ÄúÇ|ÜºÄêÍÈOj;Ráô[s< ù
+xëÌ¥O§xêÁú²óe?ïbõfWMìÕ¸pt?²y~²ª,¢ë%Û³2Nº"	¾³g¢L4Ó±3QvÎ- ïtÛfºc³
+Ò'{b ÔFZB/ÑGl¯nV?÷õ=y«MÌÎ?¦«Ö<÷t»ÔÃÜwí#\ºu*` sòiJ]ýQÏk»½£6'.ÁtËgUtò.ºíÅÏ(ÒÑ£K{:Mf¥Cùµ>¨ÅµÒíñH Ém$ÜÒü¹~
+-:S°»L
+ëDÁÌãÑ·ÇÙùÆÍ°7"Rq"¥:«ØaoëzïX7cÊîØBùñsV<¸®R9æ*3ÐLL²à$wÉ¾¹Û¦òLOÎcvÀjà±Ûî :ùCi£Í!Î8 ÎÆ£ÞS¤¨p5Gf
+-Ì02
+úñÒ@©cÓ?óÝÛï'l®*¶ú½Tiç ÑY6#<ÏªÒFNÄàMì0Z§>]P³ÒoÕ_fºT:T^Pïe)5©=aÍÂÏÌÄuÁÍðès¯éÐ0'¯§-N[µ¦ÈªxwC9 ¦ÛyA
+y¿;jêù
+dw.:=ñ\Ó
+!Ñ¥Æ.NªúÊ@AºÆvK¼[5è;.ô'LV9É?×ªçÏôb¥'Þ£O'^øùJ\Î &·ëi¯â¤½p[­fÉÚ"½áK«Õå¶Â
+wÄ×ÊüüÛ6(Îì¤e3t.ñÙº©Ë¾þ¥ä
+
+'¬;TÍÎ
+ÒÈà6f(GÐ½§¤OaÏ©´æmÎ@ÅP5lúúh íOvêãgs_
+í=¨%nPì¿5oÿ
+ý]ÿÙ0vÆ¼¥£úZ#±jLâ(Í´é¤fÀ·Ú2¹ÇJT·g]¡ñ4âÍ9í#8+;k¨hzÊÈK¿_ÁèÿàÔ2'[ Våmm¢Vä
+±cQ$!D _ÐÀnã
+
+n·û
+_5ÊáÐPC»9ÁSÐrDQÆOã~/Bh»`¨ÌÒØXÉ
+,ëÝ93EOzª²Í±
+§Úïø÷Æbõ¯ìDt
+
+·
+s4½Õ´%±Ð`}5ó@äÕ^N'gn«­ª¿2,ñq|3­e »Y
+M
+-*Ißî.pbwsÜ¬Êí¶ÖÔ5¶¦»
+ö¢¼`â0:­vd¦k{ r1:öÖ-$u´X2{ÄT
+vvOEÀø«mrb=SÌú(;ª½EAíESOb ´6U¬¶Î&$QÏÅÄÚ
+-	c
+-½ðk,+»êPW¥éô%:HÝlq2eÎ:Q'
+Ê¡l4ãl·o8¬ÌTs:8«{¦7áýß«« ?äw2v!*bFZ¨Ñï¼uTLÀÕÕÞ-)Èã3¿¤æºkJXpä)s¡ÿûTÞ¸T°ôà½n:By÷%Cåu÷ÖV§ê´§Õü
+-HFL
+3¿)D
+-~­Îó'øäô
+äÜüê"V·ÀºÏÀþ1º'Ëß~pó_	IÀlê4":(°¬þañ?.
+endstream
+-endobj
+-428 0 obj
+-4005
+-endobj
+-433 0 obj
+-<</Length 434 0 R/Filter /FlateDecode>>
+-stream
+-xµ[ioäÆÍgaà ð,²¢yÏÌÇMà/ÄR SÚ<fI´ÿ|ú¨MêXÛâ4û¨®zõêØOaÅ¡ùÊæ"¼ü«þÿáâÓÅ&HÌÿìò¹l.ÿt}ñÍ÷ÑZ§×ûÈþp]nÃËu¸
+-òÍåus±*Þ^ÿx±
+-6©þñzwq³ª»·WQ«²¨ßþçúoñ~]õêM«ÕR;{?æMëç¹>ª^é©r3W!
+í¤y$9Ý«üµU¥¢Ä½Æ¾*Çªk|×µv(
+qù£2ëÇa@Ç8´b··Ã$Èi|5Ø Ä£Å©¸«êj´gK?YãYíQ¯ÒdlãË(3÷b^ÿÛ¼^w°î¬7;I¶úÑ
+-ÕmË¾ýî#>umýª=¾5ês5U{À¿OE?VF$øâXá$æ1~¤4O|Ô8ÐÀ¢Ýá× ªÎÜe|:ëûÀ?ïªAÙyg¿ºJÒ07Ql6V&ÎÅ®ÇAV>q¢
+õ®Î¤ANFª7øU(HiV
+3Cîí4£»Uµ½°(¡«p7¶%
+3ªio?åÍ5³×Ó®VcçíÓÙL	.04E]Ià;;OnÏý}nìW9}u³ºÃsô¾ª¦bn}S «¤N{µZI¼o&æZ%2"ÍØîÖaÜÛ
+-è«
+~S4¸~¾«g­qÔ¬ÀÍwçwìì[y]¸>ï¤Wå¹T
+-78ø}=tïhëVÿÝúÒ)B*¤w¬F­ g,Bw³4ØNU×.*¦Ú?¾n­³¾6>­²gÎÄTø§TtÐ#!ÏP4ôÜâ	6¯Tt]
+V#M÷û: IÄúNÖß|¿ÍÈ\EëµÁ.§WfCñ5ëÙöt¶xl
+-Z}\³Ai
+iæüy»ïú¦;ëÄeI°ÎgK$ü¥3¹Év5ÐÒr>e75
+'(µ·Ð9øX®Åél­²k
+Ä¤ëKb½¦ëí¨$ds~S+
+- Ö
+-ãP¨J'áÍ wèÓ[UÄ6ãGBºWäU_Ô3\hÓ,FÍ
+ T
+ jTïµmÛJsÅ_*}J»È_½çlS©Äì
+7«Ê¾"
+wgÎÉüä´:ôÅébÌäooÀkåä4güaÇþt _éËÉÂÉlªkñhz%z£®ßUm1*æ×2Â[g
+V¸ÍÉíXÃªÖ7õçïOÃ¿ôµRD¼ìf{oÔà;K&NäÜh·æà±nVZ@GÊÎÍÚ
+-Õý+óÿJ¿HÚ²ä"ìwæúRõ*ðê½ÝS$øl±ÛUW v¹çcl´éáÎNÓ¿5.YÚgß²ÒÃ
+k2ðÌ±!á5ñ'öÑ)p¬U!#aõYhæ~:4]3Ò}Õ­È&]ß·öRZÓv¼¹ô¹vÈÜ~5ö]
+-ÐggÂ)êC×Wã±vä
+_.bcW¼iaÈàH¬d NÈ^
+ó8 ñöÀéÛÒÝcòÙÕDZÑÚ»j(Ï¸
+°BíY¶¹MÎ.äóÜ±êqa0ó]W
+w¤«@LÂZ?pø`'n¸#³È=1û2
+	ý¼û´a_3©F-ø¢ßÍ©Á:b­Yöµ	ùÚDBu
+- Ãá$ÇªY¨G ´ÜS'®WÅçØ÷]C<_êã¾²¦}Ô	(®«VÑUËoÂypn0lbÁû;Vô)[ÍXácÃ¤ð
+r¦u?üák\Ä:ûÝ¿§ÆÇ:ª=¯FyËlv:´Þv ]¹²
+Hêh(~¥«C«ÎÎ×¿}o^lD$äþ&[«`ò5GÑCÕj":&AQÌ,d*»^Ç#x6b5ÒQüf®ÄtJÑºÓ$Y
+ª
+@S
+-rªÆ[
+ÒÎYléfõGäoàm#B|
+--$ã,^vT<Y
+-{6ù` `bSôé
+E,MoO$y}©3E0¢AÛðBÍ 
+>Kbñ²óX#üPmæÍ½S|+Oøzõ"ÿ«P`Úp(ýS*SON0a©ÓScàùª·ç±@ÐQ
+¯
+ÙwÙ
+Èl	h|Äa<J
+4
+CÄ3HÿTýÎ!È´!ÛíZYÂp¼¤LÄÞv«t?¥qù«¬Â¬¸uD³2%º>¯!!ø?fPú®éÆk1Ä&'}É )kR»:Ñ|ÃÉÄÛÕß»Qøìf«oDlû
+¹`
+vO
+±÷áXÔ{Õ­ÊOçÆçØðkÀAÉ´ª:
+ E³/»Þ*qÆFK§!¨¢µ9DÌQx ­êspû<n1Øhøg
+-Ü3"§ð,3ZMØ´LI°òAò%ñ8éD"'TÛl,³|´n¸hBG¸röùZ¨U7H±,
+-(¦MT$é8[õx4ý5úýÕÝ÷	ÈýxvîFÑ>¶3>»[PèOÈlÆ÷ä¸¬æ~ÂDnkP&ìÄÅ¼ó .x*Jß%¯6ÇS<Á<3Å¬ÆÌ­2s~½
+æ3¼á(Ú	XÆ¡Â,	Ë)Íü­JðõHï¦kU ghgÃÝ~!¬ä~SÀ&Õ(ä q¯2Ù ¡î8*Ì¤XÐNÚÍ/8
+h½«GÎßle2¥!Ü]"äiÝT¤Ãó|Ý¸Ú§¬ ø,(¸Ü î0ò·
+-"³:ÇqÁï¼ð£íFÐu
+=¿t"ÞÖû»9|TH9srúÿ,LaØ
+íÄÈxß`v5å	K§/"!=SAaÙûîì @yÒÁ
+-)ñpÆ9v	»º
+K kËÕ»½UUù%ªÚ
+§á\lì­EÃj!ÈÎEXloo{ô¯*q4Aä'²ú\Ò5tÙ"ÿUê4ÒVìjÎÎ×h
+M¹¸Ý¯o­7BÉôeÁyâ)Lxx&¸)°×oÀÿ®%Ð9fi®*#e¹Ñ!6IM÷EÆ¸h®àlÅdRuNi@Z°^:ÍBÖU]¤jxº¶ â
+-¥_¤÷]=x½<íä©¸méÒVÈ~d
+-©Cq,Ê
+®=$x5¹ðwBÅ'
+JÂ\}â¦>¡«ó	äÇµ¤Î³m}?½Âê1¡]u¨ òP
+³úàD*`iár£¯]h±áQv6Y2F@kíÚÿª¾³°=Õ÷Eýª»ÄÔ)ÔCåÊìLwü³H÷.§%º@³ÒùB¨
+_#C¤£°$Ö"J8A°póD©}B­°~KjþYÌÊ
+-vAÄÙCv¨ï,f¢K
+KgÄ¹Â­'È¦ ¡ -ªS 'çÐd
+eõä¨|0Ù¨^>oä@DÓ¼-.j$Ã©ªrF¯N¹I»v}kÁ
+\WPz
+ÿ2¯ååÚóÙ{ùU0
+»s½ªG öÐ²Ô²2/À×ðõ»IEmÆÖÐ±ÑÛÛÕõd+ÏÙ­Iq«þ~Æc¡*ã(õ@hûïÖÄç¢QÀÑd"Xþ<ùÝÞHÈgôêÔë(³ûßÅ]­ü*ßGÌ°ösýã$Ö^Ô NLATbÿbóT¯Ñ `½
+-¸
+[X`cz
+°5ÀÈ¢vJùRÙ?ñ$ÌÚÈ%
+-uÍ@©*vb#LÕ**0í¹Êãânlîaìm°zûó¥LÜÆË^Ã­z¢Fè|Õ¸S®9Y£vU1ªÚ)
+éBâI-ä°ï¸ÃS4 Ù*èt±aUîDX/¦»`6q;)i)äÓVÃodü2ËG_á+¬ò	¥µu<ÂPa§¢ÿ<H¾í»b¬ã¤AÓTáM3î¥yðü¸	üî<¤_hà
+»²¶ìÎ}qp;Ô}ßØü£äÆ?Ùe#Ña'ÛæÊõ7";^
+rY8(´ÇëëÒ"]ðê[}çEûóGk0³¼Ys®ÇªV÷ªþù»Öödï¦o¯l¡¥öòB±
+ºþ'_è§ÞÓUçè}$¸êkJùU{Ì¼ÄÓÐ*m
+Ùµhz0ÊÝo"RÌvài k¼­KDéxÈM^{º`Î~¿-ºçÍÍO$Ú:¼zÇë<b¢§µäjt
+ZR(`z¢ósÊû 7-ä¨£Ý/qÔ×åÛ	=vòÐPÖç¢Öl(O`¹¹ÿ­
+ÚÊ]áQr~j6/ö#WÁÄ¬°M¹
+©hom¿ÝÓ»t 9NA{
+-
+L[ªÏá ß)÷$IõaS?ú91húM
+·ÀÁ1¯ºÚ½]CÏàÈ@z^YÂm
+-t nR/iOÏäç
+¨/¦yÊy%fÄµJY´xJ}a#"ï­¯
+gäî³¾¼=ÈZÒ$à§¡ÖX±ÚÞ£È£s±¿ï±çÕèÕ U­&§`STKliîcO1m
+- F!zLÿkÛáv½áTWK%^¹÷¢ì»a 
+ñ¤IaN´s9qkà¤*x}3H<À
+4m"~TCäüº°Ä$ l¡oã7Zì-×ï!öçBè,#Ó}xüÆugDýJ¦>© g³tý$¥g
+±¶ aQ$RG¢Åx%yÿ|Áo~»G]2É¤P"ö¥[ý°*×²µãÑ;nÌ$æ%¢Ö`
+È
+Wlmð/P&×]Ð:¤ÊC±{Ñ£ÍTDrÒ&¤
+-
+--ðÝ>if2Ûßø]ì32(È(-!ªrmHØEOe¯A[DÑ\Ó1ÁÇ®rpÏil+cß^_üCÿ÷?Ò8¡®endstream
+-endobj
+-434 0 obj
+-3886
+-endobj
+-442 0 obj
+-<</Length 443 0 R/Filter /FlateDecode>>
+-stream
+-x½Zmã¶
+-n¿ºùv2ñÎ¬uz³lLÒkº}¹i'ùàÍLµ6m«'K{¼/Í/I Di÷.NIÖ) @~AOCó¯û°;OÂé7ú¿ãäÃd$æûü¼;O¿ÚLÞ|-õq:Ý
+&ýa
+M£(
+-²é2\Ùjº9OfºÚük§Á:ÓC6ûÉì\·}¶â>;ªJ5yi
+§?>ÔÍÙÕëÇø¬>'QDnÂ×Í×ä÷'ó0IÐ=,ªû]9µî³Ò¾
+Yq\kÄÁÒ
+-*ÊòÒvMÞ©½ùiY
+-?mgwWó(
+Ã*ë«7éñàÜn¢sìß©FUV®%Ëe§É*HWÓhav
+§díìùÞ­ßÂòKØLaªg­ï»¢®ÐÐÖ×· õBY;Ä¬ì,o±hÆ¢Ú;2L$N¯;ó 3ßía°øÅWlÃÖð\¢`	K;Ôô>Ç¹¥ïhOiÖnJ"fä]IW$Ü±èðu²R]á¦X-´
+êúèý¬ASEÃb¶Áã©Ø¡.äô'ßP;X7Zò®©K0ØnÛ¹"±¯¹^ñpxi	GFÏ}Á*}Å}ÑSR7È
+Õ
+C?¼ä8rÑÜ
+
+m~VZÌh¢MoT1¡Ã.;§w3;G*ó7ßÅáo®ÑjM!FÌÈÏ:HúÍ	ôÖ>ÃpX±otä4È`_Û3Z À¯¿Êèñ~X¤@ËÄ©4Ë»ËùN5óú0·{3Ö>¨f @áë¼ MØÏxF»Û
+Ó98ð¯ë
+³ÈÒr²Ãp#|ÑðMáJÇ_ÜF?ßÎ¢Û«áûóxa
+-ð+ëÿ¨N=Í«ËÙ·Ü
+X®?wOíá¬2¢¶8õ£oAU
+}
+ºý
+-¨ô°Ó]íd0Ø¤Í#±Ù=1B(sr;Sû£?âÊRËS7\@»Éa¯,(óìLÑþÛ«ùÊD:ÿ5ï
+f´Ö ªAM3«
+-ßpj×ß-A ï=Z3Ò$S:S@
+-¦%¾@~VÒs}Ú)vûâ¢§F:³â.\~åGa0d9£{°auIGº9ø2ZX%X¹`æ D1ê/mQ
+?½Åh´£ ì<
+-3c(íì¬ºS9g¯ÿÆæöK÷©28Ø÷Ð¬Ûâ|_*x?ìOÖºá
+~ªÁ¿þU5vþ¼úåoEu­¦8gåF4¶ IªºskVJ#Zëæäª
+-Ï¸ojÏÛÙC±WîÜMFÚT;5¢¥ÎB]a¼Eaö5='xÎßCþÖT*!Ì|ö¼²¿ÝÔß½{iIkrûP­vW<M×KÊðª·¨Àß´¤
+6O6àØ0_út]rsçÉÈÂÂ JÈÓÚN³pSUJí!¤äÀVÒ¨|t)ñËU
+õ 2Áî7`ï(ðR³äb&(´]cC¸~Y90¬Qç¼¨0ütùAÆ4¤²En#Üq;Û«v×wæ¤Eà^
++¼o÷¸,Ú®u_vyå>¢à9Ó@Í¶Þ÷Ä÷°óétÚÎÞÕ
+-p`I{JOZ¨ä1-a
+5'BÇ´¡	èÑ£ñT¶¯Èj*¿+é
+
+êy²6~ÉÙ
+
+#ØÝÎòòw^ØÚ%>\òãe
+  xaHË¡>ÄB2qc
+a/SvX!î¯ rõ&Ò÷/¨à5ðkg ÷.D­MâdmvWøºP:ë\×øþ­,IÂVÔ
+ÊíÎKÂ2·aÎª²J³¥í£U$pÎ¤4
+¼«Ï
+-+Ê?yµÇÍOm¸^TjC¿yMîe
+-FXAÄúÁêh§ÉJø4¤5w0¶bVÀ~ûñ^ÛJUn0¡òõB2YÀ,Ì 
+
+â¢Å?ïK]®B"C
+zP's	Btß}Qð°ò,EýGÏ®q¿
+ò.Í/è-".TÈ%ËÄE2I\²!ÊK*Á¨G3®ÁS´2ÏE
+îÑe/Ñµ0Ù
+KÍaîrÄxÅÆ¶f¨²Qµ²nÂ"\ÐÑm
+ô²
+eDªçËAÖ!}49q±«=ÑzÁlÈ}ï@uí
+Üwsí»ÙlÙÜK¯vÖ4µs]£É$ùSnøc,[;äýrk&âéL¾ì%ï­7
+	õ¥Ú
+-÷;",l/n}ÑhVkâi·lÍäåöV=©Ýïíl¢e@=T«ò³£íM
+-2®ª=d
+|÷ùö6Óþ>@ä
+-°Ù8
+ýïÙ¬	l÷ù
+oF^ÚÎý|Ê!»
+â}gC|0vD`" ­ßLðRi¤?«èÀ~K¡¨,6°
+;¨,åê:IPa-2¬TÆºwÌå$ª2"%=X
+ÞdÀ;É&~¬ª§¡	{ý¨ü¢k
+ø
+ã[l3®xA\P¯SÏÙ
+Ï
+¶H. ÔÇ1Y	]ûzÇ(ç©ÆÓÄ¡
+,*ä
+ZÍõ´ëðI%ÚÕN¼D­ Ìæ,EàÊQòQ]äÍ§Ö¢jãeÆ\ÏQùªæRó}¡Ý¿¥®ízÁºSÌnìa 	4$RÜ¯Où®
+:°é^uª9»Â$
+ûî­
+Ìö(|ÐsÏD|
+-ÆÛÃ2[3ïÝ¤dýÍ4RÒ£ÿª
+ôO]xkF]Ê"wÈ,¡»À Ð±16ÒþÒO*d¥0ýê¨Sµís­ÄhÆÝSÊU×
+V2¢©k+æÊyã}nûRfÏ3ºòKMX;£2yº
+
+-RÿYIÙ4?UEa-;&ìtÿüü
+÷¢­Ýàá¾0wôøÊîplûÀÀOfàá¯?Îu1w¬\®[3#-9x®î­ïû¢Ý]ÚvxzS¸,{·âéi° z_¯à#¤^ yXû2]þÞsí&Ë
+Ñ¬|¦­¶s©ZhÁÕ§ùAg x"íéâ*âðLÎ¾-ú ÏàÚ
+
+	)¤8ülq.yDícð¼óht~îÉ=<{ïÍ»UiI];õqcÛ+ç½úÙöîlKE
+»ë`?»¨C);"¡ú³á¾# ÑìÁN ç×Ó¯~oj­´
+i&Ù]tF°TZ
+-·¸©®z9<ºÔ
+7¨o"k3
+-òÐ½ "¢µ×Õ÷=À
+s÷ñ¹í7wE×@¯ÛÂnÓ*¬úÕ\!»6Ø³IÁb(Q1 f&àÜKrÇÂÅ¶£tòÌïºöQÈDvN¶ì1udI¢Ì³8
+-)`ôçPeíAË#"á¼õç?S
+È]
+BÐÜs^Ï£7\DmkóõáÚ?o]ÑNÉ7'OJÝö¡_æYV-dð4_S<kv¢®
+è òxlXÆÀ°ÚÚÝ×;ðß#{:ê2)PGë©PöJßÚ"
+MU #£Vq×úÆK&|#­1ß6ÔÅÙàx&/HÙISA
+-XëÉg¢Í([òÔR'ëÄlÀ¡S
+-« Ïª$<°ò¯É©®éÑ¹±NKÿ[55(EI¿%k;b
+Ì
+CÃûkÎ(vH
+£p¼ô¬
+-¼"3ÚCM®¤ÓX^Î
+ Ï,ìÞß°Ó o¡Ï
+Ûªz í	;*Nb
+ÓÐ{7ÅÐce¡4a(åæwÆ{]õÝ¥Ì	ÆûÇ¬)4ñ
+-jlµºä
+u)Z_x&ëwò5ÁN'¢ÌÓùìëê]Û´Á?¤ {iÕáRzAJt0Yñ *Gzòýä¼
+;)±:@ñûÔ'îÕ:%ËÇË< V	_æmî¹;hÜ% ÿìKº!1á°b¦Ò$} õý8×
+-8³9QÊÍsN`«×N{:óÒñÇQºäÅ#ÒDu»À
+<´±µi=ÑyÌ»¡¥Ú
+IÙ
+éÚ;r¤ÌEØÄ`ÉÙ´RF.·D1·ïoÞx»|;ù0Mà"ï<Õ%¦&ÙËõ4W+wçÉW777vÍEMÞü4&oþlþ÷Õ?¾Önþ8ýÍäíÍôÛO¸ùÛdWã-O£\¨9ëªñûïo¾yA¸LïõÿQ¸Ú;B¸w?Rj¤±õ÷»¿B,
+-íÍw?¼
+Î¹ðvVÕIm·W×dÝ'<²¿¢£B¢Ä®	-o¥%p9¹í«uDÁüMz"ÐÎöI×Ö§qÔ
+=&²búÊ#e¯Z~¬ÀànwK$%õ2tÔçÙ:ÄÁx
+-q½þaHÊ
+:<i¯Ã%
+-rR©§^çåaW+ï
+¡M]BN M&â^âsL¹;àú1âB½J·íÂßXPçëx/ÒÙèqêùIå®Þ_´áeüêíÜ*'.S+à_?7nDç
+<bÊöL»ô®
+ýZÓfâ¦ãj_º#wKâ×hÃÀ¿Bµ±W´Ù8cÏõY/×YSd½óñ
+'x
+D
+qS2ïèiÛGw ìiò
+- 
+
+¬rújÃ#E<òÍöë7,â¼WR¢P6ö<737n@Cyoumõ³÷,Ì 8¢$üíä?]£endstream
+-endobj
+-443 0 obj
+-3729
+-endobj
+-466 0 obj
+-<</Length 467 0 R/Filter /FlateDecode>>
+-stream
+-x½[[ÛÆÑÍ3íÁ·PUK¸¨<É²lo,[Ö.Wj]".Z­õç3Ó=ÓÝ ¸J¯ÄæÒÓ}úôÑûåÆóåÆü{(Íò{ýßÛÅûEê
+æ?ðù\
+ßìO¯²XDËÝÍÂ?¬ý¥ïû^²Ün2/I»ãb{÷d÷¯E°Õï7ËÝ~q½zu÷d
+l6jó¾¬oüs÷÷Ey±m±ê
+-¾ÜEc¿Ø+Z?½ò·4z{[÷éÎ|¸õ"ûéª1¿ý
+-õ}½jôè¾]AoQàEédì÷qxhÏY=ÆîG3Àhç:;ßºÙ
+]-À<ø*¯»{\¬¹~T
+­"Ï}ÛU}Ñ©÷ª
+jyîusc^¬£04ðc³¯æ½nÜõeSw°qLö¹^ýVö½ºÐ,/×yxweá~
+õ^µ]×{³Wö¥
+É>Ùï¥ì«®o¢Zz¡»	GÕèãÎµÝ«®hËwn¿ö`ü5N_['Maqem¥="óÙ!oëòÑþ
+&öâÀ­?¼p£éétfBàhd1ZÈ¡ª½ûEsr/M×Wú¼îTuóI}¼«ò:ïö½&	xa#RÏ'·|F]·¥ºqÓh¾*kö
+-
+nÔ½{¬^uh¤ MÈJ×«¼Uf©i¨mmZ
+yêýx>+õ\Î÷ÔÍPµn»´ÉmOM«cr
+&fÄßÚoÐRA{¦O¶×ñb
+-v_Vk(m
+y÷;BDBzm¼Á¶ïg»×
+^F
+-?àö8x¬ó#=3ûÜ 
+oÛüîà~õÝÐ»_W
+üTîàå
+Q*ØdäuAFÆ\½úu÷Ë¯U/v×÷Ëx
+-£ ÞzÛlGÉß\.^þ´Ô¤O[ú§?ÿùæçúÿ]~»üËâÅåòõ ¶
+-Av¬7l.
+-#Úh³½ysùýÏ³¨YG´dXiZl4ê7dl{ñüW³nd&¸Ë[½
+-½òæ¶9:ñ&Æ©
+göÒÄóæ:ê)pî´Üµ¥ÿ
+-}Ò±ääîÂéÀaCá°U×rNÁ9o¶!|·ÎëÕ6©qNÈa
+n#¢
+-¼5±è`ÜÒ´}JIÚ=çÔl
+ò-úgÌ#A½úØ»×¢»,%{_]¢©1i)}ÛT¬'ÆõÛ t@÷0wÏÄAdþöÿa¿NüÏÅA$ÙD^µ*ß?8sªe×wÒÐ¸¤|NZµÂ¬s´Xóë·¡°PÙA¯;'Ób
+	'æ>
+§aytnøCÄ±e ííC@ìãÈ©2bHs¶Ìº Ì!eV3hm½PÐJ¸ÄÐs>´º­w9|O¯L¢CRÄ$°r¡ÐÁªÞ«¤OúÒ¤m»´$6·ßO8ø©X Ïd¾úLúlÿ¬$¾$$çÖs ¶
+-=Ë!ioWoJKõ$ÓqËª/+ÜçÇú ù)üM²ª>ýø>ÈxÛò¡ok#W»ëpè"Ø×°M
+ZÃ×±sÞþãË
+°ÅVÐiÉ-~&ë¿öô3<ï7JB
+:º(o(êr÷0rûn´íîå=²^ìýPvîÙº¢Ã×;ãK& õØaHé8&=Ò#'gý£+¦!míµÍ\ÐæíÊ·ã)EäO¸Ù°¹evØÛU`?ÌúMØ·yuÁ
+¶u2b5µÒ1
+íblévö£æ-n»¿	¹îz»G´
+Àl"]éènÄ»ß®è~¼)ò^óØ{Ayíz¶ÜðJÃî'³Ú)­óß\a]1t
+çc`¶¶Ôìór|Y`%þ+©óQ
+Ù28T<
+-¦
+'ã/v_é8¾
+ðçC«Ì±6
+Ö)1;mÿ£jëòö×^ÚÕúhÉÕ
+è_­R®]nj
+K
+-Q1ð­i
++Ivp¯-µHµÌÐ£uZ%¶Uöicb:æX>%áëÕû´VÌj \
+IU;",Ëàë|¿¤äÒV¨Ó¤tóò«K"{v)[¼ÀÅÙÇ¤0X&³\2±n
+-y_Ì3É îÒèÇÂÊb8RõÜGYéüÌ¯a#SrRÄê}Qõ	ÎFÌ
+-äÎµOLÔ,Êê¬)ZÚÚ]tõúòéã±²;IyïüJ·ªîêÎBj1Âê½åÙJ_æuñG>	éD?83§vÆr0J~jÊ_®5Ø!æÅ ôTµ³ÁÎ`}b¤
+:ÞÊcîÁ"ùøI­ÎÖõ­ëå1@Æp@¢UÓjXr ®Á×3P ¦g"9WåÍDGùÌþ B®NË¼Á:[£¬#G¿¸³SaD¸fïl
+yazaÚôQ1óä6:®.µU8Y§ùJgò /f.´ê¦éî÷¡
+Ïý¸ÜÒ9¢¶Ïz ÕI¶BAÕn½óË£a*¿á ìèhúp\aÈ¢'>
+-Á[[4yÛ)Ô£
+-ä-Ä¬5~³Åã¨föÓ[ªZW
+hemÛþÈ.±¨-ªÁfÃ®LkW«ÔQ×·Ê:!m¼Z*_úP´Ý½p
+M[Æ¬²æà,MÙzx
+j¾1ìþ÷3
+-¨ÈZ¼ò}[vÈPH¢bvKÜ¯Ï¹üw[*4a1òMä)K7-
+<0Ë5
+[¾¶Z1ô+(©\Êâô%LÉV07æÇ'	]¥g2¯*ÂgUÞÞÂTíuWû½Sa#¢aðÔ*?I¥,ìºÕ{Zßvdgzº6Àb)Ú½£­BÎ@øÝß»
+-3jÖâD
+´Âç¼hæJÏ±qVBÉó½:
+-[î
+
+>Kf!æÞtåj:<&L%U
+i&g.Ç¼¦9Ç@u"Ì°îea§A	ó`3h|K·ÜÞ@®ð
+ÎCL3½I{âQ§}<aa
+³s
+-V¡ßÁ¶EÕpñ1BÖqxêx¶êÿ|Å©Çýpí÷º{ånJUÅ9Ñ4ÏÐ Õ¦jn¬iÃ}µÇ±q4°°T
+¬¤OÙºÛ¬PÈþGÕ CNiÅ(fM3¯¼·ìþ6&µ¡Hµ³\=eÐzD.yv¨fÃYiÚ GîjÊù
+Õ 7tÖ{×2û·Ý¼-
+-
+gWÏ¸Ü½x¾û
+/xâÕÏ,*ÎiNé&îDð>âêà¬>x[o¶§;>
+,²¢ÀþE#×J}Õ´tÀùKò®+o©	+
+óÀ9ÊmV]×ðHF¾Ëz'é_>fB5}A
+Pd:ºÌ$°¨D.2Kä='
+£²wéFkHÞ'èÏ| ·
+ôK.{çø(Q,ñ¬ÒÅáp{@A!ÏuÞ©:Bã¥;z9i^þÍMnÅLy]  Õéó¿th#yúrÎænL ,(Gç¾?y
+*ºhÑ]ÀËc 
+>ûËÝU¯QE«;s
+¤ú÷:Î^Ô æ
+ÁwN3nà&õP½eCVÒµÝ0d7-lÎîæ=ø
+NNÎÇÒózºû£9£ìÁÚÛ_wYEçã>­v×[¬Ëþg
+-úÙvù¡/°¢!Ð5Dxª£ÈvyR%4ÍD¿ "¼æÔóÐº»#%N#W°bæYDl¢uR
+ñLzMõ|kµÞGUw(¦
+©?æz
+-´aYé¶B¸nE¤`BÊ6bu'm\{Ùû-¡ 
+-=,Ù
+K½tdþ«÷CÙ*wÕzÆÐïÊÚÕÛÑghðL/ù"«dïª? FÍëëÅ ãi00*
+QdêpÆ½%íËã[y@ .Uf6åD£¼>]i7¤­>^h¢ØÞìÙ¦b·OúÐ¾¤¸»I&6¶7âüuJëÛf~ÚX½ë 
+CÑãíDNE5cñUÝ¶tlI;ù/þ£õc×«;§ÿD3WY@' I2°
+-åÝyEË¬UË×ö>uOßô¸ä ãìøß^²ê1òæÚÜíÉtdÏÍ#G*ãSzâSÖ¦ý
+³Ù1º*ûcßÔñ±ã½+'aN\¼|Aî¿øI­*¶vÍì
+pÞMs/ÁñS±pJçU.§²¨û9DÇËÀ²{¦ñ¬M2fcJæÞ>bN&&rë`Jé¯l8 ßà~ßLþnª`×£
+
+¸Ð^U
+UN+Oë4}ª-«%întÞeº¡ê1Ø @Nâv¦[ëè-Z<¾ÛØÄþ´¡ò¯¸A%Jõg7:¡õBéòvÂxî£Ê+§FT³uåIô5À8~`¢íéÁ¹k8&Tö>kGwGÁgá©
+¸TÔ¹âò]¥',ÐA1ËÔìx~¥
+ï9½×»Îeýp¿Ó*ÎÔ
+dPeûÁUI0fÙ
+Ô qÃâeå»ÑiÐò0ò"!ý]ðªBå=.Î|³0`q$Þ-J>rÑ¥Òk­É­³¢EÀeÁ\5%Þ9ïJ>åÏÈÙ\þxFóGlyK¢@Ð'<UG Ñ2·_´Eë#©u¨iR±¿°BÏ{|cçØpk¼Ã'úö,A&¾OhexÆWe4ä¸³S¾{)³_íâû,yExW^(ð7R¡ûCµ
+-]lª)§7-l%Í×oØ{`ô­<Ç
+z
+-ÔÆ
+(£µ¢láhÊûÂÞÏMqØi0P~
+¢½°nA|ê¸òÜ½}¸¶?É³Nrco£²°?Ô:A7
+MÎ9ów2Öb%-/»ë­Ëo±ò×
+«ò_¤øòÑ¢çåb47:4-
+-&Ñôà]öJÙ¨ø0Yokþ%ÁdÌÑ!l¦®ØÉ¿íå@BAI´ñSØ¹ûÐÞN|½ÝYö¿¿m®6êMÚîßrýôbwuùüÍ)%FÌJ
+-ãx¼ÎjDÝT
+³D©Ý´	2ÄëÅ¿
+-X7endstream
+-endobj
+-467 0 obj
+-4081
+-endobj
+-470 0 obj
+-<</Length 471 0 R/Filter /FlateDecode>>
+-stream
+-x½ZÛÛÆÍ3íà#Uµ0¸3o"[ë,Y¢ãJÉyÀØ%$  P«u~>3Ó3Ý¸»rR±ËD
+æÒÓ§»çóÒ÷D°ôÕ¿ö¡8,üåò¿ÅçEæ
+êý?åóíâé;Êh¹½^ýb-ú/ÉÛÃâÃªÈëâTçCÕ6OÖ"ò}7;ù¨ÇcW5Oþµýi!|µüv'¿ªæF¾ÕûöÚ>õå=0¼8±CË.¯í¬Ç¼*³þâP]Uô
+Ì//²m÷e_:Ãä_Cõ×"Ç	®äúîªþXç0_ä{Y®îl?.hS;»%s¶u$R/"VBVäêá{¡9ôª?
+y§ç
+
+?_·ÝAýd4ô¶öú·Ô
+Í«CþµÒÃØóíÇ'ý<w¢½°r?Tü@mNÃÏì{ù9ªÒ~
+zph)nØ=z£®làì¢(ÆNÏø^bGWÍ®*ò¡Ü]èG^jOÙvz<ìË;snà¹õ¨ØK¸&ÖQ*1À×ã=Ì¨2I3
+&­`prÈ«ZmÝéË,l:ó68Ùµ
+-6î7MÙ
+¦'f¡Sû
+Æ
+11øÏ§¼®X:½ ãKë-veÑv»T»³&$¦UÞUxún£cûlÀ{¹u¥'_½¯þ°14T=¶;0!ó[½Ä73Õ
+-6;Xæ Ù $D©	CU½
+1V\bäÏf¥}¯ò:oÁj'¥w8Kjûì
+-)Z¬A }¼ý6n¶Ç¼>é
+Âvöí©$£²Ûà¾z=(ôÑÛ$ºÖmï6
+m·¯®ê>ÒïZd©·	_înJ
+-&!úÕÓÐÏh9%pPJVÊÕ\©ÔZõWABAJÏàÒè¥ÜNoö»¯
+-×õä8¢h¥ozþÁ Pïvp­n(¿êµg'ªd&SôÆ-|:ëÐ
+Ä¹ëh+U+e^tïJëpêð
+-ÚUß]©)Ê%
+øXÓPd°øêNÚG à\®ì3ã¤ýª=Î©ã!`=;Sp÷§NÙ¤@ÿÓOZcjâPäÀ|··ß9¼
+-"{ûqqì£2
+añàbèêTÕ±®´|
+, êé
+-à0F?æ]a#¡Ç¾¤e:ë0ÖGÿ ¢Ë  Ãâ.ú2 sBÆåøÜ^ÙØ3Á&tÌìÎ9×Uk;v­YNZXßv½¤µz
+-ñ£ÛÈVDëé9ÊC`lÆ|Ö¯§]Ë÷ÎWH£ jY¶×Ci¸P(e>Ìv»»²F}J¤=Øí¢FÊq*E/
+-k#ªêd>Hæ"Õô.46
+ÛÝÙ=ýDgE~êQ0ÕSåÀ`ÃD@îpº:´öã¼(ÚàgGÜeÕ ¸p(ê¾ûd=	J(s¤ãÐô\îbgg ý@Ð4B
+½60÷èÀÖ2úYäL*îñ>Eñ¼ê/dktmÄå2*¢oh)é:4¤ÏÖ 9.øMp!gPWGLH ? ývi3_óÃ±.`ûj®Ý Cð!.%ý
+-Äõú 
+?eçB	±Ê6òE4©bÃP¿¹Öt1ôÐ¥|3Ñå:L]ða*µ£¨vWKíctAeÊYLV1J)ðêdà)Á	cÚãõD=Ox8p~Nu
+jCõ/ÈJ/¯êLX
+-FÑÆåußgÈ{v®¡Í ;òìÔ8#aV¹­Ò
+ãöhù:³+9ÃOäy(d6çÙ§fÙà>^ÉÖÂJ¬Áû"v»Óy.*ëðç
+
+~ÄÈW2\4o#úì32b<8*#Õ%A
+äGÉq ê¥û¢®>¹Þë@Ìóº.õ^XÎ R)Ó¯ÿÖfQ"/á ðl50'V,
+ë2aYo,hêåí
+Ev;XQ6Ô#ªTaÂc°8é;ÏÄù$vaònËbD Úf1"*6ÙãfzÏw
+ÙÎò¦Ñ
+-!júCÕÇSox£ Po-,ÇæÉ³3hJå _`c!ÏPA×HùêgL_[-õxÖa"ED~ùp*³1íD¡E÷¶+¦+W­¬¾Ãh;D
+0f1õÞúÙÕxn«®Dþ¥')çµaÓ¾
+->¿)
+QMP©t@}u`À2­F8qÍ½/éÄ£&dÄäLAdìä	°
+-Ñì Ò&³µ+riT@	g§L+'¬Ä¨M×¥X6M¬&ìÔ0±îgQ
+»{ë×mçL>âä[§¼¶S~y¶û@#
+è
+dz_ÎdBA|3§ßf
+DiDwéÂ£*êkðÙôDÚ¨Z]×àOÃy=x@î9!âè_oÆüCW
+>¤¯´©«¢ÀrÕhìªÆT1Ö¼ñbcNFfò]cU³ÉYSo¬ÿ?)ÃÕ
+Ïìz
+d:cÀÂ
+Ü'äöoBï¼ÓÓ9Ú1J²å>
+É)
+K@T¸×ÏL~â9 £T'XÌN´oö4£³}tV>4»ÙzÃg.c
+e×@kûónN|ÊÿdÂÏsæn8
+ç1iýY,¢ÎÙ48O*yîøèR@cK¹HÂ|¼dOjDÄ/Ø!
+-fBÓs²NTø)kò<CïÜU}qêw3µ(i
+æ±,âëÄxxûH&LO¦ëQúUÙP#UÚá$ÁÈVý©pr%¨ìrApO'9Dg³¾(ãÙÒÔ){}ëcÖ4Yµã¬aÂyjS1ýa%2cuEØe£ÍÓ+jrëäkrãiÈ©(·6º.È0æ `±aÓ° 4¨ZÁ£.z
+âmé9æ¹¶´äHÀlé"áÇºûêF­Oßþhcäo~Ý¾ýu«Öz¹]ü²ø¼
+á&Á:Z©/¼t³
+B_¦ênÁóËÅÓË×Ë¡;§¿-Åâé+õ¿ço_È?.ÿ¶üËâååòG\=à»Á»Ä¼d¤:çÜ
+$î]¾~9±íQÁ³"æñMÛRìÌUèû¾yÝµµ»@Õ
+u#b&?jÑÚ » ;sHÇW¸£m «§º²6&Ä1ª|e¹Ú¹d%e7º
+BuQÝ¤£~ÛUÃ@Äj]eeàË
+-Í}Ñ±LNd<Á~;¢bù¾ºiræLß×ø¹5þQÝ.òGcü#Li&Í÷ÿ^¾xõfjx,Ò¢°uJ°[
+-´ÀÏÊÝëún/ðâÏ}^´Ó¸ïÓ*yÿ	jR1U> ARfÂCÂê±r_¹b_
+ù j2ì{¸T
+äòôöíï,Òã»öiUWZþMYú±:²l«-ø
+´:ê³TV».*JíéN?Iwz
+5£~!ö¡JÀIÍ'hüú©`ú	ëíz|a££¦ü`ýßAí?Õz¼ãK[{Kúq­À
+ `úlx0,|KSÄOXÄ|ûîÍë·Û¹"
+æhÞ¦â¬%J}§¡ºcy?<ûûû)n³ü\
+Í[*óÁ«D /Ûä¤P
++Z4¤=
+-
+ÀÁð "
+Í¼:ÓXåv`^ÕÁ´GE1¢
+--Vnq¿íK[ôBÍ<
+ ´i±×Yw¸)éê
+*«iScTQèXÓÅ¨+{ådì0nì"sZVØt/TÙy³¡dñÿ*!"0YÝ]S\âÙû÷?þ<5** ì­!ÆÆù­À1_Ãïãä
+oë*ÅëJ·Zw6í¢)56Ü
+-
+Y¨âÍ¼Ùæ$ÊÀ¶ã
+°ÖÞ©ñçÇdhs[&½4+¨÷ànMÆÈ/¯ð' c[ÝÝÅ~Ûë:òÝò$EW!ëAmæÈVÜÛ3uø¬þyó^ÍÇ^è9¢3×&|qÈU
+
+³@Ä0ÉÓ^ØÁuÕXÔÊÙ­;d<¢Nöô¦­9ÁQõXµSwKYíá+¤ë(Ð^É:pÔÉ+fOV
+qæQ©ù¾öXhSé±_6!8]¹óÓ¡Gÿµ
+vý`¦òMs{ÛÎ¾»1æÊË¯ùàë²k½ß|´ÖÑ|Íx1y¨ä2íºa|²v«­F
+-¿î¬ßwý`ª^(WmçÛü^°)dà\SlkFkØ{_Z¾U³ÌJ)MãàOù¼üxï/ÎlÏýmw²é~íuM¬Êð¤!ö'W6¤w*Ë&²çaR¨
+úªJÎV÷@±güy"Mÿ¿§.¥<AØ¶=¿;:§ZwÏS3¹WdÖ§¡Äå¾
+¸Ø£¤Ø_ÁäéÃ¬É«3`Yjù `ÅÊé
+CØu ÷ '2´Hö~YürA:Óendstream
+-endobj
+-471 0 obj
+-3580
+-endobj
+-480 0 obj
+-<</Length 481 0 R/Filter /FlateDecode>>
+-stream
+-x½[[sÛÈ±Þgzkè*÷G¯ãÚURÞMg+%å"AkB²?éîÆ ª-çTrh`0î¯¿¾èóÒ÷±ôÕÿÙÛÓÂ_þ$ÿ{X|^d^¨þ£_ðßÛÓòÇÍâÕû h¹Ù/ýb
+,sú¹dËÍiqµ:Ëë ö}Õ¼ü÷æï
+xA"nvÕpz¹ùs$^(àÉÕêFVËNþÔ¯v/%ê× Ìa¯zxÙ«mÙÛ±EßW¦ÜÙ/Î­ýÕg»àÂ>,
+ÙãÈ¶ñô:A{~dÚ
+«Þ¨à$a¢Î'¹SIØ®ô
+B5zßv§ßjß
+-}¹j=÷:ô3/ËA¬«'­{ÊÛ¢+êº¬í¿·íév8WÍÁ.YÜÞÖÕ¶8WmÓÛÉqµm!×±²ëé(öD6¯Ð¢ÑC¢¸i%X"|ý7cÉÍË9ºÀ
+¾íZ³7¹TßvF "Tâ"%=.tE§çèÊ~_íp¶¯\g@wµºcÒÒJ¢õ°~\Â}çr+öûsÕV* t'3*^êy¶c¾¯KÐªÐgÒ¹ÜÛ%
+`)Ó¸v°/o»r¯í¶
+2MLs/3hQ>XGrn©IL ö^À@:zbUíTK¸Wï
+É±gúõãF-óv³ø}ñy¬£¥ð¥¶¤ù2£È
+-]~¼\¼º|·<wC¹xõÇ2X¼úYýÏ¿½ÿïòoËïo/¿ø¶bÑGDDË$Qw%hõúÃË~ß[åßto¾&ÚÛå/ÿTá¨J1õëÑlg1góþãÛé÷}½jÚæ?e×^¿TãbaõWª¬^ëjµ«úíÐ÷Fµääy³Ë­ÇöÊ¿LÖ&äXI[óà}
+ãûuIírWã`ÞFÊðäc_vÿ=IÔf³«¾/nj¥ÁH{Ïny 4¤õÿÐÌÐ\
+-
+üÞvä¶(»(×ëÚþl·{2HüÂ-sir¿MQÎ°6'·,
+%3J}8;Ûý±Úê±Ou´m[t¨øòÜµµým«½E¯ªÝ¹<]Rà&oÅ¶Ü³ôÀ¡<±|{(=¦î¾§;¼¾îàÄZ¤o-2
+}°H!õ×Zä
+U8/-"kIÈÐlE_Nïm°»ÕN×=ÍNÿöÜvæ5
+-»Äëë­õh»òÕ©¨@_Sb:
+-û
+-â
+¹%ú5²}_õGõH¤$| XÙÿ+W{Ø_ä{¾¤oO¥úD\/»`W.ÏÙ1è©áé=JðU{¦¦Ï8ëFz#=¥ü'YÍê^ý;#
+ú4 ½ÕôÆïæ
+µYdK«©Ç)
+-·ß+W¯ÄxaÄ®9A->ÍÑãä9=2É
+¥
+Gyú-ôXíXâÜ*2Óc
+û±ü¦À­Ì¡¤2KYÕ#R¨Õ5ôðäL£/\"³*_H{¨ôõØ_Y? ï¬
+-½X r4ÅÂÔ½GtÑjq}¥BÏf%ÞC
+-zâÒ«Æ4mQeo K
+õ±Eònh×3A5åñµççëZÃøY
+I-È¬ðÂQÕ9 '¼§6v$"55|öÐòVR|¨e%m?ëgiÉc$ªX3°ä &Lßý¶«tïÀ)/0æ
+-ë(^°|1ø
+)ÓÍ±dd»+Éïv%>¿)zé,-VÆ2bñ>°gîÏ2lÄ·
+Âû¶gKé.ä~Wñ
+-ÖóÊàãvÀñ°D0¦½à±
+_>Eü@{Dµsuu<d» =·<Î+0 êKÅj0V<µ
+-íªRÖæ|I
+-
+¯m'#¬"ÇiÑUFÉ	zä¦73v'ËÐgã
+-
+gmÃ'C65RöÙIdî¢Ày?4[xRmÕ8R8H#ØPthqÉL
+Â²£uR:`&ÄÜ7Ãá Ai<ÖH+åCÙ(úÂ»6&²²SÕT:¯,QBT^ø 7
+%LÊªj«H½©þnXÊBf
+ðt+ór!tö
+-I¨æ$qËÁ=ÉÄùº@$9Ø¶&	u1d8×üq×OË/åv0ÔXÌËÿ
+<Ð ù\¬JoV`Vó:(	
+?ËbôR%oÈßuÑlKK4±
+-Ü¨pò([-«[Ê
+-XSð,&1ìÂwò91j	Ë@¡­µ1Áv3`âëÞ`²$ø£HK;,©ÈGoõÆÌÍmëBê¶5|lBºs¹;fLx7'4°ÅÈ\ç©èå©¨·g¥Ò
+Áu
+~g¼µ}"ï_ÞèÉsbðqë
+Ù¡8x}y>¦Äl'¹K|4V©Ùç²ÙAHÆÅè ªwîìXð°f ¹®zãpí
+ÏÀ¿pN£
+-<1¡e©
+«©æì"Ìô×qÀøKç
+-á«
+ØÖ£´«/iE
+spzÃÌ±nm¯á~ÑÚÆ!2TÌ®wÙ(
+¡®=õ\ÙÄ<¸9qH+¢û×$eìG9I¶i-|-XÒ7?¿}óÙtZà:è	EîtZ ´s í:ö¤!ÇÙ
+-HLÐíLHéìGRj)S»ûqýóÐ·G
+;æT
+-c#ß«X ±LÛ±Ü:õ§qÂ
+-#e×µ6O¶C]Ë &)Ãc;
+(*âf1³´A"^Ç
+°´L
+-}0#q.>¹¹(LäâØ÷Nä®
+³mvÚ.#
+Z@¢ÔEw(]$1 Ýë@.<; m:qp3Ø
+d£¥dÄ)Ózg
+pNN/}ºFÕ(g
+øã½¯Vu¹ÇLD¡ckMØXLF×C?1®2¿
+H(xL¹¿¡?7eÀ¨Üw6¥#MÆ¯
+ãd1.
+\ÆfÑ£JvZf£ªFÚÎ)&(:sÍB
+­PQ
+-*AÒÞÛdÇ)#ÈºÜâ
+-¿¶â³Ì¯7¿=R
+-	s¹¤Hu^h"£TWBÐ:ËwOÖ
+®««§¯¢QAî ùêY¦
+,à*J´Ðq-¹6¤·o~þu
+-Þ,Ë´1ÖÈst+ÊtR\ëýXâEy¿ÉäåÑñk8C¶dùgk&wJaïÌ\zpá
+ÉÞài)S&îa©Ó
+Å©|T4	È
+-,hßK¹wºHâÛí-X«3øÀÌ£wêÇQ<
+-:!ðÇ³öVES}¯Ç3£8zøhÞÍnØÒz5r¢£ÇV^(äÃ$cû,I ªî¼¢JOø0~F°
+-(<Î
+E¾¬ÀÒ"Nòò§¬å
+XÃ,h
+e&.
+-Ã­9ÝÛÑf1
+-½9Mn*,9³_IÑeªo%bÁVJÐ6 bY2¢æå3+xb Bÿ¼yÁóZàVðäÆÕAã!Õàá0õ*å~7
+-j
+Q¸1f=º¸ 4ëùx]
+¾ukr
+
+¾OÏvv¸B¢¶yû0ÓúC¸>vn3 kÉF
+WdðÂJ:æþåÂ:\b>ÿi:MÑO)êÎ<]Z»áñcSòsèEÐ×XÂk×WE'pGøVÙG:u:>Óêh´åV¨½àv£*@
+ðÖdLàJÜëT¡^>vª¾«ÎõåÌhÌ99
+-Î)ög/*nJÉ¹>s²
+!y\±¾Af'
+­
+-
+AF0nb
+ú¤£­@©BVIBÔ¡+ûhÔÔ6À«FEÝ;j2bG]Ö
+-Y:õ¹ùu¬äyºjkd(B"¸¶·0**Ukæm¸º&Ì¨¦5§<A
+éÆ Í¿	q}h¥ó»·÷o>LC²D?äÄã<l½ÜùÓ®5ì*c)ÖûfÂ`ÍMæÈQÜ7ÆÌ#E»µÝ
+Ïfnâ¼6w$ý&)!ë^ ×òx¼Ã]¢MX7¨vs§wôã$'m
+-E×ØLmÂÉ)èäñZTC<IW
+J¤å¶â³3ZÂîäFãSHj#ÐXfð=ÛTôaÔ¨Éó|S¡èM1Åö²þÎÈpúgJCúéuµÕ §R)µ
+èÈ<¢4uZßÇÅûòóPb½Ddþ¨.DÝ.¦
+òÞÞÓQËGÍCÜ¢)ê¾2iµEJPEµ-'KGHÂ\_x3¹
+µéÈ%3~Âà?ß'0½=¬JÁùpÛ@
+SOÇñhÇvd¨÷.<½Fg3l
+rufHBole*ýiÄèÂª²J,¬Û÷³Ì)¥Í1ÔQ;ÓÞX°SÍqø®ÃN&¼ö±
+cÊYê7e¡x¦ôÂÈÍ\>¾äÛjU©x3®¢½vpO±u'ªy4<HhµSY 
+SVÌ0Ìj
+¦ÙHfW<ô¿³=#ã³]	Ë/Æ.NA
+Þ>èN°´"bf UCæjÎ*h
+e6òP`R7g
+ÂÉ¦ð]Ö3`²Ã
+ìåã>ÊÚö"§
+GgS ¦¥µ?Cs=µ½êÔ
+[Øýp:ÝÃËu>
+
+M	Pãm3Ãéå:¥Z	-¾±)O&áÐ;ÛJF
+dh-YÈüx>öì¥aË4ì=ÏÿZì
+Âìô5[ÏT¹O!§íHc ©3¤ê
+:â>îTAõ 
+ÁÛT
+ûg!Úm7ì o1Ù¸
+ÙxëxKB9CñbWÂ{t uåU>Ñ
+`n'Ù
+¼ÓvÕ¡RÝ<QmÔFÌYôC`D&Æov
+2X:¹°ÅT§+u?ÚAÀPif=»}dk××û7º¬÷k:Lµ¿ÿLµ¯jàE	þ	
+-´$%ÈÎ¶$±þ¬÷TYÑï?-û{%·åH`ù
+:ÀziåØ¼Ò`¿·É²Æ)£WªÉþ<ËôiðÐÑ Ö}º["<;ì#§¿Ú13þ;9*µ/íþ÷Åÿ Ø<.endstream
+-endobj
+-481 0 obj
+-4026
+-endobj
+-488 0 obj
+-<</Length 489 0 R/Filter /FlateDecode>>
+-stream
+-x½[[wãÆ
+-Î³º?BÚs,.w>:¨Ý»ö´Ú>p)ÚbW"µ$ÇÉï
+f /²½mÓT¦Èá
+ðøpÑ×¹ëoîªÿÙùaæÎÿÞÎ¾ÎÇWÿÀüs~¿½ú(bù Ì×73_,Å\ø¾ãÍc7u¢d¾>ÌÙ~ÿrýïDÞ±ÞÎmÑµºæ%xíîQê¿UNhÿÎö§
+	ñúÆ<ÙE\p
+ßÞòiQ7êÜj*h¯)®ñù:~dûô
+Ä¼a³86õË¥p]w±=åEûò_ë¿ÌÔ	óLYÝÔÍ!ëÊºRÏFãâ³Ùgóh}êàA)ªÄ>Øíôù\'²^TÎ
+{é5]©ù-ýP¨íP©O}¿Ò2ñØð
+¶aEv¯cÇµ
+fÍèµø²º
+n´<EB/ÈÐ­vð¦9öýÑ
+»hòAq'Î,ô Pã
+-È,ré àté¶¨&ë¤îÕö<Û6ë2­Xa]Ãf¬ø¥ðÕGepÑÕ/ÜPV 8D`l]Ñ
+m)_ùrªPA­}L©e)<õ±=ÈÆÜºåD,èauàRÝ.ëìZwðt9.Ân»<
+÷e^v{¸+r á[ú)åÛäÈËj(ck
+,OÚô ÛõÎ¢U{(2b­)é[¨	µÓ~á~MY`)Ð­4zJWæwE×9Ü
+0[4Æ¶ôåK<¶E7%ªb+?D
+
+}èrkümÝ)ïÓN
+ÜÊ(`æ¹-n²Ó^é<T/ýU»´ »Ñg÷¤]Êsô6<7Å},=yny>òLï~Y¿ÿe­î¼ZÏ>Ì¾Î}
+pRn;q:=O
+ ïW³W«7ó®9³WÙ«Õ¾ÿü¿ÕóïfW«ù'D(¾'¢IäK@Z¯Þ\Dé 7RpeÛ\Ãâ
+%@\(ÁÑ®'ÒÝîFYí ßqàr@§@=o¤¯ÁÃ¹t+£©]ìØÌnq÷
+`J»¾+ÈÿÀÍ©ZÂKß
+-8â0íÊ
+RZfÀRëd?ì²¼
+KÙ
+-`&a »ìW$Sè¯5\ûAÙ8ß8/ø¢ª»`Ü]éÂÞUhz;:Î²
+µã-	¼Ôú±3ù?M))Z:êZGS
+ºñySd­<ÊþÞîOb,+÷ä)¤jôQ£Zé
+¬Ä	Å(I²zvÊ(a X½ùä9Fñ=k÷ÃD9?:ê¬=H=ï­=L]Æ¹_^_¯~z;'÷ÔÈ£R
+-IekÜil¯=ÀP0é§{coZüeì{<F.Ô·1-ø¡»+5ßfn³ÀØbè Ý.£êáhC2
+FôÒqPÆ8]e¸æ{HÆlÈë^ìáÎÁ4q1AãnWæÃ¶3Þ/Ð¾D/{°*®Hé»t¾¬mËÛêPTÅ¹¸6R\ê)ò¤Ô|ËOKéê@
+àlºDVs#æ
+-.É
+*ÆË° §d×J&''ód`vÇLÆOXÊ²kæY5âf#y 8oêSà¹è«{@É}ÃÓx
+-C+ñª
+HDbâ
+wR^KXË Ð ÜkÚÍ¾|}=¶ã¥¯]*IþÓâ÷¢©?½âLJ{iÒ¦üqêÏà
+¨tWÒúþsìÜ½P;÷çÚôYòíls«·r§íÙÏhñ¡°*Bô|'ó|0°I±÷Ã è>ÑéH8¡5¶6­*ÖDæ|F¤äÇîêºLpií3ä³tåDÌr
+-é{.G­
+«
+-¢^Z¹ÑFlÉ
+¯!Cy]YöM|ºkê=#H5µñJ¹+ÍD@
+ÍbUM¬×vIf
+-ò4ãcäÉ·éBLD,îea´¥ömÕÅòr¤Ìío
+÷£¼¹ùhåÒã|UVSri
+JWÛOA®0«p"ÏFâÁ¡RòîS¢µIÏ>*²Â!<"¹¤¶¦E RÆ¦@
+CegïäBqS4Ùç=®B?µx1«	»ðÙ9Ù¶6/D´æáÇPé(èþ²2§4^ Õôò¨\	K#1UÂ@´Y¼hÚîP«Ò(0rx§ó9V(BÐ
+f¸Å½ýNÅXxÝLæÚ+T¡R=
+ÜMÑå­HPº¾Â¤ìÞ2Þw&ýùR+6@iÑdâ=¦Hæ60{ÔïcÎ­
+¿
+-HFÞîêÓ^Ó#ÆðÕÇn	û
+3q 1ÊO\÷Yb Rà[¡rÿY7ªím0Þ×Õªà×^ÄÙS8
+¦äIIÒCî0ÏZ_bÃúÖÿ¹çIm ²
+±	­/
+}'3VMlTîÔ.}ª UTø=ÖxÚàIù T¿µ
+z¦"ÂÜië !«ö!éÝt6 
+-
+2/2*
+CyÝ4Ek+ôuµU\Êt¨X]÷Á³1zcÜ&kµ®
+-¬4mÀIBÞá^ô,ÜÞUyu  iæ
+.ä
+Ï¶7ûÜÞæwðÒ·wæ"ÛZrÍÛ
+-y
+-QOõ 7M}·P'v¢\saì×6®K£&+JâçRéE<Î
+ñ:#wYkrì±£/0×¨;5Á
+hË¢6÷ûuÝÉádläÄ|y&k
+tG\ï?¾mu¶IÆÆ¯¶ËºÒ hàx
+-Ø8[oÌÆ¥!5B²Nä{<E0mIHnLÃÑ&"a4x<b®>rqoÀ]
+-d;ûµÉCäÎå!	é}|ò-×ä!ÞD
+"D 
+ÀK©
+`X^	r¡"Fr=£Äñ|Å0ï¼`
+-­Ì´XQÃC9ót}Pß
+M|³ÀøUäå
+c1pNh¯Ã
+ÍtC<Ì`FÖ©%Ã3ÊÏp.ÆýÀyé¤B
+T
+ÛÍSØ 
+-M@
+-.frÚU¶Î`.:±àp&ª%¢JI=eö éèÇø¼ügÝ\Bg
+¹Ü{ÁÖ§
+íâ*¨§B~¬Ñ1bÁf<Ò3pÐãêýÒ×
+-~^À¬T:Ó}
+-o^®°Úcóeßí±ÅØÎ+
+öØ%ûh=kãL§ÈA/ôßÈYtöhC~ê=¼xÿñÝ÷k½iÖæhº
+¸|
+
+¤Õ{;QBQ*YÌ?«Ú;;ñBSEÃzÍ=)é<úõT´vn'd2"b¨),ïJ¥ÏF½vn¬Oâ
+²ÊÁØþjRJ¤Ec<]õæ5$ìnúaùîX2ºR
+µ´XÁtX s	úLüNlX
+*QÐLÛ 1=]s
+-u=ÊrM;BP7TÌÚ2>öê:³úR
+'2T­a]9>*
+4²àµ®GM3 àÅaÞ/øSïsÚ¸Lg½
+®ð¥Ç
+c;$c/¦ÒT#Ã­&ì^L
+6Ê(ÈÔ¤ëQ1*üIiÔ6Ix»°1p
+ð
+@JYZ=a i2SYòhñf*gV³#|K*kõöÜÀª'çéy ^/F½
+-?_]þxõñz$6Æ¹¶PRå¹Fh^Ûp
+-u¿É}'
+-i§V­Ë!_ªênÀ:	CPmÍsÍöá%e
+`ÈÛòfi 3ÄùnÆÄö¥ ¯V.ãÓí@Dfcv G3wZãÇª>Ñiæu^GÖÜVÝ#¬3ÄUy«eá{$`
+ö	JR Zä>Ëólö4Mm
+ÂY;ii©Û#}}ùö¾»¶5!TJUÂ¥È,|¨ºx.d20Kø÷Î>¹ÄOG`=µ&v°)DS¸¬ºÉ±®ÉônÀòàIojHìÐÍëGY\66EfMå{Â wð.÷ðy¡b¯I½í¿¾6ùoô¶sasJ$ë¯³*ÿ½n¯ñû) ö©5
+@­7/@çpÝÚ,°*kX7®«Qs{¸"ÖèpÇõië½¦h¬¥^46Äõ	_J8y²¼ÿÀÛ«/h¹{¬ø0¤$[òàâ}5 6êXì$8Ü°Z0uúÎ@%ñ ©"#¢bò:käALò¦½¾ðâ¶)·C¸k Oì=PoV¯®ïýWK4µúÍdF	ý«ÜÚ¥­n½úÌ}¢
+(Måj`Ç¯GSã¯LJ£ãm
+wIÙlpC¸lË6?µ­ñÿa411øBfôz 
+Ò:Ù¦ÔõZ¾}ü
+-îïO6Ðóflß²6ÑÚ>x@aNS
+§wÔþÿr¾-³öÃåÐ]
+-FT÷Æ_Xµo½4Md?7§½6Ò0fOì¶®²}ù; °¨Ñl¨ÅoÚ
+zÊáu®W!o«ÛÂDÃ
+
+
+ÁüÆe´u[}¾+»ÝË³¿ßQ0]{UÆÜâ/hjú)N&)Ó
+]\
+Eó*¶³ãJ(
+í4|ûTÃþ,ÍB"&´_¥è(2ÇWâeÆ÷pöÅl'²æ?]úqÃÞLäÕê§«3µReÅa4}¶4Kw?ù½{}õQrÓ1ý°ø¿$Ñ©BEµ¦þ}ÞëRK³c[4Ã¾YPÙª$Û3¡!d
+ðæhvRÖ]Å¸cFt¡e³¸SÐSI6Ó§ª#î>§¨­
+-¢vÄ®°?{^y÷QÙývÐP2k7Å}Bs½ý³)YóÁ®M¾95·
+}>ÏNú×z$ÝØû±ÜÕ¯zTíÒË¶ºØåõ6x<Ñ
+SÜEâÏÞDdð`!ûÃì?	Îendstream
+-endobj
+-489 0 obj
+-3877
+-endobj
+-492 0 obj
+-<</Length 493 0 R/Filter /FlateDecode>>
+-stream
+-x½[KÛFÎYØkîºEd¾)bO3HfãÄë±°VÙ-q¤N(RÃÇNöÇo?ª«MÊ3 Î"E²«««¾ï«êÖÃÜ[ùÁÜSÿ³ìN3oþ½ü÷0{­W¡úGÁÿÞæßnf/îüT>DóÍýÌ×_,ý¹«`zÙ*YÏ7§Ùvq*ºc}µô=Ï[ì¯þ³ùÇ,
+-VY"oßìgº¹Úü6ó£Õz
+-Wºc¡.Þ*àÒI]ÈVkû¹/;Q»o_õA]°ô·ñÊG¶òÏ_K+eÆ9o:ÑºÕA[E+omïü¼ÁÒ¼J©køÈu¯g¬b{¥*=<Sèj7Nr»¾Ì;mù2£UÌýX¢'$0p¼ÊÉ)ïººiWêRäÑè£haôÐ^Èå4
+íü8!çïj=®\¦.G/8ó­
+úZyó9ßíúFN¥ÔpUË$Ç?{ãh­b
+~Ò
+åsñöÞx*óU¬º¼!ÚÖè×û:B!Zêõ
+ÌÊD|»½rÓ¢Q¬Ú+¯ój÷G­ýÑâ:AÕ¨JW1Uéyqx&U¬¬
+¯_þüêßoÞ©{n6³·³yhvÍÃØKWi6DºL¥ð··³·?Í»¦/f/~û³?¨ÿûö¯än¿5»¹¿}Fsk0Å£@gKÚ
+_¼zóó¿nî¾¿ùùv}@9y3iqäK|øgzýÅ?½ùîÆ8X°¦¬193
+-®í¢-:¹±ZÇ®¶y×xMÁZÝ¡)©O1~s+=5é?KÌJÆ2v¾_0Sy$rzÚ-7¯oîd¨}g
+K¥s~¤¦/Ê¢±_Ø
+HÈ%öObðlS´bßç%¸ËÏ|²0¥á¿ýÖ¨l
+¼ìáëÁóZ_ö}·¯§
+g)£/dT
+-Ñr
+
+Adñëb<r¶]|ý÷«åZ9¢·
+`|º¦	þz¥Þ³&6±é|tpé"ôè¶s.4âËìË
+¨9þ		_¦ï36ÐfüC_´Z5\Ç¹ã82o
+%Dñ
+-ý¹#îµ#|ûÄ³
+ùpÈÁ9Ëp
+ªe'JSCÂ°í¢(¯©2ðì£µy{ûâÝ§Ó©Ô-ÿm°´C-¡ÿ
+¸¡/Yº/Ì¢é1B¦
+8Ëoæ¯Î¿j?6qHá÷öv5ÖÒ^
+5AöE°&JÍ¡Å"
+$ÅÙ40×$ÐÀIXF^<È}@C­+7¨Õà9BÏ^\1K[ Èd2ÈD¥!û¶0 ­'µ!ð
+êÝúkL"Ï	±FZAPÞÉ^é·$)9#¿ðcî$Óà:3d`>=aÒ6W~mòü;ÔH¡æXÃ:­ô_¾½O³1<o¼
+´,KÐ]r~X¢¤
+
+¿¦KtKëj¯ÀÇZ(ÅuÞ!Á
+fû¸Îªß@
+B=âµ¨Ú®È÷ òíÕ¬e$,:C
+-zÄGÑ
+re»`VK41bÞ
+ëd2qRÔ+ÐÎ¦Ú"9
+õÕ(}x%eÃÛT,
+Å7Ç¼Ó6Ëü'=fÒ&f%
+1£ôúÒTªËûÜÚúDîç\ævñ }Ð9À²>Ü¥³ B_n	¯+3÷FL
+-kKU°Á
+È­|·æ"ObL¯Ôá9V°È"¬à°
+ÛxiùùÜè
+*qæ£8¿qÅP$kIYM±!-SÁ
+XEn¿
+jâ;ý¶8CnÇ¼:à÷
+-"ßÚGûÑXü&uÁÎ á2u½K3£2oM$Cu¬83ÈÏ²hMµ
+P1ÑIë'Ê»5­æå #ÍÓQ
+}Z)ôt&¨Q§ó8A&ùÉÈÚ	=×
+]·]¼ÇôÓ+ÆJp¦7M~>ºÉá0
+-@ÂZ7$ñ]Ñ^ÛzdT§¨ÁSªS2Ì>j2×¦y[ÑDKî4ÔéÇCàÍ±hq´2ïT+>1êk1ÌejêøÔBÚ.>Íh<P®bYb¿¥è YF÷	9«Ø¼ïjïéàë
+d¶@³] mÕm1L_SêîÏîý¬Ésº4Y¯>#uÑ	×Òê°)ït¥
+
+õ,
+-{+7Î{ô¼TA ¿Põ ÊÜ{<­)Â'y÷	ëD©l=H
+G¹«M	h]æZðËÊE°âc×'Ûc-CÛâÖ3ûP\¥CÎBrM=JBä·Q¼øÔZµ ¢Æ+®Ýô&Å!e2¼Ïßé>iÄº¾ª
+-ÕmÞòÑÚùªÕÚ¸ÊCÔPüË%YzÂmªäDámÇ	¡ÙvñcÑTâ ñþÏ×L×VÂLý­*yaÂ)³´ÿ2ôÒaÈÙ¦~pëGÓ=@L`EÝk+JµÑZÝÊp(cÝËU÷ g<LÐyÇ¼ ÉüÓÀS
+-Ôöy
+éí
+-Uñös`#4¥îwÅÞ~¬RF!sÁ£½­­Oøî]#4â,ì
+-Súä+ân½5»
+E
+Z2ê¢IIÜÝ7%ìà8
+äþvó÷
+häÁ6
+I@O-ÆÆÝÀT2ö-§ÜP¢ÇX8.ÔðÂN
+§qÙZ×7n/¡V
+-©ù¦"ÓÞpÌ1.lù]P¦zÛcáW[fÌýíB/IhàÈ<m
+(uÐ%Îï±©uuqÓCØ¢Hûàê7q$e¯
+³ªÆwPÆDåiP·ëRyjV
+|­r&4^tr÷MñÐÃ¬%QÌvDý#ÅU±cc¨
+=óæÀyÖis Së8
+
+-~0@
+¨µË
+-9dÊbBÍË
+Çk×²!ëaÉí@ªQóÃ=-¦6Ìý
+-G¹òÜNe^:ä8!m;[³MÎG±ïvz«5ÓvQÞÚÛ
+Miã³Ëâq§
+-Y_Çn±Ðlu_î¡h:¦¨C¶FÓ{Oì
+-¶H¥òG>2²$¤?ägh8gÛc}aeRÑøQâä 
+ÊbÅ2OèAHLìhK/"½S1nÜ¨Í¡Ú4¢÷&GµG=Ð²ðÒU6µ
+´¤¹Z
+-'}[ôk¦rùé\×WNQR>G
+«UM¾.Fï·}w
+-M
+ÁLÈ·N/ö
+ûú!ÌöBª9aö³ÃwË hå»;ÈG%-ðÚui[Ji}â}³R¨¼À!ñÓ
+-Ö4^
+-¶-SÕ
+,è»
+`&f¥¯Û`©«R±,t½Í£ÚôFÿ£akäé¹ Õ:uÿs+@¬áêûw­PïÄ7
+-
+-puÄz´R Z
+-¨9#°>àrwp&÷öB_
+-SzP1ueÀ|B`Lù'X7ïkè
+
+¯èjAÙ³¢va6Ç8I(eûB{U²6>
+Ç²z£{³*§Xúf	"5LuÖpÅnJ	Ê¢þ¶uÑÅ6Ð¨+ñç´ß1ÄØ2A·û¾3!öR­¼}ð¾©OD%¢Å²ðEñö³+'Ö>jÞìZ%æ9»õnÀaØ1
+)dNæjoolDû»½L[LJ	%¹ EVOFÖ
+-Jù*?>± Y¯ÖÓóÂ1["Æ^	>W|¯Æ^¨æd@¿-ÝY
+-P3øhj 
+-òùÀ­°wÞçùû¼¥*<
+-h¬ÓyDmX~|¢«>a:bÛ`|k>¢ä,­FDEXÀi®wYL]cûöWÇ|Wø+d­ÕoFÍiY\C¹NÇ¢¬ÛÚ°5ï	Yaøl9H L6Ïà4èVþO
+û(g©ÐwµO í Ögf&º
+jþK\×®NSÚó	?_ç9i=1,Íw°ñäHtvÅÅ¢¼©Æ{BÐ,[k-5ÙG]Ú6.îÄ¶ÇÀká·{WßÊ5[¹ò
+ 'òT1,î¢Uu·´ØuEivgB§oìq£Û.]&î.oÁi6÷×Þ9®ê¯áó[0Ë0ì2}ãmª|ÿA´Æ<"¹÷^°
+6ØuÇ%éºïF'|ÏL(IøÙ,¹K]¨[ìñ-5
+þBÓÂ	/
+-Ä§u^¦¬ìv2; ó<YáM8s{gx«{Ztti+Â2`ôE"D@½äg{öÂêË)
+-4dE>¬úÙÏMa«+^^£Ë>{
+½
+¼7a×òéì0µÊKloÖT½ìÊ"¯þìÏ ÀÍ©iêóÖl*
+Ä­S><>xÃæ/o0
+-ÞLå=>}²Õ&!v)Õur[YÈ
+7õëí¼
+¾eTÃNànÝÙ*ÁcÝBØfBmÔWÌÒ>ÛµRQi7Ðâýe'>À§
+³ÎAðô*«©.ßísgw¤øÜ;X@ÞøsÐuNuk¿ Ö¶¢ës£7z¿Äõã¬ î]u°áÈÃì²º¨ßIèÐQÑ
+-àKÓëÒ8;hý¬Ä
+-®êÞøh| Õû¬¢å½Èg®,_
+ÏC&
+-r
+	Á#í=rÙJÞ¹,òìBa||÷ùGSÍÏZaðg-üÈÁ Õ;,qÑGW÷{å¤áÐbÂã 
+ààÔ2ôÂaè{;rNø4uoÙù¼jM³NN¦4 'Ú~ÕGrlß@ÕÄYõrf×»»wRtð«bç dgg~
+-~gã
+ýÂ31uµ¬>/¨ndM+GVLÐê8xðÜèFÿ
+$Jµ«{ÛÍ#ýSÀ±A~jÕéÅKðÞ ÊG-pÖÎl
+-s<Íô
+cöÛ¨¾½ø{©þT(
+-
+;ÙHÿ×Ñ!ÝO8¡Øü`	«çO¹üò# >íh®àAç#Z$X¼ý¶Çy§endstream
+-endobj
+-493 0 obj
+-3961
+-endobj
+-499 0 obj
+-<</Length 500 0 R/Filter /FlateDecode>>
+-stream
+-x½[[sÛÆî3§?ôãbúd+¬ËN"7'i+÷A5È hYùõ={;ç, ÉJ¦£dâ$°Ø=ï|çÛõ¹ëxþÜÿ¼¹óðßaöe¶rñü_çÕüývööÚKàA?o÷3Oþ°ôæ^8þ<qS'^Í·ÕìvñcVç¿5Ý¥¹®»(ÅU(®mõEk>öÇ¬6×ea.3s7m[t÷ðQ|jê]YÌ ]ÑÛ½¹zxóíßg~´mw0¬­Ù3¹¢/'$§«Omv8;G°Cx0
+³ø´¸)7ÛÿÂÈNê«±»²ËÏ]£_¢È1?Àtà·×¾±a
+õû¯ï®¯6WÄMëíìçÙy <±
+ç¾§NÎ£$õa@ðÍûÍìíæ§yßÙÛ_çÞìíßÄïÿq	ÿÛü0ÿÓl½ÿü×YÓ1¾óÈüyN
+ç-Ö¿¬/oÔ³Ï,ïvá|zF
+Ñ6{eðP/­?A
+ "Ð÷YU
+r{¬.Wy®.Y_~	²¸_x¾Æ8¾rOB|»sv_/Ï½ÐY­ÔýÍ©h!åSëÄæ±}ÓÊ±W»{e<U¢
+ú]Î26+ò¾Á
+5Ê
+aK AñÕ}[îÊìÐÔjÒjÊz´*_¿
+-ìÑ  Ï}wyv:=E.;Ó@%µZº2É*®@ÜÊ)ç¾³¶0Ù¡goG
+-ãÊÌ|½ù°¾
+[/¶Q¾JØp+m
+ËQ»ýøãúúÝÕåz¹Qìxh_ÖêµnÉ»bO½±ÂWi$ä6?
+æ}ãÒ»@;6* '
+ÍCÊÌòNÂÑ ÆsËÀ`kûYD\ê&
+-
+ñÅ­k³7C?Êá¼Us6?
+-g^ìÛâËYE9¤^îexY¨J°Zìä#>
+ìcÖëd!4 §xã·
+-AôïySÝÚ>A*b1îÌ¼nÐY®;®ù±,dû
+¦
+-$ñ5&«wæaeÉÐwß²d`,©ß¬Þ§Ê[Ñ÷ªÜèòVûUx7Q<#-8ÚDç ~fy~n³üÑ
+¦}ìûT03í
+-£c¦ túf@]_ì.Ì7}o+ë
+ªv'Ö5/Àþ~s³¾Ün>Nc¿Ò¥ÍKÜ×À LòÅ^*°[ÄÍ»¿®·ÿ×6¶RÌÜPÒÜÐ
+-ãrsi2I
+"ÕøU%ÄpLyvíïbªêìÎs?aú ¤¨¾¹^ß &wDh«Ò_=²pÐ!äÅ%¹©]
+Î7÷¸O'ðmè¡¦j©iqgDe
+-c[|¿¢JÿüÔ
+l µYaÞâR%)µÊÎ~ÌÐÈ0¼Ü?ªkÅB}ªç`âèà"ù÷'gË\g=±ÛÅÑ<(K¾öÔGw$ÉëO»i+ÉÇØ²OÐâZEÜÇéxtZä1G½Xq[Dei³( Ê )RHÿiQJn
+O¯Æ®r9ÄHÀð®u
+-Ð0 À
+6jhíÎØ±Ä¼åp*SÿÆ
+zúI¿¬E®/ò>âéö4c<Ygâþ¾mîÛ:0M)¹±DðØ#ü
+ëßo¦) çIx#HãW°È@ L|Åo>NOÌÞì5'
+_ØÄ6WÛõõ/ïÆð
+w¦6cÌÃKX®ÈóüèÜ)²SºkRy¶¤üªiBÄü¦ílBÊß7»
+6nãÄÐ1Ýã¬}ÐSPoh[Üd´
+-jÀs$æ1´%À³
+½
+-±®ñ%/:¤\ªCcw,òAùl¿vGhW¶`ã²¤þØ6çÃQ>'lN×eÿ¶K´YL©u­jWøvÅT=õÒ
+äer°}ñýG_ÜwÎ°qM1¤&Wú/¦ÏçJ¯8Á²,EE\¾	'UBoYEÞcôÃNP
+`E2Kx¯=òÈíâ³-+Yý¯ \F¢`"ÖzoñöÕ4EþdË×ìéz'ªN3åòåJº!Îvo9eËöDÂñQ>R¶wÖ²eÀõTÙgì1ÜÕ(ßÅrT0ú#Û,ì¦TCp®iÜöPÖúMbì3·öÂÜpwF¬[
+å5edyÙÝg´è®8´ÙN&Vhµ:b®.£)u®Ê.WÒs
+xG"l>WÙ`èGvÎ¶Å¾i#åýÙôç!ãDÆú{3®°ªx±OM`_V
+£¯{'ßPt¼ÅÐ×X<âÆ¡¶X^UMKý^swî¸!BsüI× d=ù¹*Z!D ¸Å}Þ©V5úÆlÇw4
+¾±S.äºØ^?ñ¾
+2
+D²±PV(ªoäéD×~Sàu°5¦t8vu­êLhAÕ¦ÜkÓ0eèmÎ=þlyJvw**8 ±8áçNWZ?BS",Fq½
+
+<$àJ
+PI,8·¥pP
+- Ñx
+üÃwâÜ§Îha¹RòïuFLêJOPÏÒ ØÛ)ñWÓ·'£F³4ª
+ÞXÐ§HLvîäF¬ã¬wF
+\¤ëäÕìcÄxgûy(5
+DOëºUYy·ËòØ8»+ê®¼;öâc^G¢§¼òÿbS­:¸ú	á~
+¹Òñ¢¶"ð×l+¬Ö½ÿôîíÕ¸ÁâjÅf¯çvBØF@l"·êN.WB£¶'[Ï÷½Ë´ú[ÝÔK¶Âv2S^¡ÔX(éJÑýf#Ã|XÈv©%HÏ oE4BË	×ÀÄÉ1áûÑ?JT%²l¡ÈMe¨\¡ÓðNëã1ëC60â»Vê.|Íþp¡>ºn,[TÙ·²2e°1k©^ÓspãåÔbà
+@wH,w°Yeð_¢©
+iùÍ÷¡Ì
+»JÄDN ° Ý~OXHåÏjºefZP{QÚ>Ut¶Þ/
+º%.ßoÂü)ÂáÏ7¤Ê~`^»}23@-Í×Ãh2/¤DªG/	£dÌ1¥ìAÚñp\V
+ÇY±­É¼Ó
+ëz¨3õ-³÷É­¿
+ AÃqH×44öÚJÔg½Öú[^Ü÷l`}Õ²½Ï¼lósÕõBE¢EÛ0£öË8ÌN5ÅòE6*h,¦T%ÆF_©Üf£§ì¼Ðµ#¤kt7Cj8"!ÈL]dB¦ì¬?«¨]U-¼Áé
+z4,òFVª"«å»ÌðÎfùýÊïK-tï#¥>kÝíÑõ%¢%qW<¹ÞÂÔ×ÅqÉU	Ù'÷LhéÐÃ°ÜÓ¹íI²äXfK~~ÍóÁË@üÀ}5Ú
+%ÉðYÙd³öQ7ëêIUO~Y|ëÛ¢­h@ +OÊ6*&{âÎy(ñcH¦·R
+©ì®°Ñao­í³Û°3¡q]£ÚPg='nKµ¥é^vºJh%¥ÐÑTÐ|F>	ÆêQ,vc0'Lxú°Ìü(0bä´7ü!CéB(éÊÂ´f©°ce:©©üÜè ³Ó¡iËþX!`lB;·S³	3üy´Íz»Àæ³éÏÕ£Iono q2Ü`¦´Åè'L4ÕÖ<|tó«±3-d>³) 
+ê
+#w{¤#.üøòCu*ÿLep°;¶eMïÄï³j5ûLÿ!Ë
+å*jïÐ\
+z
+JQdñ6qFT¯Ô!SèØqt÷
+F2
+z¨<èÝèåß÷7*í­jaBÑLy
+õ=¼J~RôFJ\EnõÉHr×Yí4³S;êè
+
+pjG)Q?æb£t{&ýäf:À	æîì1uSùÈó++ÿ!4Q8¹Ó(¬ÃÈîNÚZÖùÅDöSSè
+c«¾²ô\åófPÊ4'1®i~JÔZËªû#
+Ç!
+ÕH¸¾:-³¼Ó+·{ÙÑUP×ÒLËA¼Òù:yÊz}0µQRëÔG:Øzñ(ý^p(sªÎîïÛ 
+P|Ë (ØRðÎx÷Xg6¼ü UñÆÚ	
+-së$ÛXVÒº©Æ·ÊûJ"ïÓ	ØÑéZkC¬Có,ÞÊÓøÈVvS$É®¡
+aDN}	¦ÉQËbÒPaKWûL
+Áut+`6?éG
+-äQ~Å4 ¯Ê×À|ê°xÂ¥Ýód4«"5õÊIå-vÜ·£·Ãp0DvLô ØU­¥ 5s[4éù¶!UÛà¹ñ«Í
+©}{Ð&/?©¼'pÙ
+ÃÑ$î´à3úàß6½ûÔá_&þO+ÛibÆíd¦¦¯&m§R6¿üxõËúúÃúêR­OÐ¸q"Ø×+Î¾´güÓÇÆ'¼9¼¤ñ¹
+^@Õ0ÃY»J}feöóc)õ-TàApNRc»Àäð±^s£vùãLÿÝÕFÚLìZ¼A2¡Hëív¶óùdâ²+û1ã1Y£oÉhl¤9m\áÖ;sß>IÃ5ß
+Ù:¸ÉO0äý¯ß®endstream
+-endobj
+-500 0 obj
+-3741
+-endobj
+-503 0 obj
+-<</Length 504 0 R/Filter /FlateDecode>>
+-stream
+-xÍ[[sÛÖî3'?ôãpúd+jªÖcY§eú  $h ¬´?¾ç²gwÏ(ËíTÓt p°g/ß~»{ôyê{A8õåÿÌÕnâOÿÞM>Or/ÿ¨øçÕnúöfòú:ÈÄa<½ÙLõÃ<Qä
+ÓÌ_xi>½ÙM³]³¯ú¦­öw¯æAèûþlÕì_ýíæO,õ"ùÚõdvÿêæïTYÎÊö®Ü¯Jó@³bù©ßÊüx(Ú¾ê+±\h
+ñkk¾õÛb?òTYñ²«ÖÇ¢ö8a{i
+ò¼òÐ÷å¬Ç¾=ò2x¶wÏ£EäEé4H¤6ååwÅ~õ[ÓÉãØËs¸ûP
+»R^º
+-´âJzæ®âphy-ÌñÚjWôúQ¡`¸¨·$oL¼Å	}®ÄR¹ªSòÇ»WÍîpìËµ|(½RÄVC#]_ËHö^É°-
+-ÊDGI*©×ÊTQÒ¬m[jHB/I¹¾ËÎÚJiàÅhË¹­È
+C]ØzÇÐ>Vj¯k	¹[gê²ëhíB
+øú:ôèó9Ùåâò+¹àÅÍäÃäó4ÒÑ4§Ñ"	¼l1MÒ4!âëíåäõåÓ¾=×¦ÁäõåÞþt.þïòûéï&ÓÏ?.
+Æ_eÒÓÌàìæý»ë7WçR>+hçðÊ %ÃÌújW*wB
+-©Zið@.¬/)wKå2à;p^ÏËÙ­Ð
+-VGK@î"ÂY»
+¾{«x¢¯Vew¦ÂYlDª^&M-ïÍÉq+µ ô)ºø^{Ùçèj
+-äÍ½ÊGø
+A¯¾Ùêw8Ècë­©|æï"h6Ç½öQû½/­ zkæ¶­¸Ô
+òQ· OëR¨dWíKûÔÛ¶bõhîU°:Ñ£ÑD½ÙI}ãx¢ÞPa ôi]
+úê^­³Hi E,=
+òA£­ÑÂ¬ÐÁøô¨¿£}5 £wöíh!¼#!§+¿»C]*¯b
+-×K/Bù6ï
+-XÇº=ðñä
+Ä·Å )×
+5¦gßGX¶ÔWµ#
+¹ÄÂ®©À¡çç¶0øê¢wô°­V.ào]]o­J´Êi,×g®N!	îñPÕµÉû¦7u3·Øôh$~{ZÎÎUêÒì"¶
+8OÇüW±
+hU ²¦R­x't¼°Bz¶iËÏGv
+ÙR§¯exzãý¶B®a¸	oðËV¿<æºnUÞB|SÙ
+Ü»¦¿>_Ë/Æ)JúÞ4Ä\-î5w"f¯C1¢öæw¹çJ&Ô¹¥	@.;SÅ
+?«¶¡TZ(_`À;
+ ð-tmÕ©5n®Â/÷ÆÒ¤*iÛÎsêãÆzÛÆÕÚrÓ´èpm)Ñ®Ü¯)@>¢1[|&\Ö°1òÌæÕµ/·ê²¬I2	
+:dØF¶ÅNÂ½Z§¡ýdt>4®ËMq¬{È°Ù]oonã¢ªDxîM­Îg%é×¸ÚÌD¡\0ôÐoÑ]µERR
+ÁtQ
+à·qH{M	¥:êÝ7í®Pï}ªW± ·cr
+¼PEcÌð
+3¡7Z
+-¤
+wEµïzPªª7<<á
+¦+áÞùÄ5}ZþªÑZíYô°
+eA×
+lWl³\w Å ¦Õú1)ª×©=b [ µú|,ÖmÕiHX°¬
+KRQÔ åÁ­úBi!«pyiê±nRb°@Á´è,á"+Å÷&rnÈÁÉ`!sÏ¿
+¶­ÒQ³¿×Â³gdl[@KÁ²ø}gØ	Æìºt¡ÄûPª¡ùj®òA= 
+·¶`Î> 
+Ë£hÛÅÍ<Òï#4¸þp9Zm-YlEÓ8\¼Hµ@QSYl¿¿úåâZºÜÈ{E9øbæªÄeþøþûa%Èd©+H|cæ
+õ½.4oKX=v'KÉçÌçVÀ¹jq[Þ¹È;QªþõýÇñb:4ìµ'
+-0Gí«ð<¤0nï8ÒåÿKI#ñ¨½CVÙ©h
+Ë¢Øí±|(óly­ó¢¹ãÃåë»ÊJ	.vA~ôå^³¸ »Ü "®WýàÊ d»RßÓ¦ûÒùgV1¶bQ¨o`3qÈ"çÀè¸fÍQ"q-æw*ÿP×Þ ¯°h ÛÑ
+-Ð®s³js
+-À¥Ó]®pi7÷%-þß»y¤|)ÎázºÉPSt9óLI!
+IqÆü	/9úY­Ó?p.Aþ¥HÈº'£^`õ«X¯UE[`9õ0kAoËÝXÎþa*¯
+-I]7Eþ6ÿ ªQé»Æj¯èÔ%«×·%ôÑÝ27VcÓX
+ç¡'î³Î
+-4T
+-óRÎ<÷[#ï¨+­®/æú-T>k1>âC_oÖrJý§Húqû/ãÇa*¼-NãÇ
+Vºê>-Øxè£§ÇOwfù|
+Ó¡
+4c=4cn5ò?ÕÃ×æaj-Ð¤Ð1
+Ö±ÑÁ`ÚÊ¸/°HíVûö
+U,:2#=}´©³"õ&L¨bÞ@,L8õÝrW=0OUîµª,Ú¼ø)1JurÆ"fôÿRÄ¶ÞÛ².LO6YJ*k¤RHÓìªå|$óf¿>Ã
+-áSÇFÌArÚÂ
+¤ÊOQèQs¡æ°ç¤V=¥0 7
+@µeÑ	-ßÖ¥[Pc\fÈ
+7
+
+Õ	RP±JÙ!
+äßSs7p)»ì]ÎÖySwØM{4þtàAÃ
+Â¶°Òù°yÄ«ºBWqc«ÿ){ÙÙ× "2e .ª
+­}'Sã±¦BÌJ`dyH×
+u-¨WU´îûLÓ
+ãÛ­w <4t5
+Æ1[Ýz§FMÅDÕ¯&Ùch½Ó
+FÀQK
+¬ÒKNgÅuö´UÁìnÛ
+ëµâ¯³;Z}¼Ç6EÕ¹
+-5:w|0l° ý¨jGäÓPtgF
+
+»ÛÀÐq:gÃM¿
+k/È3Ú?QA 
+-Ðp¾Lù.|F0(Q1$	ÂÇ÷ã
+Iò¢%
+-`?]__~¼|5`.)ÅÖ
+-@ó¯®¬LV÷!vËwÓöÛæNfÎê7ù²Æ_I6
+Ä­l~B#e©K´VxÕË4w¸!ûêfð*Òæ
+¨gÊÛ)½Í{`¨×~u"cB¿2ISÝ´Õ¹Úµs
+²3©t­µHà§K´QÙ<'Îp+ö\ø9çÔ¸sØs
+8Ì½!Ýè½üúÊ!Ùe]ôÄ
+Ûæ`ý
+®'¥q*S
+-6u£Îv[+v £|¦*pÁ
+©0=<O`
+-È ¨§`n	~û£±
+	ÐYAýz%í`0OÏÜ~³VÉhÍ¥Öøô)
+y:È°CãsÇ¿eÍIgAFy|m\flR¡í>ËÏdäE
+ÙÆJ5Ø¡Ô¬£
+tðª
+-'a.hëÁLùÿ0,LÓ'db`_¼kðü­¡e¿Mj4¼vÒ÷´:ój·b#OBÝ¶esÏ(fÍX
+ÆU'PV÷."ÆåÕºÑ´
+-mÀß[÷C[®ªNf¸±"½ß»ü´kVñÄ°rYõ¶Ú#?UL´hx&ÑØÕø"v{îR[ÀªZ¤Ö3¨©pO¿¶ÂÏ`YÖu|Æqk4H-ÚÍò
+EiFzØ´
+Q²+
+öbX² p!Ð²):Èöy9©Ôi:W¿#{1³È±VÆÚ§b#°Ås­üöh³	GØiJ£Èt§-µNhk²c¿_NÚÓ:Vä.kÐI§ÛVýÑ
+pCæ]Ý<hÛÆÒº§ë#Ù_TÎ!«á!/>&ò¨x*;£«p@8ÂbÑaöéDYë+õ¿tüÓ¤{¸Ö¹¯Úf¿+áx#Á³.<'
+FÌ[£Å %$Âä½¹üñÄ0sªniû/RtêÂt±.:þ|q}uñîã0x
+jF 9ÔÍõÏOÈ<í?HØ~F OQ
+õ¹8¢é¤raÛ3¯3iy]k¨Åb»c RñÂê`Îºên_}rÄ|F§#
+-µ°+wMûÕúuW8H/üz×
+-°an
+I
+~~bLû¶ò/N-ñ2ø»:hvæZúäÉÁùÿ%; fU}ÙñÖ©®ýRJÑ}wo² ãw}"S
+'Ô­kØ¼ ­ªìµÙ¶¨7®üEçª~§-xx\9Ø¤ßº
+ÕV£Ì¹ÃB)@±ò¦=æ
+|
+³#E}Ä»ùÐ é"{6ñ
+-:ÔpZ,g_'ÿL
+-$8
+huÔùmµ_WÒQnií¬a¡
+ MßF,
+÷¦jáe×øÉfô&à3¼Ö
+÷û!ÏönE6è{.XóõW>
+kGºèð§'ÿMVí0afu
+ð±TøA-
+-Ï±Cÿ%Ø¬ìQ0Á
+ª»§¨$|ÓCF/c
+-ÃP
+-.~zs}uyõÃxaà§/2R¡ÄLÏ/~¹8¦Èá
+-6ÜÙ0|èns!Êà,1zÛ^	à®-
+X>¶æX¢bÖ;
+Ï P
+0Lèïv°Ô¶Ïq>)ø
+s¤E¿Ú
+-º3ÙðhòDØ`
+Ôu$õ¬èø©Më³ã®lå«
+ÖL>©lÔùc®&~ºÍYÚF¼i§Æû9ç{FÏvM}µõo[8rÌÊçS
+Ó¨
+¶
+-$gD9ûdúfÔî¥2Q'(ì¾3Ò}»²c§gÀþñN´Ë}|÷]»²Ð}1
+cà¶?ë84`6>«R>É~MNÃ¬®«tàì)ëÜëÁ`k
+N¼se4§ûú0ÒØih×¥½
+]3fïÙPPïn¿6Mrf
+£+y@Ö
+ÂõY`yW#Úü"¼-endstream
+-endobj
+-504 0 obj
+-4038
+-endobj
+-517 0 obj
+-<</Length 518 0 R/Filter /FlateDecode>>
+-stream
+-x½ZYÛÆÎ3£ÁGªj	á>
+×òÆÞX½bìJ¨<`ÁYr"X Vrþ|æìn
+Àµ6®\Ip Ìôñõ×ÇÇ¥ïáÒÿÙÕqá/÷Üäõý\
+ßm/nLÜÆËÍÝ"P?¬eE^¸ÌüÂKóåæ¸Ø®î¯ß÷WmßóÛoüzä}Õ6Ïÿ½ùû"Ë½"·ovÕ§çÿ,ìÖíYS1O^Ï\Þ®~;°Æ>çÔófo¿¼*ê÷¶¿ßSù½´>©aêe¡}JY`7å­Ý¥Z^Ïìh»;|8+^|å/êö¤ð2¸£=Ù¼®Õïë(M¼$\»ZeßÏôFSÏ·ïïÏ½ 
+Xv
+-ÛÙñ;ûi80û±cO¬pã{%1½°­Y'ËÔ;C?ÊÔ/-{ùÖ öì
+¦
+äÐ÷r»±²RkÄsáÀVhsÒÛ]XáöÚÁëâer¹O	ò`Yxy¼[P¯wÞ~äMÛÉkQ
+×ô!æÈT¯·¨Y+cê2Y}©ÆªN"uç¤íC»o²æJ6iàæØÂäÚ ïæ¹;µ·K}
+µªÚãýi(Þ6ò·,sÂÓ´E
+ §;ùQÉ ñ|û¢º²FÒSÛIQáz°»(¨ ÓöAÞ²ÓÏ3
+-²å05y
+õKBÄéµµ8ðraÄÚÀÉÁ[Â¤
+µ¾D×*<+§­´9ÜN;\ÃÁW
+-c;ýØÇ«CëÚMÿÀ½ÃÐ²."ù2÷Ðñ
+/±(Áû/}[ríu½{	Þ«ª-«­%ü ­H9&È:c.7|ø]]KÑ«Õ^:×ìGD[ÿTæÇ 'wá}
+-ì\]Õ}kUL=Ýøy.OBQ ¦ ,IðÔGªN*O}íiwàÇ¶û"¾E*4®½]Ò±JG0Ctq"C§º[µxávõ7+õCËè³c#ÂéýúÄ£
+MM4ÇëR\©º
+
+-©¼¿ï´r{íJÀrSêuiL
+ÀØqG
+V
+Gðjh;Ï rb¯^*cDá¼ÍMìÄ	ÑÁVê¶\!01¡µÜÁ¾áPÚm	)JNA·lFØbq
+Àv%f`þ^XÛIÐ`b×UB$
+GHÍH¬µ^ áB[`J7
+-ðm½¶=ã­3ÄÜº¤D
+-Î
+8#Z={ÞrÐ
+4C/~©ÈUHbåWÂ]¡Êj8iØþ§q¢õ|'W©{#Ü%#fwé°Ëð§?gÁ"(Ï\
+Yr>¢åý´
+zOS2á!­¸(@ÅÏ@¡2jO¿1*d¸ÂÐWBZQ r}öÄ·£l)@°ã-.[bOÉãÀ0*V"heïµvH( aÏ¯[ÁsTÒÛú°>ÝC²$jLØó4»]a´;õlg³P*½î=°%BwíÑ
+ A¹G
+-yÂf %ùâPïYÿþ¹kw~H·Ä:K§¦¢|,#
+ëÚP9|è
+²Ïk
+eKæl(òqótËm½Iá
+\^(e{a¬?D?1ÊÑûk`çþ(Üüy#äxDO"!Y?JÇvêô¸ÁÄ	u\ÙñöÔ; yfåãÖyí;¶6.§|¸
+ÔºÁ)9éVcË4ý±ÈM}è!P6©×æ$Ó¬®áIP¨0{ì]ÐB¥Kóù¾ìÊ#L´üP>
+ö
+¸ç^$7ò
+x`©³Ü"ECõ½±QnWÉÝ§z 4ÛêòXõ)ôÔÊ7¡_@ñf
+Êß(~»¼ysýæ¹«ÍâÅÇe¤ëCk±*®ËØ¾ÊÑw××¯Cwb¿-Åå?ßýüRüïúûå_W×Ë_¾¢ D7E*J*«sÅ
+6ÇÅêíÍæÇÍÛWrw£"Év¤°8TePIë Ôâ_¼Qì"DsS	@ÍL<Ï0§bªÄA=W	Ìg¼:ª
+è²O
+	ò ÞØ7Êäym
+(¦xc2jâ[^¹iÕÁ%¡S\¤Q
+Ö$
+AË&·§Á`~yJ;¢7ux¸@
+-mm	6 èÿÎíÜâî`ÊÙ½1C
+ïh?ÈÔGgË¿ÇÓø&)H
+-$6òFs
+§d´Üñi¯¨ÿ)ÔSuUcaîÄ,U¿!7Ú¼Æþ¿¤óþåâ¼Ù$>Óô\°¶ý^Z·u^°¯teZ¬«Å	Ñ·
+B¾ä`ÖI#
+´å±Í
+§íþ¬2ÑÚ`E!S_îYÅÑ
+á)lÔF[Út UÛ þqý
+¡^taÕ5vÔbr"ó
+-¨ñ$Zq"
+-ÔcH@S¤FXìjP[m
+-')è4
+-wh:å, !r2£í8
+áþÓ$2$èâÝM¶Æ4²Ñ¼÷Õ©ï½vÇ8ÎÈ$º"D«¨Iñ
+-¢n©jvT(õË¨{õëÕËwK°§
+3
+IáE$àÛ1
+	n¹jV­^_¿%$¾LBqH°½
+Tj×k}Ë3BäÀg©TÙÑ
+* 9pã-Â­é!_P¹ã¾½ÉÜ0ÏpÍ±ÕY
+-=E5Ô|  »§þ°CR!ÏGàH×ºH{K­1
+-ßFó²×g+$
+-É
+Kó Q­¾ÊÊÉú
+¹ê¡:IÛ\
+Õ$®N!É<ØEë(Sb'O0­ÆoÀË2a.ª
+Os¹GQâÕåÿzûîQsÙ«üv iÜ\¿¾ åö$Á(y­°¢]·"áû°Óa£ UÈH!0îé´fn"ÜZnmZ¢ ½Cezü¯5ûùdm?H
+-òèl_O<
+Å»-ýë{@R1ÎÕ.
+ÚÂPôgëJàWõION½	=7ËÌÜ-Tµ3N8öææS[ Õ^ÄÃh¸ð´$«ÚUt«f¦u
+Ð"vguÖ­ík¾?Xã02µô®ì$3ÈõðBJi=/ÔLÓe²é\DD#12.Òjq.@ÔÚìo¯ÞÍ8\Løô{c«1Á÷Ï!é¹
+stq×å®¿B_äÑví
+{p
+-x£Ve]®.  
+
+÷6ßÝ©©FU\µ'§
+-ðXîØ,µJqÙÂÓ6TRhF~úM`3P© ê?]Ý¼¹z5e£Í5IT0µ£µBJ5ÊÈ
+-	Ô wX
+-%<¬$sJd'6ÓÊ|Rx'n.C·¤
+-aSRòIá£¤ôeP®>cxÃ4HÔ5!
+tfÂÂz9´³R¦#
+ÝíHÞòr\ z¿ÚCéÂ¯Jê_îGÆ;Ö­SÝÕ­n´Ë t
+T©g&»ödÚÉÏ ò²XÒDDNrÚ¶zÚIH1
+71>
+-Áû÷Ï5c$ÍÁö!ò|¨R´Ígõ§´?\º-{S¤Ê7¬jsYïÙmWNZÂ¾|à
+-×cÒòf¶¢b<Àj&Ã8G­?h4æ÷5wûV ¨B[
+-2åvàöv¸
+lyÇÞæ]£ãÑvà­Zâ0ëÎå¤(£©³ÆTèH]öUy_×½2
+ÐPLÉAØÎ&÷]yð
+Þn©vL0¦o4QÃá@
+-:`J I¦$"Y8
+EnUPòÐ¤
+z¶óU'£ËØVÏ°ÅPé¨©ý?m
+m,FaØ­íìC{ßÖ]áõÿï4Â²YÇè):Ac\çÙ
+ÚÞÐYRPÐcRãiA
+-t Èµ
+;5ÈÅ8ö5õl4»²Û¹q üo#¥®F´êEÛ6AibföH
+)6ñV8]àújÏdXe®t>RWÒl
+È³1Er'¶×¥ÈÇöm(¥
+óE¹$Ö±cÔ
+?ì±äm}^¹ÎQW?#J%àH¢
+Du×mÃ±»iÓBÍ-ô7;
+¶'Ask
+¤.9ÇÅÜ"%Y-dóèÜQOü3mÉþOJ÷gIÉ±HG¾?:*É5B"ã
+oåüñBX¢©¬6#±ÇÌ1ÕV%ã¡ÔÎËGcñ¨CkÖìú3mW¹Q[¯/zÁ
+ bEñÍ(| RâD?^¾}óæêåæêû>RÐÇvõDÌÕhaèMH*,õ«úXiR%9Ê¡oçGßÚÙEäöXÚ©YÃäÐg
+@çê ~ÌBI>fvÈZDÅú"ßs3òK+ªzqÏÕ eDýô6äÉ³Ñ±Âc
+HmÆã
+âHBëä·évAÐ­0
+-§)DZKº^
+-óA<,k"OnÅ9@@yZÙ÷0ÉK;d2*iIç>sênØên8¬uý°î±Öã[A8-yAÃqZ'¨·°á )ü
+lÀ8z6M}F:Ù?ÒiÁ-ýilÅ4¿­eáèðº»c!@Â¨#¢5T-w óiüL2±Ý&J@ e
+ÊãuMPq òÅÿ ÌqÇ¶endstream
+-endobj
+-518 0 obj
+-3721
+-endobj
+-521 0 obj
+-<</Length 522 0 R/Filter /FlateDecode>>
+-stream
+-x½[]wÛ¸í³NÞV>Gfø-©oNÖÝU7qGév²4[løá
+å×À HÙÙ>¤=Ý)3wîÜA¿L}/§¾ø¯þWú
+ÿßÝäËdéEâ?ò
+ú9¯¦/7×Áÿ0§ÛI ¿8¦Ayátá¯¼t9ÝTYßmþ;	bo¹ä#6»É¬Ê>Gaà-cõ+/JÕßý^>	}/ÕCîÚì~/
+òèayS×,ïÙÎ_¤¾·Òß¬oÅ×¡¿2k
+ÅøþÍÅobÄåfò~òeÁîÏãi¸HWÞb5MVÁoÛãåzòbýfÚ·6yñû4¼øUüãå»Wü_ë§\®§ï¿Ã\ÖZ´½¢(ñ)5Ø«·WW¯6?Ã
+-(º§7¸¹þx9 \y¡>
+OhäÄ
+Õ³
+»Íeÿél.¾æu|l-GÔ[ND8
+|+	#Ïíc)
+^|¤úf;;ïû³üìÏÍ¿,·Ø³\z_þ¬G?eÉ?§âó
+-ÿ þÍä
+ñÒì¹¨Áô¢¤W¨?étA{ÚÎØNÏùÈ·Ç
+äIä%!hõL~Ò/»{½¼o³{¾ñ¾/¹¤(õ¡upþ³c¥ñàóÛ{<E|ýx¼ðVzxs°m4ëöÍ¡ÜÉÐauy§¦Iã&æöY}'Ï?½(ÄcÆÓÄ£¿ÏÚ¬b=7%Fdq«,>u´
+î.õ¾Ìjµ(<t
+9t:ôqP&Çø^>cúý/xß¨1;ùõyø¶ÝÎ²
+àÇ»$ïàëWÞµLËYÛgÜÏÎXüÙï³Þ"ðÍ^è
+Êågy:ú3î¤Íz|MSã
+5ÄéWJ
+ì`¹Adìöi¦ aác¼Ç¸Yá±
+p¼1Ö<½"~¬êÓÑõyu¦çÑr!°²eõOhå¶+ê»OgÃÆ©óXä!ï.¯7¯_ÖÇc{
+ÇñÁ9reë ;ý4ÏðX7Z¡
+-=ß^·
+sß67%«ÄÏ#4AÌ,Ãë
+î³N[©;V|­8Q¹
+-¾ïáL=
++ÃÌD6+î R9þbÜ>@ÉÊëôÌ°+½.ñ9µÈW,M¬Sàã ¦V`
+V
+éû²àÊµ¹s,p|s+°ËÀnjfE4÷
+írÿ« ³4­^¿j¢y£©çz`VBp
+ëÆ|Gk2ÎÈÉËÙØÒn<ó {«^F×Txê&É­Xs&øÄsGÉæ¹½þýá"jã
+-.8X×g­ZüêuVççj÷ÑÂÚý·²$
+-£g.Öøé
+cñÞ'?vî>Ë
+-èÜÂ^CÌ 
+h DÉ²¤M
+-®<×.1éñ7wàânZ´²²\gç¹ùëWMãñ×ÌØ{D®£%Uê
+Uñ
+-<î¬MûÙ¥Ï$Ñ@þ¦´i
+|ª
+S
+-ä°§È2b/¶}Ü{ËhDà´q¡Èð¬ÐµFiÌòåíZ
+ÿÜ|KÆÍ6
+»Ò¨÷þ­9
+-½sEBãO
+Qv%ð%¡	Ò°§
+ÎajWÛ2¦ «
+ãÆ¤9cÂÕ±ï«#ùnä²¨Ë_?ªâ«Ôâ/³5³þPsDß,ãEs°ú± 
+äeü ~êÕ64±¬+`BRj;­R¥·G÷üA>c»
+¬Gk>çaõ
+þ>û]=ð­*§àÛ+Æ®²o,þýx& Ð0 /âÑÂ<Êìtí
+ÅNaôÊÐëAY[tÝ
+nÂK
+9ÑGwc-¦CJBS02ÙÚKd0/¬ Êú¶ø*­§
+-ãì
+-X²³ßg
+-2±>¨)å[g
+ 6ë:4\
+ÅY°'EtéeÂ³nzõÓtÜúÝ
+,¹2ÞvsèóGö~S
+±sAÞ E
+-
+4Uöä¶-'S©½BöËlN!?âmHÃ9A¿8IÁMùÃÿó
+´MDÑüÍ-V6X;
++c2.p¼méLm*Uä
+XóJnÚxÆ_+ñgª®¦>ù±SnEÄîj]Àî1Y%+²Ù=+ïqpîèDðoeô«¡¤ºpÈ")
+'KVsP
+Oªá²øìº1S	"v¤A\tÜ!L¡Ô3Þµ UalR£¬væîÈ¬W
+ûTðåM×»Ó
+-Rª[Ó;4§=º0ÕÅÝ^Ðâ$pÞÇ+Pb"*
+³=ÔnôöEÅ<ZH2ÒÖ´y=ox!(Ér@´ØTÒ«(²d%DÉ¸´:åLXÁ)7sÞòRìÐb¥!XQf(
+*Rk Ò§~¨KÖuöz0$ÄÞ,ôàb R±8Ü'
+4ðó53\ÑkNi¯N!U»ê/§Pql»©=7U Ð 
+^ApOUÌË¶F¢Ôc
+-úè¡ÙDLB°¡MÙÂ©«zWä
+'ä".µqyd
+tÛ·;îÍè!rl¿@	ewÇ½Èág»<>H:ÍHúÑ3âég£¡ápR¤Í|ºe\ ÚÎ6_FxE/G
+*Ý¸9úA; Ù"?üí£-h%»¢
+ðæâ?§ä^¢³­-±j¸áÈ7î4r¯Rqæ,áH%àÌxf°q^æ+8pù±Ê¾ J
+±ñíìP)ÁéA}i¶ 1ÅehsÄ
+êÚeìÂÄÐh
+:ÑÐêmÚq«¨Ûd¸©àÒïä<+
+,"OV-	e3<=·nºpÃ¼«j&F<DØ6#U¥F
+-ÕPàè»+5+! ¦¬OÈ¶Fep&¥0
+-Ñ«Ò2nP:×w°v
+JnJ=}Ê7,iFAu
+(&i¢¢f¢õÎÁéÊFT%ØFZØµ¸°~K$Æ£NÚ@c+ü~9«ÄjP¼d"ôzfÃkDôß$%²:ã
+æ¦]vú
+ÅN ²ðméøù¨µXæd8gæû;6ýR#
+l¹ãh6­Ü%1{åÙ1ÙjDäN,9
+-á/×¿\^f
+Èçég
+péÇ?¤I¼ðEÊ"H	·¯/¯/®^
+-¼IJöëénö¤ÊÐ¹ÖY|
+j%VÃ³
+Þ@ïGÞTÇa`1¶7ïÞ­¯~y2½éÒÿéÊiË?Þ
+-ÍHÕ°ñÀ¤}f.;Vì¡EÅÝ¯Rü§«Õ
+{ûgÛRäNõ¨©ÅdkE[·+&tóMúÂmªâSÕÆ	IºRÃ:é^´)4¦sÛ6
+-òDü¨iÏe+sVFeîÂy¡£ì#*£
+-É-Z¨çþ!Y'qBÕY¥á·jYlªa+ý$©üùÈ´
+-æÔá<uK?0á7LÍx~b
+¸¾¡ÇO¸ª¨
+-ÓôYÀU¹G^Úwð¾HhÃþÈ>9f4=>Ä?8½ïtÂO³N´­¥1«í¶]5=QÙ²QYKuú¡g,£ª4í~×tX
+rÊ¤°¦b0/Ô2
+§K£ñÞd%çò84ÓVá¨&!-É $W öXëQnM¢RªéW¿S¼	'G¨â"ñÛkaDõÇºÖWkLÚ&H{©ò5wlëJsÆÛ
+-öÄq}£;²è»â¡Ø¡â,¥|cø9K%Æp?hÉ£Æôòk(7ÓôkhD|*7
+ÜèómüÜ.e5Æò<OæÆpIJEs29/æt·ÕEªS§ªxìÈ¯ôG6ÊïEÛÝ (
+-K
+Q_ê¡mÈNÀLQD3§[Þ5mÑï+·)®ËÛÂHþH°ì0ÍÍmªqâÆ1êÈ½:
+-Zåð5T
+Clcµ;ÖÙævGÕf­ÑnéàæþohóÌ
+!ó¤,,Ë¬W
+-«¬«m¸W
+»7@Òi,n¤RÛ²ÚUlWd5´«Lsâìøoìöî °W èJ·9O
+R´cc_Èî9gúî"I#úÑáº).¦ø¹ÃÅÕM bæê:ÖÆu- 
+-ézõöâúÃø-×ÀOe$É¹åD²,%f
+l¹z}ùïË×ãà.n!4²¶ë÷ë§$7(u7ÖEÆ­%xi_)
+pFPâz@dXì¦"15T
+¹Ñ;WþÊË³÷RÝË½8(êk2²0¤D·ºÐÒy¿~ñáXU
+-Ò°t(¿¸Úr0§]S>¸Ì¡ O
+_tªy²OM$ÀS~(çîtg4¢Ûæ :a<Ú#=)»
+-ä.¢ï
+6»Ðf¸é9CB$
+¹9g;ûZTíKuÈ
+#õ>)âF4º3zeN]ðü{Íl×Q¯3åÝä®ú±ÔªÔÅ,öùþÐô¸DLàðºe©áªN©öÄäíKÕ{Ô#K}£Û\pg¥J¦éýnÜÓ(=c³o*ô'W¶
+ÝâoØij
+ÓuQHá
+S>!1
+S¼ Ïó°A
+d+À(
+²v<÷
+z¥Tªg«8TL"²GÓ9Ò3)º¨ô|êR«©z	;×Ä¶ì°%ÒÕj ÓM8ìu5­
+åúÇµÍÍ¡ëAi0÷¶R?¶ûD).³öÙÚºG5½ê
+-HÿÅ¾²ü@ZÎpr
+÷O+vZ ^¾Ûxòæ×2¶å×·ï6ÑÏ'8÷BÜ±ÕêäáP
+-ûpÍMrÍõúòÃ ÇôfòÚ¹­
+P3^á4ªéÝà"2ÔugîÝÅ9)iðø
+I©Sq,&woK
+W	éhàÿ¡Å 2Öþ»¢Ó÷}@«# ·Ì<]
+°
+æÜóè©;í²Ë¬+§ 7z
+M+'s+	-ùì]ÙÜdØ¤9º*¾YÉG]Á®JÎäHÏ%\Ò7ÅN"]òýä
+-;1Ýendstream
+-endobj
+-522 0 obj
+-3940
+-endobj
+-526 0 obj
+-<</Length 527 0 R/Filter /FlateDecode>>
+-stream
+-x½[ÝÛ¶ïóÙ¦/gN4I9}:;nsí4¶Ò<óÀp'ÆxæÇ9vþùÅb	R¾K;£tÒè( °»¿ýí>ÍÂ g¡þý°Þ
+³ªoÏ>åÐÿÀüóz?{±:{þ.Zªq2[ÝEðÅ"EBñlAÏVû³«ùF¶ë¦º~¶Â0ËÍ³_Wÿ:Kã ÌÕÕF¨êËL{Å8î× Æ%Q&fÜüòðlõÛY9Î×}£ÅÙ>,&¿³¯j*yXËsõgªÿî¶U
+æ"Xfvü]S_ïäÞî oûr·ûbÆeAãæÛ²õ^5/õ"È»T»WSíBXB,;¼ßÃö³@Ð^éR¼jgi<Rý8à
+-
+9£ìj´.w0+Î{ûêPí+=EdAb~°HH/7í9<R³Ú¤=ðgýwî.`´H[ïîáúÈ ª'qPØuú¶:ÜÂ#7uªÂ	
+S»ýê«Ù 
+TvU
+-"BwôN®}Ù
+ªO½a&Âíü¦©á
+±LµHÍ¸¬ò°1ß%	½­íÊ¦Ã$nu¥Nxº2
+-;Ewm:duf¾Ò:©ånØ]Ù{ÙIÐíté¼6äbëz7Z ÛJ|½ti[}¬.ªÉÂÎ~zòZàeäÝeî«¯ (£êpôuË°iºámÝïàpB®Ê4õ¨í
+va·s5ßÛmnª§<IîtñÚ»X;bÓÖwJ@]µ.;	{YFÚ@­&ËÆHTYyâ$j.?%ÃßÈ²ßuæB²DËÉ]PJ^ÍË]/-(ÝÀO©Ãçï0wnÄBX¯¥lÞ(ØÿlÕí¶<üñº%(bgÒ¤hæÏßÅaáVP·Õ^ëQ¯Vg?}	ã/É,O`YY
+±:³ò /.Ï_¾uM/Ïÿ2Î¯ÿïÅ¿_ªÿ\~7ûËÙ«ËÙOp0|?ÎÃ¼LI¸ò0ó7¯Vï._0ÄÁnõ­ÔNuá¾ÚhÛÕçh©
+-íI¥ºÚ~¹¯i?wê
+í"±ýÐÊ®µËÎ~ªÑñÄðrSø¼ÚßigZdAJèz@Õ#íêÀ3RfeýÖ»±Ë9ñ¢g@þãjþÚùÖuI»æ
+9Åf.
+ð?mU
+83â\è¾ûBú{À2¤Wêöº3û~¥Mµ6Ú½d¦¹úEWTûî¶ÉÀ*ë¾i¤yYJ¨§Þµ£s^÷Õ^ûJÉFQâH$^fV
+
+àJ°
+3
+/á$¨÷§ÑÍ
+ðÁ
+"ä¦)
+
+Ä£ß`ï#skÎbÈùå
+-záÄw¡s
+ 2HFàf<g"(ì#!yª0bäéI "QEí)ÍÄfpæBù%Õyn,×Xâ °ÛU
+-@®\s?#\ZRnn
+-ÓLë¦n-JR§¬äÆ:c4Î9¹¾	p/Éñ)õÈµiÜâ×©kîSZÇÇoÊñ
+òÞ­Ò¼ÀWbR;²êÇÔn|é$ eüØC#qØ¬à²	!ï"9&»8$WÅoðAQzmðÐ'ÊótÈ{þÖµÂ¼øæac,uwÔ
+vþªA¾Óa×þ°­åoÊn
+
+(BÝõM¹CÞKGß(T*ÏhW£Í©@ä\]s+á|"
+ÂFó*&ôÉí}äùÃümÝIôfùÄu:áö¥:
+-%×]Dw!ßI¹^~êËMSµj
+F K¾[ò
+.ä$îÜvHÎDÊ
+-në¦ê¶{ÐÌ	«ïê}©éÎPá%b¤AªÒ/Èv¨Ê[»xyÝ¹tÊÚÖw¨ ñÒþáÊîóbg"Ê	ã¢P×ÎÔDÆëßnÂâÍ	eZ<!ØÖQK
+RDCï4§hê¬6VX²=ü­³9	RR%
+-ëp¦ù¢ º»:õ>Åù\µ[ÿÒÐ'¤Ì`ÆJBÀMõD6êÄÒùçÎ n,/Ü"SQ
+-mjÝ££pMÝøV­´Ãt*ª·£¦K`­ù¨^ÈÕáãw¯t<»û¬ìÁó t9DA¨Ê»»¦¾kªÒ¨\&Ysç*~úð}ý¼í¯÷eu°ÿ
+-Ö
+-Ò,¥c>n=üóÞ\gÎ2Ó^l¼A
+&Çùãc0
+×Ùéb°DqLý
+âWï.Þ~÷ãoÅ`.ÕÁþMyJ@ú¦püÐzª¼9s0H°JLº~ô+ô!Iæ
+d
+oÈw Ð|²Â<ü(ÎÙMÝ+&VnBÛÜ/ç7!èY#×õ~K_«p Äd2mV
+_îd9ÊÅÜ3#W
+-ÅY.ÝäâaüªÛRìëôÚF½	¡#HÇÚ±»ÞÕ»_Ô«¢ÄkKüàÒXÜUuÎN×¶²uEÆ¤üð®Bò
+yáhjBÕ
+ÛÔ×}Û
+èñEH·yc
+e
+-£Ûî
+-bà 
+F1FúÄ6bOáÅ£
+¡ør=,~oz´WbOD"öDÅ&N!ÄS"^\|7¹±(T4C'Û2oìÍÿyõ~¤"cé£!:DWk8 Vs
+ð-
+-Í)h
+ËÈÈßAÇPSûð®Dõ\.Q!ËÆe5ªúD&â1|ÚJ¨q$,ç³3 
+-fhþá´}ùÑyÊr=jJö({«Öèh2¹Ú:GÇáÆänþ<·còÚ8bköËòÀýPýSo¦}ÿY*e°DA|¥øTkÌ+*JQh!àÍT(*T?1a®»ùlF¸hm§ãØÄ¤Wö%F6elÚG8¾ùÑü¥A
+B&cÿÜéAÓlgIñëÍ¨aS¼Vd
+<Æ¾î;¦ÁÅg.^AºowE·HFÍéÞ$Ô¥ØÌzÂ4Ë£[O
+XÅáã¡2Îµ
+-*
+!KÞ®Þ]H£e
+.5Zlo	ØæÇÜÉó<ÒÑÿ­¤µä»8âÑ9vóÏ&ªäIÏ[Æ·HÊâq@éìiÄùø&ü°b/ÐM¤­(
+¦Á^n?±1®
+¡)³Í ÇÄ0À,R8À2´yy2ðË/
+Ëà¢â$Î½+á
+£ØEqÊÍ%x¶¹I¤æÛ
+l"Rñ-
+¥Å5"(°gçª½rÁ&Ó1AþçrAÆGE'W0åHe
+îÔY6TÜiÚXäz'Lîj8t#Ûêö)çÜ)n[ïåàhrnÉqeªx¢n¶f=
+?æ;ÇT
+-¥¨aÂ |0þæ¥s ±Öë@wþÿEiR=Øt`èÑÊ¹
+-ov»ÁçhGÈÆ¸e»SÇK¦X4í©NfÂâdSAw/tØº XöïN·ièÌ¡b±¦,Æ®ä{«Gü÷#Í9#ßXÌ>òjMÛÜ!Âô
+ãiÙIêg"aÄ98­oåwX&®83º\¼~?Î ¸
+ÏÕ5ja-çìºZjY
+0Öðôµ3s;ríÈ
+×Åi"Ó
+ög
+-Áersê¡6+¶¹I§Çûú\M=
+-l«ÞåT)ùc¦ ²è¤ÇÎÞ±¿!X÷=psºÝC½ýÏÈ"¤Sx,!ú*ú
+¦êÀÇÃôybRóJÃg
+Çôv(<%ï³º
+-¾³Å¹s%t®{1¶×i0¨SÂD]õMQ,©Î$WlÆ%CÝùì{"¡L¤<ÍD7ÁC>}ø¯{ÏR¢^ÝDnúiÓZ¾Hênvæº±çU d-òr[]ï¤MíPÌBiP·ÚÄÖ®ûÝGßÇHGÅ<6ñÏó à¦E¼ÆG
+Iãv`ßÍ1Ú¡õ¡ÔwbÍÂ/â^aí»À W'¬
+X«öTp¦¹VSWx±Ö°dö
+]Ä$pÂ½-
+P\U&ª
+D&
+-o~&
+ 5Æ,¥Kh¶vß¯)A8¤_xµJqú]×ÒUë
+ñ\Òm]ö.Îùõ9@¨Ì]
+|ÜÕ[]|!2&n
+réDA®¢¬b4]qKMNPë
+Q©+:Y(*t®_ýÏMó(®x²	Ó/M;{}ù~5æy¬øN	¢UEGiaSÄÆL*RV°´O
+nÕwÊ¬°ÑØ©WÙÙ"Óz)5Sòjý
+E,Å°Vk¢ÌT&L5~y t
+¤¦2JÄs-¢ùd~·My·5µÆn¶åsKEvt×½i£±?µó½a[»~÷ãåwº~Öª±©5:+s
+<=k©ob­ø^
+³éäïT½¨-.ÛÍÜèvc7:Y³3åèëÉ
+é¡vµç´²t"e\ú~©àJL
+-]e+{ÿ±Iqâs´ãaïÿcâ¨CS9kà8£QsY!.JºÎbªüZF!óæï -ÜÃÃf©_î¶ÇÀ½-5¹®á7+íËg
+p]¿én){(ÚÆÃèêß2Õ
+vÊzZæv@Øý#J¬§e5Þªêx³¼5¹HÈ
+áç9;Ö%Ú¶!ÜÇ	ï,[g5eüÄêâK1O^ënXÛ®Q®%µ	`7þuÝ7¥Á¬4qÚüe UÐ¸àywÛÂpÜ¾ôíXMÑµóT
+òkaÈ¾ÑÂà2ãÓ
+
+ÃØ©Q<þÞã:«P.*ñPàïôæo^\¼¾xûÏÈ~g¹>Ûr]³@öë[y
+-%\#þ¼k*9.éÔ>¦]~ÃõØ "á `ÿjÐ9ô¨¾]ýõn´ýÞo@ÂT}:Ùf\K5úðw?Ø	Hhm®ª3×2h~gÈ3gSò_A{¬+àj³öv9;rum	xï\«§kúñcÊbuNôRsKy÷!
+ìcV?¨î«ÖFÊÌ+(Â­¥^Ç7f+¢!*½7ÀÉz ÂÂ¦Ç55-¹N&ãM¢tÉ¢3K`ègs*^
+-k©¨~o?zûyÚw
+^3dÍJ|N_ìQ°5ª¹æ+;k+Ýþ®A
+
+-¦EÌZ5DÎ
+Öë é§³ÿ»8Xendstream
+-endobj
+-527 0 obj
+-4072
+-endobj
+-530 0 obj
+-<</Length 531 0 R/Filter /FlateDecode>>
+-stream
+-x½[YÛÆÎ3£Á7SUK÷<­9Úè²V].Ú8$à
+- WÚèÏgÎîÆ \í:UtÊæèéîïëç®ãùsWüÏ\õÌÿÿ»}¥N þ?Ðë¢?_Í]{	Ñç«íÌ?,½¹?OÜÌÓùª­e÷téE®ë.òÞ\ÕN\âºß3sûËÓßWÿ¥|´Õf¶`ånÿtõï:±¾·^À«­y
+²g¹
+&J
+75¯Ü
+g¼¿ó
+±¦íÙWGLÄïÂä?±øfC;\©ïÃ'VÊ6fÒ]ßì»
+þg,e±íÖ1µ$Ï
+-ØÌòJ
+¸
+R×IÓ¹C¿TüqþÂL
+VuòV*ÎCÝâÂ±
+jYql»R¾
+ºdéòA×	ôF7yÛ}yhÊfw!
+¡¬¨Å>É)u¬Cd¸ú®ü/KòS
+·ÎåccÆº{o^Û°Û2ïå¡yë:Øy)a­|#pá¬ø*óFOÎå	¹d¸TÅ_ÄíÔñâÓG¹ÌpË ÝÔ
+Û{é¸ô*µ°e ¥?¡w)Îõü(góC'3n¹ê)	æ©£Üçã´®êôÌSJ1åÈ)çH#xn8V{rPÞÞèÝ~úl]8³¼×ãáawJ:JúÐ0ÇÖµÕ¾TMpSêYhéïâ9nØ6?V½e$Üøo¸¹
+-kå)lC9¬B©DàdþÉÑ×â Ù°
+å¸Êó®3?Â6jØ1òùRö{½«êÝ2È¤ãBÉZGÀÇ®à#
+:]ûnN
+,îõñòËÕìÃìó<PÈ°äÇü l
+
+|G¾ÀçW³gWoç}{d³g¿Ì½Ù³Wâ?ÏzÁÿïêó¿Ì^^Í?< Jè2K²D¬?3!R&«·Ï/ß\¾{ñR¬o @Q&Ë
+ÕÖ¸Y×Q(Á«¶\©m6·%¯ù
+Ç
+h¤iA9^ré¹ÁØ
+-`Å¾,{C&{ò&¼Õ0¶i~èåãË@é88þ57­j¼¨'jç}ug$Pç½=	a|r	Lf¡R
+-ùÑÂÏÂÔª¥av£+_ 8²ÖÚüWyS ªÈÑøÙú¶RÇh
+[&ÅKÈ±JÀK*ÚC'Ü«SãEÝgòTÜ¶À_ã7×²-·äOr
+D
+Sý÷^;%Ø+ìDÉ} 8ºB£¸×{Î[á±Q®ÓÇOzÄg×YöAúÅ>/#cÈû?
+·]Ö7«µ¿öÐØÚ+'=K
+-=
+@Xò|Ó`d¹ÚODS[Ê}l©
+ß?Z_õíõp÷j«69ðúNx,?LÇrÃø
+
++p=±	mºßcÅ.
+ lñä`Caw¨
+-ïñO"¯ðújjqOÏíGëG+#
+-FÔ·7úäÌ(?
+²;
+-NF=ÌcÞ
+ÍU¹m4ÐÁ` f¶
+U1-íl¤ÀæÆ²ª´#
+-T(Tq½HÐF$Z9gÙØÜQBÄp:íu¨Mñ¶¹8PZDmbr
+Ch÷Ë
+´Xt
+ª]4DîKjòáæ`®$¹ìËÍ¨6y|ÙñImB\YH³N­µòIW
+¶4áÁ"¯¹Üå(¬V.oXZ
+èe--]K5Õ¯éíPå¸
+@â'usMÎõ¨¸
+)Ú.U8Cð2<åþÊhøXÜ"O_Ö
+NTIOº2è
+-JÎæ;F¶8úü	
+-}!¦¹Ò]1gERRâsÉÛ¼f<¶øÓvDCZ;eÖ	ò
+-V-«vºs&hîÒK
+ðl_¼¿¼þøòÝ4çõ¸Is	nÁçà¼ä¼¯ïõåêêýôÂB.s.,á§ëz{õn¤y<^­%ÑWLul(gf¯
+ìàþnCo4.Q[­1I<õÂáh1KIã-¥;Jz©($¦dJÁþuDïÚ1¤È|­ÔÝ
+öáêÙÇ»ºEµ«cöZîöÑ©»Cukäj)^x A(Z\ú§P7ñM$	¥hHJÙ ô1É´]õVô5H ØçÖ:LØ9À¨o1ñÚÝøøYB`ÏýÖÅ¤´
+,ôÑdz-DdêðÊFEZAê¦
+4ó»éEt#¥@6-Û
+
+CîièRjºÏ#·Ì66 
+k­c
+2ëd+¦¾ôeÁ0-<ôÈ|ÀSðâH¸8ä-§_Dô³ëÙB¢$B®¶8A6þ qé¶¶yYlsú-'&J&îKeFÔ00rjã½ñä àd¤¾¤ÏDÊÚ3¦ºÑô4ësc_Ë~åªXçý±erÄã\(²§ncFJÆU[øµ®e ½
+l{Íããª8V¹¢ÅKÏùÁµõ5Ë¡´Æ¡­e2A±§ÆÜ<ZåíNj` ùöqÕÏ³¯H:¹²9«¯iAëÌ0¹&×{(ò¦9ôf yªÌüF8¬¢^ä¡Õ~Ï´<0­5-OS*µGR;wæmMì=[>û¼Úç©E(),Ø
+'3Þu$© jôÄÁcÊ'¯LzÇ¸q°¼Qf ¥»å=¦NÄ%YÙ¿èJ@<Rôw
+
+-&1`ýgÙML»oEâK?ó&è4ÝsãDÐ½ àÆ~
+*ó¡+åò½{óòç'Ãmqµ)j2Lb½º¥å§Ø )6HPÙ 	U÷#àÿ¦V§²_p8
+-'H
+Ä$M¸Æ¸yÍÚ¦Üq+ùöFÁ<­±îÆ
+E¤Êä
+DöÍ¯5§ÉZtÜ%T<J
+ñãoÔÔ>ròÒ:%a·¤¼
+×ù¤Q$b*hI{
+\£	Ip0Wrc¢QãßÊF,µgàðö
+-ü=/"¾ö
+T³M!$ùxð³.îú Vöñ)­qÀ'¥ìùD.Ãø
+dO3J,
+c|Xa±BÁ0#¹K3VWóSÓèË(ìQ$Ûô-c¢ì>¯FÒ±øYz ×÷¥º°Äï8=ßË¢³®-Y1\ÛÓKð(H
+-îñÀR´(;K­X¾±Ï
+-ÎÑ0ÍÃÁobÂóBR¥ö¥®¶3
+·­³ÂjYºî
+-V¬h
++2Î1-"e­³W^±ºñõ?GòÃ!© |ûIpBï@¥Ïßg[o²¶ëW÷eÖ
+Ï¨ì#Gy°1ñuüíÌCbF`ñëhp>lOR3WR3`±o/W/^8ZU÷cï<Uq_®>PÕ"!¾Õ¯?ËK
+ò  yÒb#
+{1Æ!)*z¬¤/ÑíX©êAþµ¬e
+-Â£ßw`u{5?\jº¼+^	×úEIEÆ¾SBºÓï[fJkgW<	Â½IÚÄ­ 
+
+P;UXG¡ Ó
+ÊL
+³
+	m{PI5ÚS´ÒLÛ
+Nt±Ü
+=Mâõ2H%÷ÁS¸Ç"DYDûg±Xv&ø©Ì´6b©Ë»0WÐ¨R"»ka+ún¤ãÛ¼ÆF
+Pd.ï°ÕÁ^þÄ#ÙM½ Ú:u_HÞº}US)>MbæUSðdÇOxà¨|¬©Ù4c¶hr ¹¶6o6Ø	U zÖÚ|SÔ"IÅ
+ë
+Ki
+-5Ã*\L:¤x(7HIMè3 öqÓ3æ¢µBPº*õBHúµ×Áfx¢¬$ó
+-h!¯^^þüë½áeéyf
+~ M@põÚ#¯óöîtï6³ÿ×Ç:peíÅ¿gö¹Î
+>E«¶ÊÅLxhU¬Iåb¦ÞZÇ_®ó¸Ðz-ck£¯`:',ñ¼ÆÕ§²¾iuõi56:_þõT¯*r"5Â­å;è¾ÐÛä±êDzPÅÅ¼õÎtÂj&UQ6½¥³-D$Õ`zc©
+-V+®	Ä
+pHrìuÞ&Ú¶e¤Ébuýï	P }_¤çdÔíLëÑ÷,8L+
+2Í"¤¡g<9lb:ÃdO=>n$
+ÝUÅRûÑ¹ªº#$~«[Óõ¡õ¶à
+ÁþëQ ø8Ó
+Õ ú!
+ÚP4ÛkºüyìÂX/nï`@)$ö=ù)A0d¦¤®&Nµ3l+ÂDÉtg¿¶ãÇíd¨uú8uIö&
+Ñ
+KL0?^¾ù8Áõ¡
+x1ËøÒp
+¨zA|Î@Õ!KLkæ»ÁYJ¬$
+{þ~µzÿv$ü¶!ò¬X-{Ò°Z×}3Gì­Ó÷]âø
+ÕJå?nMøÖÞM&â #s^IrV½#IEøïI`ïuqÌ+v#ÍÑÜÀ$ó
+-øá@A×Df$P6i$Ø!`¦âJ¦> ¥
+-iÇÁJÜ 5²V'È0
+4èOk l&ÀÞn5DÇßÉ¬jÕË@ub[Ñ¾öÁÀXÆT-ït`U½
+Ò& W&!x
+hi×*ýí}/{=7ánè-ákÝ0Ðà¥éLJ¹ÑÁþÑ
+;±uq%¡U¢1!#
+-í
+SM×7xÃ<À}`úÒid§YvÌ¢ì¼ñ<ÙðrDqpÞe
+-çpe§á$
+j¹5"|a1Mh!Rù
+-,
+-£MP~{z¡QÈ·õ4iª|ðýª½(Ú¯Nµ0(ÂØ-G­2Æ   ÛÅGÅ[­ñúS4ÿÕ
+SCX.1
+AªO5ÑZ!.T÷H¶ôó1¯J]ÐóH
+-Æä)­£ÜK9¤®$mÏ#õ#Ù;¸B}j^)Ò\Ú,k}0-iÐÉ¤ÐðZ+
+_þù°./²®3UÌx<]ÃvU¹+åG8:OTyÈª¼úG¬>ðÁ?Ìþ¢jCVendstream
+-endobj
+-531 0 obj
+-3959
+-endobj
+-535 0 obj
+-<</Length 536 0 R/Filter /FlateDecode>>
+-stream
+-x½[[sÛ6Þgµ³¿AoUfl÷Ëìº­ÚÔI
+íf:ê>Ðd±¥H
+¤ìºùó
+à  ¥¸ÝíÎvisùÎw> ¦®ãùSWüW_¬vwú=ÿßýäÓ$uñù½^í¦¯·¾ñ7ýpºØL<ùË¥7ÍÜiâfNN»ÉìõÛ«Û×7/¿M®÷OÓ >tN=ÏË$F:¾øô«ùäåüçi×
+ØäåÇ©7yùøÇ«w¯ùÿÍ¿þcr=¾ÿ»3óÄ|:»ÿ|ü~ñAÌíå­à
+Aì)e±Ì¾¿ÆNâ«¿ëFÜðbG=°Ý½¸ô\×ÕÝöÅ?NW=ÚmxÖ÷@¿½72'
+-Õß²+Jö î¾ãÅê6+?ÿôFÞÅàf^Þ×MÑmåQ$ ~¨Öò;ã¾
+é!oÅÔÑ½¿üð´¡<3ò\]Ñ §RÜ³JÜ¼
+@|~?µu)gîe8å5Ü
+±0È£4ÕzN«ºj¹«W=U7­|:àoëuÞ7ù~ÛÊ»©±ÕC«Ih)yÃu\UË>
+XµbzjõFÎ-¦6_ßÑ³x>A9Tb&Ñ5ùª+øÄ
+9iýÉÅÁ/cê
+N~q
+ñC:1ôïuxv$¦ÝE3ÅðÆ#¸WQ[&
+çtÅµz¸¢ã
+1ZjÖÉøìõ uÅäJýo½ÊË\ØRLÞ<ÎÌ
+¹Z>$F^'éyÃ¬°ín¾æA
+<&[IÓTÌÐØ´ØÈ|óäH®Ù¦á¼UÖõ¤;)øR½Q	AjFF#
+-Ý$½$'ð$±½0=ûC>à@-´i²á:ðkía§
+_{Ö,µþÖÎ÷áÐ
+z(5P$Í
+7u
+-nË½Th»¢;  D>GMMb¾Xî9qø©ºâ{üË¢®|À3Ô?Éðã²¼Ï_Þâöß×hâÿ.'`Í69/)¿¾P¹Ã­¸ÙãßWL:Ò
+-"
+a×HX	w¶×¯Ï¿å¬ãIséy
+-ÔU·-DùâzWk
+SYÿÁ©Á× 2yºº2¹bÔ\«uÑ®mÛø·{æ¡á3³
+Üðì¿Ðsu(ô¨¢D«/þÈ·oê½¦bâÓ~$KÉ¼RC'Ü
+å[Ö`y¾UÂ§êòA/H5pé¥¶Ü.âÈEC.gªèú3
+¬QPq:g8È\*Yå¾ÔÔA5
+-x»}ÉvªÖë!Seü@
+ 8sÍÇ0{ÒlY×Õ½r1M>^1¤OrÖ§±À×¸s`
+ÿ
+½Ø
+7<.!AÓz\L®|wõæÃ\x]Ò8à
+_¿ôÎ?×¯GçãõQ&ãVØèú¼þZÑ=
+-e'¨TR&Waçe[+ø4#æÅc-¦ÙÚ77qû4´dÀòMR|e#Ûäei¥qèñ-BñçX.-f°å+
+@Ro5 ñ¾G#tlç\áJ[_èK@&y¹ªÛN_×øl®ms²*M¯ÏñÒàº¡ù£¤Ç"HßwïÔh&
+ ªÌïÔ_d xÉI´S&UÀäâQ¡ñð?ù¬EÈ?m5¤A
+Æ[¼T
+2;î|ýâ{Í 	S8>=òÞ_`ÁÈÐ&k¤vÛ¼S´Ö#íÏ¾)t
+Ò¯ê
+--´®¨âÎ?Â8ÀÑÐÿ`'¤0k6u³AOlFJ
+çzN¢ç|f¾¬aEß&ã·¢PÆâ	
+$µbõÑøàWJ7 $Øõq<¨°ÝBÁç½r*¼k¦¯qfVIç©k5nlY
+- ÖEQ9á/^gIPÛyx>&¨&ÿä=ËåCcñ¾x°U±ÈÀ¯­[ ÷²ù³ò9yFSèq[¬Iü
+C¼l(mó=æD¥])^5g®	ªI$~v¤ðSÙ¸FÞ"}fNü=PúòÞÀ8i$S0
+-½$<
+sr
+É=î ·|{óæ#Î-õÙ&È¼03{uóí/Cò6×PH^»¢Ùí¬TÃ
+$è;$Jî *§»¶CµÎ'hÓ+Ë7Ôì÷ª¶uÇêÂF¨N
+0®LC¹³«Egõâþ¹*`$*¡v 
+FPJMõØË£ç^yYüÉt
+[Wåaq-ÓtIµ.ÄóòÀ°Å~+ÒL°¬NV`ù÷O¬©øÛ¼úü¦¨ fxY×röV°Ký8|*H#z¥Pi@2&öA-ªèå!WídHr½Ö½·áùÃ;íç±5¼Lù»¼-Ú
+êß
+:x[§¦ûbÅYüÆci}Ù$dDæÞåÂ%otë"ÑéØRã¼´ê@¹%1ÀC}}À·S;pkÇRÕåì¦î	¼ÓCë¢Ps£¥ïªUÁ'WïÃêõO¹í_=qa|Ò<ÊÖ¥^®
+-Í¬H1¬)þEÈÊÓ7
+-òÛ¡E9¦,/÷e¾"´î%)	5'ð%yÉëfNy5)]
+ýCcDû
+'YuETE÷8
+T4ÊË~oÙÜÿ>$¤1Bã6 Q.D"Þ±GqÑp-ÀËa
+­4·òzÈ·³;òS`lÇÈÉpÃÄà³ceÿ\±¢N>ôüÝ;
+ª¤_9Pôi=B¾+m%§Ú¸£EmcD	wðà ixSßå<ÎH¤A~¯0öÈÖ
+Õ
+-ÆRUÄH¯«
+EV8R·ZÙ%Úµ!3HÎB[ñìÏLòûvòËÉj¦Ë
+¨2¼ s[ÜWÅ×b$	TÄì$ I¹àj­7Ï¢±¸çkÕ´ Ýat£8Ë<õÍ c#¤$aQ]	ç?ÕPFBÒÃç_±¶-)bz
+KôLh	ª· 
+-2]p¬ÿ¨È	áÊÍ¡Rä
+
+-
+ß³3âáîóOopûx´÷IqC@¢§ß3PÕ0fÁ¦§It¨HôÙfIM¦6Ê¢y X»9&ÕZÖ¡>V8t?ãAÑ`$ 'ý­2õ¬|2÷ëë°b%MQxÈlÕqÈútQa[
+í¸ÝÔ¸YZ­eÈº
+h¿=e¤Ó
+-¬æ0:É³»C?uÏØ
+hêó_]½¹ºy=ômì.ò-öÖ@Ân®Aï¦>µ¹6ãÌE5ÖYdLÇYpHðXìX
+Ô;ð ¼Éw¬c
+öT¿
+-
+ïé)
+²¶Ýgúð³Vï$e¤{ÜÃ!¶ H6h¼|{ýÝüæz¼Ýv9¿ãHáéYvT=ô3¥ÂÛï®nóÅüíÍ	oCáìz¯m+K	9³0º¹RöûÛº§¦=*uP
+-(J¨v?ªæØ
+#aûViÍ&4½Br¯µHMNc4õøq8Ø9!	¬¶y
+-ÒK@­ÛÒnFuÕLÄV_=/I3Q`NÝTöUÝ`CÒá`«x.!_Yéo~Äö
+ôpE®°ÎMzx
+-1
+-qfT«å­rìO{-÷F9
+ý e£dÍJ®¬!¸cõãÃ5¹ô©v³ç
+¯p÷é6²p&M"Ié
+ÀZ}T¤;*'Q@Çs³2¨µhòýc ±-¢`¸`¤ÒäX·2ÇÐH4èLª&»¤3ÃmxnØ¨³?¾Ü0§Ôä'CP^©{,x~³¸¾½¹/xB½,=ÏáÒPê'å]u¸ôCèëë¡Ô
+
+¤«#Ø©¦#Àß4¨Z¬Ôè/ ¤É<fËò©½°¹Ô%zÅù B
+-Áuî]ú©O¡®VÂ¡AêºaEcëò§Òd>.Eè
+ª)ãÝÝ)Ãhüi¸]j-R~ÔÃ®7ªÁºÁñÓe¾GÉi¢b½.,!Å»
+
+^2£#ßéÕrÞ\%UÇÈÞýè)7ÒâSi>/ðÔaäôíÉláÎ­g92 àû®ÜI<-_
+-½Ðîç
+-/ÄybN stæÕJGÝÙ1
+R>%¤½3=ì8ø5,o°;Níw2å'ðB{ï½]k,&47túäø_n%?A²W&o¤ñ	Ôöi
+- J«õ
+/
+³Kp:!ÕZ43¦v±v/]Þþ®¨VÜï)yAÃÍx:ëV¶î³ek»2J¢Ù}±PúR*p*
+<E@×KK| qÄÐQ4û¬Òs©ÏÉFÏÈ¾ã ?¶û¨J
+-:ª?2
+¼§êq_Yj¥:VÐL´9TrgAKHFÕWdÐCç£úÛÔwù
+|8¢*nÝ)6
+è¨*ÉZÉY¾Õ¥I5îeïÎEvITÈKÊ
+-
+Z
+äR
+
+-¡Zå´²joC]át£
+_(vd+¥j;r*eRñG½ÞQê¥PÇ=)cÚv¸Û]Gv&FºU?½8%uO*¥Ð&é£R¡ÝñFY¯MxFÃe<³ìl
+¯çÉ¦\ ¯ÞÚá3
+-CcYeç¶uLÄMðÑ,37ÇÇpß
+G¸{	âàù+£©³n0ÏÎÚ´YZq§·~KðÈ
+Öâk³õ«Ð{+8Pn£Ä}ÃØ°ìNÃáo¹>Ò
+-áÌÆA» »ßý
+(Ul
+ <TÅ6=6Ût·]nrvNüÚ[ÄðËÙZµÕ7]íg+ø8
+ÞõÞëÊÞCÂ   Z=h
+ì¯c"QmlwÐJiÈÀÞ9ê{
+ë8ÒðHêýcqåszÓ¥ý¤ö¼è¦r¼[7ªXXqìÀ_hÓ_$"õï×aµ;É|#ËÔ~MÉc6ÔÖ¬]5µÞÐ3û6ÿ/ß	
+Szõ4;è¨ä4Üëm¾ªÃÒ 
+,dvhUK©ÜÑ¨QÈ0¾È¢)È"â© Àjð~ò?úÞendstream
+-endobj
+-536 0 obj
+-3972
+-endobj
+-539 0 obj
+-<</Length 540 0 R/Filter /FlateDecode>>
+-stream
+-x½[[wÛÆî3ÁÒç0îúfËJ£ÆX¢O
+¤>@äD.UÿùîîìÎ
+.´ÖÎC½ÌÎ|óÍ·¹ëxþÜUÿØÃÌÿCþ»=Ì'Pôüóæ0¹=¿òVòE?¯ïgþaéÍ½ püùÊM8¯³Å!+­ÿ=ó}ÇMdõvv³xz¶ô\ùg
+E¾ÉÚ¼*ùÌWÏªv/jû¥ÝË×^ >³:+
+-QÈïêíÅ¦:
+»6/wgö|Ó¾¸÷YW´öûuãXªËhåxÿZÿs¶Iz²èB6S~å»)­ÔwÒ²øéÅëë
+hÂlxo8êÇÚï/»V#tBcE~¯x³²½>©öKÕéWNdûÈj¡ûp84j!
+-£_Öì«¹6¼Üó].S4­Øª§a4lç
+Nbç¤ì¨ð¨ÑC9L>¥¹<¹»v&Õ½é+^LmúMìïér
+õR'´ÛJ=YIêørGôÜ´ë
+ë
+-g±MSÕÞ¹(RîvÚ|±øÖù}Õ[ÙI¬ziDk?æøI®zío|Â¬±¾ú0Þw¹«èüFøëÒw#å~ ¬¥ÚÄÎJ7óW¸E/ê1gM¼Ï[±i;Øô¢ë6ÎØI¥{k¯#W~quþóåúâ|ýAÇw<ÛÑÕx%ÌÝn¥5K¶Ýæ*TµqbW{£
+fÚÈiµºÚTÕn8+ì
+T7ÜÕÙqfìÌìÅä×çûlSfºl7Û:*#¶o¬Á"k|§
+<È®¹éîôø
+-xYÈ\l±¥¨3'Q@q	>)ÚùôÆ¬k" 
+ÈôápMÅ .
+ÐM#!x§1{LÐÈ*;:
+òEËéõ¯
+²íU¢³\­c§m
+-¿ÞçÆ4«ØáÆ!ÀTÆ)£±Øä?0DHqâ"Ì(·±/UEµ{w"D4'!Hß|ÊGà¹5 Hã	2³#6u
+°E£DÔf<×ì#ÿÖÎNZM;=EÉF·Ï
+öÆ_±ZÒó¦¶×Ñ©;¨7Ýý|fQçÿ¸Ï
+=¹
+þÔÂõ¾îh"²¸w6L¾'Ú¸ªk¢Ã&y¹U©_PFÍ
+f²
+Ã,AªQ
+rDÙH¼±é)NS*¢jÿ*M8
+-èö!¹è£ú°Ø
+FªYe·v_
+a
+F{"Ó,mk]Å]_ÈÕ
+
+Úö{	6ï¥Ùa¥@â4J·tän-B¦ü[kñÑ¾¹1l]2mf½©êZk:4Õ¾êMðÑ¬c2ãIÌÞ;ÑÛu:J²"a ùÌÓÍÉCrøl=aÏ&û
+¢ùüp4íóõR@
+pQ&qôÌSè12)%ôSk¹ûh¼<[|2Ä7X
+àjwÙAD¨1îa "7Ú¸¶W@a?A PµxèòZØ´û¨¶ÁæÿZÂ®LR
+
+-1¯­yCâÉw{ )^´¶K7ó`¥¹!*eû¬à 	¹é½ØE§øÉÍgv(IÀ{K	^Çkaøa>Òc@ÊYçüíUv­	©:ík+¥ñH«#Ðª'°8¨MÕIÓ 9¾Mti ©à²H¡ÊºÔ |ä*7
+-LW
+k!±¿Íî
+-ô!µ2, *?±¶)bèqb
+õ¼ÙH.¡UV1|
+Jº{ò½õÅÕÕîb={?{P9/ÃyK¶óÐ
+-¤©Zúååìùåy[wböü·¹7{þ³úëå¯çò?¯æ]\ÎßC©Ý«@ç¶Ö^'
+&ÚUlÿzõî×q=ê²mà1HdÎ`ÃV}9ä¥fÔ¡	mSë]ª Pµ3K²eE
+~=+ìë
+-Ù.Ã¢Á
+|4CnyÁù±ã¿dÈ²@ÔÑÎ|:/mÍÏp­ç¤kþ»¼QY¹*Q6øEÔ¥£¬üü:GµA!²yã`&z!¹¤S|
+-HhBøþù×Î³eª:y%Ú,/PyØTåF
+-+1Â¢^Byr¡lQÖ¨þÀ¨g<µÅå~îmÆßÚ ~è¦ºqÃ
+Ô¶ÌLYÞXkè/2£÷K
+RE%Ôü]^Lå\piG1Û.½5õ¨N/?9":¾3LÆç]]r¥ä	NâÌ®lì%Ñ×<ÙØ¼*'LàÞ)_§D+îà6³Y÷3
+-
+¢ÜkÜ>KYYBº3éù1o÷ì0MüòÚIÖÊÕäØ¤þ¬Äò }h©â3¸£ÒEß5÷dð¾AiÐ>1¸5eJÂèmiX
+ÓÀîr¹[õ Téäue¿Jú³ÄHó"IHû1ë
+Ú¨wÛ0þºZgh&ä¥öß¦+ò/³×ÊçÖÓiJá¨LS¯Á÷HSjT*K­ßMÎËsÃTNìûÍËWB	×Ï<ÇóCï»N,RU Øù»ëõÒúâ·=NIÊÄÿÕãXqH åW/Ã¨PJyÍõí%ÏHÖ¦²Q ÞÖUÑLÔtC
+§ÅÒd{åIÄÄ²Ö¤ÆYF2ªLuÉ´
+v`lu,q°4	êÛãë\Ç(Å£Y+ÒLçÛV'}|­n¤½äå¦Yc§3áA
+Gû?:Tç
+":b.¶yR~³úLÖëøf®5Ò¡Þé(
+á7ÉZâ
+Àªþ<!tV ¹Ý
+Ã³ê¤t
+-È
+I2ñ;F× qxÎÈÊsL¬Í0ëPÑÓëK
+XæÓyJmEõ×ár§$ÑÎêseYÆ
+ÓZÂ¢²[1é³ÝóÓS
+Å+¨Ð~JqcgP!Û+Ðu´V§ºñyÁ¸rÅßÿ$ïOåjoí±Óÿ>F[B(÷Tö¸ä{}ñþÃÅÛóqBvpryÿåcISÐOp^å<¥ò|F¾zLu6ª¦#*±¦O_ñ;# 4vP4¯þKåV­tr!)
+®
+¶ÌYXHz
+2v²`Q¡V=FxÄ
+4[ÞÙ
+-Ñ
+µhÀilb
+ûæZÐ¿r#¶¤Jâæö7û;@,]`O¯ù)ûÿóÐ×\8pµ¥ÅO¯/Þ¾x3vë¤×9ÖÓÖd;8Ò%ÔGá|{r3}
+VÌcþ\ÐÔ0¹  x¨>
+!«OJ\E·Ã¬ÂÆ½ïJ]«ÙÃ
+dQSz¤Òq{òú¼J²Ú]VtÜó1ß
+-]Sk'S2x¹)c(¢¨àx!WÕÚgæ&
+pº 
+-yÀÅ®ª¥
+-ÖÁ8!¢~(À¦k³KK¦
+ãrôËwEòWÊwoX¾ßOÁ
+Ø
+'ß·¦òýþqÓ©¶5ïÊìóÝj*_¥º/t9Ì¸9Â!O1nz7FMÃíå{öZÓÖ %Ü¾£î±éà¬s
+Ì
+-lhîû
+-A"
+£~±;&]z.à_èsC28f`:o¸°\h³?v» ÃcÌáXCPphúãàÖÏ`sÙqçiöÀ.$G/«ò?¢®àÈÛâNXûÙðR
+eJ=÷O½^Í°¸½
+OÙçZ<tB²UNLb:ÊlGK`ÂÌ1çùRd®^¼}õnZp÷Üx¥©¯¾Oa
+èºÏKu²Qqw}qñêùDVáÂ7óíFÐÁË=°µÄèê`¿E=dwÉ¾Iç2¥­©úÐnoU÷·Ûg?N!a Å9ÄÛë÷Wëë1ðÉÅì)6Mð+³tµê+ñ©E®IÈZ_wK¾¬iNhôV¸$aNå¢±
+-Áá
+-ê¬=Þ_>¿~:
+»!Bß´Ñå¦*ÆE}f¾bóönÜ(Õè§ÁÐc:¨sóË
+¹Æî¼ÐÁÕÜË|6Ì<Å²]ÔOx4ré
+-_¡ÎtØjïF£ÍCÇf²DÕ6V
+ú¿c©F®²CH+jÚyt;9yTâ¡²ª¬h*®Øy)cYqL.èþÛâ:7¢
+-3&§OÃÐ2ug¬\>ÊòÚÜú
+9Æ2ÐNÔÍ¸Ð[péÅ§nÛáqL%ztB;È·kµØvå6pX±s»ÌNX%dï`Ê¬U8¸Èk/ýr'×RBÂ$?æHÀÁ|Bnm
+lºCqELn^
+!+ÖHüln+\uÐ×'ÙPKeè¯9õº
+õ)~}Ù:x\1Ñk²úÄ_§/x.x
+=»¶<Ûg§$#)ýD^¸4Dr[b!Ê]»7a/a¥G?Æ»Æth?êl@ª
+üõ¯ÜÐÕ-º1JÍÐ%eÛ
+Í4W_z÷ÆÙÙ¨ LjmªxÜgXÿY½3·tul6º
+×8BðücçbpÒ?¼FÂë»!ÊæöÒWÌ%ì¡\9[e(ìð 1H[è)¡^ë
+,wµ=
+-CxB½ý£ç1?'
+Oi¨Öý»
+-úÒí©YÌù!Ék
+- À|mîP¹.s.ÊìÓÂ'\` ìèIwOºPÁé S
+zª3dÓå¼ÿç
+-Í8ô{]Yª:µå1Û{ÏÛc°T5¬«ïíøäA,ÿýì¿P7¼endstream
+-endobj
+-540 0 obj
+-3700
+-endobj
+-544 0 obj
+-<</Length 545 0 R/Filter /FlateDecode>>
+-stream
+-x½[YsÛFÞg+/¡«DÇ 
+eGv´>â(Lò ï"²$@ã°¤ÍßéîÆA­³R¶Ì`¦¯¿î
+}»çÏ]õ?{
+fîü­ü÷nöe;úG?à×Ùaþj=;¿öVr /æëíÌÓÞÜ
+Ç¯ÜÄâùú0»YÜï}þré
+®ë.ÒÿZÿs&\'Pß[oäóæî÷öùWý<Ô´æyºïÔðH=>L´c÷yº±/¶½aìX4ûân÷rýÇÌKí4­
+?dyÓØ_ÕÖ^eÕáØµi[T¥£çô|¹I;|½ÃEnòmÚíq¾¢Ño/?V«öB%kµO>uÔ:Î¯}7AQ.
+ '8Ö¯}¸xw©Þº\Ï~} ¨¥'Qà¬`
+FQ,GHÕ½º_}·uÏÎ{³óÕ^}z-ÿïêù?fWó¿A³|=¤Z/q\1VV·ß~»þvÀlAjo
+Ú¹*Iwm]<ü	\'AÙåY[Õò5¡_
+ÈXÀBÊ²8î
+õÀeSgZgr` U.5`Tí¢V³ªAE¤M£¬Bë²HÛ|£_»IpÊû¢Ýõ
+-GnFÙu¥Öà¹lþ{¦esu¬«£ùLU/î#)U\zªÌÞGsÅ]ËÖç¡.º^@Ä¬ÿÖ|*¯áÂX,LPÿÉëª±¿¿·K[{Wî
+-¬ÙúÇ½c¾»¼ÚÚ =þ,¯ÛB:Ìøë 
+-i£¨èª«íÓ»:=îp	ù±Î
+6ÜtJ¹eJä#E,î}g¥
+Ô~lÛ×¤ôvûÐØâÙØùöIÇóÝ87
+ï>ãùRÒã"¡Mõ	ÇrSAHdªh¡ ß'%V
+Nmö.½Dà®­¤ÄLNúhýô^¿{Nl
+[XuÑw¬JÃ>Ø±EIw9<Æ
+
+ïÕT±ãáÔïÐ	­i<ÂoÔ6ÚÄ	ìû«6×«aÈ¯Í^Ý
+ÑçÅvlG¦rÚ
+-<¬Àû,V){¤DßÖ^4{³__ÿz9­`
+%
+R	kåàTßñz:ð(6a\U9³JTÐ0=¯ý¡@¦íÒ <T<l^¼ØkuË
+­s!ï¢¸+«:ßhsò5!/EpýsKÑIÛ«¹>¦uzÈ[¼>ôyG+DÀÅ÷¿
+
+xâùì§eQÞ
+-[PÐÕQô«¦ü¾wò
+¶¶ï
+Ä.åkOÆÿÖ²óh¥FBj²r3Ñ¤o®/æ&"0ó|Ü$L\eEÊ;Þ^_|ú¶SÜdñzfÕH÷5ÑZÒËB¹°q,2¸¦Ã£!æÜ@l{âpÜ£¥y
+H¹Ðåm¤YefÝ	õAÖ¶fÐÚ/
+¡ù/ t½7|:´´w?Ø´MÍ&­
+©Ó¬íê\[üevÒ¥ ü}÷æÔæ,ªk
+?ó<béjí L&Â
+
+8Ê|2Ë 7ðL.á"é±
+-Æ±, ¨@«\CßÞÖÕÁºé.ÛoU·uZÚ¡)²±MÞdusoEJ"^â±ÄíÃÈhY
+\94½YüTf9á^ZÓÕzØÑÂpI9òÅ:=YÒ¼ô=_}ZJcå=Eë[`Ù
+fo|ü´
+}
+Ùäû¼ÕsÃí	ðÅhx¬!£ä"ÏH	iÒÇB«m V'øÜd(gx=
+ÍË²Î¹íÌ<ûlÇÄ
+ ]Ä!Ô²èI°Äy´ËÞ9¢_MñYú	\±µ_x´÷* (Eé
+÷	q?7ãêëJ¾ZÛMµ
+ é%8Æ`í7ê»gý2jÉ)´)RÈ¨
+ÙÉ
+M
+£
+Åæ¾h0	Ò¸¬½­1U¢2´ï;sÐów]!>ÛaÀg.ýãØÕ¹6yC¯}GFfã>ß8OÒ-Jò©
+Vqâý-
+kKDkÜåe^ë´]EJ+U¸ã¤ôk"(¬
+¾¢ÁDTªÊ>/>¿
+k@²¶F£«T-Î}ì5dqd'sYS­°@'kgíh"ºì~Ñìªn¯÷
+õs7o'öÓ~NðB²H¼{%t}E¦¤ËHH8sË I×m5±CÂo£Ñ¢_ÜMz»G0L^_oóøË8,ã~ZúéâúâÃ/Ò´O ñEº^ T¬¬tß\½¿üxña,©uÌöí
+-3/Ê
+3®PÊ÷z%
+?úÝ{¼4@ëõb
+o¼Á
+}ÈörC@ôÇhñ xµÁÆNô².ße5£'YWäxPË¥úDFi3Esõùó¯Üú¶5(yIAÅîß]g*Ý.PWYA}R;Z1½)7ß
+-d¶
+Be#.¨7?äY×ÇQµ.ø>²#
+|/«@±)¦RW¤¡5Ã9KK@ý$
+Oþviy§
+-D¿Ä:-Ñnë®Ds.EBV®XÃ¶
+L+Aø¬p×P_µ®Ö2g}Aá{££»b¤Jdð	Ø`¹S)mÖ¯3EwÒ]°Næç´(Ï»æ*£.AþÝ9ÿ¹®ÞðCE¹jhì; +OÙ1AwZêPJuO/*»-ö¹3*,
+
+-7P3O
+S
+-³ñú0DJ.­ý¡só2;¦ðnÌÑÖÕ0â¶»»>
+ä¬k]k£AõP¦AÝ
+ùô
+!C"í26{oûayð¥ Øò%ßµ¤4rL>2]aÀÅ÷P7ôYòxÛûvIÕd n$H÷?¦·Å¾h
+(\ÄfV8­TKy)âµ¢^
+-²´nMÂH¬yT[SÞD¾6ÉAQK´ëõûJg¦puSÝêS$üÁ÷9WýË£íñdÄ21÷l°Êµ[PÌí£bHÐÁËçÙeeH+fª¤%¬È!³RÖ¬åÀ{\L¿	9ñ±³ëMµr)¤Ã=ðwfQ4Éô	VByçâËW¿¾f{«8QhçÇÑó4<­¾@èÄEGg¤¢}árÄäXÂrX¹Tå´¢qsa
+-úÚÐ
+-,epÞó
+`Äè
+-Íª±­Wë`úòØÃ¦ü²ÀÖ7F(ÊM©²×B>E&h\+i)¨¢Ç7ôõç{Ô¢P5óéÜ%ý\6 
+XðJËáÉÈ¶yë×]
++¦M>ë}±ß»?ûÒ¬-¾¥²`>U´i¼Nö#¹¦
+-¾£gI|ÍÛýDKC9Òåo¯'1`ç
+ÙT.î' ½*ý¿
+ðÃ¡ÚÎ Âìk_:h­ù
+nmacP.µçRLS{Õ^í,dLÓ +åui1z~YºÏ:JA¤â
+)p¯3ªAÓ
+-]ãA^Ü¶!ë±öË;ü:JB2ùÝ´yÑÓT:xmInFÙùI½0JÃROYÅTÊL*<L¤Â§Yµdþ ?Õ5í©]©¦­éõQµpL¤=2¯kj:JuI¦aàú*/³ª3Ä2â§¢¤Y2`+p(ÆzåLÔ°³Z¶@º«jýCÞ4é]nÚ ±
+-
+çêÄks
+-¼ý¾×àóTÝ±®î¤ê>îÅ´ÔÎ$Ý 6	f C=IêË1vÎZÔ¾AL
+-¡ë?ø)µD=ulJtD!íÏqÃ*ÚmvíõªÆô T®Âµµá1±`"B'tz++êÑ>FûÖmCU_ßPf
+4Ôî½Âv`çC^éCaRÓUì ¼ºÉL¿Ú´
+-ÀjE:FÇS­ëPSé¿¼xfg«ñK¤wïGÑÈ{"->×éImï2 koÅº§X
+-A=ÍÔÍ1`}bè;Vîviùç{x?¦WËyÒä_!ô±¢|/XÒ¿y&cWÈ»Æ©¼©+Øk±C¦Ü
+c4@ðê1Ü$tfs#
+ cq¥ñÃA)·?ôÞ¼¡eQ)[ÚÅh:¶®'w ½¤-6?Ã#8£0(1AïÁ X³S¬7eOàëéÏ{6ë×ãË&
+¥øo0­±SyÓkF&¶àû´tÄOèæ	êVàêV}¶$¢Q0gÌ×Õu'ZAú¦ü
+-kü4
+Þ$Uhnä8ÐªWÅÙõL1}Î°fPH¥eâßºþ³¢®'u¯>^^¯¯.ÆØË´\Y
+{ª
+ÇN|Ch¸t6£ã À¥úÔ©T³
+-	ÇYÂù9@k£ek
+etÚvµ=ðÈjÌ£eÐ?cvÃ
+v
+-g|ÞZÉbÔ(òì0ä
+-P¨Hx
+-j
+l¬îOeöJøß`ú^<Yz:­Wfùú§/_¯/
+-¨Xs5"Aßh
+é:Wt0³I¡Op(µZæª 	)«é=ñß¢+3?nîÈæÌ8*r°êc[§{Ë©^1eø1nt¼âd%
+'ÐA<àôTñÒç$Öt¶uõ¢SëÒôì$õ$VÉ
+Øz	C4>
+-YJÑÖÏJ¿}Þ#øakX	Va3¤L£LïCÚ"ßVÑR¼Iðé´ÅöÑHah5&æÝ_6G+sR80DÚô"'\2¯4÷¼§X°fRÆ¦»ÕÐÑ
+l}F;]Óª±Ü«Íã"oð7 ¢!!QÐ
+9~ÝäÈZ©}ôÄß8¨z-tSÐ_.Iá©ôÉ4ÓÓt(D(üyö_TÔgendstream
+-endobj
+-545 0 obj
+-3850
+-endobj
+-550 0 obj
+-<</Length 551 0 R/Filter /FlateDecode>>
+-stream
+-x½[ÛÛ¸Í³j?B'¹Ê#ó~y
+{'^%;öXãJÆyàPÄ"eÚñl~>@h4AÆ³IiSË$[w>}ý6uæ®7uÄÿô|?q¦où¿ÛÉ·I2÷Å?ðþÎ÷Ó×«É«¥ç¤üK/®6Þ\¸ÓÔÆN:éj?ý|õúÓÛ«O®VoS_sL]Ç
+-çq:
+-S7{bà×É«Åõ´klòêóÔ¼úEüßë7üÅÏÓ?M®Ót^®Î½Îíæj¹ú´|-f÷jéÆøIÌc1ÍÕz2»o]ê¿á<ÔÏÊ#xïØ¦ÞÀWÁ<
+-Ô
+¸sG?ØÔ
+-<Jæi¤
+u»¢
+1ùìKmá/æ®Ú
+
+-ú.²îb21xàÌõgí>+Kû³l_áK?ûúa'
+ð]²W£'U»Ãù¦UQ©V	Îssá'0ynmîcüÅí¬á=k_\¸ã8°ÿZýuyø5oUëz_>ðF¡htà?Ä¬ápWT[ýµGýÜg]S|Cg}7àßFsÏ&(¦÷EçôÌ(FÏ¼üøqñöÝÐ1=ãwL.4NulÅ¶Håa¤w¶Å­Ì»&+a·ã¬·³=ëvµj³~)ßÇfeXÏ1¶Þg; .½iê=4MpxüÚ#
+±b+CMÄgZ7íÀQkå`)86àYÓ]ÁD9JáÏ;½°Î$»¸Qy½?EuïÂ
+®òc5Æ5
+ÿªÞÆöÖM}aXÕé·c¶n¿ó
+¸¯CÓ4 vÒ&È/à
+_' Yg©næ J!2[i,ç¾ÞC>ó[ð3Å
+N"Dó1;½k[øF»pÐÌ§Ûemt±ãÇI?²p¯ßN@¢½n.¥îÇç»;ç
+v7«Áþþfµ¸^üójîat;û\t»ÇL9íYÐöq×Ô
+-´¡7½Ô¯¯c³Í(Þ
+oJ|À
+-ç!'&ÖÕ:z2Dsð»Äc|® u	ÆW{Äëõ[ÕUÉ-kôõ¡+öÅï
+"I8B¤¨!Ûªßy-'
+yog]S­îyÍî[
+2*Ãmrk#y3#6¸dcé¬õëöx§Cé
+'máñ´ÓqÑéÃpú×7×«7¿ä^â
+äßª
+wÚ¥
+OLÀDÛìqZbÆÿZ°¶£É ÚAÊ«Ô±ÀYa?kâºIÖôÿ`t<ki>]PóH¿Jt7ïxI§d¹å­4%1ùx@Ifû¢*`É¾OÂÛ4¯ÛNZÄW/×·m±­örs¸
+¬5M}W²=AÕm}Æ1ð»BnÓ­·MvØÉxKÌÖ#nDÀØ2¯jh ºÝöÂ]"xRBªh¬6@é¼nPWk±á°®-§Ü\¦`Bä7Ê`ÅÙ4dr°>úòÈ³GE7q? ×nÇP
+-Û9o53m8iÓÝ>^íNóHüò}h
+8*çXÀf
+÷»¢d4ÍÁÓßdÆñ"ãÓGt-H©ðËÓí×z¦8Ú×
+-öË`Lf(Ù·oÌ¼cy¶	¸´ô5É
+ò_+r·4~æÅ"Gå5åàaúr7ÆX
+&{
+ðT,HÀ_EVzóþrùñj¤ð2è|;[l´9
+¤(~ÔGÐPÐÐ¯JÑ9¦3{Ù±vÉcÙqç¯}Ô'¬üÏß~ÕßÇÀ3\ÚHðañêãÃ
+°6tI
+T~ãHÏL£¾ .i©(ù¸
+-Cd,
+-ªNU÷EYjoä«åÍ»67lÙ·#«r¦[8)ª¼a` P|©~²¦eÈ÷xJmj¹ó1å
+-ß}&1PÏ¼
+YCÝ¹©ºíBõ@XLE]q¤ØÂ×/¶H£Rc
+`V¦Löû1fé.ZHJ_G¾ì`Ù#ªð~ö:sDÎPÂêPükÇ9é³Ë0?ä}ÆØçðø±}uý~ù
+:19eð"ãlÃ¦<§E»u½:fT(EÛñx ü0"Ù,£23H ³¯­J¤IÕuÜaH*Ñ¶²\j
+-RH&cEù-§¯¬Ñ
+¿öç2)ñ0§dªûÆ5ùA.
++³a|3s	oì 
+-<BýZ=ÙYìýùê+N¶Øîdc£ÚJNéöU#5²8^
+-WPiX©U$Ñ=J©B§X¬qvõ±\k6Î l:Ã_Îx­C
+-ü¬Ètãsª¡Â¯©.ÞÝ|Z
+-ÓBædì,Ø¤@»·¬â¾Y,3VlÛlÇtph´@ûìÂÕÖ$ý$!gAw¦ÏJ¸zþSÉp]¦²¾YUá)b
+-!q.ô¤gÉõ	@~Dà¥ÞYÍ
+¢Ùo.×Or_½qäÓQqPAdn#è@;É¨8s¯ßIFæÊ4;æ¿ÞvÈÅd¦VÆ0©¹öZw««_¨f@!¾ä&µ¸ Ø)Èj`Be¾|ù$hø\×Aã¦±4nâÿgãK¡m½ ÒïËL{c¾Xhûg½
+-<&æÃã K½®ß4ém¸´È¢k:«Z+*C+*)yUQ²ZÕ]±Qèî¦M
+-v> UùÄL3t=S)<è*"ÿí8[Ûb(ÐFÊC>3¹!Ýåõ¶*~Çªî
+
+1ÄThØF^o+þ·öË
+¹ÿ©±¬ó¡()~<§ÜÇ¾<»Üpµ´±NI,üÌ ®Ë4[æÌÏWY¦	öºSÃà6QûÍ1®hdÙätIöèzf|¾ÛLVÍ~ìYÃÊDk¶ÉxhÍ !ñA)áÞxöw½ç
+z¾sN¥Ø#xÙuµ|wùë©ãÿÊÝgÚÉ`ãu^ #küûÕrµxs5Lv¡!Æ{
+Tuõ;kêàèäè¿SÂ9¯']»*|DÙS3 ~¢½¶»æAUF.
+¨ËªBWT%´fÍ$´a`1Ôq¯âÑ]H­?ù&Ë÷²qWpÖg´¾fó®È¬ø=7fâ¬×`íPÉý
+-&!^Õ¸vâY4¬¶Ì
+lØ½ªM¡!zj%6¼Ô³³VU
+|·^%¶fmÞ¸k-¢î.a{\ê75úð÷¡?µs¾Ð¹RSõÃGâ=öq ñ|^h tÂó!7
+-ÄÓ(ãêüÉÄp6¨Ï CbýÁ9¶[ë^¯³Epì@¹äÀ;M°OÁ6ê
+iØo§)>'upîzÎ
+-Âs¡~F]^ýeñîj|r~äurQ$ÂL7#E­c|ëXB]èÄê<':ëÖ{¡km½XÝbµx?ÔÒ#Ç =&rPê ¦ª4ÄHºz³ËòzX*¶k
+-6¸£òáÅþ Gbi¼·O29-ö{ÁíðzÃÐLíú 
+
+-"µ%>mØO¬Rí©>Vë
+e½`ª$H|³°{yÌEÊ/RÉ&ê×ºhócÛbU¥P+]xDª|2a¸}®uÄ¸¯?4Ü@Ö±n'O%Ñ<1çsrgIdr£ã¥F/
+$VBó
+e-§Ø#
+ôô¡f1'v
+½&õek¸ë×Vi²«Íy¹ðó¿I¸¾{ÎóHïEìýp;×äd#»¾¼:¹»<ÓF9¿³.Î
+ )Z
+Qÿdä
+µZ~^èóè
+¾Z³bqöÕ>¢}ÝÞë³SÁdQß×F§î
+ã)½³ãþí¥VÝ-òHAÕnÊÉä)Ï·};ã]wIAdk&ª)_°ÀÄs¸QªNUÀO°'î9'çûð>2¹Q7uÁé£êhOÜ=ZüÀa±/Õ¾çN¸NtVhö VËË7Ã'R
+-ÿhrÅÿÂH?  >¥ñc%|Êsþüg
+ÎÞ5£+[[ÒÄý®Èí[)'ªú²N¬¢¥zo|©ÁSS2³ï*Ã[·ÜY~ÄÛæ¶
+§Ø¼Ae Üó`H\¿Ð½%~s¬*}IÜ>³/G¥0}ö
+V
+-Q7@ËÙóÉ
+Qµ¹z µý(âìXyP¬Úí*k$
+SýéÞ^àZÎ
+µJä&UÝbOÕ_
+Ó
+óüØ4p=_U
+-fÀ$æAýÃüÃä¿SÜËendstream
+-endobj
+-551 0 obj
+-3405
+-endobj
+-554 0 obj
+-<</Length 555 0 R/Filter /FlateDecode>>
+-stream
+-x½ZkÛÆígÕèè!A`-`qù~ Èµã$[Ä©c+Ý¦ÅÄ¤v³íï<îÜ{Ijí¢HíÀD
+-Éû8÷;óaé:¿tÕöÃ¶^¸ËïäßýâÃ"uõGÿÀ?oëåóÍâòïfòN?\nv
+Oÿ²ö»LÜÌÓå¦^¬¾yùüçï.6ÿ\¼Ü,~Z|Xæ5ëpé¹^ä$Ù2Ê¼ÔñÕ_/.¯_-î$¿,½Åå÷êç¯_Èÿ]³üÃâåõò§ÿu^9~ÊçöêêÅ÷ç§æGÉgZ:òílj¯¯Þ\½z«&wù&ðÐw5ËM±X½8äÛÖð
+dN7«F¢¿X{¡ëº«¡"õiÛÖÇÓ ä×@}Ííõ¸·lþºðüÔñi§Ztå6¯ä_¹Óc"ßb;$¯N^xÈûè¼öroõYàÀ}«CÙµu¤NJ{¨pÔO,ÄQÞ¨îM!Ì´ÂT-ÖÜ:8êFÏw2ÄõNÞ½¾#n¸íò½ºÅ÷
+7µ·½½¥i®5KW?
+äÛñ¹Â~D#Ö/Æê
+-ùøÁÞÖïÇ¦Ñ?
+»
+ïN÷¢°#Ú\°±¢L
+³'Wê÷Êe+KÈúnMÜô¯2¬íõ^5KW= ücÂ×»²1¦JÀÞUÚªA]¡æÞåyký²Ã ·(¸ë`^ê9è®m
+.^9P*fÕs#éUwjôzUÛÌ³Á×62²Õ]Ê/sI
+átù2
+é¹ãé®4ûfuÌ»¼è0©òJ&ÊÃ¤Î3×ÁH{°iðÞµY4ÍìfµËËJÚî/öÑ:á:|Õ
+rF]÷eUÙÑQ
+íè|¨
+ø±Óßô
+Bk8ëÀ$£¯
+- l;«.1èoV¯¤5*åîA9
+@í¤V ¬AAò%|
+ÊZØ·34óÝØ±nþ»zgÂÒB¯Ä3¶oìûj&9óÑæ«¾|êµË¼ÉÜtJù~/¥T><~>â¹¾"HßªÌ#²ÙA^èÕ¶`/ øÑLþêËNBÁ$¥tG¼Ù 	jï-X	fl>ÍØ'Å{EteÞ']9y{û³²!«®­Aºéûñï\7YP`Ù
+#O
+C,_&«.&FÐÊÁý`±äqcØ<å£ÂQßÄö4äï+éB:a;´Ý 5NÀòÖ­¬N¡àpLöTÁk
+QvÖ¥Ú
+-²â²ÝÈxÆR±3År´Ì²ôÄð·{ÖóÑë²d%
+Þp>7{åÎ,)âU Ù^jwÍp´ååc0ftQÆ:üÂ,ù½Ãï<m
+tFÆß·×?¼üñêÕË-Å!ü¨ÂË:=R^zÿ§5K)_in¶$
+-½³ýÂ¹½ÐÁârn)Xtý ×B2`£Ê"«â'¸lè2jYØ­MÒEûoéD®QKñâå,ô§ÇBÿvUî
+­¿ýÐß^<C×zJIHSªó_'Y-±1f)/Oç,]ïaÒ®[
+-ÚÎÙ÷r{jRÕ¯ïI~z
+sª
+À¯
+9ÓÄ3aø¿·b:¦R)I7Fq¬ç?Gþ
+ý0÷'¿µQúC{ªÃ2r[¤>>cÈËlDà<nn@_ýùV2
+-Cb"@C
+IÃ­$X
+-ºÒ¿/C(Ur´éÓjOG£Î*
+¤#*>'¨_élKûÞï/<®¬S½0 1ké®­Ì³Q=«÷	ä2â?+nÈá°+*ºT¯Hrdï¾~
+-Ç)Ö9P¹s&DÁíbªbøáOl/T¼
+
+G<Ô²a¤À
+3éì%BQÜÏPSû±DÞ´Èñ;ñá¤(¤ºUëu3q{×j<%£ÚÏõ È4r5c8ÞÌO¿§$Ip@4mWSß¡l'ÔuÞ4¢{fcÓ¬Ú=t+ñI5LÄ~dvïMneÙ8NÌ-TïûÞ.W
+-áË
+òn0 ]q_ûöw§ö!m¼¸kbÚ·Rùª´¦¦¥¿ûvü@}ë;éúÒ¹çîòªgV-Û
+ /ÆBMebl¶}Ù4fq!.ÎØÁÜÌ$¡ÈTß}õÔNBO'&°
+-9X¾ûÇ±I¹±az­QEèø´D§Aq)3N,yÔÊt¤!ç»c/êl·5¯×K
+-É0#L1>JÒ»Ûz
+B:¾¶Æ
+-Ð»©ÚÌ1iR
+9ÕÁgµ}©¦ß?H®ó
+-ö
+Õ>Í0½{´ëx*«§û,J0"q19iVò8äØµRèÕú±Õ³OÉùU^¶×å²²;íBUÐæËMÆõ?^úäÝ0PÄ+H£Ï"¹SÝcTÜÌhóS4P!f´«tÌÇ Àræ*[Æî\7²ïÛÍß^Ï2E²±j§F÷ê±ZÈg$¦h¶­i,m¸rþÏ'ÎãåìÌ±
+"¿õ}è%\¤O´AÏu2©#
+-z&eñ¨ÊNuí§!e½¤ÒÔâf"bßåÇðä
+-}ÔTä:I¢NòÕ>Ú£TNÍf¦ot-G7QbÏ,X
+- àyu2ÇzT°ZØèM1ï x!ég¢O¦BwmmßDü¤DTÝ`´´Õ{aÊv98ÞÑª
+¢Ë4;ë:ôuÏUpI(Æ¡²B{>éV÷é0¢'¤ZZNÿõ× a}	hºè\ AMÜKìÄ¢{5mE2B	.DM²:Õ@X(C0Þ±©Mvëöh?Ë-rAj·&|ô.ªÅ
+ÆúWT¥
+Ä¥ìñ§üØ¶;
+ç¶EäO
+WiÇDH¦Íx+jK
+-ð1¦:/ð8DË
+`WJÅàÌDÎµ´³É@20~tÊÂPÂ £×I©}R9ï²¶ø£ÂÑv ÇM¥§¦}eéUÉ¸h­4©\<³Ä»lÈjÄ7ð!÷êúL ëÍê
+ªü
+@ÎÏÀÞ4tÆeÊò5Tú¼>ROskÒ=ö3]ça@Nì«
+-ô¥.ACû0f.
+àu*¦X¿¿;5k»ÿÃÛßô8²«Û¢ÜòëRì7@©±RV¦!E[2&ÕWÝöPª½»Óÿ®:
+ø@?BbUÆZÍé$¶Ð³Xah -|nf¦9¤ûÍ]{Mg6
+Öî<Ñ:¾,ÄûÓþìJìfÉáo3 pNT
+©EÝíÒü×ÓÀòôº2£1wßÆ¬C»Ú¼|óêã>óãÏ³Rã3?±+}ýÆ{î²ÙBw30XËÁ¦¨³ûzr¼Â$¶ÂÞ1é{v1ï¢çÝøO[í#tòhb/hß»7úF]OQ¨C'Äº9/Á«m¨½Tþ0Ú°kVBs×Wêy¹uÍÚ
+-*úó=6}c¦:ì&¡hÔ¾¤)ÁaF(sýØþ&?ì Z¹PMl8Ûf÷+·`Å Û3 u^å¢N·QqM5ó#
+<â&g­O29Çmj*,[Ædë¨iùWYr.p×·cWÓ!¶#ïæºÃeÇ'gZÀ_äUeÛ]¡4ám!-Ï|4#²q.Qå÷zßnu1+ÓC×öö4@°Zo±-¸í©¶G±xãb¢£g
+-1÷6â­"d4µQó¾ïF ©äÌÜ	ÓÐx7¬S ÀäîñÛ+)dâØ2×ÿWmÃqiÓ@QXÐ ßÛÜ£º´nV¬·
+-Ç@U¢y"pÌÑ×Aä)3³z?ÛW»9v«åx=²Å©ËÔ}gPÒ³ëzÀ.¾å;.°j
+0k
+´NIÞhKã
+Ñu¬*"ïM{mõNú®j#£Ûå[tv§ãâ²ÈeÝnv6
+-2²ußÃ`ºº­röÔ
+Fø
+-væÅ´k$Õ÷­6/UÖ¶º¼q¦úÆîÅ3ZíÄëR}
+- âNeóMÿð¼MÑ¤í
+5NcJËm»´°'ÒVð7àü¼ÊÜ;°
+·m
+-ààé¥Rïòº¬Ê¼3]±0aÇ­PSÃ¶ËTpUÐVn;>CjÀ
+ ½,àDç
+)@,[7¼là¶1ÕbbÊL}»2¯#
+K¸0
+-f^1ìæ/%þäÛLá'<2NM1MæyhScZ½Ô$»½eùt©,~	ç]hYêÀQ?¢Ü`¥ª³°±ðmF»Ì¦1ª
+üèq.¥
+zQa´Àzê#xlè¼ºÈw4·¸e=©Ø OÈP³UÚCD,|2	dõ÷øÜV;IúíÍéºïê#1
+$¨G~ZüTÆ}endstream
+-endobj
+-555 0 obj
+-3589
+-endobj
+-564 0 obj
+-<</Length 565 0 R/Filter /FlateDecode>>
+-stream
+-xÅ[ËvÛFÍ'Á](Gñ&°eÙÑã8
+-=YÐ^@d4 ZVòóÓÏªB7(Ë9Or Ðèê®ºuoUûãÔ÷pêÍÕnâO_òÿ¶ÌÄ?òúyµ>[L^sþ`OI 8
+¦¹?û¹fÓÅn2c]W´÷'(ñæ)¿e±ÌÊzè=y5ób}ñ¢©;öñÀjq=½y¨è+9@yæÊ©øy¯nä
+-sÏ7mõª/º¨Ê^yþI
+-æÃ÷²B|aÕtò¡0ÂoÄ
+T;>Êª¨ª²Þ«O¯C?
+æ^
+Ý=k7Å½½;Q·%^<¤1¯9´
+«6rÁÎb?õül$bÇø¯ËÙâ±ïûjaÍUQ]_Vÿ/7üøZ¼_ükðõËy·l%
+-LÁÀ?È3¶æËQ6M
+ãð
+,»Õ«{9by	<qjî*p&=Î¼9ôdêÍ^l^Ç¿&òZRð=þ¤&¥°xKiY(o¨×òç³¯wÉ ö²L9µØbü¯¸)µ³©Úû
+7*_áål×è]{þ1÷E[ìßïNMÐ÷a1fEo1kÒíÃÀëË
+3ÝÈ1¢ÈÒcójY±Ök
+¾É7ø}%­r¥¢sÌY³nÕà%jG)kí»yñc8~v\;ñBópê¾45öòtgq$·7iW¨W
+êù5¶±^bìx'Ã@ÜcÐ=pâ2
+-`
+-Î¯/~ºZ\^,$R$¯o¯/
+S
+£ôtdX´êòêååkqÇåbòëäã4R{O¹óFÞ<&I
+óYpÌ}v5yzõó´olòô÷i0yúøß³7ü«çÓï&WÓ_Ét.ÉQÐNS¾²¿¼º¼>}áäÓ"z
+9(Â^ò!ÿòó¨±Ïwçg2 ¿]^>w¬£Î!@Ez]8ç§ãá\¬!ð®©¸É#
+K.¾´ÛÃNe·KßYÉMe&
+-Dä$B
+k$©äéN¨óHçÑT±µB ÕHË¹1ýNz=ÇS
+øÀR?¿|ööå¸<ÞÄüßÀM_âXç"Ê
+\½~óvá,Oá Í
+5¢åÍõ/?¿qG2`LuÕìCÅ!ÁÀ¶eû$IQTÔç8Õd»9¨ôÂ3¤âC©
+-÷ÇVCxLÉ/-3Ðì¡Ò­
+ÝÌS^ÇS$'Å	¦ãÉÃ¾$n$7Û)V0
+Û¢¾m*m¸
+t|æ>îãl¶Uç"ü@à Uôñ9ó
+!¥75&+}à»x¯ß
+7nÕú+¯Ôëoð\ÆâÇwl9Sèµ3tøcæÛ$à2(å
+>¬
+·Ñ;er
+)~¬ÖæçÛBñB?
+-é¦¹³¬Í§®çùWQ5µ¥lkBó
+RËÉR"íÉ=Øe
+³Z§À&´«r¢H1ÓÚº³/û¶ÜØÈ
+úIn*Ì¾»¡]J«WºÃjÅ
+ÖæPItHæÁ)LÖ|$2Ü
+Sò"ÊÁµ÷Öºß+ãÜKÁ*ÚÌ$
+¬|ltnÉC¶J9	Y³±½=°G-ë5O¯¢ ÁlkÐVítqy+
+-÷5@h1SzêR½oSm§¬}åCjÂ0LS"FCdóúÎ³Tí@êÑÇ¸o§ 4}gÔO¯ÆJY	Âü×Qðn(èäÇm[ìoAô
+--®×ì!&Suâr5 |HËÁVF
+- qß_÷m³7óâQ$GP\ncnQÓL×ueË`>kÍãM'cV¼À"´¢fÁÄ®4OðjÛ´e»ót¬fÖî¦ÎîbôéÝMQ§ÚaöÙ8Ì9¼sAµÇ4íµî
+w·¥)D
+ËÙ-áÞ,ìÕêÐjÍ${|îÛÏ©ÍhßÝug,=ÎÓ.'ÈåTé	¡?ð4¿ °ªXÿÔVÑ7 .O,Xä
+N§`È$'¯x:'4-nª¤8»0¦¶tÈa§\ÚÙª4£/Ô¤YWFÏJ
+AltdõFæ¥÷BåBÐÿ yä
+-FE
+-¾ÎT
+ÇMÛìûÊ·HÖ±E#YZ8«"	j/¡îÄ"cÄ»qîÒö#þEÖà!ÿÒÖ*T¢dÓÞüøDeÇçUÛ
+¶·Î¨:Í.nUãjß.þä¤NÅÚZ½à!·0Ó¹@ÚÖ
+8¹mÁ¾1?µlß²N@'Þmsf"Iûá ÛDæµòrWîö1ß}CÐ¬Yh¨k\@®Rï4ãl1USäÅ;H¾ª.âjé¯ázì;Ìç6mß*²}©\aÁÓ
+7~§à*IÁu£Z¸6ÇñmB
+E
+Ö0ì2ÇR ¦Wéq ú|ùÿtæC:`ðcíÇàÝ43m²]õ?ÀT-
+-4¦¨
+-_Â
+9£Æ 'û/y$:®Ù²nYCk
+ß¹g¸7ÅúC±Ò¢×,¡¬;VQ|lÙð8½9ÉÍj
+- 1yL¥çß³Y×ÛÐ8RÙRÿ*.<Ä|Rê_IÅÙüô+àb}ð
+v­óÀ9aýÿ£IàDÜ|ïZ@
+uÈáGn~ÄMíÝH	ùÆÎ:ÇDÛkÔQ<VEc¤csöyd1ü£KA$¤f¤dÕR,Õ È´ÞÍ^7½fUZª£BÁâÂVÉcqÕYÂP-¦W,Æ9}?YÛ*`
+±ß(EýÂT°"þtÕªª ¬pê°,Hò>e«$ißÙlV_PÅ!Ã7åì=a#1|M*-;!îîDRðåìGyªÑ3¡¶ôî@Â3òy(C$*£D1ÔÑ©Ð6!yÌ%('
+¦¥XÎP.QªHzç
+>©ê+k2)/ ØWºl¯)TDèE­ç$Â¿¸ªi¬iX	SùÏ³3üsÕÔgÓl 6eïÐ°
+%ÅgAwU¥êþ¤¸£
+RðÂÖ[-\~KÎ'îCÖ µxR=Ï4?T²ðÊ84`¤´1`¤o½Áªáû^\_ÊFáÑîMä'ß¤É§»7QÊÖÍËëó7?9$·=FYeÉWÜðÎ5±Ñ19oª¹µc½íÇºyØë·n¥U
+¤ØôXÝÏIkÚu2R3"«â¡f5¹
+-
+uÑØå2îL'>©Hquwjy"&Ö
+Ï0Y
+Áröâè4=>Äæ
+Üñaw6-Óg
+-¢G¿ÚÐä«°iña x«XÖÅ^&Û²Pq:Ç/âÆÑ@ºÀ/-özõ³ÈRÅûJ 6©[*/ZÿfÞÖÍ/T´ubÒÖè#¼Dúüô)ócúgl?ÔÛÉ@Ó«b"¯:\ç£Êåºþ­ïëb§æ<Píº(Yè®þYË½%xÁ'ÑR¬N7	ák÷Ý»ÊÖ 0Õä"±
+ÖÝJÚ%o åA.F
+rÃy
+ü
+-o¿Q$UIä?¿âÏ#ÁïÅù«ß\ôðdÎHu-òeá&vXÔ§»m?R¾Iú~Dù´/%axâéàjåÜ
+ìh5
+4³ 
+
+¦T¬Þö·.ØEsX£ñºÉ *Øq«ò{¦¤ÅxÅR3Vª"!c½9<bs
+r
+
+Ø­M¥F
+Íª\ìÒÎÆ²*Òþ§(´/:JT6^¿}õ
+-n5IHÓ,
+-üó
+-
+-+
+ÓäÄbåR£.´$úVNûë!ê²"iLÎ7nöhsq­ºúRËs=;Ó\OvYNÅ9u(Iÿb9´ÌÕ
+Hq9ÈB6'Ù8&¢þaí£
+-mS /XAürÄÅTÙÕ ¼²*'
+-;÷e-+ª'±(SJ?AÊ@òª	JÇ¨laíà(EyD+ÝL§ZûÍ­Håa)é{*
+-)t
+±qÕÛÈ= hXp0ÐótÚ!ß!èE)tçÂ m·
+-ç³®R·9&5û
+§äì2mÙ·Óäx·lÔ@
+f´èYÈ"¡_8ôsèÛ¿Y[s×)ê¿^)K2ÌLÛGL#ì¬:T}iN°
+$$Yub·ÆÐêóäã	¬5¡å|H2w%¸s0pçåà¨»*5¾Ð
+DVJ¢×cx×
+yÛ³-kUP×ï°^âûî°Ýª1UlsVªI6;::%(jð5+åa>u¬I
+{=^ü
+f|·SiL~©:EÑS&ä©r« ,H"¸ä0Ä#Úº<H
+öÜØX:SÈ£9%òzËt;§|vó	ùK_¤
+ä¥Ê+æäp¬Së¬ðñP
+¡N#Ôx$ ËZp¢ò¨aÔ-ä1GN¥f
+-õ(bBc <I3ÕæÞÔÞbo K·¬Ù±¾-WÆµààWÓ®¹8î5/
+-r ±ÙóÂüµ¤
+·CO&
+-RaJn<*»Gº¡»Êbç°ãÜÜ?FÌþ"-bEê$º·[£
+-|RrqVØT{à
+-âXZýLà<jm-ZÅCD;18ðº¿[ÙþºptöÜôÀÞãZJ(æPC¥;FÓå!>ú½"E¯â²³[=ó±: B,\R'!#²#
+Ä´Vc=+
+ëE°DÊ¥ÚaÇà$n÷ÒYSgërÇêN
+F
+ó°<GT!
+2ÇÃþ
+Aùäp«èÿæWÐüÜJ½zÕ6ÚÖxÐÓ,
+-
+µ{L"XCGÒª^9þ[~ÃçdnnðL8hÝhæò8ùÙéMK¾­°èj¬ù¨
+¥x"ÊÄ]²jøëä¿"É8hendstream
+-endobj
+-565 0 obj
+-3987
+-endobj
+-573 0 obj
+-<</Length 574 0 R/Filter /FlateDecode>>
+-stream
+-xµ[[wÛÆÎ3ÁG(aÜA<Ú²+'µ>} ò  d\l+¿¾{ì}Û¦
+.ÝÙù¾ùffõié¹~°ôøõâ´ð?³ÿ
+k7äÿ7èïâ´|µY¼øà§ìÅ Znö
+_ÜXùËÌ[¦^æ&ëåæ´Ø:¯Ü«{ç¼q¸úsóË"Nåç6;öÄu©iòSÙ»â²_&K?æ¯±Ì½ÚüwáGîz-qÚqÈû¾:4|
+qw2½,vcõEgÃï®]?Ñ3x|`àßçøBÌ!HÜ$Ò
+óÝ
+-ùÝäÃÈõÖúöí^ß}7ýÔõàÝvÔïÊ¾êJýèp/þØäµþ-r*9R»
+5°ñn«­voÎþKW
+-z{±Ki+¾|ö¢´^
+
+¬oÉ5¿n¬¬ÄæZõâZ
+sòî0òi²ËQD
+Ê'ð
+ªÏÒ!¿Ãø!
+º#{®
+o"¿úÜÔïÕ{Úì½|/ÆøºØý r#}íV¾|óJAº
+-XJ¾#½ûøë¯üÂ*LR>-4rÛ)#ÃÆU{m¹ëâçCÞ±e§|>ð2pÙuÞýþãæ·Âoßl¿/>-CÖU´
+ÔwÓlÇlâÇï«ÛÅÛ/n,/þ³ô/Þò¼úíýßíëå7·Ëß/7
+-à;HcÅ$akåw^þñÇíÏï,ÄE»µÚÖñ®)³ ð}w
+Y¾ÅFU¿VÒJäÌièÑ[hÍ';%?$\
+	¡E¸óO$ öê<û¤)7Ù%ìö¡$)Ù'¡ìÅnh
+-üE,* ¥øIÕ
+]íÈ&¤\
+-¿
++9µÇ¦6ó¹®ìÇz¨/2.B¸H!ß¥:ÝØ(ê:Ê;
+ºªQ C¹{vä#Tºwâ3Öaâf°½Ð1]É±}d¶Õ À
+OPDÅ]77oß[^Ã^|~Üé§
+Ø|`ËgÂÖJ&_
+ï(°@¯àXïÄÚ3=
+-\¸Û·ÝoØo?b.¶¦_½qõ+/'O-øEõ	ü|~Hìz!Þ4ö=
+-Gñ£?¶Ý ÿE¡/	Ý01Ðçú|'
+ØÔú²2¦ú7
+w Ï
+-Á¸~Y1AÇÏªaþµÏòÎ¹»²¬5Â+&øgÈ¦ÜÎpjÎw].×ì÷x4°M#<£ÁÃpT
+z00Æmi>_û9'òf§ ¨¦+±kæø­/a
+-Òë±;xb]ÐLMÊÌLÔé§$ßI¡LèN ¢ÌA%¢÷ ~V[£ÝP~XL
+Ä ; ìN´FP±7¨årc\nD"ÌsËÒáT §a4²½áz©²c
+©b9±
+|ÇÊxÕhg&~Á
+ãÁúBv¶öô0»ÌG¨[?ØlàÝõÿÔ3¿sÐBÜX2ÅBV"ý@0aR¿º¼¹Ö*}v½1²
+{çØëPÛ»©	ã»+.¥ Ñ)gìê¾Õs§y
+ uÃRS«	«ö3f`
+
+-+8Ôí½ãaË""x=-x#/Í¸à"F
+-ßYðÒÙiÁe"øÄ¡Ç÷+^Ð"
+-ÅÃr¶;yÕ
+
+á:(<HDýD£v¢n5Vl_®\ý4¯©_©äôÕúK,+-ºêa¨ÚF?Üî!äYú½?×Õ û=	!:Td:¸0ö
+-$BC|©àÏ¼±%öº
+aM)¸±P£°²Ì(è
+9% ,llaÉ'$_mÀÂ
+ÆbÓD$qd¯A ½=£¡m`R*kG	0Ç)/,ñX5s¹
+-±@ÔS`©§®0
+-6#ïtE¥
+õSB8æòRQ¾ÑI9f½[¢IùäÐäCÙÏeÄf­E[·YIè,g-Í>·ÒYbÌ£	k]µª5ð:³jÚB{:dîºÂ9ÉÄ£,\Û9lþPqwª°oàqnÆ®dRØ`$¿EþßW
+Ü¬Ò°ßõ¸h¼VäòAÐ^GÈv®"§ ùÒ
+ûÎ®*Ø
+>µï§CJù7è*.	ÅæõXª-à3ÞÝÕµDki)J4®õµ¶)W²hö¥r§]MËDX7]Y®vcº^0¯4¸q£b9=HSjEåÛ÷ÂÔOwðRÞÓÂ0ÝVÚnªøC'J:d\PíV)Ì	ÍbCWöà
+Å J
+ÚJeýhî+3
+Â [ç]; ð %+$Ô?2	U-	IôåÐÍ3[Ã>xnSwã&mÎ)vÎÆrg ÚË7oo7on6ÌÀ%>¼±*qçw!3Y"`~ÔSUiUåG±PUaè}oUEæ¢ÊOE2ÁÍJQ5´3:OF3Á;uZ C#+Cä#±NájÁ¢É<@*r×,íý#ÃTºú­ÿ»ìZÍÀª
+-¾È
+ÛL Wqr!Ó^ëÂ
+©Ë¹¬Âµ"è7O¢¾¼¨³UØ­çÐxªwß CÕ\aø(*¤úw~½³]¤®ý2Ð!(t
+
+Ìu88¼ø{×ØçÁÁHXpÀÚ¸1Û¾¤
+
+-lR^&å`MöêÑÞ¢¾ú
+¥yãì@ajý}µ&"³
+ôôÁ×Âkô, º"
+-°
+-RT5éË 
+-éñC¢â5ÞþÛÓÈ£,
+S­
+ÑxW6@Vp>S  ?­ëTþÖ,òæF<lÌÄ&fm^Ïø')Æ\ÀÛà$»v¼¯eçtÝ~2Ë-Ú>
+ "RZæÞLÚD1e$¤úQe)ÞÍöe+WCÒëâdOmoH 5
+£ÞiíÆ?J­ÓS@ éz±Ì^uÈÃêFM/ByÌâ©´Ã5ÔCC_ÊÒâ{!.ÏB!P¤uz¨«¢
+þI(li»¯+tK
+±£óOÑK§{¤5I(¨Ó8°y»û÷Ðµj¥àb»õu.É mp;ïêÊ¢ÜéXM¼YHwU'­'i=Áâ!v«àóVam`]Øx"í±ºIæ}/­±bgÚ!U	¬Aík|ùÐ©XýcËzXJ
+ÑÞÛ:E«¶zW½PçK%×<9Ð=ª £¶æNù_
+-Ây&I¢Eöªü ßåÎÌe2\eH3ëëe;ÄïË¼îºÊû)Õáh8!eñ¤Úo¡Ìkp'mv(^±|;°¤7¼6K!jÙS·¡¸¹Ämèq³DNØ÷ØõN±'fºÓzmÊärµ¤­[·ÈôPýÔ
+
+-PÂÏêÂ$Ø¤p i_À3M§!Cs?Âû	 MÃL²Ã7bú²~ÌlâO£&Â/×¦,´hFç/ÖªhøÆU}sÛ
+:Ý?AòÜQR8%®JÅáª)&Z]ÏHédÌSD9Ô0L2¥-Ýõ£ÑÊ,XÍP3XºýPUHDÎ)èÆ§X
+]v«°«ætlm
+¥þ'ÝÍ5´,IåNl­NaW}~çÀÝëø2CKJÖKéI=9J^,°+?×97Ç¼híå£sè	
+àF§| x¤ÑuÛÏEÎßH7¹.¯#ßãoáIËå¾VE
+-pÖûqPKÝ>åÊ{ô¤-A§¢âÜ"¤ ÚEQªèi_ób¨e+!%rKVÚT§mzæªcý´¼®¯ìóÜ PûPÜ nÆÜx%ÄÑÃKFW§0×¤¿uþ8Â% gz£:Wí³Pçl
+-	µ@U{f5Ljô±&axÒy©UÀ°LÏmõÀ?
+§y»jtîó±+°KÊe¢ Þ8à5Ñ
+ÖPçå=¸	ß¬k²xÚ7ï`?ò ©TEÝþ"ç¦Cr
+-/$»;ã×4¥µ"	¸ìØÀß«£äðÕ{h_áîÍY:W*^A¬VfLªç£Vh-)zaÃË'ÐveÑx
+-f
+&;Óâ¯°¿2 
+6<)fd!<a«oÇ¸V
+óFÏåe¶¦År§{ZÀx©ÛÖÖ\ÆÊ
+ÕjVID,'M&õ4»ZFnr\ð9ìÖ©íTæ
+ñ£);U!Õë"ïK]ýÆÃØv»m"ì³³>ØýeøGÂ|y3ÉÝÌ
+¢`¬úAÌHÐ3T³ÔJf÷EÏlh?føFQ*iOÖÚI¸z
+~3:p{±1
+9¨Íý±E4=¢Ëä¬ëö~z8TÊÑFZ3dûYöÿ/¯Å¥L$ºâNäáº;½<zJ°è³¥IIg:JDÖ$ ëé?+XÏ0À¤üèx'@NOÎ Hê
+í¶0¤
+-}(CpìÌX3ÉT íô\V­tÓ*8£f3Ô}×LfðÕ@Ué¦®<­JYJ-õz	UtÝz!Q¬ÂÜ²'ó@þZ*q
+f ßÿ¾¦endstream
+-endobj
+-574 0 obj
+-3661
+-endobj
+-577 0 obj
+-<</Length 578 0 R/Filter /FlateDecode>>
+-stream
+-x½[[wÛÆî3ÁÐçH0î 
+mGM;Ií°ÍXh@ÆÅ¶?ß½ÌÎ
+¬öô¤=M(`±Ùo¾ùfvû~é{A¸ôÕíÝqá/¿ÿÛ/Þ/Ö^¤þ£_ðß»ãòåfñü]ÉÃx¹¹[úÅe°
+¢È
+{éz¹9.VEÿlóïE{ëµl±)«áÐöB=/gm£[¥
+5ÒMBßKcxtsó}ÝÞµz
+Ç^çÛÕQÈ.]¾ï¯Êoý¾ùq¯½
+ÞË×ºó0ðìQæ{}ðñ`Ú°ucÓTÍ^=}þ.Op¥qäå¶Í«C±kM
+f8ð|;çªÕÛÙ®ú¡hÊ?ºmô/£(WÆõÏùr.äDývT
+Kõ(0Eñ¡õ¼C4ïv%JùM¬¾£«oäìò §®ÑÈfsO¼Ð¾L¼Ø­^v
+©ÕýTÍL·
+-#ür»ªåôC5Ü-5«Íâíâý2
+-LÔ÷~âeù2IÓµ4¹ÝËëÅóëC7ÅóßÁâùê/ÿñJþëú»åßW×Ë·O@%-¡2
+Õf§
+%ZYO³ô¬%b2ôF­pÍwýúÃµ5;#Öm@
+½
+*íaN8)ºý8eÐ^
+-P·«
+GÞU_
+8ó²ÔñÐB¾
+ßÈÖ§¢ª¡j-Òv{
+4"Ò á¥?´c]j4fèEB¯ÀþùAý
+kØî,X{Ù¤aâ%¸¢
+±y{gV¡'nW|ê
+l	ôzà±mº9^ØæLW¹¥|¨Þ¾/:lªL
+?ûâ(
+Ç
+ø)î2ÈLÄ
+*©¾4
+ê77oø&Á0±A[
+=b
+zèr£|©·Ê ¥å0nækòÖHLZd«°GÎ^ç&ya©¬rJäÞ
+%­ä%-HkírÖÚå¬U÷¾RæD¨Ìÿ+*
+-/§/¤ÕTü¼é½7ß
+ÿiì  Ê¯rBô¹íêúÎ¶¿7 Ë $lax/
+dÐ;¦0N:^
+-	¹@SE
+ðúcÕìï¡µ¿Æ
+'­ÜCc(3Å´GC± «±
+ªZ| P!Îå!ß²Àêíõó_ïG-&ÄC¼·0Õ^4}[M¿Ew¡MzKéÑÓ(}MªfB)úÃí$ÀHadé|Õ
+[-p
+öÝM0
+É½åD|ÏXm­¦ªu¦XQlQj $·¼ ÚÏÈ`zëR»ue1Wof÷¹í/°9Ô,\}§^|få¶¡Àoä` îlûÆßÃTs1t'×á?
+Os¿Ú
+-¹äQ?ruÞ,ê'Q»´kgöcJE
+£æ=i)S	ôN?	$V
+nùÓFù^¶möçë7º§À
+
+-F4JÛrµ%ìÆ|9©3§ÂÕÂJE@¤|;$ßæèçÖ_,ÕÊ»3Þ½ö|D
+1CaÈð¬iP¿lÅ,íÃ
+ÕÝ=r
+
+ÊÆúñ®-º^R)J¹ÓÜ¾+N½?'jþXÔ5òUÓû²Ò­Ù~³
+-Gá ÁLC·bz
+ë]\5-¤n$8m'h¹
+
+-èaæSÌfxR®øhAo'ú
+3=¹=1ÖÝØõÕ7qbÊÓ,
+"!(4ï×¤?¹',îTèÏø¥)«c`LÜ)ÜÌá1pc(Ç"¥$û|ôæA ýÆ	ÂëË=ö|â«g{Ê;_k!!´^fçn8$û*r [Iãîí3²q¤
+æVñdê
+ßU½Ô.²=¦ÛïÇ¢ììS[Ø_V¬´9µk
+%Á
+%¶>
+}b4,Ûñ¶º¿8Ç,
+b«\=,¨ÚØ°pÁ'd(ã`ÙÎ ×&É¤~Í
+-C°ï)åQOYBÔq×o4Mp
+1©~LªåÞÙõQòÎ£®Ï]m-:©£ÇÓÛVdë)1Mr6ââo
+ê)º©ÏçVÕ^Ëå¾ê°ZVýnìûÊæÆ,í
+H
+®h`NHØÅéÔµ§®*=7^&ØMãøêÐV;[
+-DÛ.'E%G¯Ñ"cSB³Ï êFêw^Y¢ßuÕi¦lt\aä|/C{G&&£]]õ3O#MQU§N#£TÿoÉ§ÄòHíÍq¬wZå_Þ\½{ñó««×ð¢$ÎB:©IF{lL:MÊyQ÷ÑR¢\²ç¨[0çiT1¸býõ)yqVí4 ¹¢«$ 4lÖ|,(Ú¸û_F·óx^
+-
+AJîg)IþH	%J-âÃÇ°½B¤+gL­Âpöz¡tÕLòQâømT·ÍÞDÝW;µ¹Â&${#àõë;(Æc.%¦lö/#ÊR¶ñ8ÁÈWÕe,`¨,$·»¹QÜ¬n}ã&áDan¿`%²09CBAlkRkS uË7®ø³:Cô~ßýòÓY¼
+-¯ÿà5òuDrÄë¯WWßÍ°®	KA5
+µ7àTMi'â¯d³7dÁì½zDÿ2°Å¿EgChDÅ`}^àÑ}ðÚ6t»%aA+4kZRPþ=pLå3°ÕWrôNcÝäEWWÃ1ÕËiI3=mËØ×
+FÌ9? 3ÑÇ{eâ/9Ãã¾u<äìÖj[
+ß§Ôadà¾ ßtìÜNhb»¹ð îÆº¾PoË±£ÿù0SCkQîÅÁOã ê
+à±·÷5²*hûùêÇ^m¤	¬ÕÖlO¨¿¥í¡Z®Yißd@L»ìu¥ãmBeycò
+g¤Ø*9ÉÅJ93dÓY5MtwÅÎZÐÍV
+é
+-m§VåþJÊRAbÎÊ>«ë¹d¬ Ò¡)1 ÍlRhv	'íÀeË·]%nº{kcºê©²	
+
+û¬ul©Aud+JÆ¤½SW£Ð­ÑLðÈ(Ö¼hhjUocþ@aÀ2TÊOyÖP
+-½Ü:q	Õ¼Y§rÚ½N·õQÀ6ð¿°õ>s U'7Ã¾0ñ:du@$
+si8¶Ly¨(¡Kx¬8êPÙ¦î)bb
+ªÛ.½ý¾½£N+|ª\ôÛÞ¾Ù2C0VM)Ý#DtX=,ÅPTu¦ð é`iªÓ&¢AÝªWÍAå¤%Ð	ÂÀõo*ôOóÕy cðpümü
+äNæ2ø`à"Q¢{ÞdÜµ(½ÚF\bmg[¦fÝÑ2õmL=PMe%s^l¾ H	~G¡S ^|«mÝî+(%L
+-J5_cnnÑ«sAyRç³AÙ m­Â'òücféæHÛÔ÷v²Ì#|cö
+-éòn7"Ã *e&¥u!zs¦¶ÄÒu:éH'lÆJÖ³ýF]¹1¼ötå
+MòùyÈ¨óºú\rj¯º~Ð1ÃçµH,pAyE[×`Ò
+-äÂd¡<ª7º¦N
+,HBr4æ
+R4sm89fº­®èLüfWR@a
+dÙzzTrYx.alß
+¦*=$Ûx ÁpC^º/H~mRoC
+òÞ¬fceÈ¾¯öaÁ8#í3ÃËVé[ñÕÉ H
+2ÿ±øT
+«Ïz¢üvN5Øë(thuO
+f¬r77§x"ðÁ½÷Î+Û&QÎ¨ø®xË¥ÒùrcªÁ4>
+ª
+¦	¸`$?·ê( Ë(ÓBé´¨}$]â©Zeis¶®5^¼{õÃõæêÕæË¬bün^Ü`Õ¬-×·MÉmW:bcZ
+ËS*Ñ~¡86»W1B:¤ü&FÙ6ßö¹ªd®YØI¶ã`­ÅdÍ±8ì½ Ë0Ë  Äâm2Ç
+þÿ9Ëª¸>z6sb>Ý½Ô´5ÁôRkí{H3=¬
+ØÊyÔU<NÐªÁê3rñãÞ!(i"^[£èi
+KprMjEè¦OKhmÄ
+*"?êÕ$½ÞÛ`²vmL½ªl®"¨O¡RµfÐñ4@ùMöë
+`±î|&ÌòÛG±-îzQ^©,{Â<vÂàöÙs:f
+-âI N¯	{1/ÄOÆÎÅç =éZÂªûü=ö
+-¾¸«fW¥pRðYùdW·Òu´û±*u) ¯æ¤î^óã5RþæFÈ¤Sï[În9¢
+gÖeµÈ£¾j²+UzÛèGéæs½1=²
+-/ 3hç #ÿîÙQäàóÀV×¬þE|ýºoÆ`'_ødB& =(
+¼­ Çâ
+÷.Ù¡Á	É¬ùÎÔe¦Û"ÕÞr`6Ñùäðà*`{ÛØös,]Ýb¤sÀ+ñ\Å±Jªts
+øÿ ð#Ãò¨IªÇ²~¤rkäh81Ü>µý´{¯¥=mOvKðH¯ÇcaË[Ä Û µºpi
+:
+-.0öì7îé#få;N6w4Ýýã¶­k(A:9Å#ÇÔª$á:¥ÃKLuE)Ú¯¬sÊJ<x ¬ÑôrLRYrMÑ^ÀQ·]ù»MY0ß¶2×ÎòÕJtn«ïÀÙâR,ã`o:Gñä¼­18dÇ)2u­Ùï34Ãópsi
+×FgA38xæ9
+uñù
+ÏøýÄ¢
+1NÅ+Î v3µxhT¡à
+--e?U#sZl
+:	U1Òñë(úyêñ.½
+-ú*?o6ÃË`­¯:Ó±Nì«~ôéÕÛÅ n·¦endstream
+-endobj
+-578 0 obj
+-3880
+-endobj
+-584 0 obj
+-<</Length 585 0 R/Filter /FlateDecode>>
+-stream
+-x½ZÛrÜ¸Íóì~Ä<«vhwVl¯²QÖWy6[É8	ió2âE²²? 
+-4äÈRâ*'Ã
+Ð8}úônÖ®Ã¼µ+ÿkþÈë»þEüïzu³J
+_þGý@ÿÎëõËÝêùÅ^°Þ]­úaËÖ©»ÝÔõ®^mÚãP¶Mÿl÷ïUÀ
+7÷ìÕ~uüÙE®ën²ÏÇ¾ç
+¹P6Ïþµû|}Êðý~tóE¾kòéÐñý£ïDòg8i¤/eMñ¼íôCä
+~
+-S~ô:ò÷-=ÇMÖ,Ê_v.ð'6oÊ.Ëª
+ÔÕÈÌïÕ \Ç7·
+--|1
+-m '1ìx©1ùyÆ|Mÿ{?te®>å¹^fUÖä"âbH¾ßñ±ìx­^¦NhÞÙÈ
+
+-Ö°DêàÛZGá¥ýæR,\3ÎaÑ¼Ä8+
+-âÊÔ½yhÂh:Íçâ(¶g b¯$oûõµ¼ël·ú°ºYûÝm°NÄìâÔ_Q8DóËóÕóó7ë¡ùêùïk¶zþWùï_ÿ;ÿyý§ÕÙùúÃÀNÇhgnä$ë(FÀ¿yùâõ·¯ÎJSûÍ1ë²¼ñ
+e Eleüb
+ý3#
+-lð
+r 6¿«E°ù¹ásÀ
+2uÅüë­ZÅÙÍnrbájÙìûÿ¡Õø)ÔÄ_î¿êÚZÁ-qYX nò²ËGH8?v3þcåî
+-ÞAìÄ|ÄÏÛZ}ÄwmN`×y¤Vó
+ùN}¥N3îI
+:8ÞmÕjb>]ºl²j1£®=f×dÓÅÇ$öj
+K%»CÙk:Âkp
+MV&ua«ß-!í7¦¼¹ë T¹^ahg[ÖbKóÐmÙ\GäÚ©%ñCÙñ÷(x
+V·D
+2×^Î[C$ç}ßv&ÜÞ)FÙ¾LLäê½È¼íú]m'"i' [ÊÈ°oY &æXC¸·ÌÓÉ§sÑv<»^Üå ýÅÖýæ|·ùêUßâÇª
+-æú$îzs/yûØ+tpÌ_]Vðöõ­ï¥Þ
+BÉºE6ï 
+
+é[Ò¶
+V-Â]ãçmsÍ{=µ:¢Â
+Å",H |Q(L(Õ
+nÕ|ÂMm5Ö\a×OÈêÿÌ¬¬z3<ÃÑà,Í
+«vl¾NÌóXòÇ¦
+\OÎËææG®¨Ná
+dë$ÑÅÜ-ÌêÚ~øCáÙ3x
+ ë¶+CÝ+2ËÌ|Tr)1[®1ÃnÔâê2(@SR ñbB9:1	dÕ}´ìí2PA`#ËäGü·ê©ÇÇ$ç(zHHþ éôfw5.ÁGÛ}PLHZ
+/Æ
+ñQ÷:"ßÖQ¡ä
+-É#LÁö
+->á\óâ[|ÎÊT¡ÉJÅO¥}bÝÞ
+8
+-àþd±w<#¡³ëób.³è|lb¡~ÎÌÎP`)'« 0qlÍ_õuFhÀ;Z1NÄsÏ¸;mÅÿæyá× éAâaQNQ5TE'lJP3«V6hj6S2X
+>PÃHñü©«ûiiM	k¿ùhj
+ÏÉT*,±}üºËÝkà	AÇ·ËÆ
+-¸-%ª
+.n1BHÄ
+
+ï5f
+(7µ,&¨Q·W+(rZB7'Ö\Zâ û±;v¥d×J©IAÀ·ÐKÍÒi*8PÁÚ
+ OpvoèV-¿¢±¼¯{Mq
+-ãN>nEà+äö,b6p#/M ÇªÌUÍìÒ¥l"#«ø^
+²¼] ÄOIºéëUN5ÖÉmZT}-@
+-"@HïxÍ´®âBèDG !ÃÐÔ)yQYÚ¸E~ÃU¨ÆîÌÞ#ÚU­Ô@ó^¿õâ´v
+pAIù¥>GD7)U­ßUbÁ¶ý0Q~VÙ²Yf9#-Ï#iÎT{_oÝ «­rÇµÊY´µÝNv­-#ø,Y
+­^Ø	B|vªE TC"Uß¶»F7£Å>½QU\Ç[tKºj?½ÐÆVäèØàßE£ Ñ¥rH]×Õt,iØÔ¶SSîLìTÍúO]ti
+HdÒÚ8ó>Ý:PÓÀ°I`ì-ÊxÇYÏåàbÛõõ"ªB·éÛM3aªÂ#¿Mí¤vÈª®Û³Êæ-¦|¿Z=kBÇÊtÇjïCY÷<
+¬ÀLe0s±Àüóçï¡K	©*¯nÌêòRpWßV@/¢ÚYJOz
+--ßÎ§-©UB'æ3d
+Oò
+-Z4sÛàsy¤ßûiqCè9s£ïE££O¼GK³¨ÅØcB 2Q 6C»¬È¶¦âÙÖ6Ô6Oº{ÁµDõ
+-A\=i/)á/Éó¨!
+-AÎ¯Fèça1YÎE	ThÁ
+&¯îî±Ã:
+-­iÿã$x5ùZçoÝ0Þ-©¥Èx{0,Hklyk6ìá
+kÄô÷æÑnÄB±´:È¡nEdOx$\º\Õs"u¾ïømÙ=H4¨>ê +³e§¾ØÀ?kÐSc|q»öç&Æó¬XJõ8B)
+g×ÊdÀ
+;èvÑ%LôL H\HË²2<IsI¨>¨ÄóüRÖfBæÏ
+j©
+í	,)ð¨A'Ök % ôgÊBÚTQ2s,G×öÚ­ýQ°ê°dÌÌb*àÞº#ýâ¸Cfý¹lc­»µ®è.©.U6³Oï§±êPõiE0×:T¿yËµmÛ§k1N(Ä	lÑ©	Àeb 
+ë¬Õ¼mª¡­ùØ,õclAùIÄ
+/(­dì­.s2é­º$yc¢Ý3æÛoùÝÜ%4
+ÊêÚ°gQþ¨HtÉft¸gÒ«×
+AþH
+-
+|sFÖBF¼¥ÛÜ
+zSTÐÚQ«,öhj½Ý
+´[J_x0j°Nì{õ®­¦ÔEflrp±K`ªU:àú%?aÊÍ ¡I¿@×Õ·¤ mñ£e~r]Ô£íô¦¯¶Ä#²]ó»4Ì"¶1S¡
+u?6¿°M#Xñ{[oÀ0g
+-Lõ;ô	Úù­R	ÔÇXZ$Û¢F0ÛQï.ßÃZà<YsÍõlñ¢Ý îG!²yosÛÀ
+(.Ý©Êº
+le6eÄ¡¶É´<bòßéU£öl7ù
+-M'áðúa,JhAO!Âh:öµ$´E¼)Æ|æ²Dï?otÌ§Q;/"#<ÇÕ%(²zzéìo_mRÕgSÜ¨ÉF
+g<ÝWNHÎ$´?¤Ì
+41CYî¶ü6!Lhµ2Ú4³¥/¯òÇ\KýpÂ+j=c2Ïô¶6
+ô)PzÞìÙzÃÜ¤yj}0bñPVWB	ÿÿØþ{¬à7Y.©]¯«¬²æ/f»Ý·xò^Â" æ7mÜ0÷ ç¡íbG/·	¦mv©8,òíBèÎ^Ôð;¿.>[-«|I)VìgúT5HÕì?¦
+Ä{ÐÜS3ïÖ½äºÝh¯Ê;038¤O@qà¬µM
+¬W­TÎ
+-!Ôl®ÑN4
+0;Ðrødgjª¦Æ­ïÿûæÑxhCÔfoâÞn´áNJØ!+æÓ°(;maÈj´Y ôr c¨ÿÁ)ÄKM?XùÙîZl\
+-Áv¥E
+>¬Z]èa£JÉÄæ¯Tû¹ >½Íìy¤wåfw"Zh=´<Ô¤ÀcWfÐF>ÙdéyNwã-
+üËàèfdrf
+-
+·o÷ÛîýojKbql¹QìÄéÅB3cS¾§ç*¡$ÏM½9Û]¿ú¸ÔðÔóÝÙ"de¼$t!°æý	µÛä6S¢5o¦C?[q¢?é
+c×Ò×ÝÔÜQµ
+:- ¢±Ït½©ý±lHfç
+l¥ÖÙJÜû6
+¿eûPÛº	|XL;Ýù³èIÒä¡;¤ß=L	,FôüzvñöìõWÑ³ùj-×·£¿3={ÒD¢6¯eZäXYrÁ4òÈ)´R«´?Oejv°ïêlÑÞï`ÈÓ¶°UùY»]Ö°³g
+-]ù|%??;ív
+²ª,lÜ¬DSP>lÚâKÛ÷ôêLü þã¡lÐ^à^å¡»ÀÛ;
+-o/T$~äÅ»7ïwK8âa:Ò=ÔãdZ Àîú¹Acbà-:Gr.x»F&æ3íSYujïTOJ
+f¢ÜêþË_ÊÊQàkENßS¨³ÏZîX;Î1g·~<ÙÎ+Áàäe¶#v kÚ's
+¡êµÊåäP¡eOã^À¸äùÒÉ6¸nëxwåq¾Ún,~<é P?Fµ§è'lZ¨åùá¾ûxºRKò:ME=IÓïQªÕ>½<Ð"èCí«woÿ~vñËÙÛWºíFB<]
+X, ñ=,.ÎüæÝÏËÙV¸Ey©ãI]Jº&Xr-8lD½·È¾âÃ8s
+®åÆ«úÙ¸Ìz}Xé(ÊNð.l,¤âÀ'b!DvE1éQ0+ë^<:ÞÅUxì~~õÕÙT¿ÎM&¡Ølµ`ÆÎì.Aîxº§çæ0­©ô0¥.#eIïPï1Ö:¿
+=ÖÊÐ~1'¾Ú÷÷¨650`?Ö\Ð»KÖ­ºÕ1´Þ
+©+Æî4a½@8QF7ùËAsëÉ*uyrdämªä1llÈ)þaõ_Ä^(endstream
+-endobj
+-585 0 obj
+-3870
+-endobj
+-591 0 obj
+-<</Length 592 0 R/Filter /FlateDecode>>
+-stream
+-x½Z[wÛ6Þg5?BÊ96ÍûåÑqÝÄm'¶=»Ê>Ð$a
+¤b»ýó0À`HÊNº{ÖÝÓ®L¸
+¾ùæ¾Ì]Çóç®üùQT3wþZü»}¥N ÿQ/èï¢¿ZÎÎn|7_úá|¹yêÍ©7ÏÜyâfNÎÕlñöüýÅ?¯?½\þ{v¹}}0Ði8÷</sl
+e^êørèWW³³«wó¾=°ÙÙosovöFþçÕ
+ñW?Îÿ6»¼üogæùtv®OÌ¢gX:Á`bn./®>]]¿ó;»ñü(ö
+9Ïåz¶XÊð÷jÑ¼<õ×u]þò_ËgböY¬cÓ¾j¹Ï
+v"þ
+-å_ê³0c>¦i×¦]{¨ÍPýÎöÅJVôü+íÒØd<O¶iÚ~×l:/ùïyÏìRåFqÞòS9éÓ õ
+7V UojùÜ3vè;õgààpÍFtËnßæuñ{Ó©Î£ÄAðÚ´èx½-ùkß²w0/õàóB}+ö óp²ÌIµ
+÷-
+?Õ/cÇÿüÒtëOýÀ«ñB'MUËWG±yb0âøy°èùN:âÅõû_/o^_¾¿¸<î,Îò\L#Ç
+-é
+ß]ÿx9ÙÀuB³
+7¹@i+üVÃf8ò3»_kÖ³¶âµÀòØ:PÑ êÛúÔµ[VLP\Üæ
+[ËgAèD¦é
+õåj:±
+!Å	2ÿ@XîÄÅX¡rFÖñõ!/OÌðbá4Â]yqd½Xý¬ãî6¼3¸7¿åÒEH6c>Ñ×Î¼ÖNÔ¡¬?íM©ôéñ¨À&ê}Þö\3zÀÁOOm¢u
+¦æ"úØaS~[¨¿\ZøKq£ºðÉÌ&}¼:æ¢Ø²°ÎÅõùÍ§G|Àå~>O$SÅ
+Á~yûH sgW¨vÕÎëÕõryýnâ¡ï$HÖW¸ÃÚ?Äð³8=/ø±ã
+e
+VÊ¿R#ÖÂxGðWÒ½ÍËMÓ
+_äq@»GNp<|Ê@
+ÎDC:ª5(üúØà·hò¶c]¯éÀ¬}Ûæû¢ÀÁX'ÂD#Â,ßFÑñ`$ì!»°3zw¾¼xóÒ5Û»aü,òÕbW¾Ôòfûßv¬
+1îj±×;ÆZ±íd¹±k¡»`_h
+Ô
+-®X[Z4ÉÆ1nZ^ÍÄïºqÔx èÄ,_Çv
+{ø
+Bk%9VÓt©À·­;M] kóRGWn±Ýè5ÿµÚ\%DEÏuó Êïy8«¼WóI`Øi
+úUrå¶iy¿«-b×F<R-SãïwÎ§hºþìz\½¢éa¨
+-Û|Í:X¾hS!ùñ¦(§ó7WËËåßÕê}Ëc7S {	QÍK /%®ye ,$t
+PíáµëìÎ|D9O½Sð¡M¿½Ãa@;ø
+Gk5rß
+¥þô9
+-Ú&Yóq¥ÂæÒDU+`Ä$y°
+\
+nÍoÔÐoL6oÔãjQ±nGAYÐa"O^¨2ßÆd4G³ !
+Í^}
+*É#Y@
+þ|wþËq
+ÅJÂÐ÷'
+-È$#A¬®wýíõòÓxc#×Ïm¾5Ö»ãei úFÐ/ýÌC!
+GõÌæ;ÀhF°¼@.RÝJf~z8ÀY`3É&¨XïB(Î{3·¼Åü5ßïÛf/³NÀh81UÝdd8ñUÉAtæQÐ-Z*kfµf`3TÑ Ú·üþ'[2Ë+zëf ¢D
+-#K
+sì`BZþo|
+yè»ÄÑº¹üÂ½äy´ªF¸°$×7çÞ<ðÅÕbÕÇc¹y+±ÅP.¶ôèÆ`w±Ëf*IæºiJNKwuI®ÝÑ+×ì
+Ã°IL?ÊoáûmQüwÌ	Éµ­I00oZf²Ûa%d¥¥8ÈçoyæoÐÄ©#;x'ào!õvèSq)&1ZL
+b1Ä,þj¦Ñ#È^à§²$²¡À¬3LõuZÜøC3x½?ôZ+ùµî*°ÛÑëv¡­®I÷3]­Û+F'ÚY1÷½í8¬XÁr7±ÞtTÔ
+-ÚeÛ(_;
+-%TMj.Àë#¹ßzdv&zX
+¯ÙV@ðd²=ÂÑpý0% 1
+S[.X9`÷JkÇÂº´dVe*ÐA EK
+-Ý¾eùzR
+* #s`¡mf}SBô²g[L­g
+-Q¡¯m7ãXºÒû©]èEÉ
+(
+
+¥>V1^6ó]Ièð®2ÑÕùmI
+-8:«uQHÿZó®8t²Úf^ÕGWVïg«
+ (×f
+-¿Wd6þ¶
+©Sù²t£§@ð1S}@U«-`# ÞíiÇk3
+ë{¡Oª{Ýï
+-
+ÞÚÊòªçCëÄj¢mÁ6êÃÃ	óZ;° ¡÷ªiQWóºÉpaÀHJÑOC¼¯Jâ¨Ù²û¼Ð>ÁãVnLl½e	Iæú\eÚ¿³¶1¿Awú>ÉÖ×rj@qGÑ·kaq¨a¦¾ÔoÄ*ÒLàäDÄ E~è´v
+Ø(·#§Ø
+-
+ãß./{0ñi¢ægÑ¼ç
+@ÿ	Ú¾7å´;Ì"r±Øír´Ò Ã3¤¢Ì[þB¡1°ÛÛYï$>ÖÆÔõêäD2er,B¸bz¾^«Õª
+2·¼èH]o¬æWLW}¤«*/·h Ë;P­´aAØßVÚNÖ-Çøú
+-Zól
+-å¬V
+$ËX.Õ<ËjÞ£¬FÊ²7
+-CÌ¹ÿ[ðÈÊ°¾Êîy×C
+ðÅ	8d!Úê@¥MÄôkSBèö
+-pPâilãï½¨u!7PÖM;¹ºçÚ <È,R) ÂÏìÂ Þ9Ö¨öùDÈÝ
+-QÅ¢ @ú>
+Ê,Î»oë
+-qTBW(
+!-÷ùãÛ]Ý
+êrjBôÈÖt ö&ëDþWôÑìî8À ¡Òµ#ß=ÉMµQ¥4Z Æ
+n%,
+-jÇExâ,oh
+â«µ¼ 4$&­ªTN÷F28
+&=áKöÔß4
+-´D>Rî	Ð,:
+-(¹©P!JòI`f>JÞÛ
+Mt£±ö
+-À(&$`)Éî$ÞD±°¼ã j¬ýõBj öìþaí~LÀrl¬CòTrr´vÇP¯c2-«ÊÁiÄ°}9èXª+ã×®NØºÑ#Bzx¢GÏwßH$Â^¬Ðäõ±È¾K.¡h½øÄ«îÌËáyÏ±l­?ÎV:iGiõQåcÍÀ\!	iñ/JÇ'TÌj¤r Fdû1ÉÀÑ¡UrÄºíÄI<ÐªPIÒÄÕD;ïù¤VUn*^âÝ²8Xê¤r$
+-Èé»ÕSÅÚ¢#¡yåXÐ:¦"
+pOüÄÊÇþj>±ÕGH¨Ú0f¢¥;¬=Ð@À
+KRÔ;antTä
+©½éJÇpRÚÎÇîÿu
+:f½äðÑ#d95Q¶:½¿ªlÎnl}* 4
+B­ÖLZ¢Þhªö¬»W1LÚ×%7n=ÙKéÆöí	õÐ×­åhD aFÀrè4Á»ÃÍ´Â:F5»VBÚ	k!¾òõäÞÃp?Oá4!½¡ÂkÈÎDµ}qJ¨ñ
+8nQ
+Ö&3"Ì²m}ªeU3G#,ª
+y´¸U©MfvÍÍ
+xÒYK
+Z¬ãu }Ei²b_)Z¥
+-
+-mK
+È<)ýfC(åèÊ³-÷"©JrÈmÒ/¦pbú:SD4ê ^ÅH· fI
+hÚÊÐ"MÕ¾ïðvZPDKÝ*
+Þ<À¨4k
+
+:
+ß÷Ø
+*Ã2êÈIRþUcmuB
+Úá¸ }5¸³iô/¹¦7â7Õ´ø
+åyDÃÄüÄµïÍbÞå}ßN¥©
+àÕù6Ôö6ÎbMb£Oecâ»ßQÖH¨
+"-ÀiËû^'&"ÍL»u
+bDãçfE×¼Ä[ÌjsLWdira
+BzÜ-Câùò]};{v³»fW6H!d×Ï»
+/L
+fê§]vµÛ{}ÎkzW¢d úb<*¨u¼Ä ÚçH@BQ§*°ÊÖãQÝÉº¹0Jê¤öÖ>JHu~iÞì5ÈÅþp[òB'öx¡©r3T~
+Éñ£½J4N¨J[iU-_2Âý<×J Æ¼Ö
+DÙ
+ªæ`{Øô{=ùl¤©Á
+m
+ÑÐ¹g
+cßîÂ	^O¢bØß
+({4w>6?Û<åÌ Ü9
+tºó¶2
+ÌìL8ñ£Ñ	Úa!f5ðv-O1))$ILÁTö¡*Çã«3õ
+jøÙåN*èc7Â¤I¢ºëÕ
+±¿(ÆQ+Éµ_&Ã$côr.¹MaØPN"ml#MèËÅ©ËgÁ+jendstream
+-endobj
+-592 0 obj
+-3742
+-endobj
+-596 0 obj
+-<</Length 597 0 R/Filter /FlateDecode>>
+-stream
+-x½[KsÛÈÎYµßÀÛÒU"7£,É¶¼W+1ÞJi÷ #1
+4
+rýùÌ«{CPRrØÝÚ î¯»¿î
+}¹çÏ\ñ/üÈ«#wöÿ·9ú~´tñ|@çÕìÝêèíµðýp¶º?òä
+7KÝYâ¦N¼­ª£ÛyÞ¼Yx®ëÎ×¬sÞü¹út,
+/æcWë£ùÅýÕ¿<_L¢î<ð¸äãØYª·ónèvzB÷r¾¼ÝoN¼â¯ßW$rbú	Ïu¢f½)åü{ðhÞ·FNiÔ¢'õñ³jë,q¥dãrV?/àÐ
+çY
+¡~DlMû­¨7âf;	¬âGÑoåM×ÜÌÅÈqañ[[ßû¦ÅÐyÄ½Eè»3.7
+q{àúãwß^§jÝ÷ø¦¸°ùôbÈInú[ÝXÿ(ÙzÃ*VK!¸
+¦§ Zü.§öÌN}#ÛíZY/DK£Å¬,åà%E²oö7uÇõ÷Å 6fZFp}ÏØú.»
+-%J¸Úµ5.ä¡X³µ|+@ÝIAX°¡!/kxbY[¬å 
+-ªµ
+¿ÄG¤þ%¶¥ *Ãóü¥ÏÕubl(u^k¼¼ã{Éú¶È-ËºåûÕ«9-øêX
+\g%.é¬`ßª¬>±²ö}du]lÄCñÁ
+H(!ænç7yÓ÷8zès90
+Ö°-ê®©ñËïOu·Y7EùUÍÐâ7={Pòá&
+á¼FeQíúÆlàºAÑµÅrTËîx,@»&³lÍ=Êg³ÍäØ A¡0bQf;il°0?_k4ÇëF¬Oc¹9U~j¶µàqÏ
+¼ÍÖÅ½ËZ©!yqSI¯ë¾ÏX	Ï¾ª]F	úF¾Ëµë:­0|Î@4«×{!áJì#ñÑKÔ/Þä¿õ
+-ê 22[i{Ð²rÓ´|wU§ýz®ðUÒN¹ÁÔÚá zq#$;ã¶­wV(1ej^=Ýfy³çïBæÛläL
+hÌ[I`?1õ]né.l³¨ÿàA¬Îãá¦¢ö<4ÔÖ¡bm3Hq
+	ñ.7¥s îMøP.F­¸icW¬¬ÀXgíúP
+k_m3
+
+-úæïâXnRB^ÜK1RÜÎ?%±a5y¢ª'Þf?«:-êµ[é¯¶EY»M
+-}LLð¤ý|â$1uôÔßH£;)Ù¿WÚ3§â
+ý1nú¬Æ/}lÚÒMQ©y"e¼:
+xÆI ¯Ô³xÀ¡*¸èÛXù
+Ër\hÍY­C b
+-Ü¤ox
+ÿ ñ
+t§
+Ç®`¼¥0ge³Ó"ôQ=·ó
+ÈCä¾AzhB¯0HeÒ<D §;°¦íÙÚU¶½é°-=KÖ~²Ûñ.å2ã£ª¬/ò¬{7y!,»ÓásiÉ3MUµá`ÿpn¤´y`±]ÖöZÜ£{#'gT>Á~Ïk
+bÀv+?£~ý{Î4óYZLàÅÌ¶uÍJÖ*È¤fe[Çb²*ï3g9øzpñoíB{7î¬Oß7m¥ü+ELÖëe7ÜLon~á:mêLRÔp)B½þìçìáõ0
+åª¸
+n÷Ù|«#ÞPYÏ³ÌäÙTX
+-Sã7ù4ËH1Òò%fCy
+JÜãIVoP(÷A@ö0Ôk&#Î®]ëÛ,ïµ÷Fÿ°É,¿Dù
+-¡"gç=£	z§n¸Hâ³÷®,Sý®bi`¤19ö;Æ%
+p;dÛ
+çªÚrb¢¾½ôFüN
+ZØ:ç:·õØ­V ÷ÆëÜ©ÙéSÃ
+-%rÄq6í ÛÑÎ×#¥)ÚÄÏß_9=¿K÷É¸©ßz*!ÅB'
+RíqB$sÀçkî D (cÎQ°X§Ç=8âèX-#t³ô×0ç}&C°Lª¡ì=È )ï(rÉê^JÄ'ý«ÕE×()¢é¢ó¡íSv»½JõÊ<ï[í
+sÈpMw"=Òq/TDNCáÒ #Óà>BÿÔ+ðp'PÑóéQÎ°µI5ó="w­ÍMæÍ
+a§íèjDò0a+PÊW-MîÀô1O ¼8¹Û§M}ïÀ
+:óCì.+K©U{fNoÈ
+TJ¢
+²Ò
+"xï1ß¾ø)IOj7ô|2±VÄÐKÓ@\øRJ;ÄtâyO	wÜê»
+:PÝúÏ°
+;úqVMMH#Í¸¢S4¡OM­¹ÈX-dø¤QÒrÛ²¡-:Îv&ÀÖê(x:C®4 WõWÒ¦¬-'¦	gÖZA%
+-È¾ïydáaø?Êr'\
+KÝ êéeü)X>Ã`}C<
+-ýCXdºì²_ô<ü
+-¿ÀÀOþ
+Ãè)ä¿&¥ÌÖÁ
+ø;±IÝ9Ü@Wv6Ô¥dWüA.èX~þ»ºC8Î/¬­yüSIÊX©MAÖ¤q'YaJ¸kmÆ¬à.·\³íª×CkÓbðÃ%p3ÈwefveÄÁ(^ÃæºK.kõ8¤ëë§ÜZOÊ!©Â¡9_?ß\èü-5 çD
+f>ýçvãß¹8??0ªÕÐfY×ët§'gÇä÷"?8NÑo,¤J³Jý§Ü¤çÊÆ¸çÛð¨ÂP³]{_p_+ÊO¸=¢50ÔâÚFþþlÐÊ0sòÇMfáÿË¢fvâ$±~^TldoÆ_sð)°r
+-$ïÑ
+Gó kC~bÄõ?tÊ¶bY¾ÖÈÚYFdcB#ÞØ:èuh5¬@£PÑEÖ|ódè
+-hµ"'Ç²xì¥?²½$zòÆb¢ ¨]fô÷½Ä ü¾`ëR'0?#
+-¬Ã$V!AçPnØ­)
+n
+-d(ª¼;Òc]Ûý+ÎWûâ¡è±ìoúµÖÈ5´3Ûm'ÈÝ¶Ou¨ÂâXnç'ómÓ¦UèS\LÇÖ
+(« >9è&üz$Øó jTº|
+-Üb],È ¸X*î|uôÛÑ÷ªë"¥<ÏNÒ`æ/9_ðEËõÝÅÑÛËè6
+½ý}æ
+½ý(þçÝÕ)ÿ¿³ÙßÎ/f¿½¦#;ÕõDÐâ@ä¢+;äÈ ó&!S^â
+Y+õj%1¬Ø°úS!mQN ºýñµ
+mÐí|ÃëÉX÷XUL6¢ô[jKÉ5º©³¤>ÅúzsWÖÔ1ÙKF¾ÏhqL
+¤Ê)-E[W+\×G¨/mÚÇ	,Ó j¢92aøõ`)ÌÑÌÂaì¥Oq@@ä¡ïÄäõèCÖ²G,J
+a«Úuy.É&LvþÙää}«Øã¤KKIï{2«0
+Ö¦Â~^'ðâ'¶Ç¢×0âËÕ"r¬£y{`4 0°¨fC_´ÎuÇÏÉ?d«-kZ
+_²1'AÇé;Ö·$O>O}tú!KÚu-_RõåCSwoH @TmÔ'iFfö¹ú«)>î=§iÄdk¾´iÓ½Ñg<H¦fr®j³óuq ÙèiÌ$ÀaãÝ·B^Êgÿ¨[ÜvEo½G]yILêt+ZÌ]~q\ ¸<#©Ù2Rkú¥UÅ\y|ÌªªQdÕâÉ³	I¨¹Vv;ÍíBxÄíÐ:jA³¡qê³iµ.BÊ§Úu
+ØUç¤
+´RUÍÁ}z9NêTñL%CL¥C££$SK6öÉijn O»Úé #ê XÛrj }Íê®ceÆ°:¢{$4åc¯ÎýsL·ómmBéWHÑóEâÄgl×£ËH
+X'´<Ohò4/%I:c(xäl÷Ë?iyjê"Pä¹H¦wd£±¬^sºð­kðÈ Ô³Rãè!#ëÿÌÅ;eAô¬	Ð²Öj
+mQò×E4ô7 :qªçg<Ö³5Ã ú <
+¡'ãNU ¼h'k®BÃÒ?Ã¯7'_ÎÒà	<<<8ô Eß£[ EèhéëÉF~vRÞ
+-ßÖòÿp½_LóWNIg6¦@S<ïÎÍ,ÿ/äÜ¾'[¢H÷tÖu;G%ËDY:Óyâ2Ó5
+S³D«
+4Û~u+@
+-¼TñG`ú;¾Õ9)xs¾UsÄ¤
+<a>U«7µÒàPZ¾_«?T
+µzÃVLÔZH5Àe >Y-
+-èa§×K53os<
+g|nçP-?§4ÂïÊ¢Ý	íñ_v/õA;AÃà½1à	<x>>\P=xyî+ÚÙÁÝnlÉIð,¼¦Àãª,UñÑ
+4¤ø<»Ðóèì`³Î^{l_Jp²*Aõ'ïÎQªáà
+^
+ODnò\rÚ/a3äÑù/Äf,	ë!Olq²Q7
+«[³
+¬Pí$UáC¥J8
+oE_,
+©ÐòfÔfä>íÒùÍ`Näà¸àÍÓHåç)97n[ìé¥ÉîÙ]¤ü«^B`8äà÷tõ¿[©m{lHá¦ÈZ¬ÜË
+
+7U· $í!ÌPqp!\ïUù
+<Ö©[>SÒÇ/}
++
+ÎÇ\Jc#£+}¶»¤Ç¨¶:(+á"×YéUâUÉ}íä%+EéÖÚÚÝ£Õ:ý9®ÈÒ/æ+¬	1øj³ýVQqmT%nq{$ûûvçÓT9T)_>ÿ¨N«$ä~Ø&¸:àâ>v=«ðJ¼Ã|üS¦Û©=1¨ÃîÐÄØõ]ÁáÀtø@
+¤2QDO5Fç÷²¸cT»~¿
+EMºÊÄBs[`moÎªâa~Î×Ì®LÓFßi¦* ¶àr¯k
+¨gÎæ/"tº
+vSÇjäÛ7<2âØTLø.DÊ£âL¾	v
+,§2/sú¹aXÍQ]zúd*óõÂÑé
+-/~Aíöºå¿èÖ
+©á?îð¯¤pµ÷ò±ýøðC~*5eUÁ8YUcA
+D'¤t
+Õîz))Ãé4Ï|ãû) 
+QV¹÷¢ª÷-I{YQ³;ZÉ;9ªh[hM
+8r2ß³RØü
+J%.ªÿ/ÂßlEF;3±$ÓéüjtGï_¯¯awiôä:â'æÐ­,V®Æ»u¸V2÷Þßô]5w4M©È¤N¦,L|
+Ð}´4!bø
+-×J·M]TNáÃRY»*~A{ü4Ôhtx8íI%>HZ;ú/ùendstream
+-endobj
+-597 0 obj
+-4343
+-endobj
+-683 0 obj
+-<</Length 684 0 R/Filter /FlateDecode>>
+-stream
+-xYKsÛ8¾»¦ö7ø¨TÙ\|ÏÍ½½£µ´g4
+HØP¤ñøÏoãÕ )Ú]®"A tÝýuûÛyz
+Ê_ûPíÏÂó_ào{öí,"ù£>øÏÕþüíúì÷d°Æçë/gD}¹$ç
+-Òø<
+ ÍÏ×û³ÅÉþx³þÌOå&f>%AÂõæìañ6xsIâ0
+høvW60È²ÙØÇU`nyóæõÇé@&ì©d..ôqá÷$ÈÌ+ù5
+¨=Ü.Ù?*ÎÞ¾îØ x×óÊ
+Ú¸ðdµRV
+$ö½Òï¡=	¼o!GH
+T ³ò¿´·R;Ñ,Èc;­=ïyÛðf
+³¨µÕJ2Tç¢<ì:}ûv
+-wÝ
+»ú-«kû¼zêz¶WÒ.£8	Òs0·ÂÒ Æ
+©æ
+k×ðª¬í¹?¶hÊúÂ¾ÓÂ÷÷)²ð÷7¸ýá§yÂ,Ðû'4¨Ýÿä¯hq(Ê3ë[VKàHÅRQ
+¢4°Wyk¢¨÷¬Ù^}íÚæX©gÆ¥A1°
+U %là°
+¨S¤Rb*ÕÑõÃæIé"Ê'ö:.E[<ÀÄRÃS-«[½Æc¹1h³{?NðXª*¨©¶êm+x¿ÛÏ)N<ï½°ni¼ò2Êhµù
+KÑÂ
+9¡Bs¯ 0åc¸No¿-§.þ!¾àÒwíþ0ôòè×æK`ûpsssagÞJ|
+=Ù©¤(b\§¨
+Ó>§ybHÓDbqï
+#Äjv9q¨oU IÇ/bõNËPÙ«£½V¥!.:
+-Í
+DÐÒ3PvÐ]µõ cÂj
+AÚw
+R/\uÌ"Ã9~jxÏZÓÔ°
+-<	åãÕ¢æ
+-ÜT
+-·
+´H_1ßR
+yîÚ©çË¨PN©¦Ä®>\ÝYü|DLü{Ø3oWÞ
+äµO*¾%:¾
+¡dÏ)-
+ª¢LZÚ'@eÂTêöB¢f}olOAÕåµ
+bUµzåDS¡3í,@0Õ®w½Þo!¤üÝvÌ`DQ¡&qçüÍAC«§F_T=ÿ®÷ÌÞ¨ý®5¾Þ¶`#þwi;¾¤q
+÷nsWö»@#K]zPqGY]
+(Y½·:«Sà³V'?DRá#¡ÿÒâ{ß#9Zñ}Û\èJ=¡wë&÷B?3t*Ñg{ühVDùM¿cV~]jÑYî9üuÈ°Ä¾æ{Y¸Da$I=ZH¨ì®&`Tðh¶±O<»æ¾]szdWµ$Ñ3ImË1ié)Ó^¡-\²yÙ#
+¬¬÷	qËÛa§ù«¾§X	¥ÙiÞ	T'wPë0Q¥%qGhHÐ`ÌçY!J¬úVtvGøf¾!³±#+§¸ì$Ó×ø<ú_v
+¸B!>I-^ ©q>Ç<fÝ9:eóÏx¥`]4ÅU?ÿ*Ög$@CL¥OÖú+²fÃWMþC/é¶u÷ÕÍÖ°QÂÝö¿Aà`¢FOä±Ù*
+-sÊÅ:îkh¬ÒÝýQjVC?L5ÒùÝÏvL¦S¤¦%èGø2¬Swü'äËK¾ âÒ¦
+:\ºF¢i#ßl=áþÝ&Ç«4Kò96HýM
+SÝ#D'L, ¾ÌÕK4>Å÷Y®µÈöÈ%Tà9v:¯Ö>Î~saEAE²¡éz1Tý`pN
+Åãaµ¿©»IÎ$-Ô6&®r]åxd¢:I*cÕ¬ÆuÂê£çÉâ¾ëLé4QV#ìDg]ãÌÔD²a5Å7	åÆ6¨M.
+Güz¾e­î¡¾ß1I´ôM§Bµ\?ÝBa5´
+{1Q
+Ú(ùÔñÎÖáD}Yî´:RS+Üñêp¨y¥ø.S«òÂÙm¹7»t#Ã#äè)ÚÈ|øMNpèe`ê`$5«¡\sTd¨Xu!üÅYÈV?±
+-¡Qä*¼W
+d¶û¤£53 A­n5Ík0
+eSÞ:(ð
+ªRÙBë>ö\µôö­Ý¬ëA¡n©WPltïYM
+¡[#év ±Ò¡.+S~ íe»íØR¹ª{{ÄµöÕÂk²é0É½ã¢´âI&Ô®ÅFüóü¥Uü
+
+A|GEø¥?Ú¢Âßt	W8ìM+³kÁû.¯ eÇ0µj¼vÀî'eMÛvlFÍÔíöjC
++¶¦6þØwÔ{1éCø½­P®
+5D3G} nuZhÓ¶¶#9¥L±¹£6¥¤jãqpöWÕ>üì:¢
+Ã\«ÂD
+ØGëQâÕÖ'»Í½æÚ5p¤£bEEÌõgûtÏ&¬·ÝºÄL/Lt¾f¸86õ,½£òpè¸°MýAq£ÊÑOP#µ5gb(¤FÝêpDthÀS<iª1J¹Òè
+-ß1]ÖÐåæÂ¬Þòa§ø*
+Gsi(­;Û)Î]7<ù¯È|\¥õ×_y#;¾Ç,j»âUq*^»²÷jªzË
+5C¿$W[uñ£:xi*g+áqâØsS
+j¿þn
+!-®sò2%G4qò\×«Àò7TM6øán=j^h4Ï«/³d¸/a<æ­ñ"øÕÓæ©)÷&!ú*©Ûqã
+»çØ?Ñ>=ýóEMgI°Å<
+V«ö¬ÛÙ?ÆÚ£óTÃ¥v¾¸âÔ/uD
+­÷ÀT´ä¢OFEþuQÿ« óý¯8ÉãÜ0¶\ºC*°È#Å±<ÍÍúì?ðûó+Äwendstream
+-endobj
+-684 0 obj
+-2294
+-endobj
+-4 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 135 0 R
+->>
+-/Contents 5 0 R
+->>
+-endobj
+-136 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /Text]
+-/Font 176 0 R
+->>
+-/Contents 137 0 R
+->>
+-endobj
+-177 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /Text]
+-/Font 182 0 R
+->>
+-/Contents 178 0 R
+->>
+-endobj
+-183 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 234 0 R
+->>
+-/Contents 184 0 R
+->>
+-endobj
+-235 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 273 0 R
+->>
+-/Contents 236 0 R
+->>
+-endobj
+-274 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /Text]
+-/Font 280 0 R
+->>
+-/Contents 275 0 R
+->>
+-endobj
+-281 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 296 0 R
+->>
+-/Contents 282 0 R
+->>
+-endobj
+-297 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 308 0 R
+->>
+-/Contents 298 0 R
+->>
+-endobj
+-309 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 328 0 R
+->>
+-/Contents 310 0 R
+->>
+-endobj
+-329 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 344 0 R
+->>
+-/Contents 330 0 R
+->>
+-endobj
+-345 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /Text]
+-/Font 348 0 R
+->>
+-/Contents 346 0 R
+->>
+-endobj
+-349 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /Text]
+-/Font 355 0 R
+->>
+-/Contents 350 0 R
+->>
+-endobj
+-356 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 368 0 R
+->>
+-/Contents 357 0 R
+->>
+-endobj
+-369 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /Text]
+-/Font 374 0 R
+->>
+-/Contents 370 0 R
+->>
+-endobj
+-375 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /Text]
+-/Font 381 0 R
+->>
+-/Contents 376 0 R
+->>
+-endobj
+-382 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 412 0 R
+->>
+-/Contents 383 0 R
+->>
+-endobj
+-413 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 417 0 R
+->>
+-/Contents 414 0 R
+->>
+-endobj
+-418 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 425 0 R
+->>
+-/Contents 419 0 R
+->>
+-endobj
+-426 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 431 0 R
+->>
+-/Contents 427 0 R
+->>
+-endobj
+-432 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /Text]
+-/Font 440 0 R
+->>
+-/Contents 433 0 R
+->>
+-endobj
+-441 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 464 0 R
+->>
+-/Contents 442 0 R
+->>
+-endobj
+-465 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 468 0 R
+->>
+-/Contents 466 0 R
+->>
+-endobj
+-469 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 478 0 R
+->>
+-/Contents 470 0 R
+->>
+-endobj
+-479 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 486 0 R
+->>
+-/Contents 480 0 R
+->>
+-endobj
+-487 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 490 0 R
+->>
+-/Contents 488 0 R
+->>
+-endobj
+-491 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 497 0 R
+->>
+-/Contents 492 0 R
+->>
+-endobj
+-498 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 501 0 R
+->>
+-/Contents 499 0 R
+->>
+-endobj
+-502 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 515 0 R
+->>
+-/Contents 503 0 R
+->>
+-endobj
+-516 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 519 0 R
+->>
+-/Contents 517 0 R
+->>
+-endobj
+-520 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 524 0 R
+->>
+-/Contents 521 0 R
+->>
+-endobj
+-525 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 528 0 R
+->>
+-/Contents 526 0 R
+->>
+-endobj
+-529 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 533 0 R
+->>
+-/Contents 530 0 R
+->>
+-endobj
+-534 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 537 0 R
+->>
+-/Contents 535 0 R
+->>
+-endobj
+-538 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 542 0 R
+->>
+-/Contents 539 0 R
+->>
+-endobj
+-543 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 548 0 R
+->>
+-/Contents 544 0 R
+->>
+-endobj
+-549 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 552 0 R
+->>
+-/Contents 550 0 R
+->>
+-endobj
+-553 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 562 0 R
+->>
+-/Contents 554 0 R
+->>
+-endobj
+-563 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 571 0 R
+->>
+-/Contents 564 0 R
+->>
+-endobj
+-572 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 575 0 R
+->>
+-/Contents 573 0 R
+->>
+-endobj
+-576 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 582 0 R
+->>
+-/Contents 577 0 R
+->>
+-endobj
+-583 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 589 0 R
+->>
+-/Contents 584 0 R
+->>
+-endobj
+-590 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 594 0 R
+->>
+-/Contents 591 0 R
+->>
+-endobj
+-595 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /ImageB /Text]
+-/Font 681 0 R
+->>
+-/Contents 596 0 R
+->>
+-endobj
+-682 0 obj
+-<</Type/Page/MediaBox [0 0 612 792]
+-/Rotate 0/Parent 3 0 R
+-/Resources<</ProcSet[/PDF /Text]
+-/Font 689 0 R
+->>
+-/Contents 683 0 R
+->>
+-endobj
+-3 0 obj
+-<< /Type /Pages /Kids [
+-4 0 R
+-136 0 R
+-177 0 R
+-183 0 R
+-235 0 R
+-274 0 R
+-281 0 R
+-297 0 R
+-309 0 R
+-329 0 R
+-345 0 R
+-349 0 R
+-356 0 R
+-369 0 R
+-375 0 R
+-382 0 R
+-413 0 R
+-418 0 R
+-426 0 R
+-432 0 R
+-441 0 R
+-465 0 R
+-469 0 R
+-479 0 R
+-487 0 R
+-491 0 R
+-498 0 R
+-502 0 R
+-516 0 R
+-520 0 R
+-525 0 R
+-529 0 R
+-534 0 R
+-538 0 R
+-543 0 R
+-549 0 R
+-553 0 R
+-563 0 R
+-572 0 R
+-576 0 R
+-583 0 R
+-590 0 R
+-595 0 R
+-682 0 R
+-] /Count 44
+->>
+-endobj
+-1 0 obj
+-<</Type /Catalog /Pages 3 0 R
+-/Metadata 719 0 R
+->>
+-endobj
+-135 0 obj
+-<</R66
+-66 0 R/R43
+-43 0 R/R17
+-17 0 R/R117
+-117 0 R/R108
+-108 0 R/R95
+-95 0 R/R81
+-81 0 R>>
+-endobj
+-176 0 obj
+-<</R17
+-17 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-182 0 obj
+-<</R17
+-17 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-234 0 obj
+-<</R17
+-17 0 R/R219
+-219 0 R/R213
+-213 0 R/R209
+-209 0 R/R191
+-191 0 R/R188
+-188 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-273 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R191
+-191 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-280 0 obj
+-<</R17
+-17 0 R/R191
+-191 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-296 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R191
+-191 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-308 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R219
+-219 0 R/R213
+-213 0 R/R191
+-191 0 R/R188
+-188 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-328 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R213
+-213 0 R/R188
+-188 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-344 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R213
+-213 0 R/R191
+-191 0 R/R188
+-188 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-348 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-355 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-368 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R191
+-191 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-374 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R117
+-117 0 R>>
+-endobj
+-381 0 obj
+-<</R17
+-17 0 R/R191
+-191 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-412 0 obj
+-<</R17
+-17 0 R/R403
+-403 0 R/R213
+-213 0 R/R209
+-209 0 R/R191
+-191 0 R/R188
+-188 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-417 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R191
+-191 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-425 0 obj
+-<</R422
+-422 0 R/R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R191
+-191 0 R/R188
+-188 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-431 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R191
+-191 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-440 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R191
+-191 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-464 0 obj
+-<</R17
+-17 0 R/R209
+-209 0 R/R191
+-191 0 R/R188
+-188 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-468 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R191
+-191 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-478 0 obj
+-<</R17
+-17 0 R/R209
+-209 0 R/R191
+-191 0 R/R188
+-188 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-486 0 obj
+-<</R17
+-17 0 R/R213
+-213 0 R/R209
+-209 0 R/R191
+-191 0 R/R188
+-188 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-490 0 obj
+-<</R17
+-17 0 R/R209
+-209 0 R/R191
+-191 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-497 0 obj
+-<</R66
+-66 0 R/R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R191
+-191 0 R/R188
+-188 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-501 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R152
+-152 0 R/R117
+-117 0 R>>
+-endobj
+-515 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R117
+-117 0 R>>
+-endobj
+-519 0 obj
+-<</R17
+-17 0 R/R209
+-209 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-524 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R152
+-152 0 R/R117
+-117 0 R>>
+-endobj
+-528 0 obj
+-<</R17
+-17 0 R/R209
+-209 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-533 0 obj
+-<</R17
+-17 0 R/R209
+-209 0 R/R191
+-191 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-537 0 obj
+-<</R17
+-17 0 R/R209
+-209 0 R/R191
+-191 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-542 0 obj
+-<</R17
+-17 0 R/R209
+-209 0 R/R191
+-191 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-548 0 obj
+-<</R17
+-17 0 R/R209
+-209 0 R/R191
+-191 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-552 0 obj
+-<</R17
+-17 0 R/R209
+-209 0 R/R191
+-191 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-562 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-571 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R191
+-191 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-575 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R191
+-191 0 R/R152
+-152 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-582 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R191
+-191 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-589 0 obj
+-<</R17
+-17 0 R/R209
+-209 0 R/R191
+-191 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-594 0 obj
+-<</R17
+-17 0 R/R270
+-270 0 R/R209
+-209 0 R/R191
+-191 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-681 0 obj
+-<</R612
+-612 0 R/R17
+-17 0 R/R403
+-403 0 R/R117
+-117 0 R/R95
+-95 0 R>>
+-endobj
+-689 0 obj
+-<</R612
+-612 0 R/R403
+-403 0 R/R117
+-117 0 R>>
+-endobj
+-680 0 obj
+-<</Filter/FlateDecode/Length 163>>stream
+-x3´T0P0UÐµP0´T0´PH1ä*T04
+-()ê*èëY*$çr9yré{ú*¦réqé{ Õpé;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.Oµ%y
+¦M)·²ôõéÿ_è*ý²gÅñ¿úÿ¯³ð1(0q¹z*r s{,ñ
+-endstream
+-endobj
+-560 0 obj
+-<</Filter/FlateDecode/Length 133>>stream
+-x32S0P0R°T02V02TH1ä*Ñ@hh¤`¤g¨`	ÄÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+@%\úNÎ
+-@K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[ézrUÄÿ)Fz¾A
+-
+
+
+-\®
+-\ Á£ 
+-endstream
+-endobj
+-512 0 obj
+-<</Filter/FlateDecode/Length 145>>stream
+-x32U0P0TÐ54R06P06WH1ä*T0²(X*ê$
+-õ,s¹<¹ô=}JJS¹ôÃª¸ô=¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o v.}çüÒÜ¼b ;;.Oµ
+3×ê_ºôÿÕEÅ?Ö-`bPàrõTä ^3Ô
+-endstream
+-endobj
+-509 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x32P0P0b###C
+C®BCK(k¬g¨` ÄÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+@%\úNÎ
+-@Ê%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(¨-6³5]6]yÆZ%zo-PÐÈºdÚ¤×'íÊºÕÀÁÐÀåê©È ,ª
+-endstream
+-endobj
+-485 0 obj
+-<</Filter/FlateDecode/Length 110>>stream
+-x32T0P0T04W04Q0²TH1ä*T04
+-
+
+õ@r@"9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË ËÓE!!áÃ?228À@ 
+
+¸\=¹ qê°
+-endstream
+-endobj
+-475 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x31Q0P0bCc
+C®BcK ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢`:r°]ý(øñ>óÿJ³iÛ.WO
+@. 
+-5q
+-endstream
+-endobj
+-472 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x32U0P0a#J1ä*T02P0è* qr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[ý¹iP¬Nfhf6§Þ­ÜÞ×=³/­î¡ã~
+ÁËÕS!
+ à %ó
+-endstream
+-endobj
+-385 0 obj
+-<</Filter/FlateDecode/Length 167>>stream
+-x32S0P0b#c
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[ñUlÎ¬%×$|ô½__úúeß^ýxï÷×;¯_ökÝúû·ÿá!^v±¦+8¸\=¹  ò4Û
+-endstream
+-endobj
+-363 0 obj
+-<</Filter/FlateDecode/Length 173>>stream
+-x32V0 B]C###C
+C®B$jl¨` g¨ k©g©ËåäÉ¥ïé«PRTÊ¥TÄ¥ïTÃ¥ïà¬ ¤\¢
+-¹
+b¹ôÝôÝÜ }o Ñ\úÎù9¥¹yÅ@-vv\.
+-j
+ÏîQpÍPsòÍ~YõWuýÿ_õÿÿMû¿îEßîDmüÇÿêÿYáeuirHS´À&.WO
+@. cL4
+-endstream
+-endobj
+-360 0 obj
+-<</Filter/FlateDecode/Length 155>>stream
+-x3²P0P0aS#C
+C®B#c ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô6nxÑoziÿõÿ/½ööþÿWeÿÿ¯/Uÿ¿~×ñWïÒãL
+
+-\®
+-\ ëm1T
+-endstream
+-endobj
+-278 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x36W0P0TÐ5T06U06QH1ä*Ñ@1ÔÊèY Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEA
+És
+-Á¶Ñõ×gÖßzÿvé8£î%!wýmý.WO
+@. 3j6}
+-endstream
+-endobj
+-254 0 obj
+-<</Filter/FlateDecode/Length 162>>stream
+-x32S0 C#Sc
+C®B$äèqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[ñ!Tl¦iÔaå®âÿÿÿ¶ÿÿûxyëÿÿ½õÿÿÿßÿ~8¶ÈD¥\U[ÀÄ Àåê©È ß;Ñ
+-endstream
+-endobj
+-251 0 obj
+-<</Filter/FlateDecode/Length 143>>stream
+-x32S0P0ac
+C®B#ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢¯¶±áÿÿÿÇÿtÿÿñÿgÖÿÿåÿr
+
+-L\®
+-\ ÿ§+A
+-endstream
+-endobj
+-248 0 obj
+-<</Filter/FlateDecode/Length 167>>stream
+-x36P0P0b#sc
+C®B#°¨±¡%X*$çr9yré{ú*¦réUré{ ré;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.OµÅk´^êíÔiÉ~¯½ºUþê_º¾té¿é×¦{í¿«Ú£SÀÈ Àåê©È ö,0M
+-endstream
+-endobj
+-245 0 obj
+-<</Filter/FlateDecode/Length 141>>stream
+-x32S0P0R0Q02V02SH1ä*T02Eô
+L89ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-j
+¹;ýÿÿÿÿ©ÍõäªH! ë«§B  ò¯&V
+-endstream
+-endobj
+-242 0 obj
+-<</Filter/FlateDecode/Length 139>>stream
+-x32S0P0b##C
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-ö2b
+EYçåýúõ
+-~Ìïe®ºÃàÀÂåê©È ðg*
+-endstream
+-endobj
+-239 0 obj
+-<</Filter/FlateDecode/Length 138>>stream
+-x32S0P0b##C
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-vé÷©Ôÿ_ßv
+;Üûp¾AËÕS!
+ ù
+-+]
+-endstream
+-endobj
+-50 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x32U0P0acC
+C®B#ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ôå
+t,âPó7}Ûú_ÿaàr§ÃF.WO
+@. Ê-~
+-endstream
+-endobj
+-47 0 obj
+-<</Filter/FlateDecode/Length 165>>stream
+-x36V0P0bcCJ1ä*T0²òÁ"Fz
+-@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬ ¤\¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P
+§ÚBÿÖ&³/ù
+
+-¯}ýòëþ/³ÿÿxÿÿÿ«Ù[ïí¿íýwË¶K3tÛvh04pp¹z*r 6Ù
+-endstream
+-endobj
+-44 0 obj
+-<</Filter/FlateDecode/Length 201>>stream
+-x3±P0P0QÐ5T01Q05PH1ä*T01P AS  ¡®¥)$çr9yré{ú*¦réUré{ ré;8+ )hC.X.}7}gg7 7ÀÆFßh<¾s~Nin^1P
+§ÚÇ5Ù
+??db»ÖÄÓ÷EXùOßy/½úõê×ë¯ÿÿJþÿÿ§iÜßúúÚ¿K÷ßzû;3wéCÑ<ªm@¤pÐ
+ÁËÕS!
+ ±C
+-endstream
+-endobj
+-40 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x3±P0P0b3K
+C®B ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶²Þ£À¾µýuÝö×õ?~ÿºÿÿÿ¿íÿQÀO2û°08p¹z*r ^Ö;
+-endstream
+-endobj
+-37 0 obj
+-<</Filter/FlateDecode/Length 159>>stream
+-x36V0P0aKc
+C®B#s ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ÄæyùÁßýûë÷ÿÿÿ}üzïCÜ
+17ÿÁG~
+
+
+-L\®
+-\ 1-
+-endstream
+-endobj
+-34 0 obj
+-<</Filter/FlateDecode/Length 181>>stream
+-x32Q0P0TÐ54T02¡C®B#C ¨±±¡
+HÒ@ÏR!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½Ú¹ôósJsóZìì¸<]Ô
+:ñAÁÑÂM¡Vý¥ü×ýÿÿWýÏÕ»tAù¹óßÿ*¢Íï9/hþrãÿ!ÍKÿ[6
+æÐ1äbP`ârõTä ëî7s
+-endstream
+-endobj
+-31 0 obj
+-<</Filter/FlateDecode/Length 183>>stream
+-x36S0P0RÐ5T06U06QH1ä*T06
+-Dô
+t
+-ô,
+-ÀH!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷Ï¥ïSW
+ÔbgÇåé¢ Ìxrµ
+íáºÃ¿¿ÿþÿÿÿ¯¯¿¾·ìhzv´îþöïï¿ÿÿÿ÷ÿÿ×ïß_.Yä§ìåëpÀ¡ËÕS!
+ u=É
+-endstream
+-endobj
+-28 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x31R0P0b#C
+C®BcK Ì5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jkÛ?p=ÛsgÖá
+µo7rÿÿ
+þøtÈcP`ârõTä GS5ã
+-endstream
+-endobj
+-25 0 obj
+-<</Filter/FlateDecode/Length 141>>stream
+-x32W0P0b#S#C
+C®B# ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jkÛ¶ÄÜuEôíöÿñÿáàÈ¿ é.WO
+@. á.õ
+-endstream
+-endobj
+-22 0 obj
+-<</Filter/FlateDecode/Length 165>>stream
+-x32W0P0b#cS
+C®B#c ß Ä5ÔJéX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[s@ÏÒt÷øYùP<ñùíÚøûûïþí­ÛíÝRøú¦Ìu
+-.WO
+@. &Û5â
+-endstream
+-endobj
+-19 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x3´T0P0bC3#C
+C®BC ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]ÔÖ<ÙÐ=ßÃ&|ÿýdµgÞØ7WÝûûkë¢v¯
+\®
+-\ *
+-endstream
+-endobj
+-15 0 obj
+-<</Filter/FlateDecode/Length 185>>stream
+-x32Q0P0RÐ5T02T06VH1ä*T0´
+-((é*èèY Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAmIÍBq/ù^_Ö7ÿý[þqýë¸
+-M'Ë
+¾ýwÿ»Â_ûWMÓ'¼Ébuê
+L
+
+-\®
+-\ õK8>
+-endstream
+-endobj
+-12 0 obj
+-<</Filter/FlateDecode/Length 182>>stream
+-x32Q0P0RÐ5T02T06VH1ä*T0´
+-((é*èèY Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAm£EêñëÜ?ì©ÿÿÿôyÝü|¿ÝÓý_ÿ3°ÿÕÂ×_7Y¸n²èN=ØÊ ÀÈåê©È ùé5Q
+-endstream
+-endobj
+-9 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x36W0P0bcJ1ä*T0ñÁ"Fz
+-z@`aªËåäÉ¥ïé«PRTÊ¥TÉ¥ïTÈ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]LøÕ
+lú¶SÖlïþÿ·ÿý¯ãÿ÷ðûïüÿößþÿõ¿Ü÷ï0oà`hàrõTä @
+-endstream
+-endobj
+-463 0 obj
+-<</Filter/FlateDecode/Length 145>>stream
+-x3´P0P0a3#C
+C®BCS ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jË
+-
+Dù¾®µÿxÿÿÿJóö¿-_Û&tX`«§B  (¼
+-endstream
+-endobj
+-439 0 obj
+-<</Filter/FlateDecode/Length 92>>stream
+-xA@0D÷s9öå U.$¬,Ä
+-K
+Âí%UyÉ{£-
+E©5¥ä&8©¥¥ÐSõ0±ç}=;Ì?0
+ÆÍ0
+ìÒ6rÄY¢²
+-endstream
+-endobj
+-436 0 obj
+-<</Filter/FlateDecode/Length 171>>stream
+-x31T0P0VÐ5æ
+-Æ¦
+-)\
+
+-Æ&@QSc=C]K=K
+ä\.'O.}O_
+¢ÒT.ýp ".} .}§ gC.}hC.X.}7}gg7 7ÀÆFßh4¾s~Nin^1P
+§Ú
+Üóÿ_òþÆÿ=õX£Ó!_m¡wG:Xà3ï+NÄùÁ²ÜÀÁÐÀåê©È â=
+
+-endstream
+-endobj
+-366 0 obj
+-<</Filter/FlateDecode/Length 154>>stream
+-x36U0P°bc
+c
+C®B#ß ÄµÔ3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶ÝÌ8éÃö¥¿¼ÿ{¯ÿï½ÿßÆKÿÿêÿI~
+
+
+-L\®
+-\ |ø1
+-endstream
+-endobj
+-333 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x32R0P0b#c#C
+C®BC
+ ß Ä5Õ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô6n\+øl®ö¿÷Uþ_¯MÿÿË³þÿÒÿK_ÖïðæÑ`hààrõTä g+Í
+-endstream
+-endobj
+-268 0 obj
+-<</Filter/FlateDecode/Length 155>>stream
+-x32U0P a#S#C
+C®B#rMõ
+
+89ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYH¹DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.OµEs.¹Ç¨þò­_úúË´ýÿªþí©iÿõ»K©÷¥z^F.WO
+@. ©N,í
+-endstream
+-endobj
+-257 0 obj
+-<</Filter/FlateDecode/Length 140>>stream
+-x32S0P0b#cc
+C®B## ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[1Gc§©7[á8XÿÿG²Ú*&.WO
+@. 
+ª*q
+-endstream
+-endobj
+-173 0 obj
+-<</Filter/FlateDecode/Length 93>>stream
+-x3²P0 BCc#sCS
+C®B$h¤` gÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+
+-F\úNÎ
+-\ú.Ñ\±\.
+-ÿÿÿ Â\®
+-\ é^~
+-endstream
+-endobj
+-170 0 obj
+-<</Filter/FlateDecode/Length 159>>stream
+-x36R0P cKc
+C®B#s ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢uýüýûÿ÷ýÿ¯Äÿ÷ÿÿø8»úúúÿÿÿ?UÆ,
+\®
+-\ h1N
+-endstream
+-endobj
+-657 0 obj
+-<</Filter/FlateDecode/Length 163>>stream
+-x32P0P0QÐµP02P0´PH1ä*T04S 	)è*èëY*$çr9yré{ú*¦réqé{ Õpé;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.Oµ_ôo]úÿÞô/ÓÿMÿÄïÿßH>1ñW@é­Eí9
+
+-
+\®
+-\ g	0ù
+-endstream
+-endobj
+-654 0 obj
+-<</Filter/FlateDecode/Length 139>>stream
+-x32U0 C#c#C
+C®B,b¨` ÁÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+@%\úNÎ
+-@Ê%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(ÈÌ:h°=±lÚ¿[±ë¾nþ;³ðmýÿÿÿ8d
+X¸\=¹ ä¦)G
+-endstream
+-endobj
+-651 0 obj
+-<</Filter/FlateDecode/Length 145>>stream
+-x32U0P0aCJ1ä*T0´ò!"z
+-@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬ ¤\¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P
+§Ú¢yÊiî_/Uù_³ûÿÊ7ü~É¶¿[¶Ix³U
+`apàrõTä k²),
+-endstream
+-endobj
+-648 0 obj
+-<</Filter/FlateDecode/Length 90>>stream
+-x34Q0 B
+CCC
+C®B$f¤` g¨`ÄÉ¹\N\ú¾
+-%E¥©\úá@%\ú
+
+-F\úNÎ
+-@¶K´!A,§Âÿÿp¹z*r L
+
+-endstream
+-endobj
+-645 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x32S0P0b##
+
+C®B#C ß Ä5Ö289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-j¹ÙrªþÿÕÿ	LÄÿ_ºô×¯¸]}
+
+-L\®
+-\ $å*
+-endstream
+-endobj
+-642 0 obj
+-<</Filter/FlateDecode/Length 151>>stream
+-x32W0P0ac#C
+C®Bm 1T0Ò289ËÉKßÓW¡¤¨4K?
+(É¥ï&K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+*¶³ãòtQP[4/1¡w¦ü
+õKµêW=þø§Û_^mõ÷÷o×
+æôo¶ùÀÈ Àåê©È F-
+-endstream
+-endobj
+-639 0 obj
+-<</Filter/FlateDecode/Length 141>>stream
+-x32V0P0aK#C
+C®BC
+ ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-VFÙ
+-Ì¿ÿÿÿoê½ûÿÿÿÿhnà`hàrõTä ^'¶
+-endstream
+-endobj
+-636 0 obj
+-<</Filter/FlateDecode/Length 160>>stream
+-x36Q0P0bc##K
+C®Bcrô
+
+89ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(¨-xzðÿËó×ÿòýÿorýËøý Fë'¸©¿ÿ/¹ÿëW¹ÀA!æF.WO
+@. ¹3é
+-endstream
+-endobj
+-633 0 obj
+-<</Filter/FlateDecode/Length 178>>stream
+-x32V0PÐ5TÐµP02V0²TH1ä*T02(+èèY*èä\.'O.}O_
+¢ÒT.ýp *.} ".}§ gC.}hC.X.}7}gg7 7ÀÆFßh:¾s~Nin^1P
+§ÚÂ
+-=bM¯ö~­ÿï­
+çÒdñÿ¯Êþÿÿ½½ÿÿ÷PýÿéÒ÷¿ù¯­j¿tEÁ
+ËÕS!
+ ¹5q
+-endstream
+-endobj
+-630 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x32V0P0b# 2TH1ä*T0´òÁ\C= 'çr9yré{ú*¦réÕpé{ pé;8+ )hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ÀåÌôÇþßõ>õÿ_ïQ_ý¿üúõñ}
+
+-L\®
+-\ áá(Å
+-endstream
+-endobj
+-566 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x32Q0P0V04S0Òæ
+-)\
+
+-æ@A#Cc=C 
+HÎåròäÒ÷ôU()*MåÒ*âÒ÷ ªáÒw
+-pV R.Ñ\±\únúÎÎn@n¾·.PÆ9?§47¯¨ÅÎËÓEAmÑÄ£ÿÿós}e©8ÄÍûBÇàÛÝe?L;Ü¸öÐáÿÿ¹\=¹ )-°
+-endstream
+-endobj
+-546 0 obj
+-<</Filter/FlateDecode/Length 174>>stream
+-x3²P0P0aSc#
+C®B#c ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶ØXL Ê"ñ
+Ú×Zíï}ÿÿ
+;zÑë¤Ý1-ò½uÙ_.ý}é÷iGt
+01(p¹z*r vî4
+-endstream
+-endobj
+-424 0 obj
+-<</Filter/FlateDecode/Length 170>>stream
+-x31R0P aCc
+C®BcK ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ÈXP~ÿpÝýíßÿÁõ¥/+¼;bµ¿ý]w$òÿGÜý·XDÛ01(p¹z*r ä8Ê
+-endstream
+-endobj
+-421 0 obj
+-<</Filter/FlateDecode/Length 138>>stream
+-x32T0P a##c
+C®Bm 1V0ÔJqr.'¾§¯BIQi*~8PKßL:8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b b;;.Oµm=Ms³ÿÖ/½Í~éÿ_ñÿÄSvF.WO
+@. ú(ã
+-endstream
+-endobj
+-390 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x32S0P0b#cc
+C®B## ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[eµ!ùÿÿõúìÿ÷ÿ!ÿÿOýÿÿÿYüD²602p¹z*r Õ
+-+÷
+-endstream
+-endobj
+-388 0 obj
+-<</Filter/FlateDecode/Length 145>>stream
+-x32S0P0b#c
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ0ÿÍ"¡ÿÿmùúÿ·½ÿÃñ½ÝñÿïíøÅ ÀÄåê©È "¨/
+-endstream
+-endobj
+-379 0 obj
+-<</Filter/FlateDecode/Length 177>>stream
+-x31Q0P0bc
+C®Bc
+ Ì5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢`ÚùäÊùF6þ¥/«¸/}¤â¦/Ø[£þò×/ù¢@zÿþúü÷÷oÿþö÷ßß
+x®H`dàrõTä :Å
+-endstream
+-endobj
+-342 0 obj
+-<</Filter/FlateDecode/Length 135>>stream
+-x32S0P0ac#
+
+C®B#C ß Ä5Ò289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-]¾~ýøÿëÿVýúÑÇ ÀÄåê©È ·t+
+-endstream
+-endobj
+-339 0 obj
+-<</Filter/FlateDecode/Length 159>>stream
+-x34S0P0VÐ54T04V06TH1ä*T04P A#c=C ¤¥Br.'¾§¯BIQi*~8P¾P¾S³!¾K´!A,¾¾³³`c£ï
+-ÔÎ¥ïSW
+ÔbgÇåé¢ ¶(333{é¯ø¥¿¾þÿÿÿ«ýÿê÷ßþ»÷;»AËÕS!
+ ;å-å
+-endstream
+-endobj
+-336 0 obj
+-<</Filter/FlateDecode/Length 139>>stream
+-x36P0P0b#
+J1ä*T02W0ê¥89ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(¨­,f-¿ö×ý¶×ÿ¿®ÿ_>
+:°08p¹z*r 'ó,Y
+-endstream
+-endobj
+-324 0 obj
+-<</Filter/FlateDecode/Length 148>>stream
+-x3´P0P0a3#C
+C®BCS ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jk~·ÄÌ\{ÿÇßìj'ôoß~ýk@¬îtÕ¶L
+
+-\®
+-\ ¦N*
+-endstream
+-endobj
+-321 0 obj
+-<</Filter/FlateDecode/Length 160>>stream
+-x36R0P0bcc#C
+C®B#
+ ß Ä5Õ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô6nh=Ñoê7õÿ¥ò÷Þõ¯½¶ìÿÿßSHxÿÿ²·öË¶òºs
+
+-¸\=¹ îÒ2<
+-endstream
+-endobj
+-318 0 obj
+-<</Filter/FlateDecode/Length 132>>stream
+-x34Q0P0TÐ54R°P06WH1ä*T0(X*ê¤
+õ,s¹<¹ô=}JJS¹ôÃÌ¹ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o n.}çüÒÜ¼bs;;.O
++ÿ£?
+\®
+-\ {ª,
+-endstream
+-endobj
+-315 0 obj
+-<</Filter/FlateDecode/Length 172>>stream
+-x32Q0PÐ5"#c#C
+C®B#°1PÂ@ÏRA×H$çr9yré{ú*¦réUqé{ qé;8+ )hC.X.}7}gg7 7ÀÆFßh6¾s~Nin^1P
+§ÚÞ]Êg>Ôg¨}Yÿ+ÿÿ5Íúÿ/Uÿÿ6µþVÜ´&úÿ¦ÿYäC«§B  ZÑ69
+-endstream
+-endobj
+-312 0 obj
+-<</Filter/FlateDecode/Length 193>>stream
+-x3¶P0P0VÐ5T06W06UH1ä*T06
+-
+Íõ
+t
+-ô,
+-ÀH!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷Ï¥ïSW
+ÔbgÇåé¢ ¶ààG·;u
+'Þ÷øOÀÉµéK_Vm½¾~é¯(çÿ¢ÿ
+¿,Öÿïõrè_Ýý¥·]ê·MÍ1ðüÐÆ ÀÄåê©È ¸Z;³
+-endstream
+-endobj
+-272 0 obj
+-<</Filter/FlateDecode/Length 168>>stream
+-x32T0P0RÐ5T0´P0²PH1ä*T04
+-
+-ô
+t
+-ô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o É\úÎù9¥¹yÅ@-vv\.
+-j;
+
+ízXd¡þÿÿçôEÖukïû>þþgùÑÿM«4JÝÉN½uAËÕS!
+ ¿S1c
+-endstream
+-endobj
+-260 0 obj
+-<</Filter/FlateDecode/Length 131>>stream
+-x32S0P0b#Cc
+C®BCs ß Ä5Ñ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ðäJûxä'ýAËÕS!
+ h(õ
+-endstream
+-endobj
+-210 0 obj
+-<</Filter/FlateDecode/Length 143>>stream
+-x32S0P0acc
+C®B#C ß Ä5Ò289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jûöpìÕ_t}­nÕ¥ëÞ`rATlmÉF9&.WO
+@. /°'ö
+-endstream
+-endobj
+-206 0 obj
+-<</Filter/FlateDecode/Length 92>>stream
+-x
+È1@@Dá~N1'°ó+6Ñ.[H¨¢B© $¯`½â+^î)agZú4eFe*þ8o.¶<k
+èáDèJ\54!VÔý<·PGöxÓ<É
+-endstream
+-endobj
+-203 0 obj
+-<</Filter/FlateDecode/Length 156>>stream
+-x32S0P0b#S#C
+C®B## ß Ä5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô6.ðâ÷-}«&úO§ÍLXy»ÞÎ×]ÿtµ¾-Sy¸wÁ
+.WO
+@. cN+¤
+-endstream
+-endobj
+-200 0 obj
+-<</Filter/FlateDecode/Length 180>>stream
+-x36W0P0bcSc
+C®Bm 1Q0ÔJéX
+©Br.'¾§¯BIQi*~8P	¾t
+-pV0äÒw6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@Åvv\.
+-j+&hDÚñ]æÞuoÛ¥·åë.Ý}½eÛõª÷ùu_~Ê¿[ûåWøêZ»©¯îû/­Ú·½årG¢ÀáF.WO
+@. Øæ;C
+-endstream
+-endobj
+-197 0 obj
+-<</Filter/FlateDecode/Length 151>>stream
+-x34U0PÐ5RÐ54P°T06QH1ä*T04( Åõ,t-Dr.'¾§¯BIQi*~8P¾P¾S³ãmÈeË¥ï¦ïììäØØè{àÒwÎÏ)ÍÍ+j±³ãòtQP[
+Uëøÿ?}6TÿOóÅ£²¦oîap`árõTä KY.þ
+-endstream
+-endobj
+-194 0 obj
+-<</Filter/FlateDecode/Length 178>>stream
+-x31R0P0a
+c
+C®BcS ß Ä5Ö3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶ ­aÃ~
+
+f~Ï½j_fÿ÷Üÿußüïÿÿÿ3kmÙþ÷±ë¾nv+:3±M "IGÁ
+ËÕS!
+ }6x
+-endstream
+-endobj
+-190 0 obj
+-<</Filter/FlateDecode/Length 193>>stream
+-x32R0P0VÐ54P0´P06UH1ä*T04(*ë*èZêY*$çr9yré{ú*¦réqé{ Õpé;8+ré»DrÄré»é;;»¹66úÞ@£¹ôósJsóZìì¸<]Ô<HØ"ýµpýÛä¢ÒßÛ¾}ëÞônrÕö«ÇîÿoÒÒ.½½vËkR·oTßþ\~ùÿÐ]svG$:°08p¹z*r Ï=½
+-endstream
+-endobj
+-186 0 obj
+-<</Filter/FlateDecode/Length 105>>stream
+-x34Q0P0Q02P04P06UH1ä*T0LLô
+R@"9ËÉKßÓW¡¤¨4K?\ÁKß¨Kß)ÀYÁKß%ÚË ËÓE¡àÇ?%,@ÀÁ!  àÀåê©È XJ3
+-endstream
+-endobj
+-167 0 obj
+-<</Filter/FlateDecode/Length 195>>stream
+-x35P0P0TÐ5T0±P06QH1ä*T01W 	*êå
+ô,
+-ÀH!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷Ï¥ïSW
+ÔbgÇåé¢ "¨iÚÈÌ"íkú;þwîÒÿÿ·u¼¿3Í¦ÿÿÿvÉ­øÿÿoÝzïÿ¿þÝäÌúÿÿnùdyÛÿÿö­ÿ÷õò.WO
+@. ÛJE
+-endstream
+-endobj
+-164 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x34W0P0b#cS
+C®BCK Ì5ÔJéX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[Èt¨ÊÜÊ;nú­ÿÿÿ<Ï7òÀüÿPÀâ¡Ï ÀÈåê©È ÝØ/
+
+-endstream
+-endobj
+-161 0 obj
+-<</Filter/FlateDecode/Length 131>>stream
+-x34S0P0bCccS
+C®BCC ß Ä5Ò2õ
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-¬'×þG
+
+
+-
+\®
+-\ 
+-Í,
+-endstream
+-endobj
+-158 0 obj
+-<</Filter/FlateDecode/Length 175>>stream
+-x3²P0P0aSc#
+C®B#c ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶h¾\ïìKùþo÷ÿ¿¿¦nËiîv8g$~ßþóÝËGÿ¿ª­ÔçÚp3Çé`SC«§B  ËT5
+-endstream
+-endobj
+-155 0 obj
+-<</Filter/FlateDecode/Length 153>>stream
+-x32R0P0a
+c#
+C®BCs ß Ä5ÔJéX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[¬§ÿÿú×¿­tfmnúöÿÿéö7m
+
+-.WO
+@. ¢A/V
+-endstream
+-endobj
+-149 0 obj
+-<</Filter/FlateDecode/Length 141>>stream
+-x36T0P0a
+##
+C®B#3 ß Ä5ÒJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ06>Ü"3ëJÌýówÿ_ÿ~4³ð7p04p¹z*r 
+-7
+-endstream
+-endobj
+-146 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x36P0P0b#
+##
+C®B#s(k¨âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ !~r5Ñû¿ë¾Þzÿvé¿[@â¿Üõ·u×°08p¹z*r ;+É
+-endstream
+-endobj
+-143 0 obj
+-<</Filter/FlateDecode/Length 137>>stream
+-x36T0P0a
+##
+C®B#3 ß Ä5ÒJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ0Ð
+ÅÿþíÛ±ëMÁF.WO
+@. Q*â
+-endstream
+-endobj
+-140 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x3¶T0P0bc3c
+C®Bm 1Q0Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp .}0éà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóíì¸<]ÔVÖÛ?þ°ýuÝöþýkÿÿomÿ
+í¸\=¹ Å0ã
+-endstream
+-endobj
+-687 0 obj
+-<</Filter/FlateDecode/Length 173>>stream
+-x36P0P0VÐ5T0²T0²PH1ä*T02S 	Eõ
+t
+-ô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o É\úÎù9¥¹yÅ@-vv\.
+-j­d$7ñ/û»ÿÿ¥øÿ_¶¬¾ô¡éXøíßÿ½ÿÿÿ2ýëÿ/[ó;l5My
+
+`apàrõTä én5
+-endstream
+-endobj
+-678 0 obj
+-<</Filter/FlateDecode/Length 172>>stream
+-x36R0P0RÐ5T0²¡C®B#s  1PFÏPA×@ÏR!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷Ì¥ïSW
+ÔbgÇåé¢ ¶¿¥%áð!/³/å{îÍ_~íÿËÇûÿÿ
+ºîúß×[ïm»tÛ;WÇà7SC«§B  þ!4Ä
+-endstream
+-endobj
+-675 0 obj
+-<</Filter/FlateDecode/Length 139>>stream
+-x32T0P0bCK#
+
+C®BCS ß Ä5ÑJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[ðëÒuî&ÃÞÿ¿ìÿ%¾vX04pp¹z*r Ää*6
+-endstream
+-endobj
+-672 0 obj
+-<</Filter/FlateDecode/Length 148>>stream
+-x36T0 Cc#
+
+C®B\=C0NÎåròäÒ÷ôU()*MåÒªáÒ÷ *áÒw
+-pV0äÒw6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-*jk¶'í¾û{éý]±ë¾n^÷²ðmý xâ¤ÀÄ Àåê©È L
+.
+-endstream
+-endobj
+-669 0 obj
+-<</Filter/FlateDecode/Length 159>>stream
+-x3²P0P0a#
+
+C®B#s Ì5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶øàlÎË¿þÿÕÿ¯bÿã¥êÿõr=Bÿÿ¤,üËþKÞÿã½=t\
+X
+¸\=¹ {/á
+-endstream
+-endobj
+-666 0 obj
+-<</Filter/FlateDecode/Length 165>>stream
+-x36Q0P0RÐ5T06R0²PH1ä*T06P A#K#=C]=K
+ä\.'O.}O_
+¢ÒT.ýp ".} .}§ gC.}hC.X.}7}gg7 7ÀÆFßh2¾s~Nin^1P
+§·Ú
+Cw[ÿÝÿþnúïÌú[ïãß.ý½·~Ûô¿ë¾þ»ÿïú.WO
+@. Cæ2Ü
+-endstream
+-endobj
+-663 0 obj
+-<</Filter/FlateDecode/Length 163>>stream
+-x36T0P0a#
+
+C®Bck¬dqr.'¾§¯BIQi*~8P
+-¾P	¾S³ãmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]ÔÛé9
+0ºÎþÿßäÌúÿ¿ë¦Mÿ¿ÿûËÌúßõÿ¦MßþÿÿKóÿ¿öm¨ap`árõTä zA55
+-endstream
+-endobj
+-660 0 obj
+-<</Filter/FlateDecode/Length 103>>stream
+-x34V0P0UÐµP°T0QH1ä*R@hh¤`ªg¨ k®g©ËåäÉ¥ïé«PRTÊ¥®`Â¥ïTÂ¥ïà¬`È¥ïmÈeËåé¢ðáCC«§B  íg
+-endstream
+-endobj
+-627 0 obj
+-<</Filter/FlateDecode/Length 134>>stream
+-x32U0P0b###C
+C®Bm 1T0Ô289ËÉKßÓW¡¤¨4K?
+(É¥ï&K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+*¶³ãòtQ0±4mdßúþ½¾7í0gbWC«§B  Õ*î
+-endstream
+-endobj
+-624 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x3´T0P0VÐµP0´T0´PH1ä*T04
+-()ë*èëY*$çr9yré{ú*¦réqé{ Õpé;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.OµE³¿pèêM¾ª··þË¤ÿÿÿêíÿvýÒ
+-£Åò_öÉF]âe`ärõTä ¦C,ü
+-endstream
+-endobj
+-621 0 obj
+-<</Filter/FlateDecode/Length 146>>stream
+-x3´T0P0bCKC
+
+C®BC ß Ä5Õ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶ãp÷%¿%VÂÿ	]jÒ¼t3ç!C«§B  5%
+-endstream
+-endobj
+-618 0 obj
+-<</Filter/FlateDecode/Length 149>>stream
+-x32V0P0b##C
+
+C®Bm @ÊDÏPÁ s¹<¹ô=}JJS¹ôÃ\ú
+`Ò)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææÛÙqyº(¨íÜû ïE¿­®öï·ú¿þôÿ¿·wü_ýVÑ
+01(p¹z*r ìO,k
+-endstream
+-endobj
+-615 0 obj
+-<</Filter/FlateDecode/Length 146>>stream
+-x32T0P0b#C
+
+C®BCÌ5ÕJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[Å"î}©6èõõúÿ/
+þçX
+²Wðÿ
+
+.WO
+@. 0(
+-endstream
+-endobj
+-611 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x32S0P0a##C
+C®B#rô
+
+89ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYH¹DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.OµÅ6nU
+æk_¯ýòñþÿ¾a»c_çê]ç]°áC«§B  n)ñ
+-endstream
+-endobj
+-608 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x36Q0P0aC#
+
+C®Bm @ÊXÏPÁ s¹<¹ô=}JJS¹ôÃ\ú
+`Ò)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææÛÙqyº(h
+Ëq¨þpø÷÷oÿÿýþíÿúëËþ/{T²
+-r1(0q¹z*r Êí1
+-endstream
+-endobj
+-605 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x32U0P0b###C
+C®Bm 1T0Ô289ËÉKßÓW¡¤¨4K?
+(É¥ï&K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+*¶³ãòtQ°ÑuÆ`ï:÷¿ÿþwÿíÿPüÏ¾¾¾ÖNq
+«§B  ?²/
+-endstream
+-endobj
+-602 0 obj
+-<</Filter/FlateDecode/Length 160>>stream
+-x36R0P0b#K#
+
+C®B#3 ß Ä5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ yTmÍ?æßßÿÿÿoÕ¯8¡G;74þHü]ÿ»þÿÿK¿¾~hêhe`ärõTä [4
+-endstream
+-endobj
+-599 0 obj
+-<</Filter/FlateDecode/Length 172>>stream
+-x32U0P0VÐ5T02R0²TH1ä*T0´
+-
+HÏPA×@ÏR!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷Ì¥ïSW
+ÔbgÇåé¢ ¶¤àÐ!½ÔM<â«_ÚÔýÿf®¶ÂÎO·ùFE¾¿ÂÌíÕû¿Çg:/ÝÌ²B"AËÕS!
+ c/
+-endstream
+-endobj
+-409 0 obj
+-<</Filter/FlateDecode/Length 167>>stream
+-x36T0P0RÐ5T0Ò
+-)\
+ Ú $l©`¤g¨ k g©ËåäÉ¥ïé«PRTÊ¥TÄ¥ïTÃ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{MæÒwÎÏ)ÍÍ+j±³ãòtQ0eW[sãàÄßuÿëÿÿ¿¾~éCÖ#âf?òßßþ_ÿßÿ6Åçø+f2X
+¸\=¹ å&7	
+-endstream
+-endobj
+-406 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x32V0 C#C#K
+C®B,b©` gÆÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+@%\úNÎ
+-@K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[$§áÆ³{ÁÞàK×Ëÿÿ1W)ë
+÷øàØÂÃàÀÂåê©È Ö$0å
+-endstream
+-endobj
+-402 0 obj
+-<</Filter/FlateDecode/Length 166>>stream
+-x36W0P0b#
+
+C®Bck¬g¨` ÄÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+@%\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾·.PÆ9?§47¯¨ÅÎËÓEAm±1ûÁg÷ÜCö»þÿï}éË~ouÉûÿ_ýÿrUöÿ¿ý²ïÿúøkÓ>]d`ärõTä tä>
+-endstream
+-endobj
+-399 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x3´T0P0bCKC
+
+C®BCS ß Ä5Ñ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶qÓEùlïïëì¿äýÿ¯ÞÞÚK_¶]ºaÁÐÀÁåê©È á *
+-endstream
+-endobj
+-396 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x34Q0P0bC#3
+C®BCC ß Ä5Ö289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jÖÖÙÿOqr0ëÿ¥ÿÅÿ_"ôÿ¿wÉ6.WO
+@. ÊI(½
+-endstream
+-endobj
+-393 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x36Q0P accC
+
+C®B#K ß Ä5Ñ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶s³Û=w-qUQ\Â¿×.ÿ[ÿÉ¤øÿÿ.¶ÿÿÒÿÞêÞåX
+¸\=¹ 
+-¿1§
+-endstream
+-endobj
+-354 0 obj
+-<</Filter/FlateDecode/Length 169>>stream
+-x32R0P0UÐ54P02V02TH1ä*T0´ (*ê*èZêY*$çr9yré{ú*¦réqé{ Õpé;8+ )hC.X.}7}gg7 7ÀÆFßh4¾s~Nin^1P
+§Ú¢9Uz'þ	]
+ÿ²ê¯êúÿ=ëÿMµþõ.åõK¦I}üïýÿËþO¹\=¹ êx3.
+-endstream
+-endobj
+-327 0 obj
+-<</Filter/FlateDecode/Length 170>>stream
+-x32T0P0RÐ5T0´P0²PH1ä*T04
+-
+-ô
+t
+-ô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o É\úÎù9¥¹yÅ@-vv\.
+-jKr§ÞUû2ûú«Çõïÿùwíï÷èÌ²¢cûcÞGÕ/½«ÈÚ¶AËÕS!
+ "|1²
+-endstream
+-endobj
+-303 0 obj
+-<</Filter/FlateDecode/Length 177>>stream
+-x32U0P a#scS
+C®B## ß Ä5Õ3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶ÀÍñ¿KýËúÓÿ¿Lù;ñ:gÝäøUU×ÿÿèYÿCaË¤É¡ÿãKÜCöª¸ÌÎ ÀÈåê©È U&6L
+-endstream
+-endobj
+-294 0 obj
+-<</Filter/FlateDecode/Length 135>>stream
+-x32S0P0b#c
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[eÙ8Cþÿ
+ùÿ0pRù«§B  WR)
+-endstream
+-endobj
+-291 0 obj
+-<</Filter/FlateDecode/Length 149>>stream
+-x32U0P a##C
+C®BCK ß Ä5Õ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]ÔÉô/¹7õeUx|lý øk²¶¾¬ÍvÃG¡ËÕS!
+ vF)Z
+-endstream
+-endobj
+-288 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x32W0P0b#s#C
+C®B## ß Ä5Õ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô66
+p¼¬°Õv´½ûÿú_éÿÿ/þÿ··÷¥ÿÞ÷/]ºÛÜÀÁÐÀåê©È Î
+/X
+-endstream
+-endobj
+-285 0 obj
+-<</Filter/FlateDecode/Length 145>>stream
+-x32R0P0b#CJ1ä*T04òÁ"fz
+-@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬ ¤\¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P
+§Ú¢ÖÄ5
+-ó¦ÇÇuqzInØõ?c¹÷iYÛD
+X¸\=¹ &&
+-endstream
+-endobj
+-263 0 obj
+-<</Filter/FlateDecode/Length 162>>stream
+-x32S0P0b#c
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[q¶õÿ	ÝKïïêý½ôþÆú[ÿßùÙzi­öw ¡öÿ 	®QÖä F.WO
+@. Ur3
+-endstream
+-endobj
+-233 0 obj
+-<</Filter/FlateDecode/Length 139>>stream
+-x32V0 C#C#K
+C®B,b©` gÆÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+@%\úNÎ
+-@K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[ÄtÈ e×/ÿÿ@ðQfÖf¦ÿðGÀÀá 
+«§B  Öy1
+-endstream
+-endobj
+-230 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x3¶P0P0bcS#
+
+C®Bcc ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢`Âã¹úý'«¾ýÿÿ¿]úÿß­øÿÿgÖ9ÿÿoþ,ôH]_þ}²
+«§B  pÎ=Î
+-endstream
+-endobj
+-227 0 obj
+-<</Filter/FlateDecode/Length 135>>stream
+-x32V0P0b#CC
+
+C®B#r
+-õR@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]l\kþ¿Þ,=lÉÌ ÀÈåê©È #)
+-endstream
+-endobj
+-224 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x32R0 C#CC
+
+C®B$äèqr.'¾§¯BIQi*~8P
+-¾P	¾S³ãmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]ÔV0Ð_û:WwËÞ2íº¯Oj_/}uß÷¡É£
+
+\®
+-\ sî)ï
+-endstream
+-endobj
+-221 0 obj
+-<</Filter/FlateDecode/Length 169>>stream
+-x36P0P0RÐ5T02W0²TH1ä*T02U 	eô
+t
+-ô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o É\úÎù9¥¹yÅ@-vv\.
+-j
+ýùYº÷²HÖs²/ù²ïË®ý_{ÿÿó
+--ÿ÷wËþÛÞ¹:fÓs&
+jà`hàrõTä §Ï/º
+-endstream
+-endobj
+-217 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x32T0P0bCKC
+
+C®BCs ß Ä5ÒJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[ÂÍqp¯Ê×/û³
+ÿ?¹Z£»ïenË#
+
+-
+\®
+-\ X'}
+-endstream
+-endobj
+-214 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x36Q0P0a#
+
+C®B#s Ì5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶ÐçxòcY&~Ï¶ú{kùÿÊZX~ÿeîïÌÜ¥u
+#
+¸\=¹ Ë7+*
+-endstream
+-endobj
+-586 0 obj
+-<</Filter/FlateDecode/Length 91>>stream
+-x%±@@÷>EÀ]ã
+VNâ	AL
+-·ð'ÒôúU%=Å*¨«pPÁ6Ï@ef¬Ë*Á¥×yop£]àZª¾¦àâ$ø)ò}þ I
+ðÈ:S
+-endstream
+-endobj
+-461 0 obj
+-<</Filter/FlateDecode/Length 91>>stream
+-xÉ!0DQ?§ÐÝ¤ØRVB IÀÝ+)æÿÕSè©Â¸).¤è+-£°
+g=ûÝá&¸î'
+-.Í
+-Y`gÎùDk
+ñQ÷
+-endstream
+-endobj
+-458 0 obj
+-<</Filter/FlateDecode/Length 157>>stream
+-x32S0P°PÐ5U02T06UH1ä*T04
+-( eô
+tMô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P
+§ÚBÓ¥ pmúËºéÂÿÿg	©ûïþÛïÛ·oßð¾AËÕS!
+ D.·
+-endstream
+-endobj
+-455 0 obj
+-<</Filter/FlateDecode/Length 159>>stream
+-x32U0P0QÐ54R02P06WH1ä*T04Å-Lô
+z
+-É¹\N\ú¾
+-%E¥©\úá@U\ú
+@E\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾7P;¾s~Nin^1P
+§Ì¬îÝ»ÿþÝ»wOÂÂaË-û¡"_¶lâèÀÂàÀåê©È ÀI8H
+-endstream
+-endobj
+-452 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x32S0P0b##C
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-j+Î\J¹ª¶!ûÿ·KÿÿnÙÿ?Wÿÿmïÿß´¿-`bPàrõTä ²,
+-endstream
+-endobj
+-449 0 obj
+-<</Filter/FlateDecode/Length 132>>stream
+-x32S0P0b##c
+C®BCK ß Ä5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ !~rÅþÿÐéßÀÁÐÀåê©È .|)7
+-endstream
+-endobj
+-430 0 obj
+-<</Filter/FlateDecode/Length 157>>stream
+-x36P0P0b#
+##
+C®B#s(k¨âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¡ú)ëÏÁÛÞ¹z¯su/Ýø¶ý½ÿôXµ/³¯îÕ¾ïùHÂq? #«§B  3,£
+-endstream
+-endobj
+-306 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x32Q0 C#3#K
+C®B,b©` gÆÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+@%\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾·.PÆ9?§47¯¨ÅÎËÓEAm\b¢Ñ=_Dæf/ÝúÎþÿÿÿGü7eáJÿÿ8
+z%8¸\=¹ q±4ú
+-endstream
+-endobj
+-300 0 obj
+-<</Filter/FlateDecode/Length 145>>stream
+-x3´P0P0bCS#C
+C®BCc ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]ÔÖ<nm_0{ûî
+-¥öÇþmé±ª
+£30r¹z*r 
+-)
+-endstream
+-endobj
+-134 0 obj
+-<</Filter/FlateDecode/Length 141>>stream
+-x34S0P0RÐ5S04R02PH1ä*T04P A#3#=C]S=K
+ä\.'O.}O_
+¢ÒT.ýp ".} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶f÷ÿÿm¤O®Öû
+X¸\=¹ X
+-)
+-endstream
+-endobj
+-131 0 obj
+-<</Filter/FlateDecode/Length 170>>stream
+-x32T0P0TÐµT0£C®BC
+  
+¡
+PÎBÏR!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(¨-x­!à'X¶ëëå¾íÿÿ¿]÷uAÕÛOÅ¿/zhåÛUHóÒmïÄ
+-G48¸\=¹ õ4Ü
+-endstream
+-endobj
+-128 0 obj
+-<</Filter/FlateDecode/Length 146>>stream
+-x34S0P0aC
+
+C®BCc ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQPÛø6cçácÿk
+'¤½±1XØ¾û÷*©¦
+\®
+-\ f'õ
+-endstream
+-endobj
+-125 0 obj
+-<</Filter/FlateDecode/Length 141>>stream
+-x32V0P0b#C#K
+C®B#r
+-õR@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]lø|óÿÁÏÍeÛ_Ú_ÿ	
+-
+
+
+-\®
+-\ òè/
+-endstream
+-endobj
+-105 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x32Q0P0VÐ54R02ÌR
+¹
+-
+Í¢
+-&
+-Æz@IC=K
+ä\.'O.}O_
+¢ÒT.ýp *.} ".}§ gC.}hC.X.}7}gg7 7ÀÆFß¨Kß9?§47¯¨ÅÎËÓEAmÁ¾}Óÿ¡Àÿ/ëðh
+-
+«§B  o43K
+-endstream
+-endobj
+-102 0 obj
+-<</Filter/FlateDecode/Length 168>>stream
+-x36V0P0bcCc
+C®B#K ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢Àª¶æAÝÃ¿ÿÿþþÿ¿ÿ?ûÿ¯_?Ûÿþýÿÿëåÿêÿÿúÿú¥+:î
+\®
+-\ ÚÈ7
+
+-endstream
+-endobj
+-99 0 obj
+-<</Filter/FlateDecode/Length 160>>stream
+-x36U0P0bcc#C
+C®Bc# ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-&½¦Ml¥¾¹ÿïÖ¿]dïýûÿß-sõßÿÿv©dÿþÿ7ò¦ÿw9þ? #«§B  x2?
+-endstream
+-endobj
+-96 0 obj
+-<</Filter/FlateDecode/Length 165>>stream
+-x3²P0P0b#c#
+C®B#C ß Ä5Ö2õ
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jKÒ,
+J|Èo/Ì¿¿ÓÔ{ËÆ¯¿b333
+¶liºô²dw×õØäL
+
+-\®
+-\ 0<
+-endstream
+-endobj
+-92 0 obj
+-<</Filter/FlateDecode/Length 160>>stream
+-x32W0P0a3##
+C®B# ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶,CHÀVÎüíï¿o+þOh?é³æ ¼]Ó
+ëÿ?¹jâ
+Ï'±OÂAËÕS!
+ ý,Þ
+-endstream
+-endobj
+-89 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x36U0P0bc#c
+C®Bcrô
+
+ô
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(¨­,N-~èð×ýÿÿÔ®ýÿ`àòIõ.WO
+@. 2ù
+-endstream
+-endobj
+-86 0 obj
+-<</Filter/FlateDecode/Length 157>>stream
+-x32W0 C#ScS
+C®B$äè±%X*$çr9yré{ú*¦réUré{ ré;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.Oµ
+þ}MÊSYN<÷´
+-÷þ¶§þÿÿGY)WÎp~ÿ
+4
+t
+.`dàrõTä ©/8ø
+-endstream
+-endobj
+-83 0 obj
+-<</Filter/FlateDecode/Length 166>>stream
+-x32W0P0TÐ54P02Q02TH1ä*T02(*ê%-õ,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ôK´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAmÍa
+ÃØvµuM¼ßkÍ¿¿ÿþ¼ÿ¯»ôbá¥oî¦oôåüóù¸\=¹ G4
+-endstream
+-endobj
+-79 0 obj
+-<</Filter/FlateDecode/Length 169>>stream
+-x36P0P0aK#3
+C®B#s°¨¡'çr9yré{ú*¦réÕpé{ pé;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.OµÅv,	/ò
+·ßý]
+w½ÿÿD2zqÓ¾¬Í²ÿÿzrÈ¿ý[¶IxÙ¶20r¹z*r þ0®
+-endstream
+-endobj
+-76 0 obj
+-<</Filter/FlateDecode/Length 160>>stream
+-x32Q0P0aC#3
+C®BCK ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶,í`cS,¼çÿÞ¿%M
+?5Þ°1oû$TaÛö»þnÔ]G©
+\®
+-\ !,
+-endstream
+-endobj
+-73 0 obj
+-<</Filter/FlateDecode/Length 165>>stream
+-x32Q0P0VÐ5T02R06QH1ä*T0´
+-
+Mõ
+t
+-ô,
+-ÀH!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷Ï¥ïSW
+ÔbgÇåé¢ ¶¢'ÊÃ}û'
+¼¾ôË´é/³¯íÿõõ×ÿûÿÿÿ¿AËÕS!
+ O1º
+-endstream
+-endobj
+-70 0 obj
+-<</Filter/FlateDecode/Length 106>>stream
+-x34Q0P0QÐ54P "S
+C®B3 oª`¢g¨ k©g©ËåäÉ¥ïé«PRTÊ¥®`Æ¥ïTÂ¥ïà¬`È¥ïmÈeËåé¢PðãÏ ààPpàrõTä Xú8
+-endstream
+-endobj
+-593 0 obj
+-<</Filter/FlateDecode/Length 194>>stream
+-x31Q0P0bKc
+C®B3 ß Ä5Ö3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶h[Oû_Êëÿu¼wÿßô_qÓþÿÿ+nÚ¤øÿ/ëî¿ÌTsA¢/ëÿMÎTýÿoú÷µõ¿®/÷¨(`dàrõTä 9äFX
+-endstream
+-endobj
+-580 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x3²T0P0b#Sc
+C®B# ß Ä5ÔJéX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[úó?Ìü£ðcÿÿ¦UÞ<NY¹\=¹ Ùß/
+
+-endstream
+-endobj
+-569 0 obj
+-<</Filter/FlateDecode/Length 169>>stream
+-x32Q0P0RÐ5F
+-F
+-)\
+
+-F
+- hl¨`¤g¨ k©g©ËåäÉ¥ïé«PRTÊ¥TÄ¥ïTÃ¥ïà¬ ¤\¢
+-¹
+b¹ôÝôÝÜ }o Ñ\úÎù9¥¹yÅ@-vv\.
+-j7ìR>ÿeýÿK¯½½ÿÿUÙÿÿ?*çLýãÿÒ)¢b&-j÷Nt`apàrõTä Ì4
+-endstream
+-endobj
+-558 0 obj
+-<</Filter/FlateDecode/Length 155>>stream
+-x32S0P0acc
+C®B#C ß Ä5Ò289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jõ\ïüSâÍÎîÿ¿êküÿ?.ÌO®H»¹	(óïr # «§B  2
+-endstream
+-endobj
+-505 0 obj
+-<</Filter/FlateDecode/Length 183>>stream
+-x36S0P0bCc
+C®Bc
+ ß Ä5Ö3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶hfû6îe¿¿ìÿ»ÿ¿·÷íÿÿ¿Ìöþÿÿö-ûþ×ÿ÷ºôýÿßýÞÞÿoü¿´¾þë[
+v
+
+-L\®
+-\ y?ý
+-endstream
+-endobj
+-483 0 obj
+-<</Filter/FlateDecode/Length 149>>stream
+-x34W0P0bCCK
+C®BCß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶L¬{ëÉK¯Èw¯RÞ°vWÝ
+¯½Þd
+ÍÅ ÀÄåê©È -â(ä
+-endstream
+-endobj
+-476 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x31P0P0bc3c
+C®B
+-RFz
+-z@`aªËåäÉ¥ïé«PRTÊ¥TÂ¥ï&
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P±
+§Ö>_÷çÿßÿÿÿÿõñë9
+ãÏ·ò®»ÿ} ÈÒÿKjt02p¹z*r Õõ4Æ
+-endstream
+-endobj
+-473 0 obj
+-<</Filter/FlateDecode/Length 99>>stream
+-x34S0P0bCC##
+C®Bs × Ä3Ñ3T0 âä\.'O.}O_
+¢ÒT.ýps.} 
+-.}§ gC.}hC.X.OÿþÕX0@Ëåê©È í
+
+-endstream
+-endobj
+-446 0 obj
+-<</Filter/FlateDecode/Length 145>>stream
+-x32S0P0b#C#
+
+C®B#r
+-õR@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]ÔMçÿÿÿ¿¼Úbáÿ@ðCÿÿïÌÂ·­
+\®
+-\ 
+p)o
+-endstream
+-endobj
+-373 0 obj
+-<</Filter/FlateDecode/Length 92>>stream
+-x34U0P0bCCS
+C®B4Ó3T0Ð3°
+ä\.'O.}O_
+¢ÒT.ýpS.}áà¬`È¥ïmÈeËåé¢PðãÇ\®
+-\ £$O
+-endstream
+-endobj
+-279 0 obj
+-<</Filter/FlateDecode/Length 168>>stream
+-x32T0P0RÐ5T0´P0²PH1ä*T04
+-
+-ô
+t
+-ô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o É\úÎù9¥¹yÅ@-vv\.
+-jftoØ2ßÓVõÒßµî¿zn.²®ò½]{ùûÿ]õ¿×^«»eÃ.WO
+@. º¢2^
+-endstream
+-endobj
+-266 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x32S0P0b#c
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ0±r
+Gü?ü©ÿs 
+ÂüDB¡¾¡ËÕS!
+ ëu.â
+-endstream
+-endobj
+-255 0 obj
+-<</Filter/FlateDecode/Length 141>>stream
+-x32U0P0V0R02T02RH1ä*T0´ (%ô¢@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]ÔT,d_¾|ùÇú«â·nÝÚ&ÂàÀÂåê©È 0#¯
+-endstream
+-endobj
+-252 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x32S0P0b#c
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[ÈÃ²ü ÿÚÿÿýÿmÿÿÿ¥9Ë¿üÌTÿÿ¯Úf-'Wù:°08p¹z*r ©u1
+-endstream
+-endobj
+-249 0 obj
+-<</Filter/FlateDecode/Length 146>>stream
+-x32Q0P0R02P04W06UH1ä*T04
+-(#=C 
+HÎåròäÒ÷ôU()*MåÒÊré{I§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+TlgÇåé¢ ¶â «ØÜûj+Úu
+-ÿÿ¿äýWeÿ%oO
+-.WO
+@. Åd&¢
+-endstream
+-endobj
+-180 0 obj
+-<</Filter/FlateDecode/Length 166>>stream
+-x31R0P0bc
+C®BcK Ì5ÔJéX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ0mý~Ø±øþ®ø·Kÿgï-7½îeý­÷±¿
+¾í¾^w´îú¿ëok
+X¸\=¹ ÿB6Ö
+-endstream
+-endobj
+-122 0 obj
+-<</Filter/FlateDecode/Length 132>>stream
+-x34R0P0a#K
+C®BK Ì3ÔÊ qr.'¾§¯BIQi*~¸%¾P¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+V°´³ãòtQPÛXîÿmãÿ/fÝÿ
+
+\®
+-\ Öú(k
+-endstream
+-endobj
+-119 0 obj
+-<</Filter/FlateDecode/Length 153>>stream
+-x32T0P cK#
+
+C®BC
+ ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[xzÿºý¬^}Yõ·*nÜôõ×
+?ò#Ï×iFýÿÿL8¸\=¹ ¦,/v
+-endstream
+-endobj
+-115 0 obj
+-<</Filter/FlateDecode/Length 146>>stream
+-x36S0P0bcC
+
+C®Bcc ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ°S>â¥<#£/ñßäï|¿ÖÿG
+-Yx
+X¸\=¹ ¡B/X
+-endstream
+-endobj
+-112 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x32T0P0aC
+
+C®Bm  æé¥89ËÉKßÓW¡¤¨4K?
+(É¥ï&
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P±
+§ÚÆ;ÛÝß¾õñ?÷Êå
+âK¿
+_ÿcyÜ-å·ºóò¸\=¹ ,3
+-endstream
+-endobj
+-109 0 obj
+-<</Filter/FlateDecode/Length 153>>stream
+-x36R0P cK#
+
+C®B#s ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ yDmÍ
+?äßþû÷÷ÿïÿÁ¯ÿ×__}éË
+
+E,
+\®
+-\ â3
+-endstream
+-endobj
+-67 0 obj
+-<</Filter/FlateDecode/Length 148>>stream
+-x36P0P0asc
+C®B#S(k¤g¨` g`	¦
+-É¹\N\ú¾
+-%E¥©\úá@\ú
+@
+\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾·.PÆ9?§47¯¨ÅÎËÓEÁªEmÍ¤ëÿaà×ÿÿ¯ÿÇíÿët¤AËÕS!
+ 
+M0o
+-endstream
+-endobj
+-63 0 obj
+-<</Filter/FlateDecode/Length 145>>stream
+-x36W0P0bcJ1ä*T0ñÁ"Fz
+-z@`aªËåäÉ¥ïé«PRTÊ¥TÉ¥ïTÈ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]¬,MÓçÍúý³Ù³
+-ÕÓ
+î08°p¹z*r  77
+-endstream
+-endobj
+-60 0 obj
+-<</Filter/FlateDecode/Length 183>>stream
+-x36V0P0VÐ5T06P01WH1ä*T02
+-¹
+-Æz
+-ºz@`¤ËåäÉ¥ïé«PRTÊ¥TÉ¥ïTÈ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{çÒwÎÏ)ÍÍ+j±³ãòtQP[ÈßÒpøÁÙ×~Õæ/¿öÿ¿çþÿÿ¬ÿÁ«ÙÿÇ¾þÿ}Ýõª·åk·l8Ì¡cÈÅ ÀÄåê©È 	>
+-endstream
+-endobj
+-57 0 obj
+-<</Filter/FlateDecode/Length 151>>stream
+-x36W0P0bcScC
+C®Bcc ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ôå¤âQz&'à{rõÙwõ¿ýþÿú?
+-ør¹Ór.s
+«§B  ^<6Ï
+-endstream
+-endobj
+-54 0 obj
+-<</Filter/FlateDecode/Length 149>>stream
+-x3´P0P0bCS
+
+C®BCc ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶,áåëßoÿÿÿiÝ?9üþøòAËÕS!
+ ùD2½
+-endstream
+-endobj
+-51 0 obj
+-<</Filter/FlateDecode/Length 109>>stream
+-x3´P0P0S06P04V05PH1ä*T0(%ô
+R@"9ËÉKßÓW¡¤¨4K?\ÁKß¨Kß)ÀYÁKß%ÚË ËÓE¡âÏÿª@
+
+
+C@AÁËÕS!
+ Ùz_
+-endstream
+-endobj
+-48 0 obj
+-<</Filter/FlateDecode/Length 165>>stream
+-x35P0P0QÐ5T01S0±TH1ä*T01R 	eô
+t
+-ô,
+-ÀH!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷Ï¥ïSW
+ÔbgÇåé¢`Úþ)+ýpâñÌõÙÿqÝÿïê»t;~íi9Þ<a
+
+-
+\®
+-\ ¸C
+
+-endstream
+-endobj
+-45 0 obj
+-<</Filter/FlateDecode/Length 177>>stream
+-x36V0P cccC
+C®Bcrõ
+
+89ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYH¹DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.OµEóyô
+>4ñ¾Pû»½vÿýÿòõtyÏ!Þ"¾ôemÕÇ¨ÿ_ÿùëx}ÛsËóÎìZÀÄ Àåê©È :E
+-endstream
+-endobj
+-41 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x36W0P0bcSS
+C®Bcc ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶,»røýÿpâÿ!½Äæ/Ôþêûýÿõðår§å\æ:&.WO
+@. 3'AÍ
+-endstream
+-endobj
+-38 0 obj
+-<</Filter/FlateDecode/Length 155>>stream
+-x32U0P0RÐ5T02R06QH1ä*T02P AcS#=C]=K 0RHÎåròäÒ÷ôU()*MåÒªäÒ÷ *äÒw
+-pV0äÒw6ä2åÒwÓwvvrllô½Æsé;ççææµØÙqyº(¨-°sÿxê.þ?dSVÓÚÇ¶Å®1XÀÄ Àåê©È V¤1
+-endstream
+-endobj
+-35 0 obj
+-<</Filter/FlateDecode/Length 165>>stream
+-x32S0P0TÐ54P02Q02TH1ä*T02(*ê%-õ,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ôK´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAÝÒ´Mìmmý¶é¿3ëÿÝ»ô?±ýÿÖ_ñ¿Ó/]ó
+-ðÌÑ`hààrõTä v÷08
+-endstream
+-endobj
+-32 0 obj
+-<</Filter/FlateDecode/Length 153>>stream
+-x32Q0P0ac#C
+C®Bm 1T0Ò289ËÉKßÓW¡¤¨4K?
+(É¥ï&K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+*¶³ãòtQP[óÃK/ñeÛ¿o³ÿ?±ù Ì½úÞ¯ûãÿí4õ¼¾mrfâ<L
+
+-\®
+-\ .Ñ/F
+-endstream
+-endobj
+-29 0 obj
+-<</Filter/FlateDecode/Length 146>>stream
+-x32R0P0b# 2TH1ä*T0´òÁ\C= 'çr9yré{ú*¦réÕpé{ pé;8+ )hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶Ø® G¢soô¥¯{->Îæ©
+ú6ÿ¶w®îi<
+
+-
+\®
+-\ R\(
+-endstream
+-endobj
+-26 0 obj
+-<</Filter/FlateDecode/Length 156>>stream
+-x36W0P0RÐ5T06¡C®Bc#  ±©¡®¥)$çr9yré{ú*¦réUré{ ré;8+ré»DrÄré»é;;»¹66úÞ@ã¹ôósJsóZìì¸<]¬ø|#DûVÇÿG»bÿ¿vWt¢n[ÓÁ
+
+-
+\®
+-\ 77¯
+-endstream
+-endobj
+-23 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x32W0P0b#S#C
+C®B# ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jk8ó¤ìóÍ°{ÿ^ÿ{Ñ·Wû°-3 #«§B  É1,É
+-endstream
+-endobj
+-20 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x3´T0P0aScC
+C®BC ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jKÜåÿ_ÿ[Úé¤¶æÀøÄoîß<¡ËÕS!
+ {
+--Ñ
+-endstream
+-endobj
+-513 0 obj
+-<</Filter/FlateDecode/Length 182>>stream
+-x32W0P0VÐ5T0Ò¦
+-)\
+
+-F A ×LÁXÏPA×@ÏÒ s¹<¹ô=}JJS¹ôÃ*¹ô=
+-¹ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o ñ\úÎù9¥¹yÅ@-vv\.
+-j
+[
+R.hfÙå¿ôulÕÿ×ñ?þWó7ß°ÝcÞ\a÷»þçñõÿ]­Ûí}©Ã]Vwºªc+ #«§B  º7
+-endstream
+-endobj
+-510 0 obj
+-<</Filter/FlateDecode/Length 183>>stream
+-x36S0P0VÐ5T06U06QH1ä*T06
+-Eô
+t
+-ô,
+-ÀH!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷Ï¥ïSW
+ÔbgÇåé¢ ¶hÊSÅ7r¿_Êÿ¿ÿ÷ÿ¿ºZ_ö¨>d]Èz¶ëïþ|¯ÿÿÿªìáø¿®?ÊPæô\!ÎÎ ÀÈåê©È ÞJ:
+-endstream
+-endobj
+-416 0 obj
+-<</Filter/FlateDecode/Length 163>>stream
+-x32S0P0VÐ5W02R06PH1ä*T0´
+-
+Íõ
+tÍô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P
+§Ú
+øýçÈ·ÈYûÿ¯·]µ>ÆÌÎvÁ&¹ïïë¾ÿ`hààrõTä 2º/ø
+-endstream
+-endobj
+-364 0 obj
+-<</Filter/FlateDecode/Length 215>>stream
+-x31T0P0VÐ5V06¡C®Bc  	PFÏPA×HÏR!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(¨-Ë1^Ð½ÉBð;ëµÉÊMº
+\íúJ§ü÷¾ôÿÒý_tLzÿýÒmï/{
+-æË
+-ÞÐUMÌTýµuiü{ÏªøÓ/ýÿ²oòo¯ÿ%[f«{«¡ËÕS!
+ îÍJ 
+-endstream
+-endobj
+-361 0 obj
+-<</Filter/FlateDecode/Length 162>>stream
+-x3²P0P0b#ScS
+C®B## ß Ä5Ö3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶$AH¢öý_ üï¿^ôzÉý¸ék_ÚM_Zå¿
+E/'01(p¹z*r ^~3e
+-endstream
+-endobj
+-334 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x3´P0P0a3#C
+C®BCS ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-j
+ëv½>ñzéËª¸ýqÓ
+?"i* þÿC«§B  Õ'
+-endstream
+-endobj
+-269 0 obj
+-<</Filter/FlateDecode/Length 162>>stream
+-x32R0P0b#c#C
+C®B#rõ
+
+89ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYH¹DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.Oµ%9×:>»/¹åé¶eõïø>ÍúÓÿ·l«²èÿ¥%
+Ë½8^ÊÕ]ÆÇ ÀÄåê©È ¤D/
+-endstream
+-endobj
+-246 0 obj
+-<</Filter/FlateDecode/Length 156>>stream
+-x32S0P0b##C
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-j+.q_þ¶©à`îõÌÜuGsK÷Íkúk¾äÞö%?8oÊÚÊ ÀÈåê©È ³ü-
+-endstream
+-endobj
+-243 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x32S0 C#S#C
+C®B,b¨` ÁÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+@%\úNÎ
+-@Ê%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(¨­xpF #]mEEºòäWûÿ­þ ød,voÊÂàÀÂåê©È ~29
+-endstream
+-endobj
+-240 0 obj
+-<</Filter/FlateDecode/Length 161>>stream
+-x32S0P0ac
+C®B#ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶ÐÿO
+÷ÿÿT>dQeV«~©nöÿÿÿ´Äÿn}¸îÈ
+ó¶
+-°08p¹z*r d16
+-endstream
+-endobj
+-16 0 obj
+-<</Filter/FlateDecode/Length 161>>stream
+-x32Q0P0b##cc
+C®B#ß Ä5Ô2õ
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-j
+­Û¿þEß®ø_ñ¿â¦ÿÂ¥ÿð¾°ÃYíñÿÿùdðAËÕS!
+ þ4Ë
+-endstream
+-endobj
+-13 0 obj
+-<</Filter/FlateDecode/Length 87>>stream
+-x32Q0 BC##cCc
+C®B,¨` gÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+
+-\úNÎ Ê%ÚË ËÓEáÿÿ\®
+-\ Vvª
+-endstream
+-endobj
+-10 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x36W0P0bccc
+C®BcC ß Ä5Ò2õ
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-JLÃ
+-l×
+þþíßßýÿþþÿÿþ?\ÿ·?þW|Ü¾é
+¶rº85p04p¹z*r Øþ62
+-endstream
+-endobj
+-7 0 obj
+-<</Filter/FlateDecode/Length 180>>stream
+-x32W0P0VÐ5T02V06UH1ä*T02P Ac3c=C]=K 0RHÎåròäÒ÷ôU()*MåÒªäÒ÷ *äÒw
+-pV0äÒw6ä2åÒwÓwvvrllô½Æsé;ççææµØÙqyº(¨-©&X¤_Ò¬üWýê¯ÿ÷ÿ
+
+òÃvrwÂ·÷üÙ>ü®{ÿ×o¯î²ºÓU
+[¹\=¹ !c5ü
+-endstream
+-endobj
+-658 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x32T0P0TÐ5T04W0²PH1ä*T04
+-(Y*êå
+ô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o É\úÎù9¥¹yÅ@-vv\.
+-jÛ\ÏþO»ÿ¿Ô4u
+;ñ6G¡ËÕS!
+ 2,²
+-endstream
+-endobj
+-655 0 obj
+-<</Filter/FlateDecode/Length 156>>stream
+-x3²P0P0b#
+C
+
+C®B#ß Ä5Ñ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶q£÷¼ß¡Kÿ¯òÿ«úÿ¥Êôÿÿ_Æ¯ÿû2¯QözºC«§B  Âµ.á
+-endstream
+-endobj
+-652 0 obj
+-<</Filter/FlateDecode/Length 167>>stream
+-x36V0P0VÐ5T06R0²PH1ä*T0²
+-(c=C]=K
+ä\.'O.}O_
+¢ÒT.ýp ,¾t
+-pV0äÒw6ä2åÒwÓwvvrllô½&sé;ççææÛÙqyº(¶«­¹±àùÛßõõÿÿ__ú²Â»C/'ñGþûÛÿàëÿûß¦ø
+ýÅ{.AËÕS!
+ ùC7+
+-endstream
+-endobj
+-649 0 obj
+-<</Filter/FlateDecode/Length 165>>stream
+-x31T0P0a
+#
+
+C®BcS ß Ä5ÖJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ0aS¹ú\þ§¬{üÿÛÞÿÿÿÏÕÿÿírþnÙÿÌýÿ»ÿÿ­/ÿ>¹0p04p¹z*r ¦á=©
+-endstream
+-endobj
+-646 0 obj
+-<</Filter/FlateDecode/Length 171>>stream
+-x32V0P0VÐ5T02U0²TH1ä*T02
+-
+HÏPA×@ÏR!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷Ì¥ïSW
+ÔbgÇåé¢ ¶ðÒ3÷/Â²½¯ÿ÷Úÿñý7þæù
+-3Ûÿþ·øÿkéÿ¥_Å¦(ïðjæbP`ârõTä v2Ê
+-endstream
+-endobj
+-561 0 obj
+-<</Filter/FlateDecode/Length 174>>stream
+-x3¶P0P0bc3#C
+C®BcS ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jmD>
+2H=søï{kÜYuìÞ¬ã?>3öÿÿµòûÚ]u·|îò]ºáRbËó¬6	L
+
+-\®
+-\ 9L
+-endstream
+-endobj
+-495 0 obj
+-<</Filter/FlateDecode/Length 91>>stream
+-x!0ý¾b_ÀµWÑ`KI¨ 
+ (@" ðo~PJfÆz:zªcÍÍâ¤þ(]eéKë ©ç}=;d*
+¤£BÂÐÐBâla¤Èß"ÚÄyÒ
+
+-endstream
+-endobj
+-437 0 obj
+-<</Filter/FlateDecode/Length 93>>stream
+-x1
+-0û}Å¾ÀË4¶1)­,ÄJ--ý½fÇ64tT¥Í¶Ü­a¡¦«4_YÛ	!qàs¿dÎ
+-¤g
+-ñcK
+EaVÄÀÒW.rÂéj¬
+-endstream
+-endobj
+-423 0 obj
+-<</Filter/FlateDecode/Length 151>>stream
+-x3²P0P0as#C
+C®B#S ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô%f»¹ñBýR¾÷ïÿ?ìÿ²«Ióú¥Û¹-5p04p¹z*r á+,Õ
+-endstream
+-endobj
+-386 0 obj
+-<</Filter/FlateDecode/Length 172>>stream
+-x35V0P0bSc
+C®B
+ Ì5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ÂX
+U9óée×ëÿÿÿÝ²ÿÿmoõÿ®þÿoÀ\ªëÿßõÿÿßzT)¶:¡ËÕS!
+ GK
+-endstream
+-endobj
+-367 0 obj
+-<</Filter/FlateDecode/Length 151>>stream
+-x34U0P0bC
+c3
+C®BC# ß Ä5Ó3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶(;þëÿ¥ÿ¯ÿþ?þWüßúÇÿ§
+-Ö08°p¹z*r V£*O
+-endstream
+-endobj
+-343 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x32T0P0RÐ54P0´P06TH1ä*T04(*é*èZêY*$çr9yré{ú*¦réqé{ Õpé;8+ )hC.X.}7}gg7 7ÀÆFßh4¾s~Nin^1P
+§ÚÂÞÌúX7ýB¹õG
+¸\=¹ 4®.@
+-endstream
+-endobj
+-340 0 obj
+-<</Filter/FlateDecode/Length 159>>stream
+-x34S0P0RÐ54T04R06TH1ä*T04P A##=C ¤¥Br.'¾§¯BIQi*~8P¾P¾S³!¾K´!A,¾¾³³`c£ï
+-ÔÎ¥ïSW
+ÔbgÇåé¢ ÜÑ%RxSfûößõÛÿ¾ÿÿ?Äÿúú+~é¯ØÌÌ.WO
+@. «Ò/Ø
+-endstream
+-endobj
+-337 0 obj
+-<</Filter/FlateDecode/Length 149>>stream
+-x32W0P0a#
+
+C®B#ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢u¶óÃ¿ÿ¿ÿW±ÿþÿoÅÏÍ¿ÿÿÿgÿÿÿß#
+¸\=¹ ú0
+-endstream
+-endobj
+-322 0 obj
+-<</Filter/FlateDecode/Length 170>>stream
+-x32Q0P0UÐ54P02U02TH1ä*T02P AcCS=C]K=K
+ä\.'O.}O_
+¢ÒT.ýp ".} .}§ g åmÈeË¥ï¦ïììäØØè{æÒwÎÏ)ÍÍ+j±³ãòtQPÛ¸aòÙÌø/ë¿ìííýÿ¯ÊþÿÿT9gâìÿNù0iQ;gC«§B  Ëå3ó
+-endstream
+-endobj
+-319 0 obj
+-<</Filter/FlateDecode/Length 153>>stream
+-x32P0P0b# 2TH1ä*T04W ¹Æz
+-@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬ ¤\¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P
+§Ú¢¦ÅQ
+¶ª«~}|øÙxÃ·OÂ÷~
+e	xÓgºa«§B  7\+Ï
+-endstream
+-endobj
+-261 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x32S0P0b##c
+C®BCK ß Ä5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶fá!~ÿ9ò-rÖþÿAàßõÉ¡ë$âl×,`bPàrõTä 'U(Ä
+-endstream
+-endobj
+-258 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x32S0P0acc
+C®B#C ß Ä5Ò289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-VÊÕ66Æ·ýý÷ûÿÿ×¯¯	ÑK0üÿÿÿ?
+
+
+-L\®
+-\ ,g
+-endstream
+-endobj
+-211 0 obj
+-<</Filter/FlateDecode/Length 139>>stream
+-x32S0P0b#c
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ0±r
+Gü?
+-Ø6ýwfÙnÑ­m"
+,\®
+-\ )ÿ/R
+-endstream
+-endobj
+-207 0 obj
+-<</Filter/FlateDecode/Length 155>>stream
+-x32S0P0b###C
+C®BC
+ ß Ä5Ñ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô¥Mø°çÆÿ\#>;æLxpÏ©ÊÃWdºú¨¶08°p¹z*r X¤,;
+-endstream
+-endobj
+-204 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x32S0P0b#c#C
+C®B#rõ
+
+89ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYH¹DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.OµEM*üÝÙ/øfòÇþg	©OØöG·ëpDÂ&.WO
+@. ÖJ%
+-endstream
+-endobj
+-201 0 obj
+-<</Filter/FlateDecode/Length 155>>stream
+-x32S0P0acc
+C®B#C ß Ä5Ò289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jd*
+?´»ó;²_¾ôûÒÿ]ÿÿq¬øû®ÞõÄmÚ¼M
+-
+
+
+-\®
+-\ Ê,-ñ
+-endstream
+-endobj
+-198 0 obj
+-<</Filter/FlateDecode/Length 170>>stream
+-x31T0 CcKcS
+C®B,bª` Ö3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶ð<Ï=OMH)VËÒª¾jÝÔº·uöÿ@ÐÔ(+iðïÿèà©Â	+.WO
+@. ÖBH
+-endstream
+-endobj
+-174 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x36T0P a#
+cS
+C®B#s ß Ä5ÔJéX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[xæ8àÃ½,ó&½¬ÿ
+w½ÿÿMYçXþ#&6ù,
+\®
+-\ TÝ7R
+-endstream
+-endobj
+-171 0 obj
+-<</Filter/FlateDecode/Length 175>>stream
+-x3²P0P0aSc#
+C®B#c ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶Ð_D Â½÷
+êÏ×/ë_]wþ8I%£äKLÖËý«ÿOýÿûzÝËÜk7¼6
+jà`hàrõTä ±5þ
+-endstream
+-endobj
+-168 0 obj
+-<</Filter/FlateDecode/Length 170>>stream
+-x3²P0P0b#c#
+C®B#C ß Ä5Ö2õ
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jedôxÄ»^¯Û³õñÿõäÍ?Ìþ~ìÿ~õ¡²¼«n$êv
+fe`ärõTä ì2
+
+-endstream
+-endobj
+-165 0 obj
+-<</Filter/FlateDecode/Length 170>>stream
+-x36P0P0TÐ54P0²P02RH1ä*T02W )ê%-õ,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o Ñ\úÎù9¥¹yÅ@-vv\.
+-â'Ws½ÿ»îë­÷ñoþ»$þË][wýë¯Èð£ë£²E,¼;Ö20r¹z*r 
+3
+
+-endstream
+-endobj
+-162 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x3±P0P0bS##
+C®Bc ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢`lüH^Fáo¯¸ú
+]Öoóÿ¯ú
+
+ñ8ücP`ârõTä J1ã
+-endstream
+-endobj
+-159 0 obj
+-<</Filter/FlateDecode/Length 157>>stream
+-x3¶P0P0bcJ1ä*T0ñÁ"Fz
+-z@`aªËåäÉ¥ïé«PRTÊ¥TÉ¥ïTÈ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]´XÙÕÕ¸?lÿöÿ÷ÿÿÿíÿ²·FaÇ:îù¼òÿAàO«§B  §,0Ú
+-endstream
+-endobj
+-156 0 obj
+-<</Filter/FlateDecode/Length 163>>stream
+-x36T0P0a
+cS
+C®B#3 ß Ä5ÒJëX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[ØßüÔ?dþRÐ¾DÞóë¯Ç@þ?ßðÿ¹å±m­7VX$&01(p¹z*r 
+4¶
+-endstream
+-endobj
+-153 0 obj
+-<</Filter/FlateDecode/Length 180>>stream
+-x32Q0P0RÐ5T02T06VH1ä*T0´
+-((é*èèY Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAm\A.Ë¡Kþ¡~eþ­úqúÒÛjwïÝõûÿ§¬ýÿóößÕ{]²M*"AËÕS!
+ ­S5
+-endstream
+-endobj
+-150 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x3²P0P0aSc#
+C®B#c ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶`g{l}lé_ñØZ}ï×¾~Ù·W?Þ»ëôÉÏÿÿÿ¯ôú 
+«§B  ©«0O
+-endstream
+-endobj
+-147 0 obj
+-<</Filter/FlateDecode/Length 140>>stream
+-x32V0P0aC##
+C®BCK ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢`w0ÃÒtÅ¾_ñëÿíÿ?fñ30r¹z*r EZ'
+-endstream
+-endobj
+-144 0 obj
+-<</Filter/FlateDecode/Length 143>>stream
+-x34S0P0bCcc3
+C®BCC ß Ä5Ò2õ
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-j|ý?1ùÿgkµíÿ¡à«§B  ­,
+-endstream
+-endobj
+-141 0 obj
+-<</Filter/FlateDecode/Length 149>>stream
+-x32S0P0ac##
+C®B#C ß Ä5Ò289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jæk(|)ÜË"}íËü7õ2O®ú_ÝºmÚáCn
+
+-.WO
+@. )
+-endstream
+-endobj
+-676 0 obj
+-<</Filter/FlateDecode/Length 91>>stream
+-x34V0P0bK bÈU¨`
+-äLô
+
+ô
+,Á@!9ËÉKßÓW¡¤¨4K?\ÁKßCÁKß)ÀYÁKß%ÚË ËÓEÁ âC«§B  k³å
+-endstream
+-endobj
+-673 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x36P0P0bcc#
+
+C®B#3(k®g¨` ÄÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+@%\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾·.PÆ9?§47¯¨ÅÎËÓEAm»1óO»]×ý÷Þÿoã¥ÿõÿëÚ
+
+
+-
+\®
+-\ ¸,N
+-endstream
+-endobj
+-670 0 obj
+-<</Filter/FlateDecode/Length 132>>stream
+-x36T0P0a
+J1ä*T02ò!"z@i NÎåròäÒ÷ôU()*MåÒªáÒ÷ *áÒw
+-pV0äÒw6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-*EYg[ÌþCÁþp¶Ï'<&.WO
+@. fø1Â
+-endstream
+-endobj
+-667 0 obj
+-<</Filter/FlateDecode/Length 175>>stream
+-x36P0P0SÐ5T06V0²TH1ä*T02W 	eô
+t
+-ô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o É\úÎù9¥¹yÅ@-vv\.
+-j
+w³ä¾Å")¨±VýÒù^[}ýS²ÿÑþöÿ¦ÌZÿ2wé®èDÝ6ôÆ,
+\®
+-\ 
+K3
+-endstream
+-endobj
+-664 0 obj
+-<</Filter/FlateDecode/Length 156>>stream
+-x3²P0P0b#K#
+
+C®B#3 ß Ä5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶Øjq2ÿ²¿ûÿMúÿoËô×>4]h=ÃôÿËþÿÞÿ¿vX04pp¹z*r qÂ/Ï
+-endstream
+-endobj
+-661 0 obj
+-<</Filter/FlateDecode/Length 139>>stream
+-x3²P0P0b#S#
+
+C®B## ß Ä5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ØáyÀ·þ?¬ÿýßÞÚ
+wF.WO
+@. ®),
+-endstream
+-endobj
+-643 0 obj
+-<</Filter/FlateDecode/Length 131>>stream
+-x32U0P0b###C
+C®Bm 1T0Ô289ËÉKßÓW¡¤¨4K?
+(É¥ï&K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+*¶³ãòtQ0Yr
+Gü?È¨é
+-¹\=¹ C(¬
+-endstream
+-endobj
+-640 0 obj
+-<</Filter/FlateDecode/Length 185>>stream
+-x31S0P0RÐ5T01Q0²PH1ä*T01
+-
+-ô
+t
+-ô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o É\úÎù9¥¹yÅ@-vv\.
+-JM#
+
+[¿\û
+ÿ÷ßË¥ìÿÿÝºeßüÿß®]úUÿÿö[}Ïÿÿó·ìUÿÿw|þ¿¯ÿï-ùÀÈ Àåê©È ¥>÷
+-endstream
+-endobj
+-637 0 obj
+-<</Filter/FlateDecode/Length 154>>stream
+-x36T0P0b#K#
+
+C®B#3 ß Ä5ÖJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQàòÜðÿýÿûûÿ¹Êÿ©ÿ½¶üýÿÿãì½ÿÿ­ÿ²GÇAËÕS!
+ Zò.
+-endstream
+-endobj
+-634 0 obj
+-<</Filter/FlateDecode/Length 156>>stream
+-x3´T0P0b#C
+
+C®BCs Ì5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶,±µ
+ã]#Ë®ÄåÞ/Uãûì_Öÿ °iþãKK8¿¾´ÀÃAËÕS!
+ WÂ+ñ
+-endstream
+-endobj
+-631 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x3´T0P0bCS#C
+C®BCc ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô6ÌØý½ëû<u7l÷HÜ}÷ØKMæ,
+\®
+-\ U)0
+-endstream
+-endobj
+-628 0 obj
+-<</Filter/FlateDecode/Length 171>>stream
+-x36V0P0VÐ5T06P0²TH1ä*T02
+-Dõ
+t
+-ô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o É\úÎù9¥¹yÅ@-vv\.
+-j
+Ï÷³$¤ÞpøåË¼õ/k_¿þÿgÖª÷ûgæþ^ºmÚaÎÄ6L
+
+-\®
+-\ c»2/
+-endstream
+-endobj
+-625 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x32T0P0b###K
+C®BCs ß Ä5ÕJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[XPïýÿËþÿªB/«üWÅVý?ªúÿCÓú~+«ÿ'Ü(`dàrõTä ì.?
+-endstream
+-endobj
+-622 0 obj
+-<</Filter/FlateDecode/Length 154>>stream
+-x3´T0P0bC
+#K
+C®BCc ß Ä5Õ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶óqó¿éÿ_Öÿø¸­ü¡ù¿©ÿÿLÿu5cùzïL
+
+-\®
+-\ Uo.L
+-endstream
+-endobj
+-619 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x32T0P0b#C
+
+C®BCÌ5ÕJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[löÉø
+Ú½uëöUýmo¦£ÈËÜ¥
+-¸\=¹ Ð×'»
+-endstream
+-endobj
+-616 0 obj
+-<</Filter/FlateDecode/Length 148>>stream
+-x34W0P0bCsC
+
+C®BC ß Ä5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶cçZýËKcûùÛ7|?1}_ðÚ©"/[¹\=¹ çk'j
+-endstream
+-endobj
+-613 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x36T0P0a
+#K
+C®B#3 ß Ä5ÒJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[8gçßúø²¥¿¾ìß«þßûúëKÿ/üñ¾þúÒÿKîí[-pAËÕS!
+ D11
+-endstream
+-endobj
+-609 0 obj
+-<</Filter/FlateDecode/Length 123>>stream
+-x34V0P0a#C
+C®BK Ì3ÔÊ qr.'¾§¯BIQi*~¸%¾P¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ
+-vv\.
+-#ÄÿCÁÇ.WO
+@. Î$4
+-endstream
+-endobj
+-606 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x32S0P0b###C
+C®Bm 1T0Ô289ËÉKßÓW¡¤¨4K?
+(É¥ï&K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+*¶³ãòtQ°âuM¾M~ûÿíÿïÿÿÿÿßþ/û¿ìQX¤èÀÂàÀåê©È ëd)¹
+-endstream
+-endobj
+-603 0 obj
+-<</Filter/FlateDecode/Length 146>>stream
+-x32U0P0b###C
+C®Bm 1T0Ô289ËÉKßÓW¡¤¨4K?
+(É¥ï&K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+*¶³ãòtQP[ÈñPóÿ
+ÁÀÿ¿|ÿÿ\ÿÒü¿\Ç#ûÿW÷)¶ð08°p¹z*r ÿ*²
+-endstream
+-endobj
+-600 0 obj
+-<</Filter/FlateDecode/Length 91>>stream
+-x34V0P0bK
+C®B e &
+-¦z
+-z` ËåäÉ¥ïé«PRTÊ¥®`Â¥ï"
+¹ô]¢
+-¹
+b¹<]>|HàrõTä qø
+-endstream
+-endobj
+-567 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x34U0PÐ5RÐ54P04W06VH1ä*T0´
+-(%ô,t-Dr.'¾§¯BIQi*~8P¾P¾S³!¾K´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAmÁ¾}×ìÿ?Ñ}Ño«}éÿ¥ÿGõÄ_ñg
+Õ¥É!nX04pp¹z*r eÿ4z
+-endstream
+-endobj
+-547 0 obj
+-<</Filter/FlateDecode/Length 143>>stream
+-x32S0P0VÐ5Q02R06UH1ä*T0´
+-
+-õ
+tõ,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P
+§Ú]¿^Û}ý5á
+3k) #«§B  0/á
+-endstream
+-endobj
+-410 0 obj
+-<</Filter/FlateDecode/Length 190>>stream
+-x36R0P0RÐµP0²¡C®B#s  ±¹¡®¹¥Br.'¾§¯BIQi*~8P¾P
+-¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[ÈßÒpøÁÙò=÷æ/¿öÿåãýÿÿO]wýïëM»¸Ém»Rû¦oÚ}Ñ6]
+-ÇOüÝzëÑþì,&.WO
+@. ë³>
+-endstream
+-endobj
+-407 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x32R0P0b# ²TH1ä*T0´òÁ\C= 'çr9yré{ú*¦réÕpé{ pé;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.Oßüÿ@ð³øÃ¡ñqÓ¾¬ªÛ;Ïjýþúü÷ï.$01(p¹z*r f.\
+-endstream
+-endobj
+-404 0 obj
+-<</Filter/FlateDecode/Length 133>>stream
+-x34R0P0QÐ54P04T06TH1ä*T0
+-
+
+-Lô
+t-õ,s¹<¹ô=}JJS¹ôÃÌ¹ô=J¸ôK´!A,¾¾³³`c£ï
+-4Kß9?§47¯XÁÜÎËÓEáôüÿPðóÃ=&.WO
+@. %á
+-endstream
+-endobj
+-400 0 obj
+-<</Filter/FlateDecode/Length 91>>stream
+-x!0 }_Ñ°u@0A
+-APD@àül
+ÓKîêDKOÎQpRu¢¯TRõ@H0©ç}=;ÌT>0
+æG» Eæü¢M
+ñVyu
+-endstream
+-endobj
+-397 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x34V0P0bCc#
+
+C®BK × Ä3Ñ3T0 âä\.'O.}O_
+¢ÒT.ýpK.} 
+-.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW¬`igÇåé¢ ¶øÚ5ûÿ³L8Þ/­¿7ýßô,ûÿ_úx
+ÁËÕS!
+ ¥î)S
+-endstream
+-endobj
+-394 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x32R0P0b#CC
+
+C®BCs ß Ä5Ñ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶qãZÁo»âÿWÅ_ÿåYÿÿ§þïÿÞ2iþ1È±`hààrõTä ²6+i
+-endstream
+-endobj
+-380 0 obj
+-<</Filter/FlateDecode/Length 149>>stream
+-x36Q0P0bcCc
+C®B#K ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ Ìrå|³ü(ø£ÿÿßþõ¯_?L²cP`ârõTä *·.}
+-endstream
+-endobj
+-352 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x36T0P0a 2QH1ä*T02òÁ\c= ´%X*$çr9yré{ú*¦réUré{ ré;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.OµEsùÇ/ýÿ+þ?ø·ÉôÓy}ý°Ó¥AËÕS!
+ 840V
+-endstream
+-endobj
+-325 0 obj
+-<</Filter/FlateDecode/Length 148>>stream
+-x34W0P0aSCK
+C®BC ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[ó¹%æðÕýÿ¿æLýæÒ»÷÷ûC6¸ZE$:°08p¹z*r aÀ*<
+-endstream
+-endobj
+-316 0 obj
+-<</Filter/FlateDecode/Length 131>>stream
+-x3¶P0P0V0S06Q0´PH1ä*T06()ë*qr.'¾§¯BIQi*~8P
+-¾P	¾S³ãmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]N®0ùÿÏ­¹¡ËÕS!
+ .V
+-endstream
+-endobj
+-313 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x3²T0P0a3#C
+C®B# ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ôvn£¥|Féíß³÷j¿ýo÷ÿÿ¼ÿ{]ºôeý¿y°08p¹z*r -1­
+-endstream
+-endobj
+-292 0 obj
+-<</Filter/FlateDecode/Length 171>>stream
+-x32R0P0RÐ5Æ
+-F
+-)\
+ Ú 
+-ô
+t-õ,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ôK´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAm¡_Þ×µjû/}ýå
+ÿÿË¤ÿÿÿêþ½([«²ázÿ¯øSJª­dÙ¦èÀÂàÀåê©È ÷R3i
+-endstream
+-endobj
+-289 0 obj
+-<</Filter/FlateDecode/Length 148>>stream
+-x34R0P0bCScS
+C®BCC ß Ä5Ñ2õ
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jÏþ©Yÿoú1£bÉþ
+Ë½°08p¹z*r å
+/Ç
+-endstream
+-endobj
+-286 0 obj
+-<</Filter/FlateDecode/Length 143>>stream
+-x32T0P0b#c#C
+C®BC
+ ß Ä5ÕJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-j¹
+ú^ôe{]ò½õúmÅ¥øÿKÿÿ{
+X¸\=¹ ì<*
+-endstream
+-endobj
+-231 0 obj
+-<</Filter/FlateDecode/Length 157>>stream
+-x3²T0P0a3#
+
+C®B# ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ybÖæ¤öû÷×ïÿÿÿõõK¦íßþö÷ßÿÿÿ{ÿ÷¾ÔÑÊ ÀÈåê©È 
+-?2%
+-endstream
+-endobj
+-228 0 obj
+-<</Filter/FlateDecode/Length 157>>stream
+-x36P0P0b#
+C
+
+C®B#s°(PD(ÄÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+@%\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾·.PÆ9?§47¯¨ÅÎËÓEÁøÌOÓC<
+-îÞÿõ
+cù·ßÞÿ¿Ì¿ýVÿÿ¥úü-ûÿÝ¿÷ÿå÷
+
+-
+\®
+-\ 03
+-endstream
+-endobj
+-225 0 obj
+-<</Filter/FlateDecode/Length 156>>stream
+-x36T0P a#KJ1ä*T0² òÁ"z@) NÎåròäÒ÷ôU()*MåÒªáÒ÷ *áÒw
+-pV0äÒw6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-j
+ZÚ¿üÿ¢oþÿæÿùþÿ7¹þu­½\wÇ¯ú¯ûæÿÍ÷ïHèdÜÁÐÀÁåê©È ½t2v
+-endstream
+-endobj
+-222 0 obj
+-<</Filter/FlateDecode/Length 159>>stream
+-x32R0P0TÐµP0Ò
+-)\
+
+-@A#3C= ¹¥Br.'¾§¯BIQi*~8P¾P
+-¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ0¶4=wýwfý¶éÿß.ý½·~ûÿ­¿âÍ~E\åÂàÀÂåê©È X-
+-endstream
+-endobj
+-218 0 obj
+-<</Filter/FlateDecode/Length 146>>stream
+-x32Q0P0b##C
+
+C®B#ß Ä5Ô289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jí,Óø
+Ù¾îUûß÷ÿÿäÐõß.ÝöÎÕhjà`hàrõTä þp'Ë
+-endstream
+-endobj
+-215 0 obj
+-<</Filter/FlateDecode/Length 146>>stream
+-x32W0P0b#S#K
+C®B# ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ0fý]ÿÿÿÿ?û>t¿àû½þëøãØÄ~
+ÁËÕS!
+ "/ÿ
+-endstream
+-endobj
+-195 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x31P0P0bc
+##
+C®Bcs(k¨âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ qÿS6RAtU|ý¿»K_ìúûëýÝ*ÿ·¿â¶÷Ûý=&ø÷ÑúËïcí¾20r¹z*r 3D
+-endstream
+-endobj
+-192 0 obj
+-<</Filter/FlateDecode/Length 163>>stream
+-x3´T0P0VÐ54V04Q06WH1ä*T04(¥ô
+Fz
+-É¹\N\ú¾
+-%E¥©\úá@U\ú
+@E\úNÎ
+-@K´!A,¾¾³³`c£ï
+-ÔÎ¥ïSW
+ÔbgÇåé¢ ÜâÊ¿Éb»Ü·ïï¿ýÏÿ¿÷ÿïÿ °þoÕÿKõ_ÇêmÙ²AËÕS!
+ Ò*4
+-endstream
+-endobj
+-187 0 obj
+-<</Filter/FlateDecode/Length 130>>stream
+-x3´P0P0bC#C
+C®BCß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]ÔÄ^³4µÿÿX
+¸\=¹ u½$µ
+-endstream
+-endobj
+-688 0 obj
+-<</Filter/FlateDecode/Length 98>>stream
+-x34V0P0bC#C
+
+C®B
+ × Ä3Ñ3T0 âä\.'O.}O_
+¢ÒT.ýp
+.} 
+-.}§ gC.}hC.X.O6~~680¨øÀåê©È *M
+-endstream
+-endobj
+-685 0 obj
+-<</Filter/FlateDecode/Length 201>>stream
+-x36W0PÐ5TÐµP06W0²TH1ä*T0¶ Dt
+-ô,tÍDr.'¾§¯BIQi*~8P¾P¾S³!¾K´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAma³1·ëÙª¨X­¥+Vÿâ_7ýÿ¿i
+ül	õÿÿ­¬­ÿÿ+þßôÿKýÿÿßÛûûmò_þuö8?3(dÓÌy
+
+-L\®
+-\ FêB
+-endstream
+-endobj
+-556 0 obj
+-<</Filter/FlateDecode/Length 187>>stream
+-x32W0PÐ5RÐ54P0²P06UH1ä*T06P AS ¥®%HÎåròäÒ÷ôU()*MåÒªâÒ÷ *âÒw
+-pV0äÒw6ä2åÒwÓwvvrllô½Fpé;ççææµØÙqyº(¨-\ &X¸Fµdzlöñ/ûÿÙ¤q¦½I¥þefýÿõKøß4¡/þÿÿ««þ·ùã¿­V¬ø«iêµAËÕS!
+ u½=­
+-endstream
+-endobj
+-482 0 obj
+-<</Filter/FlateDecode/Length 149>>stream
+-x3´P0P0a3#C
+C®BCS ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jY[b]_õ²ª?ðÙ¥··«Kë4ÿß^ï«c°AËÕS!
+ ¬
+* 
+-endstream
+-endobj
+-391 0 obj
+-<</Filter/FlateDecode/Length 148>>stream
+-x34W0P0bCCK
+C®BCß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶b§ö:÷Æÿ?ß·EX/þ¾ùß.Ù2÷ìD.WO
+@. /(¢
+-endstream
+-endobj
+-301 0 obj
+-<</Filter/FlateDecode/Length 168>>stream
+-x32R0P0b#CcS
+C®BC3 ß Ä5Õ3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶$gù)õ/ëÿMÿÿ²òóEÙ}ï=íÿºôÿéÿ¦Ç³/}»t#«§B  z3Í
+-endstream
+-endobj
+-264 0 obj
+-<</Filter/FlateDecode/Length 105>>stream
+-x34Q0P0V02P°T06UH1ä*T0
+-(*ëeDr.'¾§¯BIQi*~¸¾P	¾S³!¾K´!A,§Cìøó§ÆËÕS!
+ BÅÑ
+-endstream
+-endobj
+-106 0 obj
+-<</Filter/FlateDecode/Length 160>>stream
+-x3²P0 C#KcS
+C®B$äè±%X*$çr9yré{ú*¦réUré{ ré;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.Oµ
+þn<»
+mYEæªìºîy¢mÿx¤6ÑÔIBø?2¨tg	8ÀÂàÀåê©È ¤8í
+-endstream
+-endobj
+-103 0 obj
+-<</Filter/FlateDecode/Length 138>>stream
+-x3´P0P0bC3c
+C®BC ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢09¬òÖð×brÛ&.WO
+@. ¥<.`
+-endstream
+-endobj
+-100 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x32S0P0b##C
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-ê¦lbokë·MÿYÿïVüÛ¥ÿíÿ·20r¹z*r Ìe(ô
+-endstream
+-endobj
+-97 0 obj
+-<</Filter/FlateDecode/Length 93>>stream
+-x
+
+1@@Dû9ÅÀþ¥]+±
+J!*
+-BçìË¼¼7ZP'Ui¹*t°Ì3¥dRýã²ÃÐñ:ï
+-f¤
+i¿¸¾¦ÂøI!3gùÄMàÍ¸
+-endstream
+-endobj
+-93 0 obj
+-<</Filter/FlateDecode/Length 143>>stream
+-x32U0P0a#J1ä*T02P0è* qr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[Ôt}qÛË]¿²Ùÿó
+-ßGwË6©7N[¹\=¹ (ª
+-endstream
+-endobj
+-90 0 obj
+-<</Filter/FlateDecode/Length 175>>stream
+-x31P0P0a3c
+C®Bcß Ä5Ö3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶àYSBs²aÛêK¾ÌÛ«þ7>þüÿ'Wkô~ÿÍ½öïV4¯îi[6$ñ08°p¹z*r ÒÓ3å
+-endstream
+-endobj
+-87 0 obj
+-<</Filter/FlateDecode/Length 154>>stream
+-x32S0P0b##C
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-&¦Y·
+º½vËÞ²×¹ºí¿¿/²û²7úå^µ/ëÃe
+]ÀÄ Àåê©È Q-c
+-endstream
+-endobj
+-587 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x3²P0P0VÐ54R02Q06WH1ä*T02(X*ë%
+-õ,s¹<¹ô=}JJS¹ôÃª¸ô=¸ô
+hC.X.}7}gg7 7ÀÆFß¨Kß9?§47¯¨ÅÎËÓEAmáüxï/û¿ì÷þP2ö
+-.WO
+@. Á2¹
+-endstream
+-endobj
+-570 0 obj
+-<</Filter/FlateDecode/Length 156>>stream
+-x32V0P0a##C
+C®B#rô
+
+89ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYH¹DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.OµE3Ä9.Û³³ëÆ¿i@¨Ëºt	®Êéîg3v^»ÂàÀÂåê©È Ä*ê
+-endstream
+-endobj
+-523 0 obj
+-<</Filter/FlateDecode/Length 160>>stream
+-x32S0P0acc
+C®B#C ß Ä5Ò289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jí,
+Úåä{þÝÿñ¿w¬NßüÃ'ì÷þÞ?åÇ¾U
+ºZ
+mãÑ`hààrõTä l/
+-endstream
+-endobj
+-506 0 obj
+-<</Filter/FlateDecode/Length 91>>stream
+-x1@@Dû9ÅÀîÇ¿ÀZ_H¨¢B© Ü]Çîóy£J)©Rq¬yj!I¥Z³÷õìpSúÀu¸04qøùå¼h#~­g²
+-endstream
+-endobj
+-484 0 obj
+-<</Filter/FlateDecode/Length 113>>stream
+-x32T0P0S04W0´T0²TH1ä*T04
+-()éåDr.'¾§¯BIQi*~8P¾P
+-¾S³!¾K´!A,§4Á
+-?~TTp¹z*r ^\?
+-endstream
+-endobj
+-477 0 obj
+-<</Filter/FlateDecode/Length 159>>stream
+-x34W0PÐ5VÐ54P04R06SH1ä*T04
+-()èéY*èZä\.'O.}O_
+¢ÒT.ýp *.} ".}§ gC.}hC.X.}7}gg7 7ÀÆFßh6¾s~Nin^1P
+§ÚB¦Ëÿ]»fÿÒò	3ÿCÁ©=ñkS®ªìhmap`árõTä 6v1R
+-endstream
+-endobj
+-474 0 obj
+-<</Filter/FlateDecode/Length 162>>stream
+-x36W0P0bcJ1ä*T0ñÁ"Fz
+-z@`aªËåäÉ¥ïé«PRTÊ¥TÉ¥ïTÈ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]¸'ÛÉ?üû÷ßÿïÌÿÿÿ/gÿüüû÷ÿÖüÿÿõÿõëå¹\=¹ g4È
+-endstream
+-endobj
+-462 0 obj
+-<</Filter/FlateDecode/Length 155>>stream
+-x34W0P0bCcc
+C®BCC ß Ä5Ò2õ
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jþæ&ÿÿ?ëû¼©ÿë_/ý¿ôWÜ^]ý¿¾lãcP`ârõTä fM-
+-endstream
+-endobj
+-459 0 obj
+-<</Filter/FlateDecode/Length 160>>stream
+-x32S0P0QÐ5U04W06UH1ä*T04
+-
+HÏPA×DÏR!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(¨­ØáX5ï
+ü®ßþ»þwýÿÿÿ¦ÿþ²nÚ®¨¨¨À ¬)
+,\®
+-\ $&0©
+-endstream
+-endobj
+-456 0 obj
+-<</Filter/FlateDecode/Length 137>>stream
+-x32S0P04PÐ5Q02V06UH1ä*T04([¥ô
+tõ,s¹<¹ô=}JJS¹ôÃª¸ô=¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P
+§Â3¦úÿ0áp
+-
+«§B  l$Ñ
+-endstream
+-endobj
+-453 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x32U0P0QÐ54R02P06WH1ä*T04Å-Lô
+z
+-É¹\N\ú¾
+-%E¥©\úá@U\ú
+@E\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾7P;¾s~Nin^1P
+§ÚÂõÿ!àef¢FÓä9éÛ·¡"ÿoß¾}AËÕS!
+ b6
+-endstream
+-endobj
+-450 0 obj
+-<</Filter/FlateDecode/Length 155>>stream
+-x32S0P0b#cc
+C®B## ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ°øõÿÿÿgç9ì?ûÅ¹¶î>ÿÛûúÝÞ]Ïî,`bPàrõTä È/Ü
+-endstream
+-endobj
+-447 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x32S0P0b##c
+C®B#ß Ä5Ô289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-j
+m­Ì¾ÌzQÿ_#¥fVWú0øóëå[.WO
+@. ÿ,À
+-endstream
+-endobj
+-444 0 obj
+-<</Filter/FlateDecode/Length 181>>stream
+-x32S0P0RÐ5Q02V06UH1ä*T02
+-([*é*èëY*$çr9yré{ú*¦réqé{ Õpé;8+ 9.Ñ\±\únúÎÎn@n¾·.PÆ9?§47¯¨ÅÎËÓEAmcÁ-/ÿM/ý¿þúúë\þæV{÷f_}ýõµ½êW~ý¸[ýÿú]ÿ3
+01(p¹z*r µU:p
+-endstream
+-endobj
+-307 0 obj
+-<</Filter/FlateDecode/Length 174>>stream
+-x32T0P0RÐ5T0´P0²PH1ä*T04
+-
+-ô
+t
+-ô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o É\úÎù9¥¹yÅ@-vv\.
+-jK
+-
+ç;²q{ýÝ[ÿÿý[ÝöiG÷}è>ï¹Wáßåûÿ(ÍÛ«»õFñ1&.WO
+@. ªr2
+-endstream
+-endobj
+-304 0 obj
+-<</Filter/FlateDecode/Length 146>>stream
+-x34W0P0bCCK
+C®BCß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶ñ8ÇÎÖ·Gï\þÚ;nØ´I^ª.<Î ÀÈåê©È ¾e(
+-
+-endstream
+-endobj
+-277 0 obj
+-<</Filter/FlateDecode/Length 200>>stream
+-x3¶P0P0VÐ5&
+-Æ¦
+-)\
+
+-Æ@QSc=C]K=K
+ä\.'O.}O_
+¢ÒT.ýp ".} .}§ g Ç%ÚË KßMßÙÙ
+-È
+-°±Ñ÷Í¥ïSW
+ÔbgÇåé¢ ¶ð|{YÂ|N/³/å/¿öußüèÿËÿYÿÿÿ_muìúß×§L{!|=ëívïüK«¹y³)tÕÙÿ]wíh}ô
+-.WO
+@. JBj
+-endstream
+-endobj
+-181 0 obj
+-<</Filter/FlateDecode/Length 170>>stream
+-x32T0P0RÐ5T0´P0²PH1ä*T04
+-
+-ô
+t
+-ô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o É\úÎù9¥¹yÅ@-vv\.
+-jË*
+/QÿÂúû×ûÇö¯ÕÕ¢üÆþöûS=ñ¿V:ªn²Ø;Ý`Ã.WO
+@. øÛ0é
+-endstream
+-endobj
+-132 0 obj
+-<</Filter/FlateDecode/Length 143>>stream
+-x32T0P cKC
+
+C®Bm ±P0ÔJqr.'¾§¯BIQi*~8PKßL:8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b b;;.Oµ%
+%_(Ü\uß_öÿàëÙ{sn8$ÂàÀÂåê©È Å(#
+-endstream
+-endobj
+-129 0 obj
+-<</Filter/FlateDecode/Length 87>>stream
+-x34R0P0b
+ bÈUæLô
+
+ô
+,Á@!9ËÉKßÓW¡¤¨4K?\ÁKßD88+ré»DrÄryº($|øÀåê©È p­
+-endstream
+-endobj
+-126 0 obj
+-<</Filter/FlateDecode/Length 196>>stream
+-x36R0P cKJ1ä*T02ò!"z
+-@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ôò·´Ä¤
+mH=ÕÄÓW2SöRÂ
+>ôYüò4²¸~ÙàßþÒ½õÿÿÿÿbáûß/k×o²4qY.a;ñ ëÄ{'
+NÎ8]@Ç¨°¡ËÕS!
+ áC²
+-endstream
+-endobj
+-123 0 obj
+-<</Filter/FlateDecode/Length 125>>stream
+-x34R0P0a#K
+C®BK Ì3ÔÊ qr.'¾§¯BIQi*~¸%¾P¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+V°´³ãòtQ`UÛþ	üS8ÀÂàÀåê©È (
+-endstream
+-endobj
+-120 0 obj
+-<</Filter/FlateDecode/Length 154>>stream
+-x32T0P0bC
+#
+
+C®BC3 ß Ä5ÒJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[V°PÜè]SâKû;ÎÛïOÙ±n¿÷-».AT¬¾gFÕqF.WO
+@. u-[
+-endstream
+-endobj
+-116 0 obj
+-<</Filter/FlateDecode/Length 136>>stream
+-x32V0P0b#CC
+
+C®B#r
+-õR@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]le²eÛ_Ú_ÿ	
+-
+
+
+-\®
+-\ S(Æ
+-endstream
+-endobj
+-113 0 obj
+-<</Filter/FlateDecode/Length 134>>stream
+-x34S0P0aC
+
+C®BCc ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ°mUÛÊÄòÛÿWöñÿ ð¨AËÕS!
+ Å%
+-endstream
+-endobj
+-110 0 obj
+-<</Filter/FlateDecode/Length 145>>stream
+-x3´P0P0a3C
+
+C®BCS ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[RxHïÞä*ß×U
+
+-ä?¸Úg×ÝNÔ1XÀÄ Àåê©È ¼&&
+-endstream
+-endobj
+-84 0 obj
+-<</Filter/FlateDecode/Length 153>>stream
+-x32W0P0b#ScS
+C®B# ß Ä5ÔJéX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[sÀÀÒt÷øYûPÜü
+öÛý¿þÃÁ?õO
+-w
+X¸\=¹ W;6×
+-endstream
+-endobj
+-80 0 obj
+-<</Filter/FlateDecode/Length 155>>stream
+-x32W0P0a#3
+C®B#ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶Hr237's£·÷Û¬ëÎòÿ?eí}·Û´[Ñ¦I~b`ärõTä ö)¸
+-endstream
+-endobj
+-77 0 obj
+-<</Filter/FlateDecode/Length 155>>stream
+-x32V0P0aKcs
+C®BC
+ ß Ä5ÔJéX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[4ñÈÿ_ÿ_ÿz½xÌ¬íÿÀ/«ûwËsL
+
+-\®
+-\ Ð½4y
+-endstream
+-endobj
+-74 0 obj
+-<</Filter/FlateDecode/Length 180>>stream
+-x31U0P0b#J1ä*T01P0é*èX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[8gGúÿåÿÿªéÿiýÙÿÿªýÿï¹ÿë¾ùµ¿?¾ü¤ þßäúÿKîÿi¾ü¡É#öÕ
+-
+
+
+-\®
+-\ K
+?ã
+-endstream
+-endobj
+-71 0 obj
+-<</Filter/FlateDecode/Length 173>>stream
+-x31U0P0b#c
+C®Brô
+
+ô
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(¨ó
+-e}>÷õÄËEVÿÿÝÿÿÿwfýÿÿoþÿÿÛt,7öÿÿßúòßßOáò.WO
+@. ×
+-H"
+-endstream
+-endobj
+-68 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x34W0P0RÐ5S04Q02VH1ä*T04
+-
+-ô
+tMõ,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P
+§Ú²ÿÿÿÿñoûzþ?üap`árõTä È+º
+-endstream
+-endobj
+-64 0 obj
+-<</Filter/FlateDecode/Length 166>>stream
+-x32S0P0b#cS
+C®B#c ß Ä5ÔJéX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[s@ÏÒt÷ø)ó·õÃ¾½¬/«â¦/XmRZ÷ïþýíï¿¿ý{äC«§B  %6ñ
+-endstream
+-endobj
+-61 0 obj
+-<</Filter/FlateDecode/Length 170>>stream
+-x36U0P0bcCc
+C®B#K ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ zTmÍï¿ëëþ×ÿÿÿ?nßô¥Ymç¿ýíßß@¿úõ½CD\48¸\=¹ |¼6Õ
+-endstream
+-endobj
+-58 0 obj
+-<</Filter/FlateDecode/Length 180>>stream
+-x36V0P cs
+C®B#s Ì5Ö3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶H²¥
+ãÀ½&
+[
+ûþK«|ÿ¿Ý4_|ÿ§¬érÓ¿®úºtéµi@0=
+-¼½^òö~})ßËAËÕS!
+ ¸×7³
+-endstream
+-endobj
+-55 0 obj
+-<</Filter/FlateDecode/Length 188>>stream
+-x36W0P0aSS
+C®Bc# ß Ä5Ö3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶`ÁÍþ'ÌÏþOâ{7ëýâ0úÏÉæ
+«þúêý_=É<¹Zÿíÿ÷ß±eË.}»´ÇàP°Ã=ÉO
+-
+
+
+-\®
+-\ vF½
+-endstream
+-endobj
+-52 0 obj
+-<</Filter/FlateDecode/Length 213>>stream
+-x35R0P0QÐ5T05 ¡C®B3  k¨`¢g¨ k gi F
+-É¹\N\ú¾
+-%E¥©\úá@\ú
+@
+\úNÎ
+-@Ê%ÚË KßMßÙÙ
+-È
+-°±Ñ÷Ï¥ïSW
+ÔbgÇåé¢ ¶pÎ¾ë,5Ø®s¨ýeidõÒnú¿âÖ__ýýúÿÎòÿÿO3ký&ÉýoóÿßßÿöïïßþÎèÛÍÿíTÜÁ&ÿfùl
+	L
+
+-\®
+-\ µvGó
+-endstream
+-endobj
+-49 0 obj
+-<</Filter/FlateDecode/Length 167>>stream
+-x32S0P0acC
+C®B#ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]ÔÛ%&ôðì¿àøe¾çãïÿ÷
+ó
+-¨VçL1Úðá¼bß½Ãuïß_]Ð÷2qºÔ,
+\®
+-\ þ3
+-endstream
+-endobj
+-46 0 obj
+-<</Filter/FlateDecode/Length 163>>stream
+-x3²T0P0b#scC
+C®B# ß Ä5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ôò÷	6é4ñMHÌ~Éò+¶¶G¯ÍþÿOÓ¸ÿ¥Û¿lû{é6gb@Dú1&.WO
+@. b.
+-endstream
+-endobj
+-42 0 obj
+-<</Filter/FlateDecode/Length 163>>stream
+-x3²T0P0ascC
+C®B#S ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ôòws
+loH|7¹ê¯ùúõW¿Ë+0©rµúþµû%»½ó'ê¶	D?f`ärõTä æ¼0
+-
+-endstream
+-endobj
+-39 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x32Q0P aCKcc
+C®BCS ß Ä5Ñ3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶hâ)qnó'WöÿG¿
+-Õy°08p¹z*r $.p
+-endstream
+-endobj
+-36 0 obj
+-<</Filter/FlateDecode/Length 170>>stream
+-x32Q0P0RÐ5T02T06VH1ä*T0´
+-((é*èèY Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAm±
+
+Â|Ï½ùÕþÿÿñþ?ü4úÿïzÕÿ\Ý×-h04pp¹z*r Í2Ü
+-endstream
+-endobj
+-679 0 obj
+-<</Filter/FlateDecode/Length 178>>stream
+-x36R0P0SÐ5T06V0²TH1ä*T02
+-(eô
+t
+-ô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o É\úÎù9¥¹yÅ@-vv\.
+-j
+w³ä¾Å")¨±VýÒù^[}ýS²ÿÑV7gñëÿO®Zúïþ®·ì¶I¨>ÇÎ ÀÈåê©È i§5
+-endstream
+-endobj
+-581 0 obj
+-<</Filter/FlateDecode/Length 165>>stream
+-x36V0P0bc3cS
+C®Bm 1U0ÔJéX
+©Br.'¾§¯BIQi*~8P	¾t
+-pV0äÒw6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@Åvv\.
+-j
+Ïòq6ñs|äÜyÁCuéÕ¿ã
+ÿÿÿÿËOYçX,Äÿ#
+-	Ì
+X¸\=¹ å»;E
+-endstream
+-endobj
+-559 0 obj
+-<</Filter/FlateDecode/Length 172>>stream
+-x32S0P0TÐ54T02Q02TH1ä*T02()ê$
+-ô,s¹<¹ô=}JJS¹ôÃª¸ô=¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o v.}çüÒÜ¼b ;;.OµW\V[uG aÿí¿zÿ{ï¯¿tûÿ¯û_o¬ÿ·ÿË~ë_%{Â®
+jà`hàrõTä 
+6
+-endstream
+-endobj
+-532 0 obj
+-<</Filter/FlateDecode/Length 168>>stream
+-x32R0P0RÐ5 bÈU¨`h	5P0è*èZêY*$çr9yré{ú*¦réqé{ Õpé;8+ )hC.X.}7}gg7 7ÀÆFßh4¾s~Nin^1P
+§Ú"i7Ù
+5÷(ßìUU×ÿÿèYÿoÊ¬õ¯w)¯»á©Ûüñ¿÷ÿ/û?e4p04p¹z*r 'J2
+-endstream
+-endobj
+-514 0 obj
+-<</Filter/FlateDecode/Length 105>>stream
+-x34U0P0VÐ54P "S
+C®Bs oª`¬g¨ k©g©ËåäÉ¥ïé«PRTÊ¥®`Î¥ïTÂ¥ïà¬`È¥ïmÈeËåé¢À'LL,,
+
+
+-
+-\®
+-\ 
+jW
+-endstream
+-endobj
+-511 0 obj
+-<</Filter/FlateDecode/Length 205>>stream
+-x36W0P0WÐ54P0¶P06UH1ä*T06(*ë*èZêY*$çr9yré{ú*¦réqé{ Õpé;8+ 9.Ñ\±\únúÎÎn@n¾7Ðh.}çüÒÜ¼b ;;.Oµ;?&ôÎ¨b¨ðÜ«öe¯ö¥Zýè¥ÿ¦ÿÿ§©ÿoëzï/»®x·äªÞg{Ynû+ºÆéÆÀç>þ»ôõ×±]ÿ¶08°p¹z*r ÙÓE²
+-endstream
+-endobj
+-508 0 obj
+-<</Filter/FlateDecode/Length 138>>stream
+-x3´T0P0b#c
+C®B#C ß Ä5Ö2õ
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jØþYÿo:*±ÑDÁ
+ËÕS!
+ úÒ-]
+-endstream
+-endobj
+-362 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x3¶P0P0VÐ5U06Q0²TH1ä*T06
+-Dõ
+tMô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶°éÁø§¶à¯3ëA(÷
+«§B  Íº/U
+-endstream
+-endobj
+-359 0 obj
+-<</Filter/FlateDecode/Length 168>>stream
+-x36W0P0bcSJ1ä*T06òÁ"Fz
+-z@`aªËåäÉ¥ïé«PRTÊ¥TÉ¥ïTÈ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]ÔÄôéV_ÿzQ¶þÒ×__öïU¿þúÒs¾Kßþ¸éÿ¦¯¿¾´êW³¢3 #«§B  Üë7&
+-endstream
+-endobj
+-295 0 obj
+-<</Filter/FlateDecode/Length 156>>stream
+-x32T0P0RÐ5T0´T0²PH1ä*T04
+-
+"z
+-ºz
+-É¹\N\ú¾
+-%E¥©\úá@E\ú
+@5\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾7Ðd.}çüÒÜ¼b ;;.Oµ}g
+÷íxxµ÷ú®¯­Ûÿÿúÿÿß01(p¹z*r ô+ø
+-endstream
+-endobj
+-267 0 obj
+-<</Filter/FlateDecode/Length 169>>stream
+-x31P0P0b#C
+C®BcÌ5Õ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô66Y·:ô½è»¥¼}i¢Ú!ß»÷ÿ[ýÉ$ïÿÿÿ{ªìªKÅÿß¿dÚ´w°08p¹z*r Æå8(
+-endstream
+-endobj
+-253 0 obj
+-<</Filter/FlateDecode/Length 156>>stream
+-x32S0P0b#cc
+C®B## ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[ñÂ°(kdã~ÞßuÿëþÿýþþÖÖ¿þúúe
+7G!oPC«§B  #º0Ä
+-endstream
+-endobj
+-250 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x32S0P0b#Sc
+C®B# ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ°bá{rÍÀüáþüûÿÿý²Gõhé} ÷ïþÿÿÿ_þÿGsÒþD.WO
+@. Yn2
+
+-endstream
+-endobj
+-247 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x32Q0P0S02P02T06UH1ä*T04
+-(3=C 
+HÎåròäÒ÷ôU()*MåÒÊré{I§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+TlgÇåé¢ ¶¦Oë·§þIÿ.ýÿ³âTÇ}¾¡oM¹\=¹ £'®
+-endstream
+-endobj
+-244 0 obj
+-<</Filter/FlateDecode/Length 166>>stream
+-x32S0P0TÐ54T02V02TH1ä*T02()ê$
+-ô,s¹<¹ô=}JJS¹ôÃª¸ô=¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o v.}çüÒÜ¼b ;;.O{
+G2³6ûÅ¹¶îþÿÿÿ{_ß²Û»ëÐCÜó¹01(p¹z*r |2?
+-endstream
+-endobj
+-241 0 obj
+-<</Filter/FlateDecode/Length 151>>stream
+-x32S0P0b#c#C
+C®B#rõ
+
+89ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYH¹DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.OµÅ6_¾äÌP«öëÑìÇgºúßÝOlÝÍ#ÂàÀÂåê©È 
+(ÿ
+-endstream
+-endobj
+-238 0 obj
+-<</Filter/FlateDecode/Length 93>>stream
+-x34Q0P aK#C
+C®BS Ï Ä3Ñ3T0 âä\.'O.}O_
+¢ÒT.ýpS.} 
+-.}§ g åmÈeËåé¢PðãÇ ó¹\=¹ ¯¾¶
+-endstream
+-endobj
+-33 0 obj
+-<</Filter/FlateDecode/Length 181>>stream
+-x36U0P0VÐ5T0"S
+C®B#
+  PØLÁXÏPA×@ÏÒ s¹<¹ô=}JJS¹ôÃ*¹ô=
+-¹ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o ñ\úÎù9¥¹yÅ@-vv\.
+-j
+Ú[J(=oH}«pâµçËyûæíõëùÿ¦ñ±ßÿìþîÛ;WwËÃ,01(p¹z*r t7Z
+-endstream
+-endobj
+-30 0 obj
+-<</Filter/FlateDecode/Length 171>>stream
+-x32W0P0aScS
+C®B#c ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶`g»âöûÿA@ù=ÇÁÿRJ¯~¿Îþÿÿ¾áïïß-»([&áõáA«§B  p7\
+-endstream
+-endobj
+-27 0 obj
+-<</Filter/FlateDecode/Length 134>>stream
+-x34Q0P0a#cS
+C®BCß Ä5Ô2õ
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jkËÌºû<ª1g`ärõTä ½q.
+-endstream
+-endobj
+-24 0 obj
+-<</Filter/FlateDecode/Length 146>>stream
+-x32Q0P0b###C
+C®Bm 1T0Ô289ËÉKßÓW¡¤¨4K?
+(É¥ï&K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+*¶³ãòtQP[lgáÆcË"})?úRþ÷ÿÿ«­]÷uÛ´[Ñ
+
+\®
+-\ tó),
+-endstream
+-endobj
+-21 0 obj
+-<</Filter/FlateDecode/Length 137>>stream
+-x3´T0P0as#C
+C®BC3 ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jkdô[®TÏ[ñõ?Üñ¹ÁÐÀÁåê©È i(¶
+-endstream
+-endobj
+-18 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x34Q0P0aCc
+C®BCr
+-õRz@`aªËåäÉ¥ïé«PRTÊ¥TÉ¥ïTÈ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô6¶ï--ÿÿÓ#KÓÝÿ¡àC«§B  Q +¿
+-endstream
+-endobj
+-14 0 obj
+-<</Filter/FlateDecode/Length 165>>stream
+-x32Q0P0aCcc
+C®BCK ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶¤¢ {FÁõûß
+|û_m·|üÒkÓ¦GAl¦®ÞôÐ¥1UÇ¹\=¹ $.Ë
+-endstream
+-endobj
+-11 0 obj
+-<</Filter/FlateDecode/Length 181>>stream
+-x32Q0P0RÐ5T02T06VH1ä*T0´
+-((é*èèY Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAm±
+
+ëò½¾æ{ÿ3ûÿûÿ§¬ýÑµesÿn.gúéÏ{[®¿^²mÒMi8¸\=¹ ª7Ö
+-endstream
+-endobj
+-8 0 obj
+-<</Filter/FlateDecode/Length 173>>stream
+-x36W0P0bccS
+C®Bcß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶°éaÿ¯ú_ÊËÿm¿üiÝÿæÿùþÿ7¹þã>ÿ×~ÕYÿoôÎå¹\=¹ "9%
+-endstream
+-endobj
+-496 0 obj
+-<</Filter/FlateDecode/Length 87>>stream
+-x3±T0 BC#
+Cc
+C®B,¨` gÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+
+-\úNÎ Ê%ÚË ËÓEá?p¹z*r ±Ä
+-endstream
+-endobj
+-438 0 obj
+-<</Filter/FlateDecode/Length 182>>stream
+-x36W0P0bCc
+C®Bc
+ ß Ä5Ö3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶hÂÑÕ<â×]ò¾ô¡IÞÛSDËªì­­µUqçPü«öûËúåÿß{þÿöÿÒßýÿ¯=Ê0(`dàrõTä  9ü
+-endstream
+-endobj
+-435 0 obj
+-<</Filter/FlateDecode/Length 160>>stream
+-x36U0P0bc#c
+C®Bcrô
+
+ô
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(ÄÌùa?ÿû÷ßÿýÿÿGý×¯ÿÕüû÷ÿÿÿ~ >òBAËÕS!
+ ®»5a
+-endstream
+-endobj
+-389 0 obj
+-<</Filter/FlateDecode/Length 156>>stream
+-x32S0P0b#c
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ°S]UÕÈ
+»îë øW]×(*bÿ¿üÿßëR íÄ2õoM¹\=¹ 6
+-endstream
+-endobj
+-387 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x3´P0P0bCS#C
+C®BCc ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]ÔvÊdw½øÉâÇÿÿSçN5ïþþ¿ûG¨+ß´Ï¶08°p¹z*r ÆB+
+
+-endstream
+-endobj
+-365 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x32S0P0b#c
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ0ÿÍ"¡»eÿmï×«Þ¯ÿvéÒþìÿ@ðÁáÿ&.WO
+@. Û-õ
+-endstream
+-endobj
+-341 0 obj
+-<</Filter/FlateDecode/Length 154>>stream
+-x36R0P ac e¡bÈU¢
+-À\#=C NÎåròäÒ÷ôU()*MåÒJré{I§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+TlgÇåé¢ "49,ÇB¿õëËª¸éKAÄò¿×¿ýûåþ¿û÷÷oÿ¿ýûwac6&.WO
+@. Î2
+-endstream
+-endobj
+-338 0 obj
+-<</Filter/FlateDecode/Length 86>>stream
+-x32T0 BCC# i¤bÈUb
+ô
+R@"9ËÉKßÓW¡¤¨4K?
+¨KßCÁKß)ÀD¹DrÄryº(üÿÿËÕS!
+ Qý
+-endstream
+-endobj
+-332 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x32S0P0b#3#C
+C®Bm 1T0Õ289ËÉKßÓW¡¤¨4K?
+(É¥ï&K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+*¶³ãòtQPÛ¸¡1£ßôÒþ/ë¿ìííýÿ¯Êþÿ__ª^ÿþoe^ÇÿÇø¸\=¹ £g0<
+-endstream
+-endobj
+-271 0 obj
+-<</Filter/FlateDecode/Length 176>>stream
+-x36T0P0b#sc
+C®B# ß Ä5ÖJëX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[lg°¡qà!¹&ö«¿ê×ï((Êê[ôðíÞ=æÈ|¨þpÿ{|¦óÃ¥¹[¹\=¹ Ú5
+-endstream
+-endobj
+-256 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x32S0P0acc
+C®B#C ß Ä5Ò289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-VÊÕ66Æ·ÿþþÿÿ_ýxÎÂøûÊßþþÝÿÿÿëK_;Vµ20r¹z*r D1.©
+-endstream
+-endobj
+-175 0 obj
+-<</Filter/FlateDecode/Length 162>>stream
+-x36T0P0a
+cS
+C®B#3 ß Ä5ÒJëX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ0f2Ê®ÿöh~sEúÕßýÿ@ÿ×Ç½Þ²Ci¡^³è
+L
+
+-\®
+-\ Ð35!
+-endstream
+-endobj
+-172 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x31V0P0bc
+C®Bc
+ Ì5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢`ÚùäÊù¶¢çÿÑÁ]½¿nÇnÙ&¡Ú¦pÐ
+ÁËÕS!
+ o[9
+-endstream
+-endobj
+-169 0 obj
+-<</Filter/FlateDecode/Length 163>>stream
+-x36T0P0RÐ5
+-FF
+-)\
+
+-Ff@Qc##=C]K=K
+ä\.'O.}O_
+¢ÒT.ýp ".} .}§ gC.}hC.X.}7}gg7 7ÀÆFßh4¾s~Nin^1P
+§qúqKÓû8÷Íþýÿö ø«ÿÛ{×Õ²rúò@~
+«§B  [/·
+-endstream
+-endobj
+-166 0 obj
+-<</Filter/FlateDecode/Length 161>>stream
+-x3²P0P0b#3c
+C®B#ß Ä5Ö3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶bGÆá'ù_¯zðÚkÒ¥Ù×výþoÿ¯ÿÿÿ¿u`apàrõTä @^1­
+-endstream
+-endobj
+-163 0 obj
+-<</Filter/FlateDecode/Length 172>>stream
+-x31R0P acKc
+C®Bcs ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶à`CòËÿ/ÿÍÿ×½üýÚ/ÿ_ÆïÛ~ùÿÒº_÷å_ì°þýòÿ¥üó®I`dàrõTä Îk9*
+-endstream
+-endobj
+-160 0 obj
+-<</Filter/FlateDecode/Length 185>>stream
+-x3²P0P0RÐ54T02S02RH1ä*T02(+é%
+-ô,s¹<¹ô=}JJS¹ôÃª¸ô=¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o v.}çüÒÜ¼b ;;.Oµ%iÙ
+ser®{î÷ó¸¶ýÿÿÿ{ËvgÆô·®ø_óÊ}ûòÅU;îÿrÕdwlÐa
+-	
+¸\=¹ ßð7j
+-endstream
+-endobj
+-157 0 obj
+-<</Filter/FlateDecode/Length 177>>stream
+-x3²P0P0aSc#
+C®B#c ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶h¾­úéK÷Öýû÷O*WO;;?ßãÞæ*Ç?fß­µ*ºî0Ë6ÅC
+-
+
+
+-\®
+-\ îv3µ
+-endstream
+-endobj
+-154 0 obj
+-<</Filter/FlateDecode/Length 133>>stream
+-x32T0P a#c
+C®BCK Ì5ÔJéX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ8¹R^ÿ?
+-Èg`ärõTä "+@
+-endstream
+-endobj
+-677 0 obj
+-<</Filter/FlateDecode/Length 166>>stream
+-x32T0P0UÐ5T02R0²PH1ä*T04
+-(Y*ê*èèY*$çr9yré{ú*¦réqé{ Õpé;8+ré»DrÄré»é;;»¹66úÞ@¹ôósJsóZìì¸<]Ô2&Ï\7ý{|l}÷ÿÿ/Uÿÿ?ªúéß ð"/Ë¦IX04pp¹z*r Õ±-
+-endstream
+-endobj
+-674 0 obj
+-<</Filter/FlateDecode/Length 104>>stream
+-x34V0P°T04W04U0²TH1ä*T0()Xê¥Dr.'¾§¯BIQi*~¸¾P	¾S³!¾K´!A,§
+-
+
+C«§B  õ[ª
+-endstream
+-endobj
+-671 0 obj
+-<</Filter/FlateDecode/Length 149>>stream
+-x36T0P0RÐ5T0² ¡C®B#3  PØRÁHÏPA×@ÏR!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷Ì¥ïSW
+ÔbgÇåé¢ "3ksâÁêøÿÈàßËòwÓþÝæQm+P`hààrõTä )õ2g
+-endstream
+-endobj
+-668 0 obj
+-<</Filter/FlateDecode/Length 105>>stream
+-x34V0P0VÐµP°P0QH1ä*T0()ë*èëY*$çr9yré{ú*¦ré+ré{ pé;8+ré»DrÄryº(HXTXpp(884p¹z*r Ð ´
+-endstream
+-endobj
+-665 0 obj
+-<</Filter/FlateDecode/Length 143>>stream
+-x32Q0P0b# 2TH1ä*T0´òÁ\C= 'çr9yré{ú*¦réÕpé{ pé;8+ )hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢`%iÚÃcÿþÿÿ__í!ú÷wýÿ¿U¿01(p¹z*r êL)
+-endstream
+-endobj
+-656 0 obj
+-<</Filter/FlateDecode/Length 162>>stream
+-x3´T0P0b# ²TH1ä*T04òÁ\c=C NÎåròäÒ÷ôU()*MåÒªáÒ÷ *áÒw
+-pV0äÒw6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jk><ø¿ôÿ¯øÿKüþ
+-¾_2ß{ÉÔ:»éUü3îoÿ7CÿÿÿK]u
+Ë°08p¹z*r ¼2¹
+-endstream
+-endobj
+-653 0 obj
+-<</Filter/FlateDecode/Length 132>>stream
+-x32U0P0b###C
+C®Bm 1T0Ô289ËÉKßÓW¡¤¨4K?
+(É¥ï&K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+*¶³ãòtQP[Yô$aoþÿêÿ¯ëÿÀ§.WO
+@. 4(j
+-endstream
+-endobj
+-650 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x36P0P0b#s#
+
+C®B#(k¬g¨` ÄÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+@%\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾·.PÆ9?§47¯¨ÅÎËÓE!(ëlëúú¿ÿOtÿ÷ÿÿzy3ûýÿÿ?þÿÿÿ
+_¦.WO
+@. ÷.
+-endstream
+-endobj
+-647 0 obj
+-<</Filter/FlateDecode/Length 132>>stream
+-x34S0P0a ²PH1ä*T0´ òÁ\#=C NÎåròäÒ÷ôU()*MåÒªáÒ÷ *áÒw
+-pV0äÒw6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jÎ®úÿWÿÿ%8qMá«§B  x
+)Y
+-endstream
+-endobj
+-644 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x36T0P°TÐ5T06U0²PH1ä*T02
+-(Y*Xê*èèY*$çr9yré{ú*¦réqé{ Õpé;8+ré»DrÄré»é;;»¹66úÞ@¹ôósJsóZìì¸<]L|
+[ßè{ÿÂKÿ·lÿ
+a^}éö_=»]ÿö1(0q¹z*r .}
+-endstream
+-endobj
+-641 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x36U0P0ac#
+
+C®Bcrõ
+
+89ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(¨p-¹:
+õþzïK_ö¨¾ÐRí]J¿Ìþ²~ûËýûëóoÿþþíß¿GiX
+¸\=¹ r45B
+-endstream
+-endobj
+-638 0 obj
+-<</Filter/FlateDecode/Length 132>>stream
+-x32T0P c
+#C
+C®BCs ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-ê¦=¬ÿAàßþÿñqû6Ê08°p¹z*r 4$Ò
+-endstream
+-endobj
+-635 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x34W0P0bC
+J1ä*T04òÁ"Æz
+-@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô$|ù¨çnåøÑ<¢âfx;ÊÿÊºÕÀÁÐÀåê©È _*&ï
+-endstream
+-endobj
+-632 0 obj
+-<</Filter/FlateDecode/Length 155>>stream
+-x32T0P0b# ²TH1ä*T04òÁ\c= 4'çr9yré{ú*¦réÕpé{ pé;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.Oµ5
+ü_úÿWüÿ%Õ_Üç__úÿÿ/ÏúÿK®ÿ7ýË¢¹JsÛ¹\=¹ J2&
+-endstream
+-endobj
+-629 0 obj
+-<</Filter/FlateDecode/Length 148>>stream
+-x32Q0P0VÐ5T02P0²PH1ä*T04
+-¹
+-Æz
+-ºz
+-É¹\N\ú¾
+-%E¥©\úá@E\ú
+@5\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾7Ðd.}çüÒÜ¼b ;;.OµõJiÿaàgàÑÿWf-Ù£u³lÃ¡.WO
+@. ¼z.&
+-endstream
+-endobj
+-626 0 obj
+-<</Filter/FlateDecode/Length 148>>stream
+-x3²P0P0aS#
+
+C®B#c ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢`:Ñ4í(ÿºûûïÿÿÿëë½¬Gôr
+ÿÀ£4.WO
+@. Ôø-q
+-endstream
+-endobj
+-623 0 obj
+-<</Filter/FlateDecode/Length 90>>stream
+-x34U0P0V0W04V04PH1ä*Ñ`Qc=Cs NÎåròäÒ÷ôU()*MåÒ*áÒ÷P0æÒw
+-pV0äÒw6ä2åòtQø ¹\=¹ p
+-endstream
+-endobj
+-620 0 obj
+-<</Filter/FlateDecode/Length 143>>stream
+-x3´P0P0b#C
+
+C®BC3 Ì5Ñ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶s8K9Çî¨Xõ÷á½õKÿÿÿ¿t
+«§B  9á%Á
+-endstream
+-endobj
+-617 0 obj
+-<</Filter/FlateDecode/Length 165>>stream
+-x32T0P0TÐµP0Ò
+-)\
+
+-@A#3C= ¹¥Br.'¾§¯BIQi*~8P¾P
+-¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[Ûô ï!õËèú_ñ?þ¿Týÿ?Êûëë¯K^Vsÿ²ÿDsC«§B  U1ñ
+-endstream
+-endobj
+-614 0 obj
+-<</Filter/FlateDecode/Length 159>>stream
+-x34V0PÐ5TÐµP0´T0²TH1ä*T02P Acs]=K]s ËåäÉ¥ïé«PRTÊ¥TÅ¥ïTÄ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{MçÒwÎÏ)ÍÍ+j±³ãòtQP[ð0C@áeézùKÿÿTfKÿÿ
+þÖmxõËK@1AËÕS!
+ E/@
+-endstream
+-endobj
+-579 0 obj
+-<</Filter/FlateDecode/Length 153>>stream
+-x36T0P a#
+cS
+C®B#s ß Ä5ÔJéX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[x0a{ÿ½úÞßÿÁþÉaêÿÀ
+
+-L\®
+-\ °Á6Ä
+-endstream
+-endobj
+-494 0 obj
+-<</Filter/FlateDecode/Length 96>>stream
+-x=@@ûïßìÛ·ÄOËJl!¡R
+-¥p?G³W0åÌhFË:L
+n.:Ë¬bn4&5×u÷õìÒÅR
+-âg
+]<ß¿ 
+-
+ñ×6Å
+-endstream
+-endobj
+-411 0 obj
+-<</Filter/FlateDecode/Length 128>>stream
+-x34U0P0ac#
+
+C®BC# ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ
+û	üÙöAËÕS!
+ 
+)ð
+-endstream
+-endobj
+-378 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x34Q0P aKc3
+C®BS Ï Ä3Ñ3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýpS.} :.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW¬`jgÇåé¢ ¶ÒõoÐø»þÿÿãÿµ>eMap`árõTä ½@)Æ
+-endstream
+-endobj
+-353 0 obj
+-<</Filter/FlateDecode/Length 167>>stream
+-x36R0P0aSc
+C®Bck¬g¨` g`	¦
+-É¹\N\ú¾
+-%E¥©\úá@\ú
+@
+\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾·.PÆ9?§47¯¨ÅÎËÓEAmÑÛ	ßÿþ?þeýOú¼ÿÇÇr=;úÿßÔúÿ}Óÿ¿¬ÿ·Q
+ÁËÕS!
+ ¸4-
+-endstream
+-endobj
+-335 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x34W0P0aSCK
+C®BC ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[Ätý
+ÇòK_¿ìÛ«ï}½ëÏ¬îÿÿYx
+X¸\=¹ ¶'Y
+-endstream
+-endobj
+-323 0 obj
+-<</Filter/FlateDecode/Length 181>>stream
+-x32R0P0b#ccS
+C®B#rõ
+
+ô
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(¨--ÿ$âÿ¥ÿõÿ_údýÅ½NÛeÿ/ß*ç%Bï)|ýÿöÕ%âÿÿ{éZ#èwð 
+«§B  
+->8ã
+-endstream
+-endobj
+-320 0 obj
+-<</Filter/FlateDecode/Length 172>>stream
+-x32U0P0b#ScS
+C®B## ß Ä5Ö3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶h6§þ'úõÿ¦ÿY¹ù¢ì>é*®ÿ¯ÿ{êÿá/Ó¦M_úoú~Ñ¥,Á
+-¸\=¹ ³]5>
+-endstream
+-endobj
+-317 0 obj
+-<</Filter/FlateDecode/Length 134>>stream
+-x34Q0P0UÐ54R "cs
+C®Bs  ¥©!PÎPÏR!9ËÉKßÓW¡¤¨4K?\ÁKß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷êæÒwÎÏ)ÍÍ+V0·³ãòtQ8=ÿ?
+üüpAËÕS!
+ §(%
+-endstream
+-endobj
+-314 0 obj
+-<</Filter/FlateDecode/Length 171>>stream
+-x31V0P0b e¨bÈU¨`lä¹Fz
+-@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬ ¤\¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P
+§ÚÎóD
+Ê%	ý»à»`ö^m¯ßû_¿~©2éÿÿÿ<õÿ_úåY7ýÿ¿ªKwo(`dàrõTä Õ7N
+-endstream
+-endobj
+-293 0 obj
+-<</Filter/FlateDecode/Length 112>>stream
+-x34Q0P0QÐ54P°T02TH1ä*T0(*è*èZêY*$çr9yré{ú*¦ré+ré{ pé;8+ )hC.X.O
+?~0  _Á
+-\®
+-\ ìL
+-endstream
+-endobj
+-290 0 obj
+-<</Filter/FlateDecode/Length 173>>stream
+-x32U0P0TÐ54P02Q02TH1ä*T02(*ê%-õ,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ôK´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAm±AÂw
+o_F
+/ÍÿZÿo£÷ÿÿúÿ¿lYýïÒ-Ç½oÄÙ/ýÿ+þ£
+«§B  ìû4á
+-endstream
+-endobj
+-287 0 obj
+-<</Filter/FlateDecode/Length 154>>stream
+-x34U0P aC3cc
+C®BCC ß Ä5Õ2õ
+,ÀÂT!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jÖÚÖÙÿÖËdü²þÖÿKñKÿ/ý'tÉûÿ_ÝK7
+-¸\=¹ mÎ-+
+-endstream
+-endobj
+-284 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x34S0P0bCscC
+C®BCc ß Ä5Ñ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô5]ÿÿeÿ/µÄ¦Æì@7ûGuÉôÓîfg`ärõTä S,Æ
+-endstream
+-endobj
+-262 0 obj
+-<</Filter/FlateDecode/Length 148>>stream
+-x32S0P0b#c
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ°³þiÚ¤y°éÿï¿ÿÿïÿÿ÷ÿ¿HHôGsòßL
+
+-\®
+-\ D9¢
+-endstream
+-endobj
+-259 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x32S0P0b##c
+C®BCK ß Ä5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶¤*ÂñóÅCVÿÌR¾¡ÚDÆ Â|ÂÏ¶ï·?ÍÏ£*sG¡ËÕS!
+ ½.«
+-endstream
+-endobj
+-232 0 obj
+-<</Filter/FlateDecode/Length 159>>stream
+-x32T0P0RÐ5T0´P0²PH1ä*T04
+-
+-ô
+t
+-ô,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o É\úÎù9¥¹yÅ@-vv\.
+-jKr§ÞUû2ûôËÿ}ÿà ü·Ý×gæ.ÝÀÈ Àåê©È ke.~
+-endstream
+-endobj
+-229 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x36T0P0a
+J1ä*T02ò!"z@i NÎåròäÒ÷ôU()*MåÒªáÒ÷ *áÒw
+-pV0äÒw6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-ÆB¾ÑlÜ·üÏÿÿíÿþûßþÿÏáßÁÉÿïÿ¯¯µS¸Ç ÀÄåê©È X5
+-endstream
+-endobj
+-226 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x3´P0P0aSC
+
+C®BC ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[=Cõú¥¸ýqÓ´¯M[½nzèÕÌ:1å.WO
+@. O%¶
+-endstream
+-endobj
+-223 0 obj
+-<</Filter/FlateDecode/Length 100>>stream
+-x34R0P0QÐµP° R)\
+@Ê 
+-Lô
+tÍõ,s¹<¹ô=}JJS¹ôÃL¸ô=J¸ô
+¹ô]¢
+-¹
+b¹<]>|( .WO
+@. ëS
+-endstream
+-endobj
+-220 0 obj
+-<</Filter/FlateDecode/Length 139>>stream
+-x34V0 CCS#K
+C®B$äèqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[Ôºèó!Ï×«ãìÿÿ~3k3Óø#hÍ ÀÈåê©È vE,U
+-endstream
+-endobj
+-208 0 obj
+-<</Filter/FlateDecode/Length 143>>stream
+-x32S0P0a#C
+C®B#ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]ÔV9Ô£®¶JxÒÌòëÎ×¿þQÇÕV30r¹z*r æ)w
+-endstream
+-endobj
+-205 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x32S0P0b###C
+C®BCK ß Ä5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô[X8>d_Üö«VíWÅ²ÿÿ·ª­]w+vÝÑÄÖ6.WO
+@. {)Ð
+-endstream
+-endobj
+-202 0 obj
+-<</Filter/FlateDecode/Length 146>>stream
+-x32S0P0b#c
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ°ãþiZÿÿÿçôyñóòË~ýú?æ÷2WÝap`árõTä z.Ë
+-endstream
+-endobj
+-199 0 obj
+-<</Filter/FlateDecode/Length 145>>stream
+-x32R0P0aK#C
+C®BC
+ ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jû
+-^V­
+-z©¿&èÒõµªK¯_º´V?ô
+; #«§B  òY'Ô
+-endstream
+-endobj
+-196 0 obj
+-<</Filter/FlateDecode/Length 89>>stream
+-x34S0P0T0F bÈU¨`h4P 
+-è¤Dr.'¾§¯BIQi*~8P
+-¾¾S³ímÈeËåé¢ðÿÁÿ\®
+-\ m
+d
+-endstream
+-endobj
+-193 0 obj
+-<</Filter/FlateDecode/Length 159>>stream
+-x36W0P0bcSc
+C®Bm 1Q0ÔJéX
+©Br.'¾§¯BIQi*~8P	¾t
+-pV0äÒw6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@Åvv\.
+-*Lk8
+¶'æÇ®»7½îeÙîÒ]±¿Þ1¯Wÿ;908°p¹z*r HN35
+-endstream
+-endobj
+-189 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x3´T0P0QÐ54V04U06WH1ä*T04(¥ô
+Fz
+-É¹\N\ú¾
+-%E¥©\úá@U\ú
+@E\úNÎ
+-@K´!A,¾¾³³`c£ï
+-ÔÎ¥ïSW
+ÔbgÇåé¢ ¶ÐdË­^Ç_ú«ÿ·êÿÿÿÿ4ÿÿ¾ÿ?ÿÛÿºoßoDG7p04p¹z*r 3q
+-endstream
+-endobj
+-151 0 obj
+-<</Filter/FlateDecode/Length 183>>stream
+-x3¶P0P0VÐ5T06Q06UH1ä*T06
+-
+Íõ
+t
+-ô,
+-ÀH!9ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½Æsé;ççææµØÙqyº(¨-<ßÞdðE ÓàËìKùË¯}ý?úÿòÖÿÿÿW[
+»þ÷õì½¹KÿÝÎLÜ"v3á
+«§B  8Ø
+-endstream
+-endobj
+-148 0 obj
+-<</Filter/FlateDecode/Length 155>>stream
+-x32R0P aCK##
+C®BCs ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶æ|óÅMý¯1
+âQÍÏûà'ãÞû·.5i|9ÔÀÁÐÀåê©È I,Á
+-endstream
+-endobj
+-145 0 obj
+-<</Filter/FlateDecode/Length 168>>stream
+-x36P0P0a
+cS
+C®B#3(k¤g¨` g`	¦
+-É¹\N\ú¾
+-%E¥©\úá@\ú
+@
+\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾·.PÆ9?§47¯¨ÅÎËÓEÁÉ(»þ?üéöÿcÌ~!NèË^}ïKæÿ'ú»îþþûÛßþ>"áòp? #«§B  æö4o
+-endstream
+-endobj
+-142 0 obj
+-<</Filter/FlateDecode/Length 169>>stream
+-x36P0P0RÐ5
+-FF
+-)\
+
+-Fæ
+- qc##=C]K=K
+ä\.'O.}O_
+¢ÒT.ýp ".} .}§ gC.}hC.X.}7}gg7 7ÀÆFßh4¾s~Nin^1P
+§Ú¢ù:Ùýeø²¿nÇÿÿÿúÿ/½
+Û&Øzc=x?PäB
+-
+«§B  ->1Ê
+-endstream
+-endobj
+-139 0 obj
+-<</Filter/FlateDecode/Length 141>>stream
+-x3²P0P0b#cc#
+C®BCK ß Ä5Ñ3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶Ð{¯û$pÊÿ 
+«§B  pL+»
+-endstream
+-endobj
+-686 0 obj
+-<</Filter/FlateDecode/Length 146>>stream
+-x36T0P0b#
+J1ä*T02òÁ"Æz@i NÎåròäÒ÷ôU()*MåÒªáÒ÷ *áÒw
+-pV0äÒw6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-Ê
+³6'±?Üû÷ÿÿÿã¦/}¨§Xpü?tÎP`hààrõTä ïÿ-
+-endstream
+-endobj
+-662 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x32S0P0b#c#C
+C®B## ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-&¦jÔÄýú²WßûÒ×¯_8V|ýþåþü÷÷oÿþÝa"ÁÐÀÁåê©È î-Ñ
+-endstream
+-endobj
+-659 0 obj
+-<</Filter/FlateDecode/Length 176>>stream
+-x36U0P0VÐ5T06R0²TH1ä*Ñ a Ò3TÐ5Ð³THÎåròäÒ÷ôU()*MåÒ*âÒ÷ ªáÒw
+-pV0äÒw6ä2åÒwÓwvvrllô½&sé;ççææµØÙqyº(¨-ôïlÒûáÈÿBáç¯¯µú÷ã×þÿÄáÒ,©¶êïïÿoÿý+x=qÉÄù<?¸\=¹ Ù5Ò
+-endstream
+-endobj
+-610 0 obj
+-<</Filter/FlateDecode/Length 156>>stream
+-x36T0P a#
+#C
+C®B#s ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-vjÛ¸´eëÿÿ¿íýÿïýÿÿ»ôÿ®þ0çöÿ/ÿ·pH04pp¹z*r ¶X3¾
+-endstream
+-endobj
+-607 0 obj
+-<</Filter/FlateDecode/Length 137>>stream
+-x36Q0P0aC#
+
+C®Bm @ÊXÏPÁ s¹<¹ô=}JJS¹ôÃ\ú
+`Ò)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææÛÙqyº(¨X¦
+]ÿþÙåØÿ±Õr&H7p04p¹z*r kÁ0
+-endstream
+-endobj
+-604 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x32U0P0b#c#C
+C®B## ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-
+¾É,òþþûÿÿõõ
+1NÏx×Ýÿÿ÷ß¾¯20r¹z*r ¶4,Æ
+-endstream
+-endobj
+-601 0 obj
+-<</Filter/FlateDecode/Length 140>>stream
+-x36V0P c#
+
+C®B#s Ì5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶²i¶üÚ_÷ÿÙ^ÿÿºþ?|ùêÀÂàÀåê©È 'ñ,Y
+-endstream
+-endobj
+-598 0 obj
+-<</Filter/FlateDecode/Length 154>>stream
+-x3²P0P0a3#
+
+C®B# ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢Àå¹a>ÿûÿ÷÷ÿó¨ÿøÿ]Î¿ÿÿ}üÿÿõÿ¥,8¸\=¹ ò0Ç
+-endstream
+-endobj
+-557 0 obj
+-<</Filter/FlateDecode/Length 201>>stream
+-x36P0PÐ5RÐ54P06W06UH1ä*T0¶T I%ô,t-Dr.'¾§¯BIQi*~8P¾P¾S³!¾K´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAmá¬-1]<Tõ,]¶r]«{üÿ/þÿÿbÉ'9ÿÎ-ûÿÿ¿téÿÿ®ÿ½>ôTIHÕÒ¥KÕV{æH[H3°08p¹z*r 4ðH
+-endstream
+-endobj
+-429 0 obj
+-<</Filter/FlateDecode/Length 186>>stream
+-x3µP0P0bS3c
+C®BSS ß Ä5ÔJéX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ05ø¯¶æå
+½Ä»¯ÿç]úþûzõú¿[.ý,ýý¿d¶÷ÿ÷[ïª¯ÿ«¿
+ÊïOõ¿êåÿ[Ù_/ÿÇ ÀÄåê©È g;E
+-endstream
+-endobj
+-408 0 obj
+-<</Filter/FlateDecode/Length 103>>stream
+-x34R0P0Q04W°T0²TH1ä*T0
+-()èeDr.'¾§¯BIQi*~¸)¾P	¾S³!¾K´!A,§BÂ
+
+
+
+-
+-\®
+-\ ÿ¡d
+-endstream
+-endobj
+-405 0 obj
+-<</Filter/FlateDecode/Length 128>>stream
+-x34R0 B]CscC
+C®B 
+$fb¨` g¨ k©g©ËåäÉ¥ïé«PRTÊ¥®`Î¥ïTÂ¥ïà¬ ¤\¢
+-¹
+b¹ôÝôÝÜ }o ¹\úÎù9¥¹yÅ
+-ævv\.
+-'WþG
+-¸\=¹ ¼)E
+-endstream
+-endobj
+-401 0 obj
+-<</Filter/FlateDecode/Length 155>>stream
+-x32W0P0b#K#
+
+C®B#3 ß Ä5Ö3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶øàláå_ÿÿÿçQÿñ÷ÿ8[	Õÿÿ_ª>þ¿ôÿ¯#gd
+X¸\=¹ j.ü
+-endstream
+-endobj
+-398 0 obj
+-<</Filter/FlateDecode/Length 145>>stream
+-x3´T0P0bC
+J1ä*T04òÁ"¦z
+-@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ôssx;VùlÙÏYl¦z¨þ ßô¥Ûn
+f`ärõTä $¢
+-endstream
+-endobj
+-395 0 obj
+-<</Filter/FlateDecode/Length 138>>stream
+-x34T0P0bCc#K
+C®BK × Ä3ÑÊqr.'¾§¯BIQi*~¸%¾P¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+V°´³ãòtQPÛÆÿ²þßôÿPâOàñÿ?æêö1(0q¹z*r nÐ)
+-endstream
+-endobj
+-392 0 obj
+-<</Filter/FlateDecode/Length 170>>stream
+-x32V0P0RÐ5T0Ò
+-)\
+
+-@Ac ¡®¥Br.'¾§¯BIQi*~8P¾P
+-¾S³!¾K´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAmYÅ5Áfý/	{ã÷ßÿwìÉU»
+ÝæùläÍÞÿ{ýVK£êfQTC«§B  :ê1
+-endstream
+-endobj
+-326 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x32R0P0RÐµP02T0´PH1ä*T0´
+-
+Íô
+tÍõ,s¹<¹ô=}JJS¹ôÃ¸ô=j¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P
+§Úâ©ÿ&$ìÕøZÿhÿÿÿMÿþ^Ï¿Í±ëÍÓãÿÿÿ?ÈÌ ÀÈåê©È ÿÊ0º
+-endstream
+-endobj
+-302 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x32R0P0b###C
+C®BCs ß Ä5Õ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô±¶$\kÚµVuéVÓkû?Æ?Ô4¿tGu@´# «§B  in(I
+-endstream
+-endobj
+-216 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x32V0P0b##C
+
+C®B#ß Ä5Ô289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jk.D$¾Üð÷ß·=5>óå
+-«¸¯wýr5P¶L* àü.WO
+@. QX,
+-endstream
+-endobj
+-212 0 obj
+-<</Filter/FlateDecode/Length 133>>stream
+-x34W0P0bCcCK
+C®BCrõ
+
+89ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÁKß%ÚË KßMßÙÙ
+-È
+-°±Ñ÷VÐÊ8ççææµØÙqyº(¨­Ù½FÒõ?
+ùÇ ÀÄåê©È µ%p
+-endstream
+-endobj
+-104 0 obj
+-<</Filter/FlateDecode/Length 150>>stream
+-x32W0 C#ScS
+C®B$äè±%X*$çr9yré{ú*¦réUré{ ré;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.Oµ
+þÞ	6½P½ôõËüÿ ðOyr°ðdðÓÃ
+ÁËÕS!
+ 5\8~
+-endstream
+-endobj
+-588 0 obj
+-<</Filter/FlateDecode/Length 162>>stream
+-x31Q0P0bCc
+C®BcK ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ Ø|Ï×Ï¡ýýÓË÷ßþ»ÿþodêößÿ êÆßÿßAàúaû
+-.WO
+@. ¶ãB'
+-endstream
+-endobj
+-568 0 obj
+-<</Filter/FlateDecode/Length 161>>stream
+-x3²P0P0a#C
+C®B#ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ô%&ÏRÞËrËÛûÚÔÿÙêÿ¿ôÿÃ´à%Sâ
+4r:XùM»láÀÄ Àåê©È .
+-endstream
+-endobj
+-541 0 obj
+-<</Filter/FlateDecode/Length 168>>stream
+-x32S0P0RÐ54T02U02TH1ä*T02()é%
+-ô,s¹<¹ô=}JJS¹ôÃª¸ô=¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o v.}çüÒÜ¼b ;;.OµÅ¶Í_l¥õ&¿´	þÿÿßW÷[o'ÙÎª1ØSÿÿÿÿ%u
+
+-L\®
+-\ mB/«
+-endstream
+-endobj
+-507 0 obj
+-<</Filter/FlateDecode/Length 172>>stream
+-x32U0P0SÐ5T02S06VH1ä*T02P Ac3=C]=K 0RHÎåròäÒ÷ôU()*MåÒªäÒ÷ *äÒw
+-pV0äÒw6ä2åÒwÓwvvrllô½Æsé;ççææµØÙqyº(¨-<(Ïi¾´doéë×ëÿêÖÿÿÿOPüß ÿQ_þ
+-pµÎÌyPÀÈ Àåê©È S 1C
+-endstream
+-endobj
+-460 0 obj
+-<</Filter/FlateDecode/Length 154>>stream
+-x32S0P0b##C
+C®B#c ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³r6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-&Ö!O®pÿÎ¬ÿ?]~ùÿ·E^ÖÿÛþÿÿÿË¿ÿ
+ÿw9AËÕS!
+ o/
+-endstream
+-endobj
+-457 0 obj
+-<</Filter/FlateDecode/Length 135>>stream
+-x32S0P0RÐ5Q04U06UH1ä*T04
+-([*é*èëY*$çr9yré{ú*¦réqé{ Õpé;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.O
+'WÔÿ#À
+-.WO
+@. Ü(Ñ
+-endstream
+-endobj
+-454 0 obj
+-<</Filter/FlateDecode/Length 140>>stream
+-x32S0P0b#Cc
+C®BCkªg¨` ÄÉ¹\N\ú¾
+-%E¥©\úá@5\ú
+@%\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾·.PÆ9?§47¯¨ÅÎËÓEAmÑt­»^7
+ytr÷ñÿPðgm= #«§B  ,W
+-endstream
+-endobj
+-451 0 obj
+-<</Filter/FlateDecode/Length 102>>stream
+-x32S0P0V04V02R04WH1ä*T0´
+-((ë¥Dr.'¾§¯BIQi*~8P
+-¾	¾S³!¾K´!A,§Býÿÿÿ? " ËÕS!
+ [
+
+-endstream
+-endobj
+-448 0 obj
+-<</Filter/FlateDecode/Length 180>>stream
+-x32S0P0TÐ54R02Q02TH1ä*T02(+ê$
+-õ,s¹<¹ô=}JJS¹ôÃª¸ô=¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o v.}çüÒÜ¼b ;;.OµÅ6×v]Üd®7§döÿÿÿo{o}´ëb¾üíçN/TÉ~ÓÜÿCi¡ÞõÄmÚ<:
+¸\=¹ 
+\4´
+-endstream
+-endobj
+-445 0 obj
+-<</Filter/FlateDecode/Length 141>>stream
+-x32S0P0b##cC
+C®BC
+ ß Ä5Ñ3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]ÔMÿ6ùÿSùÿJÇÿÁ¿ÐÀ«
+
+-
+\®
+-\ å*k
+-endstream
+-endobj
+-372 0 obj
+-<</Filter/FlateDecode/Length 164>>stream
+-x34U0PÐ5RÐ54P02R06UH1ä*T02
+-(%ô,t-Dr.'¾§¯BIQi*~8P¾P¾S³!¾K´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAmÓE¹Ò¨øìÀÿþÿ¿tbIMýËúÿpõ/$¤nÊ¬¥Ñì
+\®
+-\ Ãk3þ
+-endstream
+-endobj
+-305 0 obj
+-<</Filter/FlateDecode/Length 183>>stream
+-x31V0P0TÐ5T01T0²PH1ä*T01P A#KC= ¥Br.'¾§¯BIQi*~8P¾P
+-¾S³!¾K´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAÃ¨yrcëUÓí¥ÿÿo_ú¢ÿÿÛ_öªýÿ¿ÿ»çýÿÿçª]úÿÿï¾K_æÿÿfýòÿÿÌõÿ8¸\=¹ n?c
+-endstream
+-endobj
+-265 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x32S0P0acc
+C®B#C ß Ä5Ò289ËÉKßÓW¡¤¨4K?
+¨Kß¨Kß)ÀYÈq6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-jæ4
+â¿ð%çÿ¿vÓÿtþÿÄ«^a"KHý¯·×Ýß¶[î¬8
+«§B  c=/Ê
+-endstream
+-endobj
+-133 0 obj
+-<</Filter/FlateDecode/Length 140>>stream
+-x32R0P0b# e¡bÈU¨`h	ä¹z@) NÎåròäÒ÷ôU()*MåÒªáÒ÷ *áÒw
+-pV0äÒw6ä2åÒwÓwvvrllô½t2Îù9¥¹yÅ@-vv\.
+-Æ¦ó®ÿÎ¬ß6ýÿÛ¥ÿ³÷Öoÿ¿AËÕS!
+ D'
+-endstream
+-endobj
+-130 0 obj
+-<</Filter/FlateDecode/Length 153>>stream
+-x32V0P0aC#K
+C®BCK ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶1á?L:Ï±sâuÏ/óã×Ùÿÿÿ «~}nÙ!½ÝÌ
+\®
+-\ Ã].z
+-endstream
+-endobj
+-127 0 obj
+-<</Filter/FlateDecode/Length 144>>stream
+-x3´P0P0bC3C
+
+C®BC ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶Ûõö%ï«ëÚìÿq,Û;Gus
+«§B  FZ%
+-endstream
+-endobj
+-124 0 obj
+-<</Filter/FlateDecode/Length 147>>stream
+-x32V0P0b# ²TH1ä*T0´òÁ\C= 'çr9yré{ú*¦réÕpé{ pé;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.Oßüÿ@ðsó!½û¹_îßßÈ»¾þzfAU¬Á&.WO
+@. [/ 
+-endstream
+-endobj
+-121 0 obj
+-<</Filter/FlateDecode/Length 108>>stream
+-x34R0P0QÐµP°P0´PH1ä*r
+-ÐÈLÁDÏPA×\ÏR!9ËÉKßÓW¡¤¨4K?\ÁKß¨Kß)ÀYÁKß%ÚË ËÓE!áÃ8 ò
+-@AÁ¡ËÕS!
+ 9õ2
+-endstream
+-endobj
+-118 0 obj
+-<</Filter/FlateDecode/Length 134>>stream
+-x32T0P0bCs#
+
+C®BCc ß Ä5ÑJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[óºé°ÓðSkÜÁÐÀÁåê©È §A*
+-endstream
+-endobj
+-114 0 obj
+-<</Filter/FlateDecode/Length 143>>stream
+-x34S0P0ac#3
+C®BC# ß Ä5ÔJqr.'¾§¯BIQi*~8P
+-¾P	¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[æ®ÿýë5¾¦=âÿ þÿÿý[6
+<ÀÂàÀåê©È Â6)
+-endstream
+-endobj
+-111 0 obj
+-<</Filter/FlateDecode/Length 158>>stream
+-x32V0P0TÐµP0Ò
+-)\
+
+-@A#3C= ¹¥Br.'¾§¯BIQi*~8P¾P
+-¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ°1ÊvÒ»ûåþýý÷ÿÿÿ¿ôÿõÌÕÜÇÿÿÿ§ðAËÕS!
+ 03.
+-endstream
+-endobj
+-107 0 obj
+-<</Filter/FlateDecode/Length 108>>stream
+-x34W0P0R0T04V04QH1ä*T04Dô@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬ ä¸DrÄryº(°0à'ìøì<8 ãrõTä P$
+-endstream
+-endobj
+-101 0 obj
+-<</Filter/FlateDecode/Length 173>>stream
+-x3¶P0P0bcSc
+C®Bcc ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢`Åµäê<vÖ-~}Ù«ï}	JÔÚû_ÿwé/ßo÷ã·¿ýÿöïïßõ¿ë«Ê
+
+-¹\=¹ ÌÈ9æ
+-endstream
+-endobj
+-98 0 obj
+-<</Filter/FlateDecode/Length 162>>stream
+-x3²P0P0aSc#
+C®B#c ß Ä5Ò3T0Ð3°
+S
+ä\.'O.}O_
+¢ÒT.ýp J.} B.}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶h¾\ô¥|Ïý_fÿÿñï?üµ¶þß­ø·K·M;pÐ
+ÁËÕS!
+ ´m23
+-endstream
+-endobj
+-94 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x3²P0P0aS##
+C®B#c ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ gC.}hC.X.}7}gg7 7ÀÆFß[A(ãSW
+ÔbgÇåé¢ ¶h¾\ôÇ½ùûÿ÷ýÿÿ)kë¿[Ñ¹K7F02p¹z*r 
+-)ÿ
+-endstream
+-endobj
+-91 0 obj
+-<</Filter/FlateDecode/Length 152>>stream
+-x36T0P0a
+cS
+C®B#3 ß Ä5ÒJëX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQ0f2Ê®ÿæW8þÒË¿à÷ÿõÿ0ðÇ±ý 
+«§B  Á
+-3·
+-endstream
+-endobj
+-88 0 obj
+-<</Filter/FlateDecode/Length 90>>stream
+-x
+
+1
+-0û}Å¾ ¹S¤L!he!Vj)¨èßSÝafµ¢ðÓÓqUå¤àX¥ñÿ¸ì	6u¼¯g
+é`Û/¡¯©°qRÈyä4^r¹
+-endstream
+-endobj
+-85 0 obj
+-<</Filter/FlateDecode/Length 148>>stream
+-x34U0 CC3cS
+C®B$äè±%X*$çr9yré{ú*¦réUré{ ré;8+ré»DrÄré»é;;»¹66úÞ
+-º@çüÒÜ¼b ;;.Oµ
+LômU^¿^)rýÿÿÿ|
+e¥±þ¿O¹\=¹ ìw0a
+-endstream
+-endobj
+-82 0 obj
+-<</Filter/FlateDecode/Length 191>>stream
+-x3¶P0P0VÐ5T06¡C®Bc#  PØLÁXÏPA×@ÏÒ s¹<¹ô=}JJS¹ôÃ*¹ô=
+-¹ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o ñ\úÎù9¥¹yÅ@-vv\.
+-j
+Ú²6¹oá0²~iôzÉñ%¿öM¿ôÿê¯ÿ%þÿs<¬¶ÊÙ®úûûÿÛÿoÿvÕÛ7<?
+l~p¾AËÕS!
+ Ã?í
+-endstream
+-endobj
+-78 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x32V0P0b#C#3
+C®B#r
+-õR@ËåäÉ¥ïé«PRTÊ¥TÃ¥ïTÂ¥ïà¬`È¥ïmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ôå¶J¸>¿rõÒÛ¿ëåöÿ
+ç1(0q¹z*r ß+Û
+-endstream
+-endobj
+-75 0 obj
+-<</Filter/FlateDecode/Length 175>>stream
+-x36V0P0bc#
+C®B#K Ì5ÔJéX
+©Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï­ 
+qÎÏ)ÍÍ+j±³ãòtQP[cÂ?9üþø3¿Âõ=Âá_ù»_îÿ»ÿHðëÿõ×¯gÒ(Ù;ñ÷²éM
+-
+
+
+-\®
+-\ æZ=
+-endstream
+-endobj
+-72 0 obj
+-<</Filter/FlateDecode/Length 188>>stream
+-x32Q0P0RÐ5T02T06VH1ä*T0´
+-((é*èèY Br.'¾§¯BIQi*~8P%¾P!¾S³!¾K´!A,¾¾³³`c£ï
+-4Kß9?§47¯¨ÅÎËÓEAm±M@÷*ó%÷¦¿}ýÿ}fÕ[Ý¶iþ¾XcËroBmô%þ·]ïÿs,_»ë6gÁ4É
+-
+
+
+-\®
+-\ v²9
+-endstream
+-endobj
+-69 0 obj
+-<</Filter/FlateDecode/Length 170>>stream
+-x32S0P0RÐ5¦
+-F
+-)\
+
+-FÆ@QcC#=C]K=K
+ä\.'O.}O_
+¢ÒT.ýp ".} .}§ g åmÈeË¥ï¦ïììäØØè{æÒwÎÏ)ÍÍ+j±³ãòtQP[lRÎqpâ»ÉÊÕ¸/õÿÓþÿÿÿäÐßßc÷¸Ç¶	}8ggùç¼Á
+ËÕS!
+ pw3
+-endstream
+-endobj
+-65 0 obj
+-<</Filter/FlateDecode/Length 148>>stream
+-x3´P0P0R0T04¡C®BCc ¡
+Ps¹<¹ô=}JJS¹ôÃj¸ô=J¸ô
+¹ô]¢
+-¹
+b¹ôÝôÝÜ }o] s~Nin^1P
+§Úwý>ô\÷EL¢#¾%%Ä5Ç`ÃÃÄÿ
+-
+
+
+-\®
+-\ ã¢'D
+-endstream
+-endobj
+-62 0 obj
+-<</Filter/FlateDecode/Length 142>>stream
+-x32R0P c 2TH1ä*T0´ òÁ\#=C NÎåròäÒ÷ôU()*MåÒªáÒ÷ *áÒw
+-pV R.Ñ\±\únúÎÎn@n¾·.PÆ9?§47¯¨ÅÎËÓEAm1kKÂ¼&ÿxÏµî+þÿó
+-ßº?W÷ÒD
+ãc
+
+-L\®
+-\ Ô&î
+-endstream
+-endobj
+-59 0 obj
+-<</Filter/FlateDecode/Length 88>>stream
+-x3´P0P0bC# bÈUæÄÌô
+
+ô
+,Á@!9ËÉKßÓW¡¤¨4K?\ÁKßD88+ré»DrÄryº(Tü
+-.WO
+@. ÀH
+-endstream
+-endobj
+-56 0 obj
+-<</Filter/FlateDecode/Length 177>>stream
+-x35P0P0TÐ5T0±¡C®B
+°)PF(g gi F
+-É¹\N\ú¾
+-%E¥©\úá@\ú
+@
+\úNÎ
+-\ú.Ñ\±\únúÎÎn@n¾7Ðx.}çüÒÜ¼b ;;.O«æzµe
+Ñ>úëþ¾þ»eÿû»ú¿c¡oþï/Ùÿ¶|=qÛûßßKÿ·ÞÛ£þwüÖÿ
+\®
+-\ GhC
+-endstream
+-endobj
+-53 0 obj
+-<</Filter/FlateDecode/Length 153>>stream
+-x36W0P0bcScC
+C®Bcc ß Ä5Ò3T0 âä\.'O.}O_
+¢ÒT.ýp .} .}§ g åmÈeË¥ï¦ïììäØØè{+èeósJsóZìì¸<]Ôåä
+s
+-~rõ]ÞðúÿïEVß¦ï
+-oðÊ>lÀÈ Àåê©È Ó7
+-endstream
+-endobj
+-690 0 obj
+-<</Filter/FlateDecode/Length 162>>stream
+-x]O10
+Üó
+-ÿ ¡C+$ÄBVUÛÇAp¢þ¾$@w}wòYvýµg@>¢Ç%°M¤Ù/	
+êÆaÚ§Â8é dwÓáý	«ì6ßõDòy®UYU[½¡9h¤¨y$Ñ(Õ6Ö¶ØüI{`°»óR·J­ý£¹Äqp8¦¥I.à~Ïr
+-V/9SM
+-endstream
+-endobj
+-66 0 obj
+-<</ToUnicode 690 0 R/Type/Font
+-/Encoding 691 0 R/CharProcs <</BnZr 495 0 R
+-/y 68 0 R
+-/#03 65 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 0/LastChar 121/Widths[
+-27 0 0 18 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 17]
+-/Subtype/Type3>>
+-endobj
+-691 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-0/BnZr
+-3/#03
+-121/y]>>
+-endobj
+-692 0 obj
+-<</Filter/FlateDecode/Length 220>>stream
+-x]1n!E{NÁ
+-u¼àÓ¸Hd%¾ fÂ,Âë"·÷gÖvâÍ¾nø<ä´ÈîXçðK)Onó½gº¤,úRXÄ
+®¾nÿåËé¯Ä+û+u?z\ú5ænÅª>_HX¥Ñ	ÊÓ¿«q
+-ãóåöÃ±c
+-pØ:;è¨Õ½c)"§ÆÕ;àÈ¸kHÀÈH@³qÖðG¨ÈÎÂ[¯ZËmø×¬2Ük¥¼ðxmðé½Ä2x Øl
+-endstream
+-endobj
+-43 0 obj
+-<</ToUnicode 692 0 R/Type/Font
+-/Encoding 693 0 R/CharProcs <</0 60 0 R
+-/. 59 0 R
+-/2 58 0 R
+-/n 57 0 R
+-/V 56 0 R
+-/d 55 0 R
+-/i 54 0 R
+-/u 53 0 R
+-/G 52 0 R
+-/' 51 0 R
+-/r 50 0 R
+-/s 49 0 R
+-/U 48 0 R
+-/o 47 0 R
+-/c 46 0 R
+-/a 45 0 R
+-/C 44 0 R
+-/e 42 0 R
+-/h 41 0 R
+-/T 40 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 39/LastChar 117/Widths[ 18 0 0 0 0 0 0 18 0
+-33 0 33 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 48 0 0 0 52 0 0 0 0 0 0 0 0
+-0 0 0 0 48 50 50 0 0 0 0 0 0 0 0 0
+-0 33 0 29 37 29 0 0 37 18 0 0 0 0 37 33
+-0 0 25 26 0 37]
+-/Subtype/Type3>>
+-endobj
+-693 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-39/'
+-46/.
+-48/0
+-50/2
+-67/C
+-71/G
+-84/T/U/V
+-97/a
+-99/c/d/e
+-104/h/i
+-110/n/o
+-114/r/s
+-117/u]>>
+-endobj
+-694 0 obj
+-<</Filter/FlateDecode/Length 230>>stream
+-x]AnÃ E÷[4åMºÉ¢UÕöE0"Î¢·ïqÒExðçkæw§óë¹äMwm
+-_´éKlt[ï-^èê
+sØ
+$5\}UÝéÍ×ïJJ;¿û+uö8ÊS¿7
+5Ò­ú@Í
+©ÉyJiVTâ¿¯Þì
+KzHÇ~Æ-¸=0
+-zàF|AÀQp`´@'hVöÀhÙÊâÇ
+
+ã2ON¬pS±c+¡1*Ïý
+Wà0»ëpoÊ&I"
+D.ôj]+wi
+õ
+uÖp
+-endstream
+-endobj
+-612 0 obj
+-<</ToUnicode 694 0 R/Type/Font
+-/Encoding 695 0 R/CharProcs <</P 686 0 R
+-/V 666 0 R
+-/b 665 0 R
+-/k 662 0 R
+-/L 661 0 R
+-/, 660 0 R
+-/G 659 0 R
+-/y 654 0 R
+-/t 653 0 R
+-/R 652 0 R
+-/c 651 0 R
+-/F 650 0 R
+-/M 649 0 R
+-/h 643 0 R
+-/g 642 0 R
+-/K 641 0 R
+-/W 640 0 R
+-/p 639 0 R
+-/l 638 0 R
+-/E 637 0 R
+-/A 636 0 R
+-/s 631 0 R
+-/e 630 0 R
+-/J 629 0 R
+-/C 628 0 R
+-/u 627 0 R
+-/o 611 0 R
+-/m 610 0 R
+-/i 609 0 R
+-/D 608 0 R
+-/H 607 0 R
+-/d 606 0 R
+-/n 605 0 R
+-/r 604 0 R
+-/a 603 0 R
+-/B 602 0 R
+-/T 601 0 R
+-/. 600 0 R
+-/S 599 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 44/LastChar 121/Widths[ 13 0 13 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 34 32 33 34 31 30 35 34 0 24 35 28 41 0 0
+-31 0 33 25 33 0 34 46 0 0 0 0 0 0 0 0
+-0 25 24 25 26 23 0 27 25 13 0 26 21 31 25 26
+-23 0 25 19 25 25 0 0 0 25]
+-/Subtype/Type3>>
+-endobj
+-695 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-44/,
+-46/.
+-65/A/B/C/D/E/F/G/H
+-74/J/K/L/M
+-80/P
+-82/R/S/T
+-86/V/W
+-97/a/b/c/d/e
+-103/g/h/i
+-107/k/l/m/n/o/p
+-114/r/s/t/u
+-121/y]>>
+-endobj
+-422 0 obj
+-<</Type/Font
+-/Encoding 696 0 R/CharProcs <</T 421 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 84/LastChar 84/Widths[ 21]
+-/Subtype/Type3>>
+-endobj
+-696 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-84/T]>>
+-endobj
+-697 0 obj
+-<</Filter/FlateDecode/Length 173>>stream
+-x]± Ew¾âýjZMÂb6MÛ@x ýûjwá
+r ýp
+¬@ÁÉFÐÆª[Dq2Ô
+-(#ãÊ.gá	íoÂ¿?
+!Poù.f¤ÏöÒ£z¤S¸x!1;!aUÅÖ UWÍzojÎÎ'"Mµ)v%¦)ãG1¿khc/bÙÇXüýÍ;)H|£×V£
+-endstream
+-endobj
+-17 0 obj
+-<</ToUnicode 697 0 R/Type/Font
+-/Encoding 698 0 R/CharProcs <</* 566 0 R
+-/#1b 561 0 R
+-/| 496 0 R
+-/#23 436 0 R
+-/! 378 0 R
+-/#25 364 0 R
+-/+ 362 0 R
+-/#5d 318 0 R
+-/#5b 317 0 R
+-/= 316 0 R
+-/; 293 0 R
+-/V 278 0 R
+-/Q 277 0 R
+-/` 264 0 R
+-/" 249 0 R
+-/Z 248 0 R
+-/\ 247 0 R
+-/: 238 0 R
+-/X 200 0 R
+-/z 199 0 R
+-/#0e 198 0 R
+-/j 197 0 R
+-/- 196 0 R
+-/Y 193 0 R
+-/#29 192 0 R
+-/#28 189 0 R
+-/' 186 0 R
+-/F 170 0 R
+-/W 167 0 R
+-/6 153 0 R
+-/O 151 0 R
+-/#0b 106 0 R
+-/#2f 105 0 R
+-/#0d 104 0 R
+-/I 103 0 R
+-/E 102 0 R
+-/K 101 0 R
+-/v 100 0 R
+-/w 99 0 R
+-/T 89 0 R
+-/. 88 0 R
+-/x 87 0 R
+-/#0c 86 0 R
+-/f 85 0 R
+-/h 84 0 R
+-/p 83 0 R
+-/G 82 0 R
+-/7 73 0 R
+-/8 72 0 R
+-/M 71 0 R
+-/, 70 0 R
+-/q 69 0 R
+-/L 67 0 R
+-/k 64 0 R
+-/H 63 0 R
+-/c 62 0 R
+-/B 61 0 R
+-/1 39 0 R
+-/J 38 0 R
+-/P 37 0 R
+-/0 36 0 R
+-/y 35 0 R
+-/g 34 0 R
+-/C 33 0 R
+-/a 32 0 R
+-/R 31 0 R
+-/d 30 0 R
+-/e 29 0 R
+-/m 28 0 R
+-/l 27 0 R
+-/U 26 0 R
+-/n 25 0 R
+-/o 24 0 R
+-/u 23 0 R
+-/b 22 0 R
+-/r 21 0 R
+-/t 20 0 R
+-/s 19 0 R
+-/i 18 0 R
+-/4 16 0 R
+-/3 15 0 R
+-/2 14 0 R
+-/#7b 13 0 R
+-/5 12 0 R
+-/9 11 0 R
+-/D 10 0 R
+-/N 9 0 R
+-/A 8 0 R
+-/S 7 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 11/LastChar 124/Widths[ 28 27 27 41 0
+-0 0 0 0 0 0 0 0 0 0 0 38 0 0 0 0
+-0 14 24 41 0 41 0 14 19 19 24 38 14 16 14 24
+-24 24 24 24 24 24 24 24 24 24 14 14 0 38 0 0
+-0 37 35 35 37 33 32 38 37 18 25 38 30 45 37 38
+-33 38 36 27 35 37 37 50 37 37 30 14 24 14 0 0
+-14 24 27 22 27 22 15 24 27 14 15 26 14 42 27 24
+-27 26 19 19 19 27 26 35 26 26 22 24 49]
+-/Subtype/Type3>>
+-endobj
+-698 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-11/#0b/#0c/#0d/#0e
+-27/#1b
+-33/!/"/#23
+-37/#25
+-39/'/#28/#29/*/+/,/-/./#2f/0/1/2/3/4/5/6
+-/7/8/9/:/;
+-61/=
+-65/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P
+-/Q/R/S/T/U/V/W/X/Y/Z/#5b/\/#5d
+-96/`/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o
+-/p/q/r/s/t/u/v/w/x/y/z/#7b/|]>>
+-endobj
+-699 0 obj
+-<</Filter/FlateDecode/Length 220>>stream
+-x]ÐÁÂ 
+à;OÁMY²pÑQ_uÅpßÞ¶S
+~o£Zm÷»}³®Ne
+Î:Ä4|LÏ¨¼Å¤êFæd
+»ÏªÚ
+|¾¾2jÚañÑß±:Û®OõRÓìO7T½1®Á)Lãß¯Ú,Cøl]×Nb
+­ÄWÌ¸¶ÌÎI
+(bK]9ÆÐJlkaÃ´NB´DK=­
+e¹¯
+\¿ñÂAîý½ ?ñ}»g)fLþ§ÌU¢Þ^Ùp)
+-endstream
+-endobj
+-403 0 obj
+-<</ToUnicode 699 0 R/Type/Font
+-/Encoding 700 0 R/CharProcs <</: 688 0 R
+-/R 687 0 R
+-/#0e 685 0 R
+-/q 680 0 R
+-/G 679 0 R
+-/0 677 0 R
+-/. 676 0 R
+-/1 675 0 R
+-/' 674 0 R
+-/T 673 0 R
+-/E 669 0 R
+-/, 668 0 R
+-/C 667 0 R
+-/P 664 0 R
+-/N 663 0 R
+-/y 657 0 R
+-/k 656 0 R
+-/w 655 0 R
+-/I 647 0 R
+-/S 646 0 R
+-/L 645 0 R
+-/V 644 0 R
+-/z 635 0 R
+-/x 634 0 R
+-/#0c 633 0 R
+-/h 632 0 R
+-/d 625 0 R
+-/g 624 0 R
+-/- 623 0 R
+-/b 622 0 R
+-/c 621 0 R
+-/r 620 0 R
+-/o 619 0 R
+-/n 618 0 R
+-/p 617 0 R
+-/s 616 0 R
+-/a 615 0 R
+-/f 614 0 R
+-/A 613 0 R
+-/M 402 0 R
+-/F 401 0 R
+-/#7b 400 0 R
+-/v 399 0 R
+-/e 398 0 R
+-/i 397 0 R
+-/t 396 0 R
+-/l 395 0 R
+-/u 394 0 R
+-/m 393 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 12/LastChar 123/Widths[ 23 0 37 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 13 0 0 0 0 13 15 13 0
+-21 21 0 0 0 0 0 0 0 0 13 0 0 0 0 0
+-0 31 0 30 0 28 27 32 0 16 0 0 26 37 31 0
+-28 0 30 23 30 0 31 0 0 0 0 0 0 0 0 0
+-0 21 19 19 21 19 13 19 21 13 0 19 11 34 23 21
+-21 19 18 17 14 22 19 28 19 20 17 21]
+-/Subtype/Type3>>
+-endobj
+-700 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-12/#0c
+-14/#0e
+-39/'
+-44/,/-/.
+-48/0/1
+-58/:
+-65/A
+-67/C
+-69/E/F/G
+-73/I
+-76/L/M/N
+-80/P
+-82/R/S/T
+-86/V
+-97/a/b/c/d/e/f/g/h/i
+-107/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
+-/#7b]>>
+-endobj
+-701 0 obj
+-<</Filter/FlateDecode/Length 193>>stream
+-x]=Ã 
+
+wNÁ
+-Bªü(bI
+­ª¶ `" "ÉÐÛ×¤C[þÀûQôÃupv¥Å#zõëtÅoQ
+a²ª­ZÊYÍ2¢¿Éðþ Ø fç»¡x¶¬ÌGå.R^Ã¤(Ý3&¸1ÓWõ.ÍÑY5"c;±K8"BÆ±.¯«XÞ ¶2!ViÖùj
+ûRµÅnÍ.³´¼uðûàCRQ
+òÓA`?
+-endstream
+-endobj
+-270 0 obj
+-<</ToUnicode 701 0 R/Type/Font
+-/Encoding 702 0 R/CharProcs <</M 593 0 R
+-/j 567 0 R
+-/#0b 557 0 R
+-/#0c 556 0 R
+-/, 514 0 R
+-/S 513 0 R
+-/#2f 512 0 R
+-/Q 511 0 R
+-/R 510 0 R
+-/z 509 0 R
+-/I 508 0 R
+-/0 507 0 R
+-/| 506 0 R
+-/N 505 0 R
+-/#7b 439 0 R
+-/K 438 0 R
+-/. 373 0 R
+-/f 372 0 R
+-/! 367 0 R
+-/T 366 0 R
+-/q 354 0 R
+-/F 353 0 R
+-/L 352 0 R
+-/v 333 0 R
+-/u 332 0 R
+-/k 323 0 R
+-/y 322 0 R
+-/w 321 0 R
+-/h 320 0 R
+-/s 319 0 R
+-/d 303 0 R
+-/c 302 0 R
+-/b 301 0 R
+-/g 292 0 R
+-/o 291 0 R
+-/p 290 0 R
+-/l 289 0 R
+-/n 288 0 R
+-/i 287 0 R
+-/r 286 0 R
+-/e 285 0 R
+-/t 284 0 R
+-/x 269 0 R
+-/a 268 0 R
+-/m 267 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 11/LastChar 124/Widths[ 30 27 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 15 0 0 0 0 0 0 0 0 0 0 15 0 15 25
+-25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 32 0 0 19 0 37 31 44 36 0
+-0 37 36 27 35 0 0 0 0 0 0 0 0 0 0 0
+-0 25 22 22 25 22 15 22 25 15 15 22 12 40 27 25
+-25 22 21 20 16 26 22 32 22 24 20 25 50]
+-/Subtype/Type3>>
+-endobj
+-702 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-11/#0b/#0c
+-33/!
+-44/,
+-46/./#2f/0
+-70/F
+-73/I
+-75/K/L/M/N
+-81/Q/R/S/T
+-97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p
+-/q/r/s/t/u/v/w/x/y/z/#7b/|]>>
+-endobj
+-219 0 obj
+-<</Type/Font
+-/Encoding 703 0 R/CharProcs <</o 218 0 R
+-/c 217 0 R
+-/a 216 0 R
+-/h 215 0 R
+-/C 214 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 67/LastChar 111/Widths[ 34 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 23 0 21 0 0 0 0 27 0 0 0 0 0 0 24]
+-/Subtype/Type3>>
+-endobj
+-703 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-67/C
+-97/a
+-99/c
+-104/h
+-111/o]>>
+-endobj
+-213 0 obj
+-<</Type/Font
+-/Encoding 704 0 R/CharProcs <</6 483 0 R
+-/5 391 0 R
+-/4 335 0 R
+-/3 325 0 R
+-/2 304 0 R
+-/1 212 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 49/LastChar 54/Widths[ 17 17 17 17 17 17]
+-/Subtype/Type3>>
+-endobj
+-704 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-49/1/2/3/4/5/6]>>
+-endobj
+-705 0 obj
+-<</Filter/FlateDecode/Length 188>>stream
+-x];Ã D{NÁ
+-lGþ(¢q¢$e±(ÆEn>v 
+³³;[Óe²&Ðêîxb ÚXåq]6H%ÎÆæD°S¾á-
+©Æ«p¯C
+P¾7V¡îòWSL°(\ ôÂÎHX]s¦5'hÕÔÔ{eÛpÖytÄWDÉY'2Ê}Tû¬öIí³¡ äæG4'%>RØ¼GòZ9vJk,þ6wK.ùº]]
+-endstream
+-endobj
+-209 0 obj
+-<</ToUnicode 705 0 R/Type/Font
+-/Encoding 706 0 R/CharProcs <</= 560 0 R
+-/y 559 0 R
+-/#23 558 0 R
+-/#2f 547 0 R
+-/q 541 0 R
+-/3 523 0 R
+-/w 460 0 R
+-/#29 459 0 R
+-/#28 458 0 R
+-/#5d 457 0 R
+-/#5b 456 0 R
+-/1 454 0 R
+-/v 452 0 R
+-/- 451 0 R
+-/b 450 0 R
+-/l 449 0 R
+-/g 448 0 R
+-/f 447 0 R
+-/t 446 0 R
+-/i 445 0 R
+-/#25 444 0 R
+-/Q 416 0 R
+-/F 390 0 R
+-/W 389 0 R
+-/V 388 0 R
+-/K 385 0 R
+-/Y 365 0 R
+-/T 294 0 R
+-/H 266 0 R
+-/G 265 0 R
+-/X 263 0 R
+-/N 262 0 R
+-/O 261 0 R
+-/I 260 0 R
+-/S 259 0 R
+-/P 258 0 R
+-/L 257 0 R
+-/B 256 0 R
+-/M 254 0 R
+-/D 253 0 R
+-/A 252 0 R
+-/E 251 0 R
+-/R 250 0 R
+-/x 246 0 R
+-/+ 245 0 R
+-/p 244 0 R
+-/m 243 0 R
+-/n 242 0 R
+-/e 241 0 R
+-/d 240 0 R
+-/u 239 0 R
+-/U 211 0 R
+-/Z 210 0 R
+-/r 208 0 R
+-/s 207 0 R
+-/. 206 0 R
+-/o 205 0 R
+-/c 204 0 R
+-/a 203 0 R
+-/h 202 0 R
+-/C 201 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 35/LastChar 121/Widths[ 26 0 26 0 0 26 26 0 26 0 26 26 26
+-0 26 0 26 0 0 0 0 0 0 0 0 0 26 0 0
+-0 26 26 26 26 26 26 26 26 26 0 26 26 26 26 26
+-26 26 26 26 26 26 26 26 26 26 26 26 0 26 0 0
+-0 26 26 26 26 26 26 26 26 26 0 0 26 26 26 26
+-26 26 26 26 26 26 26 26 26 26]
+-/Subtype/Type3>>
+-endobj
+-706 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-35/#23
+-37/#25
+-40/#28/#29
+-43/+
+-45/-/./#2f
+-49/1
+-51/3
+-61/=
+-65/A/B/C/D/E/F/G/H/I
+-75/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z
+-/#5b
+-93/#5d
+-97/a/b/c/d/e/f/g/h/i
+-108/l/m/n/o/p/q/r/s/t/u/v/w/x/y]>>
+-endobj
+-707 0 obj
+-<</Filter/FlateDecode/Length 179>>stream
+-x]1Ã 
+EwNÁ
+- ­:D,é¡UÕöLÄ@
+½}
+-I:tøÏø[ß¬®w²G
+-úZçM%¬I
+ar4'jÎ;Õªg	ëo*¾?(Ýø®f`OÁEm5IKTòsÙY+	xó÷uÞ
+£Ý'ÛVv­èÀ¢U
+-Q\dçXË¶ÃWG"ª×ÀçzGÍYâ9¿ScÅEQä
+?JZ
+-endstream
+-endobj
+-191 0 obj
+-<</ToUnicode 707 0 R/Type/Font
+-/Encoding 708 0 R/CharProcs <</j 494 0 R
+-/#01 461 0 R
+-/g 455 0 R
+-/f 453 0 R
+-/BnZr 437 0 R
+-/#0f 255 0 R
+-/x 190 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 0/LastChar 120/Widths[
+-39 14 0 0 0 0 0 0 0 0 0 0 0 0 0 25
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 25 25 0 0 14 0 0 0 0 0
+-0 0 0 0 0 0 0 0 22]
+-/Subtype/Type3>>
+-endobj
+-708 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-0/BnZr/#01
+-15/#0f
+-102/f/g
+-106/j
+-120/x]>>
+-endobj
+-188 0 obj
+-<</Type/Font
+-/Encoding 709 0 R/CharProcs <</6 482 0 R
+-/0 463 0 R
+-/5 387 0 R
+-/4 334 0 R
+-/3 324 0 R
+-/2 300 0 R
+-/1 187 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 48/LastChar 54/Widths[
+-18 18 18 18 18 18 18]
+-/Subtype/Type3>>
+-endobj
+-709 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-48/0/1/2/3/4/5/6]>>
+-endobj
+-710 0 obj
+-<</Filter/FlateDecode/Length 205>>stream
+-x]Ð±Â à§à
+-FKM]
+4F}£a(ÄÁ·÷¸ªÃOøZ®½£Û
+ö*ïÎ%Ù+TîCt
+éY,ð;L!2¹â.Øú­v6u»£É·WÀ/>º
+É¥È&l,'`£zô^3îïÕ°ÜýçäZj¸"¦ ²ÇmOì[MAn
+©ð§>
+;äFSÆi5öm¡õØ¦ýÇí³®Fn¿[Ë)·*ao±i¨
+-endstream
+-endobj
+-152 0 obj
+-<</ToUnicode 710 0 R/Type/Font
+-/Encoding 711 0 R/CharProcs <</z 570 0 R
+-/y 569 0 R
+-/x 568 0 R
+-/q 532 0 R
+-/i 462 0 R
+-/; 70 0 R
+-/#1b 423 0 R
+-/g 363 0 R
+-/#15 361 0 R
+-/u 360 0 R
+-/A 359 0 R
+-/= 105 0 R
+-/p 315 0 R
+-/m 314 0 R
+-/n 313 0 R
+-/G 312 0 R
+-/: 88 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 21/LastChar 122/Widths[ 28 0 0 0 0 0 28 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 14 14 0 24 0 0
+-0 37 0 0 0 0 0 38 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 23 0 17 0 0 0 43 29 0
+-24 22 0 0 0 28 0 0 28 24 23]
+-/Subtype/Type3>>
+-endobj
+-711 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-21/#15
+-27/#1b
+-58/:/;
+-61/=
+-65/A
+-71/G
+-103/g
+-105/i
+-109/m/n
+-112/p/q
+-117/u
+-120/x/y/z]>>
+-endobj
+-712 0 obj
+-<</Filter/FlateDecode/Length 201>>stream
+-x]AÂ E÷´5-mÂ¦n\hzJE`]x{iuáâOx0?3b8
+OÞ­¼¸¦`î°rëüà^É avU>9³îDÕ,:²b8ëøxGàØ vã^ ¸µÕvUm&&xFm i?e©¤µþÄfíÞYWJÖB¡OMCØ!6­"%VÄ^{D^A(²WJ¶p¤Ñß!yç»>7¯À¯Bå,ÎÃï_bÙÅQìÇc>
+-endstream
+-endobj
+-117 0 obj
+-<</ToUnicode 712 0 R/Type/Font
+-/Encoding 713 0 R/CharProcs <</O 678 0 R
+-/Y 672 0 R
+-/U 671 0 R
+-/H 670 0 R
+-/J 658 0 R
+-/- 648 0 R
+-/P 626 0 R
+-/E 598 0 R
+-/" 485 0 R
+-/\ 484 0 R
+-/I 411 0 R
+-/Q 410 0 R
+-/R 409 0 R
+-/' 408 0 R
+-/k 407 0 R
+-/#0c 406 0 R
+-/#5d 405 0 R
+-/#5b 404 0 R
+-/S 392 0 R
+-/#2f 343 0 R
+-/L 342 0 R
+-/K 341 0 R
+-/#29 340 0 R
+-/#28 339 0 R
+-/#7b 338 0 R
+-/F 337 0 R
+-/T 336 0 R
+-/9 327 0 R
+-/q 326 0 R
+-/8 307 0 R
+-/#0b 306 0 R
+-/W 305 0 R
+-/7 295 0 R
+-/6 279 0 R
+-/5 272 0 R
+-/#0d 233 0 R
+-/0 232 0 R
+-/B 231 0 R
+-/M 230 0 R
+-/N 229 0 R
+-/w 228 0 R
+-/u 227 0 R
+-/z 226 0 R
+-/A 225 0 R
+-/x 224 0 R
+-/, 223 0 R
+-/y 222 0 R
+-/C 221 0 R
+-/f 220 0 R
+-/3 181 0 R
+-/v 133 0 R
+-/o 132 0 R
+-/g 131 0 R
+-/d 130 0 R
+-/. 129 0 R
+-/s 128 0 R
+-/c 127 0 R
+-/@ 126 0 R
+-/h 125 0 R
+-/b 124 0 R
+-/l 123 0 R
+-/i 122 0 R
+-/; 121 0 R
+-/2 120 0 R
+-/4 119 0 R
+-/1 118 0 R
+-/n 116 0 R
+-/m 115 0 R
+-/t 114 0 R
+-/r 113 0 R
+-/a 112 0 R
+-/p 111 0 R
+-/e 110 0 R
+-/D 109 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 11/LastChar 123/Widths[ 24 23 23 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 21 0 0 0 0 12 16 16 0 0 12 14 12 21
+-21 21 21 21 21 21 21 21 21 21 0 12 0 0 0 0
+-32 31 29 30 32 28 27 0 31 15 21 32 26 38 31 32
+-28 32 31 23 30 31 0 43 0 31 0 12 21 12 0 0
+-0 21 23 18 23 18 13 21 23 12 0 22 12 36 23 21
+-23 22 16 16 16 23 22 30 22 22 18 21]
+-/Subtype/Type3>>
+-endobj
+-713 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-11/#0b/#0c/#0d
+-34/"
+-39/'/#28/#29
+-44/,/-/./#2f/0/1/2/3/4/5/6/7/8/9
+-59/;
+-64/@/A/B/C/D/E/F
+-72/H/I/J/K/L/M/N/O/P/Q/R/S/T/U
+-87/W
+-89/Y
+-91/#5b/\/#5d
+-97/a/b/c/d/e/f/g/h/i
+-107/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
+-/#7b]>>
+-endobj
+-714 0 obj
+-<</Filter/FlateDecode/Length 163>>stream
+-x]O10
+Üó
+-ÿ ¡ª*!º0´ªÚ~ 8Ê
+0ô÷%:t¸ì»Ï²ë¯=»ò=¾(ul"Í~H0ÐèXT'0Ó>ÆI!»ïO X
+-d·ù®'Ïº:Uµ
+ÐFGRmcm+Í´»;ëK[ ÔÊÙ(9K
+7SiZäé÷Lð!§`
+ø7¡SJ
+-endstream
+-endobj
+-108 0 obj
+-<</ToUnicode 714 0 R/Type/Font
+-/Encoding 715 0 R/CharProcs <</y 134 0 R
+-/#03 107 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 3/LastChar 121/Widths[ 17 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 16]
+-/Subtype/Type3>>
+-endobj
+-715 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-3/#03
+-121/y]>>
+-endobj
+-716 0 obj
+-<</Filter/FlateDecode/Length 195>>stream
+-x]= 
+{NÁ
+-ü¨Ccd2I.¸8ZäöYPS¤yìc÷uýµ·f¥Ù#8õjcÇ Û:Àd,)J:µ
+v5KO²î&ýûãbèïrìÙu:*vr#,^*ÒN@x
+®µ `Ç¿+¶}TV
+àÕE "C¬²­à,OØ"²±ð½*ö:_mcs^ª¶À®)eJ7~á.|}_ª
+-endstream
+-endobj
+-95 0 obj
+-<</ToUnicode 716 0 R/Type/Font
+-/Encoding 717 0 R/CharProcs <</N 588 0 R
+-/#2f 587 0 R
+-/- 586 0 R
+-/#0b 581 0 R
+-/J 580 0 R
+-/#0d 579 0 R
+-/9 546 0 R
+-/j 477 0 R
+-/B 476 0 R
+-/H 475 0 R
+-/E 474 0 R
+-/: 473 0 R
+-/z 472 0 R
+-/F 435 0 R
+-/x 430 0 R
+-/W 429 0 R
+-/R 424 0 R
+-/M 386 0 R
+-/L 380 0 R
+-/K 379 0 R
+-/S 271 0 R
+-/w 195 0 R
+-/O 194 0 R
+-/V 180 0 R
+-/b 175 0 R
+-/#0c 174 0 R
+-/#7b 173 0 R
+-/U 172 0 R
+-/6 171 0 R
+-/p 169 0 R
+-/5 168 0 R
+-/7 166 0 R
+-/y 165 0 R
+-/f 164 0 R
+-/A 163 0 R
+-/m 162 0 R
+-/l 161 0 R
+-/g 160 0 R
+-/P 159 0 R
+-/3 158 0 R
+-/8 157 0 R
+-/d 156 0 R
+-/t 155 0 R
+-/I 154 0 R
+-/4 150 0 R
+-/n 149 0 R
+-/s 148 0 R
+-/r 147 0 R
+-/v 146 0 R
+-/k 145 0 R
+-/i 144 0 R
+-/u 143 0 R
+-/q 142 0 R
+-/e 141 0 R
+-/T 140 0 R
+-/1 139 0 R
+-/0 98 0 R
+-/. 97 0 R
+-/2 96 0 R
+-/o 94 0 R
+-/c 93 0 R
+-/a 92 0 R
+-/h 91 0 R
+-/C 90 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 11/LastChar 123/Widths[ 33 31 31 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 19 16 28
+-28 28 28 28 28 28 28 28 28 28 16 0 0 0 0 0
+-0 42 40 40 0 37 35 0 44 21 29 44 34 53 44 42
+-38 0 42 31 39 43 42 58 0 0 0 0 0 0 0 0
+-0 27 31 25 31 26 17 28 31 16 17 30 16 48 31 28
+-31 30 23 22 22 31 30 40 30 30 25 28]
+-/Subtype/Type3>>
+-endobj
+-717 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-11/#0b/#0c/#0d
+-45/-/./#2f/0/1/2/3/4/5/6/7/8/9/:
+-65/A/B/C
+-69/E/F
+-72/H/I/J/K/L/M/N/O/P
+-82/R/S/T/U/V/W
+-97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p
+-/q/r/s/t/u/v/w/x/y/z/#7b]>>
+-endobj
+-81 0 obj
+-<</Type/Font
+-/Encoding 718 0 R/CharProcs <</c 80 0 R
+-/a 79 0 R
+-/r 78 0 R
+-/t 77 0 R
+-/s 76 0 R
+-/b 75 0 R
+-/A 74 0 R
+->>/FontMatrix[1 0 0 -1 0 0]/FontBBox[0 0 1000 1000]/FirstChar 65/LastChar 116/Widths[ 45 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+-0 30 33 27 0 0 0 0 0 0 0 0 0 0 0 0
+-0 0 23 24 23]
+-/Subtype/Type3>>
+-endobj
+-718 0 obj
+-<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+-65/A
+-97/a/b/c
+-114/r/s/t]>>
+-endobj
+-719 0 obj
+-<</Length 1424>>stream
+-<?xpacket begin='ï»¿' id='W5M0MpCehiHzreSzNTczkc9d'?>
+-<?adobe-xap-filters esc="CRLF"?>
+-<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+-<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+-<rdf:Description rdf:about='cf471562-6f31-11de-0000-618b722e1f7a' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 8.54'/>
+-<rdf:Description rdf:about='cf471562-6f31-11de-0000-618b722e1f7a' xmlns:xap='http://ns.adobe.com/xap/1.0/' xap:ModifyDate='2009-07-09' xap:CreateDate='2009-07-09'><xap:CreatorTool>GPL Ghostscript 8.54 PDF Writer</xap:CreatorTool></rdf:Description>
+-<rdf:Description rdf:about='cf471562-6f31-11de-0000-618b722e1f7a' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='cf471562-6f31-11de-0000-618b722e1f7a'/>
+-<rdf:Description rdf:about='cf471562-6f31-11de-0000-618b722e1f7a' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>\376\377\000g\000u\000i\000d\000e\000.\000d\000v\000i</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li>\376\377\000j\000s\000c\000h\000i\000e\000r\000m</rdf:li></rdf:Seq></dc:creator></rdf:Description>
+-</rdf:RDF>
+-</x:xmpmeta>
+-                                                                        
+-                                                                        
+-<?xpacket end='w'?>
+-endstream
+-endobj
+-2 0 obj
+-<</Producer(GPL Ghostscript 8.54)
+-/CreationDate(D:20090709151709-07'00')
+-/ModDate(D:20090709151709)
+-/Creator(\376\377\000P\000D\000F\000C\000r\000e\000a\000t\000o\000r\000 \000V\000e\000r\000s\000i\000o\000n\000 \0000\000.\0009\000.\0003)
+-/Title(\376\377\000g\000u\000i\000d\000e\000.\000d\000v\000i)
+-/Author(\376\377\000j\000s\000c\000h\000i\000e\000r\000m)
+-/Keywords()
+-/Subject()>>endobj
+-xref
+-0 720
+-0000000000 65535 f 
+-0000172089 00000 n 
+-0000304137 00000 n 
+-0000171685 00000 n 
+-0000164941 00000 n 
+-0000000015 00000 n 
+-0000001976 00000 n 
+-0000220044 00000 n 
+-0000256147 00000 n 
+-0000183025 00000 n 
+-0000219812 00000 n 
+-0000255898 00000 n 
+-0000182775 00000 n 
+-0000219658 00000 n 
+-0000255665 00000 n 
+-0000182522 00000 n 
+-0000219429 00000 n 
+-0000288557 00000 n 
+-0000255455 00000 n 
+-0000182304 00000 n 
+-0000216857 00000 n 
+-0000255250 00000 n 
+-0000182071 00000 n 
+-0000216647 00000 n 
+-0000255036 00000 n 
+-0000181862 00000 n 
+-0000216423 00000 n 
+-0000254834 00000 n 
+-0000181644 00000 n 
+-0000216209 00000 n 
+-0000254595 00000 n 
+-0000181393 00000 n 
+-0000215988 00000 n 
+-0000254346 00000 n 
+-0000181144 00000 n 
+-0000215755 00000 n 
+-0000250302 00000 n 
+-0000180917 00000 n 
+-0000215532 00000 n 
+-0000250090 00000 n 
+-0000180691 00000 n 
+-0000215300 00000 n 
+-0000249859 00000 n 
+-0000286031 00000 n 
+-0000180422 00000 n 
+-0000215055 00000 n 
+-0000249628 00000 n 
+-0000180189 00000 n 
+-0000214822 00000 n 
+-0000249393 00000 n 
+-0000179979 00000 n 
+-0000214645 00000 n 
+-0000249112 00000 n 
+-0000284729 00000 n 
+-0000214428 00000 n 
+-0000248856 00000 n 
+-0000284484 00000 n 
+-0000214209 00000 n 
+-0000248608 00000 n 
+-0000284329 00000 n 
+-0000213958 00000 n 
+-0000248370 00000 n 
+-0000284119 00000 n 
+-0000213745 00000 n 
+-0000248136 00000 n 
+-0000283903 00000 n 
+-0000285181 00000 n 
+-0000213529 00000 n 
+-0000247924 00000 n 
+-0000283665 00000 n 
+-0000208759 00000 n 
+-0000247683 00000 n 
+-0000283409 00000 n 
+-0000208526 00000 n 
+-0000247435 00000 n 
+-0000283166 00000 n 
+-0000208298 00000 n 
+-0000247212 00000 n 
+-0000282956 00000 n 
+-0000208061 00000 n 
+-0000246989 00000 n 
+-0000302215 00000 n 
+-0000282697 00000 n 
+-0000207827 00000 n 
+-0000246768 00000 n 
+-0000282481 00000 n 
+-0000207602 00000 n 
+-0000240866 00000 n 
+-0000282324 00000 n 
+-0000207384 00000 n 
+-0000240623 00000 n 
+-0000282104 00000 n 
+-0000207156 00000 n 
+-0000240412 00000 n 
+-0000281884 00000 n 
+-0000300799 00000 n 
+-0000206923 00000 n 
+-0000240252 00000 n 
+-0000281654 00000 n 
+-0000206695 00000 n 
+-0000240039 00000 n 
+-0000281412 00000 n 
+-0000206458 00000 n 
+-0000239832 00000 n 
+-0000276420 00000 n 
+-0000206247 00000 n 
+-0000239603 00000 n 
+-0000281235 00000 n 
+-0000299999 00000 n 
+-0000213307 00000 n 
+-0000246554 00000 n 
+-0000281008 00000 n 
+-0000213091 00000 n 
+-0000246351 00000 n 
+-0000280796 00000 n 
+-0000212876 00000 n 
+-0000246146 00000 n 
+-0000298170 00000 n 
+-0000280593 00000 n 
+-0000212654 00000 n 
+-0000245923 00000 n 
+-0000280416 00000 n 
+-0000212453 00000 n 
+-0000245729 00000 n 
+-0000280200 00000 n 
+-0000206037 00000 n 
+-0000245464 00000 n 
+-0000279987 00000 n 
+-0000205822 00000 n 
+-0000245309 00000 n 
+-0000279765 00000 n 
+-0000205583 00000 n 
+-0000245097 00000 n 
+-0000279556 00000 n 
+-0000205373 00000 n 
+-0000172155 00000 n 
+-0000165092 00000 n 
+-0000001996 00000 n 
+-0000003945 00000 n 
+-0000271794 00000 n 
+-0000194630 00000 n 
+-0000227880 00000 n 
+-0000271556 00000 n 
+-0000194424 00000 n 
+-0000227668 00000 n 
+-0000271319 00000 n 
+-0000194208 00000 n 
+-0000227459 00000 n 
+-0000271095 00000 n 
+-0000193998 00000 n 
+-0000227226 00000 n 
+-0000270843 00000 n 
+-0000297149 00000 n 
+-0000226977 00000 n 
+-0000260404 00000 n 
+-0000193776 00000 n 
+-0000226745 00000 n 
+-0000260158 00000 n 
+-0000193532 00000 n 
+-0000226519 00000 n 
+-0000259904 00000 n 
+-0000193332 00000 n 
+-0000226298 00000 n 
+-0000259663 00000 n 
+-0000193111 00000 n 
+-0000226059 00000 n 
+-0000259433 00000 n 
+-0000192847 00000 n 
+-0000225820 00000 n 
+-0000259201 00000 n 
+-0000184906 00000 n 
+-0000225576 00000 n 
+-0000258980 00000 n 
+-0000184745 00000 n 
+-0000225349 00000 n 
+-0000258749 00000 n 
+-0000172258 00000 n 
+-0000165239 00000 n 
+-0000003967 00000 n 
+-0000004681 00000 n 
+-0000212218 00000 n 
+-0000244858 00000 n 
+-0000172328 00000 n 
+-0000165386 00000 n 
+-0000004702 00000 n 
+-0000008482 00000 n 
+-0000192673 00000 n 
+-0000237866 00000 n 
+-0000296518 00000 n 
+-0000270610 00000 n 
+-0000192411 00000 n 
+-0000295887 00000 n 
+-0000237634 00000 n 
+-0000270382 00000 n 
+-0000192164 00000 n 
+-0000237401 00000 n 
+-0000270225 00000 n 
+-0000191944 00000 n 
+-0000225110 00000 n 
+-0000270011 00000 n 
+-0000191695 00000 n 
+-0000224886 00000 n 
+-0000269796 00000 n 
+-0000191470 00000 n 
+-0000224670 00000 n 
+-0000269577 00000 n 
+-0000191310 00000 n 
+-0000224446 00000 n 
+-0000269365 00000 n 
+-0000294281 00000 n 
+-0000191098 00000 n 
+-0000224238 00000 n 
+-0000276218 00000 n 
+-0000293683 00000 n 
+-0000203293 00000 n 
+-0000237186 00000 n 
+-0000275997 00000 n 
+-0000203080 00000 n 
+-0000236971 00000 n 
+-0000293263 00000 n 
+-0000269157 00000 n 
+-0000202842 00000 n 
+-0000236743 00000 n 
+-0000268988 00000 n 
+-0000202629 00000 n 
+-0000236518 00000 n 
+-0000268777 00000 n 
+-0000202425 00000 n 
+-0000236292 00000 n 
+-0000268558 00000 n 
+-0000202192 00000 n 
+-0000236066 00000 n 
+-0000268330 00000 n 
+-0000201984 00000 n 
+-0000172398 00000 n 
+-0000165541 00000 n 
+-0000008504 00000 n 
+-0000011966 00000 n 
+-0000254185 00000 n 
+-0000179772 00000 n 
+-0000219199 00000 n 
+-0000253965 00000 n 
+-0000179564 00000 n 
+-0000218986 00000 n 
+-0000253730 00000 n 
+-0000179354 00000 n 
+-0000218761 00000 n 
+-0000253517 00000 n 
+-0000179118 00000 n 
+-0000212003 00000 n 
+-0000253290 00000 n 
+-0000178906 00000 n 
+-0000211776 00000 n 
+-0000253065 00000 n 
+-0000178675 00000 n 
+-0000211566 00000 n 
+-0000258528 00000 n 
+-0000184536 00000 n 
+-0000224022 00000 n 
+-0000268097 00000 n 
+-0000190898 00000 n 
+-0000223806 00000 n 
+-0000267880 00000 n 
+-0000201753 00000 n 
+-0000239429 00000 n 
+-0000279329 00000 n 
+-0000211355 00000 n 
+-0000252827 00000 n 
+-0000184312 00000 n 
+-0000218530 00000 n 
+-0000292100 00000 n 
+-0000258283 00000 n 
+-0000190661 00000 n 
+-0000172520 00000 n 
+-0000165696 00000 n 
+-0000011988 00000 n 
+-0000015559 00000 n 
+-0000244589 00000 n 
+-0000178448 00000 n 
+-0000211118 00000 n 
+-0000172616 00000 n 
+-0000165843 00000 n 
+-0000015581 00000 n 
+-0000018497 00000 n 
+-0000267661 00000 n 
+-0000201539 00000 n 
+-0000235854 00000 n 
+-0000267438 00000 n 
+-0000201312 00000 n 
+-0000235637 00000 n 
+-0000267196 00000 n 
+-0000201094 00000 n 
+-0000235397 00000 n 
+-0000267015 00000 n 
+-0000200890 00000 n 
+-0000252602 00000 n 
+-0000172686 00000 n 
+-0000165998 00000 n 
+-0000018519 00000 n 
+-0000022632 00000 n 
+-0000205159 00000 n 
+-0000239192 00000 n 
+-0000275778 00000 n 
+-0000200644 00000 n 
+-0000244374 00000 n 
+-0000279077 00000 n 
+-0000204938 00000 n 
+-0000244131 00000 n 
+-0000172782 00000 n 
+-0000166153 00000 n 
+-0000022654 00000 n 
+-0000026894 00000 n 
+-0000190399 00000 n 
+-0000235170 00000 n 
+-0000266775 00000 n 
+-0000190158 00000 n 
+-0000234970 00000 n 
+-0000266572 00000 n 
+-0000189957 00000 n 
+-0000223584 00000 n 
+-0000266331 00000 n 
+-0000189728 00000 n 
+-0000223345 00000 n 
+-0000266081 00000 n 
+-0000189511 00000 n 
+-0000234753 00000 n 
+-0000275545 00000 n 
+-0000200405 00000 n 
+-0000172904 00000 n 
+-0000166308 00000 n 
+-0000026916 00000 n 
+-0000030913 00000 n 
+-0000258064 00000 n 
+-0000184093 00000 n 
+-0000218317 00000 n 
+-0000265868 00000 n 
+-0000189303 00000 n 
+-0000223127 00000 n 
+-0000257910 00000 n 
+-0000189075 00000 n 
+-0000222899 00000 n 
+-0000257687 00000 n 
+-0000188871 00000 n 
+-0000222686 00000 n 
+-0000173013 00000 n 
+-0000166463 00000 n 
+-0000030935 00000 n 
+-0000034800 00000 n 
+-0000173122 00000 n 
+-0000166610 00000 n 
+-0000034822 00000 n 
+-0000038637 00000 n 
+-0000234532 00000 n 
+-0000265632 00000 n 
+-0000200167 00000 n 
+-0000173205 00000 n 
+-0000166757 00000 n 
+-0000038659 00000 n 
+-0000042817 00000 n 
+-0000252365 00000 n 
+-0000178224 00000 n 
+-0000218086 00000 n 
+-0000252154 00000 n 
+-0000177982 00000 n 
+-0000217802 00000 n 
+-0000257468 00000 n 
+-0000183870 00000 n 
+-0000222466 00000 n 
+-0000173275 00000 n 
+-0000166912 00000 n 
+-0000042839 00000 n 
+-0000046873 00000 n 
+-0000278844 00000 n 
+-0000210958 00000 n 
+-0000173384 00000 n 
+-0000167059 00000 n 
+-0000046895 00000 n 
+-0000051006 00000 n 
+-0000265419 00000 n 
+-0000188625 00000 n 
+-0000234314 00000 n 
+-0000173443 00000 n 
+-0000167206 00000 n 
+-0000051028 00000 n 
+-0000055403 00000 n 
+-0000177746 00000 n 
+-0000222225 00000 n 
+-0000257247 00000 n 
+-0000188411 00000 n 
+-0000257022 00000 n 
+-0000188190 00000 n 
+-0000238975 00000 n 
+-0000275306 00000 n 
+-0000199934 00000 n 
+-0000234093 00000 n 
+-0000275099 00000 n 
+-0000199721 00000 n 
+-0000233877 00000 n 
+-0000274885 00000 n 
+-0000199505 00000 n 
+-0000233718 00000 n 
+-0000274661 00000 n 
+-0000199270 00000 n 
+-0000290605 00000 n 
+-0000233516 00000 n 
+-0000274464 00000 n 
+-0000199059 00000 n 
+-0000233297 00000 n 
+-0000274292 00000 n 
+-0000198823 00000 n 
+-0000233038 00000 n 
+-0000265222 00000 n 
+-0000173526 00000 n 
+-0000167361 00000 n 
+-0000055425 00000 n 
+-0000059395 00000 n 
+-0000217570 00000 n 
+-0000173648 00000 n 
+-0000167516 00000 n 
+-0000059417 00000 n 
+-0000063514 00000 n 
+-0000187983 00000 n 
+-0000288054 00000 n 
+-0000222005 00000 n 
+-0000187744 00000 n 
+-0000173744 00000 n 
+-0000167671 00000 n 
+-0000063536 00000 n 
+-0000067615 00000 n 
+-0000274037 00000 n 
+-0000204712 00000 n 
+-0000173879 00000 n 
+-0000167826 00000 n 
+-0000067637 00000 n 
+-0000071597 00000 n 
+-0000256793 00000 n 
+-0000183630 00000 n 
+-0000221844 00000 n 
+-0000256542 00000 n 
+-0000183470 00000 n 
+-0000173975 00000 n 
+-0000167973 00000 n 
+-0000071619 00000 n 
+-0000075422 00000 n 
+-0000243881 00000 n 
+-0000278634 00000 n 
+-0000210744 00000 n 
+-0000243668 00000 n 
+-0000278385 00000 n 
+-0000204511 00000 n 
+-0000243444 00000 n 
+-0000278214 00000 n 
+-0000204292 00000 n 
+-0000243217 00000 n 
+-0000278005 00000 n 
+-0000204064 00000 n 
+-0000243011 00000 n 
+-0000277801 00000 n 
+-0000203838 00000 n 
+-0000242782 00000 n 
+-0000277578 00000 n 
+-0000203679 00000 n 
+-0000242558 00000 n 
+-0000183256 00000 n 
+-0000174071 00000 n 
+-0000168128 00000 n 
+-0000075444 00000 n 
+-0000079599 00000 n 
+-0000174180 00000 n 
+-0000168283 00000 n 
+-0000079621 00000 n 
+-0000083275 00000 n 
+-0000177533 00000 n 
+-0000210577 00000 n 
+-0000242327 00000 n 
+-0000177314 00000 n 
+-0000210344 00000 n 
+-0000242099 00000 n 
+-0000174276 00000 n 
+-0000168438 00000 n 
+-0000083297 00000 n 
+-0000087397 00000 n 
+-0000238757 00000 n 
+-0000210126 00000 n 
+-0000241917 00000 n 
+-0000177135 00000 n 
+-0000174385 00000 n 
+-0000168593 00000 n 
+-0000087419 00000 n 
+-0000091370 00000 n 
+-0000174494 00000 n 
+-0000168748 00000 n 
+-0000091392 00000 n 
+-0000095427 00000 n 
+-0000265058 00000 n 
+-0000221685 00000 n 
+-0000256387 00000 n 
+-0000174590 00000 n 
+-0000168903 00000 n 
+-0000095449 00000 n 
+-0000099264 00000 n 
+-0000174723 00000 n 
+-0000169058 00000 n 
+-0000099286 00000 n 
+-0000103398 00000 n 
+-0000209874 00000 n 
+-0000241758 00000 n 
+-0000277337 00000 n 
+-0000251947 00000 n 
+-0000176914 00000 n 
+-0000217318 00000 n 
+-0000251673 00000 n 
+-0000176700 00000 n 
+-0000217067 00000 n 
+-0000251499 00000 n 
+-0000174808 00000 n 
+-0000169213 00000 n 
+-0000103420 00000 n 
+-0000107215 00000 n 
+-0000174880 00000 n 
+-0000169368 00000 n 
+-0000107237 00000 n 
+-0000111251 00000 n 
+-0000241529 00000 n 
+-0000174950 00000 n 
+-0000169523 00000 n 
+-0000111273 00000 n 
+-0000115419 00000 n 
+-0000175035 00000 n 
+-0000169678 00000 n 
+-0000115441 00000 n 
+-0000119474 00000 n 
+-0000251262 00000 n 
+-0000175105 00000 n 
+-0000169833 00000 n 
+-0000119496 00000 n 
+-0000123542 00000 n 
+-0000175201 00000 n 
+-0000169988 00000 n 
+-0000123564 00000 n 
+-0000127338 00000 n 
+-0000277100 00000 n 
+-0000175284 00000 n 
+-0000170143 00000 n 
+-0000127360 00000 n 
+-0000131284 00000 n 
+-0000187501 00000 n 
+-0000232826 00000 n 
+-0000175380 00000 n 
+-0000170298 00000 n 
+-0000131306 00000 n 
+-0000134785 00000 n 
+-0000175463 00000 n 
+-0000170453 00000 n 
+-0000134807 00000 n 
+-0000138470 00000 n 
+-0000238501 00000 n 
+-0000273767 00000 n 
+-0000209650 00000 n 
+-0000251021 00000 n 
+-0000176498 00000 n 
+-0000221442 00000 n 
+-0000175546 00000 n 
+-0000170608 00000 n 
+-0000138492 00000 n 
+-0000142553 00000 n 
+-0000187274 00000 n 
+-0000232593 00000 n 
+-0000276870 00000 n 
+-0000209412 00000 n 
+-0000241304 00000 n 
+-0000175629 00000 n 
+-0000170763 00000 n 
+-0000142575 00000 n 
+-0000146310 00000 n 
+-0000175738 00000 n 
+-0000170918 00000 n 
+-0000146332 00000 n 
+-0000150286 00000 n 
+-0000264836 00000 n 
+-0000209196 00000 n 
+-0000250787 00000 n 
+-0000175847 00000 n 
+-0000171073 00000 n 
+-0000150308 00000 n 
+-0000154252 00000 n 
+-0000203520 00000 n 
+-0000241088 00000 n 
+-0000276639 00000 n 
+-0000175943 00000 n 
+-0000171228 00000 n 
+-0000154274 00000 n 
+-0000158090 00000 n 
+-0000208933 00000 n 
+-0000176026 00000 n 
+-0000171383 00000 n 
+-0000158112 00000 n 
+-0000162529 00000 n 
+-0000273544 00000 n 
+-0000198582 00000 n 
+-0000232434 00000 n 
+-0000273335 00000 n 
+-0000198353 00000 n 
+-0000232219 00000 n 
+-0000273116 00000 n 
+-0000198142 00000 n 
+-0000232008 00000 n 
+-0000272910 00000 n 
+-0000197923 00000 n 
+-0000231816 00000 n 
+-0000272685 00000 n 
+-0000197704 00000 n 
+-0000287051 00000 n 
+-0000231589 00000 n 
+-0000264608 00000 n 
+-0000197489 00000 n 
+-0000231372 00000 n 
+-0000264374 00000 n 
+-0000197271 00000 n 
+-0000231159 00000 n 
+-0000264162 00000 n 
+-0000197056 00000 n 
+-0000230936 00000 n 
+-0000264004 00000 n 
+-0000196823 00000 n 
+-0000230709 00000 n 
+-0000263787 00000 n 
+-0000196620 00000 n 
+-0000230469 00000 n 
+-0000263570 00000 n 
+-0000187063 00000 n 
+-0000230253 00000 n 
+-0000263346 00000 n 
+-0000186816 00000 n 
+-0000230028 00000 n 
+-0000263133 00000 n 
+-0000186587 00000 n 
+-0000229805 00000 n 
+-0000262932 00000 n 
+-0000186377 00000 n 
+-0000229551 00000 n 
+-0000262699 00000 n 
+-0000186157 00000 n 
+-0000229351 00000 n 
+-0000262472 00000 n 
+-0000185946 00000 n 
+-0000221202 00000 n 
+-0000262271 00000 n 
+-0000185788 00000 n 
+-0000220968 00000 n 
+-0000262050 00000 n 
+-0000185574 00000 n 
+-0000220732 00000 n 
+-0000261849 00000 n 
+-0000185366 00000 n 
+-0000220507 00000 n 
+-0000261618 00000 n 
+-0000185134 00000 n 
+-0000220291 00000 n 
+-0000272440 00000 n 
+-0000196448 00000 n 
+-0000229143 00000 n 
+-0000272219 00000 n 
+-0000196216 00000 n 
+-0000228918 00000 n 
+-0000261406 00000 n 
+-0000195982 00000 n 
+-0000228674 00000 n 
+-0000261232 00000 n 
+-0000195754 00000 n 
+-0000228473 00000 n 
+-0000261014 00000 n 
+-0000195537 00000 n 
+-0000228257 00000 n 
+-0000260841 00000 n 
+-0000195329 00000 n 
+-0000228098 00000 n 
+-0000260606 00000 n 
+-0000195088 00000 n 
+-0000250540 00000 n 
+-0000176266 00000 n 
+-0000176122 00000 n 
+-0000171538 00000 n 
+-0000162551 00000 n 
+-0000164919 00000 n 
+-0000238231 00000 n 
+-0000272004 00000 n 
+-0000194846 00000 n 
+-0000238065 00000 n 
+-0000176205 00000 n 
+-0000284950 00000 n 
+-0000285644 00000 n 
+-0000285742 00000 n 
+-0000286590 00000 n 
+-0000286752 00000 n 
+-0000287857 00000 n 
+-0000288231 00000 n 
+-0000288315 00000 n 
+-0000290006 00000 n 
+-0000290316 00000 n 
+-0000291605 00000 n 
+-0000291838 00000 n 
+-0000293058 00000 n 
+-0000293577 00000 n 
+-0000293930 00000 n 
+-0000294024 00000 n 
+-0000295383 00000 n 
+-0000295639 00000 n 
+-0000296401 00000 n 
+-0000296779 00000 n 
+-0000296875 00000 n 
+-0000297741 00000 n 
+-0000297900 00000 n 
+-0000299484 00000 n 
+-0000299767 00000 n 
+-0000300444 00000 n 
+-0000300535 00000 n 
+-0000301976 00000 n 
+-0000302559 00000 n 
+-0000302662 00000 n 
+-trailer
+-<< /Size 720 /Root 1 0 R /Info 2 0 R
+-/ID [<2167F428184D05DBF9BE98CF641E72F7><2167F428184D05DBF9BE98CF641E72F7>]
+->>
+-startxref
+-304535
+-%%EOF
+Index: ../trunk-jpl/externalpackages/chaco/chaco_guide.ps
+===================================================================
+--- ../trunk-jpl/externalpackages/chaco/chaco_guide.ps	(revision 13947)
++++ ../trunk-jpl/externalpackages/chaco/chaco_guide.ps	(revision 13948)
+@@ -1,4715 +0,0 @@
+-%!PS-Adobe-2.0
+-%%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software
+-%%Title: guide.dvi
+-%%Pages: 44 1
+-%%BoundingBox: 0 0 612 792
+-%%EndComments
+-%%BeginProcSet: tex.pro
+-/TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
+-load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
+-isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+-Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get
+-round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10
+-N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{
+-/vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{
+-statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N
+-/FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin
+-/FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array
+-/BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2
+-array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}
+-B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont
+-setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup
+-length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{
+-ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B
+-/ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0
+-N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S
+-dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0
+-ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
+-ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}
+-imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr
+-put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf
+-div put}if put /ctr ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook
+-known{bop-hook}if /SI save N @rigin 0 0 moveto}N /eop{clear SI restore
+-showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+-known{start-hook}if /VResolution X /Resolution X 1000 div /DVImag X /IE 256
+-array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for}N /p /show load N
+-/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X
+-/rulex X V}B /V statusdict begin /product where{pop product dup length 7 ge{0
+-7 getinterval(Display)eq}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1
+-TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1
+--.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /a{
+-moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{
+-S p tail}B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B
+-/j{3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w
+-}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+-a}B /bos{/SS save N}B /eos{clear SS restore}B end
+-%%EndProcSet
+-TeXDict begin 1000 300 300 @start /Fa 39 122 df<60F0F0701010102020204080040C7B
+-830D>44 D<60F0F06004047B830D>46 D<0003000000030000000300000007800000078000000F
+-C000000BC000000BC0000011E0000011E0000011E0000020F0000020F0000040F8000040780000
+-40780000803C0000803C0000803C0001FFFE0001001E0002001F0002000F0002000F0004000780
+-040007800C0007801E0007C0FF803FFC1E1D7E9C22>65 D<FFFFC0000F0078000F001C000F001E
+-000F000E000F000F000F000F000F000F000F000F000F000E000F001E000F003C000F00F8000FFF
+-F0000F003C000F000F000F0007800F0007800F0003C00F0003C00F0003C00F0003C00F0003C00F
+-0007800F0007000F000F000F003C00FFFFF0001A1C7D9B20>I<000FE0200070186001C0046003
+-0003E0060001E00E0000E01C00006038000060380000207800002070000020F0000000F0000000
+-F0000000F0000000F0000000F0000000F0000000F0000000700000207800002038000020380000
+-201C0000400E000040060000800300010001C0060000701800000FE0001B1E7D9C21>I<FFFFC0
+-000F0078000F001C000F0007000F0007800F0003800F0001C00F0001C00F0001E00F0000E00F00
+-00F00F0000F00F0000F00F0000F00F0000F00F0000F00F0000F00F0000F00F0000E00F0000E00F
+-0001E00F0001C00F0003800F0003800F0007000F001E000F007800FFFFE0001C1C7D9B22>I<FF
+-FFFF000F000F000F0003000F0001000F0001000F0001800F0000800F0000800F0080800F008000
+-0F0080000F0080000F0180000FFF80000F0180000F0080000F0080000F0080000F0080400F0000
+-400F0000800F0000800F0000800F0001800F0001800F0003000F000F00FFFFFF001A1C7D9B1F>
+-I<FFFFFE0F001E0F00060F00020F00020F00030F00010F00010F00810F00800F00800F00800F01
+-800FFF800F01800F00800F00800F00800F00800F00000F00000F00000F00000F00000F00000F00
+-000F8000FFF800181C7D9B1E>I<001FC040007030C001C00CC0030003C00E0001C00C0001C01C
+-0000C0380000C0380000407800004070000040F0000000F0000000F0000000F0000000F0000000
+-F0000000F0007FF8F00007C0700003C0780003C0380003C0380003C01C0003C00C0003C00E0003
+-C0030005C001C008C000703040001FC0001D1E7D9C23>I<FFF0FFF00F000F000F000F000F000F
+-000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000FFF
+-FF000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+-000F000F000F000F000F000F000F00FFF0FFF01C1C7D9B22>I<0FFF80007C00003C00003C0000
+-3C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0000
+-3C00003C00003C00003C00703C00F83C00F83C00F8380070780040700030E0000F8000111D7D9B
+-18>74 D<FFF00FF80F0007C00F0003000F0002000F0004000F0008000F0010000F0060000F0080
+-000F0100000F0200000F0700000F0F80000F1780000F23C0000F43E0000F81E0000F00F0000F00
+-F8000F0078000F003C000F001E000F001F000F000F000F0007800F0007C00F0007E0FFF03FFC1E
+-1C7D9B23>I<FFF8000F80000F00000F00000F00000F00000F00000F00000F00000F00000F0000
+-0F00000F00000F00000F00000F00000F00000F00000F00040F00040F00040F000C0F000C0F0008
+-0F00180F00380F00F8FFFFF8161C7D9B1C>I<FF80003FE00F80003E000F80003E000BC0005E00
+-0BC0005E0009E0009E0009E0009E0009E0009E0008F0011E0008F0011E000878021E000878021E
+-000878021E00083C041E00083C041E00081E081E00081E081E00081E081E00080F101E00080F10
+-1E000807A01E000807A01E000807A01E000803C01E000803C01E000801801E001C01801E00FF81
+-81FFE0231C7D9B29>I<FFFFE0000F0078000F001C000F000E000F0007000F0007800F0007800F
+-0007800F0007800F0007800F0007000F000E000F001C000F0078000FFFE0000F0000000F000000
+-0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000
+-00FFF00000191C7D9B1F>80 D<FFFF80000F00F0000F0038000F001C000F000E000F000F000F00
+-0F000F000F000F000F000F000E000F001C000F0038000F00F0000FFF80000F01E0000F0070000F
+-0078000F003C000F003C000F003C000F003C000F003C000F003C000F003C080F003C080F001C08
+-0F001E10FFF00E10000003E01D1D7D9B21>82 D<03E0800C1980100580300380600180E00180E0
+-0080E00080E00080F00000F800007E00007FE0003FFC001FFF0007FF80007F800007C00003E000
+-01E00000E08000E08000E08000E0C000C0C000C0E00180D00300CE060081F800131E7D9C19>I<
+-7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F0020800F0020800F0020000F00
+-00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F
+-0000000F0000000F0000000F0000000F0000000F0000000F0000001F800003FFFC001B1C7D9B21
+->I<FFE003FC1F0000F00F0000400F000040078000800780008007C0008003C0010003C0010001
+-E0020001E0020001F0060000F0040000F004000078080000780800007C1800003C1000003C1000
+-001E2000001E2000001F6000000F4000000F400000078000000780000007800000030000000300
+-001E1D7E9B22>86 D<FFE07FF03FC01F000F800F001F000F0006000F000F8004000F000F800400
+-0F800F80040007801FC00800078013C00800078013C0080003C033E0100003C021E0100003C021
+-E0100001E061F0200001E040F0200001E040F0200000F040F8400000F08078400000F080784000
+-0078807C80000079003C80000079003C8000003D003F0000003E001F0000003E001F0000001E00
+-1E0000001C000E0000001C000E0000000C000C00000008000400002A1D7E9B2E>I<0020000070
+-0000700000700000B80000B80000B800011C00011C00011C00020E00020E0004070004070007FF
+-000803800803800803801801C03803C0FE0FF815157F9419>97 D<FFFC001C07001C03801C03C0
+-1C03C01C03C01C03C01C03801C07801FFF001FFF001C03801C03C01C01E01C01E01C01E01C01E0
+-1C01C01C03C01C0780FFFE0013157F9418>I<00FC200782600E01E01C00E03800607800207000
+-20F00020F00000F00000F00000F00000F00000F000207000207800203800401C00400E00800783
+-0000FC0013157E9419>I<FFFC001C07001C01C01C00E01C00E01C00701C00701C00781C00781C
+-00781C00781C00781C00781C00781C00701C00701C00E01C00E01C01C01C0700FFFC0015157F94
+-1A>I<FFFF801C03801C00801C00801C00401C00401C10401C10001C10001C30001FF0001C3000
+-1C10001C10201C10201C00201C00601C00401C00C01C01C0FFFFC013157F9417>I<00FC200782
+-600E01E01C00E0380060780020700020F00020F00000F00000F00000F00FF8F000E0F000E07000
+-E07800E03800E01C00E00E00E007836000FC2015157E941B>103 D<FF8FF81C01C01C01C01C01
+-C01C01C01C01C01C01C01C01C01C01C01C01C01FFFC01C01C01C01C01C01C01C01C01C01C01C01
+-C01C01C01C01C01C01C0FF8FF815157F9419>I<FF801C001C001C001C001C001C001C001C001C
+-001C001C001C001C001C001C001C001C001C001C00FF8009157F940D>I<FF83F81C01E01C0180
+-1C01001C02001C04001C08001C10001C30001C70001CB8001D1C001E1C001C0E001C07001C0780
+-1C03801C01C01C01E01C01F0FF83FC16157F941A>107 D<FFC0001C00001C00001C00001C0000
+-1C00001C00001C00001C00001C00001C00001C00001C00001C00801C00801C00801C01801C0100
+-1C03001C0700FFFF0011157F9415>I<FE000FE01E000F00170017001700170017001700138027
+-001380270011C0470011C0470011C0470010E0870010E08700107107001071070010710700103A
+-0700103A0700101C0700101C0700381C0700FE083FE01B157F941F>I<FC03F81E00E01E004017
+-004013804013C04011C04010E040107040107040103840101C40101C40100E401007401007C010
+-03C01001C01000C03800C0FE004015157F9419>I<01F800070E000C03001C03803801C07801E0
+-7000E0F000F0F000F0F000F0F000F0F000F0F000F0F000F07000E07801E03801C01C03801E0780
+-070E0001F80014157E941A>I<FFFC001C0F001C03801C03C01C03C01C03C01C03C01C03C01C03
+-801C0F001FFC001C00001C00001C00001C00001C00001C00001C00001C00001C0000FF80001215
+-7F9417>I<FFF8001C0E001C07801C03801C03C01C03C01C03C01C03801C07801C0E001FF8001C
+-1C001C0E001C07001C07001C07001C07801C07841C07C41C03CCFF80F816157F9419>114
+-D<1F1030F06030C030C010C010C000E0007E003FC01FE003F0007800380018801880188010C030
+-F0608FC00D157E9413>I<7FFFF060703040701040701080700880700880700800700000700000
+-700000700000700000700000700000700000700000700000700000700000700007FF0015157F94
+-19>I<FF83F81C00E01C00401C00401C00401C00401C00401C00401C00401C00401C00401C0040
+-1C00401C00401C00401C00400C00C00E008006010003860000FC0015157F9419>I<FF80FE1E00
+-780E00200F004007004003808003C18001C10000E20000E200007400007C000038000038000038
+-0000380000380000380000380000380001FF001715809419>121 D E /Fb
+-1 85 df<1FFFFE381C0E201C04601C04401C044038048038040038000038000070000070000070
+-0000700000E00000E00000E00000E00001C00001C00001C00001C00003C0007FFC0017177F9615
+->84 D E /Fc 49 124 df<0001FC000703000C03001C07001C0300180000380000380000380000
+-380000700007FFFC00701C00701C00701C00E03800E03800E03800E03800E07001C07001C07001
+-C07001C0E201C0E201C0E20380E4038064038038038000030000070000060000C60000E40000CC
+-00007000001825819C17>12 D<0001FE0FF0000307380C000607700C000C06601C001C00E00C00
+-1C00C000001C01C000003801C000003801C000003801C000003803800003FFFFFFF00070038070
+-0070038070007003807000700780E000700700E000700700E000E00700E000E00701C000E00701
+-C000E00E01C000E00E01C001C00E038801C00E038801C00E038801C01C039001C01C019003801C
+-00E003801C0000038038000003003800000300300000C630300000E638600000CC30C00000781F
+-0000002625819C25>14 D<183C3C3C0404080810204080060C779C0D>39
+-D<183878380808101020404080050C7D830D>44 D<FFC0FFC0FFC00A037D890F>I<3078F06005
+-047C830D>I<003C0000C6000183000303000603000603800E03800C03801C03801C0300380700
+-380700380700380700700E00700E00700E00700E00E01C00E01C00E01C00E03800E03800E03000
+-C06000E0600060C0007180001E0000111D7B9B15>48 D<00020006000C001C007C039C00380038
+-00380038007000700070007000E000E000E000E001C001C001C001C003800380038003800780FF
+-F00F1C7C9B15>I<060F0F06000000000000000000003078F06008127C910D>58
+-D<0000180000001800000038000000380000007800000078000000B8000001B800000138000002
+-380000023C0000041C0000041C0000081C0000181C0000101C0000201C0000201C00007FFC0000
+-401C0000801C0001801C0001001C0002001C0002001C0004000E000C000E001C001E00FF00FFC0
+-1A1D7E9C1F>65 D<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E0000
+-801E0000801C0000803C0000803C000000780000007800000078000000F0000000F0000000F000
+-0000F0000000F0000400F0000400F0000400F0000800700008007000100038002000180040000C
+-0180000706000001F800001B1E7A9C1E>67 D<01FFFFE0003C00E0003800600038004000380040
+-003800400070004000700040007020400070200000E0400000E0400000E0C00000FFC00001C080
+-0001C0800001C0800001C080000381010003800100038002000380020007000400070004000700
+-0C00070018000E007800FFFFF0001B1C7D9B1C>69 D<01FFFFC0003C01C0003800C00038008000
+-380080003800800070008000700080007020800070200000E0400000E0400000E0C00000FFC000
+-01C0800001C0800001C0800001C080000381000003800000038000000380000007000000070000
+-0007000000070000000F000000FFF000001A1C7D9B1B>I<0003F020001E0C60003002E000E003
+-C001C001C0038001C0070000C00E0000801E0000801C0000803C0000803C000000780000007800
+-000078000000F0000000F0000000F001FFC0F0001E00F0001C00F0001C00F0001C00F0001C0070
+-0038007000380038003800180078000C0090000707100001F800001B1E7A9C20>I<01FFC0003C
+-0000380000380000380000380000700000700000700000700000E00000E00000E00000E00001C0
+-0001C00001C00001C0000380000380000380000380000700000700000700000700000F0000FFE0
+-00121C7E9B10>73 D<01FFE0003C00003800003800003800003800007000007000007000007000
+-00E00000E00000E00000E00001C00001C00001C00001C000038008038008038008038010070010
+-0700300700600700E00E03C0FFFFC0151C7D9B1A>76 D<01FE0007F8003E000780002E000F0000
+-2E001700002E001700002E002700004E002E00004E004E00004E004E00004E008E00008E011C00
+-008E011C00008E021C00008E021C00010704380001070438000107083800010710380002071070
+-00020720700002072070000207407000040740E000040780E000040700E0000C0700E0001C0601
+-E000FF861FFC00251C7D9B25>I<01FC03FE001C0070003C0060002E0040002E0040002E004000
+-4700800047008000470080004380800083810000838100008181000081C1000101C2000101C200
+-0100E2000100E2000200E4000200740002007400020074000400380004003800040038000C0018
+-001C001000FF8010001F1C7D9B1F>I<01FFFC00003C070000380380003801C0003801C0003801
+-C0007003C0007003C0007003C00070038000E0078000E0070000E00E0000E0380001FFE00001C0
+-000001C0000001C000000380000003800000038000000380000007000000070000000700000007
+-0000000F000000FFE000001A1C7D9B1C>80 D<01FFF800003C0E00003807000038038000380380
+-0038038000700780007007800070078000700F0000E00E0000E01C0000E0700000FFC00001C0C0
+-0001C0600001C0700001C07000038070000380700003807000038070000700F0000700F0400700
+-F0400700F0800F007880FFE0790000001E001A1D7D9B1E>82 D<000F8400304C00403C00801801
+-001803001803001806001006001006000007000007000003E00003FC0001FF00007F800007C000
+-01C00001C00000C00000C02000C02000C0600180600180600300600200F00400CC180083E00016
+-1E7D9C17>I<1FFFFFC01C0701C0300E00C0200E0080600E0080400E0080401C0080801C008080
+-1C0080001C00000038000000380000003800000038000000700000007000000070000000700000
+-00E0000000E0000000E0000000E0000001C0000001C0000001C0000001C0000003C000007FFE00
+-001A1C799B1E>I<FF803FC01C000F001C0004001C0008001C0008001C0010001C0010001C0020
+-001C0040001C0040001E0080000E0080000E0100000E0200000E0200000E0400000E0400000E08
+-00000E1800000E1000000E200000072000000740000007C0000007800000070000000700000006
+-000000060000001A1D779B1F>86 D<03CC063C0C3C181C3838303870387038E070E070E070E070
+-E0E2C0E2C0E261E462643C380F127B9115>97 D<3F00070007000E000E000E000E001C001C001C
+-001C0039C03E60383038307038703870387038E070E070E070E060E0E0C0C0C1C0618063003C00
+-0D1D7B9C13>I<01F007080C08181C3838300070007000E000E000E000E000E000E008E0106020
+-30C01F000E127B9113>I<001F80000380000380000700000700000700000700000E00000E0000
+-0E00000E0003DC00063C000C3C00181C00383800303800703800703800E07000E07000E07000E0
+-7000E0E200C0E200C0E20061E4006264003C3800111D7B9C15>I<01E007100C10180838107010
+-70607F80E000E000E000E000E000E0086010602030C01F000D127B9113>I<0003C0000670000C
+-70001C60001C00001C0000380000380000380000380000380003FF800070000070000070000070
+-0000700000E00000E00000E00000E00000E00001C00001C00001C00001C00001C0000380000380
+-00038000030000030000070000C60000E60000CC00007800001425819C0D>I<00F3018F030F06
+-070E0E0C0E1C0E1C0E381C381C381C381C383830383038187818F00F700070007000E000E0C0C0
+-E1C0C3007E00101A7D9113>I<0FC00001C00001C0000380000380000380000380000700000700
+-000700000700000E78000E8C000F0E000E0E001C0E001C0E001C0E001C0E00381C00381C00381C
+-00383800703880703880707080707100E03200601C00111D7D9C15>I<01800380010000000000
+-000000000000000000001C002600470047008E008E000E001C001C001C00380038007100710071
+-00720072003C00091C7C9B0D>I<0FC00001C00001C00003800003800003800003800007000007
+-00000700000700000E0F000E11000E23800E43801C83001C80001D00001E00003F800039C00038
+-E00038E00070E20070E20070E20070E400E06400603800111D7D9C13>107
+-D<1F800380038007000700070007000E000E000E000E001C001C001C001C003800380038003800
+-7000700070007000E400E400E400E40068003800091D7C9C0B>I<3C1E0780266318C04683A0E0
+-4703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C0701C01C070380380E03
+-88380E0388380E0708380E0710701C0320300C01C01D127C9122>I<3C3C002646004687004707
+-008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C40381C403838403838807019
+-00300E0012127C9117>I<01E007180C0C180C380C300E700E700EE01CE01CE01CE018E038E030
+-E06060C031801E000F127B9115>I<07870004D98008E0C008E0C011C0E011C0E001C0E001C0E0
+-0381C00381C00381C00381800703800703000707000706000E8C000E70000E00000E00001C0000
+-1C00001C00001C00003C0000FF8000131A7F9115>I<03C4062C0C3C181C3838303870387038E0
+-70E070E070E070E0E0C0E0C0E061E063C03DC001C001C0038003800380038007803FF00E1A7B91
+-13>I<3C3C26C2468747078E068E000E000E001C001C001C001C00380038003800380070003000
+-10127C9112>I<01F006080C080C1C18181C001F001FC00FF007F0007800386030E030C0308060
+-60C01F000E127D9111>I<00C001C001C001C00380038003800380FFE00700070007000E000E00
+-0E000E001C001C001C001C00384038403840388019000E000B1A7D990E>I<1E03002707004707
+-00470700870E00870E000E0E000E0E001C1C001C1C001C1C001C1C003838803838801838801839
+-001C5900078E0011127C9116>I<1E06270E470E4706870287020E020E021C041C041C041C0818
+-083808181018200C4007800F127C9113>I<1E01832703874703874703838707018707010E0701
+-0E07011C0E021C0E021C0E021C0E04180C04181C04181C081C1C100C263007C3C018127C911C>
+-I<070E0019910010E38020E38041C30041C00001C00001C0000380000380000380000380000702
+-00670200E70400CB04008B080070F00011127D9113>I<1E03270747074707870E870E0E0E0E0E
+-1C1C1C1C1C1C1C1C38383838183818381C7007F00070007000E0E0C0E1C0818047003C00101A7C
+-9114>I<038207C20FEC08381008001000200040008001000200040008081008383067F043E081
+-C00F127D9111>I<FFFFC012017C8B15>I E /Fd 45 125 df<00000FC0F8000030718E0000E0F3
+-1E0000C0F71E0001C0660C0001800E000003800E000003800E000003800E000007001C00000700
+-1C000007001C000007001C000007001C0000FFFFFFC0000E003800000E003800000E003800000E
+-003800001C007000001C007000001C007000001C007000001C007000001C00E000003800E00000
+-3800E000003800E000003800E000003801C000007001C000007001C000007001C000007001C000
+-006003800000E003800000E003800000E003000000C003000001C0070000718E060000F19E0C00
+-00F31E180000620C3000003C07C00000272D82A21E>11 D<00000FE0000030180000E01C0001C0
+-3C0001803C0003803800038000000380000007000000070000000700000007000000070000000E
+-000000FFFFE0000E00E0000E00E0000E01C0001C01C0001C01C0001C01C0001C0380001C038000
+-380380003803800038070000380700003807000070070800700E1000700E1000700E1000700E20
+-00E0062000E003C000E0000000E0000000C0000001C0000001C0000071800000F1800000F30000
+-00620000003C0000001E2D82A21B>I<007000F001F001F001F001E001E001E003C003C003C003
+-80038003800700070007000600060006000C000C000C0008000800080000000000000000000000
+-7000F800F800F000E0000C247AA30F>33 D<0E1E1E1E1E02020404080810204080070F7D840F>
+-44 D<70F8F8F0E005057A840F>46 D<0000000800000018000000300000003000000060000000
+-C0000000C0000001800000018000000300000006000000060000000C0000000C00000018000000
+-30000000300000006000000060000000C000000180000001800000030000000300000006000000
+-060000000C0000001800000018000000300000003000000060000000C0000000C0000001800000
+-018000000300000006000000060000000C0000000C000000180000003000000030000000600000
+-0060000000C0000000C0000000800000001D317FA419>I<000F800030C000E06001C070038070
+-0300700700700F00700E00701E00701E00701C00F03C00F03C00F03C00F07801E07801E07801E0
+-7801E0F003C0F003C0F003C0F00380E00780E00780E00700E00F00E00E00E01C00E01C00E03800
+-60700030E0001F000014227AA019>I<00FFFFFF000F000F000F0003000F0003001E0003001E00
+-03001E0002001E0002003C0002003C0002003C0102003C01000078020000780200007806000078
+-0E0000FFFC0000F00C0000F00C0000F00C0001E0080001E0080001E0080001E0000003C0000003
+-C0000003C0000003C00000078000000780000007800000078000000F800000FFFC000020227DA1
+-20>70 D<00FFF8000F00000F00000F00001E00001E00001E00001E00003C00003C00003C00003C
+-0000780000780000780000780000F00000F00000F00000F00001E00001E00001E00001E00003C0
+-0003C00003C00003C0000780000780000780000780000F8000FFF80015227DA113>73
+-D<00FFF807FC000F0001E0000F0001C0000F000100001E000200001E000400001E001000001E00
+-2000003C004000003C008000003C010000003C0400000078080000007818000000783800000078
+-7C000000F0BC000000F23C000000F41E000000F81E000001F01F000001E00F000001E00F000001
+-E00F800003C007800003C007800003C003C00003C003C000078003C000078001E000078001E000
+-078001E0000F8001F000FFF80FFE0026227DA125>75 D<00FFFC00000F8000000F0000000F0000
+-001E0000001E0000001E0000001E0000003C0000003C0000003C0000003C000000780000007800
+-00007800000078000000F0000000F0000000F0000000F0000001E0000001E0000001E0002001E0
+-002003C0004003C0004003C0008003C0008007800180078001000780030007800F000F803E00FF
+-FFFE001B227DA11F>I<00FF800007FC000F80000F80000F80001780000F80001780001780002F
+-000013C0002F000013C0004F000013C0008F000023C0009E000023C0011E000023C0011E000023
+-C0021E000043C0043C000043C0043C000043C0083C000041E0083C000081E01078000081E02078
+-000081E02078000081E04078000101E040F0000101E080F0000101E100F0000101E100F0000200
+-F201E0000200F201E0000200F401E0000200F801E0000400F803C0000400F003C0000400F003C0
+-000C00E003C0001E00C007C000FFC0C07FFC002E227DA12C>I<00FF000FFC000F8001E0000F80
+-0180000FC000800013C001000013C001000011E001000011E001000021E002000020F002000020
+-F002000020F0020000407804000040780400004078040000403C040000803C080000803E080000
+-801E080000801E080001001F100001000F100001000F10000100079000020007A000020007A000
+-020003E000020003E000040003C000040001C000040001C0000C0001C0001E00008000FFC00080
+-0026227DA124>I<0000FE0000078380000C00E0003800700070003800E0003801C0003C038000
+-1C0700001C0F00001E1E00001E1E00001E3C00001E3C00001E7800001E7800001E7800001EF000
+-003CF000003CF000003CF0000038F0000078E0000078E00000F0E00000F0E00001E0E00001C0E0
+-0003C0F01E03807061070070810E0038811C001C8138000E81E0000783804001FD004000010040
+-000180800001818000018100000387000001FE000001FE000001FC000000F0001F2D79A225>81
+-D<00FFFFC0000F0070000F003C000F001C001E000E001E000E001E000F001E000F003C001E003C
+-001E003C001E003C003C0078003800780070007801E00078078000FFFC0000F00E0000F0070000
+-F0038001E003C001E003C001E003C001E003C003C0078003C0078003C0078003C0078007800F00
+-07800F0107800F01078007020F800702FFF8038C000000F020237DA124>I<0001F020000E0C40
+-001802C0003001C0006001C000E0018000C0018001C0018001C0018003C0010003C0010003C000
+-0003C0000003E0000001F8000001FF000000FFE000007FF000001FF8000003FC0000007C000000
+-3C0000001E0000001E0000001E0020001C0020001C0020001C0020001800600038006000300070
+-0060007000C000C8018000C607000081FC00001B247DA21B>I<1FFFFFF81E03C0381803C01830
+-03C01820078018200780184007801040078010400F0010800F0010800F0010000F0000001E0000
+-001E0000001E0000001E0000003C0000003C0000003C0000003C00000078000000780000007800
+-000078000000F0000000F0000000F0000000F0000001E0000001E0000001E0000001E0000003E0
+-0000FFFF00001D2277A123>I<00F8C00185C00705C00E03800E03801C03803C03803807007807
+-00780700780700F00E00F00E00F00E00F00E10F01C20701C20703C20305C40308C400F07801415
+-7B9419>97 D<03C03F8003800380038007000700070007000E000E000E000E001C001CF81D0C1E
+-0E3C0638073807380F700F700F700F700FE01EE01EE01EE03CE038E038607060E031C01F001023
+-7BA216>I<007E0001C1000301800703800E07801C07803C0000380000780000780000780000F0
+-0000F00000F00000F00000F00100700100700200300C001830000FC00011157B9416>I<00003C
+-0003F80000380000380000380000700000700000700000700000E00000E00000E00000E00001C0
+-00F9C00185C00705C00E03800E03801C03803C0380380700780700780700780700F00E00F00E00
+-F00E00F00E10F01C20701C20703C20305C40308C400F078016237BA219>I<00F803840E021C02
+-3C0238027804F018FFE0F000F000E000E000E000E000E002E0026004701830600F800F157A9416
+->I<00003E0000470000CF00018F00018600038000038000038000070000070000070000070000
+-0700000E0000FFF0000E00000E00000E00001C00001C00001C00001C00001C0000380000380000
+-380000380000380000700000700000700000700000700000E00000E00000E00000E00000C00001
+-C00001C000718000F18000F300006200003C0000182D82A20F>I<001F180030B800E0B801C070
+-01C0700380700780700700E00F00E00F00E00F00E01E01C01E01C01E01C01E01C01E03800E0380
+-0E0780060B8006170001E700000700000700000E00000E00000E00701C00F01800F0300060E000
+-3F8000151F7E9416>I<00F0000FE00000E00000E00000E00001C00001C00001C00001C0000380
+-00038000038000038000070000071F0007218007C0C00F00E00F00E00E00E00E00E01C01C01C01
+-C01C01C01C01C0380380380380380380380704700708700E08700E10700610E006206003C01623
+-7DA219>I<00C001E001C001C0000000000000000000000000000000001C002300430043008700
+-870087000E000E001C001C001C00380038003840708070807080710032001C000B217BA00F>I<
+-0000E00001E00001E00000C0000000000000000000000000000000000000000000000000001E00
+-002300004380008380008380010380010380000700000700000700000700000E00000E00000E00
+-000E00001C00001C00001C00001C0000380000380000380000380000700000700000700070E000
+-F0C000F180006300003C0000132B82A00F>I<00F0000FE00000E00000E00000E00001C00001C0
+-0001C00001C0000380000380000380000380000700000701E0070210070C700E10F00E10F00E20
+-600E40001D80001E00001FC0001C7000383800383800381C00381C207038407038407038407018
+-80E01880600F0014237DA216>I<01E01FC001C001C001C0038003800380038007000700070007
+-000E000E000E000E001C001C001C001C0038003800380038007000700070007100E200E200E200
+-E200640038000B237CA20C>I<1C0F80F8002610C10C0047606606008780780700878078070087
+-0070070087007007000E00E00E000E00E00E000E00E00E000E00E00E001C01C01C001C01C01C00
+-1C01C01C001C01C03820380380384038038070403803807080380380308070070031003003001E
+-0023157B9428>I<1C0F002631C04740C08780E08780E08700E08700E00E01C00E01C00E01C00E
+-01C01C03801C03801C03801C0704380708380E08380E103806107006203003C016157B941B>I<
+-007E0001C3000381800701C00E01C01C01E03C01E03801E07801E07801E07801E0F003C0F003C0
+-F00380F00780700700700E00700C0030180018700007C00013157B9419>I<01C1F00262180474
+-1C08780C08700E08700E08701E00E01E00E01E00E01E00E01E01C03C01C03C01C03C01C0780380
+-7003807003C0E003C1C0072380071E000700000700000E00000E00000E00000E00001C00001C00
+-001C0000FFC000171F7F9419>I<00F8400184C00705C00E03800E03801C03803C038038070078
+-0700780700780700F00E00F00E00F00E00F00E00F01C00701C00703C00305C0030B8000F380000
+-380000380000700000700000700000700000E00000E00000E0000FFE00121F7B9416>I<1C1F00
+-2620804741C08783C08703C08701808700000E00000E00000E00000E00001C00001C00001C0000
+-1C000038000038000038000038000070000030000012157B9415>I<00FC000183000200800401
+-800C03800C03000C00000F00000FF00007FC0003FE00003E00000F00000700700700F00600F006
+-00E004004008002030001FC00011157D9414>I<00C001C001C001C001C0038003800380038007
+-00FFF8070007000E000E000E000E001C001C001C001C0038003800380038107020702070407080
+-31001E000D1F7C9E10>I<1E00602300E04380E04381C08381C08701C08701C00703800E03800E
+-03800E03801C07001C07001C07001C07081C0E10180E101C0E101C1E200C262007C3C015157B94
+-1A>I<1E03802307C04387C04383C08381C08700C08700C00700800E00800E00800E00801C0100
+-1C01001C01001C02001C02001C04001C08001C08000C300003C00012157B9416>I<1E0060E023
+-00E1F04380E1F04381C0F08381C0708701C0308701C030070380200E0380200E0380200E038020
+-1C0700401C0700401C0700401C0700801C0700801C0701001C0F01000C0F020006138C0003E0F0
+-001C157B9420>I<03C1E0046210083470103CF02038F020386020380000700000700000700000
+-700000E00000E00000E00000E02061C040F1C040F1C080E2C100446200383C0014157D9416>I<
+-1E00302300704380704380E08380E08700E08700E00701C00E01C00E01C00E01C01C03801C0380
+-1C03801C03801C07001C07001C07001C0F000C3E0003CE00000E00000E00001C00601C00F03800
+-F03000E0600080C0004380003E0000141F7B9418>I<01E02003F06007F8C0041F800801000802
+-000004000008000010000020000040000080000100000200000400800801001003003F060061FC
+-0040F80080700013157D9414>I<FFFFFC16017C8C19>I<FFFFFFFFFFF82D017B8C32>I
+-E /Fe 5 112 df<001FE02000FFF8E003F80FE007C003E00F8001E01F0000E03E0000E03E0000
+-607E0000607C000060FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00
+-00007C0000607E0000603E0000603E0000C01F0000C00F80018007C0030003F80E0000FFFC0000
+-1FE0001B1C7D9B22>67 D<0FF8001C1E003E0F803E07803E07C01C07C00007C0007FC007E7C01F
+-07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80FE1F815127F9117>97
+-D<03FC000E0E001C1F003C1F00781F00780E00F80000F80000F80000F80000F80000F800007800
+-007801803C01801C03000E0E0003F80011127E9115>99 D<FF0000FF00001F00001F00001F0000
+-1F00001F00001F00001F00001F00001F00001F0FC01F31E01F40F01F80F81F80F81F00F81F00F8
+-1F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE7FFFFE7FF181D7F9C1B>
+-104 D<01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8F800F8F800F8F800F8
+-7800F07800F03C01E01E03C00F078001FC0015127F9118>111 D E /Ff
+-6 55 df<0C001C00EC000C000C000C000C000C000C000C000C000C000C000C000C000C000C000C
+-00FFC00A137D9211>49 D<1F0060C06060F070F030603000700070006000C001C0018002000400
+-0810101020207FE0FFE00C137E9211>I<0FC030707038703870380038003000E00FC000700038
+-0018001C601CF01CF018E03860701FC00E137F9211>I<006000E000E00160026006600C600860
+-106020606060C060FFFC0060006000600060006003FC0E137F9211>I<60607FC07F8044004000
+-400040004F0070C040E0006000700070E070E070E06040E021C01F000C137E9211>I<07C00C20
+-1070207060006000C000CF00D0C0E060C020C030C030C03040306020206010C00F000C137E9211
+->I E /Fg 61 122 df<01818003C3C003C3C003C3C003C3C003C3C003C3C07FFFF0FFFFF8FFFF
+-F8FFFFF80787800787800787800F8F800F0F000F0F000F0F000F0F00FFFFF8FFFFF8FFFFF87FFF
+-F01E1E001E1E001E1E001E1E001E1E001E1E000C0C00151E7E9D1A>35 D<1800C03C01E07E01E0
+-7E03E0E703C0E703C0E707C0E70780E70F80E70F00E70F007E1F007E1E003C1E00183E00003C00
+-007C0000780000780000F80000F00000F00001F00001E00003E00003C00003C0C007C3F00783F0
+-0787380F87380F07381F07381E07381E07383E07383C03F03C03F01800C015277EA21A>37
+-D<0038007800F001E003C007800F000E001C001C0038003800700070007000E000E000E000E000
+-E000E000E000E000E000E000700070007000380038001C001C000E000F00078003C001E000F800
+-7800380D2878A21A>40 D<6000F00078003C001E000F000780038001C001C000E000E000700070
+-0070003800380038003800380038003800380038003800700070007000E000E001C001C0038007
+-800F001E003C007800F00060000D287CA21A>I<00300000780000780000780000780000780000
+-78000078000078007FFFF0FFFFF8FFFFF87FFFF000780000780000780000780000780000780000
+-780000780000300015167E991A>43 D<7FFFC0FFFFE0FFFFE07FFFC013047D901A>45
+-D<3078FCFC7830060676851A>I<0000C00001E00001E00003E00003C00007C0000780000F8000
+-0F00000F00001F00001E00003E00003C00007C0000780000780000F80000F00001F00001E00003
+-E00003C00003C00007C0000780000F80000F00001F00001E00001E00003E00003C00007C000078
+-0000F80000F00000F0000060000013277DA21A>I<00C001C001C003C007C00FC07FC0FDC071C0
+-01C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C07FFF7F
+-FF7FFF101E7B9D1A>49 D<01FC0007FF001FFF801E03C03C01C03C00E03C00E00000E00000E000
+-01C00003C000078001FF0001FF0001FFC00003E00000F0000070000078000038000038600038F0
+-0038F00078E000707000F07E03E03FFFC00FFF0001FC00151E7E9D1A>51
+-D<7FFFF0FFFFF8FFFFF87FFFF00000000000000000000000007FFFF0FFFFF8FFFFF87FFFF0150C
+-7E941A>61 D<003800007C00007C00006C0000EE0000EE0000EE0000C60000C60001C70001C700
+-01C70001C7000383800383800383800383800701C00701C007FFC007FFC00FFFE00E00E00E00E0
+-0E00E00E00E01C00707F01FCFF83FE7F01FC171E7F9D1A>65 D<FFFE00FFFF80FFFFC01C03E01C
+-00E01C00F01C00701C00701C00701C00701C00E01C01E01C07C01FFF801FFF801FFFC01C01E01C
+-00F01C00701C00381C00381C00381C00381C00381C00781C00F01C01F0FFFFE0FFFFC0FFFF0015
+-1E7E9D1A>I<007C3801FF3807FFF80F83F81E00F81C0078380078380038700038700038700000
+-E00000E00000E00000E00000E00000E00000E00000E00000700000700038700038380038380038
+-1C00701E00F00F83E007FFC001FF80007C00151E7E9D1A>I<7FFE00FFFF007FFF801C07C01C01
+-E01C00F01C00701C00781C00381C00381C003C1C001C1C001C1C001C1C001C1C001C1C001C1C00
+-1C1C001C1C003C1C00381C00381C00781C00701C00F01C01E01C07C07FFFC0FFFF007FFE00161E
+-7F9D1A>I<FFFFF8FFFFF8FFFFF81C00381C00381C00381C00381C00001C00001C00001C0E001C
+-0E001C0E001FFE001FFE001FFE001C0E001C0E001C0E001C00001C00001C00001C001C1C001C1C
+-001C1C001C1C001CFFFFFCFFFFFCFFFFFC161E7E9D1A>I<7FFFFCFFFFFC7FFFFC0E001C0E001C
+-0E001C0E001C0E00000E00000E00000E03800E03800E03800FFF800FFF800FFF800E03800E0380
+-0E03800E00000E00000E00000E00000E00000E00000E00000E00007FE000FFE0007FE000161E7F
+-9D1A>I<00F8E003FEE007FFE00F07E01E03E03C01E03800E07000E07000E07000E0E00000E000
+-00E00000E00000E00000E00000E00FF8E00FF8E00FF8E000E07000E07000E07001E03801E03C03
+-E01E03E00F07E007FFE003FEE000F8E0151E7E9D1A>I<FF83FEFF83FEFF83FE1C00701C00701C
+-00701C00701C00701C00701C00701C00701C00701C00701FFFF01FFFF01FFFF01C00701C00701C
+-00701C00701C00701C00701C00701C00701C00701C00701C0070FF83FEFF83FEFF83FE171E7F9D
+-1A>I<FFFF80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00001C00001C000
+-01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+-01C00001C000FFFF80FFFF80FFFF80111E7C9D1A>I<7F03F8FF87FC7F03F81C01E01C03C01C03
+-801C07001C0F001C1E001C1C001C38001C78001CF0001CF8001DF8001FDC001F9C001F0E001E0F
+-001E07001C07801C03801C01C01C01C01C00E01C00E01C00707F00FCFF81FE7F00FC171E7F9D1A
+->75 D<7FE000FFF0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E0000
+-0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E001C0E001C0E001C
+-0E001C0E001C7FFFFCFFFFFC7FFFFC161E7F9D1A>I<7E003F00FF007F807F007F001D80DC001D
+-80DC001D80DC001DC1DC001DC1DC001CC19C001CC19C001CE39C001CE39C001C631C001C771C00
+-1C771C001C361C001C361C001C3E1C001C1C1C001C1C1C001C001C001C001C001C001C001C001C
+-001C001C001C001C001C001C007F007F00FF80FF807F007F00191E809D1A>I<FE03FEFF03FEFF
+-03FE1D80701D80701DC0701CC0701CC0701CE0701CE0701C60701C70701C70701C30701C38701C
+-38701C18701C1C701C1C701C0C701C0E701C0E701C06701C06701C07701C03701C0370FF81F0FF
+-81F0FF80F0171E7F9D1A>I<0FFE003FFF807FFFC07C07C07001C0F001E0E000E0E000E0E000E0
+-E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0
+-E000E0F001E0F001E07001C07C07C07FFFC03FFF800FFE00131E7D9D1A>I<FFFE00FFFF80FFFF
+-C01C03E01C00F01C00701C00781C00381C00381C00381C00381C00781C00701C00F01C03E01FFF
+-C01FFF801FFE001C00001C00001C00001C00001C00001C00001C00001C00001C0000FF8000FF80
+-00FF8000151E7E9D1A>I<0FFE003FFF807FFFC07C07C07001C0F001E0E000E0E000E0E000E0E0
+-00E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E0
+-70E0E0F0E0F079E07079C07C3FC07FFFC03FFF800FFE00000F000007000007800003800003C000
+-01C00001C013257D9D1A>I<FFFC00FFFF00FFFF801C07C01C01E01C00F01C00701C00701C0070
+-1C00701C00F01C01E01C07C01FFF801FFF001FFF801C07C01C01C01C00E01C00E01C00E01C00E0
+-1C00E01C00E21C00E71C00E71C00E7FF807EFF807EFF8038181E7F9D1A>I<03F1C00FFDC03FFF
+-C07C0FC07003C0E003C0E001C0E001C0E001C0E000007000007800003F00001FF00007FE0000FF
+-00000F800003C00001C00000E00000E06000E0E000E0E000E0E001C0F001C0FC0780FFFF80EFFE
+-00E3F800131E7D9D1A>I<7FFFFEFFFFFEFFFFFEE0380EE0380EE0380EE0380E00380000380000
+-380000380000380000380000380000380000380000380000380000380000380000380000380000
+-380000380000380000380000380003FF8003FF8003FF80171E7F9D1A>I<FF83FEFF83FEFF83FE
+-1C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C0070
+-1C00701C00701C00701C00701C00701C00701C00700E00E00E00E00701C00783C003FF8001FF00
+-007C00171E7F9D1A>I<FF01FEFF01FEFF01FE1C00701C00701C00701E00F00E00E00E00E00E00
+-E00701C00701C00701C00701C003838003838003838003838001C70001C70001C70001C70000C6
+-0000EE0000EE0000EE00006C00007C00007C00003800171E7F9D1A>I<FE00FEFF01FEFE00FE70
+-001C78003C380038380038380038380038380038380038380038387C381C7C701CEE701CEE701C
+-EE701CEE701CEE701CC6701CC6700DC7600DC7600DC7600D83600D83600D83600F83E00F83E007
+-01C0171E7F9D1A>I<7F87F87F87F87F87F80F01C007038007838003870003C70001CE0001EE00
+-00FC0000FC00007800007800007800007C00007C0000FE0000EE0001CF0001C700038780038380
+-0703C00701C00E00E00E00E07F01FCFF83FE7F01FC171E7F9D1A>I<FF01FEFF01FEFF01FE1C00
+-700E00E00E00E00701C00701C00783C003838003C78001C70001C70000EE0000EE00007C00007C
+-0000380000380000380000380000380000380000380000380000380000380001FF0001FF0001FF
+-00171E7F9D1A>I<3FFFF87FFFF87FFFF87000707000E07001E07001C000038000078000070000
+-0E00001E00001C0000380000780000F00000E00001C00003C0000380000700000F00000E00381C
+-00383C0038380038700038FFFFF8FFFFF8FFFFF8151E7E9D1A>I<FFF8FFF8FFF8E000E000E000
+-E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+-00E000E000E000E000E000E000E000E000E000E000FFF8FFF8FFF80D2776A21A>I<FFF8FFF8FF
+-F80038003800380038003800380038003800380038003800380038003800380038003800380038
+-00380038003800380038003800380038003800380038003800380038FFF8FFF8FFF80D277EA21A
+->93 D<1FF0003FFC007FFE00780F00300700000380000380007F8007FF801FFF803F8380780380
+-700380E00380E00380E00380700780780F803FFFFC1FFDFC07F0FC16157D941A>97
+-D<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E3E000EFF800FFFE00FC1
+-F00F80700F00380E00380E001C0E001C0E001C0E001C0E001C0E001C0E001C0F00380F00780F80
+-F00FC1E00FFFC00EFF80063E00161E7F9D1A>I<00FF8003FFC00FFFE01F01E03C00C078000070
+-0000700000E00000E00000E00000E00000E000007000007000007800703C00701F01F00FFFE003
+-FFC000FE0014157D941A>I<001FC0001FC0001FC00001C00001C00001C00001C00001C00001C0
+-01F1C007FDC00FFFC01E0FC03C07C07803C07001C0E001C0E001C0E001C0E001C0E001C0E001C0
+-E001C07003C07003C03807C03E0FC01FFFFC07FDFC01F1FC161E7E9D1A>I<01F80007FF000FFF
+-801E07C03C01C07800E07000E0E00070E00070FFFFF0FFFFF0FFFFF0E000007000007000007800
+-703C00701F01F00FFFE003FFC000FE0014157D941A>I<0007E0001FF0003FF800787800F03000
+-E00000E00000E00000E0007FFFF0FFFFF0FFFFF000E00000E00000E00000E00000E00000E00000
+-E00000E00000E00000E00000E00000E00000E00000E00000E0003FFF807FFFC03FFF80151E7F9D
+-1A>I<01F87C07FFFE0FFFFE1E078C1C03803801C03801C03801C03801C03801C01C03801E0780
+-1FFF001FFE0039F8003800003800001C00001FFF801FFFE03FFFF878007C70001CE0000EE0000E
+-E0000EE0000E70001C78003C3E00F81FFFF007FFC001FF0017217F941A>I<FE0000FE0000FE00
+-000E00000E00000E00000E00000E00000E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00
+-E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0FFE3FEFFE7
+-FEFFE3FE171E7F9D1A>I<00C00001E00001E00000C00000000000000000000000000000000000
+-00007FE0007FE0007FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000
+-E00000E00000E00000E00000E00000E0007FFF80FFFFC07FFF80121F7C9E1A>I<FFE000FFE000
+-FFE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
+-00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000FFFFE0
+-FFFFE0FFFFE0131E7D9D1A>108 D<7CE0E000FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C00
+-1C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C
+-001C1C1C001C1C1C007F1F1F00FF9F9F807F1F1F00191580941A>I<FE3E00FEFF80FFFFC00FC1
+-C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00
+-E00E00E0FFE3FEFFE7FEFFE3FE17157F941A>I<01F00007FC001FFF003E0F803C07807803C070
+-01C0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C07803E0F801FFF0007
+-FC0001F00013157D941A>I<FE3E00FEFF80FFFFE00FC1F00F80700F00380E00380E001C0E001C
+-0E001C0E001C0E001C0E001C0E001C0F00380F00780F80F00FC1E00FFFC00EFF800E3E000E0000
+-0E00000E00000E00000E00000E00000E00000E0000FFE000FFE000FFE00016207F941A>I<01F8
+-E007FEE00FFFE01E07E03C03E07801E07001E0E000E0E000E0E000E0E000E0E000E0E000E0E001
+-E07001E07803E03C03E01E0FE00FFFE007FCE001F0E00000E00000E00000E00000E00000E00000
+-E00000E00000E0000FFE000FFE000FFE17207E941A>I<7F83F0FF8FF87FBFFC03FC3C03F01803
+-E00003C00003C0000380000380000380000380000380000380000380000380000380000380007F
+-FF00FFFF007FFF0016157E941A>I<07FB801FFF807FFF80780780E00380E00380E00380780000
+-7FC0003FFC0007FE00003F800007806001C0E001C0E001C0F003C0FC0780FFFF00EFFE00E3F800
+-12157C941A>I<00C00001C00001C00001C00001C00001C00001C0007FFFE0FFFFE0FFFFE001C0
+-0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C07001C07001C07001C0
+-7000E0E000FFE0007FC0001F00141C7F9B1A>I<FE0FE0FE0FE0FE0FE00E00E00E00E00E00E00E
+-00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFE03
+-FFFE00FCFE17157F941A>I<7F83FCFFC7FE7F83FC0E00E00E00E00E00E00701C00701C00701C0
+-03838003838003838001C70001C70001C70000EE0000EE0000EE00007C00007C0000380017157F
+-941A>I<FF83FEFFC7FEFF83FE3800383800381C00701C00701C00701C38701C7C701C7C700E6C
+-E00E6CE00EEEE00EEEE00EEEE00EC6E006C6C007C7C007C7C003838017157F941A>I<7FC7F87F
+-CFFC7FC7F80703C003838003C70001EF0000FE00007C00007800003800007C0000EE0001EE0001
+-C7000383800783C00F01C07FC7FCFFC7FE7FC7FC17157F941A>I<7FC3FCFFC7FE7FC3FC0E00E0
+-0E00E00700E00701C00781C00381C003838003C38001C38001C70000E70000E70000E600006600
+-006E00003C00003C00003C0000380000380000380000700000700030700078E00071E0007FC000
+-3F80001E000017207F941A>I E /Fh 7 121 df<FFFFFFFCFFFFFFFC1E027C8C27>0
+-D<70F8F8F87005057C8E0E>I<03F0000FFC001FFE003FFF007FFF807FFF80FFFFC0FFFFC0FFFF
+-C0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC07FFF807FFF803FFF001FFE000FFC0003F00012147D9519
+->15 D<000F0038007000E001C001C001C001C001C001C001C001C001C001C001C001C001C001C0
+-01C001C001C0038007001E00F0001E000700038001C001C001C001C001C001C001C001C001C001
+-C001C001C001C001C001C001C001C000E000700038000F10317CA419>102
+-D<F0001E000700038001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C0
+-01C001C000E000700038000F0038007000E001C001C001C001C001C001C001C001C001C001C001
+-C001C001C001C001C001C001C0038007001E00F00010317CA419>I<C0C0C0C0C0C0C0C0C0C0C0
+-C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C002
+-317AA40E>106 D<07C01C3030087008600CE01CE01CE008E000E0007000300038000C0006000F
+-80186030307018601CE00EE00EE00EE00EE00E700C301C18180C3003E000C0006000380018001C
+-000E000E200E700E700E600C201C2018187007C00F2D7DA216>120 D E
+-/Fi 7 55 df<07C018303018701C600C600CE00EE00EE00EE00EE00EE00EE00EE00EE00E600C60
+-0C701C30181C7007C00F157F9412>48 D<03000700FF0007000700070007000700070007000700
+-0700070007000700070007000700070007007FF00C157E9412>I<0F8030E040708030C038E038
+-4038003800700070006000C00180030006000C08080810183FF07FF0FFF00D157E9412>I<0FE0
+-30306018701C701C001C00180038006007E000300018000C000E000EE00EE00EC00C401830300F
+-E00F157F9412>I<00300030007000F001F001700270047008701870107020704070C070FFFE00
+-70007000700070007003FE0F157F9412>I<20303FE03FC0240020002000200020002F8030E020
+-700030003800384038E038E0388030406020C01F000D157E9412>I<01F00608080C181C301C70
+-006000E000E3E0EC30F018F00CE00EE00EE00E600E600E300C3018183007C00F157F9412>I
+-E /Fj 17 123 df<03800000E00000F000007000007000007800003800003800003C00001C0000
+-1C00001C00001E00000E00000E00000F00000700000700000780000780000F80001B800031C000
+-21C00041C000C1E00180E00300E00600F00C00701C0070380078700038E00038C0001C16237DA2
+-1C>21 D<007FFF8001FFFF8003FFFF800783C0000E01C0001C00E0003800E0003800E0007000E0
+-007000E0007000E000E001C000E001C000E001C000E0038000E003000060070000600E00003018
+-00001870000007C0000019157E941C>27 D<70F8F8F87005057C840E>58
+-D<70F8FCFC7404040404080810102040060F7C840E>I<00008000018000018000030000030000
+-0300000600000600000600000C00000C00000C0000180000180000180000300000300000300000
+-600000600000600000C00000C00000C00001800001800001800001800003000003000003000006
+-00000600000600000C00000C00000C000018000018000018000030000030000030000060000060
+-0000600000C00000C00000C0000011317DA418>61 D<00000080000000018000000001C0000000
+-03C000000003C000000007C00000000BC00000000BC000000013C000000033C000000023C00000
+-0043C000000043E000000081E000000181E000000101E000000201E000000201E000000401E000
+-000C01E000000801E000001001E000001FFFF000002000F000006000F000004000F000008000F0
+-00008000F000010000F000030000F000020000F000040000F8000C0000F8001E0000F800FF800F
+-FF8021237EA225>65 D<00007F00400003C0C080000E002180001C0013800070000F8000E00007
+-0001C0000700038000070007000007000F000002000E000002001E000002003C000002003C0000
+-0400780000000078000000007800000000F000000000F000000000F000000000F000000000F000
+-3FFF00E00000F000E00000F000E00000F000E00001E000F00001E000F00001E000700001E00070
+-0003C000380003C000180007C0000C0009C00006001180000380E08000007F00000022247DA226
+->71 D<000F0C00389C00605C00C03801C0380380380780380700700F00700F00700F00701E00E0
+-1E00E01E00E01E00E01E01C00E01C00E03C00605C0031B8001E380000380000380000700000700
+-000700700E00F00C00F018006070003FC000161F809417>103 D<00E000E001E000C000000000
+-00000000000000000000000000001E0023004380438083808380870007000E000E000E001C001C
+-0038003820384070407040308031001E000B227EA111>105 D<3C07E01F004618306180472018
+-80C087401D00E087801E00E087801C00E087001C00E00E003801C00E003801C00E003801C00E00
+-3801C01C007003801C007003801C007007001C007007043800E007083800E00E083800E00E0838
+-00E006107001C006203000C003C026157E942B>109 D<3C07C046186047203087403887803887
+-00388700380E00700E00700E00700E00701C00E01C00E01C01C01C01C13801C238038238038238
+-01847001883000F018157E941D>I<03C0F004631C04740E08780E08700708700708700F00E00F
+-00E00F00E00F00E00F01C01E01C01E01C01E01C03C03803803803803C07003C0E0072180071E00
+-0700000700000E00000E00000E00000E00001C00001C00001C0000FFC000181F819418>112
+-D<00782001C4600302E00601C00E01C01C01C03C01C0380380780380780380780380F00700F007
+-00F00700F00700F00E00700E00701E00302E0018DC000F1C00001C00001C000038000038000038
+-0000380000700000700000700007FF00131F7E9416>I<1E001823003843803843807083807083
+-80708700700700E00E00E00E00E00E00E01C01C01C01C01C01C01C01C21C03841C03841C07840C
+-09880E118803E07017157E941C>117 D<01E0F006310C081A1C101A3C201C3C201C18201C0000
+-380000380000380000380000700000700000700000700860E010F0E010F0E020E170404230803C
+-1F0016157E941C>120 D<1E00302300704380704380E08380E08380E08700E00701C00E01C00E
+-01C00E01C01C03801C03801C03801C03801C07001C07001C07001C0F000C3E0003CE00000E0000
+-0E00001C00601C00F03800F03000E0600080C0004180003E0000141F7E9418>I<00E01003F020
+-07F860060FC008008008010000020000040000080000100000200000C000010000020000040040
+-0800801001803F830061FE0040FC0080780014157E9417>I E /Fk 74 124
+-df<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E01C0000E01C0000E
+-01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
+-0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0007F87FC
+-001A1D809C18>11 D<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E0000
+-0E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0
+-0E01C00E01C00E01C00E01C00E01C07F87F8151D809C17>I<007FC001C1C00303C00703C00E01
+-C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E01C00E01
+-C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8151D809C17
+->I<6060F0F0F8F86868080808080808101010102020404080800D0C7F9C15>34
+-D<60F0F8680808081010204080050C7C9C0C>39 D<004000800100020006000C000C0018001800
+-300030007000600060006000E000E000E000E000E000E000E000E000E000E000E000E000600060
+-006000700030003000180018000C000C00060002000100008000400A2A7D9E10>I<8000400020
+-00100018000C000C000600060003000300038001800180018001C001C001C001C001C001C001C0
+-01C001C001C001C001C0018001800180038003000300060006000C000C00180010002000400080
+-000A2A7E9E10>I<60F0F0701010101020204080040C7C830C>44 D<FFE0FFE00B0280890E>I<60
+-F0F06004047C830C>I<00010003000600060006000C000C000C00180018001800300030003000
+-60006000C000C000C0018001800180030003000300060006000C000C000C001800180018003000
+-30003000600060006000C000C00010297E9E15>I<03C00C301818300C300C700E60066006E007
+-E007E007E007E007E007E007E007E007E007E007E007E00760066006700E300C300C18180C3007
+-E0101D7E9B15>I<030007003F00C7000700070007000700070007000700070007000700070007
+-0007000700070007000700070007000700070007000F80FFF80D1C7C9B15>I<07C01830201C40
+-0C400EF00FF80FF807F8077007000F000E000E001C001C00380070006000C00180030006010C01
+-180110023FFE7FFEFFFE101C7E9B15>I<07E01830201C201C781E780E781E381E001C001C0018
+-0030006007E00030001C001C000E000F000F700FF80FF80FF80FF00E401C201C183007E0101D7E
+-9B15>I<000C00000C00001C00003C00003C00005C0000DC00009C00011C00031C00021C00041C
+-000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C
+-00001C00001C0001FFC0121C7F9B15>I<300C3FF83FF03FC020002000200020002000200023E0
+-24302818301C200E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007C0101D7E
+-9B15>I<00F0030C06040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006E007E0
+-07E007E007E007600760077006300E300C18180C3003E0101D7E9B15>I<4000007FFF807FFF00
+-7FFF0040020080040080040080080000100000100000200000600000400000C00000C00001C000
+-018000018000038000038000038000038000078000078000078000078000078000078000030000
+-111D7E9B15>I<03E00C301008200C20066006600660067006780C3E083FB01FE007F007F818FC
+-307E601E600FC007C003C003C003C00360026004300C1C1007E0101D7E9B15>I<03C00C301818
+-300C700C600EE006E006E007E007E007E007E0076007700F300F18170C2707C700060006000E30
+-0C780C78187010203030C00F80101D7E9B15>I<60F0F0600000000000000000000060F0F07010
+-10101020204080041A7C910C>59 D<003F800000C0600003001800040004000800020010000100
+-201F00802070808040E0404040C0384041C0384081803820838038208380382083803820838038
+-20838038208180382041C0382040C0384040E0784020709880201F0F0010000000080000000400
+-0000030001E000C01F80003FF0001B1D7E9C20>64 D<000600000006000000060000000F000000
+-0F0000000F00000017800000178000001780000023C0000023C0000023C0000041E0000041E000
+-0041E0000080F0000080F0000180F8000100780001FFF80003007C0002003C0002003C0006003E
+-0004001E0004001E000C001F001E001F00FF80FFF01C1D7F9C1F>I<FFFFC00F00F00F00380F00
+-3C0F001C0F001E0F001E0F001E0F001E0F001C0F003C0F00780F01F00FFFE00F00780F003C0F00
+-1E0F000E0F000F0F000F0F000F0F000F0F000F0F001E0F001E0F003C0F0078FFFFE0181C7E9B1D
+->I<001F808000E0618001801980070007800E0003801C0003801C000180380001807800008078
+-00008070000080F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000
+-700000807800008078000080380000801C0001001C0001000E000200070004000180080000E030
+-00001FC000191E7E9C1E>I<FFFFC0000F00F0000F003C000F000E000F0007000F0007000F0003
+-800F0003C00F0001C00F0001C00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F00
+-01E00F0001E00F0001C00F0001C00F0003C00F0003800F0007800F0007000F000E000F001C000F
+-007000FFFFC0001B1C7E9B20>I<FFFFFC0F003C0F000C0F00040F00040F00060F00020F00020F
+-02020F02000F02000F02000F06000FFE000F06000F02000F02000F02000F02010F00010F00020F
+-00020F00020F00060F00060F000C0F003CFFFFFC181C7E9B1C>I<FFFFF80F00780F00180F0008
+-0F00080F000C0F00040F00040F02040F02000F02000F02000F06000FFE000F06000F02000F0200
+-0F02000F02000F00000F00000F00000F00000F00000F00000F00000F8000FFF800161C7E9B1B>
+-I<FFF3FFC00F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F00
+-3C000F003C000F003C000F003C000FFFFC000F003C000F003C000F003C000F003C000F003C000F
+-003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C00FFF3FFC01A1C7E9B
+-1F>72 D<FFF00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+-000F000F000F000F000F000F000F000F000F00FFF00C1C7F9B0F>I<1FFF00F800780078007800
+-780078007800780078007800780078007800780078007800780078007800787078F878F878F878
+-F0F040E021C01F00101D7F9B15>I<FFF03FE00F000F000F000C000F0008000F0010000F002000
+-0F0040000F0080000F0100000F0200000F0400000F0E00000F1F00000F2F00000F2780000F4780
+-000F83C0000F01E0000F01E0000F00F0000F00F8000F0078000F003C000F003C000F001E000F00
+-1F000F001F80FFF07FF01C1C7E9B20>I<FFF8000F80000F00000F00000F00000F00000F00000F
+-00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00080F00080F
+-00080F00180F00180F00100F00300F00700F01F0FFFFF0151C7E9B1A>I<FF8000FF800F8000F8
+-000F8000F8000BC00178000BC00178000BC001780009E002780009E002780008F004780008F004
+-780008F0047800087808780008780878000878087800083C107800083C107800083C107800081E
+-207800081E207800081E207800080F407800080F40780008078078000807807800080780780008
+-030078001C03007800FF8307FF80211C7E9B26>I<FF007FC00F800E000F8004000BC0040009E0
+-040009E0040008F0040008F8040008780400083C0400083C0400081E0400080F0400080F040008
+-0784000807C4000803C4000801E4000801E4000800F40008007C0008007C0008003C0008003C00
+-08001C0008000C001C000C00FF8004001A1C7E9B1F>I<003F800000E0E0000380380007001C00
+-0E000E001C0007003C00078038000380780003C0780003C0700001C0F00001E0F00001E0F00001
+-E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0380003803C00
+-07801C0007000E000E0007001C000380380000E0E000003F80001B1E7E9C20>I<FFFF800F00E0
+-0F00780F003C0F001C0F001E0F001E0F001E0F001E0F001E0F001C0F003C0F00780F00E00FFF80
+-0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000FFF000
+-171C7E9B1C>I<003F800000E0E0000380380007001C000E000E001C0007003C00078038000380
+-780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001
+-E0F00001E0700001C0780003C0780003C0380003803C0E07801C1107000E208E0007205C0003A0
+-780000F0E020003FE0200000602000003060000038E000003FC000003FC000001F8000000F001B
+-257E9C20>I<FFFF00000F01E0000F0078000F003C000F001C000F001E000F001E000F001E000F
+-001E000F001C000F003C000F0078000F01E0000FFF00000F03C0000F00E0000F00F0000F007800
+-0F0078000F0078000F0078000F0078000F0078000F0078100F0078100F0038100F003C20FFF01C
+-20000007C01C1D7E9B1F>I<07E0801C1980300580700380600180E00180E00080E00080E00080
+-F00000F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C0
+-8001C08001C0C00180C00180E00300D00200CC0C0083F800121E7E9C17>I<7FFFFFC0700F01C0
+-600F00C0400F0040400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F00
+-00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F
+-0000000F0000000F0000000F0000000F0000001F800003FFFC001B1C7F9B1E>I<FFF07FC00F00
+-0E000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F
+-0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F000400
+-0F0004000700080007800800038010000180100000C020000070C000001F00001A1D7E9B1F>I<
+-FFE0FFE0FF1F001F003C1E001E00180F001F00100F001F00100F001F001007801F002007802780
+-20078027802003C027804003C043C04003C043C04003E043C04001E081E08001E081E08001E081
+-E08000F100F10000F100F10000F100F100007900FA00007A007A00007A007A00003E007C00003C
+-003C00003C003C00003C003C00001800180000180018000018001800281D7F9B2B>87
+-D<FFF007FC0F8001E00780008007C0018003C0010003E0020001F0020000F0040000F804000078
+-0800007C1800003C1000001E2000001F2000000F4000000FC00000078000000780000007800000
+-07800000078000000780000007800000078000000780000007800000078000007FF8001E1C809B
+-1F>89 D<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+-C0C0C0C0FEFE07297C9E0C>91 D<08081010202040404040808080808080B0B0F8F8787830300D
+-0C7A9C15>I<FEFE06060606060606060606060606060606060606060606060606060606060606
+-060606060606FEFE0729809E0C>I<1FC000307000783800781C00301C00001C00001C0001FC00
+-0F1C00381C00701C00601C00E01C40E01C40E01C40603C40304E801F870012127E9115>97
+-D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001D86
+-001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C00C01C01C01C01
+-801E030019060010F800131D7F9C17>I<07E00C301878307870306000E000E000E000E000E000
+-E00060007004300418080C3007C00E127E9112>I<003F00000700000700000700000700000700
+-00070000070000070000070000070003E7000C1700180F00300700700700600700E00700E00700
+-E00700E00700E00700E00700600700700700300700180F000C370007C7E0131D7E9C17>I<03E0
+-0C301818300C700E6006E006FFFEE000E000E000E00060007002300218040C1803E00F127F9112
+->I<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E000E000E000E000E000E
+-000E000E000E000E000E000E000E000E000E007FE00F1D809C0D>I<00038003C4C00C38C01C38
+-80181800381C00381C00381C00381C001818001C38000C300013C0001000003000001800001FF8
+-001FFF001FFF803003806001C0C000C0C000C0C000C06001803003001C0E0007F800121C7F9215
+->I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001C
+-87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
+-03801C03801C0380FF9FF0141D7F9C17>I<18003C003C00180000000000000000000000000000
+-00FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091D
+-7F9C0C>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C
+-3FC01C0F001C0C001C08001C10001C20001C40001CE0001DE0001E70001C78001C38001C3C001C
+-1C001C0E001C0F001C0F80FF9FE0131D7F9C16>107 D<FC001C001C001C001C001C001C001C00
+-1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C
+-00FF80091D7F9C0C>I<FC7E07E0001C838838001D019018001E01E01C001C01C01C001C01C01C
+-001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C0
+-1C001C01C01C001C01C01C001C01C01C00FF8FF8FF8021127F9124>I<FC7C001C87001D03001E
+-03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
+-0380FF9FF014127F9117>I<03F0000E1C00180600300300700380600180E001C0E001C0E001C0
+-E001C0E001C0E001C06001807003803003001806000E1C0003F00012127F9115>I<FC7C001D86
+-001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C01
+-801E03001D06001CF8001C00001C00001C00001C00001C00001C00001C0000FF8000131A7F9117
+->I<03C1000C3300180B00300F00700700700700E00700E00700E00700E00700E00700E0070060
+-0700700700300F00180F000C370007C70000070000070000070000070000070000070000070000
+-3FE0131A7E9116>I<FCE01D301E781E781C301C001C001C001C001C001C001C001C001C001C00
+-1C001C00FFC00D127F9110>I<1F9030704030C010C010E010F8007F803FE00FF000F880388018
+-C018C018E010D0608FC00D127F9110>I<04000400040004000C000C001C003C00FFE01C001C00
+-1C001C001C001C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F9910>I<FC1F
+-801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+-801C07800C07800E1B8003E3F014127F9117>I<FF07E03C03801C01001C01000E02000E020007
+-040007040007040003880003880003D80001D00001D00000E00000E00000E00000400013127F91
+-16>I<FF3FCFE03C0F03801C0701801C0701001C0B01000E0B82000E0B82000E1182000711C400
+-0711C4000720C40003A0E80003A0E80003C0680001C0700001C0700001803000008020001B127F
+-911E>I<7F8FF00F03800F030007020003840001C80001D80000F00000700000780000F800009C
+-00010E00020E000607000403801E07C0FF0FF81512809116>I<FF07E03C03801C01001C01000E
+-02000E020007040007040007040003880003880003D80001D00001D00000E00000E00000E00000
+-4000004000008000008000F08000F10000F300006600003C0000131A7F9116>I<7FFC70386038
+-407040F040E041C003C0038007000F040E041C043C0C380870087038FFF80E127F9112>I<FFFF
+-F01401808B15>I E /Fl 2 122 df<040004000400C460E4E03F800E003F80E4E0C46004000400
+-04000B0D7E8D11>3 D<0C000C000C000C000C000C00FFC0FFC00C000C000C000C000C000C000C
+-000C000C000C000C000C000C000C000C000C000C000C000A1A7E9310>121
+-D E /Fm 64 124 df<000FF83F00007FFDFFC001F81FE3E003E03F87E007C03F87E00F803F07E0
+-0F803F03C00F801F00000F801F00000F801F00000F801F00000F801F00000F801F0000FFFFFFFC
+-00FFFFFFFC000F801F00000F801F00000F801F00000F801F00000F801F00000F801F00000F801F
+-00000F801F00000F801F00000F801F00000F801F00000F801F00000F801F00000F801F00000F80
+-1F00000F801F00000F801F00000F801F00007FF0FFF0007FF0FFF00023237FA221>11
+-D<000FF000007FFC0001F80E0003E01F0007C03F000F803F000F803F000F801E000F800C000F80
+-00000F8000000F8000000F800000FFFFFF00FFFFFF000F801F000F801F000F801F000F801F000F
+-801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F00
+-0F801F000F801F000F801F000F801F007FF0FFE07FF0FFE01B237FA21F>I<000FFF00007FFF00
+-01F83F0003E03F0007C03F000F803F000F801F000F801F000F801F000F801F000F801F000F801F
+-000F801F00FFFFFF00FFFFFF000F801F000F801F000F801F000F801F000F801F000F801F000F80
+-1F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F
+-801F000F801F007FF0FFE07FF0FFE01B237FA21F>I<FFFCFFFCFFFCFFFC0E047F8C13>45
+-D<387CFEFEFE7C3807077C8610>I<0000180000380000380000700000700000E00000E00000E0
+-0001C00001C0000380000380000380000700000700000700000E00000E00001C00001C00001C00
+-00380000380000700000700000700000E00000E00001C00001C00001C000038000038000070000
+-0700000700000E00000E00000E00001C00001C0000380000380000380000700000700000E00000
+-E00000C0000015317DA41C>I<00FE0007FFC00F83E01F01F03E00F83E00F87C007C7C007C7C00
+-7CFC007CFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC00
+-7EFC007E7C007C7C007C7C007C3E00F83E00F81F01F00F83E007FFC000FE0017207E9F1C>I<00
+-180000780001F800FFF800FFF80001F80001F80001F80001F80001F80001F80001F80001F80001
+-F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001
+-F80001F80001F80001F8007FFFE07FFFE013207C9F1C>I<03FC000FFF003C1FC07007E07C07F0
+-FE03F0FE03F8FE03F8FE01F87C01F83803F80003F80003F00003F00007E00007C0000F80001F00
+-003E0000380000700000E01801C0180380180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0
+-FFFFF015207D9F1C>I<00FE0007FFC00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F03
+-F00003F00003E00007C0001F8001FE0001FF000007C00001F00001F80000FC0000FC3C00FE7E00
+-FEFF00FEFF00FEFF00FEFF00FC7E01FC7801F81E07F00FFFC001FE0017207E9F1C>I<0000E000
+-01E00003E00003E00007E0000FE0001FE0001FE00037E00077E000E7E001C7E00187E00307E007
+-07E00E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007E00007E000
+-07E00007E00007E000FFFE00FFFE17207E9F1C>I<1000201E01E01FFFC01FFF801FFF001FFE00
+-1FF8001BC00018000018000018000018000019FC001FFF001E0FC01807E01803E00003F00003F0
+-0003F80003F83803F87C03F8FE03F8FE03F8FC03F0FC03F07007E03007C01C1F800FFF0003F800
+-15207D9F1C>I<001F8000FFE003F07007C0F00F01F81F01F83E01F83E01F87E00F07C00007C00
+-00FC0800FC7FC0FCFFE0FD80F0FF00F8FE007CFE007CFC007EFC007EFC007EFC007E7C007E7C00
+-7E7C007E3C007C3E007C1E00F80F00F00783E003FFC000FF0017207E9F1C>I<6000007800007F
+-FFFE7FFFFE7FFFFC7FFFF87FFFF87FFFF0E00060E000C0C00180C00300C00300000600000C0000
+-1C0000180000380000780000780000F00000F00000F00001F00001F00001F00003F00003F00003
+-F00003F00003F00003F00003F00001E00017227DA11C>I<00FE0003FFC00703E00E00F01C00F0
+-1C00783C00783E00783F00783F80783FE0F01FF9E01FFFC00FFF8007FFC003FFE007FFF01E7FF8
+-3C1FFC7807FC7801FEF000FEF0003EF0001EF0001EF0001CF8001C7800383C00381F01F00FFFC0
+-01FF0017207E9F1C>I<01FE0007FF800F83E01E01F03E00F07C00F87C0078FC007CFC007CFC00
+-7CFC007EFC007EFC007EFC007E7C00FE7C00FE3E01FE1E037E0FFE7E07FC7E00207E00007C0000
+-7C1E007C3F00F83F00F83F00F03F01E01E03C01C0F800FFE0003F80017207E9F1C>I<387CFEFE
+-FE7C380000000000000000387CFEFEFE7C3807167C9510>I<000070000000007000000000F800
+-000000F800000000F800000001FC00000001FC00000003FE00000003FE00000003FE00000006FF
+-000000067F0000000E7F8000000C3F8000000C3F800000183FC00000181FC00000381FE0000030
+-0FE00000300FE00000600FF000006007F00000E007F80000FFFFF80000FFFFF800018001FC0001
+-8001FC00038001FE00030000FE00030000FE000600007F000600007F00FFE00FFFF8FFE00FFFF8
+-25227EA12A>65 D<FFFFFF8000FFFFFFE00007F001F80007F000FC0007F0007E0007F0007E0007
+-F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007E0007F000FE0007F000FC00
+-07F003F80007FFFFF00007FFFFF00007F001FC0007F0007E0007F0003F0007F0003F8007F0001F
+-8007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0003F8007F000
+-3F8007F0007F0007F001FE00FFFFFFF800FFFFFFC00022227EA128>I<0003FE0080001FFF8180
+-00FF01E38001F8003F8003E0001F8007C0000F800F800007801F800007803F000003803F000003
+-807F000001807E000001807E00000180FE00000000FE00000000FE00000000FE00000000FE0000
+-0000FE00000000FE00000000FE000000007E000000007E000001807F000001803F000001803F00
+-0003801F800003000F8000030007C000060003F0000C0001F800380000FF00F000001FFFC00000
+-03FE000021227DA128>I<FFFFFFFCFFFFFFFC07F000FC07F0003C07F0001C07F0000C07F0000E
+-07F0000E07F0000607F0180607F0180607F0180607F0180007F0380007F0780007FFF80007FFF8
+-0007F0780007F0380007F0180007F0180007F0180307F0180307F0000307F0000607F0000607F0
+-000607F0000E07F0000E07F0001E07F0003E07F001FCFFFFFFFCFFFFFFFC20227EA125>69
+-D<FFFFFFF8FFFFFFF807F001F807F0007807F0003807F0001807F0001C07F0001C07F0000C07F0
+-000C07F0180C07F0180C07F0180007F0180007F0380007F0780007FFF80007FFF80007F0780007
+-F0380007F0180007F0180007F0180007F0180007F0000007F0000007F0000007F0000007F00000
+-07F0000007F0000007F00000FFFFE000FFFFE0001E227EA123>I<FFFF83FFFEFFFF83FFFE07F0
+-001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007
+-F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007FFFFFFC007FFFFFFC007F0001FC0
+-07F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001F
+-C007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC0FFFF83FFFEFFFF83
+-FFFE27227EA12C>72 D<FFFFE0FFFFE003F80003F80003F80003F80003F80003F80003F80003F8
+-0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
+-0003F80003F80003F80003F80003F80003F80003F80003F80003F800FFFFE0FFFFE013227FA115
+->I<03FFFF03FFFF0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000
+-07F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F01807F07E
+-07F0FF07F0FF07F0FF07F0FF07E07E0FE07C1FC01FFF0007F80018227FA11D>I<FFFF803FFCFF
+-FF803FFC07F000038007F000070007F0000E0007F000180007F000300007F000E00007F001C000
+-07F003800007F007000007F00E000007F018000007F038000007F0FC000007F1FE000007F3FE00
+-0007F77F000007FE7F800007F83F800007F01FC00007F01FE00007F00FE00007F007F00007F007
+-F80007F003F80007F001FC0007F001FE0007F000FF0007F0007F0007F0007F8007F0003FC0FFFF
+-83FFFCFFFF83FFFC26227EA12C>I<FFFFE000FFFFE00007F0000007F0000007F0000007F00000
+-07F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000
+-0007F0000007F0000007F0000007F0000007F0000007F0001807F0001807F0001807F0001807F0
+-003807F0003807F0007007F0007007F000F007F001F007F007F0FFFFFFF0FFFFFFF01D227EA122
+->I<FFF000000FFFFFF800001FFF07F800001FE006FC000037E006FC000037E006FC000037E006
+-7E000067E0067E000067E0063F0000C7E0063F0000C7E0061F800187E0061F800187E0060FC003
+-07E0060FC00307E0060FC00307E00607E00607E00607E00607E00603F00C07E00603F00C07E006
+-01F81807E00601F81807E00601F81807E00600FC3007E00600FC3007E006007E6007E006007E60
+-07E006003FC007E006003FC007E006001F8007E006001F8007E006001F8007E006000F0007E0FF
+-F00F00FFFFFFF00600FFFF30227EA135>I<FFF8001FFEFFFC001FFE07FC0000C007FE0000C006
+-FF0000C0067F8000C0063FC000C0061FE000C0060FE000C0060FF000C00607F800C00603FC00C0
+-0601FE00C00600FE00C00600FF00C006007F80C006003FC0C006001FE0C006000FF0C0060007F0
+-C0060007F8C0060003FCC0060001FEC0060000FFC00600007FC00600007FC00600003FC0060000
+-1FC00600000FC006000007C006000003C006000003C0FFF00001C0FFF00000C027227EA12C>I<
+-0007FC0000003FFF800000FC07E00003F001F80007E000FC000FC0007E001F80003F001F80003F
+-003F00001F803F00001F807F00001FC07E00000FC07E00000FC0FE00000FE0FE00000FE0FE0000
+-0FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE07E00000FC07F00
+-001FC07F00001FC03F00001F803F80003F801F80003F000FC0007E0007E000FC0003F001F80000
+-FC07E000003FFF80000007FC000023227DA12A>I<FFFFFF00FFFFFFE007F007F007F001FC07F0
+-00FC07F0007E07F0007E07F0007F07F0007F07F0007F07F0007F07F0007F07F0007E07F0007E07
+-F000FC07F001FC07F007F007FFFFE007FFFF0007F0000007F0000007F0000007F0000007F00000
+-07F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00000FFFF8000FFFF80
+-0020227EA126>I<FFFFFE0000FFFFFFC00007F007F00007F001F80007F000FC0007F0007E0007
+-F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007E0007F000FC00
+-07F001F80007F007F00007FFFFC00007FFFF800007F00FE00007F007F00007F003F80007F001FC
+-0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001
+-FC0607F000FE0607F000FF0CFFFF803FF8FFFF800FF027227EA12A>82 D<01FC0407FF8C1F03FC
+-3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF0000FFE0007FFF007FFFC03FFFF0
+-1FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003FC0001FC0001FC0001FE0001EE0001E
+-F0003CFC003CFF00F8C7FFE080FF8018227DA11F>I<7FFFFFFF807FFFFFFF807E03F80F807803
+-F807807003F803806003F80180E003F801C0E003F801C0C003F800C0C003F800C0C003F800C0C0
+-03F800C00003F800000003F800000003F800000003F800000003F800000003F800000003F80000
+-0003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F800
+-000003F800000003F800000003F800000003F800000003F8000003FFFFF80003FFFFF80022227E
+-A127>I<FFFF803FFCFFFF803FFC07F000018007F000018007F000018007F000018007F0000180
+-07F000018007F000018007F000018007F000018007F000018007F000018007F000018007F00001
+-8007F000018007F000018007F000018007F000018007F000018007F000018007F000018007F000
+-018007F000018007F000018007F000018003F000030003F800030001F800060000FC000E00007E
+-001C00003F80F800000FFFE0000001FF000026227EA12B>I<FFFF800FFEFFFF800FFE07F00000
+-C007F80000C003F800018003F800018001FC00030001FC00030001FE00070000FE00060000FF00
+-0600007F000C00007F800C00003F801800003F801800003FC03800001FC03000001FE03000000F
+-E06000000FF060000007F0C0000007F0C0000007F9C0000003F980000003FD80000001FF000000
+-01FF00000000FE00000000FE00000000FE000000007C000000007C000000003800000000380000
+-27227FA12A>I<FFFF0FFFF01FFEFFFF0FFFF01FFE0FF000FF0000E007F0007F0000C007F0007F
+-0000C003F8007F80018003F8003F80018003FC003F80038001FC003FC0030001FC003FC0030000
+-FE007FE0060000FE006FE0060000FF006FE00600007F00C7F00C00007F00C7F00C00007F80C7F8
+-1C00003F8183F81800003F8183F81800001FC383FC3000001FC301FC3000001FE301FC3000000F
+-E600FE6000000FE600FE6000000FF600FFE0000007FC007FC0000007FC007FC0000003FC007F80
+-000003F8003F80000003F8003F80000001F0001F00000001F0001F00000000F0001E00000000E0
+-000E00000000E0000E000037227FA13A>I<07FC001FFF803F07C03F03E03F01E03F01F01E01F0
+-0001F00001F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF8
+-1FF87F07E03F18167E951B>97 D<FF000000FF0000001F0000001F0000001F0000001F0000001F
+-0000001F0000001F0000001F0000001F0000001F0000001F0000001F0FE0001F3FF8001FF07C00
+-1F801E001F001F001F000F801F000F801F000FC01F000FC01F000FC01F000FC01F000FC01F000F
+-C01F000FC01F000FC01F000F801F001F801F801F001FC03E001EE07C001C3FF800180FC0001A23
+-7EA21F>I<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC0000FC
+-0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF8000FE0014167E9519>I<
+-0001FE000001FE0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E
+-0000003E0000003E0000003E0001FC3E0007FFBE000F81FE001F007E003E003E007E003E007C00
+-3E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E007C003E007C
+-003E003E007E001E00FE000F83BE0007FF3FC001FC3FC01A237EA21F>I<00FE0007FF800F87C0
+-1E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C0000
+-7E00003E00181F00300FC07003FFC000FF0015167E951A>I<003F8000FFC001E3E003C7E007C7
+-E00F87E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80
+-000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80
+-000F80000F80007FF8007FF80013237FA211>I<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03E07C
+-03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC003000003000003800003FFF801F
+-FFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E78003C7C007C3F01F80FFFE001
+-FF0018217E951C>I<FF000000FF0000001F0000001F0000001F0000001F0000001F0000001F00
+-00001F0000001F0000001F0000001F0000001F0000001F07E0001F1FF8001F307C001F403C001F
+-803E001F803E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00
+-1F003E001F003E001F003E001F003E001F003E001F003E00FFE1FFC0FFE1FFC01A237EA21F>I<
+-1C003F007F007F007F003F001C000000000000000000000000000000FF00FF001F001F001F001F
+-001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B247EA310>
+-I<0038007C00FE00FE00FE007C0038000000000000000000000000000003FE03FE003E003E003E
+-003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E00
+-3E783EFC3EFC3CFC7C78F87FE01F800F2E83A311>I<FF000000FF0000001F0000001F0000001F
+-0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F00FF80
+-1F00FF801F0038001F0060001F01C0001F0380001F0700001F0E00001F1C00001F7E00001FFF00
+-001FCF00001F0F80001F07C0001F03E0001F01E0001F01F0001F00F8001F007C001F003C00FFE0
+-FFC0FFE0FFC01A237EA21E>I<FF00FF001F001F001F001F001F001F001F001F001F001F001F00
+-1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
+-00FFE0FFE00B237EA210>I<FF07F007F000FF1FFC1FFC001F303E303E001F403E403E001F801F
+-801F001F801F801F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
+-1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
+-001F001F001F001F001F001F001F00FFE0FFE0FFE0FFE0FFE0FFE02B167E9530>I<FF07E000FF
+-1FF8001F307C001F403C001F803E001F803E001F003E001F003E001F003E001F003E001F003E00
+-1F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00FFE1FF
+-C0FFE1FFC01A167E951F>I<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007E
+-FC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE00
+-17167E951C>I<FF0FE000FF3FF8001FF07C001F803E001F001F001F001F801F001F801F000FC0
+-1F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F001F801F001F801F803F
+-001FC03E001FE0FC001F3FF8001F0FC0001F0000001F0000001F0000001F0000001F0000001F00
+-00001F0000001F000000FFE00000FFE000001A207E951F>I<00FE030007FF87000FC1C7001F00
+-6F003F003F007E003F007E001F007C001F00FC001F00FC001F00FC001F00FC001F00FC001F00FC
+-001F00FC001F007E001F007E001F003E003F001F007F000FC1DF0007FF9F0001FC1F0000001F00
+-00001F0000001F0000001F0000001F0000001F0000001F0000001F000000FFE00000FFE01B207E
+-951E>I<FE1F00FE3FC01E67E01EC7E01E87E01E87E01F83C01F00001F00001F00001F00001F00
+-001F00001F00001F00001F00001F00001F00001F00001F0000FFF000FFF00013167E9517>I<0F
+-F3003FFF00781F00600700E00300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF0000
+-0F80C00780C00380E00380E00380F00700FC0E00EFFC00C7F00011167E9516>I<018000018000
+-0180000180000380000380000780000780000F80003F8000FFFF00FFFF000F80000F80000F8000
+-0F80000F80000F80000F80000F80000F80000F80000F80000F81800F81800F81800F81800F8180
+-0F830007C30003FE0000F80011207F9F16>I<FF01FE00FF01FE001F003E001F003E001F003E00
+-1F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E
+-001F003E001F003E001F007E001F00FE000F81BE0007FF3FC001FC3FC01A167E951F>I<FFE01F
+-E0FFE01FE00F8006000F8006000FC00E0007C00C0007E01C0003E0180003E0180001F0300001F0
+-300000F8600000F86000007CC000007CC000007FC000003F8000003F8000001F0000001F000000
+-0E0000000E00001B167F951E>I<FFE7FF07F8FFE7FF07F81F007800C00F807801800F807C0180
+-0F807C018007C07E030007C0DE030007E0DE070003E0DF060003E18F060001F18F0C0001F38F8C
+-0001FB079C0000FB07D80000FE03D800007E03F000007E03F000007C01F000003C01E000003800
+-E000001800C00025167F9528>I<FFE07FC0FFE07FC00F801C0007C0380003E0700003F0600001
+-F8C00000F98000007F8000003F0000001F0000001F8000003FC0000037C0000063E00000C1F000
+-01C0F8000380FC0007007E000E003E00FF80FFE0FF80FFE01B167F951E>I<FFE01FE0FFE01FE0
+-0F8006000F8006000FC00E0007C00C0007E01C0003E0180003E0180001F0300001F0300000F860
+-0000F86000007CC000007CC000007FC000003F8000003F8000001F0000001F0000000E0000000E
+-0000000C0000000C00000018000078180000FC380000FC300000FC60000069C000007F8000001F
+-0000001B207F951E>I<7FFFF07FFFF07C03E07007C0600FC0E01F80C01F00C03E00C07E0000FC
+-0000F80001F00003F03007E03007C0300F80701F80703F00603E00E07C03E0FFFFE0FFFFE01416
+-7E9519>I<FFFFFFE0FFFFFFE01B02808E1C>I E /Fn 7 117 df<000018000000001800000000
+-18000000003C000000003C000000003C000000007E000000007E00000000FF000000009F000000
+-009F000000011F800000010F800000010F8000000207C000000207C000000207C000000403E000
+-000403E000000403E000000801F000000801F000001801F800001000F800001000F800002000FC
+-000020007C00003FFFFC00007FFFFE000040003E000040003E000080001F000080001F00008000
+-1F000100000F800100000F800100000F8002000007C007000007C01F80000FE0FFF000FFFFFFF0
+-00FFFF282A7EA92D>65 D<01FC00000E0780001001C0003C00E0003E00F0003E0078001C007800
+-08007800000078000000780000007800007FF80003E078000F8078001F0078003E0078007C0078
+-0078007820F8007820F8007820F8007820F800F8207C00F8203C013C401F063FC007F80F001B1A
+-7E991E>97 D<07800000FF800000FF8000000F8000000780000007800000078000000780000007
+-800000078000000780000007800000078000000780000007800000078000000783F000078C1C00
+-07B0070007A0038007C003C0078001E0078001E0078000F0078000F0078000F8078000F8078000
+-F8078000F8078000F8078000F8078000F8078000F0078000F0078001F0078001E0078001C007C0
+-03C00740078007200E0006181C000407E0001D2A7FA921>I<007F8001C0700780080F003C1E00
+-7C3C007C3C00387C0010780000F80000F80000F80000F80000F80000F80000F80000F800007800
+-007C00003C00043C00041E00080F001007802001C0C0007F00161A7E991B>I<0787C0FF98E0FF
+-91F00FA1F007C1F007C0E007C00007800007800007800007800007800007800007800007800007
+-800007800007800007800007800007800007800007800007C000FFFE00FFFE00141A7F9917>
+-114 D<07F8401C06C03001C06000C06000C0E00040E00040F00040F800007E00007FF0003FFE00
+-0FFF0003FF80003FC00007C08001E08001E0C000E0C000E0C000E0E000C0F001C0F80180C40700
+-83F800131A7E9918>I<0080000080000080000080000180000180000180000380000380000780
+-000F80001FFF80FFFF800780000780000780000780000780000780000780000780000780000780
+-0007800007800007800007804007804007804007804007804007804007804003C08001C08000E1
+-00003E0012257FA417>I E /Fo 3 122 df<FFFFF0FFFFF014027D881B>0
+-D<020002000200C218F2783AE00F800F803AE0F278C2180200020002000D0E7E8E12>3
+-D<06000600060006000600060006000600FFF0FFF0060006000600060006000600060006000600
+-06000600060006000600060006000600060006000C1D7E9611>121 D E
+-/Fp 20 118 df<78FCFCFEFE7A020202020204040408081020204007147AB112>39
+-D<78FCFCFCFC7806067A8512>46 D<003F800000E0E0000380380007001C000F001E000E000E00
+-1E000F001C0007003C0007803C0007803C000780780003C0780003C0780003C0780003C0F80003
+-E0F80003E0F80003E0F80003E0F80003E0F80003E0F80003E0F80003E0F80003E0F80003E0F800
+-03E0F80003E0F80003E0F80003E0F80003E0F80003E0F80003E0F80003E0780003C0780003C078
+-0003C07C0007C03C0007803C0007803C0007801C0007001E000F000E000E000F001E0007001C00
+-0380380000E0E000003F80001B307DAE21>48 D<007F800001FFF0000701F8000C007E0018001F
+-0010000F0020000F80400007C0400007C0400003E0B00003E0F80003E0FC0003E0FC0003E0FC00
+-03E0780003E0000003E0000007C0000007C00000078000000F8000000F0000001F0000001E0000
+-003C0000007800000070000000E0000001C0000003800000070000000E0000000C000000180000
+-003000000060000000C000200180002003000020060000400C00004008000040100000C03FFFFF
+-C07FFFFF80FFFFFF80FFFFFF801B2F7DAE21>50 D<00003FE0010001FFF8030007F01E03001F80
+-0307003E000087007800004F00F000002F01E000001F03C000000F078000000F0F800000070F00
+-0000071F000000031E000000033E000000033C000000017C000000017C000000017C0000000178
+-00000000F800000000F800000000F800000000F800000000F800000000F800000000F800000000
+-F800000000F800000000F800000000F80000000078000000007C000000007C000000017C000000
+-013C000000013E000000011E000000011F000000020F000000020F80000006078000000403C000
+-000801E000000800F00000100078000020003E0000C0001F8003800007F00F000001FFFC000000
+-3FE00028337CB130>67 D<00001FE000800000FFFC01800007F00F0180000F80018380003E0000
+-C38000780000278000F00000178001E000000F8003C000000F800780000007800780000003800F
+-00000003801F00000001801E00000001803E00000001803C00000001803C00000000807C000000
+-00807C0000000080780000000000F80000000000F80000000000F80000000000F80000000000F8
+-0000000000F80000000000F80000000000F80000000000F80000000000F80000000000F800000F
+-FFFC7800000FFFFC7C0000001FC07C0000000F803C0000000F803C0000000F803E0000000F801E
+-0000000F801F0000000F800F0000000F80078000000F8007C000000F8003C000000F8001E00000
+-0F8000F000001780007C00001780003E00006380000F8000C3800007F00781800000FFFE008000
+-001FF000002E337CB134>71 D<7FFFFFFFFFE07FFFFFFFFFE07E000F8007E078000F8001E07000
+-0F8000E060000F80006040000F80002040000F800020C0000F800030C0000F80003080000F8000
+-1080000F80001080000F80001080000F80001080000F80001080000F80001000000F8000000000
+-0F80000000000F80000000000F80000000000F80000000000F80000000000F80000000000F8000
+-0000000F80000000000F80000000000F80000000000F80000000000F80000000000F8000000000
+-0F80000000000F80000000000F80000000000F80000000000F80000000000F80000000000F8000
+-0000000F80000000000F80000000000F80000000000F80000000000F80000000000F8000000000
+-0F80000000000F80000000000F80000000001FC00000000FFFFF8000000FFFFF80002C317EB030
+->84 D<FFFF8007FFC0FFFF8007FFC007F000007C0003E00000380003E00000100003E000001000
+-03E00000100003E00000100003E00000100003E00000100003E00000100003E00000100003E000
+-00100003E00000100003E00000100003E00000100003E00000100003E00000100003E000001000
+-03E00000100003E00000100003E00000100003E00000100003E00000100003E00000100003E000
+-00100003E00000100003E00000100003E00000100003E00000100003E00000100003E000001000
+-03E00000100003E00000100003E00000100003E00000100003E00000100001E00000200001F000
+-00200001F00000200000F00000400000F000004000007800008000003C00018000003C00010000
+-001E000600000007800C00000003E07800000000FFF0000000003F8000002A327CB032>I<FFFE
+-000007FFFFFE000007FF07F0000001F803E0000000E003E0000000C003F0000000C001F0000000
+-8001F00000008000F80000010000F80000010000FC00000100007C00000200007C00000200007E
+-00000600003E00000400003E00000400001F00000800001F00000800001F80000800000F800010
+-00000F800010000007C00020000007C00020000007E00020000003E00040000003E00040000003
+-F000C0000001F00080000001F00080000000F80100000000F80100000000FC01000000007C0200
+-0000007C02000000003E04000000003E04000000003F04000000001F08000000001F0800000000
+-1F98000000000F90000000000F900000000007E00000000007E00000000007E00000000003C000
+-00000003C0000000000180000000000180000000000180000030327FB032>I<00FE00000303C0
+-000C00E00010007000100038003C003C003E001C003E001E003E001E0008001E0000001E000000
+-1E0000001E00000FFE0000FC1E0003E01E000F801E001F001E003E001E003C001E007C001E00F8
+-001E04F8001E04F8001E04F8003E04F8003E0478003E047C005E043E008F080F0307F003FC03E0
+-1E1F7D9E21>97 D<003F8000E0600380180700040F00041E001E1C003E3C003E7C003E7C000878
+-0000F80000F80000F80000F80000F80000F80000F80000F80000F800007800007C00007C00003C
+-00011E00011E00020F000207000403801800E060003F80181F7D9E1D>99
+-D<000001E000003FE000003FE0000003E0000001E0000001E0000001E0000001E0000001E00000
+-01E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E000
+-1F81E000F061E001C019E0078005E00F0003E00E0003E01E0001E03C0001E03C0001E07C0001E0
+-780001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001
+-E0780001E0780001E03C0001E03C0001E01C0001E01E0003E00E0005E0070009E0038011F000E0
+-61FF003F81FF20327DB125>I<003F800000E0E0000380380007003C000E001E001E001E001C00
+-0F003C000F007C000F0078000F8078000780F8000780F8000780FFFFFF80F8000000F8000000F8
+-000000F8000000F8000000F8000000780000007C0000003C0000003C0000801E0000800E000100
+-0F0002000780020001C00C0000F03000001FC000191F7E9E1D>I<0780000000FF80000000FF80
+-0000000F8000000007800000000780000000078000000007800000000780000000078000000007
+-800000000780000000078000000007800000000780000000078000000007800000000780000000
+-07800000000780FE00000783078000078C03C000079001E00007A001E00007A000F00007C000F0
+-0007C000F000078000F000078000F000078000F000078000F000078000F000078000F000078000
+-F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0000780
+-00F000078000F000078000F000078000F000078000F000078000F0000FC001F800FFFC1FFF80FF
+-FC1FFF8021327EB125>104 D<07000F801F801F800F8007000000000000000000000000000000
+-00000000000000000780FF80FF800F800780078007800780078007800780078007800780078007
+-800780078007800780078007800780078007800780078007800FC0FFF8FFF80D307EAF12>I<07
+-80FE0000FF83078000FF8C03C0000F9001E00007A001E00007A000F00007C000F00007C000F000
+-078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0
+-00078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000
+-F000078000F000078000F000078000F000078000F0000FC001F800FFFC1FFF80FFFC1FFF80211F
+-7E9E25>110 D<001FC00000F0780001C01C00070007000F0007801E0003C01C0001C03C0001E0
+-3C0001E0780000F0780000F0780000F0F80000F8F80000F8F80000F8F80000F8F80000F8F80000
+-F8F80000F8F80000F8780000F07C0001F03C0001E03C0001E01E0003C01E0003C00F0007800780
+-0F0001C01C0000F07800001FC0001D1F7E9E21>I<0783E0FF8C18FF907C0F907C07A07C07C038
+-07C00007C00007C000078000078000078000078000078000078000078000078000078000078000
+-0780000780000780000780000780000780000780000780000780000FC000FFFE00FFFE00161F7E
+-9E19>114 D<01FC100E03301800F0300070600030E00030E00010E00010E00010F00010F80000
+-7E00003FF0001FFF000FFFC003FFE0003FF00001F80000F880003C80003C80001CC0001CC0001C
+-E0001CE00018F00038F00030CC0060C301C080FE00161F7E9E1A>I<078000F000FF801FF000FF
+-801FF0000F8001F000078000F000078000F000078000F000078000F000078000F000078000F000
+-078000F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0
+-00078000F000078000F000078000F000078000F000078000F000078001F000078001F000078001
+-F000038002F00003C004F00001C008F800007030FF80001FC0FF80211F7E9E25>117
+-D E /Fq 89 125 df<001F83E000706E3000C07C780180F8780380F07807007000070070000700
+-7000070070000700700007007000070070000700700007007000FFFFFFC0070070000700700007
+-007000070070000700700007007000070070000700700007007000070070000700700007007000
+-070070000700700007007000070070000700700007007000070078007FE3FF801D2380A21C>11
+-D<001FC0000070200000C010000180380003807800070078000700300007000000070000000700
+-000007000000070000000700000007000000FFFFF8000700780007003800070038000700380007
+-003800070038000700380007003800070038000700380007003800070038000700380007003800
+-07003800070038000700380007003800070038007FE1FF80192380A21B>I<001FD80000703800
+-00C078000180780003807800070038000700380007003800070038000700380007003800070038
+-000700380007003800FFFFF8000700380007003800070038000700380007003800070038000700
+-380007003800070038000700380007003800070038000700380007003800070038000700380007
+-00380007003800070038007FF3FF80192380A21B>I<000FC07F00007031C08000E00B00400180
+-1E00E003803E01E007003C01E007001C00C007001C000007001C000007001C000007001C000007
+-001C000007001C000007001C0000FFFFFFFFE007001C01E007001C00E007001C00E007001C00E0
+-07001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00
+-E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E07FF1FF
+-CFFE272380A229>I<01F800FC0007060307000C030603801C018C01C03800D801C07800F800E0
+-70007000E0F0007000E0F0007FFFE0F000700000F000700000F000700000F000700000F0007000
+-007000F800007800F800203800D800201C018C00400C03060080070603830001F800FC0023157F
+-9426>27 D<70F8F8F8F8F8F8F8707070707070707070707070202020202020000000000070F8F8
+-F87005247CA30E>33 D<7038F87CFC7EFC7E743A04020402040204020804080410081008201040
+-200F0F7EA218>I<0000C018000000C018000000C0180000018030000001803000000180300000
+-0180300000030060000003006000000300600000030060000003006000000600C000000600C000
+-000600C000000600C000000C018000FFFFFFFFC0FFFFFFFFC00018030000001803000000180300
+-0000180300000030060000003006000000300600000030060000FFFFFFFFC0FFFFFFFFC000600C
+-000000C018000000C018000000C018000000C01800000180300000018030000001803000000180
+-30000003006000000300600000030060000003006000000600C000000600C000000600C0000022
+-2D7DA229>I<0780000C001840000C0018200018003010007000701C00B0006013FF6000E00800
+-6000E00800C000E008018000E008018000E008030000E008060000E008060000E0080C00006010
+-18000070101800003010300000182030000018406000000780C03C000000C04200000180C10000
+-03018100000303808000060300800006030040000C070040001807004000180700400030070040
+-0060070040006007004000C00700400180030040018003008003000380800300018100060000C1
+-000C000042000400003C0022287DA429>37 D<70F8FCFC7404040404080810102040060F7CA20E
+->39 D<00200040008001000300060004000C000C00180018003000300030007000600060006000
+-E000E000E000E000E000E000E000E000E000E000E000E000E000E0006000600060007000300030
+-003000180018000C000C0004000600030001000080004000200B327CA413>I<80004000200010
+-0018000C000400060006000300030001800180018001C000C000C000C000E000E000E000E000E0
+-00E000E000E000E000E000E000E000E000E000C000C000C001C001800180018003000300060006
+-0004000C00180010002000400080000B327DA413>I<008000008000008000008000008000C081
+-80E08380388E000C980003E00001C00003E0000C9800388E00E08380C081800080000080000080
+-0000800000800011157DA418>I<00018000000180000001800000018000000180000001800000
+-018000000180000001800000018000000180000001800000018000000180000001800000018000
+-FFFFFFFEFFFFFFFE00018000000180000001800000018000000180000001800000018000000180
+-0000018000000180000001800000018000000180000001800000018000000180001F227D9C26>
+-I<70F8FCFC7404040404080810102040060F7C840E>I<FFE0FFE00B027F8B10>I<70F8F8F87005
+-057C840E>I<000080000180000180000300000300000300000600000600000600000C00000C00
+-000C0000180000180000180000300000300000300000600000600000600000C00000C00000C000
+-0180000180000180000180000300000300000300000600000600000600000C00000C00000C0000
+-180000180000180000300000300000300000600000600000600000C00000C00000C0000011317D
+-A418>I<01F000071C000C06001803003803803803807001C07001C07001C07001C0F001E0F001
+-E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E07001
+-C07001C07001C07803C03803803803801C07000C0600071C0001F00013227EA018>I<00800380
+-0F80F3800380038003800380038003800380038003800380038003800380038003800380038003
+-8003800380038003800380038003800380038007C0FFFE0F217CA018>I<03F0000C1C00100700
+-2007804003C04003C08003E0F003E0F801E0F801E0F801E02003E00003E00003C00003C0000780
+-000700000E00001C0000180000300000600000C000018000010000020020040020080020180060
+-3000403FFFC07FFFC0FFFFC013217EA018>I<03F8000C1E001007002007804007C07807C07803
+-C07807C03807C0000780000780000700000F00000E0000380003F000001C00000F000007800007
+-800003C00003C00003E02003E07003E0F803E0F803E0F003C04003C0400780200780100F000C1C
+-0003F00013227EA018>I<000200000600000E00000E00001E00001E00002E00004E00004E0000
+-8E00008E00010E00020E00020E00040E00040E00080E00100E00100E00200E00200E00400E0080
+-0E00FFFFF8000E00000E00000E00000E00000E00000E00000E00001F0001FFF015217FA018>I<
+-1000801E07001FFF001FFE001FF80013E00010000010000010000010000010000010000010F800
+-130E001407001803801003800001C00001C00001E00001E00001E00001E07001E0F001E0F001E0
+-E001C08001C04003C04003802007001006000C1C0003F00013227EA018>I<007E0001C1000300
+-800601C00E03C01C03C0180180380000380000780000700000700000F0F800F30C00F40600F403
+-00F80380F801C0F001C0F001E0F001E0F001E0F001E0F001E07001E07001E07001E03801C03801
+-C01803801C03000C0600070C0001F00013227EA018>I<4000006000007FFFE07FFFC07FFFC040
+-0080C0010080010080020080020000040000080000080000100000300000200000600000600000
+-600000E00000C00000C00001C00001C00001C00001C00003C00003C00003C00003C00003C00003
+-C00003C00003C00001800013237DA118>I<01F800060E000803001001802001802000C06000C0
+-6000C06000C07000C07801803E01003F02001FC4000FF80003F80003FC00067F00083F80100F80
+-3007C06001C06000E0C000E0C00060C00060C00060C000606000406000C03000801803000E0E00
+-03F00013227EA018>I<01F000060C000C0600180700380380700380700380F001C0F001C0F001
+-C0F001E0F001E0F001E0F001E0F001E07001E07003E03803E01805E00C05E00619E003E1E00001
+-C00001C00001C0000380000380300300780700780600700C002018001030000FC00013227EA018
+->I<70F8F8F870000000000000000000000070F8F8F87005157C940E>I<70F8F8F8700000000000
+-00000000000070F8F8F87808080808101010204040051F7C940E>I<FFFFFFFEFFFFFFFE000000
+-0000000000000000000000000000000000000000000000000000000000FFFFFFFEFFFFFFFE1F0C
+-7D9126>61 D<0001800000018000000180000003C0000003C0000003C0000005E0000005E00000
+-0DF0000008F0000008F0000010F800001078000010780000203C0000203C0000203C0000401E00
+-00401E0000401E0000800F0000800F0000FFFF000100078001000780030007C0020003C0020003
+-C0040003E0040001E0040001E00C0000F00C0000F03E0001F8FF800FFF20237EA225>65
+-D<FFFFF8000F800E0007800780078003C0078003E0078001E0078001F0078001F0078001F00780
+-01F0078001F0078001E0078003E0078007C007800F8007803E0007FFFE0007800780078003C007
+-8001E0078001F0078000F0078000F8078000F8078000F8078000F8078000F8078000F8078001F0
+-078001F0078003E0078007C00F800F00FFFFFC001D227EA123>I<0007E0100038183000E00630
+-01C00170038000F0070000F00E0000701E0000701C0000303C0000303C0000307C000010780000
+-1078000010F8000000F8000000F8000000F8000000F8000000F8000000F8000000F80000007800
+-0000780000107C0000103C0000103C0000101C0000201E0000200E000040070000400380008001
+-C0010000E0020000381C000007E0001C247DA223>I<FFFFF0000F801E0007800700078003C007
+-8001C0078000E0078000F007800078078000780780007C0780003C0780003C0780003C0780003E
+-0780003E0780003E0780003E0780003E0780003E0780003E0780003E0780003E0780003C078000
+-3C0780007C0780007807800078078000F0078000E0078001E0078003C0078007000F801E00FFFF
+-F8001F227EA125>I<FFFFFFC00F8007C0078001C0078000C00780004007800040078000600780
+-0020078000200780002007802020078020000780200007802000078060000780E00007FFE00007
+-80E000078060000780200007802000078020000780200807800008078000080780001007800010
+-07800010078000300780003007800070078000E00F8003E0FFFFFFE01D227EA121>I<FFFFFFC0
+-0F8007C0078001C0078000C0078000400780004007800060078000200780002007800020078020
+-20078020000780200007802000078060000780E00007FFE0000780E00007806000078020000780
+-200007802000078020000780000007800000078000000780000007800000078000000780000007
+-800000078000000FC00000FFFE00001B227EA120>I<0007F008003C0C1800E0021801C001B803
+-8000F8070000780F0000381E0000381E0000183C0000183C0000187C0000087800000878000008
+-F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8001FFF780000F8780000
+-787C0000783C0000783C0000781E0000781E0000780F00007807000078038000B801C000B800E0
+-0318003C0C080007F00020247DA226>I<FFFC3FFF0FC003F0078001E0078001E0078001E00780
+-01E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E007
+-8001E007FFFFE0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0
+-078001E0078001E0078001E0078001E0078001E0078001E0078001E00FC003F0FFFC3FFF20227E
+-A125>I<FFFC0FC007800780078007800780078007800780078007800780078007800780078007
+-80078007800780078007800780078007800780078007800780078007800FC0FFFC0E227EA112>
+-I<03FFF0001F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+-00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+-00700F00F80F00F80F00F80E00F01E00401C0020380018700007C00014237EA119>I<FFFC03FF
+-000FC000F800078000600007800040000780008000078001000007800200000780040000078008
+-0000078010000007802000000780400000078080000007818000000783C000000787E000000789
+-E000000788F000000790F0000007A078000007C03C000007803C000007801E000007800F000007
+-800F00000780078000078007C000078003C000078001E000078001E000078000F000078000F800
+-0FC000FC00FFFC07FF8021227EA126>I<FFFE00000FC000000780000007800000078000000780
+-000007800000078000000780000007800000078000000780000007800000078000000780000007
+-800000078000000780000007800000078000000780000007800000078000800780008007800080
+-07800080078001800780018007800100078003000780030007800F000F803F00FFFFFF0019227E
+-A11E>I<FFC00003FF0FC00003F007C00003E005E00005E005E00005E004F00009E004F00009E0
+-04F00009E004780011E004780011E004780011E0043C0021E0043C0021E0043C0021E0041E0041
+-E0041E0041E0040F0081E0040F0081E0040F0081E004078101E004078101E004078101E00403C2
+-01E00403C201E00401E401E00401E401E00401E401E00400F801E00400F801E00400F801E00400
+-7001E00E007001E01F007003F0FFE0203FFF28227EA12D>I<FF8007FF07C000F807C0007005E0
+-002004F0002004F0002004780020047C0020043C0020041E0020041F0020040F00200407802004
+-0780200403C0200401E0200401E0200400F0200400F8200400782004003C2004003E2004001E20
+-04000F2004000F20040007A0040003E0040003E0040001E0040001E0040000E00E0000601F0000
+-60FFE0002020227EA125>I<000FE00000783C0000E00E0003C00780078003C00F0001E00E0000
+-E01E0000F03C0000783C0000787C00007C7C00007C7800003C7800003CF800003EF800003EF800
+-003EF800003EF800003EF800003EF800003EF800003EF800003E7800003C7C00007C7C00007C3C
+-0000783E0000F81E0000F00F0001E00F0001E0078003C003C0078000E00E0000783C00000FE000
+-1F247DA226>I<FFFFF0000F803C0007800F0007800780078007C0078003C0078003E0078003E0
+-078003E0078003E0078003E0078003E0078003C0078007C00780078007800F0007803C0007FFF0
+-000780000007800000078000000780000007800000078000000780000007800000078000000780
+-0000078000000780000007800000078000000FC00000FFFC00001B227EA121>I<000FE0000078
+-3C0000E00E0003C00780078003C00F0001E00E0000E01E0000F03E0000F83C0000787C00007C7C
+-00007C7800003C7800003CF800003EF800003EF800003EF800003EF800003EF800003EF800003E
+-F800003EF800003E7800003C7C00007C7C00007C3C0000783C0000781E0380F00E0420E00F0801
+-E0078813C003C8178000E80E00007C3C02000FEC0200000C0200000C0200000E0600000F0E0000
+-07FC000007FC000007F8000003F8000001E01F2D7DA226>I<FFFFE000000F803C000007800E00
+-000780078000078007C000078003C000078003E000078003E000078003E000078003E000078003
+-E000078003C000078007C000078007800007800E000007803C000007FFE0000007807000000780
+-38000007801C000007801E000007800E000007800F000007800F000007800F000007800F000007
+-800F800007800F800007800F800007800F808007800FC080078007C0800FC003C100FFFC01E200
+-0000007C0021237EA124>I<03F0200C0C601802603001E07000E0600060E00060E00060E00020
+-E00020E00020F00000F000007800007F00003FF0001FFE000FFF0003FF80003FC00007E00001E0
+-0000F00000F0000070800070800070800070800070C00060C00060E000C0F000C0C80180C60700
+-81FC0014247DA21B>I<7FFFFFF87807807860078018400780084007800840078008C007800C80
+-078004800780048007800480078004000780000007800000078000000780000007800000078000
+-000780000007800000078000000780000007800000078000000780000007800000078000000780
+-000007800000078000000780000007800000078000000FC00003FFFF001E227EA123>I<FFFC07
+-FF0FC000F807800070078000200780002007800020078000200780002007800020078000200780
+-002007800020078000200780002007800020078000200780002007800020078000200780002007
+-80002007800020078000200780002007800020078000200380004003C0004003C0004001C00080
+-00E000800060010000300600001C08000003F00020237EA125>I<FFF0007FC01F80001F000F00
+-000C000780000C000780000800078000080003C000100003C000100003E000300001E000200001
+-E000200000F000400000F000400000F000400000780080000078008000007C018000003C010000
+-003C010000001E020000001E020000001F020000000F040000000F040000000F8C000000078800
+-0000078800000003D000000003D000000003F000000001E000000001E000000000C000000000C0
+-00000000C0000022237FA125>I<FFF03FFC03FE1F8007E000F80F0003C000700F0003C000200F
+-0003C00020078001E00040078001E00040078001E0004003C002F0008003C002F0008003C002F0
+-008001E00478010001E00478010001E00478010000F0083C020000F0083C020000F0083C020000
+-F8183E06000078101E04000078101E0400007C101E0400003C200F0800003C200F0800003C200F
+-0800001E40079000001E40079000001E40079000000F8003E000000F8003E000000F8003E00000
+-070001C00000070001C00000070001C0000003000180000002000080002F237FA132>I<7FF807
+-FF0007E001F80003C000E00003E000C00001E000800000F001000000F80300000078020000007C
+-040000003E0C0000001E080000001F100000000FB000000007A000000007C000000003E0000000
+-01E000000001F000000003F80000000278000000047C0000000C3E000000081E000000101F0000
+-00300F80000020078000004007C00000C003E000008001E000010001F000030000F000070000F8
+-001F8001FC00FFE007FFC022227FA125>I<FFF0007FC01F80001F000F80000C00078000080007
+-C000180003E000100001E000200001F000200000F000400000F800C000007C008000003C010000
+-003E010000001E020000001F040000000F84000000078800000007D800000003D000000003E000
+-000001E000000001E000000001E000000001E000000001E000000001E000000001E000000001E0
+-00000001E000000001E000000001E000000001E000000003E00000003FFF000022227FA125>I<
+-7FFFFE7E003E78003C7000786000784000F0C000F0C001E08003C08003C0800780000780000F00
+-001F00001E00003C00003C0000780000780000F00001F00001E00103C00103C001078001078003
+-0F00031E00021E00023C00063C000E78001EF8007EFFFFFE18227DA11E>I<FEFEC0C0C0C0C0C0
+-C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+-FEFE07317BA40E>I<0804100820102010402040208040804080408040B85CFC7EFC7E7C3E381C
+-0F0F7AA218>I<FEFE060606060606060606060606060606060606060606060606060606060606
+-060606060606060606060606060606FEFE07317FA40E>I<08102020404080808080B8FCFC7C38
+-060F7DA20E>96 D<0FE0001838003C0C003C0E0018070000070000070000070000FF0007C7001E
+-07003C0700780700700700F00708F00708F00708F00F087817083C23900FC1E015157E9418>I<
+-0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000
+-0E00000E1F000E61C00E80600F00300E00380E003C0E001C0E001E0E001E0E001E0E001E0E001E
+-0E001E0E001E0E001C0E003C0E00380F00700C80600C41C0083F0017237FA21B>I<01FE000703
+-000C07801C0780380300780000700000F00000F00000F00000F00000F00000F00000F000007000
+-007800403800401C00800C010007060001F80012157E9416>I<0000E0000FE00001E00000E000
+-00E00000E00000E00000E00000E00000E00000E00000E00000E00000E001F8E00704E00C02E01C
+-01E03800E07800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E038
+-00E01801E00C02E0070CF001F0FE17237EA21B>I<01FC000707000C03801C01C03801C07801E0
+-7000E0F000E0FFFFE0F00000F00000F00000F00000F000007000007800203800201C00400E0080
+-07030000FC0013157F9416>I<003C00C6018F038F030F07000700070007000700070007000700
+-0700FFF80700070007000700070007000700070007000700070007000700070007000700070007
+-0007807FF8102380A20F>I<00007001F198071E180E0E181C07001C07003C07803C07803C0780
+-3C07801C07001C07000E0E000F1C0019F0001000001000001800001800001FFE000FFFC00FFFE0
+-3800F0600030400018C00018C00018C000186000306000303800E00E038003FE0015217F9518>
+-I<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00
+-000E00000E1F800E60C00E80E00F00700F00700E00700E00700E00700E00700E00700E00700E00
+-700E00700E00700E00700E00700E00700E00700E00700E0070FFE7FF18237FA21B>I<1C001E00
+-3E001E001C00000000000000000000000000000000000E00FE001E000E000E000E000E000E000E
+-000E000E000E000E000E000E000E000E000E000E000E00FFC00A227FA10E>I<01C003E003E003
+-E001C00000000000000000000000000000000001E00FE001E000E000E000E000E000E000E000E0
+-00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0F18061
+-803E000B2C82A10F>I<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00
+-000E00000E00000E00000E00000E03FC0E01F00E01C00E01800E02000E04000E08000E10000E38
+-000EF8000F1C000E1E000E0E000E07000E07800E03C00E01C00E01E00E00F00E00F8FFE3FE1723
+-7FA21A>I<0E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+-0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFE00B237F
+-A20E>I<0E1FC07F00FE60E183801E807201C00F003C00E00F003C00E00E003800E00E003800E0
+-0E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800
+-E00E003800E00E003800E00E003800E00E003800E00E003800E0FFE3FF8FFE27157F942A>I<0E
+-1F80FE60C01E80E00F00700F00700E00700E00700E00700E00700E00700E00700E00700E00700E
+-00700E00700E00700E00700E00700E00700E0070FFE7FF18157F941B>I<01FC000707000C0180
+-1800C03800E0700070700070F00078F00078F00078F00078F00078F00078F000787000707800F0
+-3800E01C01C00E038007070001FC0015157F9418>I<0E1F00FE61C00E80600F00700E00380E00
+-3C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E003C0E003C0E00380F00700E80
+-E00E41C00E3F000E00000E00000E00000E00000E00000E00000E00000E00000E0000FFE000171F
+-7F941B>I<01F8200704600E02601C01603801E07800E07800E0F000E0F000E0F000E0F000E0F0
+-00E0F000E0F000E07000E07800E03801E01C01E00C02E0070CE001F0E00000E00000E00000E000
+-00E00000E00000E00000E00000E00000E0000FFE171F7E941A>I<0E3CFE461E8F0F0F0F060F00
+-0E000E000E000E000E000E000E000E000E000E000E000E000E000F00FFF010157F9413>I<0F88
+-30786018C018C008C008E008F0007F803FE00FF001F8003C801C800C800CC00CC008E018D0308F
+-C00E157E9413>I<02000200020002000600060006000E001E003E00FFF80E000E000E000E000E
+-000E000E000E000E000E000E000E040E040E040E040E040E040708030801F00E1F7F9E13>I<0E
+-0070FE07F01E00F00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E
+-00700E00700E00700E00F00E00F006017003827800FC7F18157F941B>I<FFC1FE1E00780E0030
+-0E00200E002007004007004003808003808003808001C10001C10000E20000E20000E200007400
+-00740000380000380000380000100017157F941A>I<FF8FF8FF1E01E03C1C01C0180E01C0180E
+-01E0100E01E01007026020070270200702702003843040038438400384384001C8188001C81C80
+-01C81C8000F00D0000F00F0000F00F0000600600006006000060060020157F9423>I<FF83FE1F
+-01F00E00C007008003810003830001C20000E400007800007800003800003C00004E00008E0001
+-87000103800201C00401E00C00E03E01F0FF03FE17157F941A>I<FFC1FE1E00780E00300E0020
+-0E002007004007004003808003808003808001C10001C10000E20000E20000E200007400007400
+-003800003800003800001000001000002000002000002000004000F04000F08000F18000430000
+-3C0000171F7F941A>I<3FFFC0380380300780200700600E00401C00403C0040380000700000E0
+-0001E00001C0000380400700400F00400E00C01C0080380080780180700780FFFF8012157F9416
+->I<FFFFFE1701808C18>I<FFFFFFFFFFFF3001808C31>I E end
+-%%EndProlog
+-%%BeginSetup
+-%%Feature: *Resolution 300
+-TeXDict begin 
+-%%EndSetup
+-%%Page: 1 1
+-bop 847 43 a Fq(SAND95{2344)485 b(Distribution)802 106 y(Unlimited)13
+-b(Release)326 b(Category)17 b(UC{405)807 168 y(Prin)o(ted)f(July)f(1995)645
+-499 y Fp(The)22 b(Chaco)f(User's)g(Guide)831 561 y(V)-6 b(ersion)21
+-b(2.0)543 744 y Fq(Bruce)16 b(Hendric)o(kson)947 726 y Fo(\003)1006
+-744 y Fq(and)41 b(Rob)q(ert)17 b(Leland)1434 726 y Fo(y)684
+-806 y Fq(Sandia)g(National)f(Lab)q(oratories)664 868 y(Albuquerque,)e(NM)40
+-b(87185{1110)884 1231 y Fn(Abstract)165 1353 y Fq(Graph)24
+-b(partitioning)e(is)h(a)g(fundamen)o(tal)e(problem)g(in)i(man)o(y)e(scien)o
+-(ti\014c)g(con)o(texts.)40 b(This)75 1415 y(do)q(cumen)o(t)18
+-b(describ)q(es)h(the)g(capabilities)f(and)i(op)q(eration)g(of)g
+-Fm(Chaco)j(2.0)p Fq(,)d(a)f(soft)o(w)o(are)h(pac)o(k)m(age)75
+-1477 y(designed)i(to)g(partition)g(graphs.)39 b Fm(Chaco)26
+-b(2.0)c Fq(allo)o(ws)g(for)g(recursiv)o(e)e(application)i(of)g(sev)o(eral)75
+-1540 y(metho)q(ds)17 b(for)g(\014nding)h(small)d(edge)i(separators)i(in)e(w)o
+-(eigh)o(ted)f(graphs.)25 b(These)18 b(metho)q(ds)e(include)75
+-1602 y(inertial,)e(sp)q(ectral,)h(Kernighan{Lin)i(and)f(m)o(ultile)o(v)o(el)c
+-(metho)q(ds)j(in)g(addition)h(to)g(sev)o(eral)e(simpler)75
+-1664 y(strategies.)24 b(Eac)o(h)17 b(of)g(these)g(approac)o(hes)h(can)f(b)q
+-(e)g(used)h(to)f(partition)g(the)g(graph)h(in)o(to)f(t)o(w)o(o,)g(four)75
+-1726 y(or)c(eigh)o(t)g(pieces)f(at)h(eac)o(h)g(lev)o(el)e(of)i(recursion.)20
+-b(In)12 b(addition,)i(the)f(Kernighan{Lin)g(metho)q(d)g(can)g(b)q(e)75
+-1789 y(used)i(to)g(impro)o(v)o(e)d(partitions)j(generated)g(b)o(y)g(an)o(y)f
+-(of)h(the)g(other)g(algorithms.)20 b(Brief)13 b(descriptions)75
+-1851 y(of)j(these)e(metho)q(ds)h(are)g(pro)o(vided,)g(along)h(with)f
+-(references)f(to)h(relev)m(an)o(t)f(literature.)20 b Fm(Chaco)e(2.0)75
+-1913 y Fq(can)g(also)h(b)q(e)f(used)h(to)f(address)h(v)m(arious)g(graph)g
+-(sequencing)f(problems,)f(and)h(this)g(capabilit)o(y)f(is)75
+-1975 y(brie\015y)c(describ)q(ed.)19 b(The)14 b(user)f(in)o(terface,)f
+-(input/output)i(formats)f(and)h(appropriate)g(settings)g(for)75
+-2038 y(a)h(v)m(ariet)o(y)e(of)i(co)q(de)g(parameters)e(are)i(discussed)f(in)g
+-(detail,)g(and)h(some)e(suggestions)j(on)f(algorithm)75 2100
+-y(selection)g(are)h(o\013ered.)p 75 2606 150 2 v 118 2637 a
+-Fl(\003)150 2652 y Fk(Departmen)o(t)d(1422;)g(email)e(bah@cs.sandia.go)o(v)o
+-(.)120 2687 y Fl(y)150 2702 y Fk(Departmen)o(t)i(1424;)g(email)e
+-(leland@cs.sandia.go)o(v)o(.)987 2762 y(1)p eop
+-%%Page: 2 2
+-bop 75 43 a Fm(1)45 b(The)19 b(quic)n(k)e(v)n(ersion)1308 b(4)148
+-106 y Fq(1.1)50 b(Ov)o(erview)11 b Fj(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+-(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+-(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)64 b Fq(4)148 168 y(1.2)50 b(Obtaining)17
+-b(the)f(co)q(de)32 b Fj(:)24 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)
+-h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)64
+-b Fq(4)148 230 y(1.3)50 b(Installing)16 b(the)g(co)q(de)47
+-b Fj(:)24 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+-(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)64 b Fq(4)148
+-292 y(1.4)50 b(Some)15 b(more)g(things)i(to)g(w)o(atc)o(h)e(out)i(for)45
+-b Fj(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h
+-(:)f(:)g(:)h(:)64 b Fq(5)148 355 y(1.5)50 b(Impleme)o(n)o(tation)14
+-b(details)28 b Fj(:)c(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+-(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)64 b Fq(6)148
+-417 y(1.6)50 b(P)o(artitioning)32 b Fj(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+-(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h
+-(:)f(:)h(:)f(:)g(:)h(:)64 b Fq(6)148 479 y(1.7)50 b(Input)16
+-b(and)h(output)32 b Fj(:)25 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f
+-(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)64
+-b Fq(7)75 590 y Fm(2)45 b(In)n(tro)r(duction)1435 b(8)75 701
+-y(3)45 b(P)n(artitioning)18 b(algorithms)1141 b(10)148 764
+-y Fq(3.1)50 b(Simple)14 b(partitioning)i(metho)q(ds)26 b Fj(:)e(:)h(:)f(:)h
+-(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+-(:)h(:)39 b Fq(10)148 826 y(3.2)50 b(The)17 b(inertial)e(metho)q(d)d
+-Fj(:)24 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h
+-(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(11)148
+-888 y(3.3)50 b(Sp)q(ectral)16 b(partitioning)38 b Fj(:)25 b(:)f(:)h(:)f(:)g
+-(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+-(:)h(:)f(:)g(:)h(:)39 b Fq(11)148 950 y(3.4)50 b(Cho)q(osing)18
+-b(an)f(eigen)f(solv)o(er)29 b Fj(:)c(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+-(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39
+-b Fq(13)148 1013 y(3.5)50 b(Kernighan{Lin)f Fj(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f
+-(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h
+-(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(15)148 1075 y(3.6)50 b(Multilev)o(el{KL)19
+-b Fj(:)25 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+-(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39
+-b Fq(16)75 1186 y Fm(4)45 b(Additional)18 b(functionalit)n(y)1128
+-b(17)148 1248 y Fq(4.1)50 b(Sp)q(ectral)16 b(sequencing)22
+-b Fj(:)i(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h
+-(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(17)148
+-1310 y(4.2)50 b(T)l(erminal)15 b(propagation)j(to)e(impro)o(v)o(e)e(the)i
+-(mapping)27 b Fj(:)d(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39
+-b Fq(17)148 1373 y(4.3)50 b(P)o(ost{pro)q(cessing)18 b(to)f(impro)o(v)o(e)c
+-(the)j(partition)h(and)f(mapping)46 b Fj(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+-(:)h(:)39 b Fq(18)260 1435 y(4.3.1)56 b(Re\014ning)16 b(the)g(partition)f
+-Fj(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f
+-(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(18)260 1497 y(4.3.2)56 b(Increasing)16
+-b(the)g(n)o(um)o(b)q(er)f(of)h(in)o(ternal)g(v)o(ertices)48
+-b Fj(:)25 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39
+-b Fq(19)260 1560 y(4.3.3)56 b(Impro)o(ving)15 b(the)h(mapping)f(to)i(pro)q
+-(cessors)31 b Fj(:)25 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+-(:)h(:)39 b Fq(19)148 1622 y(4.4)50 b(W)l(orking)17 b(with)f(existing)f
+-(partitions)j Fj(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+-(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(19)75 1733 y Fm(5)45
+-b(Input)19 b(and)g(output)g(formats)1082 b(20)148 1795 y Fq(5.1)50
+-b(F)l(ormat)16 b(of)g(graph)h(input)g(\014les)i Fj(:)24 b(:)g(:)h(:)f(:)h(:)f
+-(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h
+-(:)39 b Fq(20)148 1857 y(5.2)50 b(F)l(ormat)16 b(of)g(co)q(ordinate)h(input)f
+-(\014les)33 b Fj(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+-(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(21)148 1920 y(5.3)50
+-b(F)l(ormat)16 b(of)g(assignmen)o(t)f(input)i(\014les)k Fj(:)j(:)h(:)f(:)h(:)
+-f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39
+-b Fq(21)148 1982 y(5.4)50 b(Op)q(erating)17 b(the)f(co)q(de)31
+-b Fj(:)24 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+-(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(22)148
+-2044 y(5.5)50 b(Output)17 b(formats)30 b Fj(:)24 b(:)h(:)f(:)h(:)f(:)h(:)f(:)
+-g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+-(:)h(:)f(:)g(:)h(:)39 b Fq(22)75 2155 y Fm(6)45 b(User{mo)r(di\014able)16
+-b(parameters)1027 b(24)148 2217 y Fq(6.1)50 b(Input)16 b(and)h(output)g(con)o
+-(trol)f(parameters)37 b Fj(:)25 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+-(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(24)148 2280 y(6.2)50
+-b(Eigen)o(v)o(ector)15 b(calculation)h(parameters)40 b Fj(:)24
+-b(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h
+-(:)39 b Fq(25)148 2342 y(6.3)50 b(Other)16 b(parameters)g(for)g(sp)q(ectral)g
+-(metho)q(ds)34 b Fj(:)24 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)
+-f(:)h(:)f(:)g(:)h(:)39 b Fq(29)148 2404 y(6.4)50 b(Kernighan{Lin)17
+-b(parameters)26 b Fj(:)e(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h
+-(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(31)148
+-2467 y(6.5)50 b(P)o(arameters)15 b(for)i(m)o(ultilev)n(el)12
+-b(algorithms)46 b Fj(:)25 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f
+-(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(32)148 2529 y(6.6)50 b(P)o(arameters)15
+-b(for)i(p)q(ost{pro)q(cessing)h(options)30 b Fj(:)24 b(:)h(:)f(:)h(:)f(:)g(:)
+-h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(33)148
+-2591 y(6.7)50 b(Arc)o(hitecture)14 b(parameters)39 b Fj(:)25
+-b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f
+-(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(34)148 2653 y(6.8)50 b(Miscellaneous)15
+-b(parameters)e Fj(:)25 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+-(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(34)987
+-2762 y Fk(2)p eop
+-%%Page: 3 3
+-bop 148 43 a Fq(6.9)50 b(P)o(arameters)15 b(that)i(con)o(trol)f(debugging)h
+-(output)40 b Fj(:)24 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)
+-g(:)h(:)39 b Fq(35)148 106 y(6.10)26 b(Mo)q(difying)16 b(parameters)g(at)g
+-(run)h(time)h Fj(:)25 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
+-(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(37)75 217 y Fm(7)45
+-b(Calling)18 b(Chaco)i(from)d(other)h(programs)842 b(37)75
+-328 y(8)45 b(Changes)20 b(since)d(V)-5 b(ersion)19 b(1)1124
+-b(40)148 390 y Fq(8.1)50 b(Enhanced)17 b(functionalit)o(y)23
+-b Fj(:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
+-(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(40)148 452 y(8.2)50
+-b(New)16 b(and)h(mo)q(di\014ed)e(parameters)32 b Fj(:)25 b(:)f(:)h(:)f(:)h(:)
+-f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39
+-b Fq(41)148 514 y(8.3)50 b(Changes)18 b(to)e(input)g(and)h(output)g(formats)
+-25 b Fj(:)g(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f
+-(:)g(:)h(:)39 b Fq(42)148 577 y(8.4)50 b(In)o(terfaces)15 b(to)i(other)f(co)q
+-(des)35 b Fj(:)25 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h
+-(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fq(42)987
+-2762 y Fk(3)p eop
+-%%Page: 4 4
+-bop 165 43 a Fm(1.)28 b(The)c(quic)n(k)f(v)n(ersion.)d Fq(If)h(y)o(ou're)f
+-(lik)o(e)f(us,)k(there's)d(no)i(c)o(hance)e(y)o(ou'll)g(read)h(this)g(full)75
+-106 y(do)q(cumen)o(t)d(b)q(efore)h(y)o(ou)f(start)i(using)f
+-Fm(Chaco)947 88 y Fi(1)968 106 y Fq(.)29 b(So)19 b(here)g(are)g(the)f
+-(basics.)30 b(If)18 b(y)o(ou)h(kno)o(w)g(a)g(fair)75 168 y(amoun)o(t)e(ab)q
+-(out)i(graph)g(partitioning)f(and)h(are)f(exp)q(erienced)e(with)i(computers,)
+-f(this)g(should)i(b)q(e)75 230 y(enough)h(to)g(get)g(y)o(ou)f(going.)32
+-b(If)19 b(y)o(ou)h(don't)f(kno)o(w)h(what)g(w)o(e're)f(talking)g(ab)q(out,)i
+-(y)o(ou)f(probably)75 292 y(need)i(to)h(grit)f(y)o(our)g(teeth)g(and)h(read)g
+-(the)f(in)o(tro)q(duction)g(\()p Fh(x)p Fq(2\))h(and)g(the)g(section)f(on)h
+-(metho)q(ds)75 355 y(\()p Fh(x)p Fq(3\))f(b)q(efore)f(y)o(ou)g(go)h(m)o(uc)o
+-(h)d(further.)36 b(Y)l(ou'll)20 b(also)i(ha)o(v)o(e)f(to)g(read)h(the)f
+-(section)g(on)g(input)g(and)75 417 y(output)g(\()p Fh(x)p Fq(5\))g(b)q(efore)
+-f(y)o(ou)g(can)h(progress)g(b)q(ey)o(ond)g(using)g(the)f(sample)f(graphs)i(w)
+-o(e'v)o(e)e(pro)o(vided)75 479 y(and)f(address)f(y)o(our)g(o)o(wn)h
+-(problems.)k(Once)16 b(y)o(ou're)g(orien)o(ted)g(y)o(ou)h(ma)o(y)f(w)o(an)o
+-(t)h(to)g(return)g(to)g(this)75 541 y(section,)e(as)i(it)f(has)h(some)e
+-(useful)h(tips)g(for)h(the)f(sa)o(vvy)f(user.)165 604 y(While)10
+-b Fm(Chaco)j Fq(has)f(b)q(een)f(used)g(in)g(man)o(y)f(di\013eren)o(t)h
+-(settings,)h(it)f(w)o(as)h(dev)o(elop)q(ed)e(in)h(a)h(parallel)75
+-666 y(computing)k(con)o(text,)f(and)j(readers)e(will)g(notice)g(a)h(clear)f
+-(bias)h(to)o(w)o(ards)h(this)e(application)h(in)f(the)75 728
+-y(follo)o(wing)g(do)q(cumen)o(tation.)165 825 y Fm(1.1.)27
+-b(Ov)n(erview.)22 b Fq(Man)o(y)c(problems)f(whic)o(h)g(arise)h(in)g(scien)o
+-(ti\014c)f(computing)g(ha)o(v)o(e)g(a)i(com-)75 887 y(binatorial)h(nature)h
+-(whic)o(h)e(can)i(b)q(e)f(con)o(v)o(enien)o(tly)d(describ)q(ed)j(in)g(the)g
+-(language)h(of)g(graphs.)34 b(In)75 949 y(these)13 b(settings)g(a)h
+-(recurring)f(theme)e(is)i(the)g(need)g(to)h(partition)f(a)h(graph)g(in)o(to)f
+-(subgraphs)i(that)f(are)75 1012 y(in)k(some)e(measure)h(as)h(disjoin)o(t)g
+-(as)g(p)q(ossible.)27 b(This)18 b(is)f(the)h(case)g(in,)f(for)h(example,)e
+-(divide{and{)75 1074 y(conquer)c(algorithms)g(for)g(devising)g(e\016cien)o(t)
+-e(circuit)h(la)o(y)o(outs)h(or)h(constructing)f(nested)h(dissection)75
+-1136 y(orderings)k(for)g(sparse)g(matrix)e(factorizations.)23
+-b(It)16 b(is)h(also)g(a)g(fundamen)o(tal)e(problem)g(in)i(parallel)75
+-1198 y(computing,)12 b(where)g(large)h(data)g(structures)g(m)o(ust)e(b)q(e)i
+-(decomp)q(osed)f(and)h(mapp)q(ed)f(to)h(pro)q(cessors.)165
+-1261 y(Broadly)j(sp)q(eaking,)g Fm(Chaco)h Fq(addresses)g(three)e(classes)i
+-(of)f(problems.)k(First)c(and)g(foremost,)75 1323 y(it)g(partitions)h(graphs)
+-h(using)f(a)g(v)m(ariet)o(y)f(of)h(approac)o(hes)h(with)e(di\013eren)o(t)g
+-(prop)q(erties.)23 b(Discussion)75 1385 y(of)d(these)g(metho)q(ds)f(and)i
+-(the)f(to)q(ols)h(to)f(con)o(trol)g(them)e(comprise)g(the)i(bulk)g(of)g(this)
+-g(do)q(cumen)o(t.)75 1448 y(Second,)13 b Fm(Chaco)g Fq(kno)o(ws)g(ho)o(w)g
+-(to)g(in)o(telligen)o(tly)c(em)o(b)q(ed)i(the)h(partitions)h(it)f(generates)h
+-(in)o(to)f(sev)o(eral)75 1510 y(di\013eren)o(t)23 b(top)q(ologies.)46
+-b(The)24 b(top)q(ologies)i(the)e(co)q(de)g(kno)o(ws)g(ab)q(out)i(are)e(those)
+-h(matc)o(hing)d(the)75 1572 y(common)15 b(arc)o(hitectures)h(of)h(parallel)f
+-(mac)o(hines,)f(namely)g(h)o(yp)q(ercub)q(es)i(and)h(meshes)d(\(see)i
+-Fh(x)p Fq(6.7\).)75 1634 y(Third,)e Fm(Chaco)g Fq(can)g(use)g(sp)q(ectral)f
+-(metho)q(ds)g(to)h(sequence)f(graphs)i(in)e(a)h(manner)f(that)h(preserv)o(es)
+-75 1697 y(lo)q(calit)o(y)l(,)g(as)j(describ)q(ed)e(in)g Fh(x)p
+-Fq(4.1.)23 b(This)17 b(capabilit)o(y)f(has)h(b)q(een)g(used,)f(for)h
+-(example,)e(in)h(data)i(base)75 1759 y(organization,)f(sparse)g(matrix)d(en)o
+-(v)o(elop)q(e)h(reduction)h(and)g(DNA)g(sequencing.)165 1855
+-y Fm(1.2.)27 b(Obtaining)13 b(the)g(co)r(de.)27 b(Chaco)12
+-b Fq(is)g(a)o(v)m(ailable)f(under)g(license)f(from)h(Sandia)h(National)75
+-1918 y(Lab)q(oratories.)29 b(The)18 b(source)h(co)q(de)f(is)g(distributed)f
+-(along)j(with)e(tec)o(hnical)e(do)q(cumen)o(tation)h(and)75
+-1980 y(sample)c(input)h(\014les)g(via)g(the)h(in)o(ternet.)k(If)14
+-b(y)o(ou)g(are)h(in)o(terested)e(in)h(obtaining)h(a)f(cop)o(y)l(,)g(y)o(ou)h
+-(should)75 2042 y(con)o(tact)h(us)h(at)f(the)g(addresses)h(giv)o(en)f(on)g
+-(the)g(co)o(v)o(er)f(page)i(of)g(this)f(rep)q(ort.)165 2139
+-y Fm(1.3.)27 b(Installing)22 b(the)g(co)r(de.)i(Chaco)d Fq(is)e(designed)h
+-(to)g(b)q(e)f(run)h(on)g(UNIX)e(systems.)30 b(T)l(o)75 2201
+-y(unpac)o(k)m(age)17 b(it,)f(sa)o(v)o(e)g(the)g(mailing)f(in)h(a)h(\014le)f
+-Fg(Chaco.shar.)o(Z.U)o(U)e Fq(and)j(remo)o(v)o(e)d(an)o(y)i(mail)f(header)75
+-2263 y(information.)p 75 2319 150 2 v 119 2348 a Ff(1)150 2364
+-y Fe(Chaco)d Fk(is)f(named)f(in)h(honor)g(of)f(Chaco)i(Can)o(y)o(on,)e(the)i
+-(site)g(of)f(extensiv)o(e)h(Anasazi)f(ruins)h(in)f(what)g(is)g(presen)o(tly)
+-75 2413 y(north)o(w)o(estern)16 b(New)g(Mexico.)21 b(Bet)o(w)o(een)16
+-b(1000)e(and)g(1100)g(AD)h(a)f(great)h(so)q(ciet)o(y)m(,)g(considered)h(the)g
+-(most)d(complex)75 2463 y(and)h(sophisticated)g(on)g(the)g(con)o(tinen)o(t)h
+-(north)f(of)f(Mexico,)g(\015ourished)i(there.)987 2762 y(4)p
+-eop
+-%%Page: 5 5
+-bop 165 43 a Fq(Then)16 b(execute)f(the)h(follo)o(wing)g(commands:)75
+-130 y Fg(uudecode)23 b(Chaco.sha)o(r.Z)o(.UU)75 192 y(uncompress)f
+-(Chaco.shar)o(.Z)75 255 y(chmod)i(+x)h(Chaco.sha)o(r)75 317
+-y(sh)g(Chaco.shar)165 441 y Fq(Assuming)16 b(things)h(ha)o(v)o(e)f(gone)i(w)o
+-(ell,)d(y)o(ou)i(ma)o(y)f(no)o(w)h(delete)f(the)h(\014les)f
+-(\\Chaco.shar.Z.UU")75 504 y(and)g(\\Chaco.shar",)g(and)g(follo)o(w)f(the)f
+-Fg(README)f Fq(\014le)i(instructions)g(to)g(compile)e(and)i(run)g(the)g(co)q
+-(de.)165 566 y(W)l(e)h(ha)o(v)o(e)f(tried)g(to)h(mak)o(e)e
+-Fm(Chaco)j Fq(completely)c(p)q(ortable)j(and)g(w)o(e)g(ha)o(v)o(e)f(compiled)
+-e(and)k(run)75 628 y(the)f(co)q(de)h(successfully)e(on)i(mac)o(hines)e(built)
+-g(b)o(y)h(Sun,)h(SGI,)f(HP)l(,)f(IBM,)g(DEC)i(and)g(Cra)o(y)l(.)22
+-b(If)16 b(y)o(ou)75 690 y(are)22 b(using)g(an)g(ANSI)e(standard)j(compiler,)e
+-(then)g Fm(Chaco)i Fq(should)f(compile)d(correctly)l(,)i(and)h(it)75
+-753 y(should)d(do)g(\014ne)f(on)h(man)o(y)e(non{standard)j(compilers)d(as)i
+-(w)o(ell.)26 b(If)18 b(y)o(ou)g(are)h(ha)o(ving)f(di\016culties)75
+-815 y(getting)e(the)h(co)q(de)f(w)o(orking)h(on)f(a)h(new)g(mac)o(hine,)c(w)o
+-(e)j(can)h(suggest)g(sev)o(eral)e(p)q(ossible)i(sources)g(of)75
+-877 y(di\016cult)o(y:)206 939 y Fh(\017)24 b Fm(Chaco)18 b
+-Fq(uses)f(sev)o(eral)g(mac)o(hine)e(and)i(compiler)e(dep)q(enden)o(t)i
+-(parameters)f(that)i(are)f(de-)255 1002 y(\014ned)11 b(within)f(the)h(ANSI)f
+-(standard.)20 b(If)11 b(these)f(v)m(alues)h(aren't)g(de\014ned,)g(then)g
+-Fm(Chaco)h Fq(tries)255 1064 y(to)i(compute)e(them,)g(but)i(this)f(is)g
+-(di\016cult)f(to)i(do)g(in)g(a)f(mac)o(hine)f(indep)q(enden)o(t)g(w)o(a)o(y)l
+-(.)20 b(One)255 1126 y(thing)13 b(the)g(user)g(can)h(do)f(to)h(impro)o(v)o(e)
+-d(robustness)j(with)f(a)g(non{standard)j(compiler)11 b(is)i(to)255
+-1189 y(de\014ne)d(appropriate)i(v)m(alues)f(for)g(three)f(parameters)g(in)g
+-(the)h(\014le)f(\\co)q(de/util/mac)o(hine)p 1848 1189 15 2
+-v 16 w(params.c".)255 1251 y(These)i(parameters)g(are)h Fg(DBL)p
+-800 1251 16 2 v 17 w(EPSILON)d Fq(the)i(mac)o(hine)f(precision,)h
+-Fg(DBL)p 1569 1251 V 17 w(MAX)g Fq(a)h(large)f(dou-)255 1313
+-y(ble)22 b(precision)g(v)m(alue,)h(and)h Fg(RAND)p 906 1313
+-V 17 w(MAX)d Fq(the)i(largest)f(v)m(alue)h(returned)f(b)o(y)g(the)g(system)
+-255 1375 y(random)c(n)o(um)o(b)q(er)e(generator)i(`rand'.)26
+-b(Y)l(ou)18 b(can)h(examine)c(the)j(v)m(alues)g(the)g(co)q(de)g(com-)255
+-1438 y(putes)12 b(for)h(these)f(parameters)f(b)o(y)h(turning)h(on)g(the)f
+-Fg(DEBUG)p 1332 1438 V 16 w(MACH)p 1452 1438 V 17 w(PARAMS)e
+-Fq(\015ag)k(describ)q(ed)255 1500 y(in)i Fh(x)p Fq(6.9.)206
+-1562 y Fh(\017)24 b Fq(The)18 b(timing)e(subroutine)i(in)o(v)o(ok)o(es)e(a)i
+-(system)e(routine)h(called)g(`getrusage')h(whic)o(h)f(isn't)255
+-1624 y(supp)q(orted)h(b)o(y)f(all)g(compilers.)22 b(W)l(e)17
+-b(pro)o(vide)f(a)i(second)f(timing)e(routine)i(whic)o(h)g(is)g(cur-)255
+-1687 y(ren)o(tly)c(commen)o(te)o(d)e(out)k(in)f(the)g(co)q(de.)20
+-b(Y)l(ou)15 b(can)f(replace)f(the)h(\014rst)g(timer)e(routine)i(with)255
+-1749 y(the)j(second)h(if)f(necessary)l(.)25 b(The)17 b(second)h(routine)f
+-(uses)h(a)g(system)e(routine)h(that)h(wraps)255 1811 y(around)c(after)f(ab)q
+-(out)i(36)f(min)o(utes,)d(whic)o(h)i(is)g(wh)o(y)g(w)o(e)g(prefer)f(the)h
+-(\014rst)h(if)e(it)h(is)g(a)o(v)m(ailable.)255 1873 y(Both)j(routines)g(are)h
+-(in)f(the)g(\014le)f(\\co)q(de/util/seconds.c".)206 1936 y
+-Fh(\017)24 b Fq(Compiler)11 b(\015ags)k(v)m(ary)e(greatly)g(from)g(mac)o
+-(hine)e(to)j(mac)o(hine.)k(Y)l(ou)13 b(ma)o(y)f(need)h(to)g(mo)q(dify)255
+-1998 y(the)f(compilation)f(command)g(in)i(\\co)q(de/Mak)o(e\014le")f(to)h
+-(mak)o(e)e Fm(Chaco)i Fq(compile)e(and)i(link)255 2060 y(prop)q(erly)l(.)206
+-2123 y Fh(\017)24 b Fm(Chaco)c Fq(mak)o(es)d(extensiv)o(e)g(use)i(of)g(the)g
+-(random)g(n)o(um)o(b)q(er)e(generator)i(`rand')g(whic)o(h)f(is)255
+-2185 y(de\014ned)h(in)f(ANSI)g(C.)g(If)h(y)o(our)g(compiler)d(do)q(esn't)j
+-(ha)o(v)o(e)f(this)h(routine,)g(y)o(ou'll)e(need)i(to)255 2247
+-y(pro)o(vide)12 b(a)h(random)g(n)o(um)o(b)q(er)e(generator)i(that)g(pro)q
+-(duces)h(in)o(tegers)e(b)q(et)o(w)o(een)g(0)h(and)g Fd(max)p
+-Fq(.)255 2309 y(Y)l(ou)h(should)g(then)g(mo)q(dify)f(\\co)q
+-(de/util/randomize.c")f(to)j(mak)o(e)d(the)h(appropriate)i(new)255
+-2372 y(call,)g(and)i(\\co)q(de/util/mac)o(hine)p 875 2372 15
+-2 v 16 w(params.c")e(to)i(return)f Fd(max)g Fq(in)g(its)g(third)g(argumen)o
+-(t.)165 2468 y Fm(1.4.)27 b(Some)17 b(more)g(things)i(to)f(w)n(atc)n(h)i(out)
+-f(for.)206 2530 y Fh(\017)24 b Fq(The)f(routine)f(\\func3d.c")h(tak)o(es)f(a)
+-h(long)g(time)d(to)j(compile)e(with)h(optimization.)38 b(It)255
+-2593 y(do)q(esn't)17 b(accoun)o(t)g(for)g(a)g(signi\014can)o(t)g(fraction)f
+-(of)h(the)g(execution)e(time,)g(so)i(if,)f(for)h(some)255 2655
+-y(reason,)12 b(y)o(ou)f(are)h(recompiling)c(the)j(co)q(de)h(often,)f(y)o(ou)g
+-(ma)o(y)f(wish)h(to)h(compile)c(this)j(routine)987 2762 y Fk(5)p
+-eop
+-%%Page: 6 6
+-bop 255 43 a Fq(without)17 b(optimization.)206 106 y Fh(\017)24
+-b Fq(Use)18 b(of)i(the)e(Lanczos{based)j(eigensolv)o(ers)d(on)h(v)o(ery)f
+-(large)h(problems)f(ma)o(y)f(cause)i(the)255 168 y(co)q(de)13
+-b(to)f(run)h(out)g(of)g(memory)c(on)k(y)o(our)f(system.)19
+-b(The)12 b(co)q(de)h(will)e(reco)o(v)o(er)g(b)o(y)h(computing)255
+-230 y(the)k(b)q(est)g(appro)o(ximation)g(it)f(can)i(giv)o(en)e(the)h(a)o(v)m
+-(ailable)f(memory)l(,)e(but)j(if)g(this)g(happ)q(ens)255 292
+-y(it)i(ma)o(y)g(b)q(e)h(advisable)f(to)h(switc)o(h)g(to)g(the)f(R)o(QI/Symml)
+-o(q)e(eigensolv)o(er)h(or)j(the)e(inertial)255 355 y(or)f(m)o(ultile)o(v)o(e)
+-o(l{KL)d(partitioning)i(metho)q(ds.)21 b(See)16 b Fh(x)p Fq(3.3,)g
+-Fh(x)p Fq(3.2)h(and)f Fh(x)q Fq(3.6.)206 417 y Fh(\017)24 b
+-Fq(It)e(can)h(b)q(e)g(di\016cult)e(to)i(c)o(ho)q(ose)g(the)g(eigen)o
+-(tolerance)e(for)i(sp)q(ectral)g(metho)q(ds)f(appro-)255 479
+-y(priately)l(.)k(W)l(e'v)o(e)17 b(c)o(hosen)h(a)h(reasonable)g(default,)f
+-(and)h Fm(Chaco)g Fq(tries)f(hard)g(to)h(deliv)o(er)255 541
+-y(the)f(accuracy)g(requested,)f(but)h(can't)g(help)g(m)o(uc)o(h)e(if)h(that)i
+-(request)e(is)h(un)o(wise.)26 b(If)18 b(y)o(ou)255 604 y(c)o(ho)q(ose)h(a)f
+-(v)o(ery)g(tigh)o(t)f(\(small\))g(tolerance,)h(things)g(will)g(slo)o(w)g(do)o
+-(wn)h(considerably)e(and)255 666 y(y)o(ou)g(ma)o(y)f(run)h(in)o(to)g(memory)d
+-(trouble.)24 b(If)17 b(y)o(ou)g(c)o(ho)q(ose)g(a)h(v)o(ery)e(lo)q(ose)i
+-(\(big\))f(tolerance,)255 728 y(y)o(our)e(results)f(will)g(generally)g
+-(degrade)h(and)g(b)q(ecome)f(erratic)g(due)h(to)g(p)q(o)q(or)h(accuracy)f(or)
+-255 791 y(miscon)o(v)o(ergence.)j(See)e Fh(x)p Fq(3.3)g(and)h
+-Fh(x)p Fq(6.2.)206 853 y Fh(\017)24 b Fq(The)18 b(eigensolv)o(ers)f(and)h
+-(the)g(Kernighan{Lin)g(heuristic)f(mak)o(e)f(use)i(of)g(randomization)255
+-915 y(tec)o(hniques,)e(so)j(results)e(generated)h(using)g(these)f(metho)q(ds)
+-h(are)f(strictly)g(repro)q(ducible)255 977 y(only)11 b(if)h(the)f(program)g
+-(is)h(used)g(in)f(a)h(w)o(a)o(y)f(that)h(generates)g(the)f(same)g(sequence)f
+-(of)i(random)255 1040 y(n)o(um)o(b)q(ers.)206 1102 y Fh(\017)24
+-b Fq(If)f(y)o(ou)g(apply)g(terminal)e(propagation)k(with)e(sp)q(ectral)g
+-(partitioning,)i(sev)o(eral)d(tric)o(ky)255 1164 y(precedence)16
+-b(relations)h(b)q(et)o(w)o(een)g(the)g(eigensolv)o(ers)g(and)h(partitioning)g
+-(dimensionalit)o(y)255 1226 y(necessarily)d(come)g(in)o(to)h(pla)o(y)l(.)k
+-(Refer)c(to)g Fh(x)p Fq(4.2.)165 1323 y Fm(1.5.)27 b(Impleme)o(n)n(tation)16
+-b(details.)206 1385 y Fh(\017)24 b Fq(V)l(ersion)e(2.0)h(of)f
+-Fm(Chaco)h Fq(is)g(written)f(en)o(tirely)e(in)i(ANSI)f(standard)j(C)e(and)h
+-(is)g(ab)q(out)255 1448 y(30,000)18 b(lines)d(long.)206 1510
+-y Fh(\017)24 b Fq(In)18 b(order)g(to)h(maximiz)o(e)c(the)j(size)g(of)h
+-(graphs)g(whic)o(h)f(can)g(b)q(e)h(partitioned,)f(memory)d(is)255
+-1572 y(allo)q(cated)20 b(dynamically)d(when)i(needed)g(and)h(released)f(as)i
+-(so)q(on)g(as)f(p)q(ossible)g(without)255 1634 y(seriously)c(degrading)h
+-(e\016ciency)l(.)206 1697 y Fh(\017)24 b Fq(C)d(p)q(erforms)e(\015oating)j(p)
+-q(oin)o(t)e(computations)g(in)h(double)f(precision)g(\(8)h(b)o(yte\))e
+-(format,)255 1759 y(and)d Fm(Chaco)f Fq(stores)h(the)f(results)g(in)f(double)
+-h(precision)g(format)f(\(except)g(in)g(a)i(few)f(cases)255
+-1821 y(where)h(precision)f(is)h(clearly)f(not)i(an)g(issue\).)206
+-1883 y Fh(\017)24 b Fm(Chaco)15 b Fq(can)g(b)q(e)g(run)g(in)f(a)h
+-(stand{alone)h(mo)q(de)e(or)h(called)e(as)j(a)f(subroutine)g(from)e(either)
+-255 1946 y(C)j(or)h(F)l(ortran)g(programs)f(as)h(describ)q(ed)f(in)g
+-Fh(x)p Fq(7.)165 2042 y Fm(1.6.)27 b(P)n(artitioning.)19 b
+-Fq(The)24 b(\014v)o(e)g(classes)g(of)h(partitioning)g(algorithms)e(curren)o
+-(tly)g(imple-)75 2104 y(men)o(ted)11 b(in)i Fm(Chaco)g Fq(are)g(simple)e(\()p
+-Fh(x)p Fq(3.1\),)j(inertial)e(\()p Fh(x)p Fq(3.2\),)h(sp)q(ectral)g(\()p
+-Fh(x)p Fq(3.3\),)h(Kernighan{Lin)g(\(KL\))75 2167 y Fh(x)p
+-Fq(3.5,)h(and)g(m)o(ultilev)n(el)o({KL)e(\()p Fh(x)p Fq(3.6\).)21
+-b(Eac)o(h)14 b(of)h(these)f(algorithms)g(can)h(w)o(ork)f(on)h(graphs)h(with)e
+-(edge)75 2229 y(and/or)22 b(v)o(ertex)c(w)o(eigh)o(ts)i(and)h(eac)o(h)f(can)g
+-(b)q(e)g(used)h(to)f(partition)h(in)o(to)e(t)o(w)o(o,)i(four)g(or)f(eigh)o(t)
+-g(sets)75 2291 y(at)g(eac)o(h)e(stage)i(of)g(a)f(recursiv)o(e)e(decomp)q
+-(osition.)30 b(W)l(e)19 b(consider)f(KL)i(to)f(b)q(e)h(a)f(lo)q(cal)g
+-(re\014nemen)o(t)75 2354 y(tec)o(hnique,)13 b(while)h(the)h(other)g(metho)q
+-(ds)f(are)h(global)g(partitioning)g(metho)q(ds.)21 b Fm(Chaco)15
+-b Fq(allo)o(ws)g(the)75 2416 y(output)21 b(of)g(an)o(y)f(of)h(the)f(global)h
+-(metho)q(ds)f(to)h(b)q(e)f(fed)h(in)o(to)f(a)h(lo)q(cal)f(metho)q(d.)33
+-b(It)20 b(also)h(allo)o(ws)g(a)75 2478 y(partition)f(to)g(b)q(e)g(read)g
+-(from)f(a)i(\014le)e(\()p Fh(x)p Fq(4.4\))h(and)h(re\014ned)e(with)h(a)h(lo)q
+-(cal)e(metho)q(d)h(or)g(one)g(of)g(the)75 2540 y(v)m(arious)d(p)q(ost{pro)q
+-(cessing)h(metho)q(ds)e(describ)q(ed)g(in)g Fh(x)p Fq(4.3.)165
+-2603 y(Y)l(ou)e(can)h(com)o(bine)d(lo)q(cal)i(and)h(global)f(partitioning)g
+-(metho)q(ds)g(b)o(y)g(c)o(ho)q(osing)h(from)e(the)h(men)o(u)75
+-2665 y(in)j(an)g(ob)o(vious)h(w)o(a)o(y)l(.)23 b(W)l(e)17 b(encourage)h(y)o
+-(ou)f(to)g(exp)q(erimen)o(t)e(with)i(the)g(sample)e(graphs)k(pro)o(vided)987
+-2762 y Fk(6)p eop
+-%%Page: 7 7
+-bop 75 43 a Fq(with)16 b(the)g(co)q(de.)165 106 y(In)e(addition)g(to)h(the)f
+-(basic)g(partitioning)g(algorithms,)f Fm(Chaco)i Fq(includes)e(a)i(host)g(of)
+-f(more)f(so-)75 168 y(phisticated)g(capabilities.)20 b(Sev)o(eral)12
+-b(of)j(the)e(metho)q(ds)h(can)g(b)q(e)g(in)o(v)o(ok)o(ed)e(with)i(a)h(tec)o
+-(hnique)d(kno)o(wn)75 230 y(as)17 b Fd(terminal)h(pr)n(op)n(agation)e
+-Fh(x)p Fq(4.2)h(whic)o(h)e(impro)o(v)o(es)f(data)k(lo)q(calit)o(y)d(b)o(y)h
+-(allo)o(wing)g(consideration)h(of)75 292 y(ho)o(w)g(the)g(sets)g(are)g(mapp)q
+-(ed)f(to)h(pro)q(cessors.)25 b(These)16 b(include)g(KL,)h(m)o(ultile)o(v)o
+-(el)o(-KL)e(and)i(sp)q(ectral)75 355 y(\(in)g(bisection)f(mo)q(de)g(only\).)
+-23 b(Another)17 b(w)o(a)o(y)g(to)g(impro)o(v)o(e)d(the)j(mapping)f(to)i(pro)q
+-(cessors)g(is)f(to)g(in-)75 417 y(v)o(ok)o(e)12 b(a)h(p)q(ost{pro)q(cessing)i
+-(algorithm)d(devised)g(sp)q(eci\014cally)g(for)h(this)g(purp)q(ose)h(whic)o
+-(h)e(is)h(discussed)75 479 y(in)k Fh(x)p Fq(4.3.3.)25 b(The)17
+-b(partition)g(itself)f(can)i(also)g(b)q(e)f(impro)o(v)o(ed)e(with)i(a)g(p)q
+-(ost{pro)q(cessing)j(phase)e(that)75 541 y(applies)d(KL)i(to)f(all)f(pairs)h
+-(of)g(sets)g(with)f(edges)h(b)q(et)o(w)o(een)f(them)f(\()p
+-Fh(x)p Fq(4.3.1\).)22 b(And,)15 b(in)g(some)g(parallel)75 604
+-y(computing)f(settings)h(it)g(ma)o(y)f(b)q(e)h(p)q(ossible)g(to)h(o)o(v)o
+-(erlap)e(comm)o(unic)o(ation)f(with)i(the)g(computation)75
+-666 y(asso)q(ciated)20 b(with)f(v)o(ertices)f(that)i(need)e(no)i(external)e
+-(information;)i Fm(Chaco)g Fq(has)g(the)f(abilit)o(y)f(to)75
+-728 y(increase)c(the)g(n)o(um)o(b)q(er)f(of)i(these)f(in)o(ternal)g(v)o
+-(ertices)f(\()p Fh(x)p Fq(4.3.2\).)21 b(In)14 b(addition,)h
+-Fm(Chaco)g Fq(can)g(b)q(e)g(used)75 791 y(to)i(compute)f(and)i(sort)g(the)e
+-(Fiedler)g(v)o(ector)g(of)h(a)h(graph,)g(whic)o(h)e(is)h(useful)g(in)f(man)o
+-(y)g(settings)h(in)75 853 y(whic)o(h)f(data)h(lo)q(calit)o(y)e(is)h
+-(desirable.)165 949 y Fm(1.7.)27 b(Input)c(and)h(output.)d
+-Fq(Input)f(to)h Fm(Chaco)f Fq(consists)h(of)f(one)g(or)g(more)f(\014les)h
+-(and)g(the)75 1012 y(answ)o(ers)15 b(to)g(sev)o(eral)e(in)o(teractiv)o(e)f
+-(queries.)20 b(The)14 b(format)g(of)h(the)f(input)g(\014le)g(describing)g
+-(the)g(graph)75 1074 y(can)19 b(b)q(e)g(found)g(in)f Fh(x)p
+-Fq(5.1,)i(and)f(examples)e(are)h(pro)o(vided)g(with)h(the)f(co)q(de.)29
+-b(If)18 b(y)o(ou)h(select)e(inertial)75 1136 y(partitioning)d(y)o(ou)h(will)e
+-(also)i(need)f(to)h(pro)o(vide)f(a)h(\014le)e(with)i(geometric)d(co)q
+-(ordinates)j(as)h(describ)q(ed)75 1198 y(in)g Fh(x)p Fq(5.2.)165
+-1261 y(Output)g(from)f(the)h(co)q(de)g(includes)f(a)i(v)m(ariet)o(y)e(of)h
+-(metrics)e(of)i(partition)g(qualit)o(y)l(.)k(The)c(detail)75
+-1323 y(with)h(whic)o(h)f(these)h(metrics)e(are)i(rep)q(orted)g(is)g(con)o
+-(trolled)f(b)o(y)h(the)f Fg(OUTPUT)p 1493 1323 16 2 v 17 w(METRICS)e
+-Fq(parameter)75 1385 y(\()p Fh(x)p Fq(6.1\).)29 b(This)19 b(information)e
+-(can)i(b)q(e)g(copied)f(to)h(a)h(\014le)e(b)o(y)g(setting)g(the)h(parameter)e
+-Fg(ECHO)h Fq(\()p Fh(x)p Fq(6.1\))75 1448 y(appropriately)l(.)j(The)16
+-b(partition)g(will)f(b)q(e)i(copied)e(to)i(a)f(\014le)g(if)f(the)h
+-Fg(OUTPUT)p 1471 1448 V 16 w(ASSIGN)e Fq(parameter)h(is)75
+-1510 y(set)h(to)h Fg(TRUE)e Fq(\(nonzero\))h(\()p Fh(x)p Fq(6.1\).)165
+-1572 y(It)f(ma)o(y)f(b)q(e)i(clear)f(b)o(y)g(no)o(w)h(that)g(m)o(uc)o(h)e(of)
+-i(the)f(functionalit)o(y)g(in)g Fm(Chaco)h Fq(is)g(con)o(trolled)e(b)o(y)i(a)
+-75 1634 y(fairly)11 b(large)h(set)g(of)g(parameters.)19 b(W)l(e)12
+-b(ship)g(the)g(co)q(de)g(with)g(default)g(v)m(alues)g(that)g(seem)f
+-(reasonable)75 1697 y(to)19 b(us,)h(but)f(ma)o(y)f(not)h(b)q(e)g(optimal)f
+-(for)h(y)o(our)g(problems.)28 b(Y)l(ou)19 b(can)h(either)e(c)o(hange)h(the)f
+-(default)75 1759 y(v)m(alues)k(in)g(the)f(\014le)g(\\co)q(de/main/user)p
+-827 1759 15 2 v 18 w(params.c")g(and)i(recompile,)d(or)i(y)o(ou)g(can)g(c)o
+-(hange)g(an)o(y)75 1821 y(v)m(alue)16 b(at)h(run)o(time,)c(as)k(describ)q(ed)
+-f(in)g Fh(x)p Fq(6.10.)987 2762 y Fk(7)p eop
+-%%Page: 8 8
+-bop 165 43 a Fm(2.)28 b(In)n(tro)r(duction.)22 b Fq(Man)o(y)17
+-b(problems)g(whic)o(h)g(arise)h(in)g(the)f(course)h(of)h(scien)o(ti\014c)d
+-(comput-)75 106 y(ing)j(ha)o(v)o(e)f(a)h(com)o(binatorial)e(nature)i(whic)o
+-(h)f(can)g(b)q(e)h(con)o(v)o(enien)o(tly)d(describ)q(ed)i(in)h(the)f
+-(language)75 168 y(of)d(graphs.)22 b(In)14 b(these)g(settings)h(a)g
+-(recurring)f(theme)f(is)h(the)h(need)f(to)h(partition)f(a)h(graph)h(in)o(to)e
+-(sub-)75 230 y(graphs)k(that)g(are)f(in)f(some)g(measure)g(as)i(disjoin)o(t)e
+-(as)i(p)q(ossible.)24 b(This)17 b(is)g(the)g(case)g(in,)f(for)h(exam-)75
+-292 y(ple,)d(divide{and{conquer)h(algorithms)f(for)h(devising)f(e\016cien)o
+-(t)f(circuit)g(la)o(y)o(outs)i(or)g(constructing)75 355 y(nested)20
+-b(dissection)g(orderings)g(for)h(sparse)g(matrix)d(factorizations.)33
+-b(It)20 b(is)g(also)h(a)f(fundamen)o(tal)75 417 y(problem)e(in)g(parallel)h
+-(computing,)f(where)h(large)g(data)h(structures)f(m)o(ust)f(b)q(e)h(decomp)q
+-(osed)f(and)75 479 y(mapp)q(ed)e(to)g(pro)q(cessors.)165 541
+-y Fm(Chaco)e Fq(addresses)g(three)f(classes)g(of)g(problems.)19
+-b(First)13 b(and)h(foremost,)f(it)f(partitions)i(graphs)75
+-604 y(using)21 b(a)g(v)m(ariet)o(y)f(of)h(approac)o(hes)g(with)g(di\013eren)o
+-(t)f(prop)q(erties.)34 b(Discussion)21 b(of)g(these)g(metho)q(ds)75
+-666 y(and)d(to)q(ols)g(to)g(con)o(trol)e(them)g(comprise)g(the)g(bulk)h(of)h
+-(this)f(do)q(cumen)o(t.)23 b(Second,)17 b Fm(Chaco)h Fq(kno)o(ws)75
+-728 y(ho)o(w)g(to)g(in)o(telligen)o(tly)c(em)o(b)q(ed)i(the)h(partitions)h
+-(it)f(generates)h(in)o(to)f(sev)o(eral)g(di\013eren)o(t)f(top)q(ologies.)75
+-791 y(The)h(top)q(ologies)g(the)g(co)q(de)f(kno)o(ws)h(ab)q(out)h(are)f
+-(those)g(matc)o(hing)e(the)h(common)f(arc)o(hitectures)g(of)75
+-853 y(parallel)j(mac)o(hines,)g(namely)f(h)o(yp)q(ercub)q(es)i(and)h(meshes)e
+-(\(refer)g(to)i Fh(x)p Fq(6.7\).)30 b(Third,)20 b Fm(Chaco)g
+-Fq(can)75 915 y(use)d(sp)q(ectral)h(metho)q(ds)e(to)i(sequence)e(graphs)j(in)
+-e(a)h(manner)e(that)i(preserv)o(es)e(lo)q(calit)o(y)l(,)g(see)h
+-Fh(x)p Fq(4.1.)75 977 y(This)j(capabilit)o(y)e(has)j(b)q(een)e(used)h(in,)g
+-(for)g(example,)e(data)i(base)g(organization,)h(sparse)g(matrix)75
+-1040 y(en)o(v)o(elop)q(e)15 b(reduction)h(and)g(DNA)g(sequencing.)165
+-1102 y(T)l(o)k(mak)o(e)d(things)i(more)f(sp)q(eci\014c,)g(let's)g(assume)h(w)
+-o(e)f(w)o(an)o(t)h(to)h(solv)o(e)e(a)h(partial)g(di\013eren)o(tial)75
+-1164 y(equation)i(on)h(a)f(distributed)g(memory)d(parallel)i(computer)1225
+-1146 y Fi(2)1243 1164 y Fq(.)36 b(W)l(e're)20 b(giv)o(en)g(a)i(computational)
+-75 1226 y(grid)g(whic)o(h)g(w)o(e)g(need)g(to)h(partition)f(across)h(pro)q
+-(cessors.)41 b(If)22 b(w)o(e're)f(using)i(a)f(\014nite)g(di\013erence)75
+-1289 y(tec)o(hnique)f(and)j(an)f(explicit)e(solv)o(er,)i(then)g(at)g(eac)o(h)
+-g(stage)g(in)g(the)g(calculation)f(a)h(grid)g(v)m(alue)75 1351
+-y(m)o(ust)14 b(b)q(e)i(up)q(dated)g(b)o(y)f(a)h(function)f(of)h(its)g(neigh)o
+-(b)q(or's)f(v)m(alues.)21 b(On)16 b(a)g(serial)f(computer)f(this)h(data)75
+-1413 y(transfer)k(is)g(accomplished)f(b)o(y)g(writing)h(to)h(and)g(reading)f
+-(from)f(memory)l(.)27 b(Ho)o(w)o(ev)o(er,)18 b(when)h(w)o(e)75
+-1475 y(map)i(this)g(computational)g(grid)h(to)g(a)g(parallel)e(computer,)h(t)
+-o(w)o(o)h(v)o(ertices)e(joined)h(b)o(y)g(an)h(edge)75 1538
+-y(and)c(not)g(o)o(wned)g(b)o(y)f(the)g(same)g(pro)q(cessor)h(m)o(ust)e(comm)o
+-(unicate)e(to)k(exc)o(hange)f(v)m(alues.)25 b(If,)17 b(as)h(is)75
+-1600 y(t)o(ypically)12 b(the)h(case,)h(comm)o(unication)d(is)j(exp)q(ensiv)o
+-(e)e(relativ)o(e)g(to)i(computation,)f(a)h(mapping)g(that)75
+-1662 y(minim)o(ize)o(s)d(it)j(is)f(desirable.)20 b(Of)13 b(course,)h(w)o(e)g
+-(could)f(assign)i(the)e(en)o(tire)g(grid)g(to)i(a)f(single)f(pro)q(cessor)75
+-1725 y(and)j(ha)o(v)o(e)f(no)h(comm)o(uni)o(cation)d(at)j(all,)f(but)g(that)h
+-(w)o(ouldn't)f(b)q(e)h(an)g(e\013ectiv)o(e)d(use)j(of)g(the)f(parallel)75
+-1787 y(mac)o(hine)f(since)i(one)g(pro)q(cessor)i(w)o(ould)e(do)h(all)f(the)g
+-(w)o(ork)h(while)e(the)h(others)h(remained)e(idle.)20 b(W)l(e)75
+-1849 y(m)o(ust)h(therefore)h(also)i(observ)o(e)e(the)g(imp)q(ortan)o(t)g
+-(constrain)o(t)h(that)g(eac)o(h)f(pro)q(cessor)i(should)f(b)q(e)75
+-1911 y(assigned)16 b(ab)q(out)h(the)f(same)f(amoun)o(t)f(of)i(w)o(ork)g(and)g
+-(therefore)f(\(in)h(the)f(simplest)f(case\))i(the)f(same)75
+-1974 y(n)o(um)o(b)q(er)c(of)i(v)o(ertices.)18 b(Hence)12 b(w)o(e)g(sa)o(y)h
+-(informally)d(that)j(the)g(ob)s(jectiv)o(e)d(of)j Fm(Chaco)h
+-Fq(in)e(this)h(con)o(text)75 2036 y(is)j(to)h(pro)q(duce)f
+-Fd(b)n(alanc)n(e)n(d)h Fq(sets)f(with)g(lo)o(w)g(comm)o(unication)d(o)o(v)o
+-(erhead.)165 2098 y(Not)f(all)g(problems)f(ha)o(v)o(e)g(suc)o(h)h(a)g(con)o
+-(v)o(enien)o(t)e(corresp)q(ondence)j(b)q(et)o(w)o(een)e(the)h(computational)
+-75 2160 y(grid)j(and)h(the)f(mapping)f(requiremen)o(ts)e(of)k(the)f
+-(application)f(program.)21 b(F)l(or)15 b(instance)g(in)g(a)h(\014nite)75
+-2223 y(elemen)o(t)k(calculation,)j(a)g(more)f(appropriate)h(approac)o(h)h(ma)
+-o(y)d(b)q(e)i(to)g(consider)g(eac)o(h)f(elemen)o(t)75 2285
+-y(as)e(a)h(v)o(ertex)d(with)i(some)e(asso)q(ciated)j(up)q(date)g(w)o(ork.)31
+-b(W)l(e)20 b(w)o(ould)g(then)f(construct)h(connecting)75 2347
+-y(edges)c(corresp)q(onding)h(to)g(eac)o(h)f(face)g(or)g(corner)g(in)g(the)g
+-(discretization)f(mesh)g(since)g(these)h(edges)75 2409 y(corresp)q(ond)e(to)f
+-(the)g(non{zero)g(pattern)g(in)g(the)f(global)i(sti\013ness)f(matrix.)18
+-b(The)13 b(most)f(appropriate)75 2472 y(graph)18 b(will)d(dep)q(end)i(up)q
+-(on)g(the)g(application)f(and)h(its)f(determination)f(is)h(necessarily)g
+-(left)f(to)i(the)75 2534 y(user.)p 75 2590 150 2 v 119 2619
+-a Ff(2)150 2634 y Fk(While)d Fe(Chaco)h Fk(has)g(b)q(een)h(used)f(in)g(man)o
+-(y)e(di\013eren)o(t)i(settings,)h(it)e(w)o(as)h(dev)o(elop)q(ed)g(in)g(a)f
+-(parallel)g(computing)75 2684 y(con)o(text,)g(and)g(readers)h(will)e(notice)h
+-(a)g(clear)g(bias)f(to)o(w)o(ards)h(this)g(application)f(in)g(the)i(follo)o
+-(wing)c(do)q(cumen)o(tation.)987 2762 y(8)p eop
+-%%Page: 9 9
+-bop 165 43 a Fq(F)l(urthermore,)16 b(all)i(v)o(ertices)f(are)h(not)g
+-(necessarily)g(of)g(equal)g(signi\014cance.)26 b(F)l(or)19
+-b(example,)d(a)75 106 y(v)o(ertex)i(enco)q(ding)i(a)g(computation)f(on)i(the)
+-e(b)q(oundary)i(ma)o(y)d(ha)o(v)o(e)h(less)h(w)o(ork)f(asso)q(ciated)i(with)
+-75 168 y(it)g(than)h(a)g(v)o(ertex)e(in)i(the)f(in)o(terior)f(of)i(a)g
+-(domain.)37 b Fm(Chaco)22 b Fq(therefore)f(allo)o(ws)h(w)o(eigh)o(ts)f(to)h
+-(b)q(e)75 230 y(asso)q(ciated)e(with)f(eac)o(h)g(v)o(ertex.)28
+-b(The)19 b(w)o(eigh)o(t)f(is)h(supp)q(osed)i(to)e(corresp)q(ond)h(to)g(the)e
+-(amoun)o(t)h(of)75 292 y(w)o(ork)f(asso)q(ciated)g(with)f(the)h(v)o(ertex.)23
+-b(Similarly)l(,)15 b(edges)i(ma)o(y)f(corresp)q(ond)j(to)f(v)m(arying)g
+-(amoun)o(ts)75 355 y(of)f(comm)o(unication.)j(F)l(or)e(example,)c(t)o(w)o(o)j
+-(\014nite)f(elemen)o(ts)e(touc)o(hing)j(at)h(a)f(corner)g(ma)o(y)e(need)i(to)
+-75 417 y(exc)o(hange)g(less)g(information)f(than)i(t)o(w)o(o)f(sharing)h(a)g
+-(face.)24 b Fm(Chaco)18 b Fq(also)g(allo)o(ws)f(the)g(use)h(of)f(edge)75
+-479 y(w)o(eigh)o(ts.)165 541 y(The)k(problem)e(of)i(in)o(terest)e(can)i(no)o
+-(w)g(b)q(e)g(describ)q(ed)f(more)f(precisely)l(.)33 b(Giv)o(en)20
+-b(a)h(graph)h Fj(G)75 604 y Fq(with)15 b Fj(n)f Fq(w)o(eigh)o(ted)g(v)o
+-(ertices)f(and)i Fj(m)g Fq(w)o(eigh)o(ted)f(edges,)g(divide)g(the)g(v)o
+-(ertices)f(in)o(to)i Fj(p)g Fq(sets)g(in)f(suc)o(h)h(a)75 666
+-y(w)o(a)o(y)h(that)h(the)f(sum)f(of)i(the)f(v)o(ertex)e(w)o(eigh)o(ts)i(in)g
+-(eac)o(h)g(set)g(is)g(as)h(close)f(as)h(p)q(ossible,)f(and)h(the)f(sum)75
+-728 y(of)h(the)g(w)o(eigh)o(ts)g(of)g(edges)g(crossing)h(b)q(et)o(w)o(een)e
+-(sets)h(is)g(minimi)o(zed.)j(Unfortunately)l(,)d(ev)o(en)f(in)g(the)75
+-791 y(simple)d(case)i(where)f Fj(p)g Fq(=)g(2)i(and)f(the)g(edge)g(and)g(v)o
+-(ertex)e(w)o(eigh)o(ts)i(are)g(uniform,)e(this)i(graph)h(parti-)75
+-853 y(tioning)d(problem)f(is)h(NP{complete[7)m(].)20 b(Hence)12
+-b(there)g(is)h(no)h(kno)o(wn)f(e\016cien)o(t)e(algorithm)h(to)i(solv)o(e)75
+-915 y(the)19 b(problem)e(generally)l(,)h(and)i(it)e(seems)g(unlik)o(ely)e
+-(that)k(suc)o(h)f(an)g(algorithm)f(exists.)29 b(W)l(e)18 b(m)o(ust)75
+-977 y(therefore)f(resort)i(to)f(heuristic)f(solutions)i(in)e(whic)o(h)h
+-(balance)g(ma)o(y)e(b)q(e)i(partially)g(compromised)75 1040
+-y(or)f(\(more)e(t)o(ypically\))f(the)i(minim)o(iz)o(ation)e(is)i(appro)o
+-(ximate.)165 1102 y(A)11 b(v)m(ariet)o(y)f(of)i(heuristic)e(partitioning)h
+-(metho)q(ds)g(with)g(di\013eren)o(t)g(cost/qualit)o(y)f(tradeo\013s)j(ha)o(v)
+-o(e)75 1164 y(b)q(een)k(previously)f(studied.)22 b Fm(Chaco)c
+-Fq(includes)d(metho)q(ds)i(based)g(on)g(sev)o(eral)f(of)h(these)g(as)g(w)o
+-(ell)e(as)75 1226 y(sev)o(eral)20 b(substan)o(tially)h(new)g(metho)q(ds.)36
+-b(The)21 b(algorithms)f(in)h Fm(Chaco)h Fq(are)f(based)h(on)g(inertial,)75
+-1289 y(sp)q(ectral,)c(Kernighan{Lin)g(\(KL\),)g(and)g(m)o(ultilev)n(el)d
+-(principles)h(in)h(addition)h(to)h(sev)o(eral)d(simpler)75
+-1351 y(strategies.)32 b(The)19 b(metho)q(ds)g(are)h(categorized)f(as)h
+-(either)f(lo)q(cal)h(\(curren)o(tly)e(just)i(KL\))g(or)g(global)75
+-1413 y(\(ev)o(erything)15 b(else\).)22 b Fm(Chaco)c Fq(allo)o(ws)f(for)g(the)
+-g(com)o(bination)e(of)i(global)g(and)h(lo)q(cal)e(metho)q(ds,)g(and)75
+-1475 y(w)o(e)21 b(ha)o(v)o(e)h(found)g(that)g(this)g(leads)g(to)g
+-(signi\014can)o(t)g(impro)o(v)o(em)o(e)o(n)o(ts)d(in)j(b)q(oth)h(p)q
+-(erformance)d(and)75 1538 y(robustness.)h(Another)14 b(adv)m(an)o(tage)h(of)f
+-Fm(Chaco)p Fq('s)g(design)g(philosoph)o(y)g(is)f(that)i(it)e(o\013ers)h
+-(\015exibilit)o(y)l(.)75 1600 y(This)22 b(is)g(imp)q(ortan)o(t)f(b)q(ecause)h
+-(w)o(e)g(b)q(eliev)o(e)e(that,)j(giv)o(en)e(the)h(complexit)o(y)d(of)j(the)g
+-(partitioning)75 1662 y(problem,)c Fd(no)j(single)h(metho)n(d)d(wil)r(l)j
+-(always)f(work)g(wel)r(l)p Fq(.)32 b Fm(Chaco)20 b Fq(pro)o(vides)f(a)h
+-(fall{bac)o(k)f(option)75 1725 y(when)13 b(y)o(our)g(fa)o(v)o(orite)e(metho)q
+-(d)h(w)o(orks)h(p)q(o)q(orly)h(or)f(has)h(an)f(inappropriate)g(cost/qualit)o
+-(y)f(ratio)i(for)f(a)75 1787 y(giv)o(en)i(problem.)k(It)d(also)g(facilitates)
+-f(in)o(v)o(estigation)f(in)o(to)i(the)f(relativ)o(e)f(strengths)j(and)f(w)o
+-(eakness)75 1849 y(of)h(a)f(wide)g(v)m(ariet)o(y)f(of)i(metho)q(ds.)165
+-1911 y(Ha)o(ving)c(set)h(the)f(basic)h(con)o(text,)f(w)o(e)g(should)h(raise)g
+-(some)e(\014ner)i(but)g(nev)o(ertheless)e(imp)q(ortan)o(t)75
+-1974 y(issues.)32 b(One)20 b(suc)o(h)f(issue)h(is)g(the)f Fd(dimensionality)
+-25 b Fq(of)c(the)e(partitioning)h(sc)o(heme.)30 b(Most)20 b(graph)75
+-2036 y(partitioning)14 b(co)q(des)g(rely)f(on)i(recursiv)o(e)d(bisection.)20
+-b(That)14 b(is,)g(the)g(graph)h(is)f(partitioned)f(in)o(to)h(t)o(w)o(o)75
+-2098 y(pieces,)20 b(eac)o(h)f(of)i(these)f(pieces)f(is)h(partitioned)f(in)o
+-(to)h(t)o(w)o(o)g(more,)g(etc.)f(un)o(til)g(a)h(desired)g(n)o(um)o(b)q(er)75
+-2160 y(of)e(sets)g(is)g(reac)o(hed.)25 b(This)17 b(strategy)i(is)e(simple)f
+-(and)i(con)o(v)o(enien)o(t,)e(but)h(ma)o(y)g(b)q(e)h(somewhat)f(lim-)75
+-2223 y(iting.)31 b(Graphs)20 b(can)g(b)q(e)f(constructed)h(for)g(whic)o(h)e
+-(an)o(y)i(bisection)f(algorithm)f(m)o(ust)g(necessarily)75
+-2285 y(p)q(erform)c(p)q(o)q(orly)l(,)h(and)g(in)f(practice)f(w)o(e)i(observ)o
+-(e)e(that)i(bisection)f(algorithms)g(often)g(c)o(ho)q(ose)h(sepa-)75
+-2347 y(rators)i(whic)o(h)f(lo)q(ok)g(v)o(ery)f(go)q(o)q(d)j(at)f(one)f(stage)
+-h(of)f(recursion)g(but)h(not)f(so)h(go)q(o)q(d)h(with)e(the)g(b)q(ene\014t)75
+-2409 y(of)22 b(hindsigh)o(t.)38 b(All)21 b(the)g(partitioning)h(algorithms)f
+-(impleme)o(n)o(ted)e(in)i Fm(Chaco)i Fq(are)f(capable)g(of)75
+-2472 y(partitioning)e(graphs)h(in)o(to)f(t)o(w)o(o,)g(four)g(or)h(eigh)o(t)e
+-(sets)h(at)g(eac)o(h)g(stage)g(of)g(recursion)1670 2454 y Fi(3)1690
+-2472 y Fq(.)32 b(W)l(e)20 b(ha)o(v)o(e)75 2534 y(accum)o(ulated)11
+-b(some)g(empirical)f(evidence)h(that)j(the)e(quadrisection)g(and)i(o)q
+-(ctasection)f(algorithms)75 2596 y(do)i(p)q(erform)f(b)q(etter)h(in)g(some)f
+-(resp)q(ects)g(than)i(their)e(bisection)g(coun)o(terparts.)21
+-b(But)15 b(w)o(e)f(ha)o(v)o(e)g(also)p 75 2656 150 2 v 119
+-2687 a Ff(3)150 2702 y Fk(Curren)o(tly)g(the)h(sp)q(ectral)g(terminal)d
+-(propagation)h(tec)o(hnique)i(can)f(b)q(e)g(applied)f(in)h(bisection)g(mo)q
+-(de)f(only)m(.)987 2762 y(9)p eop
+-%%Page: 10 10
+-bop 75 43 a Fq(found)17 b(bisection)e(algorithms)h(preferable)f(in)h(some)f
+-(situations.)165 106 y(A)20 b(basic)h(di\016cult)o(y)d(in)i(c)o(ho)q(osing)i
+-(the)e(appropriate)h(partitioning)g(dimensionalit)o(y)c(is)k(that)75
+-168 y(the)e(correct)f(represen)o(tation)g(of)i(costs)f(in)g(the)g(graph)h(mo)
+-q(del)d(is)i(often)g(am)o(biguous.)29 b(Assuming)75 230 y(for)19
+-b(simplicit)n(y)c(that)k(the)f(graph)i(is)e(un)o(w)o(eigh)o(ted,)f(most)h
+-(graph)h(partitioning)g(sc)o(hemes)d(w)o(ork)j(to)75 292 y(suppress)c(the)f
+-(total)h(n)o(um)o(b)q(er)d(of)j(edges)g(crossing)g(b)q(et)o(w)o(een)e(sets)i
+-(without)f(regard)h(to)g(the)f(iden)o(tit)o(y)75 355 y(of)20
+-b(the)f(sets.)30 b(W)l(e)19 b(sa)o(y)h(these)f(metho)q(ds)g(try)g(to)g
+-(minimi)o(ze)d(the)j(total)h(n)o(um)o(b)q(er)e(of)h Fd(cuts)p
+-Fq(.)31 b(But)19 b(in)75 417 y(con)o(texts)14 b(lik)o(e)f(parallel)h
+-(computing)f(and)i(circuit)f(placemen)o(t,)e(the)i(iden)o(tit)o(y)e(of)j(the)
+-g(sets)g(matters.)75 479 y(The)g(partitions)g(ma)o(y)f(need)g(to)i(b)q(e)f
+-(mapp)q(ed)g(to)g(pro)q(cessors)h(or)g(regions)f(of)g(an)h(in)o(tegrated)f
+-(circuit)75 541 y(in)h(a)g(manner)f(that)h(minim)o(ize)o(s)e(the)h(n)o(um)o
+-(b)q(er)f(of)i(connections)g(b)q(et)o(w)o(een)f(arc)o(hitecturally)f(distan)o
+-(t)75 604 y(sets.)21 b(Sev)o(eral)14 b(of)h(the)g(m)o(ultidim)o(ensional)d
+-(sc)o(hemes)h(w)o(e)i(ha)o(v)o(e)f(dev)o(elop)q(ed)g(can)i(tak)o(e)e(in)o(to)
+-h(accoun)o(t)75 666 y(the)g(iden)o(tit)o(y)e(of)i(the)g(sets)g(an)g(edge)g
+-(crosses)g(b)q(et)o(w)o(een)f(and)i(w)o(ork)f(to)g(minimi)o(ze)d(the)i(arc)o
+-(hitectural)75 728 y(distance)i(b)q(et)o(w)o(een)f(these)h(sets.)22
+-b(W)l(e)16 b(sa)o(y)g(they)g(try)f(to)i(minimi)o(ze)c(the)j(total)g(n)o(um)o
+-(b)q(er)f(of)h Fd(hops)p Fq(.)165 791 y(Sadly)l(,)26 b(the)e(question)g(of)g
+-(the)g(correct)g(graph)h(metric)d(is)i(more)f(complicated)f(still.)44
+-b(F)l(or)75 853 y(example,)11 b(in)i(the)g(parallel)f(computing)g(con)o
+-(text,)g(when)h(the)g(comm)o(unicated)d(messages)i(are)h(short)75
+-915 y(enough,)23 b(the)e(total)h(comm)o(uni)o(cation)d(time)g(will)h
+-(correlate)h(b)q(est)g(with)h(message)e Fd(startups)p Fq(.)36
+-b(In)75 977 y(the)23 b(graph)i(metric)c(this)i(measure)f(corresp)q(onds)j(to)
+-f(the)f(n)o(um)o(b)q(er)f(of)i(neigh)o(b)q(oring)g(sets)g(eac)o(h)75
+-1040 y(set)e(has.)40 b(W)l(e)22 b(ha)o(v)o(e)g(also)g(included)g(metho)q(ds)f
+-(designed)h(to)h(deal)f(with)g(this)g(con)o(tingency)g(b)o(y)75
+-1102 y(suppressing)h(the)f(maxim)o(um)c(n)o(um)o(b)q(er)j(of)i(neigh)o(b)q
+-(ors)g(an)o(y)f(set)g(has.)41 b(Another)22 b(graph)i(metric)75
+-1164 y(whic)o(h)13 b(is)h(imp)q(ortan)o(t)f(in)g(some)g(common)f(situations)i
+-(is)g Fd(b)n(oundary)g(vertic)n(es)p Fq(.)22 b(This)14 b(is)f(the)h(n)o(um)o
+-(b)q(er)75 1226 y(of)k(v)o(ertices)e(whic)o(h)g(ha)o(v)o(e)h(an)h(inciden)o
+-(t)e(edge)h(\(they)g(ma)o(y)f(ha)o(v)o(e)h(sev)o(eral\))g(connecting)g(them)f
+-(to)i(a)75 1289 y(v)o(ertex)e(in)h(another)h(set.)24 b(When)17
+-b(these)g(are)h(w)o(eigh)o(ted)e(b)o(y)h(the)g(arc)o(hitectural)f(distance)h
+-(b)q(et)o(w)o(een)75 1351 y(sets)g(w)o(e)f(arriv)o(e)g(at)h(y)o(et)f(another)
+-i(metric,)c Fd(b)n(oundary)j(vertex)i(hops)p Fq(.)k(These)17
+-b(last)g(t)o(w)o(o)f(metrics)f(are)75 1413 y(often)22 b(relev)m(an)o(t)e(in)h
+-(accurate)h(mo)q(deling)e(of)i(the)g(execution)e(time)f(of)j(parallel)f
+-(sparse)h(matrix{)75 1475 y(v)o(ector)15 b(m)o(ultiplication.)165
+-1538 y(Because)h(applications)g(of)h(graph)g(partitioning)g(are)f(so)h(div)o
+-(erse)f(and)h(b)q(ecause)f(ev)o(en)g(for)g(the)75 1600 y(m)o(uc)o(h)i
+-(studied)j(case)f(of)h(parallel)e(computing)h(the)g(appropriate)h(mo)q(del)e
+-(is)i(uncertain,)f Fm(Chaco)75 1662 y Fq(trac)o(ks)c(a)h(v)m(ariet)o(y)f(of)h
+-(p)q(oten)o(tially)e(relev)m(an)o(t)h(metrics)e(and)j(pro)o(vides)f(metho)q
+-(ds)g(designed)h(to)f(min-)75 1725 y(imize)g(them.)27 b(This)19
+-b(do)q(cumen)o(t)e(describ)q(es)i(the)f(capabilities)g(of)h(the)f(co)q(de)h
+-(and)h(ho)o(w)f(to)g(exploit)75 1787 y(them.)g(Because)c(the)g(questions)h
+-(it)f(addresses)h(are)g(fundamen)o(tal)e(and)i(p)q(erv)m(asiv)o(e,)e(w)o(e)h
+-(hop)q(e)i(that)75 1849 y Fm(Chaco)g Fq(will)e(pro)o(v)o(e)h(to)g(b)q(e)h(a)f
+-(v)m(aluable)g(to)q(ol)h(in)f(a)h(wide)f(v)m(ariet)o(y)f(of)h(applications.)
+-165 1946 y Fm(3.)28 b(P)n(artitioning)13 b(algorithms.)22 b
+-Fq(The)11 b(\014v)o(e)g(classes)h(of)g(partitioning)g(algorithms)f(curren)o
+-(tly)75 2008 y(implem)o(en)o(te)o(d)d(in)j Fm(Chaco)g Fq(are)g(simple,)e(sp)q
+-(ectral,)j(inertial,)e(Kernighan{Lin)h(\(KL\))1613 1990 y Fi(4)1644
+-2008 y Fq(and)h(m)o(ultile)o(v)o(el)o({)75 2070 y(KL.)h(Eac)o(h)f(of)h(these)
+-f(algorithms)g(can)h(b)q(e)g(used)f(to)h(partition)g(in)o(to)f(t)o(w)o(o,)h
+-(four)g(or)g(eigh)o(t)f(sets)h(at)g(eac)o(h)75 2132 y(stage)j(of)f(a)g
+-(recursiv)o(e)e(decomp)q(osition.)20 b(W)l(e)15 b(consider)f(KL)h(to)h(b)q(e)
+-f(a)g(lo)q(cal)g(re\014nemen)o(t)d(tec)o(hnique,)75 2195 y(while)20
+-b(the)h(other)g(metho)q(ds)f(are)h(global)g(partitioning)g(metho)q(ds.)34
+-b Fm(Chaco)22 b Fq(allo)o(ws)f(the)f(output)75 2257 y(of)e(an)o(y)h(of)f(the)
+-g(global)h(metho)q(ds)e(to)i(b)q(e)f(fed)g(in)o(to)g(a)g(lo)q(cal)g(metho)q
+-(d.)27 b(It)18 b(also)g(allo)o(ws)g(a)h(partition)75 2319 y(to)j(b)q(e)h
+-(read)f(from)f(a)h(\014le)g(\()p Fh(x)p Fq(4.4\))g(and)h(re\014ned)f(with)g
+-(a)g(lo)q(cal)g(metho)q(d)f(or)i(one)f(of)h(the)e(v)m(arious)75
+-2382 y(p)q(ost-pro)q(cessing)d(metho)q(ds)e(describ)q(ed)g(in)g
+-Fh(x)p Fq(4.3.)165 2478 y Fm(3.1.)27 b(Simple)16 b(partitioning)g(metho)r
+-(ds.)22 b Fq(F)l(or)16 b(completeness)e(and)i(in)f(order)g(to)h(facilitate)75
+-2540 y(comparisons,)23 b Fm(Chaco)h Fq(includes)d(three)h(v)o(ery)f(simple)g
+-(partitioning)h(sc)o(hemes.)38 b(In)23 b(the)f Fd(line)n(ar)p
+-75 2606 150 2 v 119 2635 a Ff(4)150 2650 y Fk(This)14 b(algorithm)d(is)j
+-(often)g(referred)i(to)e(as)g(Fiduccia{Mattheyses)h(\(FM\))g(or)f(KL/FM)g(in)
+-f(recognition)h(of)f(the)75 2700 y(imp)q(ortan)o(t)f(con)o(tributions)i(of)f
+-(those)i(authors.)977 2762 y(10)p eop
+-%%Page: 11 11
+-bop 75 43 a Fq(sc)o(heme,)15 b(v)o(ertices)g(are)j(assigned)g(in)f(order)h
+-(to)f(pro)q(cessors)i(in)e(accord)h(with)f(their)g(n)o(um)o(b)q(ering)e(in)75
+-106 y(the)i(original)f(graph.)24 b(F)l(or)17 b(an)h(un)o(w)o(eigh)o(ted)d
+-(graph)j(with)f Fj(n)g Fq(v)o(ertices)e(b)q(eing)i(divided)e(in)o(to)i
+-Fj(p)g Fq(sets,)75 168 y(the)f(\014rst)h Fj(n=p)g Fq(v)o(ertices)e(w)o(ould)i
+-(b)q(e)f(assigned)h(to)g(set)f(0,)h(the)f(next)g Fj(n=p)i Fq(to)e(set)h(1,)f
+-(etc.)21 b(This)c(often)75 230 y(pro)q(duces)h(surprisingly)f(go)q(o)q(d)i
+-(results)e(b)q(ecause)h(data)g(lo)q(calit)o(y)f(is)g(often)g(implicit)d(in)j
+-(the)h(v)o(ertex)75 292 y(n)o(um)o(b)q(ering.)h(In)13 b(the)h
+-Fd(r)n(andom)i Fq(sc)o(heme,)c(v)o(ertices)g(are)i(assigned)g(randomly)f(to)h
+-(sets)g(in)g(a)g(w)o(a)o(y)g(that)75 355 y(preserv)o(es)i(balance.)23
+-b(In)16 b(the)h Fd(sc)n(atter)n(e)n(d)k Fq(metho)q(d,)16 b(v)o(ertices)f(are)
+-i(handed)g(out)g(in)g(order,)g(with)f(the)75 417 y(next)h(v)o(ertex)f(going)j
+-(to)f(whic)o(hev)o(er)e(set)h(is)h(smallest.)24 b(In)17 b(the)h(un)o(w)o
+-(eigh)o(ted)e(case)i(this)f(reduces)h(to)75 479 y(dealing)12
+-b(out)g(the)g(v)o(ertices)e(in)i(card)g(fashion.)21 b(In)12
+-b(our)g(exp)q(erience)f(the)g(random)h(ordering)g(pro)q(duces)75
+-541 y(partitions)18 b(with)f(qualit)o(y)g(b)q(et)o(w)o(een)f(that)i(of)g(the)
+-g(linear)f(and)h(scattered)f(partitioners.)25 b(The)18 b(run)75
+-604 y(time)c(of)j(these)f(simple)e(sc)o(hemes)g(is)i(negligible.)165
+-700 y Fm(3.2.)27 b(The)22 b(inertial)f(metho)r(d.)f Fq(The)f
+-Fd(inertial)i Fq(metho)q(d)d(is)h(a)h(relativ)o(ely)d(simple)g(and)k(fast)75
+-763 y(partitioner)11 b(that)g(uses)h(geometric)d(information.)18
+-b(In)11 b(addition)h(to)f(a)h(graph,)g(it)f(requires)f(geometric)75
+-825 y(co)q(ordinates)j(for)g(eac)o(h)e(v)o(ertex)g(in)h(one,)h(t)o(w)o(o)f
+-(or)h(three)f(dimensions.)18 b(The)12 b(co)q(de)h(then)f(considers)g(the)75
+-887 y(v)o(ertices)g(as)j(p)q(oin)o(t)f(masses)g(with)g(mass)f(v)m(alues)h
+-(set)g(equal)g(to)g(the)g(v)o(ertex)f(w)o(eigh)o(ts.)20 b(The)14
+-b(principle)75 949 y(axis)f(of)h(this)f(structure,)g(whic)o(h)g(is)g(lik)o
+-(ely)e(to)j(b)q(e)f(a)h(direction)e(in)h(whic)o(h)g(the)g(graph)h(is)f
+-(elongated,)h(is)75 1012 y(computed.)19 b(The)c(v)o(ertices)e(are)h(then)h
+-(divided)e(in)o(to)h(sets)h(of)g(equal)f(mass)g(b)o(y)g(plane\(s\))g
+-(orthogonal)75 1074 y(to)j(the)f(principle)e(axis.)21 b(Descriptions)16
+-b(of)h(this)f(metho)q(d)f(can)i(b)q(e)f(found)h(in)f([24,)g(28)q(].)165
+-1136 y Fm(Chaco)23 b Fq(allo)o(ws)e(inertial)g(partitioning)h(in)o(to)f(t)o
+-(w)o(o,)i(four)f(or)g(eigh)o(t)f(sets)h(at)h(once)e(b)o(y)h(using)75
+-1198 y(one,)f(three)f(or)g(sev)o(en)f(planes,)i(orthogonal)h(to)f(the)f
+-(principle)e(axis.)33 b(P)o(artitions)20 b(generated)h(b)o(y)75
+-1261 y(inertial)h(quadrisection)h(or)h(o)q(ctasection)g(will)f(app)q(ear)h
+-(to)g(b)q(e)g(banded,)i(with)d(parallel)g(planes)75 1323 y(dividing)15
+-b(the)i(sets.)22 b(This)16 b(\\striping")h(will)e(t)o(ypically)g(lead)h(to)h
+-(a)g(fairly)e(large)h(surface-to-v)o(olume)75 1385 y(ratio,)i(implying)e(a)j
+-(large)f(v)o(olume)e(of)i(comm)o(unic)o(ation.)25 b(Ho)o(w)o(ev)o(er,)16
+-b(eac)o(h)h(set)h(only)g(has)h(a)g(small)75 1448 y(n)o(um)o(b)q(er)f(of)i
+-(neigh)o(b)q(oring)h(sets)f(whic)o(h)f(helps)g(reduce)g(the)h(n)o(um)o(b)q
+-(er)e(of)i(message)g(startups)h(eac)o(h)75 1510 y(pro)q(cessor)16
+-b(m)o(ust)e(p)q(erform.)20 b(If)15 b(the)g(cost)h(of)g(initiating)e(messages)
+-h(is)g(imp)q(ortan)o(t,)g(then)g(partitions)75 1572 y(using)22
+-b(inertial)d(quadrisection)i(or)g(o)q(ctasection)h(ma)o(y)d(lead)i(to)h
+-(shorter)f(application)g(execution)75 1634 y(times)15 b(than)i(those)g
+-(generated)g(with)f(inertial)g(bisection.)21 b(F)l(urthermore,)15
+-b(the)h(m)o(ultidim)o(ensional)75 1697 y(inertial)j(metho)q(ds)h(are)g
+-(somewhat)g(faster)h(than)g(inertial)e(bisection)h(since)f(few)o(er)h
+-(inertial)f(axes)75 1759 y(m)o(ust)d(b)q(e)i(computed,)f(and)h(some)f(o)o(v)o
+-(erhead)g(due)h(to)g(recursion)g(is)f(a)o(v)o(oided.)25 b(The)18
+-b(four)g(or)h(eigh)o(t)75 1821 y(sets)c(are)g(assigned)g(in)f(suc)o(h)h(a)g
+-(w)o(a)o(y)f(that)i(comm)o(uni)o(cation)c(is)j(predominan)o(tly)d(b)q(et)o(w)
+-o(een)i(adjacen)o(t)75 1883 y(pro)q(cessors.)165 1946 y(In)19
+-b(our)h(exp)q(erience)d(inertial)h(metho)q(ds)h(are)g(quite)f(fast)i(but)g
+-(giv)o(e)e(partitions)h(of)h(fairly)e(lo)o(w)75 2008 y(qualit)o(y)i(in)g
+-(comparison)h(with)f(sp)q(ectral)h(metho)q(ds.)35 b(In)21 b(particular,)g
+-(the)g(partitions)g(are)g(often)75 2070 y(of)e(p)q(o)q(or)i(qualit)o(y)d(in)h
+-(lo)q(cal)g(detail.)29 b(Ho)o(w)o(ev)o(er,)17 b(when)j(coupled)e(with)h(the)g
+-(Kernighan{Lin)h(lo)q(cal)75 2132 y(optimization)f(metho)q(d)i(describ)q(ed)f
+-(b)q(elo)o(w,)i(the)f(results)g(signi\014can)o(tly)f(impro)o(v)o(e.)33
+-b(Our)21 b(exp)q(eri-)75 2195 y(men)o(ts)c(indicate)g(that)i(inertial{KL)f
+-(usually)g(pro)q(duces)g(b)q(etter)g(partitions)h(than)g(pure)f(sp)q(ectral)
+-75 2257 y(partitioning,)i(whereas)g(sp)q(ectral)g(coupled)g(with)f(KL)h(do)q
+-(es)h(b)q(etter)f(than)g(inertial)f(paired)g(with)75 2319 y(KL.)i(F)l(or)h(v)
+-o(ery)e(large)h(problems)f(in)h(whic)o(h)g(co)q(ordinates)h(are)f(a)o(v)m
+-(ailable)g(and)h(the)f(emphasis)f(is)75 2382 y(more)15 b(on)i(lo)o(w)f
+-(partitioning)g(time)e(rather)i(than)h(high)f(partitioning)h(qualit)o(y)l(,)d
+-(w)o(e)i(are)g(inclined)f(to)75 2444 y(recommend)e(the)j(inertial{KL)g(metho)
+-q(d)f([18)q(].)165 2540 y Fm(3.3.)27 b(Sp)r(ectral)18 b(partitioning.)23
+-b Fq(Sp)q(ectral)16 b(metho)q(ds)f(use)i(eigen)o(v)o(ectors)e(of)h(a)h
+-(matrix)e(con-)75 2603 y(structed)g(from)f(the)h(graph)h(to)g(decide)e(ho)o
+-(w)i(to)f(partition)g(the)g(graph.)22 b(A)15 b(full)f(accoun)o(ting)i(of)f
+-(this)75 2665 y(surprising)22 b(connection)g(b)q(et)o(w)o(een)f(eigen)o(v)o
+-(ectors)g(and)i(partitions)f(is)g(to)q(o)h(in)o(v)o(olv)o(ed)d(to)j(presen)o
+-(t)977 2762 y Fk(11)p eop
+-%%Page: 12 12
+-bop 75 43 a Fq(here,)15 b(but)i(the)f(articles)f(men)o(tioned)f(b)q(elo)o(w)i
+-(explain)g(the)g(metho)q(d)f(in)h(detail.)165 106 y(The)g(simplest)e(sp)q
+-(ectral)h(metho)q(d)g(in)h Fm(Chaco)g Fq(is)g(a)g(w)o(eigh)o(ted)f(v)o
+-(ersion)g(of)h Fd(sp)n(e)n(ctr)n(al)g(bise)n(ction)p Fq(.)75
+-168 y(A)f(description)f(of)i(the)f(un)o(w)o(eigh)o(ted)f(algorithm)g(is)h
+-(giv)o(en)g(in)f([22)q(,)h(24],)g(and)h(the)f(extension)f(to)i(use)75
+-230 y(b)q(oth)i(edge)e(and)h(v)o(ertex)e(w)o(eigh)o(ts)h(is)h(describ)q(ed)f
+-(in)g([12].)22 b(This)17 b(metho)q(d)f(uses)h(the)f(second)h(lo)o(w)o(est)75
+-292 y(eigen)o(v)o(ector)g(of)i(the)g Fd(L)n(aplacian)g Fq(matrix)e(of)j(the)e
+-(graph)i(to)g(divide)d(the)i(graph)h(in)o(to)f(t)o(w)o(o)g(pieces.)75
+-355 y(This)c(eigen)o(v)o(ector)e(is)h(kno)o(wn)h(as)g(the)g
+-Fd(Fie)n(d)r(ler)g Fq(v)o(ector)f(in)g(recognition)g(of)h(the)g(pioneering)f
+-(w)o(ork)h(of)75 417 y(Mirosla)o(v)g(Fiedler)g([5,)h(6].)165
+-479 y(The)g Fd(sp)n(e)n(ctr)n(al)g(quadrise)n(ction)h Fq(algorithm)e(divides)
+-g(a)h(graph)h(in)o(to)e(four)i(pieces)e(at)h(once)g(using)75
+-541 y(the)k(second)h(and)g(third)f(lo)o(w)o(est)f(eigen)o(v)o(ectors)g(of)i
+-(the)f(Laplacian)h(matrix.)32 b(Similarly)l(,)18 b Fd(sp)n(e)n(ctr)n(al)75
+-604 y(o)n(ctase)n(ction)i Fq(uses)g(the)f(second,)h(third)f(and)h(fourth)g
+-(eigen)o(v)o(ectors)e(to)i(divide)e(in)o(to)h(eigh)o(t)g(pieces.)75
+-666 y(These)d Fd(multidimensional)i Fq(sp)q(ectral)e(metho)q(ds)g(w)o(ere)f
+-(in)o(tro)q(duced)h(in)g([11,)g(12)q(],)f(where)h(they)g(w)o(ere)75
+-728 y(sho)o(wn)h(to)g(ha)o(v)o(e)e(certain)h(adv)m(an)o(tages)h(o)o(v)o(er)e
+-(sp)q(ectral)i(bisection.)165 791 y(In)h(particular,)g(sp)q(ectral)h
+-(quadrisection)e(and)i(o)q(ctasection)g(try)f(to)h(minimi)o(ze)c(comm)o(unic)
+-o(a-)75 853 y(tion)h(cost)g(in)f(a)h(more)f(complex)e(metric.)19
+-b(Supp)q(ose)e(the)e(partitioned)h(sets)f(are)h(n)o(um)o(b)q(ered)e(from)h(0)
+-75 915 y(to)e(3)h(for)f(quadrisection)g(or)g(0)h(to)f(7)g(for)h(o)q
+-(ctasection.)20 b(Sp)q(ectral)13 b(bisection)f(w)o(ould)h(try)g(to)h(minim)o
+-(iz)o(e)75 977 y(the)i(total)g(w)o(eigh)o(t)f(of)h(edges)g(crossing)h(b)q(et)
+-o(w)o(een)e(di\013eren)o(t)g(sets,)g(whereas)i(the)e(m)o(ultidim)o(ensional)
+-75 1040 y(metho)q(ds)d(w)o(ould)h(use)f(a)h(metric)d(in)i(whic)o(h)g(the)g
+-(cost)h(of)g(an)g(edge)f(crossing)h(b)q(et)o(w)o(een)f(t)o(w)o(o)g(sets)h(is)
+-f(the)75 1102 y(edge)f(w)o(eigh)o(t)g(m)o(ultiplied)d(b)o(y)k(the)f(n)o(um)o
+-(b)q(er)f(of)i(bits)f(that)h(are)g(di\013eren)o(t)f(in)g(a)h(binary)g
+-(represen)o(tation)75 1164 y(of)17 b(the)f(t)o(w)o(o)g(sets.)165
+-1226 y(Although)21 b(this)f Fd(hops)g Fq(metric)e(ma)o(y)h(seem)f(o)q(dd)k
+-(at)e(\014rst,)i(it)e(has)h(a)g(nice)e(in)o(terpretation)g(in)75
+-1289 y(the)e(con)o(text)f(of)h(parallel)f(computing.)21 b(In)c(a)g(parallel)f
+-(computer)f(consisting)i(of)h(four)f(pro)q(cessors)75 1351
+-y(connected)d(in)f(a)i(square)f(and)h(n)o(um)o(b)q(ered)d(in)i(t)o(yp)q
+-(ographic)h(order,)f(a)h(message)e(tra)o(v)o(eling)g(b)q(et)o(w)o(een)75
+-1413 y(pro)q(cessors)20 b(0)e(and)h(3)g(m)o(ust)e(tra)o(v)o(el)g(o)o(v)o(er)g
+-(t)o(w)o(o)h(wires,)h(whereas)f(one)h(b)q(et)o(w)o(een)e(pro)q(cessors)j(0)e
+-(and)75 1475 y(1)25 b(need)e(only)h(tra)o(v)o(erse)f(a)i(single)e(wire.)44
+-b(This)25 b(n)o(um)o(b)q(er)d(of)i(wires)g(is)g(exactly)f(the)h(w)o(eigh)o
+-(ting)75 1538 y(implicit)14 b(in)j(sp)q(ectral)g(quadrisection.)24
+-b(Similarly)l(,)14 b(sp)q(ectral)j(o)q(ctasection)h(coun)o(ts)f(wires)g(used)
+-h(on)75 1600 y(a)f(three-dimensional)f(mesh)f(arc)o(hitectures,)h(and)h(b)q
+-(oth)h(quadrisection)f(and)h(o)q(ctasection)f(apply)75 1662
+-y(to)g(h)o(yp)q(ercub)q(es.)165 1725 y(One)i(migh)o(t)e(supp)q(ose)k(that)e
+-(this)g(corresp)q(ondence)h(b)q(et)o(w)o(een)e(cost)i(metric)c(and)k(wires)f
+-(used)75 1787 y(w)o(as)h(irrelev)m(an)o(t)e(giv)o(en)g(the)i(adv)o(en)o(t)e
+-(of)i(cut{through)h(routing)f(in)f(whic)o(h)f(the)h(dela)o(y)g(asso)q(ciated)
+-75 1849 y(with)f(a)h(message)f(is)g(nearly)g(indep)q(enden)o(t)g(of)h(the)f
+-(n)o(um)o(b)q(er)f(of)i(links)e(it)h(tra)o(v)o(erses.)27 b(In)19
+-b(fact)f(this)75 1911 y(indep)q(endence)d(only)h(holds)g(for)h(isolated)f
+-(messages)f(in)h(whic)o(h)f(there)h(is)g(no)g(comp)q(etition)f(for)h(the)75
+-1974 y(links)d(in)g(the)g(comm)o(unication)e(net)o(w)o(ork.)19
+-b(In)14 b(a)g(great)g(man)o(y)e(computations,)h(and)h(most)f(scien)o(ti\014c)
+-75 2036 y(applications,)24 b(comm)o(uni)o(cation)c(o)q(ccurs)j(in)f(the)h
+-(form)e(of)i(bursts)g(of)g(messages)f(during)h(whic)o(h)75
+-2098 y(there)16 b(is)h(v)o(ery)e(signi\014can)o(t)h(comp)q(etition)f(for)i
+-(the)g(net)o(w)o(ork.)22 b(Hence,)15 b(when)h(net)o(w)o(ork)h(congestion)75
+-2160 y(is)g(imp)q(ortan)o(t,)e(w)o(eigh)o(ting)h(messages)g(b)o(y)h(the)f(n)o
+-(um)o(b)q(er)f(of)i(wires)g(they)f(consume)g(should)h(lead)g(to)75
+-2223 y(b)q(etter)d(problem)f(mappings.)21 b(Empirical)12 b(evidence)h(supp)q
+-(orting)j(this)e(and)i(further)e(discussion)h(of)75 2285 y(the)h(issue)g(can)
+-g(b)q(e)h(found)g(in)f([9].)165 2347 y(The)k(computational)e(k)o(ernel)g(of)i
+-(sp)q(ectral)g(metho)q(ds)f(is)g(the)h(calculation)e(of)i(a)g(small)e(n)o
+-(um-)75 2409 y(b)q(er)24 b(of)f(eigen)o(v)o(ectors.)41 b(W)l(e)24
+-b(ha)o(v)o(e)e(implem)o(en)o(te)o(d)f(a)j(v)m(ariet)o(y)e(of)i(eigen)f(solv)o
+-(ers)g(with)g(di\013eren)o(t)75 2472 y(sp)q(eed/robustness)g(tradeo\013s.)37
+-b(Roughly)21 b(in)g(order)g(of)g(increasing)g(sp)q(eed,)h(these)f(are)g
+-(Lanczos)75 2534 y(with)d(full)f(orthogonalization,)i(Lanczos)f(with)g
+-(selectiv)o(e)d(orthogonalization,)k(and)g(a)f(m)o(ultile)o(v)o(e)o(l)75
+-2596 y(metho)q(d)g(com)o(bining)f(Ra)o(yleigh)g(Quotien)o(t)h(Iteration)g
+-([8])g(and)i(the)e(linear)g(solv)o(er)g(Symml)o(q)e([19].)75
+-2659 y(W)l(e)g(ha)o(v)o(e)f(also)h(implem)o(en)o(te)o(d)d(a)k(sp)q(ecialized)
+-d(v)o(ersion)h(of)i(Lanczos)g(capable)e(of)i(solving)e Fd(extende)n(d)977
+-2762 y Fk(12)p eop
+-%%Page: 13 13
+-bop 75 43 a Fq(eigen)14 b(problems)g(of)h(the)g(form)e Fj(Au)h
+-Fq(=)f Fj(\025u)8 b Fq(+)g Fj(g)18 b Fq(whic)o(h)c(arise)h(when)g(terminal)e
+-(propagation)j(is)f(used)75 106 y(\()p Fh(x)p Fq(4.2\).)21
+-b(Sev)o(eral)14 b(of)h(the)g(issues)g(go)o(v)o(erning)g(the)g(c)o(hoice)f(b)q
+-(et)o(w)o(een)g(these)h(metho)q(ds)f(are)h(dealt)g(with)75
+-168 y(in)20 b(the)f(next)h(section.)32 b(Section)20 b(3.4)g(can)g(b)q(e)g
+-(skipp)q(ed)g(b)o(y)g(the)f(t)o(ypical)g(user,)i(who)f(will)f(simply)75
+-230 y(encoun)o(ter)14 b(a)h(c)o(hoice)f(b)q(et)o(w)o(een)f(the)i(default)f
+-(Lanczos)i(pro)q(cedure)f(\(selectiv)o(e)d(orthogonalization\))75
+-292 y(whic)o(h)20 b(is)g(designed)h(for)g(small)e(and)i(medium)d(sized)i
+-(graphs)h(and)h(the)e(R)o(QI/Symml)o(q)e(metho)q(d)75 355 y(whic)o(h)e(is)g
+-(designed)g(for)g(larger)g(graphs)i(\(of)e(sa)o(y)h(more)e(than)h(sev)o(eral)
+-g(thousand)h(v)o(ertices\).)165 417 y(Sp)q(ectral)j(metho)q(ds)g(are)h
+-(usually)f(quite)g(go)q(o)q(d)i(at)f(\014nding)g(the)f(righ)o(t)g(general)g
+-(area)h(of)g(the)75 479 y(graph)16 b(in)e(whic)o(h)g(to)h(cut.)21
+-b(Ho)o(w)o(ev)o(er,)13 b(they)h(often)h(do)g(p)q(o)q(orly)h(in)e(the)h
+-(\014ne)f(details.)20 b(Consequen)o(tly)l(,)75 541 y(w)o(e)12
+-b(ha)o(v)o(e)g(found)h(that)g(it)g(is)f(adv)m(an)o(tageous)i(to)f(apply)g(a)g
+-(lo)q(cal)g(re\014nemen)o(t)d(to)j(the)f(sp)q(ectral)h(output.)75
+-604 y(The)19 b(pro)q(cedure)g(w)o(e)g(use)g(is)g(a)h(generalized)e(v)o
+-(ersion)g(of)i(an)f(algorithm)f(due)i(to)f(Kernighan)g(and)75
+-666 y(Lin,)f(and)h(is)f(describ)q(ed)g(in)g Fh(x)p Fq(3.5)h(and)g(in)e(more)g
+-(detail)h(in)g([13].)27 b(The)18 b(actual)g(impro)o(v)o(em)o(en)o(t)d(due)75
+-728 y(to)h(this)g(clean{up)f(phase)h(is)g(problem)e(dep)q(enden)o(t,)h(but)h
+-(is)f(t)o(ypically)f(10{30\045.)22 b(The)16 b(cost)g(of)g(this)75
+-791 y(clean{up)h(is)g(generally)f(a)i(small)d(fraction)i(of)h(the)f(total)g
+-(partitioning)g(cost,)h(t)o(ypically)d(less)h(than)75 853 y(10\045)h(on)f
+-(large)h(graphs.)165 949 y Fm(3.4.)27 b(Cho)r(osing)e(an)g(eigen)f(solv)n
+-(er.)c Fq(This)h(section,)h(whic)o(h)f(ma)o(y)f(b)q(e)h(skipp)q(ed)h(without)
+-75 1012 y(loss)h(of)h(con)o(tin)o(uit)o(y)l(,)e(describ)q(es)h(the)f(c)o
+-(haracteristics)g(of)h(the)g(eigen)g(solv)o(ers)f(in)h Fm(Chaco)p
+-Fq(.)42 b(The)75 1074 y(input)19 b(men)o(u)f(will)h(indicate)f(a)i(c)o(hoice)
+-e(b)q(et)o(w)o(een)h(t)o(w)o(o)h(metho)q(ds)f(only)l(,)g(a)h(Lanczos)h(based)
+-f(solv)o(er)75 1136 y(and)d(the)g(m)o(ultile)o(v)o(e)o(l)c(R)o(QI/Symmlq)g
+-(solv)o(er.)21 b(W)l(e)c(recomme)o(nd)d(the)i(Lanczos)i(metho)q(d)e(for)h
+-(small)75 1198 y(and)h(medium)d(size)h(problems)h(and)h(the)f(R)o(QI/Symml)o
+-(q)e(solv)o(er)i(for)h(larger)f(problems.)24 b(\(W)l(e)18 b(sa)o(y)l(,)75
+-1261 y(rather)j(arbitrarily)l(,)f(that)i(larger)e(graphs)i(are)f(those)g(of)h
+-(order)e(10,000)j(v)o(ertices)c(or)i(more;)g(y)o(ou)75 1323
+-y(should)15 b(in)o(v)o(estigate)d(this)i(for)h(y)o(ourself)e(if)h(run)g(time)
+-e(is)i(v)o(ery)f(critical.\))19 b(There)14 b(ma)o(y)e(b)q(e)i(o)q(ccasions,)
+-75 1385 y(ho)o(w)o(ev)o(er,)e(when)i(the)f(sophisticated)g(user)h(will)e(w)o
+-(an)o(t)i(to)f(c)o(hange)h(the)f(t)o(yp)q(e)g(of)h(Lanczos)g(algorithm)75
+-1448 y(b)o(y)f(mo)q(difying)g(the)h Fg(LANCZOS)p 634 1448 16
+-2 v 16 w(TYPE)e Fq(\015ag)j(or)f(ma)o(y)f(wish)h(to)g(alter)g(one)g(of)g(the)
+-g(eigen)f(solv)o(er)g(con)o(trol)75 1510 y(parameters.)20 b(See)c
+-Fh(x)p Fq(6)h(for)f(details)g(on)h(ho)o(w)f(to)h(mak)o(e)d(these)i(c)o
+-(hanges.)165 1572 y(Finally)l(,)24 b(while)f(w)o(e)h(do)g(express)g(some)f
+-(clear)g(opinions)i(in)f(what)g(follo)o(ws,)i(it)d(should)i(b)q(e)75
+-1634 y(carefully)c(noted)i(that)g(our)h(conclusions)e(ab)q(out)i(the)f
+-(relativ)o(e)e(merits)f(of)j(the)g(di\013eren)o(t)f(eigen)75
+-1697 y(solv)o(ers)16 b(are)h(based)g(on)g(limited)d(testing)j(with)g(the)f
+-(particular)g(class)h(of)g(matrices)e(arising)i(in)g(our)75
+-1759 y(applications,)i(and)g(ma)o(y)e(not)j(b)q(e)f(applicable)e(to)j(an)o(y)
+-e(other)h(domain.)28 b Fd(These)20 b(ar)n(e)f(al)r(l)j(iter)n(ative)75
+-1821 y(metho)n(ds!)165 1883 y Fq(In)f(our)h(exp)q(erience,)e(full)h
+-(orthogonalization)h(Lanczos)g(is)f(the)h(most)e(robust)i(metho)q(d)f(for)75
+-1946 y(problems)f(of)i(order)g(up)g(to)g(a)g(few)g(h)o(undred.)37
+-b(The)22 b(requiremen)o(t)d(of)j(sa)o(ving)f(all)h(the)f(Lanczos)75
+-2008 y(v)o(ectors)16 b(for)h(orthogonalization)h(is)e(not)h(that)g
+-(burdensome)f(since)g(the)g(problems)g(are)g(small)f(and)75
+-2070 y(w)o(e)h(use)g(them)f(an)o(yw)o(a)o(y)h(in)g(assem)o(bling)e(the)j
+-(eigen)o(v)o(ectors.)i(The)e(w)o(eak)f(p)q(oin)o(t)g(of)h(this)f(metho)q(d)f
+-(is)75 2132 y(that)i(for)f(larger)g(problems)f(the)h(orthogonalization)i(w)o
+-(ork)e(b)q(ecomes)f(prohibitiv)o(ely)f(exp)q(ensiv)o(e.)165
+-2195 y(The)22 b(in)o(v)o(erse)e(op)q(erator)j(full)e(orthogonalization)i
+-(Lanczos)g(metho)q(d)e(replaces)g(the)h(matrix)75 2257 y(v)o(ector)f(m)o
+-(ultiply)d(in)j(the)g(basic)g(Lanczos)i(iteration)e(with)g(a)h(linear)f(solv)
+-o(e)f(using)i(Symmlq.)33 b(It)75 2319 y(is)21 b(generally)f(less)g(accurate)h
+-(and)h(robust)g(than)f(direct)f(Lanczos)i(with)f(full)f(orthogonalization)75
+-2382 y(and)c(is)f(often)g(slo)o(w)o(er)g(as)h(w)o(ell)e(b)q(ecause)i(the)f
+-(total)h(n)o(um)o(b)q(er)d(of)j(matrix)d(v)o(ector)i(m)o(ultipli)o(es)e
+-(\(whic)o(h)75 2444 y(are)18 b(hidden)g(within)g(Symml)o(q\))d(ma)o(y)i(b)q
+-(e)h(signi\014can)o(tly)f(higher.)27 b(In)17 b(addition)i(it)e(in)o(tro)q
+-(duces)h(the)75 2506 y(tric)o(ky)c(problem)g(of)h(ho)o(w)h(to)g(tune)f(the)g
+-(inner/outer)h(lo)q(op)g(com)o(bination.)j(Th)o(us)d(the)f(only)g(reason)75
+-2568 y(to)k(recomme)o(nd)d(this)i(metho)q(d)g(is)g(that)h(it)f(requires)f(m)o
+-(uc)o(h)g(less)h(memory)d(since)j(it)g(con)o(v)o(erges)f(in)75
+-2631 y(man)o(y)e(few)o(er)g(Lanczos)i(iterations.)165 2693
+-y(Our)d(implem)o(e)o(n)o(tation)d(of)j(selectiv)o(e)d(orthogonalization)j(is)
+-g(based)g(on)g(the)f(original)g(pap)q(er)i(b)o(y)977 2762 y
+-Fk(13)p eop
+-%%Page: 14 14
+-bop 75 43 a Fq(P)o(arlett)15 b(and)h(Scott)f([20],)g(with)g(the)g(main)f
+-(di\013erences)g(b)q(eing)i(that)g(the)f(Ritz)f(sp)q(ectrum)g(is)h(moni-)75
+-106 y(tored)e(directly)f(to)i(assess)g(the)f(need)g(for)h(orthogonalization)h
+-(and)f(that)f(this)h(orthogonalization)g(is)75 168 y(p)q(erformed)e(against)j
+-(the)e(left)g(end)h(of)f(the)h(sp)q(ectrum)e(only)l(.)20 b(V)l(arious)14
+-b(heuristics)f(go)o(v)o(erning)g(whic)o(h)75 230 y(Ritz)f(pairs)h(to)g
+-(monitor)f(are)g(used)h(to)g(k)o(eep)f(this)h(o)o(v)o(erhead)f(small.)18
+-b(The)13 b(Ritz)f(pairs)h(are)f(computed)75 292 y(using)20
+-b(the)g(classic)f(bisection)g(algorithm)g(on)i(the)e(Sturm)g(sequence)g([27])
+-h(or)g(the)f(standard)j(QL)75 355 y(algorithm)d(for)h(tridiagonal)g(matrices)
+-e([8,)h(23)q(],)h(whic)o(hev)o(er)e(is)h(exp)q(ected)g(to)h(b)q(e)g(c)o(heap)
+-q(er)f(based)75 417 y(on)d(a)f(simple)e(complexit)o(y)f(mo)q(del.)20
+-b(There)14 b(are)h(rare)h(circumstances)d(under)i(whic)o(h)f(eac)o(h)h(of)g
+-(these)75 479 y(algorithms)g(can)h(fail,)f(so)i(the)e(co)q(de)h(monitors)g
+-(for)g(these)f(and)i(switc)o(hes)e(to)h(the)g(other)g(algorithm)75
+-541 y(if)g(a)h(problem)e(is)h(detected.)21 b(Orthogonalizing)c(at)f(the)h
+-(left)e(end)h(only)h(generally)e(pro)q(duces)i(more)75 604
+-y(accurate)g(eigen)f(pairs)g(in)h(substan)o(tially)f(less)g(time)f(than)i
+-(the)f(standard)i(tec)o(hnique)d(of)i(orthogo-)75 666 y(nalizing)f(against)i
+-(b)q(oth)g(ends)f(of)g(the)f(sp)q(ectrum.)22 b(With)16 b(prop)q(er)i(tuning)f
+-(this)f(algorithm)g(seems,)75 728 y(for)g(our)h(purp)q(oses,)g(essen)o
+-(tially)e(as)h(accurate)g(as)h(full)e(orthogonalization)j(and)f(is)f(our)g
+-(metho)q(d)g(of)75 791 y(c)o(hoice)f(for)h(small)f(and)i(medium)c(sized)i
+-(systems.)165 853 y(This)20 b(v)o(ersion)g(of)g(Lanczos)h(do)q(es)g(ho)o(w)o
+-(ev)o(er)e(ha)o(v)o(e)g(one)h(dra)o(wbac)o(k.)33 b(Since)19
+-b(all)g(the)h(Lanczos)75 915 y(v)o(ectors)j(m)o(ust)g(b)q(e)g(sa)o(v)o(ed)h
+-(for)g(the)f(con)o(tingency)g(that)h(the)g(iterate)f(m)o(ust)f(b)q(e)i
+-(orthogonalized)75 977 y(against)h(a)f(con)o(v)o(ergen)o(t)e(Ritz)h(v)o
+-(ector,)h Fd(this)g(metho)n(d)g(c)n(an)h(c)n(ause)f(the)h(pr)n(o)n(gr)n(am)d
+-(to)i(run)h(out)f(of)75 1040 y(memory)12 b(on)i(very)f(lar)n(ge)h(pr)n
+-(oblems.)20 b Fq(This)12 b(di\016cult)o(y)d(can)j(b)q(e)g(a)o(v)o(oided)f(b)o
+-(y)g(emplo)o(ying)f(a)i(restarting)75 1102 y(sc)o(heme)22 b(or)i(b)o(y)f
+-(giving)h(up)g(on)g(main)o(taining)f(orthogonalit)o(y)h(in)g(the)f(Lanczos)i
+-(basis.)45 b(These)75 1164 y(alternativ)o(es,)11 b(ho)o(w)o(ev)o(er,)g(ha)o
+-(v)o(e)f(their)h(o)o(wn)h(undesirable)f(attributes.)19 b(Restarting)12
+-b(sc)o(hemes)d(exhibit)75 1226 y(slo)o(w)o(er)15 b(con)o(v)o(ergence,)f(and)j
+-(sc)o(hemes)c(suc)o(h)j(as)h([21])e(whic)o(h)h(do)g(not)g(orthogonalize)h
+-(and)f(hence)g(do)75 1289 y(not)j(need)e(to)i(sa)o(v)o(e)f(the)g(Lanczos)h(v)
+-o(ectors)e(m)o(ust)g(run)h(through)i(the)e(en)o(tire)e(Lanczos)k(recurrence)
+-75 1351 y(a)h(second)f(time)e(\(or)j(use)f(in)o(v)o(erse)f(iteration\))h(in)g
+-(order)g(to)h(compute)e(the)h(desired)f(eigen)o(v)o(ector.)75
+-1413 y(F)l(urthermore,)g(if)g(the)h(desired)f(eigen)o(v)o(ector)f(is)i(not)h
+-(the)e(\014rst)i(to)f(con)o(v)o(erge)f(signi\014can)o(tly)l(,)g(non-)75
+-1475 y(orthogonalizing)13 b(sc)o(hemes)d(ma)o(y)g(fail)h(badly)l(.)20
+-b(Con)o(v)o(ergence)11 b(usually)g Fd(is)h Fq(led)g(b)o(y)f(the)h(Fiedler)e
+-(v)o(ector)75 1538 y(in)i(the)g(sp)q(ectral)g(bisection)g(application,)g(but)
+-h(there)f(is)g(no)h(guaran)o(tee)f(of)h(this.)20 b(So)13 b(for)f(robustness,)
+-75 1600 y(and)k(b)q(ecause)g(w)o(e)g(often)g(need)f(to)h(compute)f(higher)g
+-(eigen)o(v)o(ectors)f(to)j(p)q(erform)d(quadrisection)i(or)75
+-1662 y(o)q(ctasection,)e(w)o(e)e(c)o(hose)h(selectiv)o(e)d
+-(orthogonalization.)21 b(If)13 b(memory)d(is)j(exhausted,)g(eac)o(h)f
+-(Lanczos)75 1725 y(routine)19 b(computes)e(the)i(b)q(est)g(a)o(v)m(ailable)g
+-(appro)o(ximation)f(to)h(the)g(required)e(eigen)o(v)o(ectors)h(using)75
+-1787 y(the)i(existing)f(Lanczos)i(basis.)32 b(This)20 b(approac)o(h)h
+-(represen)o(ts)e(a)h(decision)g(to)g(optimize)d(o)o(v)o(er)i(the)75
+-1849 y(lik)o(ely)10 b(range)k(of)f(application)f(and)i(an)f(assumption)g
+-(that)g(for)g(problems)e(in)i(whic)o(h)f(memory)e(w)o(ould)75
+-1911 y(b)q(e)j(a)g(problem)f(a)h(partitioning)g(metho)q(d)f(designed)h(for)g
+-(larger)g(problems)f(\()p Fd(e.g.)h Fq(the)g(R)o(QI/Symml)o(q)75
+-1974 y(metho)q(d\))i(will)h(b)q(e)g(emplo)o(y)o(ed.)165 2036
+-y(F)l(or)j(partitioning)g(v)o(ery)f(large)h(graphs)h(using)f(the)g(sp)q
+-(ectral)g(metho)q(d,)f(w)o(e)g(recommend)e(the)75 2098 y(m)o(ultilev)n(el)7
+-b(R)o(QI/Symml)o(q)h(eigen)j(solv)o(er.)18 b(This)11 b(is)g(based)h(on)f(the)
+-g(metho)q(d)f(dev)o(elop)q(ed)g(b)o(y)h(Barnard)75 2160 y(and)19
+-b(Simon)f([1)o(],)h(with)f(the)h(main)e(di\013erence)g(b)q(eing)i(that)g(w)o
+-(e)f(ha)o(v)o(e)g(used)h(an)g(edge)f(con)o(traction)75 2223
+-y(coarsening)f(sc)o(heme)e(describ)q(ed)h(in)g([13].)22 b(This)17
+-b(con)o(traction)g(sc)o(heme)d(preserv)o(es)i(the)g(lo)o(w)h(mo)q(des)75
+-2285 y(of)f(the)f(op)q(erator)h(su\016cien)o(tly)e(w)o(ell)g(that)h(w)o(e)g
+-(need)g(only)g(p)q(erform)g(R)o(QI)f(re\014nemen)o(t)f(p)q(erio)q(dically)75
+-2347 y(as)21 b(w)o(e)f(w)o(ork)h(bac)o(k)f(through)h(the)g(grid)f(hierarc)o
+-(h)o(y)l(.)33 b(W)l(e)20 b(ha)o(v)o(e)f(also)j(mo)q(di\014ed)d(the)h(Symmlq)d
+-(it-)75 2409 y(eration)i(to)g(terminate)e(when)i(the)g(norm)f(of)h(the)g
+-(iterate)f(reac)o(hes)g(a)h(preset)g(limit.)26 b(W)l(e)19 b(do)g(this)75
+-2472 y(b)q(ecause)14 b(R)o(QI)f(relies)g(essen)o(tially)f(on)i(in)o(v)o(erse)
+-e(iteration)i(in)f(whic)o(h)g(a)i(large)e(iterate)g(indicates)h(con-)75
+-2534 y(v)o(ergence.)19 b(The)13 b(resulting)g(metho)q(d)f(ma)o(y)g(b)q(e)h
+-(sev)o(eral)g(times)e(faster)i(than)h(Lanczos)g(with)g(selectiv)o(e)75
+-2596 y(orthogonalization)i(for)f(solving)f(large)g(problems)g(to)g(the)h
+-(same)e(accuracy)l(,)h(and)h(also)g(requires)f(far)75 2659
+-y(less)22 b(memory)l(.)36 b(A)21 b(dra)o(wbac)o(k)h(is)g(that)h(the)f(metho)q
+-(d)f(seems)g(more)f(prone)j(to)f(miscon)o(v)o(ergence)977 2762
+-y Fk(14)p eop
+-%%Page: 15 15
+-bop 75 43 a Fq(than)17 b(Lanczos.)24 b(Exp)q(erience)15 b(indicates,)h(ho)o
+-(w)o(ev)o(er,)f(that)i(for)g(large)f(graphs,)i(eigen)o(v)o(ectors)d(other)75
+-106 y(than)f(the)f(Fiedler)f(v)o(ector)g(usually)h(giv)o(e)g(partitions)g(of)
+-h(similar)d(qualit)o(y)h(to)i(those)g(generated)f(with)75 168
+-y(the)j(Fiedler)e(v)o(ector)h(\(o)q(ccasionally)g(b)q(etter!\).)21
+-b(So)16 b(sligh)o(t)f(miscon)o(v)o(ergence)e(is)i(not)h(that)h(serious)f(a)75
+-230 y(problem,)g(esp)q(ecially)g(if)i(y)o(ou)f(are)h(applying)g(a)g(lo)q(cal)
+-f(re\014nemen)o(t)f(metho)q(d.)25 b(Another)17 b(dra)o(wbac)o(k)75
+-292 y(of)22 b(the)f(R)o(QI/Symm)o(lq)d(algorithm)i(is)h(that)h(its)f(run)g
+-(time)e(is)j(essen)o(tially)d(prop)q(ortional)k(to)e(the)75
+-355 y(n)o(um)o(b)q(er)c(of)i(eigen)o(v)o(ectors)e(solv)o(ed)h(for.)30
+-b(This)18 b(ero)q(des)i(its)e(sp)q(eed)h(adv)m(an)o(tage)h(when)f(used)g(as)g
+-(the)75 417 y(eigen)d(solv)o(er)f(for)i(one)f(of)h(the)f(m)o(ultidim)n
+-(ensional)e(sp)q(ectral)i(partitioning)g(sc)o(hemes.)165 479
+-y(When)h(the)h(terminal)d(propagation)k(metho)q(d)e(is)g(applied)g(\()p
+-Fh(x)p Fq(4.2\),)h(the)f(solution)h(v)o(ector)e Fj(u)i Fq(of)75
+-541 y(the)i(extended)g(eigen)f(problem)g Fj(Au)h Fq(=)h Fj(\025u)14
+-b Fq(+)g Fj(g)23 b Fq(m)o(ust)c(b)q(e)h(computed.)32 b(W)l(e)21
+-b(ha)o(v)o(e)e(dev)o(elop)q(ed)h(a)75 604 y(v)m(arian)o(t)g(of)g(Lanczos)h
+-(for)f(this)g(whic)o(h)g(follo)o(ws)g(that)g(of)g(V)l(an)g(Driessc)o(he)f
+-(and)i(Ro)q(ose)g([26].)32 b(The)75 666 y(main)14 b(di\013erence)g(is)i(that)
+-f(w)o(e)g(ha)o(v)o(e)g(incorp)q(orated)h(selectiv)o(e)d(orthogonalization)k
+-(and)f(some)e(\(but)75 728 y(not)j(all\))e(of)i(the)f(safet)o(y)g(features)g
+-(previously)f(describ)q(ed.)165 791 y(A)23 b(critical)f(issue)h(in)h(the)f
+-(prop)q(er)h(use)g(of)g(iterativ)o(e)d(eigen)i(solv)o(ers)g(is)h(the)f(c)o
+-(hoice)f(of)i(the)75 853 y(tolerance)12 b(on)h(the)g(eigen)f(residual.)19
+-b(This)13 b(is)f(treated)h(in)f(some)g(detail)f(later)i(during)f(the)h
+-(discussion)75 915 y(of)j(the)f(v)m(arious)h(co)q(de)f(parameters)g(in)g
+-Fh(x)p Fq(6.2,)g(but)h(it)f(is)g(appropriate)h(to)g(men)o(tion)d(here)i(that)
+-h(all)f(of)75 977 y(the)i(eigen)f(solv)o(ers)h(ha)o(v)o(e)f(direct)g
+-(residual)h(c)o(hec)o(ks)f(to)h(determine)e(whether)h(the)h(requested)g
+-(eigen)75 1040 y(tolerance)f(has)i(b)q(een)e(ac)o(hiev)o(ed.)21
+-b(In)16 b(addition,)h(the)f(selectiv)o(e)e(orthogonalization)k(sc)o(hemes)d
+-(ha)o(v)o(e)75 1102 y(safet)o(y)j(c)o(hec)o(ks)f(to)i(monitor)e(the)h
+-(e\013ectiv)o(eness)f(of)i(the)f(orthogonalization,)i(and)f(the)f(m)o(ultile)
+-o(v)o(e)o(l)75 1164 y(R)o(QI/Symml)o(q)8 b(co)q(de)k(incorp)q(orates)g(a)g
+-(heuristic)e(to)i(detect)e(miscon)o(v)o(ergence.)17 b(F)l(rom)10
+-b(time)f(to)j(time)75 1226 y(and)17 b(dep)q(ending)f(up)q(on)i(ho)o(w)e(the)g
+-(error)h(and)f(w)o(arning)h(condition)f(\015ags)i(are)e(set,)g(one)g(or)h
+-(more)e(of)75 1289 y(these)j(conditions)g(will)f(b)q(e)i(noted)f(b)o(y)g
+-Fm(Chaco)p Fq(.)28 b(In)18 b(most)f(cases)i(these)f(are)g(not)h(sho)o
+-(w-stopp)q(ers:)75 1351 y(the)d(desired)f(safet)o(y)h(standards)i(ha)o(v)o(e)
+-d(not)i(b)q(een)f(met,)e(but)i(the)g(computation)f(will)g(pro)q(ceed)h(and)75
+-1413 y(generate)f(reasonable)h(partitions.)21 b(If)14 b(certain)h(error)g(or)
+-g(w)o(arning)h(conditions)f(o)q(ccur)g(c)o(hronically)l(,)75
+-1475 y(y)o(ou)20 b(ma)o(y)e(need)h(to)h(c)o(ho)q(ose)g(di\013eren)o(t)f
+-(tuning)g(parameters.)31 b(\(Or,)20 b(of)g(course,)g(there)f(ma)o(y)f(b)q(e)i
+-(a)75 1538 y(problem)15 b(with)h(the)g(co)q(de.\))165 1634
+-y Fm(3.5.)27 b(Kernighan{Lin.)22 b Fq(One)c(of)g(the)g(most)f(p)q(opular)h
+-(metho)q(ds)g(for)g(partitioning)g(graphs)75 1697 y(dates)13
+-b(bac)o(k)g(to)g(w)o(ork)h(done)f(in)g(the)f(early)h(70's)g(b)o(y)g
+-(Kernighan)g(and)h(Lin)f([17].)20 b(V)l(arious)13 b(extensions)75
+-1759 y(and)i(impro)o(v)o(em)o(en)o(ts)d(of)j(the)f(original)h(idea)g(ha)o(v)o
+-(e)f(b)q(een)g(prop)q(osed)i(through)g(the)f(y)o(ears,)f(including)75
+-1821 y(the)h(imp)q(ortan)o(t)f(linear)g(time)f(implem)o(en)n(tation)g(due)i
+-(to)g(Fiduccia)f(and)h(Mattheyses)g([4],)f(who)i(are)75 1883
+-y(often)i(join)o(tly)e(credited)h(with)g(the)h(algorithm.)24
+-b(A)o(t)17 b(its)h(heart,)f(Kernighan{Lin)i(\(KL\))f(is)f(simply)75
+-1946 y(a)i(greedy)l(,)f(lo)q(cal)h(optimization)e(strategy)l(.)28
+-b(V)l(ertices)17 b(are)i(mo)o(v)o(ed)e(b)q(et)o(w)o(een)g(sets)i(in)f(an)i
+-(e\013ort)f(to)75 2008 y(reduce)d(the)h(n)o(um)o(b)q(er)e(of)i(edges)g(cut)g
+-(b)o(y)f(the)h(partition.)23 b(Although)17 b(the)g(original)g(algorithm)e(w)o
+-(as)75 2070 y(designed)20 b(for)g(graph)h(bisection,)f(Suaris)g(and)h(Kedem)d
+-([25])i(sho)o(w)o(ed)g(ho)o(w)h(to)f(extend)f(it)h(to)g(the)75
+-2132 y(quadrisection)12 b(case.)20 b(W)l(e)12 b(ha)o(v)o(e)f(generalized)g
+-(this)h(idea)g(so)h(that)g(our)f(co)q(de)h(w)o(orks)f(on)h(an)g(arbitrary)75
+-2195 y(n)o(um)o(b)q(er)d(of)i(sets)g(at)h(once,)f(and)g(also)h(w)o(orks)f
+-(with)g(edge)f(and)i(v)o(ertex)d(w)o(eigh)o(ts)h([13)q(].)19
+-b(Unfortunately)l(,)75 2257 y(the)11 b(run)o(time)e(of)j(the)g(algorithm)e
+-(and)i(its)f(memory)e(requiremen)o(ts)g(increase)h(with)i(the)f(partitioning)
+-75 2319 y(dimension,)i(so)i(in)f(practice)g(w)o(e)g(use)g(only)h(bisection,)f
+-(quadrisection)g(and)h(o)q(ctasection)g(to)g(matc)o(h)75 2382
+-y(the)h(other)g(metho)q(ds)g(in)g Fm(Chaco)p Fq(.)165 2444
+-y(In)i(our)h(exp)q(erience)e(KL)i(do)q(es)g(not)g(\014nd)g(v)o(ery)f(go)q(o)q
+-(d)i(partitions)f(of)g(large)f(graphs)i(unless)e(it)75 2506
+-y(is)h(giv)o(en)f(a)h(go)q(o)q(d)i(initial)c(partition.)29
+-b(Hence)18 b(w)o(e)g(\014nd)i(its)e(v)m(alue)h(to)g(b)q(e)g(greatest)g(when)g
+-(used)g(in)75 2568 y(conjunction)f(with)h(one)f(of)h(the)f(global)h
+-(partitioners.)28 b(If)18 b(y)o(ou)g(are)g(in)o(terested)f(in)h(v)o(erifying)
+-f(this)75 2631 y(b)o(y)d(testing)f(KL)i(essen)o(tially)d(on)j(its)e(o)o(wn,)i
+-(w)o(e)e(recommend)e(that)k(y)o(ou)f(in)o(v)o(ok)o(e)e(the)i(simple)d(random)
+-75 2693 y(metho)q(d)k(to)i(pro)o(vide)f(an)g(initial)f(partition.)977
+-2762 y Fk(15)p eop
+-%%Page: 16 16
+-bop 165 43 a Fq(T)o(ypically)l(,)20 b Fm(Chaco)h Fq(tries)g(to)g(generate)f
+-(partitions)h(whic)o(h)g(are)f(as)i(balanced)f(as)g(p)q(ossible.)75
+-106 y(In)d(some)g(applications,)h(it)g(is)f(preferable)g(to)h(allo)o(w)g(a)g
+-(bit)f(of)h(im)o(balance)e(if)h(the)h(edges)f(crossing)75 168
+-y(b)q(et)o(w)o(een)e(sets)i(can)g(b)q(e)f(reduced.)24 b Fm(Chaco)18
+-b Fq(allo)o(ws)g(KL)f(\(and)h(Multilev)o(el{KL)d(describ)q(ed)i(b)q(elo)o
+-(w\))75 230 y(to)g(lo)q(ok)g(for)f(un)o(balanced)g(partitions.)22
+-b(If)16 b(this)h(functionalit)o(y)e(is)h(of)g(in)o(terest)g(to)g(y)o(ou,)g(y)
+-o(ou)h(should)75 292 y(set)f(the)g Fg(KL)p 290 292 16 2 v 18
+-w(IMBALANCE)d Fq(parameter)i(describ)q(ed)h(in)g Fh(x)p Fq(6.4)h(to)g
+-(something)e(larger)h(than)h(its)f(default)75 355 y(of)h(zero.)165
+-451 y Fm(3.6.)27 b(Multilev)n(el{KL.)21 b Fq(Our)12 b(metho)q(d)f(of)h(c)o
+-(hoice)e(for)i(large)g(problems)e(in)h(whic)o(h)g(high)h(qual-)75
+-513 y(it)o(y)g(partitions)h(are)h(sough)o(t)f(is)g(the)g(m)o(ultilev)n(el{KL)
+-1025 495 y Fi(5)1055 513 y Fq(algorithm)f(describ)q(ed)h(in)f([13)q(].)20
+-b(This)13 b(metho)q(d)75 575 y(is)g(v)o(ery)f(similar)f(in)i(approac)o(h)i
+-(to)e(the)g(metho)q(d)g(of)g(Bui)g(and)h(Jones)g(describ)q(ed)f(in)f([2,)h
+-(15)q(].)20 b(It)13 b(w)o(orks)75 638 y(b)o(y)h(creating)g(a)g(sequence)g(of)
+-g(increasingly)f(smaller)g(graphs)i(appro)o(ximating)e(the)h(original)h
+-(graph,)75 700 y(partitioning)k(the)g(smallest)e(graph,)j(and)g(pro)s
+-(jecting)e(this)h(partition)g(bac)o(k)g(through)h(the)f(in)o(ter-)75
+-762 y(mediate)f(lev)o(els.)32 b(Kernighan{Lin)21 b(is)f(in)o(v)o(ok)o(ed)e
+-(ev)o(ery)h(few)h(lev)o(els)e(of)j(pro)s(jection)f(to)g(re\014ne)g(the)75
+-825 y(partition.)i(W)l(e)16 b(use)g(a)h(sp)q(ectral)f(metho)q(d)g(to)h
+-(partition)f(the)g(smallest)f(graph,)i(but)f(this)g(do)q(es)i(not)75
+-887 y(seem)c(to)j(b)q(e)g(critical.)165 949 y(The)k(algorithm)g(for)h
+-(constructing)f(smaller)f(appro)o(ximations)g(to)i(the)f(graph)i(relies)d(up)
+-q(on)75 1011 y(\014nding)c(a)g(maximal)d(matc)o(hing)h(in)i(the)f(graph,)i
+-(and)f(then)g(con)o(tracting)f(edges)h(in)f(the)h(matc)o(hing.)75
+-1074 y(This)i(generates)g(a)g(new)g(graph)g(with)g(t)o(ypically)e(ab)q(out)j
+-(half)f(as)g(man)o(y)e(v)o(ertices)g(as)j(the)e(original)75
+-1136 y(graph.)23 b(Edge)16 b(con)o(traction)h(is)f(in)o(tuitiv)o(ely)d
+-(attractiv)o(e)i(b)q(ecause)i(it)f(largely)g(preserv)o(es)f(the)h(graph)75
+-1198 y(top)q(ology)l(.)21 b(When)13 b(edges)g(are)g(con)o(tracted,)f(a)h
+-(single)g(v)o(ertex)e(is)h(created)g(out)i(of)f(the)f(t)o(w)o(o)h(endp)q(oin)
+-o(ts)75 1260 y(with)18 b(w)o(eigh)o(t)f(giv)o(en)g(b)o(y)h(the)f(sum)g(of)i
+-(the)e(w)o(eigh)o(ts)h(of)g(the)g(endp)q(oin)o(ts.)26 b(In)18
+-b(addition,)g(an)o(y)g(edges)75 1323 y(whic)o(h)e(b)q(ecome)f(coinciden)o(t)g
+-(ha)o(v)o(e)g(their)h(w)o(eigh)o(ts)g(summed)e(and)j(b)q(ecome)e(a)h(single)g
+-(edge.)22 b(These)75 1385 y(op)q(erations)f(ha)o(v)o(e)d(the)h(e\013ect)g(of)
+-h(preserving)f(the)g(essen)o(tial)f(prop)q(erties)h(of)h(a)g(partition)f(as)h
+-(it)f(is)75 1447 y(mo)o(v)o(ed)c(b)q(et)o(w)o(een)i(graphs)h(in)f(the)h
+-(hierarc)o(h)o(y)l(.)23 b(The)17 b(n)o(um)o(b)q(er)f(of)i(v)o(ertices)d(in)i
+-(the)g(smallest)f(graph)75 1509 y(is)j(an)i(input)e(option)h(\(w)o(e)f(t)o
+-(ypically)f(use)i(a)g(v)m(alue)f(b)q(et)o(w)o(een)g(50)h(and)h(500\),)g(and)f
+-(the)f(frequency)75 1572 y(with)13 b(whic)o(h)g(to)h(in)o(v)o(ok)o(e)e(KL)i
+-(is)f(con)o(trolled)g(b)o(y)g(the)g Fg(COARSE)p 1182 1572 V
+-16 w(NLEVEL)p 1354 1572 V 16 w(KL)g Fq(and)h Fg(COARSE)p 1683
+-1572 V 16 w(KL)p 1751 1572 V 18 w(BOTTOM)75 1634 y Fq(parameters)h(describ)q
+-(ed)h(in)g Fh(x)p Fq(6.5.)165 1696 y(The)c(metho)q(d)g(of)g(Bui)g(and)h
+-(Jones)f(do)q(es)h(not)g(use)f(edge)g(and)h(v)o(ertex)e(w)o(eigh)o(ts,)h(but)
+-g(is)g(otherwise)75 1759 y(equiv)m(alen)o(t)h(to)h(ours.)22
+-b Fm(Chaco)15 b Fq(allo)o(ws)f(the)g(user)g(to)h(turn)f(o\013)h(edge)f
+-(and/or)i(v)o(ertex)d(w)o(eigh)o(ts)g(in)h(the)75 1821 y(coarsening)h(pro)q
+-(cess)g(b)o(y)e(setting)h(the)g Fg(COARSEN)p 970 1821 V 16
+-w(EWGTS)f Fq(and/or)i Fg(COARSEN)p 1471 1821 V 16 w(VWGTS)d
+-Fq(parameters)i(to)75 1883 y Fg(FALSE)e Fq(as)i(discussed)f(in)g
+-Fh(x)p Fq(6.5.)21 b(This)13 b(allo)o(ws)h(for)g(application)f(of)g(Bui)g(and)
+-h(Jones')g(metho)q(d)e(as)i(w)o(ell)75 1945 y(as)19 b(algorithms)f(in)o
+-(termediate)e(b)q(et)o(w)o(een)h(ours)j(and)f(theirs.)27 b(In)19
+-b(our)g(exp)q(erience,)e(the)h(di\013erence)75 2008 y(b)q(et)o(w)o(een)d(the)
+-h(metho)q(ds)g(is)g(small)f(with)h(neither)f(metho)q(d)h(b)q(eing)g
+-(consisten)o(tly)f(sup)q(erior.)165 2070 y(Our)21 b(exp)q(erience)e
+-(indicates)h(that)i(the)e(m)o(ultilev)n(el{KL)e(metho)q(d)i(giv)o(es)h(v)o
+-(ery)e(high)i(qualit)o(y)75 2132 y(answ)o(ers)g(in)f(mo)q(derate)f(time.)31
+-b(It)20 b(is)g(not)h(as)g(quic)o(k)d(as)j(the)f(inertial)f(metho)q(d)h(plus)g
+-(KL,)g(but)g(it)75 2194 y(generally)g(pro)q(duces)i(b)q(etter)f(partitions.)
+-36 b(In)20 b(most)h(cases)g(it)g(pro)q(duces)g(partitions)h(whic)o(h)e(are)p
+-75 2259 150 2 v 119 2288 a Ff(5)150 2303 y Fk(Some)9 b(confusion)g(has)h
+-(arisen)h(in)e(the)h(past)h(regarding)e(the)i(naming)c(of)j(this)g
+-(algorithm.)k(W)m(e)9 b(ha)o(v)o(e)h(referred)i(to)d(it)75
+-2353 y(in)i(writing)f(as)i(the)f Fc(multilevel{FM)g Fk(algorithm)e(b)q
+-(ecause)j(our)g(implemen)o(tati)o(on)c(of)j(the)h(Kernighan{Lin)f(algorithm)
+-75 2403 y(is)j(based)h(on)f(that)g(adv)o(o)q(cated)g(b)o(y)g(Fiduccia)g(and)g
+-(Mattheyses)i([4].)i(W)m(e)c(ha)o(v)o(e)g(also)f(referred)j(to)e(it)g(simply)
+-e(as)i(the)75 2453 y Fc(multilevel)d Fk(algorithm)f(b)q(ecause)k(w)o(e)e(b)q
+-(eliev)o(e)h(the)g(p)q(o)o(w)o(er)f(of)g(the)h(algorithm)c(deriv)o(es)k
+-(essen)o(tially)f(from)f(its)h(strategy)75 2503 y(of)f(applying)f(lo)q(cal)g
+-(re\014nemen)o(t)i(on)f(m)o(ultiple)f(scales)i(and)f(that)h(re\014nemen)o(t)f
+-(sc)o(hemes)h(other)g(than)g(the)g(one)f(w)o(e)h(ha)o(v)o(e)75
+-2552 y(c)o(hosen)j(w)o(ould)f(also)g(w)o(ork)g(w)o(ell.)19
+-b(Finally)m(,)12 b(there)k(has)f(b)q(een)g(confusion)f(regarding)h(the)g
+-(algorithm's)c(relationship)75 2602 y(to)18 b(the)i(m)o(ultilev)o(el)15
+-b(R)o(QI/Symmlq)g(algorithm)h(used)j(for)g(computing)d(the)k(eigen)o(v)o
+-(ector\(s\))g(needed)g(in)e(sp)q(ectral)75 2652 y(partitioning)d(metho)q(ds.)
+-23 b(These)18 b(are)e(en)o(tirely)g(di\013eren)o(t)h(partitioning)d
+-(algorithms,)g(although)h(they)i(do)e(happ)q(en)75 2702 y(to)f(share)g(the)h
+-(same)e(graph)h(coarsening)g(sc)o(heme)g(in)f(our)h(implemen)o(tation.)977
+-2762 y(16)p eop
+-%%Page: 17 17
+-bop 75 43 a Fq(b)q(etter)17 b(than)i(those)f(generated)g(b)o(y)f(sp)q(ectral)
+-h(coupled)f(with)g(KL)i(and)f(runs)g(signi\014can)o(tly)f(faster)75
+-106 y(than)24 b(an)o(y)g(of)g(the)f(sp)q(ectral)h(metho)q(ds.)43
+-b(More)23 b(on)h(the)g(w)o(orkings)f(and)i(p)q(erformance)d(of)i(this)75
+-168 y(m)o(ultilev)n(el)o({KL)14 b(metho)q(d)i(can)g(b)q(e)h(found)f(in)g([13)
+-q(].)165 264 y Fm(4.)28 b(Additional)18 b(functionalit)n(y)-5
+-b(.)165 361 y(4.1.)27 b(Sp)r(ectral)16 b(sequencing.)23 b Fq(Sp)q(ectral)15
+-b(graph)h(algorithms)f(are)g(b)q(ecoming)f(increasingly)75
+-423 y(p)q(opular)20 b(for)g(a)f(v)m(ariet)o(y)g(of)g(applications.)30
+-b(Often)19 b(the)g(k)o(ey)f(computation)h(in)g(these)g(algorithms)75
+-486 y(is)i(the)g(generation)g(of)h(the)f(Fiedler)e(v)o(ector.)35
+-b(Unfortunately)l(,)21 b(calculation)g(of)g(eigen)o(v)o(ectors)f(of)75
+-548 y(large)i(matrices)f(can)i(b)q(e)f(di\016cult,)g(and)i(the)e(scarcit)o(y)
+-f(of)i(robust,)h(e\016cien)o(t)d(to)q(ols)i(w)o(ell)e(tuned)75
+-610 y(for)h(these)f(graph)i(applications)e(has)i(imp)q(eded)d(dev)o(elopmen)o
+-(t)e(of)k(sp)q(ectral)g(graph)g(algorithms.)75 672 y(T)l(o)h(address)h(this)f
+-(problem)e(w)o(e)i(pro)o(vide)f(easy)h(access)g(to)g(the)g(Fiedler)e(v)o
+-(ector)h(computed)g(b)o(y)75 735 y Fm(Chaco)p Fq(.)f(Although)13
+-b(a)g(full)f(exp)q(osition)h(on)g(this)g(topic)f(is)h(b)q(ey)o(ond)g(the)f
+-(scop)q(e)h(of)g(this)g(user's)g(guide,)75 797 y(the)20 b(ordering)f(of)i(v)o
+-(ertices)c(pro)q(duced)k(b)o(y)e(their)g(v)m(alues)h(in)f(the)h(Fiedler)e(v)o
+-(ector)h(has)h(some)f(nice)75 859 y(prop)q(erties.)h(In)11
+-b(particular,)h(v)o(ertices)e(connected)h(b)o(y)g(an)h(edge)f(will)g(tend)g
+-(to)h(b)q(e)g(assigned)h(n)o(um)o(b)q(ers)75 921 y(that)23
+-b(are)f(close)g(to)h(eac)o(h)f(other.)40 b(This)22 b(prop)q(ert)o(y)g(has)i
+-(already)e(b)q(een)g(successfully)f(exploited)75 984 y(in)g(a)h(n)o(um)o(b)q
+-(er)e(of)h(applications)h(including)e(c)o(hromosomal)g(mapping,)h(matrix)f
+-(reordering)h(and)75 1046 y(database)c(organization)h(applications.)j(W)l(e)
+-16 b(exp)q(ect)f(man)o(y)g(more)g(uses)h(will)g(b)q(e)g(found.)165
+-1108 y(If)24 b(the)g Fg(SEQUENCE)e Fq(parameter)h(describ)q(ed)h(in)h
+-Fh(x)p Fq(6.8)g(is)f Fg(TRUE)f Fq(\(or)i(nonzero\),)h(the)f(Fiedler)75
+-1170 y(v)o(ector)c(will)f(b)q(e)i(sorted)g(and)h(written)e(to)h(the)g(\014le)
+-f(whose)h(name)f(is)g(sp)q(eci\014ed)g(b)o(y)h(the)f(param-)75
+-1233 y(eter)c Fg(SEQ)p 255 1233 16 2 v 17 w(FILENAME)p Fq(.)d(These)j
+-(parameters)g(set)g(up)h(an)g(alternate)f(execution)f(path)i(that)g(do)q
+-(esn't)75 1295 y(p)q(erform)j(an)o(y)h(partitioning.)38 b(The)22
+-b(co)q(de)g(uses)g(whic)o(hev)o(er)e(eigensolv)o(er)h(w)o(ould)h(b)q(e)g
+-(used)g(b)o(y)g(a)75 1357 y(sp)q(ectral)k(partitioning)f(algorithm.)49
+-b(That)26 b(is,)h(if)e(y)o(ou)h(select)e(a)j(sp)q(ectral)e(metho)q(d)g(and)h
+-(the)75 1420 y(R)o(QI/Symml)o(q)20 b(eigensolv)o(er,)i(that)i(will)d(b)q(e)i
+-(used;)j(otherwise,)e(the)f(Lanczos)g(solv)o(er)g(sp)q(eci\014ed)75
+-1482 y(b)o(y)16 b(the)g Fg(LANCZOS)p 412 1482 V 16 w(TYPE)e
+-Fq(parameter)h(\()p Fh(x)q Fq(6.2\))h(will)f(b)q(e)i(used.)165
+-1544 y(Since)i(sp)q(ectral)h(metho)q(ds)f(break)h(do)o(wn)g(if)f(the)h(graph)
+-g(is)g(disconnected,)g(the)f(sp)q(ectral)h(se-)75 1606 y(quencing)e(co)q(de)g
+-(w)o(orks)g(on)h(the)f(connected)f(comp)q(onen)o(ts)h(of)g(the)g(graph)h(in)f
+-(turn.)27 b(The)19 b(p)q(ertur-)75 1669 y(bation)c(of)h(the)f(matrix)e(asso)q
+-(ciated)j(with)f(the)f Fg(PERTURB)f Fq(parameter)h(in)g Fh(x)p
+-Fq(6.3)i(is)f(unnecessary)f(and)75 1731 y(hence)19 b(is)g(disabled.)31
+-b(The)20 b(co)q(de)f(sorts)i(the)e(v)o(ertices)f(in)h(eac)o(h)g(connected)g
+-(comp)q(onen)o(t)g(b)o(y)g(their)75 1793 y(v)m(alue)c(in)f(the)h(Fiedler)f(v)
+-o(ector)g(and)h(prin)o(ts)g(them)f(in)g(sorted)i(order.)21
+-b(Eac)o(h)15 b(line)f(in)g(the)h(output)h(\014le)75 1855 y(con)o(tains)i(the)
+-f(v)o(ertex)g(n)o(um)o(b)q(er)e(follo)o(w)o(ed)i(b)o(y)h(its)f(v)m(alue)h(in)
+-f(the)h(Fiedler)e(v)o(ector.)24 b(A)18 b(c)o(hange)f(to)i(a)75
+-1918 y(new)d(connected)g(comp)q(onen)o(t)g(is)g(signaled)h(b)o(y)f(a)h(switc)
+-o(h)e(from)h(a)h(p)q(ositiv)o(e)e(v)m(alue)i(for)f(the)h(Fiedler)75
+-1980 y(comp)q(onen)o(t)f(to)g(a)h(negativ)o(e)f(one,)g(since)g(v)m(alues)g
+-(for)h(eac)o(h)f(comp)q(onen)o(t)f(m)o(ust)h(b)q(e)g(nondecreasing.)75
+-2042 y(If)h(a)h(connected)f(comp)q(onen)o(t)f(consists)i(of)g(a)g(single)f
+-(isolated)g(v)o(ertex,)f(this)h(v)o(ertex)f(is)h(assigned)i(a)75
+-2104 y(v)m(alue)d(0)h(in)f(the)g(returned)f(v)o(ector.)165
+-2201 y Fm(4.2.)27 b(T)-5 b(erminal)17 b(propagation)j(to)e(impro)n(v)n(e)g
+-(the)g(mapping.)24 b Fd(T)l(erminal)18 b(pr)n(op)n(agation)75
+-2263 y Fq(is)f(an)g(algorithmic)e(insigh)o(t)i(prop)q(osed)h(b)o(y)e(Dunlop)i
+-(and)f(Kernighan)h([3])e(to)h(impro)o(v)o(e)e(the)h(place-)75
+-2326 y(men)o(t)d(of)h(circuit)f(elemen)o(ts)f(on)j(a)g(c)o(hip)f(b)o(y)g
+-(adding)h(additional)g(constrain)o(ts)f(to)h(a)g(Kernighan{Lin)75
+-2388 y(algorithm.)35 b(V)l(an)22 b(Driessc)o(he)e(and)i(Ro)q(ose)g([26)q(])f
+-(ha)o(v)o(e)f(recen)o(tly)f(sho)o(wn)k(that)e(these)g(same)g(con-)75
+-2450 y(strain)o(ts)14 b(can)f(b)q(e)h(enco)q(ded)f(in)o(to)h(a)f(sp)q(ectral)
+-h(metho)q(d,)f(signi\014can)o(tly)f(extending)h(the)g(applicabilit)o(y)75
+-2512 y(of)k(the)f(original)g(idea.)165 2575 y(T)l(erminal)d(propagation)k
+-(isn't)d(a)h(new)g(partitioning)g(metho)q(d)f(but)h(rather)g(a)h(mo)q
+-(di\014cation)e(of)75 2637 y(some)h(of)i(the)f(metho)q(ds)g(discussed)g(ab)q
+-(o)o(v)o(e.)22 b(It)16 b(is)g(essen)o(tially)e(a)j(metho)q(d)f(for)g
+-(coupling)h(the)f(map-)75 2699 y(ping)f(to)g(sets)g(with)g(the)f
+-(partitioning)h(in)f(an)i(e\013ort)f(to)g(impro)o(v)o(e)d(lo)q(calit)o(y)l(.)
+-20 b(In)14 b(the)h(circuit)e(con)o(text)977 2762 y Fk(17)p
+-eop
+-%%Page: 18 18
+-bop 75 43 a Fq(it)18 b(is)h(undesirable)g(to)g(ha)o(v)o(e)f(long)h(wires)g
+-(criss{crossing)h(the)e(c)o(hip)g(since)h(they)f(use)h(up)g(v)m(aluable)75
+-106 y(space.)30 b(In)19 b(parallel)g(computing,)f(messages)h(tra)o(v)o(eling)
+-f(b)q(et)o(w)o(een)g(arc)o(hitecturally)f(distan)o(t)i(pro-)75
+-168 y(cessors)i(should)g(b)q(e)g(minimi)o(zed)d(since)i(they)g(tie)g(up)h
+-(man)o(y)e(comm)o(unication)f(links.)34 b(T)l(erminal)75 230
+-y(propagation)18 b(allo)o(ws)e(these)g(considerations)h(to)f(b)q(e)h
+-(factored)f(in)o(to)g(the)g(partitioning.)165 292 y(T)l(o)21
+-b(understand)g(ho)o(w)g(terminal)d(propagation)k(w)o(orks,)g(\014rst)e
+-(consider)g(partitioning)h(with-)75 355 y(out)d(terminal)e(propagation.)27
+-b(After)17 b(eac)o(h)g(step)h(in)f(a)h(recursiv)o(e)e(decomp)q(osition)h(the)
+-g(pieces)g(are)75 417 y(decoupled)g(and)i(in)o(teract)e(no)i(further.)26
+-b(An)18 b(edge)g(crossing)h(b)q(et)o(w)o(een)e(t)o(w)o(o)h(sets)g(do)q(es)h
+-(not)g(a\013ect)75 479 y(the)f(later)f(partitioning)i(of)f(either)f(set.)27
+-b(Consequen)o(tly)l(,)17 b(there)g(is)h(nothing)h(prev)o(en)o(ting)d(the)i(t)
+-o(w)o(o)75 541 y(adjacen)o(t)e(v)o(ertices)f(from)g(b)q(eing)h(assigned)h(to)
+-g(sets)f(that)h(are)f(quite)f(far)i(from)e(eac)o(h)h(other.)165
+-604 y(T)l(erminal)11 b(propagation)k(ameliorates)d(this)h(b)o(y)g(including)f
+-(information)g(ab)q(out)j(the)e(outgoing)75 666 y(edges)e(\(or)g(terminals\))
+-e(in)i(the)f(recursiv)o(e)f(partitioning.)20 b(Details)10 b(ab)q(out)i(ho)o
+-(w)g(this)e(is)h(accomplished)75 728 y(are)k(giv)o(en)e(in)i(references)e
+-([3,)h(26)q(,)g(14)q(].)20 b Fm(Chaco)c Fq(includes)d(co)q(de)i(for)g
+-(terminal)e(propagation)j(in)e(the)75 791 y(bisection)23 b(mo)q(de)g(of)h
+-(the)f(sp)q(ectral)h(partitioner,)h(and)f(for)g(an)g(arbitrary)g(n)o(um)o(b)q
+-(er)e(of)i(sets)g(for)75 853 y(KL)16 b(and)h(m)o(ultilev)n(el)o({KL.)d(\(If)h
+-(y)o(ou)h(are)g(using)g(m)o(ultilev)n(el)o({KL)e(in)i(quadrisection)f(or)i(o)
+-q(ctasection)75 915 y(mo)q(de,)j(the)f(sp)q(ectral)h(metho)q(d)f(at)i(the)e
+-(b)q(ottom)h(cannot)h(p)q(erform)e(terminal)f(propagation,)k(but)75
+-977 y(all)f(the)g(in)o(v)o(o)q(cations)h(of)g(KL)g(can.\))37
+-b(T)l(erminal)20 b(propagation)j(is)f(switc)o(hed)f(on)h(b)o(y)f(setting)g
+-(the)75 1040 y Fg(TERM)p 182 1040 16 2 v 17 w(PROP)f Fq(parameter)h(to)h
+-Fg(TRUE)e Fq(\(or)i(nonzero\))g(as)h(describ)q(ed)e(in)h Fh(x)p
+-Fq(6.8.)38 b(W)l(e)21 b(also)i(note)f(that)75 1102 y(terminal)13
+-b(propagation)k(comes)d(in)o(to)h(pla)o(y)f(only)h(when)h(there)e(are)h
+-(edges)h(to)f(other)h(sets,)f(so)h(it)e(has)75 1164 y(no)g(e\013ect)g(on)g
+-(the)f(\014rst)i(step)e(of)h(bisection.)20 b(If)13 b(the)h(qualit)o(y)e(of)j
+-(the)e(mapping)g(to)h(sets)g(is)g(imp)q(ortan)o(t)75 1226 y(for)21
+-b(y)o(our)g(application,)g(y)o(ou)g(should)h(also)f(consider)g(the)f(p)q
+-(ost{pro)q(cessing)j(metho)q(d)e(describ)q(ed)75 1289 y(in)16
+-b Fh(x)p Fq(4.3.3.)165 1351 y(When)23 b(terminal)e(propagation)k(is)e
+-(applied,)h(the)f(necessary)g(mo)q(di\014cations)g(to)h(KL)f(\(and)75
+-1413 y(hence)13 b(m)o(ultile)o(v)o(e)o(l{KL\))e(are)i(fairly)g(minor,)f(but)h
+-(the)g(sp)q(ectral)h(form)o(ulation)e(is)h(signi\014can)o(tly)f(com-)75
+-1475 y(plicated.)20 b(W)l(e)14 b(m)o(ust)g(solv)o(e)g(an)i
+-Fd(extende)n(d)g Fq(eigenproblem)d(of)i(form)f Fj(Au)f Fq(=)h
+-Fj(\025u)9 b Fq(+)f Fj(g)17 b Fq(for)e Fj(u)g Fq(suc)o(h)g(that)75
+-1538 y Fj(u)103 1520 y Fb(T)130 1538 y Fj(u)i Fq(=)g Fj(\033)260
+-1520 y Fi(2)297 1538 y Fq(where)g Fj(\033)j Fq(is)e(a)g(constan)o(t.)27
+-b(W)l(e)18 b(could)g(do)g(this)g(conceptually)f(b)o(y)g(c)o(ho)q(osing)i(a)f
+-Fj(\025)h Fq(near)75 1600 y(the)c(corresp)q(onding)h(eigen)o(v)m(alue)e(of)i
+-Fj(A)p Fq(,)e(solving)h(the)g(resulting)g(linear)f(system)g(and)i(c)o(hec)o
+-(king)d(the)75 1662 y(norm)g(constrain)o(t.)20 b(By)13 b(adjusting)i
+-Fj(\025)f Fq(correctly)e(and)i(iterating)g(w)o(e)f(can)h(con)o(v)o(erge)e(to)
+-i(the)g(solution)75 1725 y(\()p Fj(\025;)8 b(u)p Fq(\))16 b(reliably)f(in)i
+-(the)f(bisection)f(case.)22 b(This,)16 b(ho)o(w)o(ev)o(er,)f(is)h
+-(unacceptably)g(exp)q(ensiv)o(e)f(for)i(large)75 1787 y(systems.)26
+-b(The)18 b(tric)o(k)f(is)h(to)g(transform)g(the)g Fj(\025)h
+-Fq(iteration)f(in)o(to)g(Lanczos)h(space)f(where)g(it)g(is)g(p)q(er-)75
+-1849 y(formed)13 b(on)i(small)e(tridiagonal)h(systems.)20 b(A)14
+-b(detailed)f(form)o(ulation)g(of)i(this)f(for)g(edge)h(and)g(v)o(ertex)75
+-1911 y(w)o(eigh)o(ted)20 b(graphs)i(is)e(presen)o(ted)g(in)g([14)q(,)g(26)q
+-(].)34 b(W)l(e)21 b(ha)o(v)o(e)f(extended)f(this)i(to)g(include)f(selectiv)o
+-(e)75 1974 y(orthogonalization)d(in)f(our)h(implem)o(en)o(tation.)165
+-2036 y(In)d(our)g(exp)q(erience,)e(the)i(terminal)e(propagation)k(v)m(arian)o
+-(t)e(of)g(the)g(m)o(ultilev)n(el)o({KL)e(algorithm)75 2098
+-y(consisten)o(tly)j(impro)o(v)o(es)f(mappings,)h(while)h(the)g(sp)q(ectral)g
+-(algorithm)f(seems)g(less)h(consisten)o(t.)165 2195 y Fm(4.3.)27
+-b(P)n(ost{pro)r(cessing)c(to)g(impro)n(v)n(e)f(the)h(partition)f(and)i
+-(mapping.)g(Chaco)d Fq(in-)75 2257 y(cludes)10 b(sev)o(eral)g(tec)o(hniques)g
+-(that)h(accept)g(an)g(existing)g(decomp)q(osition)f(and)h(mo)q(dify)f(the)h
+-(partition)75 2319 y(or)i(the)f(mapping)f(of)i(sets)f(to)g(pro)q(cessors.)22
+-b(These)12 b(can)g(b)q(e)g(used)h(to)f(impro)o(v)o(e)e(the)i(qualit)o(y)f(of)
+-h(output)75 2382 y(generated)18 b(either)e(b)o(y)h Fm(Chaco)i
+-Fq(or,)e(if)g(y)o(ou)h(read)g(a)g(partition)f(from)g(a)h(\014le)f(as)h
+-(describ)q(ed)f(in)g Fh(x)p Fq(4.4,)75 2444 y(b)o(y)f(other)g(partitioning)g
+-(soft)o(w)o(are.)165 2540 y Fm(4.3.1.)27 b(Re\014ning)21 b(the)g(partition.)g
+-Fq(In)e(the)f(recursiv)o(e)f(generation)i(of)g(a)g(decomp)q(osition,)75
+-2603 y(some)f(information)f(is)i(lost)g(with)f(eac)o(h)g(recursion)h(lev)o
+-(el.)26 b(F)l(or)19 b(example,)d(a)j(lo)q(cal)g(re\014nemen)o(t)d(is)75
+-2665 y(p)q(erformed)h(b)q(et)o(w)o(een)h(only)g(a)h(fraction)f(of)h(the)f
+-(total)h(n)o(um)o(b)q(er)d(of)j(adjacen)o(t)f(sets.)28 b(If)18
+-b(requested,)977 2762 y Fk(18)p eop
+-%%Page: 19 19
+-bop 75 43 a Fm(Chaco)21 b Fq(can)g(p)q(erform)e(a)i(lo)q(cal)f(re\014nemen)o
+-(t)e(b)q(et)o(w)o(een)h Fd(al)r(l)j Fq(pairs)e(of)h(sets.)33
+-b(First)20 b(the)g(w)o(eigh)o(t)g(of)75 106 y(edges)g(crossing)h(b)q(et)o(w)o
+-(een)e(eac)o(h)h(pair)g(of)h(sets)f(is)g(determined.)31 b(Kernighan{Lin)20
+-b(re\014nemen)o(t)e(is)75 168 y(then)13 b(p)q(erformed)g(b)q(et)o(w)o(een)f
+-(eac)o(h)h(pair)h(with)f(a)h(nonzero)g(b)q(oundary)l(,)g(in)f(order)h(from)e
+-(the)i(pair)f(with)75 230 y(the)21 b(largest)h(b)q(oundary)g(to)g(that)g
+-(with)f(the)g(smallest.)35 b(T)l(erminal)19 b(propagation)24
+-b(ma)o(y)19 b(b)q(e)j(used)75 292 y(to)g(incorp)q(orate)g(considerations)g
+-(of)g(the)f(qualit)o(y)f(of)i(the)g(mapping)e(to)i(sets.)38
+-b(The)21 b(parameter)75 355 y Fg(REFINE)p 234 355 16 2 v 16
+-w(PARTITION)16 b Fq(\()p Fh(x)p Fq(6.6\))j(indicates)f(ho)o(w)h(man)o(y)e
+-(cycles)h(of)h(re\014nemen)o(t)d(will)i(b)q(e)h(p)q(erformed.)75
+-417 y(Its)14 b(default)f(v)m(alue)h(is)f(zero)h(since)f(a)h(full)f
+-(re\014nemen)o(t)f(is)h(fairly)g(exp)q(ensiv)o(e.)19 b(In)14
+-b(our)g(exp)q(erience)e(this)75 479 y(option)i(can)f(signi\014can)o(tly)g
+-(reduce)f(the)h(n)o(um)o(b)q(er)f(of)i(edges)f(cut)g(in)g(the)g(partition,)h
+-(but)f(it)g(generally)75 541 y(increases)j(the)g(n)o(um)o(b)q(er)e(of)j
+-(pairs)f(of)h(sets)f(with)g(some)g(b)q(oundary)h(b)q(et)o(w)o(een)e(them.)165
+-638 y Fm(4.3.2.)27 b(Increasing)d(the)f(n)n(um)n(b)r(er)h(of)g(in)n(ternal)g
+-(v)n(ertices.)19 b Fq(In)i(some)f(applications)h(it)75 700
+-y(is)d(desirable)f(to)i(increase)e(the)h(n)o(um)o(b)q(er)f(of)h(v)o(ertices)e
+-(that)j(ha)o(v)o(e)e(no)i(edges)f(connecting)g(them)f(to)75
+-763 y(other)i(sets.)27 b(F)l(or)19 b(instance,)f(in)g(parallel)g(computing)f
+-(applications)h(suc)o(h)h(v)o(ertices)d(require)h(only)75 825
+-y(lo)q(cal)j(data.)33 b(This)20 b(ma)o(y)e(allo)o(w)i(for)g(o)o(v)o(erlap)f
+-(of)h(comm)o(unic)o(ation)e(and)i(computation)f(since)g(the)75
+-887 y(computation)13 b(asso)q(ciated)h(with)f(an)h(in)o(ternal)e(v)o(ertex)f
+-(can)j(b)q(e)f(p)q(erformed)f(while)h(w)o(aiting)g(for)g(data)75
+-949 y(from)18 b(other)h(pro)q(cessors)i(to)f(arriv)o(e.)29
+-b(If)18 b(the)h Fg(INTERNAL)p 1137 949 V 16 w(VERTICES)d Fq(parameter)i(\()p
+-Fh(x)p Fq(6.6\))i(is)f Fg(TRUE)p Fq(,)75 1012 y Fm(Chaco)e
+-Fq(will)d(try)i(to)g(increase)f(the)h(n)o(um)o(b)q(er)e(of)i(in)o(ternal)f(v)
+-o(ertices)f(in)i(sets)g(with)f(a)i(small)d(n)o(um)o(b)q(er)75
+-1074 y(of)k(them.)26 b(T)l(o)18 b(accomplish)f(this)h(the)g(co)q(de)g
+-(\014rst)g(determines)e(the)i(n)o(um)o(b)q(er)e(of)j(in)o(ternal)e(v)o
+-(ertices)75 1136 y(in)j(eac)o(h)f(set.)33 b(Then)20 b(the)g(set)g(with)g(the)
+-g(few)o(est)f(in)o(ternal)g(v)o(ertices)f(steals)j(v)o(ertices)d(from)h
+-(other)75 1198 y(sets)14 b(to)h(mak)o(e)d(some)h(of)h(its)g(o)o(wn)h(v)o
+-(ertices)d(b)q(ecome)g(in)o(ternal,)h(and)i(trades)g(bac)o(k)e(other)h(v)o
+-(ertices)f(to)75 1261 y(preserv)o(e)k(balance.)29 b(The)18
+-b(default)h(v)m(alue)f(for)h Fg(INTERNAL)p 1155 1261 V 15 w(VERTICES)d
+-Fq(is)j Fg(FALSE)d Fq(since)i(this)h(fairly)75 1323 y(sp)q(ecialized)13
+-b(functionalit)o(y)g(is)h(probably)h(not)g(required)e(for)i(most)e
+-(applications.)21 b(If)14 b(the)g(partition)75 1385 y(is)i(of)h(lo)o(w)f
+-(qualit)o(y)f(this)h(option)g(can)h(b)q(e)f(quite)g(time)e(consuming.)165
+-1482 y Fm(4.3.3.)27 b(Impro)n(ving)11 b(the)i(mapping)f(to)h(pro)r(cessors.)
+-23 b Fq(Although)12 b Fm(Chaco)g Fq(tries)f(to)h(assign)75
+-1544 y(sets)j(to)g(pro)q(cessors)h(in)f(a)g(w)o(a)o(y)f(that)h(preserv)o(es)f
+-(lo)q(calit)o(y)l(,)g(this)g(mapping)g(can)h(often)g(b)q(e)g(impro)o(v)o(ed.)
+-75 1606 y Fm(Chaco)h Fq(con)o(tains)g(co)q(de)f(to)h(greedily)e(ren)o(um)o(b)
+-q(er)f(sets)i(to)h(impro)o(v)o(e)d(the)i(mappings)g(to)h(h)o(yp)q(ercub)q(e)
+-75 1669 y(and)22 b(mesh)f(arc)o(hitectures.)37 b(Note)21 b(that)i(this)e(do)q
+-(esn't)i(c)o(hange)f(the)f(comp)q(osition)g(of)i(the)e(sets,)75
+-1731 y(just)i(whic)o(h)g(pro)q(cessor)h(eac)o(h)e(set)h(is)g(assigned)h(to.)
+-42 b(T)l(o)24 b(p)q(erform)e(this)h(re\014nemen)o(t,)f(the)h(co)q(de)75
+-1793 y(determines)f(ho)o(w)i(the)g(mapping)g(w)o(ould)g(c)o(hange)g(if)g(it)f
+-(\015ipp)q(ed)i(the)f(t)o(w)o(o)g(sets)g(connected)g(b)o(y)75
+-1855 y(a)f(wire)e(in)h(the)g(parallel)g(mac)o(hine.)37 b(The)22
+-b(\015ip)g(whic)o(h)f(maximally)e(impro)o(v)o(es)h(the)i(mapping)f(is)75
+-1918 y(p)q(erformed)g(and)i(the)f(pro)q(cess)h(rep)q(eated)f(un)o(til)f(no)i
+-(further)f(impro)o(v)o(em)o(e)o(n)o(t)d(is)j(p)q(ossible.)40
+-b(This)75 1980 y(functionalit)o(y)19 b(is)i(activ)m(ated)f(b)o(y)g(setting)h
+-(the)f Fg(REFINE)p 1117 1980 V 16 w(MAP)g Fq(parameter)f(\()p
+-Fh(x)p Fq(6.6\))i(to)g Fg(TRUE)p Fq(.)e(Since)75 2042 y Fm(Chaco)14
+-b Fq(is)g(used)g(for)g(man)o(y)e(applications)i(other)g(than)g(parallel)f
+-(computing,)f(the)i(default)f(for)h(this)75 2104 y(parameter)j(is)h
+-Fg(FALSE)p Fq(.)e(But)h(if)h(y)o(ou)g(are)g(really)f(in)o(terested)f(in)i
+-(the)g(qualit)o(y)f(of)h(y)o(our)g(assignmen)o(t)75 2167 y(to)k(pro)q
+-(cessors,)j(y)o(ou)c(should)i(try)e(this)h(option.)39 b(Y)l(ou)22
+-b(should)h(also)f(familiarize)d(y)o(ourself)i(with)75 2229
+-y(terminal)14 b(propagation)k(as)f(describ)q(ed)f(in)g Fh(x)p
+-Fq(4.2.)165 2326 y Fm(4.4.)27 b(W)-5 b(orking)23 b(with)g(existing)e
+-(partitions.)g Fq(As)f(men)o(tioned)e(in)i Fh(x)p Fq(3,)h Fm(Chaco)f
+-Fq(has)h(the)75 2388 y(abilit)o(y)13 b(to)h(read)g(an)h(existing)e(partition)
+-h(from)f(a)h(\014le)g(with)g(one)g(of)g(the)g(formats)f(describ)q(ed)h(in)g
+-Fh(x)p Fq(5.3)75 2450 y(and)19 b(mo)q(dify)e(or)i(ev)m(aluate)f(it)g(in)g
+-(sev)o(eral)g(w)o(a)o(ys.)28 b(This)18 b(option)h(is)f(sp)q(eci\014ed)g(in)h
+-(the)f(men)o(u)e(as)k(an)75 2512 y(additional)c(global)h(partitioning)f
+-(option.)22 b(An)o(y)16 b(of)h(the)f(p)q(ost{pro)q(cessing)i(op)q(erations)g
+-(describ)q(ed)75 2575 y(in)12 b Fh(x)p Fq(4.3)g(can)h(then)e(b)q(e)i(activ)m
+-(ated)e(to)i(impro)o(v)o(e)c(the)j(partition)g(and/or)i(the)d(mapping)h(to)g
+-(pro)q(cessors.)75 2637 y(Ev)m(aluation)17 b(of)f(the)g(partition)h(can)f
+-(also)h(b)q(e)f(p)q(erformed)f(as)i(describ)q(ed)f(in)g Fh(x)p
+-Fq(5.5.)165 2699 y(Since)h(an)i(existing)f(partition)g(is)g(considered)g(a)h
+-(global)f(partition,)h(y)o(ou)f(can)g(in)o(v)o(ok)o(e)f(KL)h(as)977
+-2762 y Fk(19)p eop
+-%%Page: 20 20
+-bop 75 43 a Fq(a)17 b(lo)q(cal)g(re\014nemen)o(t.)j(There)c(are)g(a)i(few)e
+-(necessary)g(restrictions)g(on)h(the)g(use)f(of)h(this)g(capabilit)o(y)l(.)75
+-106 y(Y)l(ou)12 b(can)f(use)h(KL)g(only)f(if)h(the)f(existing)g(partition)g
+-(has)i(2,)f(4)g(or)g(8)g(sets,)g(and)h(y)o(ou)e(request)g(bisection,)75
+-168 y(quadrisection)18 b(or)g(o)q(ctasection)h(resp)q(ectiv)o(ely)l(.)25
+-b(The)18 b(restriction)g(to)g(a)h(small)e(n)o(um)o(b)q(er)f(of)j(sets)f(is)75
+-230 y(necessary)c(to)h(a)o(v)o(oid)f(am)o(biguities)f(ab)q(out)j(ho)o(w)f(to)
+-g(recurse.)20 b(Also,)14 b(the)g(arc)o(hitecture)f(y)o(ou)i(sp)q(ecify)75
+-292 y(m)o(ust)g(ha)o(v)o(e)g(the)h(same)g(n)o(um)o(b)q(er)e(of)j(sets)f(as)h
+-(the)f(partition.)165 389 y Fm(5.)28 b(Input)23 b(and)i(output)e(formats.)e
+-Fq(Input)f(to)h Fm(Chaco)h Fq(consists)f(of)g(one)g(or)g(more)e(\014les,)75
+-451 y(and)h(the)g(resp)q(onse)g(to)g(sev)o(eral)e(in)o(teractiv)o(e)f
+-(queries.)31 b(Files)18 b(are)i(used)f(to)h(describ)q(e)f(the)h(graph,)75
+-514 y(and)c(if)g(necessary)f(to)h(giv)o(e)f(geometric)f(co)q(ordinates)i(or)g
+-(an)h(existing)e(partition.)21 b(The)15 b(in)o(teractiv)o(e)75
+-576 y(input)j(sp)q(eci\014es)f(the)h(partitioning)g(metho)q(d)f(and)i(the)f
+-(n)o(um)o(b)q(er)e(of)i(sets)g(y)o(ou)g(require.)25 b(An)18
+-b(addi-)75 638 y(tional)e(optional)g(\014le)e(can)i(b)q(e)g(used)g(to)f(mo)q
+-(dify)g(the)g(v)m(alues)h(of)f(v)m(arious)i(parameters)d(that)i(con)o(trol)75
+-700 y(algorithmic)e(c)o(hoices)i(and)g(output)h(options.)22
+-b(This)17 b(functionalit)o(y)e(is)h(discussed)g(in)g Fh(x)p
+-Fq(6.10.)165 797 y Fm(5.1.)27 b(F)-5 b(ormat)15 b(of)h(graph)g(input)g
+-(\014les.)23 b Fq(The)14 b(standard)h Fm(Chaco)f Fq(input)f(is)h(a)g(graph,)h
+-(whic)o(h)75 859 y(is)f(read)h(from)e(a)i(\014le.)20 b(Leading)15
+-b(lines)f(in)g(this)h(\014le)e(that)i(b)q(egin)g(with)f(the)h(c)o(haracter)f
+-(`\045')f(or)i(`#')e(are)75 921 y(considered)19 b(commen)n(ts)e(and)i
+-(ignored.)31 b(A)o(t)18 b(its)h(simplest)e(a)i(correct)g(input)g(\014le)f
+-(con)o(tains)h Fj(n)14 b Fq(+)f(1)75 984 y(uncommen)o(ted)h(lines,)i(where)h
+-Fj(n)g Fq(is)g(the)g(n)o(um)o(b)q(er)e(of)j(v)o(ertices)d(in)i(the)g(graph.)
+-24 b(The)17 b(\014rst)h(of)f(these)75 1046 y(lines)10 b(con)o(tains)i(t)o(w)o
+-(o)f(required)f(in)o(tegers)g(and)i(ma)o(y)e(ha)o(v)o(e)g(a)i(third.)19
+-b(The)11 b(\014rst)h(in)o(teger)e(is)h(the)g(n)o(um)o(b)q(er)75
+-1108 y(of)k(v)o(ertices)e(in)i(the)g(graph,)h(and)f(the)g(second)g(is)g(the)g
+-(n)o(um)o(b)q(er)e(of)i(edges.)21 b(\(Note)15 b(that)g(the)g(n)o(um)o(b)q(er)
+-75 1170 y(of)i(edges)h(is)f(half)g(of)g(the)g(sum)f(of)i(the)f(n)o(um)o(b)q
+-(er)e(of)i(neigh)o(b)q(ors)h(of)g(eac)o(h)e(v)o(ertex.\))22
+-b(The)c(remaining)75 1233 y Fj(n)f Fq(lines)f(con)o(tain)h(neigh)o(b)q(or)h
+-(lists)e(for)i(eac)o(h)e(v)o(ertex)g(from)g(1)h(to)g Fj(n)h
+-Fq(in)e(order.)24 b(These)17 b(lists)g(are)g(just)75 1295 y(sets)g(of)g(in)o
+-(tegers)f(whic)o(h)h(are)g(separated)g(b)o(y)f(spaces)i(and)f(con)o(tain)g
+-(all)f(the)h(neigh)o(b)q(ors)g(of)h(a)f(giv)o(en)75 1357 y(v)o(ertex.)32
+-b(The)20 b(neigh)o(b)q(ors)h(ma)o(y)e(b)q(e)h(listed)g(in)g(an)o(y)g(order.)
+-33 b(Note)20 b(that)h(v)o(ertices)e(are)h(n)o(um)o(b)q(ered)75
+-1420 y(from)g(1)i(to)f Fj(n)p Fq(,)h(not)g(from)e(0)i(to)f
+-Fj(n)15 b Fh(\000)f Fq(1.)36 b(Sample)20 b(graph)i(\014les)f(can)g(b)q(e)h
+-(found)f(in)g(sub)q(directory)75 1482 y(\\exec")16 b(under)g(\014le)g(names)f
+-(ending)h(with)g(\\.graph".)165 1544 y Fm(Chaco)g Fq(also)h(accepts)e(graphs)
+-i(with)e(w)o(eigh)o(ts)h(on)g(v)o(ertices)e(and/or)j(edges.)k(A)15
+-b(third)g(param-)75 1606 y(eter)j(on)g(the)g(\014rst)h(line)e(of)h(the)g
+-(input)g(\014le)g(con)o(trols)g(input)g(of)h(w)o(eigh)o(ted)e(graphs.)28
+-b(This)19 b(n)o(um)o(b)q(er)75 1669 y(ma)o(y)e(ha)o(v)o(e)h(up)h(to)g(three)f
+-(digits.)29 b(If)18 b(the)g(1's)h(digit)g(is)f(nonzero,)h(edge)g(w)o(eigh)o
+-(ts)f(will)g(b)q(e)h(read.)28 b(If)75 1731 y(the)17 b(10's)g(digit)g(is)f
+-(nonzero,)h(v)o(ertex)f(w)o(eigh)o(ts)g(will)g(b)q(e)h(read.)23
+-b(And)17 b(if)f(the)h(100's)h(digit)e(is)h(nonzero)75 1793
+-y(then)f(v)o(ertex)f(n)o(um)o(b)q(ers)g(will)g(b)q(e)h(read,)g(as)h(describ)q
+-(ed)f(b)q(elo)o(w.)165 1855 y(V)l(ertex)h(w)o(eigh)o(ts)h(should)h(ha)o(v)o
+-(e)f(small)f(in)o(teger)g(v)m(alues.)28 b(\(T)l(o)19 b(b)q(e)g(conserv)m
+-(ativ)o(e,)f(the)g(sum)g(of)75 1918 y(all)g(v)o(ertex)f(w)o(eigh)o(ts)h
+-(should)h(b)q(e)f(represen)o(table)f(as)i(a)g(standard)h(in)o(teger.\))26
+-b(If)18 b(an)o(y)h(v)o(ertex)d(has)k(a)75 1980 y(w)o(eigh)o(t,)14
+-b(then)h(w)o(eigh)o(ts)f(m)o(ust)g(b)q(e)h(giv)o(en)f(for)h(all)f(of)i(them.)
+-j(V)l(ertex)13 b(w)o(eigh)o(ts)i(app)q(ear)h(imm)o(ediatel)o(y)75
+-2042 y(b)q(efore)g(the)g(corresp)q(onding)i(neigh)o(b)q(or)e(list.)165
+-2104 y(Edge)j(w)o(eigh)o(ts)e(can)i(b)q(e)f(an)o(y)g(p)q(ositiv)o(e)g
+-(\015oating)h(p)q(oin)o(t)f(v)m(alue,)g(but)h(y)o(ou)f(are)g(encouraged)h(to)
+-75 2167 y(mak)o(e)c(them)g(small)h(in)o(tegers.)22 b Fd(Kernighan{Lin)e(and)e
+-(multilevel{KL)j(wil)r(l)f(not)e(work)h(pr)n(op)n(erly)d(if)75
+-2229 y(e)n(dge)j(weights)g(ar)n(e)f(not)h(inte)n(gers)p Fq(.)25
+-b(If)17 b(an)o(y)g(edge)g(is)g(w)o(eigh)o(ted,)f(they)g(all)h(m)o(ust)f(b)q
+-(e.)24 b(Edge)18 b(w)o(eigh)o(ts)75 2291 y(are)c(included)f(in)g(the)h(graph)
+-g(\014le)f(immediatel)o(y)e(after)i(the)h(corresp)q(onding)h(en)o(try)e(in)g
+-(the)h(neigh)o(b)q(or)75 2354 y(list.)165 2416 y(If)g(y)o(ou)g(ha)o(v)o(e)f
+-(some)g(v)o(ertices)g(with)h(man)o(y)e(neigh)o(b)q(ors,)j(it)f(ma)o(y)e(b)q
+-(e)i(incon)o(v)o(enien)o(t)e(to)j(write)e(the)75 2478 y(en)o(tire)h(v)o
+-(ertex)g(data)i(on)g(a)g(single)f(line)f(of)i(the)f(graph)h(input)g(\014le.)k
+-(Y)l(ou)15 b(can)h(split)f(the)g(data)h(across)75 2540 y(m)o(ultiple)e(lines)
+-i(b)o(y)h(using)g(v)o(ertex)f(n)o(um)o(b)q(ers.)22 b(The)17
+-b(v)o(ertex)f(n)o(um)o(b)q(er)f(is)i(the)g(\014rst)g(v)m(alue)g(on)h(a)f
+-(line)75 2603 y(con)o(taining)d(data)h(for)g(that)f(v)o(ertex.)19
+-b(If)14 b(y)o(ou)g(sp)q(ecify)f(a)i(v)o(ertex)e(n)o(um)o(b)q(er)f(for)j(an)o
+-(y)f(v)o(ertex)e(y)o(ou)i(m)o(ust)75 2665 y(sp)q(ecify)h(one)i(for)f(all)g
+-(of)h(them,)d(and)j(v)o(ertices)d(m)o(ust)h(still)g(b)q(e)i(en)o(tered)e(in)g
+-(increasing)h(order.)977 2762 y Fk(20)p eop
+-%%Page: 21 21
+-bop 165 43 a Fq(The)20 b(most)e(general)i(form)e(of)i(the)f(graph)i(input)e
+-(\014le)g(is)h(illustrated)e(b)q(elo)o(w.)31 b(The)20 b(di\013eren)o(t)75
+-106 y(t)o(yp)q(es)e(of)h(optional)g(en)o(tries)f(are)g(indicated)g(b)o(y)g
+-(di\013eren)o(t)g(st)o(yles)f(of)i(paren)o(thesis.)28 b(The)18
+-b(digit)h(on)75 168 y(the)e(\014rst)h(line)f(whic)o(h)g(con)o(trols)h(eac)o
+-(h)f(t)o(yp)q(e)g(of)h(optional)g(en)o(try)f(is)g(indicated)g(b)o(y)g(the)h
+-(same)e(st)o(yle)75 230 y(of)h(paren)o(thesis.)75 341 y Fg(\045)25
+-b(This)f(is)h(the)g(format)e(of)i(the)g(graph)f(input)f(file)75
+-403 y(Number-of-)o(ver)o(ti)o(ces)65 b(Number-of)o(-ed)o(ges)g
+-Fh(f)p Fg(1)p Fh(g)p Fg([1]\(1\))75 466 y Fh(f)p Fg(Vertex-num)o(ber)o
+-Fh(g)23 b Fg([Vertex-w)o(eig)o(ht])65 b(neighbor)1145 473 y
+-Fi(1)1187 466 y Fg(\(edge-weig)o(ht)1498 473 y Fi(1)1514 466
+-y Fg(\))26 b Fh(\001)8 b(\001)g(\001)761 513 y Fg(.)761 529
+-y(.)761 546 y(.)165 608 y Fq(There)18 b(is)g(one)h(exception)e(to)i(this)f
+-(general)g(graph)h(format.)27 b(If)18 b(y)o(ou)g(are)g(using)h(the)f
+-(inertial)75 671 y(metho)q(d)12 b(or)g(one)h(of)f(the)h(simple)d(metho)q(ds)i
+-(without)g(Kernighan{Lin,)i(then)e(it)g(is)g(not)h(necessary)f(to)75
+-733 y(pro)o(vide)g(a)h(graph)g(since)f(the)h(partitioner)f(do)q(es)h(not)g
+-(mak)o(e)e(an)o(y)i(use)f(of)h(connectivit)o(y)e(information.)75
+-795 y(A)22 b(graph)i(\014le)e(is)g(still)g(needed)g(to)h(read)f(the)h(n)o(um)
+-o(b)q(er)e(of)i(v)o(ertices,)f(but)g(the)h(remaining)e(lines)75
+-857 y(describing)16 b(the)f(edge)h(lists)g(can)g(b)q(e)h(skipp)q(ed.)k(Note)
+-16 b(ho)o(w)o(ev)o(er)e(that)j(the)f(co)q(de)g(will)f(b)q(e)i(unable)f(to)75
+-920 y(ev)m(aluate)c(the)f(qualit)o(y)g(of)h(a)h(partition)f(or)g(p)q(erform)f
+-(an)o(y)h(of)g(the)g(p)q(ost{pro)q(cessing)i(options)f(without)75
+-982 y(edge)h(information.)19 b(Normally)12 b(sev)o(eral)h(measures)g(of)h
+-(the)f(partition)h(qualit)o(y)f(are)h(computed)e(and)75 1044
+-y(prin)o(ted,)j(but)h(this)g(is)g(skipp)q(ed)h(if)e(the)h(graph)i(is)e(not)g
+-(presen)o(t.)165 1141 y Fm(5.2.)27 b(F)-5 b(ormat)23 b(of)h(co)r(ordinate)e
+-(input)i(\014les.)c Fq(If)h(y)o(ou)f(are)h(using)g(the)f(inertial)f(metho)q
+-(d,)75 1203 y(y)o(ou)i(will)g(need)g(to)h(pro)o(vide)f(geometric)e(co)q
+-(ordinates)k(for)f(all)f(v)o(ertices.)35 b(These)22 b(are)f(placed)g(in)75
+-1265 y(a)i(di\013eren)o(t)f(\014le,)g(examples)f(of)i(whic)o(h)f(can)g(b)q(e)
+-h(found)g(in)f(sub)q(directory)h(\\exec")f(with)g(names)75
+-1328 y(ending)15 b(with)g(\\.co)q(ords".)22 b(These)15 b(geometry)f(\014les)g
+-(m)o(ust)g(ha)o(v)o(e)g Fj(n)h Fq(uncommen)o(ted)d(lines,)i(with)h(line)75
+-1390 y Fj(i)21 b Fq(con)o(taining)h(the)f(co)q(ordinates)h(of)g(v)o(ertex)e
+-Fj(i)p Fq(.)37 b(Eac)o(h)22 b(line)e(m)o(ust)h(ha)o(v)o(e)f(1,)j(2)f(or)g(3)g
+-(real)f(v)m(alues,)75 1452 y(corresp)q(onding)g(to)f(a)g(one-,)g(t)o(w)o(o-)g
+-(or)g(three-dimensional)d(geometry)l(.)30 b Fm(Chaco)20 b Fq(determines)d
+-(the)75 1514 y(dimensionalit)o(y)h(b)o(y)j(lo)q(oking)g(at)g(the)g(n)o(um)o
+-(b)q(er)e(of)i(v)m(alues)g(on)h(the)e(\014rst)h(line.)35 b(An)o(y)20
+-b(n)o(um)o(b)q(er)f(of)75 1577 y(commen)o(t)13 b(lines)i(can)i(app)q(ear)g
+-(at)g(the)f(fron)o(t)g(of)g(this)h(\014le)e(b)q(eginning)i(with)f(`\045')f
+-(or)h(`#'.)165 1673 y Fm(5.3.)27 b(F)-5 b(ormat)19 b(of)g(assignmen)n(t)f
+-(input)h(\014les.)k Fq(As)17 b(discussed)g(in)f Fh(x)p Fq(4.4,)h
+-Fm(Chaco)h Fq(can)f(tak)o(e)75 1735 y(an)h(existing)f(partition)h(and)h(mo)q
+-(dify)d(or)j(ev)m(aluate)e(it)h(in)f(sev)o(eral)g(di\013eren)o(t)g(w)o(a)o
+-(ys.)26 b(The)18 b(existing)75 1798 y(partition)e(is)g(read)h(from)e(a)i
+-(\014le)e(using)i(one)f(of)h(t)o(w)o(o)f(p)q(ossible)h(formats.)k(In)16
+-b(the)g(standard)h(format,)75 1860 y(the)e(top)h(of)f(the)g(\014le)g(has)h
+-(an)g(arbitrary)f(n)o(um)o(b)q(er)e(of)j(commen)o(t)c(lines)i(indicated)h(b)o
+-(y)g(a)g(leading)g(`\045')75 1922 y(or)k(`#'.)25 b(There)18
+-b(follo)o(w)g(as)h(man)o(y)d(lines)i(in)g(the)f(\014le)h(as)h(v)o(ertices)d
+-(in)i(the)g(graph.)28 b(Uncommen)n(ted)75 1985 y(line)15 b
+-Fj(i)g Fq(con)o(tains)h(a)h(single)e(in)o(teger)g(whic)o(h)g(is)h(the)f(set)h
+-(to)h(whic)o(h)e(v)o(ertex)f Fj(i)i Fq(is)f(assigned.)22 b(Note)16
+-b(that)75 2047 y(set)g(assignmen)o(t)f(n)o(um)o(b)q(ers)g(start)i(at)f(zero.)
+-165 2109 y(The)f(standard)i(format)e(can)g(b)q(e)h(incon)o(v)o(enien)o(t)d
+-(for)i(parallel)g(computing)f(applications)i(since)75 2171
+-y(the)d(v)o(ertices)f(o)o(wned)h(b)o(y)g(a)g(particular)g(pro)q(cessor)i(can)
+-e(b)q(e)h(scattered)f(throughout)h(the)f(\014le.)20 b(It)13
+-b(can)75 2234 y(b)q(e)k(useful)f(to)h(in)o(v)o(ert)e(the)h(standard)i
+-(format,)d(ha)o(ving)i(all)f(the)g(v)o(ertices)f(assigned)i(to)g(pro)q
+-(cessor)h(0)75 2296 y(\014rst,)d(follo)o(w)o(ed)g(b)o(y)g(all)g(the)g(v)o
+-(ertices)f(assigned)i(to)g(pro)q(cessor)h(1,)e(etc.)20 b(This)c(input)f
+-(format)g(can)h(b)q(e)75 2358 y(selected)e(b)o(y)h(setting)g(the)g(parameter)
+-f Fg(IN)p 852 2358 16 2 v 18 w(ASSIGN)p 1026 2358 V 16 w(INV)g
+-Fq(to)i(b)q(e)f Fg(TRUE)f Fq(\(nonzero\),)i(as)g(describ)q(ed)e(in)75
+-2420 y Fh(x)p Fq(6.1.)21 b(With)13 b(this)g(format,)g(the)h(\014le)f(again)h
+-(b)q(egins)g(with)f(an)h(arbitrary)g(n)o(um)o(b)q(er)e(of)i(commen)n(t)d
+-(lines)75 2483 y(b)q(eginning)k(with)f(`\045')f(or)h(`#'.)19
+-b(The)c(next)e(line)h(con)o(tains)g(a)g(single)g(v)m(alue)g
+-Fj(n)1458 2490 y Fi(0)1492 2483 y Fq(whic)o(h)g(is)g(the)g(n)o(um)o(b)q(er)75
+-2545 y(of)j(v)o(ertices)d(in)i(set)h(0.)22 b(The)16 b(follo)o(wing)g
+-Fj(n)836 2552 y Fi(0)872 2545 y Fq(lines)g(list)f(the)i(v)o(ertices)d(in)i
+-(set)g(0.)22 b(This)17 b(is)f(follo)o(w)o(ed)g(b)o(y)75 2607
+-y(a)h(line)e(con)o(taining)h Fj(n)474 2614 y Fi(1)494 2607
+-y Fq(,)g(the)g(n)o(um)o(b)q(er)e(of)j(v)o(ertices)d(in)i(set)g(1,)g(and)h(so)
+-g(on.)977 2762 y Fk(21)p eop
+-%%Page: 22 22
+-bop 165 43 a Fm(5.4.)27 b(Op)r(erating)21 b(the)g(co)r(de.)g
+-Fq(T)l(o)f(op)q(erate)f(the)f(co)q(de)h(y)o(ou)g(m)o(ust)e(answ)o(er)i(a)g
+-(sequence)f(of)75 106 y(questions.)i(With)13 b(a)h(basic)g(understanding)g
+-(of)g(the)f(co)q(de)g(structure)g(and)h(the)g(metho)q(ds)f(describ)q(ed)75
+-168 y(in)f Fh(x)q Fq(3,)h(these)f(questions)h(should)g(b)q(e)g(mostly)e
+-(self{explanatory)l(.)20 b(A)13 b(brief)f(outline)g(and)h(a)g(few)g(notes)75
+-230 y(are,)j(ho)o(w)o(ev)o(er,)e(in)i(order.)165 292 y(First)10
+-b(y)o(ou)h(will)f(b)q(e)h(ask)o(ed)f(to)i(pro)o(vide)e(the)g(name)g(of)h(the)
+-g(graph)g(input)g(\014le.)19 b(If)10 b(the)h Fg(OUTPUT)p 1829
+-292 16 2 v 16 w(ASSIGN)75 355 y Fq(or)j Fg(ECHO)d Fq(parameters)i(from)f
+-Fh(x)p Fq(6.1)i(are)f(set)g(appropriately)l(,)h(y)o(ou)f(will)f(also)i(b)q(e)
+-f(ask)o(ed)g(for)h(the)f(names)75 417 y(of)j(output)h(\014les.)k(\(If)15
+-b(the)h(text)f(output)i(\014le)e(con)o(trolled)g(b)o(y)g Fg(OUTPUT)p
+-1349 417 V 17 w(ASSIGN)e Fq(already)j(exists,)f(the)75 479
+-y(new)23 b(output)g(is)f(app)q(ended)h(to)g(the)f(existing)g(\014le.\))39
+-b(Y)l(ou)23 b(will)e(then)i(select)e(global)i(and)g(lo)q(cal)75
+-541 y(partitioning)c(metho)q(ds)f(from)g(those)h(describ)q(ed)g(in)f
+-Fh(x)p Fq(3.)30 b(\(Since)18 b(m)o(ultile)o(v)o(e)o(l{KL)f(automatically)75
+-604 y(p)q(erforms)e(KL,)i(y)o(ou)f(aren't)g(ask)o(ed)g(to)g(sp)q(ecify)g(a)g
+-(lo)q(cal)g(metho)q(d)g(with)g(this)g(global)g(option.\))22
+-b(The)75 666 y(global)17 b(metho)q(d)f(options)h(are)f(\(1\))h(Multilev)o
+-(el{KL,)d(\(2\))j(Sp)q(ectral,)f(\(3\))h(Inertial,)e(\(4\))h(Linear,)h(\(5\))
+-75 728 y(Random,)c(\(6\))g(Scattered)f(and)i(\(7\))f(Read{from{\014le.)20
+-b(Option)13 b(\(7\))g(is)g(discussed)g(in)f(detail)g(in)h Fh(x)p
+-Fq(4.4.)75 791 y(The)j(lo)q(cal)g(metho)q(d)g(options)h(are)f(curren)o(tly)f
+-(\(1\))h(Kernighan{Lin)h(and)g(\(2\))g(None.)165 853 y(Dep)q(ending)f(up)q
+-(on)h(y)o(our)e(metho)q(d)g(selections,)f(y)o(ou)i(ma)o(y)e(need)h(to)h(answ)
+-o(er)g(a)g(few)f(additional)75 915 y(questions.)22 b(If)16
+-b(y)o(ou)g(c)o(ho)q(ose)h(a)g(sp)q(ectral)f(metho)q(d)f(y)o(ou)i(will)e(need)
+-h(to)h(c)o(ho)q(ose)g(b)q(et)o(w)o(een)e(the)h(m)o(ulti-)75
+-977 y(lev)o(el)f(R)o(QI/Symml)o(q)f(eigensolv)o(er)i(and)h(Lanczos.)25
+-b(If)17 b(y)o(ou)g(select)f(the)h(inertial)f(metho)q(d)g(y)o(ou)h(will)75
+-1040 y(need)g(to)i(sp)q(ecify)e(the)h(name)e(of)j(a)f(co)q(ordinate)g(input)g
+-(\014le.)26 b(And)17 b(if)h(y)o(ou)f(ask)i(for)f(m)o(ultilev)n(el)o({KL)75
+-1102 y(or)h(the)g(m)o(ultilev)n(el)d(eigensolv)o(er)h(y)o(ou)i(will)f(need)h
+-(to)g(sa)o(y)g(ho)o(w)h(man)o(y)d(v)o(ertices)h(y)o(ou)g(w)o(an)o(t)i(in)e
+-(the)75 1164 y(coarsest)i(graph.)33 b(\(W)l(e)20 b(generally)e(use)i(v)m
+-(alues)g(in)f(the)h(range)g(50)h(to)f(500)h(for)f(this)g(parameter.\))75
+-1226 y(Note)14 b(that)g(b)q(ecause)g(quadrisection)g(and)g(o)q(ctasection)h
+-(mak)o(e)d(use)i(of)g(higher)g(frequency)f(informa-)75 1289
+-y(tion,)g(they)g(ma)o(y)f(need)h(a)h(sligh)o(tly)e(larger)h(coarsest)h(graph)
+-g(to)g(resolv)o(e)e(things)i(as)g(w)o(ell)e(as)i(bisection)75
+-1351 y(do)q(es.)165 1413 y Fm(Chaco)22 b Fq(will)f(then)g(ask)h(y)o(ou)g(for)
+-f(the)h(size)f(of)g(the)h(parallel)e(mac)o(hine)g(for)i(whic)o(h)f(y)o(ou)g
+-(are)75 1475 y(partitioning)g(and)i(compute)d(the)h(appropriate)h(n)o(um)o(b)
+-q(er)e(of)h(sets.)37 b Fm(Chaco)23 b Fq(kno)o(ws)e(ab)q(out)i(the)75
+-1538 y(top)q(ology)c(of)f(h)o(yp)q(ercub)q(e)f(and)i(mesh)d(parallel)h(mac)o
+-(hines;)f(y)o(ou)i(select)e(b)q(et)o(w)o(een)h(them)f(b)o(y)i(using)75
+-1600 y(the)c Fg(ARCHITECTU)o(RE)d Fq(parameter)i(discussed)h(in)h
+-Fh(x)p Fq(6.7.)21 b(The)14 b(co)q(de)h(mak)o(es)d(an)j(e\013ort)g(to)g
+-(assign)g(sets)75 1662 y(to)d(pro)q(cessors)h(in)e(a)h(w)o(a)o(y)f(that)h
+-(impro)o(v)o(es)d(data)j(lo)q(calit)o(y)f(on)h(the)f(selected)f(arc)o
+-(hitecture.)18 b(Although)75 1725 y(the)h(mapping)g(to)g(pro)q(cessors)i
+-(will)d(b)q(e)i(b)q(est)f(for)h(the)f(arc)o(hitectures)f(the)h(co)q(de)h
+-(understands,)g(it)75 1787 y(is)k(imp)q(ortan)o(t)e(to)j(note)f(that)g
+-Fm(Chaco)g Fq(generates)g Fd(p)n(artitions)g Fq(that)g(are)g(appropriate)g
+-(for)g(an)o(y)75 1849 y(application.)c(If)14 b(mapping)f(isn't)h(imp)q(ortan)
+-o(t)f(in)h(y)o(our)g(application,)g(y)o(ou)g(can)g(use)g Fg(ARCHITECTUR)o(E)
+-75 1911 y Fq(to)j(sp)q(ecify)e(a)i(one-dimensional)e(mesh)g(and)h(simply)f
+-(en)o(ter)g(the)h(n)o(um)o(b)q(er)e(of)j(sets)f(y)o(ou)g(require.)165
+-1974 y(Finally)22 b(y)o(ou)i(will)f(c)o(ho)q(ose)h(whether)f(to)h(apply)g
+-(the)f(partitioning)h(metho)q(d)f(in)g(bisection,)75 2036 y(quadrisection)14
+-b(or)i(o)q(ctasection)f(form.)20 b(Note)14 b(that)h(if)g(y)o(ou)g(c)o(ho)q
+-(ose)g(quadrisection)f(or)i(o)q(ctasection)75 2098 y(and)21
+-b(an)g(in)o(tegral)f(n)o(um)o(b)q(er)f(of)i(steps)g(will)f(not)h(pro)q(duce)g
+-(the)f(sp)q(eci\014ed)g(total)h(n)o(um)o(b)q(er)e(of)i(sets,)75
+-2160 y Fm(Chaco)c Fq(will)e(automatically)f(c)o(hange)i(to)g(either)f
+-(quadrisection)h(or)g(bisection)f(at)h(the)g(end)g(of)g(the)75
+-2223 y(recursion)g(so)h(as)g(to)f(generate)g(the)g(required)f(n)o(um)o(b)q
+-(er)g(of)h(sets.)165 2285 y Fm(Chaco)22 b Fq(will)e(no)o(w)i(go)g(o\013)g
+-(and)g(do)f(the)g(requested)g(calculation,)g(prin)o(ting)g(results)g(to)g
+-(the)75 2347 y(screen)10 b(and/or)j(\014les.)19 b(Afterw)o(ards,)11
+-b(it)f(will)g(ask)i(y)o(ou)e(whether)h(y)o(ou)g(wish)g(to)g(run)g(another)h
+-(problem.)165 2444 y Fm(5.5.)27 b(Output)14 b(formats.)27 b(Chaco)12
+-b Fq(has)h(v)m(arious)g(output)f(options)h(whic)o(h)e(are)h(con)o(trolled)g
+-(b)o(y)75 2506 y(parameters)i(describ)q(ed)g(in)g Fh(x)p Fq(6.1)h(and)h
+-Fh(x)p Fq(6.9.)21 b(As)14 b(the)h(v)m(alues)f(of)h(these)g(parameters)e(are)i
+-(increased,)75 2568 y(more)g(detailed)h(information)f(is)h(prin)o(ted.)22
+-b(If)16 b(they)g(are)g(all)g(set)g(to)h(zero,)f(no)h(output)g(is)g(pro)q
+-(duced)75 2631 y(under)h(normal)g(circumstances.)26 b(There)18
+-b(are,)h(ho)o(w)o(ev)o(er,)e(a)i(few)f(unreco)o(v)o(erable)f(error)i
+-(messages)75 2693 y(whic)o(h)i(ha)o(v)o(e)g(authorit)o(y)h(to)g(o)o(v)o
+-(erride)e(this.)38 b(The)22 b(parameter)f Fg(OUTPUT)p 1449
+-2693 V 16 w(METRICS)e Fq(con)o(trols)j(the)977 2762 y Fk(22)p
+-eop
+-%%Page: 23 23
+-bop 75 43 a Fq(calculation)14 b(and)i(prin)o(ting)f(of)g(sev)o(eral)f
+-(partition)h(metrics.)k(These)c(metrics)e(can)i(b)q(e)g(displa)o(y)o(ed)f(in)
+-75 106 y(a)19 b(summary)e(form)h(with)h(maxim)n(um)o(,)d(minim)n(um)f(and)k
+-(total)h(n)o(um)o(b)q(er)d(indicated,)h(or)h(they)g(ma)o(y)75
+-168 y(b)q(e)c(displa)o(y)o(ed)e(in)i(a)g(detailed,)e(set)i(b)o(y)f(set)h
+-(manner.)k(The)c(metrics)d(of)j(partition)g(qualit)o(y)e(recorded)75
+-230 y(are:)75 292 y Fm(Set)18 b(Size:)23 b Fq(The)16 b(total)g(w)o(eigh)o(t)g
+-(of)g(the)f(v)o(ertices)g(in)g(a)h(set.)21 b(In)16 b(a)g(balanced)g(decomp)q
+-(osition)f(these)255 355 y(v)m(alues)h(should)h(b)q(e)f(as)h(close)f(as)h(p)q
+-(ossible.)75 417 y Fm(Edge)h(Cuts:)25 b Fq(The)f(w)o(eigh)o(t)f(of)i(edges)f
+-(whic)o(h)f(connect)h(a)h(v)o(ertex)d(in)i(a)h(set)f(to)g(v)o(ertices)f(in)h
+-(a)255 479 y(di\013eren)o(t)15 b(set.)75 541 y Fm(Hyp)r(ercub)r(e)i(Hops:)24
+-b Fq(A)10 b(measure)h(in)g(whic)o(h)f(eac)o(h)h(cut)g(edge)g(is)h(m)o
+-(ultipli)o(ed)c(b)o(y)j(the)g(arc)o(hitectural)255 604 y(distance)i(b)q(et)o
+-(w)o(een)f(the)i(t)o(w)o(o)f(pro)q(cessors)h(o)o(wning)g(the)f(end)g(v)o
+-(ertices.)19 b(This)13 b(metric)e(often)255 666 y(mo)q(dels)h(comm)o(uni)o
+-(cation)e(time)h(b)q(etter)h(than)h(cuts)g(do)q(es)g(b)q(ecause)g(it)f(tak)o
+-(es)h(in)o(to)f(accoun)o(t)255 728 y(net)o(w)o(ork)k(congestion.)75
+-791 y Fm(Boundary)j(V)-5 b(ertices:)23 b Fq(The)c(w)o(eigh)o(t)f(of)h(v)o
+-(ertices)e(whic)o(h)i(ha)o(v)o(e)f(edges)h(connecting)g(them)e(to)j(a)255
+-853 y(di\013eren)o(t)g(set.)35 b(F)l(or)21 b(example,)e(if)h(an)i(un)o(w)o
+-(eigh)o(ted)d(v)o(ertex)h(in)g(set)h(1)g(has)h(three)e(edges)255
+-915 y(connecting)15 b(it)g(to)h(set)g(4,)f(its)g(con)o(tribution)h(to)f(the)h
+-(b)q(oundary)h(v)o(ertices)c(total)j(is)f(one.)21 b(If)255
+-977 y(it)d(also)i(had)f(an)h(edge)f(to)g(set)g(7,)g(its)g(con)o(tribution)f
+-(w)o(ould)h(b)q(e)g(t)o(w)o(o.)29 b(This)19 b(is)g(useful)f(in)255
+-1040 y(mo)q(deling)h(applications)h(lik)o(e)e(parallel)h(matrix{v)o(ector)f
+-(m)o(ultiplication)f(in)j(whic)o(h)f(the)255 1102 y(v)m(alue)d(asso)q(ciated)
+-i(with)f(a)g(v)o(ertex)e(ma)o(y)g(b)q(e)i(comm)o(unic)o(ated)d(to)j(another)h
+-(set)e(just)h(once)255 1164 y(and)g(used)f(m)o(ultiple)d(times.)75
+-1226 y Fm(Boundary)19 b(V)-5 b(ertex)17 b(Hops:)24 b Fq(Boundary)15
+-b(v)o(ertices)e(w)o(eigh)o(ted)h(b)o(y)g(the)g(n)o(um)o(b)q(er)f(of)i(wires)f
+-(a)h(mes-)255 1289 y(sage)h(m)o(ust)d(tra)o(v)o(erse)h(b)q(et)o(w)o(een)g
+-(corresp)q(onding)i(pro)q(cessors.)22 b(This)15 b(adjusts)h(the)f(b)q(ound-)
+-255 1351 y(ary)h(v)o(ertices)f(metric)f(to)i(accoun)o(t)g(for)h(congestion.)
+-75 1413 y Fm(Adjacen)n(t)i(Sets:)24 b Fq(The)c(v)o(ertices)f(in)g(a)i
+-(particular)f(set)g(will)f(ha)o(v)o(e)h(edges)g(connecting)g(them)f(to)255
+-1475 y(some)14 b(n)o(um)o(b)q(er)g(of)h(other)g(sets.)21 b(This)16
+-b(metric)c(coun)o(ts)k(the)f(n)o(um)o(b)q(er)e(of)i(those)h(other)f(sets.)255
+-1538 y(This)g(v)m(alue)f(corresp)q(onds)i(to)e(the)h(n)o(um)o(b)q(er)d(of)j
+-(messages)f(the)h(corresp)q(onding)g(pro)q(cessor)255 1600
+-y(will)g(ha)o(v)o(e)h(to)g(send.)75 1662 y Fm(In)n(ternal)i(V)-5
+-b(ertices:)23 b Fq(The)c(total)g(w)o(eigh)o(t)f(of)h(all)g(the)f(v)o(ertices)
+-f(in)i(a)g(set)g(whic)o(h)f(ha)o(v)o(e)g(no)h(edges)255 1725
+-y(connecting)c(them)f(to)i(v)o(ertices)d(in)i(other)h(sets.)21
+-b(As)15 b(discussed)h(in)f Fh(x)p Fq(6.6,)g(the)h(presense)f(of)255
+-1787 y(suc)o(h)h(v)o(ertices)e(ma)o(y)h(allo)o(w)h(for)h(o)o(v)o(erlapping)e
+-(comm)o(unicati)o(on)f(with)i(computation.)165 1849 y(Assorted)f(timing)d
+-(information)i(is)g(displa)o(y)o(ed)g(under)g(con)o(trol)g(of)h
+-Fg(OUTPUT)p 1551 1849 16 2 v 17 w(TIME)p Fq(.)d(This)j(infor-)75
+-1911 y(mation,)e(along)i(with)f(the)g(input)g(v)m(alues)g(and)h(the)f
+-(settings)g(for)h(all)e(the)h(relev)m(an)o(t)g(parameters)f(can)75
+-1974 y(b)q(e)i(written)f(to)h(either)f(the)h(screen)f(or)h(b)q(oth)h(the)e
+-(screen)h(and)g(a)g(designated)g(\014le)f(under)h(con)o(trol)g(of)75
+-2036 y(the)h Fg(ECHO)f Fq(parameter.)165 2098 y(Normally)f
+-Fm(Chaco)k Fq(asks)f(questions)f(in)o(teractiv)o(ely)l(,)d(but)k(if)f(y)o(ou)
+-g(are)h(piping)f(a)h(\014le)f(as)h(input,)75 2160 y(y)o(ou)12
+-b(ma)o(y)f(w)o(an)o(t)h(to)g(switc)o(h)g(the)g(prompts)f(o\013.)21
+-b(Y)l(ou)12 b(can)g(do)h(so)g(b)o(y)e(setting)h(the)g Fg(PROMPT)e
+-Fq(parameter)75 2223 y(to)17 b Fg(FALSE)p Fq(.)165 2285 y Fm(Chaco)d
+-Fq(can)g(also)f(write)g(an)h(output)g(\014le)e(con)o(taining)i(the)f
+-(partition)g(assignmen)o(ts.)19 b(Whether)75 2347 y(or)c(not)g(a)h(\014le)e
+-(is)g(generated)h(is)g(con)o(trolled)e(b)o(y)i(the)f(parameter)g
+-Fg(OUTPUT)p 1415 2347 V 16 w(ASSIGN)p Fq(,)e(as)k(discussed)e(in)75
+-2409 y Fh(x)p Fq(6.1.)29 b(There)19 b(are)g(t)o(w)o(o)f(assignmen)o(t)g
+-(\014le)g(formats)h(whic)o(h)f(are)h(the)f(same)g(as)h(the)g(input)f(formats)
+-75 2472 y(describ)q(ed)c(ab)q(o)o(v)o(e)h(in)f Fh(x)p Fq(5.3.)21
+-b(In)15 b(the)f(standard)i(output)g(format,)e(line)f Fj(i)i
+-Fq(con)o(tains)f(a)i(single)e(n)o(um)o(b)q(er)75 2534 y(indicating)k(the)h
+-(set)f(to)h(whic)o(h)g(v)o(ertex)e Fj(i)h Fq(is)h(assigned.)29
+-b(\(The)19 b(set)g(n)o(um)o(b)q(ers)e(b)q(egin)i(at)g(zero.\))28
+-b(In)75 2596 y(the)18 b(in)o(v)o(erted)d(format,)i(the)h(\014rst)g(line)f(of)
+-h(the)f(\014le)h(con)o(tains)f Fj(n)1250 2603 y Fi(0)1270 2596
+-y Fq(,)h(the)g(n)o(um)o(b)q(er)e(of)i(v)o(ertices)e(in)h(set)75
+-2659 y(0.)26 b(The)18 b(follo)o(wing)f Fj(n)477 2666 y Fi(0)515
+-2659 y Fq(lines)g(con)o(tain)h(the)f(v)o(ertices)f(assigned)i(to)h(set)e(0.)
+-26 b(The)18 b(next)f(line)g(has)i Fj(n)1887 2666 y Fi(1)1906
+-2659 y Fq(,)977 2762 y Fk(23)p eop
+-%%Page: 24 24
+-bop 75 43 a Fq(the)15 b(n)o(um)o(b)q(er)f(of)i(v)o(ertices)e(assigned)i(to)g
+-(set)f(1,)h(and)g(so)g(on.)22 b(This)16 b(in)o(v)o(erted)d(format)i(can)h(b)q
+-(e)f(useful)75 106 y(in)f(parallel)g(computing)f(applications)i(b)q(ecause)f
+-(the)h(v)o(ertices)d(o)o(wned)j(b)o(y)f(a)h(particular)f(pro)q(cessor)75
+-168 y(can)f(b)q(e)h(read)f(without)h(ha)o(ving)f(to)g(scan)h(the)f(en)o(tire)
+-f(assignmen)o(t)g(\014le.)19 b(If)13 b(y)o(ou)g(prefer)g(this)g(in)o(v)o
+-(erted)75 230 y(format,)i(set)h(the)g(parameter)f Fg(OUT)p
+-721 230 16 2 v 18 w(ASSIGN)p 895 230 V 16 w(INV)g Fq(to)i Fg(TRUE)d
+-Fq(\(nonzero\))j(as)g(discussed)f(in)g Fh(x)p Fq(6.1.)165 327
+-y Fm(6.)28 b(User{mo)r(di\014able)11 b(parameters.)22 b Fq(W)l(e)12
+-b(ha)o(v)o(e)g(collected)f(most)g(of)i(the)f(in)o(ternal)f(param-)75
+-389 y(eters)h(whic)o(h)f(con)o(trol)h(the)g(op)q(eration)h(of)f
+-Fm(Chaco)h Fq(in)o(to)f(the)g(\014le)f(\\user)p 1355 389 15
+-2 v 18 w(params.c")g(in)h(the)g(directory)75 451 y(\\co)q(de/main".)29
+-b(If)18 b(y)o(ou)h(wish)g(to)g(mo)q(dify)f(some)g(of)h(these)f(parameters)g
+-(y)o(ou)h(ha)o(v)o(e)f(t)o(w)o(o)h(options.)75 514 y(Y)l(ou)e(can)h(edit)e
+-(the)h(\014le)f(\\user)p 643 514 V 18 w(params.c")h(and)h(recompile)c(the)j
+-(co)q(de,)g(e\013ectiv)o(ely)e(c)o(hanging)i(the)75 576 y(default)k(v)m
+-(alues)373 558 y Fi(6)393 576 y Fq(.)37 b(Alternately)l(,)20
+-b(y)o(ou)h(can)h(mo)q(dify)e(the)h(v)m(alues)h(at)f(run)h(time)d(as)j
+-(describ)q(ed)f(in)75 638 y Fh(x)p Fq(6.10.)165 700 y(There)12
+-b(are)h(three)f(basic)g(t)o(yp)q(es)h(of)g(parameters,)f(those)h(that)g(con)o
+-(trol)f(output)h(t)o(yp)q(e)f(and)h(quan-)75 763 y(tit)o(y)l(,)g(those)h
+-(that)g(select)f(among)g(di\013eren)o(t)g(algorithmic)f(v)m(arian)o(ts)i(and)
+-h(those)f(whic)o(h)f(turn)h(on)g(and)75 825 y(o\013)g(additional)g
+-(functionalit)o(y)l(.)19 b(The)13 b(default)h(v)m(alues)f(for)h(the)f
+-(debugging)i(parameters)d(generate)i(a)75 887 y(minim)o(al)d(amoun)o(t)h(of)i
+-(output.)21 b(This)13 b(can)h(b)q(e)f(increased)g(or)h(in)f(some)f(cases)h
+-(decreased)g(as)h(desired.)75 949 y(The)f(defaults)h(for)f(the)h(execution)e
+-(parameters)g(w)o(ere)h(selected)f(to)i(pro)o(vide)e(a)i(reasonable)g
+-(balance)75 1012 y(b)q(et)o(w)o(een)h(run)h(time)d(and)j(qualit)o(y)f(of)h
+-(the)f(solution,)h(but)f(w)o(e)h(mak)o(e)d(no)j(claim)e(to)i(ha)o(ving)f
+-(selected)75 1074 y(them)j(optimally)g(for)i(y)o(our)g(problem.)31
+-b(The)20 b(default)g(setting)f(for)i(the)e(extended)g(functionalit)o(y)75
+-1136 y(parameters)i(is)g(o\013.)39 b(The)22 b(parameters)f(and)h(their)f
+-(functions)h(are)g(describ)q(ed)f(in)h(the)f(sections)75 1198
+-y(b)q(elo)o(w.)165 1295 y Fm(6.1.)27 b(Input)19 b(and)g(output)g(con)n(trol)f
+-(parameters.)75 1357 y Fg(CHECK)p 208 1357 16 2 v 17 w(INPUT)k
+-Fq(If)14 b Fg(TRUE)e Fq(\(nonzero\),)i(the)g(graph)h(and)g(input)e
+-(parameters)g(are)h(c)o(hec)o(k)o(ed)e(for)i(errors.)255 1420
+-y(Although)19 b(c)o(hec)o(king)f(the)h(graph)h(can)f(tak)o(e)f(a)i(few)f
+-(seconds)h(for)f(large)g(problems,)f(this)255 1482 y(feature)f(should)h
+-(probably)g(b)q(e)g(left)e(activ)o(e)g(\(the)i(default\))f(for)h(robustness.)
+-26 b(\(The)17 b(time)255 1544 y(sp)q(en)o(t)f(c)o(hec)o(king)e(will)g(b)q(e)i
+-(prin)o(ted)f(out)h(if)f(y)o(ou)h(set)f(the)h(parameter)e Fg(OUTPUT)p
+-1679 1544 V 17 w(TIME)g Fq(to)i(b)q(e)255 1606 y(greater)g(than)h(zero.\))128
+-1669 y Fg(ECHO)23 b Fq(This)e(parameter)e(con)o(trols)i(the)f(prin)o(ting)g
+-(of)h(the)f(input)g(v)m(alues)h(and)g(parameters,)f(as)255
+-1731 y(w)o(ell)14 b(as)i(whether)g(to)g(cop)o(y)f(these)g(v)m(alues)g(to)h(a)
+-g(\014le.)21 b(A)15 b(v)m(alue)g(of)h(0)g(induces)f(no)h(ec)o(hoing.)255
+-1793 y(If)k Fg(ECHO)f Fq(is)h(1)h(\(or)g Fh(\000)p Fq(1\),)g(the)f(input)h
+-(selections)e(will)h(b)q(e)g(ec)o(ho)q(ed)g(to)h(the)f(screen.)34
+-b(If)19 b(it)255 1855 y(is)j(2)h(\(or)f Fh(\000)p Fq(2\),)i(then)e(the)g
+-(relev)m(an)o(t)f(user)i(parameters)e(will)g(also)i(b)q(e)f(ec)o(ho)q(ed.)39
+-b(If)22 b(the)255 1918 y(v)m(alue)f(is)g(less)f(than)i(zero,)g(y)o(ou)e(will)
+-g(b)q(e)i(ask)o(ed)e(for)i(the)f(name)e(of)j(a)f(\014le)g(in)f(whic)o(h)h(to)
+-255 1980 y(record)g(the)h(results)f(of)h(a)g(run.)38 b(This)22
+-b(\014le)e(will)h(con)o(tain)g(the)h(same)e(input)i(selections)255
+-2042 y(and)i(parameters)e(that)h(are)g(copied)g(to)g(the)g(screen,)h(along)f
+-(with)g(partition)g(metrics)255 2104 y(\(con)o(trolled)14 b(b)o(y)h
+-Fg(OUTPUT)p 725 2104 V 17 w(METRICS)p Fq(\),)d(a)k(run)g(time)d(breakdo)o(wn)
+-j(a)g(run)f(time)f(breakdo)o(wn)255 2167 y(\(con)o(trolled)i(b)o(y)h
+-Fg(OUTPUT)p 729 2167 V 16 w(TIME)p Fq(\))f(and)i(an)o(y)f(w)o(arning)h(or)f
+-(error)h(messages)e(generated)i(b)o(y)255 2229 y(the)c(co)q(de.)20
+-b(Sa)o(ving)14 b(these)g(results)f(in)h(a)g(\014le)f(can)h(b)q(e)g(useful)g
+-(if)f(y)o(ou)h(are)f(doing)i(a)f(sequence)255 2291 y(of)j(runs)f(for)h(later)
+-f(analysis.)21 b(The)16 b(default)g(v)m(alue)g(is)g(2.)75 2354
+-y Fg(OUTPUT)p 234 2354 V 16 w(METRICS)22 b Fq(This)d(parameter)e(con)o(trols)
+-h(ho)o(w)h(m)o(uc)o(h)d(information)h(ab)q(out)j(the)e(qualit)o(y)f(of)255
+-2416 y(the)23 b(partition)h(will)f(b)q(e)g(computed)g(and)h(prin)o(ted)f
+-(out.)44 b(A)23 b(zero)g(v)m(alue)h(means)f(that)255 2478 y(no)16
+-b(ev)m(aluation)g(will)f(b)q(e)g(p)q(erformed)g(or)h(prin)o(ted.)k(A)15
+-b(negativ)o(e)g(v)m(alue)h(generates)f(output)255 2540 y(ab)q(out)e(eac)o(h)d
+-(set)i(instead)f(of)h(just)f(a)h(summary)d(of)j(minim)n(um)7
+-b(and)12 b(maxim)o(um)7 b(v)m(alues)k(o)o(v)o(er)p 75 2606
+-150 2 v 119 2635 a Ff(6)150 2650 y Fk(It)19 b(migh)o(t)e(b)q(e)i(pruden)o(t)h
+-(to)f(sa)o(v)o(e)g(a)f(cop)o(y)h(of)f(the)i(original)d(\014le)i(so)g(that)g
+-(y)o(ou)f(can)h(return)h(to)f(the)g(\\factory)75 2700 y(settings")13
+-b(easily)m(.)k(The)c(default)f(v)n(alues)g(quoted)h(in)f(the)i(text)f(assume)
+-f(no)g(c)o(hanges)i(ha)o(v)o(e)e(b)q(een)i(made)d(to)i(this)f(\014le.)977
+-2762 y(24)p eop
+-%%Page: 25 25
+-bop 255 43 a Fq(all)18 b(sets.)27 b(A)18 b(v)m(alue)g(of)g(1)h(\(or)f
+-Fh(\000)p Fq(1\))h(pro)q(duces)f(information)g(ab)q(out)h(the)f(\014nal)g
+-(partition.)255 106 y(If)i(y)o(ou)g(are)h(partitioning)g(for)f(a)h(h)o(yp)q
+-(ercub)q(e,)g(a)g(v)m(alue)f(of)h(2)g(\(or)g Fh(\000)p Fq(2\))g(generates)f
+-(data)255 168 y(ab)q(out)13 b(all)d(the)h(in)o(termediate)e(partitions)i(for)
+-h(smaller)d(h)o(yp)q(ercub)q(es)i(that)h(w)o(ere)e(implicitl)o(y)255
+-230 y(generated)24 b(in)f(the)g(pro)q(cess.)44 b(The)24 b(meanings)f(of)h
+-(the)f(v)m(arious)h(output)h(metrics)c(are)255 292 y(describ)q(ed)16
+-b(in)g Fh(x)p Fq(5.5.)21 b(The)c(default)e(v)m(alue)h(is)h(2.)75
+-355 y Fg(OUTPUT)p 234 355 16 2 v 16 w(TIME)23 b Fq(This)15
+-b(v)m(alue)f(determines)e(ho)o(w)j(m)o(uc)o(h)e(information)g(gets)i(prin)o
+-(ted)e(ab)q(out)j(the)f(run-)255 417 y(time)f(of)h Fm(Chaco)p
+-Fq(.)22 b(A)15 b(v)m(alue)h(of)g(0)g(means)f(that)h(nothing)g(is)f(prin)o
+-(ted,)g(and)h(v)m(alues)g(of)g(1)g(or)255 479 y(2)h(allo)o(w)f(for)g
+-(increasingly)f(detailed)h(timing)e(output.)22 b(The)16 b(default)g(v)m(alue)
+-g(is)g(2.)75 541 y Fg(OUTPUT)p 234 541 V 16 w(ASSIGN)22 b Fq(If)f(this)f(v)m
+-(alue)h(is)f Fg(TRUE)p Fq(,)f(y)o(ou)h(will)g(b)q(e)h(prompted)e(for)i(the)g
+-(name)e(of)i(a)g(\014le)f(in)255 604 y(whic)o(h)g(the)g(v)o(ertex)e
+-(assignmen)o(t)h(will)h(b)q(e)g(prin)o(ted.)32 b(A)20 b(description)g(of)g
+-(the)g(format)g(of)255 666 y(this)d(output)h(\014le)f(can)h(b)q(e)f(found)h
+-(in)f Fh(x)p Fq(5.5.)25 b(The)18 b(default)f(for)g(this)g(parameter)g(is)g
+-Fg(FALSE)255 728 y Fq(\(zero\).)75 791 y Fg(OUT)p 156 791 V
+-17 w(ASSIGN)p 329 791 V 17 w(INV)23 b Fq(If)17 b Fg(OUTPUT)p
+-653 791 V 16 w(ASSIGN)e Fq(is)i Fg(TRUE)e Fq(so)j(y)o(ou)f(are)g(writing)g
+-(an)h(assignmen)o(t)e(\014le,)g(then)255 853 y(this)f(parameter)f(con)o
+-(trols)h(the)g(format)g(of)g(that)h(\014le.)k(In)15 b(the)g(standard)h
+-(output)g(format,)255 915 y(line)e Fj(i)h Fq(of)g(the)g(\014le)g(con)o(tains)
+-g(the)g(set)g(to)g(whic)o(h)g(v)o(ertex)f Fj(i)g Fq(is)h(assigned.)22
+-b(In)15 b(some)f(settings)255 977 y(it)g(is)h(preferable)f(to)h(use)f(an)i
+-(in)o(v)o(erted)c(format)i(in)h(whic)o(h)f(all)g(the)h(v)o(ertices)d(in)j
+-(set)f(0)i(come)255 1040 y(\014rst,)g(follo)o(w)o(ed)g(b)o(y)g(all)g(those)g
+-(in)g(set)h(1,)f(etc.)21 b(If)16 b(y)o(ou)g(prefer)g(this)g(in)o(v)o(erted)f
+-(format,)g(y)o(ou)255 1102 y(should)20 b(set)f Fg(OUT)p 573
+-1102 V 18 w(ASSIGN)p 747 1102 V 16 w(INV)f Fq(to)i(b)q(e)f
+-Fg(TRUE)p Fq(,)f(in)h(whic)o(h)g(case)g(the)g(assignmen)o(t)g(will)f(b)q(e)
+-255 1164 y(prin)o(ted)d(in)g(the)g(format)f(describ)q(ed)h(at)h(the)f(end)g
+-(of)h Fh(x)p Fq(5.5.)21 b(The)16 b(default)f(v)m(alue)g(is)g
+-Fg(FALSE)p Fq(,)255 1226 y(corresp)q(onding)i(to)g(the)f(standard)h(format.)
+-75 1289 y Fg(IN)p 130 1289 V 18 w(ASSIGN)p 304 1289 V 16 w(INV)23
+-b Fq(If)e(y)o(ou)f(are)h(reading)g(an)h(assignmen)o(t)d(from)h(a)h(\014le,)g
+-(then)g(the)f(\014le)h(should)g(b)q(e)255 1351 y(in)e(one)g(of)h(the)f(t)o(w)
+-o(o)g(formats)g(describ)q(ed)g(in)g Fh(x)p Fq(5.3.)31 b(In)19
+-b(the)g(standard)h(format,)f(the)g Fj(i)p Fq(th)255 1413 y(uncommen)o(ted)9
+-b(line)i(con)o(tains)h(the)g(set)h(to)f(whic)o(h)g(v)o(ertex)e
+-Fj(i)i Fq(is)g(assigned.)21 b(In)12 b(the)g(in)o(v)o(erted)255
+-1475 y(format,)19 b(all)f(the)h(v)o(ertices)e(in)i(set)g(0)h(are)f(sp)q
+-(eci\014ed)f(\014rst,)i(follo)o(w)o(ed)e(b)o(y)h(those)g(in)g(set)g(1,)255
+-1538 y(and)f(so)h(on.)25 b(If)18 b Fg(IN)p 609 1538 V 17 w(ASSIGN)p
+-782 1538 V 17 w(INV)e Fq(is)h Fg(FALSE)f Fq(\(the)i(default\))f(then)g(the)h
+-(standard)h(format)255 1600 y(is)d(assumed.)21 b(If)15 b(set)i(to)f
+-Fg(TRUE)f Fq(the)h(the)g(in)o(v)o(erted)e(format)i(is)g(exp)q(ected.)77
+-1662 y Fg(PROMPT)22 b Fm(Chaco)16 b Fq(assumes)f(y)o(ou)h(are)f(answ)o(ering)
+-h(the)g(input)f(questions)g(in)o(teractiv)o(ely)l(.)j(Ho)o(w)o(ev)o(er,)255
+-1725 y(if)d(y)o(ou)h(are)g(piping)f(a)h(\014le)g(in)o(to)f
+-Fm(Chaco)p Fq(,)h(it)f(ma)o(y)g(b)q(e)h(more)e(aesthetic)h(to)h(skip)g(the)f
+-(input)255 1787 y(questions.)28 b(Setting)18 b Fg(PROMPT)e
+-Fq(to)j Fg(FALSE)e Fq(k)o(eeps)g(the)h(co)q(de)h(from)e(explicitly)f(asking)j
+-(for)255 1849 y(inputs.)i(The)c(default)e(is)i Fg(TRUE)p Fq(.)75
+-1911 y Fg(PRINT)p 208 1911 V 17 w(HEADERS)k Fq(This)f(parameter)d(con)o
+-(trols)i(whether)g(or)g(not)h(titles)e(are)h(prin)o(ted)f(for)h(the)g(dif-)
+-255 1974 y(feren)o(t)c(sections)h(of)h(output.)22 b(The)16
+-b(default)g(v)m(alue)g(is)g Fg(TRUE)p Fq(.)165 2070 y Fm(6.2.)27
+-b(Eigen)n(v)n(ector)18 b(calculation)f(parameters.)75 2132
+-y Fg(LANCZOS)p 260 2132 V 16 w(TYPE)23 b Fq(If)e(y)o(ou)h(are)g(using)g(a)h
+-(sp)q(ectral)f(partitioning)g(metho)q(d)f(or)h(the)g(m)o(ultilev)n(el)o({KL)
+-255 2195 y(metho)q(d,)e(Lanczos)h(is)g(used)f(at)h(some)e(p)q(oin)o(t)i(as)g
+-(an)f(eigen)g(solv)o(er.)33 b(\(The)20 b(m)o(ultilev)n(el{)255
+-2257 y(KL)i(metho)q(d)f(uses)h(Lanczos)g(to)g(generate)g(a)g(sp)q(ectral)f
+-(partitioning)h(of)g(the)f(coarsest)255 2319 y(grid,)c(and)h(the)f(R)o
+-(QI/Symmlq)d(eigen)j(solv)o(er)f(also)i(uses)g(Lanczos)g(on)g(the)f(the)g
+-(coarsest)255 2382 y(graph.\))39 b(A)21 b(discussion)h(of)g(the)f(relativ)o
+-(e)f(merits)g(of)i(the)g(di\013eren)o(t)f(metho)q(ds)g(can)h(b)q(e)255
+-2444 y(found)c(in)f Fh(x)p Fq(3.3.)25 b(A)17 b(v)m(alue)g(of)g(1)h(selects)e
+-(full)h(orthogonalization,)h(a)g(v)m(alue)f(of)h(2)f(c)o(ho)q(oses)255
+-2506 y(full)10 b(orthogonalization)j(with)d(the)h(in)o(v)o(erse)f(op)q
+-(erator,)j(and)e(a)h(v)m(alue)f(of)g(3)g(selects)g(selectiv)o(e)255
+-2568 y(orthogonalization)17 b(The)g(default)f(v)m(alue)g(is)g(3.)75
+-2631 y Fg(EIGEN)p 208 2631 V 17 w(TOLERANCE)21 b Fq(This)16
+-b(one)g(probably)h(deserv)o(es)e(its)h(o)o(wn)g(short)h(pap)q(er.)22
+-b(All)15 b(w)o(e)h(can)g(do)h(here)255 2693 y(is)12 b(mak)o(e)e(a)j(few)f
+-(general)g(remarks)f(and)h(urge)h(caution.)20 b(If)12 b(y)o(ou)g(are)g(using)
+-g(a)h(pure)f(sp)q(ectral)977 2762 y Fk(25)p eop
+-%%Page: 26 26
+-bop 255 43 a Fq(metho)q(d)17 b(or)i(the)f(m)o(ultile)o(v)o(e)o(l{KL)e
+-(partitioning)i(metho)q(d)f(then)h(y)o(ou)g(need)g(to)g(calculate)255
+-106 y(eigen)o(v)o(ectors.)30 b(This)19 b(parameter)g(con)o(trols)g(ho)o(w)h
+-(accurately)f(y)o(ou)h(compute)e(them.)29 b(If)255 168 y(y)o(ou)17
+-b(are)g(using)h(one)f(of)g(the)g(Lanczos)h(metho)q(ds)f(and)g
+-Fg(LANCZOS)p 1454 168 16 2 v 16 w(CONVERGENC)o(E)p 1755 168
+-V 16 w(MODE)e Fq(is)255 230 y(set)g(to)g(0,)g(then)g Fg(EIGEN)p
+-684 230 V 16 w(TOLERANCE)d Fq(is)i(a)h(tolerance)g(on)g(the)g(eigen)f
+-(residual)g Fh(jj)p Fj(Au)8 b Fh(\000)g Fj(\025u)p Fh(jj)255
+-292 y Fq(where)17 b(\()p Fj(\025;)8 b(u)p Fq(\))18 b(is)g(the)f(eigen)g(pair)
+-h(of)g Fj(A)f Fq(in)h(question.)25 b(Similarly)l(,)15 b(if)i(y)o(ou)g(are)h
+-(using)g(the)255 355 y(m)o(ultilev)n(el)7 b(R)o(QI/Symml)o(q)h(metho)q(d)i
+-(to)h(compute)f(eigen)o(v)o(ectors)f(and)i Fg(RQI)p 1628 355
+-V 17 w(CONVERGENCE)p 1930 355 V 15 w(MODE)255 417 y Fq(is)16
+-b(set)h(to)g(0,)g(the)f(eigen)g(residual)h(is)f(used)h(in)f(the)h(con)o(v)o
+-(ergence)e(test.)22 b(If)17 b(a)g(con)o(v)o(ergence)255 479
+-y(mo)q(de)11 b(\015ag)i(is)f(set)g(to)g(1)h(then)e(the)h(con)o(v)o(ergence)f
+-(of)h(the)g(corresp)q(onding)h(iterativ)o(e)d(metho)q(d)255
+-541 y(is)19 b(instead)f(monitored)g(with)g(resp)q(ect)h(to)g(the)f
+-Fd(p)n(artition)h Fq(residual.)28 b(That)19 b(is,)g(the)g(iter-)255
+-604 y(ation)k(pauses)g(p)q(erio)q(dically)e(and)i(a)g(partition)g(is)f
+-(computed)f(based)i(on)g(the)f(curren)o(t)255 666 y(appro)o(ximation)15
+-b(to)h(the)g(eigen)o(v)o(ector.)j(When)d(the)g(c)o(hange)g(in)f(partition)h
+-(cut)g(size)f(since)255 728 y(the)k(last)h(pause)g(is)f(less)h(than)g
+-Fg(EIGEN)p 973 728 V 16 w(TOLERANCE)d Fq(times)g(the)j(n)o(um)o(b)q(er)d(of)j
+-(graph)h(v)o(er-)255 791 y(tices,)14 b(the)h(eigen)o(v)o(ector)f(computation)
+-g(terminates.)19 b(These)c(latter)g(mo)q(des)g(pro)o(vide)f(the)255
+-853 y(abilit)o(y)f(to)i(automatically)e(c)o(ho)q(ose)j(the)e(accuracy)g(of)h
+-(the)g(eigen)o(v)o(ector)e(computation)h(to)255 915 y(ac)o(hiev)o(e)g(an)o(y)
+-i(lev)o(el)f(of)h(stabilit)o(y)f(in)h(partition)g(qualit)o(y)l(.)255
+-977 y(An)23 b(extremely)e(accurate)i(eigen)o(v)o(ector)f(computation)h(is)h
+-(exp)q(ensiv)o(e,)f(and)i(probably)255 1040 y(unnecessary)l(,)15
+-b(particularly)h(if)f(y)o(ou)h(are)g(using)h(Kernighan{Lin)f(to)h(re\014ne)e
+-(the)h(sp)q(ectral)255 1102 y(partition.)k(Ho)o(w)o(ev)o(er,)10
+-b(in)i(general)g(the)g(qualit)o(y)e(of)j(the)f(partition)g(gradually)g
+-(degrades)g(as)255 1164 y(the)i(accuracy)g(is)h(reduced)f(b)q(elo)o(w)g(some)
+-g(critical)e(p)q(oin)o(t.)21 b(This)15 b(can)g(b)q(e)f(a)h(result)f(of)h
+-(inac-)255 1226 y(curacy)c(in)h(the)f(eigen)o(v)o(ector,)f(or)i(it)f(ma)o(y)g
+-(b)q(e)g(b)q(ecause)h(the)g(eigen)f(solv)o(er)g(has)h(con)o(v)o(erged)f(to)
+-255 1289 y(an)i(en)o(tirely)e(wrong)j(eigen)f(pair.)20 b(This)13
+-b(latter)f(phenomenon)h(of)g(miscon)o(v)o(ergence)d(o)q(ccurs)255
+-1351 y(quite)k(frequen)o(tly)f(if)h(y)o(ou)h(use)g(to)q(o)h(large)e(an)i
+-(eigen)e(tolerance)g(b)q(ecause)h(there)g(are)f(man)o(y)255
+-1413 y(eigen)o(v)m(alues)19 b(in)g(an)o(y)g(in)o(terv)m(al)g(of)h(that)g
+-(width.)31 b(So)20 b(to)g(b)q(e)g(really)f(correct)g(one)h(should)255
+-1475 y(probably)15 b(relate)g(the)g(eigen)f(tolerance)h(to)g(the)g(exp)q
+-(ected)f(gap)i(b)q(et)o(w)o(een)e(eigen)o(v)m(alues)g(in)255
+-1538 y(the)k(relev)m(an)o(t)f(p)q(ortion)h(of)h(the)e(sp)q(ectrum)g(using,)h
+-(for)g(example,)e(the)i(graph)g(size.)26 b(But,)255 1600 y(as)20
+-b(discussed)f(earlier)f(in)h Fh(x)q Fq(3,)h(sligh)o(t)e(miscon)o(v)o(ergence)
+-e(is)k(not)f(a)h(gra)o(v)o(e)f(problem)f(since)255 1662 y(miscon)o(v)o(erged)
+-h(eigen)o(v)o(ectors)g(often)i(giv)o(e)f(go)q(o)q(d)j(partitions.)36
+-b(The)21 b(m)o(ultidim)o(ensional)255 1725 y(sp)q(ectral)e(metho)q(ds)g(do)g
+-(in)g(general)g(require)f(somewhat)g(higher)h(accuracy)g(than)h(sp)q(ec-)255
+-1787 y(tral)c(bisection)f(to)i(p)q(erform)e(at)h(their)f(b)q(est.)22
+-b(Apart)16 b(from)f(this,)g(ho)o(w)o(ev)o(er,)f(the)i(question)255
+-1849 y(of)d(the)f(appropriate)h(eigen)e(tolerance)h(and)h(risk)f(of)g(miscon)
+-o(v)o(ergence)d(is)k(more)e(a)h(question)255 1911 y(of)h(b)q(eing)f(able)g
+-(to)h(repro)q(duce)f(partitions)h(reliably)d(and)j(of)g(ha)o(ving)f(a)h(fair)
+-f(basis)h(on)g(whic)o(h)255 1974 y(to)18 b(compare)f(eigen)h(solv)o(ers.)26
+-b Fm(Chaco)p Fq('s)19 b(design)f(philosoph)o(y)g(here)f(is)h(that)h(y)o(ou)f
+-(should)255 2036 y(get)23 b(the)g(accuracy)f(y)o(ou)h(request,)h(and,)h
+-(failing)d(that,)j(y)o(ou)e(should)g(b)q(e)g(w)o(arned)g(and)255
+-2098 y(told)18 b(the)h(accuracy)f(y)o(ou)g(did)g(get.)28 b(W)l(e)18
+-b(feel)f(the)h(largest)h(v)m(alue)f(of)h Fg(EIGEN)p 1676 2098
+-V 16 w(TOLERANCE)255 2160 y Fq(that)g(is)g(advisable)g(for)g(general)g(use)g
+-(is)g(ab)q(out)h(10)1208 2142 y Fo(\000)p Fi(3)1256 2160 y
+-Fq(,)f(and)h(that)f(is)g(what)h(w)o(e)e(ship)h(the)255 2223
+-y(co)q(de)g(with.)28 b(If)19 b(y)o(ou)f(are)h(really)f(pressed)g(for)h(sp)q
+-(eed)g(and)g(are)g(using)g(a)g(lo)q(cal)g(clean{up)255 2285
+-y(phase,)g(a)f(v)m(alue)g(of)g(10)682 2267 y Fo(\000)p Fi(2)748
+-2285 y Fq(migh)o(t)f(b)q(e)h(reasonable.)27 b(A)o(t)18 b(the)g(other)g
+-(extreme,)d(a)k(v)m(alue)f(of)255 2347 y(10)303 2329 y Fo(\000)p
+-Fi(6)368 2347 y Fq(should)g(pro)o(v)o(e)f(acceptably)g(tigh)o(t)g(in)g(most)g
+-(situations)h(|)f(if)g(y)o(ou're)g(w)o(orking)h(on)255 2409
+-y(a)h(graph)h(large)f(enough)g(to)h(require)d(higher)i(accuracy)l(,)f(y)o(ou)
+-h(should)g(probably)h(switc)o(h)255 2472 y(to)e(the)f(m)o(ultilev)n(el{KL)e
+-(partitioning)j(metho)q(d,)e(whic)o(h)h(for)h(large)g(problems)e(generally)
+-255 2534 y(giv)o(es)g(b)q(etter)f(answ)o(ers)i(in)f(less)g(time.)75
+-2596 y Fg(SRESTOL)22 b Fq(If)17 b(this)h(parameter)f(is)g(non-negativ)o(e)h
+-(and)h(the)e(residual)h(encoun)o(tered)f(at)h(the)g(end)g(of)255
+-2659 y(the)j(recurrence)f(used)h(to)g(compute)f(the)h(eigen)o(v)o(ector)e(of)
+-j(the)e(tridiagonal)i(matrix)d(in)977 2762 y Fk(26)p eop
+-%%Page: 27 27
+-bop 255 43 a Fq(Lanczos)15 b(is)f(greater)g(than)g(it,)g(a)g(corresp)q
+-(onding)h(set)f(of)g(w)o(arning)h(conditions)f(is)f(\015agged.)255
+-106 y(\(See)18 b(discussion)g(of)g Fg(WARNING)p 835 106 16
+-2 v 16 w(EVECS)p Fq(.\))e(If)i(this)g(parameter)e(is)i(negativ)o(e,)g(the)f
+-(residual)255 168 y(tolerance)h(for)g(the)h(eigen)o(v)o(ector)d(of)j(the)f
+-(tridiagonal)h(matrix)d(is)j(automatically)d(set)j(to)255 230
+-y(the)d(square)f(of)h Fg(EIGEN)p 679 230 V 17 w(TOLERANCE)p
+-Fq(.)c(The)k(default)f(v)m(alue)h(is)f(-1,)h(so)h(the)e(tolerance)h(is)f(set)
+-255 292 y(automatically)l(.)20 b(If)c(y)o(ou)g(are)h(frequen)o(tly)d(w)o
+-(arned)j(that)g(the)f(tolerance)g(on)h(this)f(compu-)255 355
+-y(tation)e(is)f(not)i(ac)o(hiev)o(ed)c(and)k(y)o(ou)e(are)h(not)g(getting)g
+-(the)f(o)o(v)o(erall)f(Lanczos)j(accuracy)e(y)o(ou)255 417
+-y(ha)o(v)o(e)g(requested,)g(try)g(increasing)h Fg(BISECTION)p
+-1135 417 V 15 w(SAFETY)p Fq(.)d(If)i(y)o(ou)h(get)g(frequen)o(t)e(w)o
+-(arnings)255 479 y(ab)q(out)20 b Fg(SRESTOL)c Fq(and)k(y)o(ou)f(are)g(ac)o
+-(hieving)e(the)i(Lanczos)h(accuracy)e(y)o(ou)h(w)o(an)o(t,)g(either)255
+-541 y(sp)q(ecify)10 b(a)i(v)m(alue)e(of)i(SRESTOL)g(whic)o(h)e(is)h(lo)q
+-(oser)g(\(bigger\))g(than)h(the)e(square)i(of)f(the)g(eigen)255
+-604 y(tolerance,)17 b(or)h(\(if)g(the)f(w)o(arnings)i(b)q(other)f(y)o(ou\))g
+-(reduce)f(the)g(v)m(alue)h(of)g Fg(WARNING)p 1779 604 V 16
+-w(EVECS)255 666 y Fq(appropriately)l(.)75 728 y Fg(LANCZOS)p
+-260 728 V 16 w(SO)p 328 728 V 18 w(INTERVAL)j Fq(If)15 b(y)o(ou)g(are)h
+-(using)g(the)f(selectiv)o(e)e(orthogonalization)k(v)m(arian)o(t)e(of)h(Lanc-)
+-255 791 y(zos,)g(then)f(the)g(con)o(v)o(ergence)f(of)i(the)f(pro)q(cess)h(is)
+-g(c)o(hec)o(k)o(ed)d(indirectly)g(through)k(the)e(Ritz)255
+-853 y(pairs)i(ev)o(ery)e(few)h(steps.)22 b(The)17 b(n)o(um)o(b)q(er)e(of)h
+-(Lanczos)i(iterations)e(b)q(et)o(w)o(een)g(c)o(hec)o(ks)f(is)h(set)255
+-915 y(b)o(y)f(the)g(v)m(alue)h(of)f(this)h(parameter.)k(Cho)q(osing)d(a)f
+-(large)f(v)m(alue)h(will)e(generally)h(mak)o(e)e(the)255 977
+-y(computation)g(run)i(marginally)d(faster,)j(but)f(increases)g(the)g(risk)f
+-(of)i(degraded)f(accuracy)255 1040 y(or)22 b(miscon)o(v)o(ergence)c(and)k(ma)
+-o(y)e(therefore)h(actually)g(increase)g(run)g(time.)35 b(A)21
+-b(smaller)255 1102 y(v)m(alue)14 b(is)g(more)f(robust)i(since)e(n)o(umerical)
+-f(breakdo)o(wn)i(due)g(to)h(the)f(con)o(v)o(ergence)e(of)j(Ritz)255
+-1164 y(pairs)g(will)f(b)q(e)h(detected)f(so)q(oner.)22 b(If)14
+-b(y)o(ou)h(encoun)o(ter)f(con)o(v)o(ergence)g(problems)f(while)h(us-)255
+-1226 y(ing)g(selectiv)o(e)e(orthogonalization,)j(try)f(reducing)g(this)g
+-(parameter.)19 b(Due)14 b(to)h(the)f(details)255 1289 y(of)j(the)f
+-(orthogonalization)i(pro)q(cedure,)e(a)g(v)m(alue)h(of)f(1)h(will)e(cause)i
+-(redundan)o(t)f(w)o(ork,)g(so)255 1351 y(the)g(minim)n(um)c(sensible)k(v)m
+-(alue)g(is)g(2;)g(the)g(default)g(is)g(10.)75 1413 y Fg(LANCZOS)p
+-260 1413 V 16 w(MAXITNS)22 b Fq(If)c(this)g(parameter)f(is)i(set)f(to)h(a)g
+-(non-negativ)o(e)g(in)o(teger,)e(Lanczos)j(will)d(ter-)255
+-1475 y(minate)f(at)h(that)h(n)o(um)o(b)q(er)d(of)j(iterations.)24
+-b(If)17 b(it)g(has)h(a)f(negativ)o(e)g(v)m(alue,)g(the)g(maxim)n(um)255
+-1538 y(n)o(um)o(b)q(er)e(of)h(Lanczos)i(iterations)e(will)f(b)q(e)h(set)h
+-(automatically)d(to)j(t)o(wice)e(the)h(n)o(um)o(b)q(er)f(of)255
+-1600 y(v)o(ertices)g(in)i(the)f(graph,)i Fd(i.e.)42 b Fq(it)16
+-b(will)g(b)q(e)h(2)p Fj(n)p Fq(,)g(where)g Fj(n)g Fq(is)g(the)f(order)h(of)h
+-(the)e(matrix)f(in)255 1662 y(the)g(eigen)g(system.)k(Except)c(in)g(rare)g
+-(circumstances)e(Lanczos)j(will)e(con)o(v)o(erge)h(b)q(efore)g
+-Fj(n)255 1725 y Fq(iterations,)k(so)h(this)f(autoset)h(feature)f(in)g
+-(practice)f(means)g(that)i(Lanczos)g(will)e(iterate)255 1787
+-y(un)o(til)d(it)h(con)o(v)o(erges)f(to)i(tolerance.)k(The)16
+-b(default)g(is)g(-1)h(for)f(autoset.)75 1849 y Fg(BISECTION)p
+-312 1849 V 15 w(SAFETY)22 b Fq(In)15 b(Lanczos)h(some)e(of)i(the)e(extremal)f
+-(eigen)o(v)m(alues)h(of)h(the)g(tridiagonal)h(ma-)255 1911
+-y(trix)j(m)o(ust)g(b)q(e)h(found)g(p)q(erio)q(dically)l(.)31
+-b(If)20 b(the)f(n)o(um)o(b)q(er)f(of)j(eigen)o(v)m(alues)d(to)j(b)q(e)f
+-(found)g(is)255 1974 y(small,)14 b(a)j(bisection)f(algorithm)f(is)h(used)h
+-(to)g(\014nd)g(ro)q(ots)g(of)g(the)f(Sturm)f(sequence)h(whic)o(h)255
+-2036 y(corresp)q(ond)g(to)g(the)f(eigen)o(v)m(alues.)20 b(This)15
+-b(parameter)f(ampli\014es)f(or)j(shrinks)f(the)g(con)o(v)o(er-)255
+-2098 y(gence)j(tolerance)g(on)h(the)f(bisection)f(algorithm.)27
+-b(A)18 b(higher)g(v)m(alue)g(sp)q(eci\014es)g(a)h(tigh)o(ter)255
+-2160 y(\(smaller\))12 b(tolerance)h(and)i(results)f(in)f(more)g(accurate)h
+-(computation)f(of)h(these)g(eigen)o(v)m(al-)255 2223 y(ues,)i(but)h(a)g
+-(sligh)o(tly)e(longer)h(run)h(time.)j(If)c(the)g(co)q(de)h(encoun)o(ters)f(n)
+-o(umerical)d(accuracy)255 2285 y(problems)18 b(it)i(thinks)f(are)h(related)f
+-(to)h(accuracy)f(of)h(the)f(eigen)o(v)m(alues)g(of)h(the)f(tridiago-)255
+-2347 y(nal,)c(it)g(will)g(dynamically)e(increase)h(the)i(ampli\014cation)e
+-(of)h(the)h(con)o(v)o(ergence)e(tolerance)255 2409 y(for)21
+-b(the)g(bisection)f(computation)h(b)o(y)f(some)g(m)o(ultiplicativ)n(e)e
+-(factor.)36 b(The)21 b(next)f(time)255 2472 y(Lanczos)e(is)f(in)o(v)o(ok)o
+-(ed)e(the)i(ampli\014cation)e(is)i(reset)g(to)g Fg(BISECTION)p
+-1512 2472 V 15 w(SAFETY)p Fq(,)e(whic)o(h)h(has)255 2534 y(a)h(default)f(v)m
+-(alue)g(of)g(10.)75 2596 y Fg(LANCZOS)p 260 2596 V 16 w(CONVERGENC)o(E)p
+-561 2596 V 15 w(MODE)23 b Fq(If)d(the)f(co)q(de)h(is)g(p)q(erforming)e(sp)q
+-(ectral)i(bisection)f(and)i(this)e(pa-)255 2659 y(rameter)d(is)h(set)g(to)g
+-(1,)h(the)f(con)o(v)o(ergence)e(of)j(the)f(Lanczos)h(iteration)f(is)g
+-(determined)e(b)o(y)977 2762 y Fk(27)p eop
+-%%Page: 28 28
+-bop 255 43 a Fq(monitoring)12 b(con)o(v)o(ergence)g(of)i(the)f(partition)g
+-(rather)g(than)h(the)f(eigen)g(residual.)20 b(A)o(t)13 b(eac)o(h)255
+-106 y(Lanczos)19 b(pause)g(an)g(appro)o(ximate)f(eigen)o(v)o(ector)e(is)i
+-(computed)g(and)h(used)f(to)h(generate)255 168 y(the)d(curren)o(t)f
+-(partition.)21 b(If)15 b(the)h(partition)g(has)h(c)o(hanged)f(less)f(than)i
+-Fg(EIGEN)p 1676 168 16 2 v 16 w(TOLERANCE)255 230 y Fq(times)j(the)h(n)o(um)o
+-(b)q(er)e(of)j(v)o(ertices,)f(the)g(iteration)g(is)g(considered)g(con)o(v)o
+-(erged.)36 b(This)21 b(is)255 292 y(useful)16 b(if)f(y)o(ou)h(w)o(an)o(t)g
+-(to)g(determine)e(the)h(accuracy)h(of)g(the)g(eigen)o(v)o(ector)e(in)i(an)g
+-(adaptiv)o(e)255 355 y(w)o(a)o(y)l(.)32 b(F)l(or)20 b(example,)e(y)o(ou)h(ma)
+-o(y)g(w)o(an)o(t)g(to)i(iterate)e(un)o(til)f(the)i(p)q(oin)o(t)g(at)g(whic)o
+-(h)f(further)255 417 y(iteration)14 b(will)f(not)h(c)o(hange)h(the)e
+-(partition.)21 b(Computing)14 b(eigen)o(v)o(ector)e(appro)o(ximations)255
+-479 y(frequen)o(tly)f(within)i(Lanczos)h(is,)f(ho)o(w)o(ev)o(er,)f(v)o(ery)g
+-(exp)q(ensiv)o(e)g(b)q(ecause)i(it)e(requires)g(a)i(sum)255
+-541 y(across)h(all)f(the)g(curren)o(t)g(Lanczos)h(basis)g(v)o(ectors.)k(W)l
+-(e)c(therefore)e(recommend)e(that)k(y)o(ou)255 604 y(generally)22
+-b(lea)o(v)o(e)g(this)h(parameter)g(in)g(its)g(default)g(state)g(of)h(0)g(so)g
+-(that)g(con)o(v)o(ergence)255 666 y(will)18 b(b)q(e)h(ev)m(aluated)g(in)g
+-(the)g(normal)f(w)o(a)o(y)h(b)o(y)g(comparing)f(the)h(eigen)f(residual)h
+-(against)255 728 y(the)c(eigen)g(tolerance.)21 b Fd(Note)c(that)g(when)h
+-(using)g(sp)n(e)n(ctr)n(al)e(quadrise)n(ction)h(or)f(o)n(ctase)n(ction)255
+-791 y(ther)n(e)h(is)h(no)f(choic)n(e)h(|)g(c)n(onver)n(genc)n(e)h(mo)n(de)e
+-(0)g(wil)r(l)i(b)n(e)f(use)n(d.)75 853 y Fg(RQI)p 156 853 V
+-17 w(CONVERGENCE)p 458 853 V 15 w(MODE)23 b Fq(This)11 b(parameter)e(pla)o
+-(ys)i(the)f(same)g(role)h(as)g Fg(LANCZOS)p 1575 853 V 16 w(CONVERGENC)o(E)p
+-1876 853 V 15 w(MODE)p Fq(,)255 915 y(but)20 b(in)f(the)g(R)o(QI/Symml)o(q)e
+-(con)o(text.)30 b(If)19 b(it)g(is)h(set)f(to)h(0,)g(R)o(QI)f(con)o(v)o
+-(ergence)f(happ)q(ens)255 977 y(when)f(the)g(eigen)g(residual)g(is)g(less)g
+-(than)h Fg(EIGEN)p 1166 977 V 17 w(TOLERANCE)o Fq(.)c(If)j(the)g(parameter)f
+-(is)h(set)255 1040 y(to)d(1)h(an)g(additional)f(c)o(hec)o(k)e(is)i(in)o(v)o
+-(ok)o(ed)e(based)j(on)f(whether)g(the)g(partition)g(has)h(c)o(hanged)255
+-1102 y(since)f(the)g(last)h(step)f(b)o(y)g(less)h(than)g Fg(EIGEN)p
+-1047 1102 V 16 w(TOLERANCE)d Fq(times)g(the)j(n)o(um)o(b)q(er)d(of)j(v)o
+-(ertices.)255 1164 y(Since)g(R)o(QI)h(is)g(computing)f(a)i(new)f(appro)o
+-(ximation)f(to)i(the)f(eigen)o(v)o(ector)e(on)j(eac)o(h)e(step,)255
+-1226 y(this)h(additional)g(con)o(v)o(ergence)e(c)o(hec)o(k)g(is)i(relativ)o
+-(ely)e(economical.)19 b(And,)c(since)h(the)f(par-)255 1289
+-y(tition)j(often)h(con)o(v)o(erges)g(to)g(reasonable)g(accuracy)g(b)q(efore)g
+-(the)f(eigen)o(v)o(ector)g(do)q(es,)h(w)o(e)255 1351 y(ha)o(v)o(e)g(made)g
+-(con)o(v)o(ergence)f(mo)q(de)h(1)h(the)f(default.)32 b Fd(If)20
+-b(you)h(ar)n(e)f(c)n(omp)n(aring)g(run)h(times)255 1413 y(of)d(L)n(anczos)f
+-(and)h(R)o(QI/Symmlq)g(you)f(should,)h(to)g(b)n(e)h(fair,)e(use)h(the)g(same)
+-g(c)n(onver)n(genc)n(e)255 1475 y(mo)n(des)f(for)g(b)n(oth.)75
+-1538 y Fg(LANCZOS)p 260 1538 V 16 w(SO)p 328 1538 V 18 w(PRECISION)k
+-Fq(The)j(selectiv)o(e)e(orthogonalization)j(v)o(ersion)f(of)g(Lanczos)i(p)q
+-(erforms)255 1600 y(its)16 b(dominan)o(t)g(computations)g(\(sparse)h
+-(matrix-v)o(ector)d(m)o(ultiplication)g(and)j(blas-t)o(yp)q(e)255
+-1662 y(op)q(erations\))22 b(on)f(data)h(of)f(t)o(yp)q(e)f Fg(float)f
+-Fq(when)i(this)g(parameter)e(is)i(set)f(to)i(1;)h(when)d(it)255
+-1725 y(is)h(set)h(to)f(2,)i(t)o(yp)q(e)e Fg(double)e Fq(is)i(used.)37
+-b(Computations)22 b(of)g(the)f(t)o(yp)q(e)g(in)g(question)g(are)255
+-1787 y(less)g(accurate)f(if)h(p)q(erformed)f(on)h(data)h(of)f(t)o(yp)q(e)f
+-Fg(float)f Fq(than)j(if)e(p)q(erformed)g(on)i(t)o(yp)q(e)255
+-1849 y Fg(double)f Fq(b)q(ecause)j(the)f(result)g(is)h(stored)g(in)f(lo)o(w)o
+-(er)g(precision.)42 b(On)23 b(some)g(mac)o(hines)255 1911 y(and)h(using)f
+-(some)f(C)h(compilers,)f(\015oating)i(p)q(oin)o(t)f(op)q(erations)h(p)q
+-(erformed)d(on)j Fg(float)255 1974 y Fq(data)18 b(are)g(faster)g(than)g
+-(those)g(p)q(erformed)e(on)i Fg(double)e Fq(data.)26 b(But)17
+-b(they)g(ma)o(y)f(b)q(e)h(\(and)255 2036 y(often)h(are\))f(actually)g
+-Fd(slower)p Fq(.)26 b(Y)l(ou)17 b(can)h(test)g(this)f(for)h(y)o(our)f
+-(computing)g(en)o(vironmen)o(t)255 2098 y(b)o(y)h(setting)h(the)g
+-Fg(TIME)p 682 2098 V 17 w(KERNELS)d Fq(to)j Fg(TRUE)p Fq(.)e(Using)h(t)o(yp)q
+-(e)h Fg(float)e Fq(can)i(ho)o(w)o(ev)o(er)e(lead)i(to)255 2160
+-y(signi\014can)o(t)h(memory)e(sa)o(vings)j(in)f(this)h(con)o(text)e(b)q
+-(ecause)i(the)f(Lanczos)i(basis,)g(whic)o(h)255 2223 y(generally)16
+-b(dominates)g(the)h(storage)h(requiremen)n(ts,)c(o)q(ccupies)j(half)g(as)h(m)
+-o(uc)o(h)c(memory)l(.)255 2285 y(The)g(default)g(v)m(alue)g(of)g(this)g
+-(parameter)f(is)h(2,)g(and)h(w)o(e)f(recomme)o(nd)d(that)k(y)o(ou)f
+-(generally)255 2347 y(use)k(this)h(v)m(alue)f(unless)g(y)o(ou)g(are)h
+-(running)f(out)h(of)g(memory)c(since)j(the)g(compute{time)255
+-2409 y(sa)o(ving)e(\(if)g(an)o(y\))g(is)g(rarely)g(signi\014can)o(t.)75
+-2472 y Fg(WARNING)p 260 2472 V 16 w(EVECS)22 b Fq(If)e(this)f(parameter)f
+-(has)j(a)f(v)m(alue)f(greater)h(than)g(0,)g(the)g(o)q(ccurrence)e(of)i(a)g(v)
+-m(a-)255 2534 y(riet)o(y)e(of)h(p)q(ossible)h(n)o(umerical)c(or)k
+-(storage-related)g(problems)e(in)h(the)g(eigen)f(solv)o(ers)h(is)255
+-2596 y(rep)q(orted.)32 b(When)19 b(using)h(R)o(QI/Symmlq)o(,)d(a)j(v)m(alue)g
+-(ab)q(o)o(v)o(e)g(0)g(means)e(y)o(ou)i(will)e(b)q(e)i(no-)255
+-2659 y(ti\014ed)i(if)f(the)h(eigen)g(residual)g(is)g(not)g(con)o(v)o(erging)g
+-(monotonically)l(,)f(an)i(indication)f(of)977 2762 y Fk(28)p
+-eop
+-%%Page: 29 29
+-bop 255 43 a Fq(p)q(ossible)15 b(miscon)o(v)o(ergence.)j(When)d(using)g
+-(Lanczos,)h(a)g(v)m(alue)f(ab)q(o)o(v)o(e)g(0)g(means)f(y)o(ou)h(will)255
+-106 y(b)q(e)i(w)o(arned)f(if)g(the)g(requested)g(eigen)g(tolerance)g(w)o(as)h
+-(not)g(ac)o(hiev)o(ed,)d(if)i(there)g(has)h(b)q(een)255 168
+-y(a)k(minor)e(or)i(sev)o(ere)e(loss)i(of)g(orthogonalit)o(y)g(in)f(the)g
+-(computation,)g(if)g(the)h(maxim)n(um)255 230 y(n)o(um)o(b)q(er)f(of)i
+-(Lanczos)h(iterations)e(w)o(as)h(reac)o(hed)f(and)i(if)e(the)g(co)q(de)h
+-(needed)f(to)i(switc)o(h)255 292 y(tridiagonal)f(solv)o(ers)g(to)g
+-(accurately)f(compute)g(the)g(Ritz)g(v)m(alues.)39 b(Y)l(ou)22
+-b(will)e(also)j(b)q(e)255 355 y(noti\014ed)15 b(if)g(the)g(co)q(de)h(has)g
+-(run)g(out)g(of)f(memory)e(and)j(is)f(reco)o(v)o(ering)f(b)o(y)h(computing)f
+-(the)255 417 y(b)q(est)k(a)o(v)m(ailable)g(appro)o(ximation)e(to)j(the)f
+-(eigen)o(v)o(ector.)24 b(A)18 b(v)m(alue)f(ab)q(o)o(v)o(e)h(1)h(means)e(that)
+-255 479 y(if)j(an)o(y)g(of)h(the)f(preceding)g(w)o(arning)g(conditions)h(o)q
+-(ccur,)g(y)o(ou)f(will)g(b)q(e)g(noti\014ed)h(of)f(the)255
+-541 y(eigen)o(v)m(alues)c(and)i(predicted)d(and)j(actual)f(eigen)f(residual)h
+-(tolerances.)23 b(A)16 b(v)m(alue)h(ab)q(o)o(v)o(e)255 604
+-y(2)i(means)g(y)o(ou)f(will)g(b)q(e)i(noti\014ed)e(when)i(the)e(computation)h
+-(of)g(the)g(eigen)o(v)o(ector)e(of)i(the)255 666 y(tridiagonal)d(matrix)e
+-(has)j(b)q(een)e(problematic)f(and)j(if)e(the)g(bac)o(k-up)h(iteration)g(w)o
+-(as)g(used)255 728 y(\(and)21 b(ho)o(w)g(man)o(y)e(times\))f(for)j(this)f
+-(computation.)33 b(If)20 b(the)g(extended)g(eigen)g(solv)o(er)f(is)255
+-791 y(used,)i(not)g(all)e(this)h(w)o(arning)h(information)e(is)h(pro)o
+-(vided.)33 b(V)l(arious)20 b(w)o(arnings)h(are)f(re-)255 853
+-y(p)q(orted)d(when)f(the)g(extended)f(eigen)g(problem)g(is)g(not)i(w)o(ell)e
+-(p)q(osed)i(and)f(this)g(parameter)255 915 y(is)g(set)g(greater)g(than)h(0.)
+-22 b(The)16 b(default)g(v)m(alue)g(is)g(2.)75 977 y Fg(WARNING)p
+-260 977 16 2 v 16 w(ORTHTOL)22 b Fq(This)14 b(parameter)e(determines)g(the)h
+-(lev)o(el)f(of)i(loss)g(of)g(orthogonalit)o(y)h(in)e(Lanc-)255
+-1040 y(zos)20 b(whic)o(h)f(is)h(considered)f(minor)f(but)i(w)o(orth)g(rep)q
+-(orting.)33 b(If)19 b(the)g(ratio)h(b)q(et)o(w)o(een)f(the)255
+-1102 y(estimate)f(of)j(the)f(eigen)f(residual)h(and)h(the)f(computed)f(eigen)
+-g(residual)h(is)g(ab)q(o)o(v)o(e)g(this)255 1164 y(v)m(alue,)15
+-b(the)g(minor)f(loss)h(of)h(orthogonalit)o(y)f(condition)h(is)f(triggered.)20
+-b(T)l(o)c(a)o(v)o(oid)f(generat-)255 1226 y(ing)g(insigni\014can)o(t)f
+-(messages,)g(w)o(arnings)h(are)g(not)g(prin)o(ted)f(if)g(the)h(actual)f
+-(eigen)g(residual)255 1289 y(is)i(signi\014can)o(tly)f(lo)o(w)o(er)g(than)h
+-(the)g(eigen)f(tolerance.)20 b(The)c(default)g(v)m(alue)f(is)h(2.)22
+-b(Refer)15 b(to)255 1351 y(the)h(discussion)g(on)h Fg(WARNING)p
+-820 1351 V 16 w(EVECS)p Fq(.)75 1413 y Fg(WARNING)p 260 1413
+-V 16 w(MISTOL)22 b Fq(Same)f(as)h Fg(WARNING)p 837 1413 V 16
+-w(ORTHTOL)p Fq(,)d(but)j(this)g(v)m(alue)g(indicates)f(a)h(more)f(serious)255
+-1475 y(loss)e(of)h(orthogonalit)o(y)l(.)30 b(In)19 b(some)f(cases)h(this)g
+-(ma)o(y)f(indicate)g(miscon)o(v)o(ergence)o(,)f(hence)255 1538
+-y(the)f(name.)k(The)c(default)g(is)g(100.)75 1600 y Fg(LANCZOS)p
+-260 1600 V 16 w(TIME)23 b Fq(A)12 b(detailed)f(breakdo)o(wn)i(of)g(the)f
+-(time)e(sp)q(en)o(t)i(in)g(di\013eren)o(t)g(stages)h(of)g(the)f(Lanczos)255
+-1662 y(eigen)18 b(solv)o(er)g(is)g(pro)o(vided)g(when)g(this)h(parameter)e
+-(is)h(set)h(to)f Fg(TRUE)p Fq(.)f(Lanczos)i(will)f(run)255
+-1725 y(ev)o(er)13 b(so)j(sligh)o(tly)d(faster)i(if)f(y)o(ou)h(lea)o(v)o(e)e
+-(this)h(v)m(alue)h(at)g Fg(FALSE)e Fq(\(the)h(default\),)h(since)e(man)o(y)
+-255 1787 y(few)o(er)i(calls)h(to)h(the)f(timing)e(function)i(will)f(b)q(e)i
+-(made.)75 1849 y Fg(TIME)p 182 1849 V 17 w(KERNELS)22 b Fq(If)14
+-b(this)h(parameter)f(is)g(set)h(to)h Fg(TRUE)d Fq(a)i(table)g(is)g(prin)o
+-(ted)f(out)h(comparing)f(v)m(arious)255 1911 y(k)o(ernel)19
+-b(op)q(erations)j(in)f(single)f(precision)g(\(data)h(t)o(yp)q(e)g
+-Fg(float)p Fq(\))e(and)i(double)g(precision)255 1974 y(\(data)d(t)o(yp)q(e)f
+-Fg(double)p Fq(\).)23 b(The)17 b(k)o(ernel)f(op)q(erations)j(are)e(basic)h
+-(linear)e(algebra)i(primitiv)o(es)255 2036 y(and)h(m)o(ultipli)o(cation)c(of)
+-k(a)f(dense)g(v)o(ector)f(b)o(y)h(the)g(w)o(eigh)o(ted)f(Laplacian)i(matrix)d
+-(of)i(the)255 2098 y(graph.)k(The)14 b(comparison)g(is)h(with)f(resp)q(ect)g
+-(to)h(n)o(umerical)d(result)i(and)h(execution)f(time.)255 2160
+-y(The)j(n)o(um)o(b)q(er)f(of)h(lo)q(ops)i(of)e(the)g(k)o(ernel)f(op)q
+-(erations)i(p)q(erformed)e(is)i(c)o(hosen)f(so)h(that)f(the)255
+-2223 y(time)h(of)j(the)f(standard)i(2{norm)f(op)q(eration)g(is)f(appro)o
+-(ximately)f(1)h(second,)i(hence)e(on)255 2285 y(v)o(ery)13
+-b(large)h(and)g(dense)g(graphs)h(the)e(sparse)i(matrix)d(m)o(ultiplic)o
+-(ation)g(k)o(ernel)g(timing)g(test)255 2347 y(ma)o(y)j(require)g
+-(signi\014can)o(t)h(time.)j(The)d(default)g(v)m(alue)g(is)g
+-Fg(FALSE)p Fq(.)165 2444 y Fm(6.3.)27 b(Other)18 b(parameters)f(for)i(sp)r
+-(ectral)e(metho)r(ds.)75 2506 y Fg(MAKE)p 182 2506 V 17 w(CONNECTED)k
+-Fq(Sp)q(ectral)16 b(metho)q(ds)g(can)g(break)g(do)o(wn)h(if)f(the)g(graph)h
+-(is)f(disconnected.)21 b(Ev)o(en)255 2568 y(if)h(the)g(original)g(graph)h(is)
+-f(connected,)h(disconnected)f(graphs)h(can)g(b)q(e)f(generated)g(in)255
+-2631 y(the)15 b(recursion.)21 b(T)l(o)16 b(a)o(v)o(oid)g(an)o(y)f(asso)q
+-(ciated)i(problems,)d(w)o(e)h(use)h(a)g(breadth-\014rst-searc)o(h)255
+-2693 y(algorithm)h(to)i(\014nd)f(connected)g(comp)q(onen)o(ts)g(and)h(add)f
+-(a)h(minimal)c(n)o(um)o(b)q(er)h(of)j(edges)977 2762 y Fk(29)p
+-eop
+-%%Page: 30 30
+-bop 255 43 a Fq(to)19 b(mak)o(e)e(the)h(graph)h(connected.)28
+-b(If)18 b Fg(MAKE)p 1085 43 16 2 v 17 w(CONNECTED)d Fq(is)j
+-Fg(TRUE)g Fq(\(the)g(default\),)g(then)255 106 y(this)f(connectivit)o(y)e(c)o
+-(hec)o(k)g(will)h(b)q(e)h(in)o(v)o(ok)o(ed)f(whenev)o(er)g(a)h(sp)q(ectral)g
+-(option)h(is)f(selected.)255 168 y(Y)l(ou)i(should)h(only)f(c)o(hange)g(this)
+-h(parameter)e(if)g(y)o(ou)h(plan)h(to)g(use)f(a)h(sp)q(ectral)f(metho)q(d)255
+-230 y(and)d(y)o(ou)f(are)h(certain)e(that)i(y)o(ou)f(will)g(only)g(op)q
+-(erate)h(on)g(connected)e(graphs)j(\()p Fd(i.e)p Fq(.)e(if)g(y)o(ou)255
+-292 y(aren't)h(recursing\).)75 355 y Fg(PERTURB)22 b Fq(Sp)q(ectral)14
+-b(metho)q(ds)g(can)g(encoun)o(ter)g(problems)f(if)g(the)h(graph)i(has)f
+-(symmetry)c(since)i(its)255 417 y(eigen)o(v)m(alues)e(can)i(then)f(ha)o(v)o
+-(e)g(m)o(ultipli)o(cit)n(y)d(greater)k(than)g(1.)20 b(F)l(or)12
+-b(sp)q(ectral)h(bisection,)f(all)255 479 y(y)o(ou)i(can)h(hop)q(e)g(for)f(is)
+-g(selecting)f(some)h(v)o(ector)f(\(whic)o(h)h(dep)q(ends)g(on)h(the)f
+-(starting)h(Lanc-)255 541 y(zos)i(v)o(ector\))e(in)h(the)g(subspace)g(of)h
+-(second)f(lo)o(w)o(est)g(eigen)o(v)o(ectors.)j(Ho)o(w)o(ev)o(er,)14
+-b(since)i(they)255 604 y(w)o(ork)h(within)g(a)g(subspace)h(of)g(2)f(and)h(3)f
+-(v)o(ectors)g(resp)q(ectiv)o(ely)l(,)d(sp)q(ectral)k(quadrisection)255
+-666 y(and)j(o)q(ctasection)h(can)f(handle)g(t)o(w)o(o)f(or)i(three)e(degrees)
+-h(of)g(m)o(ultipli)o(cit)n(y)d(resp)q(ectiv)o(ely)l(.)255 728
+-y(Unfortunately)l(,)k(Lanczos)g(can't)f(easily)g(iden)o(tify)f(this)h(m)o
+-(ultiplici)o(t)o(y)-5 b(.)35 b(W)l(e)21 b(can,)h(ho)o(w-)255
+-791 y(ev)o(er,)17 b(a)o(v)o(oid)h(the)g(issue)g(b)o(y)f(randomly)g(p)q
+-(erturbing)i(the)f(matrix.)25 b(If)18 b(y)o(ou)g(are)g(in)o(v)o(oking)255
+-853 y(bisection,)i(then)f(the)h(matrix)e(is)i(not)g(p)q(erturb)q(ed,)h(but)f
+-(in)g(quadrisection)f(or)h(o)q(ctasec-)255 915 y(tion)15 b(mo)q(de)g(the)g
+-(parameter)f Fg(PERTURB)f Fq(con)o(trols)i(whether)g(or)h(not)g(this)f(p)q
+-(erturbation)h(is)255 977 y(in)o(v)o(ok)o(ed.)k(Using)d(this)f(option)h
+-(helps)f(a)o(v)o(oid)g(problems)f(in)h(some)g(degenerate)g(cases)h(lik)o(e)
+-255 1040 y(the)j(square)g(grid)g(graph,)i(at)f(the)f(cost)g(of)h(a)f(v)o(ery)
+-f(sligh)o(t)h(increase)f(in)h(run)g(time.)31 b(W)l(e)255 1102
+-y(recommend)11 b(that)j(y)o(ou)f(lea)o(v)o(e)f(this)i(feature)f(activ)o(ed)f
+-(\(the)i(default\))f(unless)h(y)o(ou)f(are)h(sure)255 1164
+-y(y)o(ou)i(don't)g(need)g(it.)75 1226 y Fg(NPERTURB)21 b Fq(If)i(the)g
+-Fg(PERTURB)e Fq(option)j(is)f(b)q(eing)h(used,)h(this)e(parameter)f
+-(indicates)h(ho)o(w)g(man)o(y)255 1289 y(random)14 b(edges)h(are)f(added)h
+-(to)g(the)g(graph)g(to)g(break)f(the)h(symmetry)-5 b(.)18 b(The)c(default)h
+-(is)f(2.)75 1351 y Fg(PERTURB)p 260 1351 V 16 w(MAX)23 b Fq(If)13
+-b(the)f Fg(PERTURB)f Fq(option)i(is)g(b)q(eing)g(used,)h(this)f(parameter)e
+-(is)i(the)g(maxim)n(um)c(v)m(alue)255 1413 y(of)22 b(an)f(edge)g(w)o(eigh)o
+-(t)g(for)g(one)h(of)f(the)g(randomly)f(added)i(edges.)36 b(A)21
+-b(small)e(v)m(alue)i(will)255 1475 y(p)q(erturb)c(the)g(eigen)o(v)o(ectors)e
+-(a)i(small)f(amoun)o(t,)g(but)h(if)f(the)h(p)q(erturbation)g(is)g(to)q(o)h
+-(small,)255 1538 y(then)13 b(Lanczos)h(ma)o(y)e(not)i(b)q(e)g(able)f(to)g
+-(separate)h(the)f(m)o(ultiple)d(eigen)o(v)o(ectors.)19 b(This)13
+-b(v)m(alue)255 1600 y(should)k(probably)f(b)q(e)h(a)f(small)f(m)o(ultiple)e
+-(of)k Fg(EIGEN)p 1229 1600 V 16 w(TOLERANCE)p Fq(.)c(The)j(default)g(is)g
+-Fj(:)p Fq(003.)75 1662 y Fg(MAPPING)p 260 1662 V 16 w(TYPE)23
+-b Fq(W)l(e)18 b(ha)o(v)o(e)g(implem)o(en)o(te)o(d)e(sev)o(eral)i(metho)q(ds)g
+-(for)h(generating)g(a)g(partition)g(from)255 1725 y(eigen)o(v)o(ectors,)g
+-(and)i(decided)e(to)h(retain)g(t)o(w)o(o)g(of)g(them.)32 b(If)19
+-b(this)h(v)m(alue)g(is)g(0,)h(then)f(the)255 1787 y(the)d(partitions)h(are)g
+-(determined)d(b)o(y)j(the)f(signs)h(of)g(the)g(v)m(alues)f(in)h(the)f(eigen)o
+-(v)o(ector\(s\).)255 1849 y(Note)e(that)h(this)f(will)f(generally)h(pro)q
+-(duce)g(a)h(somewhat)f(im)o(balanced)e(partition)j(\(whic)o(h)255
+-1911 y(can)h(b)q(e)f(balanced)h(b)o(y)f(KL\).)g(In)h(the)f(bisection)g(case,)
+-g(this)g(option)h(reduces)f(to)h(dividing)255 1974 y(at)f(a)h(v)m(alue)e(of)h
+-(zero.)21 b(If)16 b Fg(MAPPING)p 891 1974 V 16 w(TYPE)e Fq(is)i(1,)g(then)f
+-(the)h(co)q(de)g(uses)g(the)g(minim)n(um)c(cost)255 2036 y(assignmen)o(t)k
+-(algorithm)h(describ)q(ed)f(in)h([12)q(],)f(whic)o(h)h(generates)g(balanced)h
+-(sets.)24 b(In)17 b(the)255 2098 y(bisection)g(case,)i(this)f(latter)f
+-(option)i(reduces)f(to)g(dividing)f(at)i(the)f(median.)25 b(Since)17
+-b(w)o(e)255 2160 y(consider)f(this)g(second)g(approac)o(h)i(sup)q(erior,)e
+-(the)g(default)g(v)m(alue)g(is)g(1.)75 2223 y Fg(COARSE)p 234
+-2223 V 16 w(NLEVEL)p 406 2223 V 17 w(RQI)23 b Fq(This)17 b(parameter)f
+-(applies)g(if)g(y)o(ou)h(are)g(using)g(the)g(sp)q(ectral)g(metho)q(d)f(with)
+-255 2285 y(the)21 b(R)o(QI/Symm)o(lq)d(eigen)i(solv)o(er)g(option.)37
+-b(As)20 b(y)o(ou)h(w)o(ork)g(bac)o(k)g(through)h(the)f(in)o(ter-)255
+-2347 y(mediate)14 b(graphs,)j(the)f(appro)o(ximation)f(to)h(the)g(eigen)o(v)o
+-(ector)e(is)i(re\014ned)g(with)g(Ra)o(yleigh)255 2409 y(Quotien)o(t)f
+-(Iteration)h(ev)o(ery)e(few)i(lev)o(els.)j(This)d(parameter)e(indicates)h(ho)
+-o(w)i(man)o(y)d(lev)o(els)255 2472 y(o)q(ccur)22 b(b)q(et)o(w)o(een)g(these)g
+-(re\014nemen)o(ts.)37 b(A)22 b(small)e(v)m(alue)i(for)h(this)f(parameter)f
+-(is)h(more)255 2534 y(robust,)17 b(but)f(a)h(large)f(v)m(alue)g(will)f
+-(reduce)g(execution)h(time.)j(The)d(default)g(v)m(alue)g(is)g(2.)75
+-2596 y Fg(OPT3D)p 208 2596 V 17 w(NTRIES)22 b Fq(If)15 b(y)o(ou)g(are)h
+-(using)g(sp)q(ectral)f(o)q(ctasection,)g(then)h(when)f(mapping)g(bac)o(k)g
+-(to)h(a)g(dis-)255 2659 y(crete)f(solution)i(y)o(ou)f(need)g(to)g(solv)o(e)g
+-(a)h(constrained,)f(global)g(optimization)f(problem)f(as)977
+-2762 y Fk(30)p eop
+-%%Page: 31 31
+-bop 255 43 a Fq(describ)q(ed)17 b(in)f([12)q(].)23 b(In)17
+-b(our)h(exp)q(erience,)d(this)i(problem)f(usually)h(has)h(a)f(small)f(n)o(um)
+-o(b)q(er)255 106 y(of)22 b(lo)q(cal)f(minimi)o(ze)o(rs,)f(so)i(w)o(e)f(solv)o
+-(e)g(it)g(using)g(lo)q(cal)h(minim)o(iz)o(ation)d(tec)o(hniques)h(from)255
+-168 y(random)i(starting)g(p)q(oin)o(ts.)39 b(This)22 b(parameter)e(con)o
+-(trols)i(the)g(n)o(um)o(b)q(er)e(of)i(lo)q(cal)g(mini-)255
+-230 y(mizations,)e(and)i(should)g(only)e(b)q(e)i(mo)q(di\014ed)e(b)o(y)g
+-(sophisticated)h(users.)36 b(The)21 b(default)255 292 y(v)m(alue)16
+-b(is)g(5.)165 389 y Fm(6.4.)27 b(Kernighan{Lin)18 b(parameters.)75
+-451 y Fg(KL)p 130 451 16 2 v 18 w(METRIC)k Fq(When)11 b(dividing)f(in)o(to)g
+-(more)g(than)h(2)g(sets)g(at)g(once,)h(our)f(implem)o(en)o(tati)o(on)e(of)i
+-(Kernighan{)255 514 y(Lin)16 b(can)g(try)f(to)i(minim)o(iz)o(e)c(an)o(y)j(in)
+-o(ter{set)f(metric.)j(Tw)o(o)f(are)e(curren)o(tly)g(built)g(in)o(to)g(the)255
+-576 y(co)q(de)k(and)h(are)g(con)o(trolled)e(b)o(y)h(this)g(parameter.)29
+-b(If)19 b(the)g(v)m(alue)g(of)g Fg(KL)p 1593 576 V 18 w(METRIC)e
+-Fq(is)i(one,)255 638 y(then)i(all)g(edges)h(crossing)g(b)q(et)o(w)o(een)e(t)o
+-(w)o(o)i(sets)f(are)h(treated)f(the)g(same.)36 b(If)21 b(the)g(v)m(alue)255
+-700 y(is)f(t)o(w)o(o,)h(then)f(edges)h(are)f(w)o(eigh)o(ted)f(b)o(y)h(a)h
+-(metric)d(that)j(corresp)q(onds)g(to)g(their)e(arc)o(hi-)255
+-763 y(tectural)h(distance)g(in)h(the)f(target)h(parallel)f(arc)o(hitecture.)
+-33 b(\(Note)20 b(that)i(the)e(sp)q(ectral)255 825 y(quadrisection)f(and)i(o)q
+-(ctasection)f(algorithms)f(automatically)f(use)i(a)g(h)o(yp)q(ercub)q(e)f
+-(hop)255 887 y(metric.\))29 b(Also)19 b(note)h(that)g(in)f(bisection)g(the)h
+-(c)o(hoice)e(of)i(metrics)d(do)q(esn't)j(matter.)30 b(If)255
+-949 y(y)o(ou)18 b(wish)g(to)g(use)h(a)f(di\013eren)o(t)f(metric)f(than)i
+-(cuts)g(or)h(hops,)g(y)o(ou)e(can)i(tink)o(er)d(with)i(the)255
+-1012 y(appropriate)f(co)q(de)f(in)g(\\co)q(de/submain/submain.c".)21
+-b(The)16 b(default)g(v)m(alue)g(is)g(2.)75 1074 y Fg(KL)p 130
+-1074 V 18 w(RANDOM)22 b Fq(This)d(\015ag)g(turns)g(on)g(and)g(o\013)g(the)g
+-(randomness)f(in)g(the)g(Kernighan{Lin)h(routines.)255 1136
+-y(W)l(e)11 b(recomme)o(nd)e(that)i(y)o(ou)g(lea)o(v)o(e)e(this)i(parameter)f
+-(in)h(the)f(default)h(setting)g(of)g Fg(TRUE)f Fq(since)255
+-1198 y(it)16 b(increases)g(the)g(qualit)o(y)f(and)h(robustness)i(of)e
+-(Kernighan{Lin)h(for)g(a)g(tin)o(y)e(increase)g(in)255 1261
+-y(run)h(time.)75 1323 y Fg(KL)p 130 1323 V 18 w(BAD)p 226 1323
+-V 17 w(MOVES)23 b Fq(Our)15 b(v)o(ersion)g(of)h(Kernighan{Lin)h(can)f(exit)e
+-(a)i(pass)h(early)e(if)g(it)h(do)q(esn't)g(seem)e(to)255 1385
+-y(b)q(e)i(making)f(an)o(y)h(progress.)22 b(This)16 b(parameter)f(con)o(trols)
+-g(ho)o(w)i(quic)o(kly)c(KL)k(will)e(hit)g(this)255 1448 y(cuto\013.)29
+-b(A)19 b(large)f(v)m(alue)h(ma)o(y)e(mak)o(e)g(KL)i(more)e(e\013ectiv)o(e,)g
+-(but)i(will)f(also)h(increase)f(the)255 1510 y(run)e(time.)j(The)e(default)f
+-(is)g(20.)75 1572 y Fg(KL)p 130 1572 V 18 w(NTRIES)p 304 1572
+-V 16 w(BAD)23 b Fq(This)e(parameter)f(con)o(trols)h(the)g(sp)q(eed)g(at)g
+-(whic)o(h)f(the)h(Kernighan{Lin)h(co)q(de)255 1634 y(is)f(exited.)34
+-b(The)21 b(KL)g(routine)g(will)e(exit)h(after)h Fg(KL)p 1226
+-1634 V 18 w(NTRIES)p 1400 1634 V 16 w(BAD)f Fq(passes)i(in)e(whic)o(h)h(no)
+-255 1697 y(impro)o(v)o(em)o(en)n(t)16 b(is)j(detected.)27 b(W)l(e)18
+-b(ha)o(v)o(e)g(designed)h(some)f(randomness)g(in)o(to)g(this)h(algo-)255
+-1759 y(rithm,)j(so)h(a)g(pass)h(with)e(no)h(impro)o(v)o(em)o(en)n(t)d(can)j
+-(b)q(e)f(follo)o(w)o(ed)g(b)o(y)g(one)h(that)g(\014nds)g(a)255
+-1821 y(b)q(etter)17 b(partitioning.)23 b(Ho)o(w)o(ev)o(er,)15
+-b(if)i(y)o(ou)g(set)g Fg(KL)p 1172 1821 V 18 w(RANDOM)d Fq(to)k
+-Fg(FALSE)p Fq(,)d(then)i(y)o(ou)g(should)255 1883 y(set)d Fg(KL)p
+-384 1883 V 18 w(NTRIES)p 558 1883 V 16 w(BAD)g Fq(to)h(1.)21
+-b(If)13 b Fg(KL)p 881 1883 V 18 w(NTRIES)p 1055 1883 V 16 w(BAD)h
+-Fq(is)g(set)g(to)h(zero,)f(then)h(the)f(co)q(de)g(will)g(run)255
+-1946 y(a)19 b(single)f(pass)i(of)f(KL)g(and)g(exit)f(whether)g(or)h(not)g
+-(the)g(partition)f(is)h(impro)o(v)o(ed.)26 b(Since)255 2008
+-y(the)18 b(\014rst)g(pass)h(is)f(usually)f(resp)q(onsible)h(for)g(the)g(bulk)
+-g(of)g(the)g(impro)o(v)o(em)o(e)o(n)o(t,)d(this)j(is)g(a)255
+-2070 y(reasonable)c(c)o(hoice)e(if)h(run)h(time)d(is)j(critical.)k(A)13
+-b(large)h(v)m(alue)f(for)h(this)f(parameter)g(should)255 2132
+-y(pro)q(duce)j(b)q(etter)f(results,)g(but)h(will)f(cause)g(the)h(co)q(de)g
+-(to)g(run)g(longer.)21 b(The)15 b(default)h(is)f(1.)75 2195
+-y Fg(KL)p 130 2195 V 18 w(UNDO)p 252 2195 V 17 w(LIST)23 b
+-Fq(This)17 b(parameter)e(turns)i(on)h(an)f(optimization)e(that)i
+-(dramatically)e(reduces)h(the)255 2257 y(run)23 b(time)e(of)j(Kernighan{Lin)g
+-(for)f(large)h(graphs.)43 b(Instead)23 b(of)h(buc)o(k)o(et)d(sorting)j(the)
+-255 2319 y(en)o(tire)17 b(set)g(of)i(p)q(ossible)f(v)o(ertex)e(mo)o(v)o(es)g
+-(b)q(efore)i(eac)o(h)f(pass,)i(this)f(option)g(preserv)o(es)f(the)255
+-2382 y(mo)o(v)o(es)e(that)i(ha)o(v)o(en't)f(b)q(een)g(c)o(hanged;)h(t)o
+-(ypically)e(the)h(v)m(ast)i(ma)s(jorit)o(y)l(.)j(This)c(leads)f(to)i(a)255
+-2444 y(dramatic)c(increase)g(in)g(sp)q(eed,)h(with)g(no)h(p)q(erceptible)d(c)
+-o(hange)i(in)g(qualit)o(y)l(.)k(W)l(e)c(strongly)255 2506 y(encourage)i(y)o
+-(ou)f(to)g(lea)o(v)o(e)f(this)h(parameter)f(in)h(its)g(default)g(setting)g
+-(of)h Fg(TRUE)p Fq(.)75 2568 y Fg(KL)p 130 2568 V 18 w(IMBALANCE)k
+-Fm(Chaco)j Fq(generally)f(tries)g(to)h(k)o(eep)e(the)i(v)o(ertex)e(w)o(eigh)o
+-(t)g(sums)h(in)g(the)h(sets)f(it)255 2631 y(generates)18 b(as)g(nearly)f
+-(equal)g(as)h(p)q(ossible.)25 b(Sp)q(eci\014cally)l(,)16 b(when)h(a)h(single)
+-f(division)g(step)255 2693 y(is)11 b(p)q(erformed,)g(the)h(di\013erence)e(in)
+-h(v)o(ertex)f(w)o(eigh)o(t)h(sum)g(b)q(et)o(w)o(een)f(an)o(y)i(t)o(w)o(o)f
+-(of)h(the)f(subsets)977 2762 y Fk(31)p eop
+-%%Page: 32 32
+-bop 255 43 a Fq(is)15 b(at)g(most)f(the)h(w)o(eigh)o(t)f(of)h(the)g(hea)o
+-(viest)f(v)o(ertex.)19 b(F)l(or)c(w)o(eigh)o(ted)f(graphs,)i(after)f(sev)o
+-(eral)255 106 y(lev)o(els)21 b(of)h(recursiv)o(e)f(partitioning,)i(the)g(set)
+-f(sizes)g(ma)o(y)f(deviate)g(b)o(y)h(more)f(than)i(the)255
+-168 y(w)o(eigh)o(t)f(of)h(a)g(single)g(v)o(ertex.)39 b(But)23
+-b(for)g(un)o(w)o(eigh)o(ted)f(graphs)i(set)e(sizes)h(should)g(v)m(ary)255
+-230 y(b)o(y)c(at)h(most)e(one.)31 b(This)19 b(is)g(the)g(default)g(op)q
+-(eration)i(of)e(the)g(co)q(de,)h(asso)q(ciated)g(with)g(a)255
+-292 y(v)m(alue)15 b(for)g Fg(KL)p 508 292 16 2 v 18 w(IMBALANCE)d
+-Fq(of)k(0.)21 b(Ho)o(w)o(ev)o(er,)13 b(there)i(are)g(settings)g(in)g(whic)o
+-(h)g(sets)g(needn't)255 355 y(b)q(e)i(p)q(erfectly)f(matc)o(hed)f(in)i(size,)
+-f(and)h(an)h(im)o(balanced)c(partition)j(with)g(few)o(er)f(crossing)255
+-417 y(edges)h(is)g(preferable.)k(Suc)o(h)c(partitions)g(can)g(b)q(e)g(found)g
+-(b)o(y)g Fm(Chaco)p Fq('s)g(implem)o(en)o(tation)255 479 y(of)j(KL)h(and)f(m)
+-o(ultilev)n(el{KL.)d(If)j Fg(KL)p 943 479 V 17 w(IMBALANCE)d
+-Fq(is)j(set)g(to)g(some)f(v)m(alue)h Fj(q)h Fq(b)q(et)o(w)o(een)f(0)255
+-541 y(and)i(1,)h(then)e(KL)h(and)g(m)o(ultilev)n(el)c(KL)k(will)e(lo)q(ok)i
+-(for)g(partitions)f(in)g(whic)o(h)g(the)g(the)255 604 y(fractional)14
+-b(im)o(balance)d(is)j(no)g(more)f(than)i Fj(q)r Fq(.)k(Sp)q(eci\014cally)l(,)
+-13 b(the)g(di\013erence)g(b)q(et)o(w)o(een)g(an)o(y)255 666
+-y(t)o(w)o(o)j(sets)h(is)f(b)q(ounded)h(b)o(y)e Fj(q)j Fq(times)c(the)i(a)o(v)
+-o(erage)g(set)g(size.)165 763 y Fm(6.5.)27 b(P)n(arameters)18
+-b(for)g(m)n(ultilev)n(el)d(algorithms.)75 825 y Fg(COARSEN)p
+-260 825 V 16 w(RATIO)p 406 825 V 17 w(MIN)23 b Fq(This)d(v)m(alue)g(is)h
+-(emplo)o(y)o(ed)c(if)j(y)o(ou)g(are)h(using)g(either)e(the)h(R)o(QI/Symml)o
+-(q)255 887 y(eigen)j(solv)o(er)g(or)h(the)f(m)o(ultilev)n(el)o({KL)f
+-(partitioning)h(algorithm.)43 b(It)23 b(should)h(ha)o(v)o(e)f(a)255
+-949 y(v)m(alue)f(b)q(et)o(w)o(een)g(.5)g(and)i(1.0,)g(represen)o(ting)d(the)i
+-(minim)o(al)d(acceptable)h(reduction)h(in)255 1012 y(n)o(um)o(b)q(er)15
+-b(of)h(v)o(ertices)f(asso)q(ciated)j(with)e(a)h(coarsening)g(step.)22
+-b(If)16 b(a)g(step)h(fails)f(to)h(ac)o(hiev)o(e)255 1074 y(this)i(reduction,)
+-h(the)f(coarsening)h(algorithm)f(exits)f(prematurely)l(,)g(and)i(the)f
+-(resulting)255 1136 y(calculations)12 b(will)g(b)q(e)h(p)q(erformed)e(on)j(a)
+-f(larger)g(graph)g(than)h(exp)q(ected.)19 b(The)13 b(coarsening)255
+-1198 y(algorithm)f(cannot)h(reduce)f(the)h(n)o(um)o(b)q(er)e(of)i(v)o
+-(ertices)e(b)o(y)i(more)e(than)j(half,)f(so)g(this)g(v)m(alue)255
+-1261 y(should)k(alw)o(a)o(ys)f(b)q(e)g(greater)g(than)h Fj(:)p
+-Fq(5;)f(the)g(default)g(is)g Fj(:)p Fq(7.)75 1323 y Fg(COARSE)p
+-234 1323 V 16 w(NLEVEL)p 406 1323 V 17 w(KL)23 b Fq(If)i(y)o(ou)g(are)h
+-(using)g(the)f(m)o(ultilev)n(el)o({KL)e(partitioning)j(algorithm,)g(then)255
+-1385 y(Kernighan{Lin)e(gets)g(in)o(v)o(ok)o(ed)e(p)q(erio)q(dically)h(on)h
+-(successiv)o(ely)d(\014ner)i(graphs.)45 b(This)255 1448 y(parameter)13
+-b(indicates)g(ho)o(w)i(man)o(y)e(lev)o(els)f(o)q(ccur)i(b)q(et)o(w)o(een)g
+-(these)g(in)o(v)o(o)q(cations.)20 b(A)14 b(small)255 1510 y(v)m(alue)22
+-b(for)g Fg(COARSE)p 626 1510 V 16 w(NLEVEL)p 798 1510 V 16
+-w(KL)f Fq(will)g(generally)g(lead)h(to)g(b)q(etter)g(partitions,)h(while)e(a)
+-255 1572 y(large)16 b(v)m(alue)g(will)f(reduce)h(execution)f(time.)k(The)d
+-(default)g(is)g(2.)75 1634 y Fg(COARSE)p 234 1634 V 16 w(NLEVEL)p
+-406 1634 V 17 w(RQI)23 b Fq(See)16 b(discussion)g(in)g Fh(x)p
+-Fq(6.3.)75 1697 y Fg(MATCH)p 208 1697 V 17 w(TYPE)23 b Fq(The)13
+-b(\014rst)h(step)g(in)f(coarsening)i(is)e(the)h(generation)g(of)g(a)g
+-(maximal)d(matc)o(hing)h(in)h(the)255 1759 y(graph.)31 b(W)l(e)19
+-b(ha)o(v)o(e)f(three)g(matc)o(hing)g(co)q(des)h(to)h(c)o(ho)q(ose)f(from.)29
+-b(The)19 b(default)g(v)m(alue)g(for)255 1821 y Fg(MATCH)p 388
+-1821 V 17 w(TYPE)13 b Fq(is)h(1,)g(whic)o(h)g(selects)g(a)g(fast)h(algorithm)
+-f(based)h(on)g(a)f(breadth)h(\014rst)g(searc)o(h.)255 1883
+-y(Increasingly)e(time)f(consuming)h(but)i(more)d(truly)i(random)g(algorithms)
+-f(are)h(in)o(v)o(ok)o(ed)f(b)o(y)255 1946 y(larger)j(v)m(alues)g(up)h(to)g(a)
+-f(maxim)o(um)c(of)k(4.)75 2008 y Fg(HEAVY)p 208 2008 V 17 w(MATCH)22
+-b Fq(Karypis)15 b(and)h(Kumar)e([16])h(ha)o(v)o(e)f(rep)q(orted)i(that)f(the)
+-g(m)o(ultilev)n(el)o({KL)e(algorithm)255 2070 y(is)21 b(impro)o(v)o(ed)d(b)o
+-(y)i(selecting)g(matc)o(hing)f(edges)i(that)g(ha)o(v)o(e)f(high)h(w)o(eigh)o
+-(ts.)34 b(If)21 b(this)f(pa-)255 2132 y(rameter)d(is)h(set)g(to)h
+-Fg(TRUE)e Fq(then)i(the)f(matc)o(hing)f(algorithms)g(for)i(either)e(the)i(m)o
+-(ultile)o(v)o(e)o(l)255 2195 y(eigen)13 b(solv)o(er)f(or)i(m)o(ultilev)n(el)o
+-({KL)e(will)g(try)h(to)h(generate)f(hea)o(vy)f(w)o(eigh)o(t)h(matc)o(hings.)
+-19 b(The)255 2257 y(default)d(for)g(this)h(parameter)e(is)h
+-Fg(FALSE)p Fq(.)75 2319 y Fg(COARSE)p 234 2319 V 16 w(KL)p
+-302 2319 V 18 w(BOTTOM)22 b Fq(Kernighan{Lin)c(re\014nemen)o(t)d(is)i(in)o(v)
+-o(ok)o(ed)f(ev)o(ery)g Fg(COARSE)p 1589 2319 V 16 w(NLEVEL)p
+-1761 2319 V 16 w(KL)h Fq(lev-)255 2382 y(els)22 b(starting)h(with)g(the)f
+-(\014nest)h(graph.)41 b(T)l(o)23 b(ensure)g(that)g(partition)f(of)h(the)f
+-(coarsest)255 2444 y(graph)f(is)g(as)g(go)q(o)q(d)i(as)e(p)q(ossible,)g(it)f
+-(mak)o(es)f(sense)h(to)h(in)o(v)o(ok)o(e)e(KL)i(on)g(this)f(graph.)35
+-b(If)255 2506 y Fg(COARSE)p 414 2506 V 16 w(KL)p 482 2506 V
+-18 w(BOTTOM)21 b Fq(is)h Fg(TRUE)f Fq(\(the)i(default\),)h(KL)f(will)e(alw)o
+-(a)o(ys)i(b)q(e)g(in)o(v)o(ok)o(ed)e(on)i(the)255 2568 y(coarsest)15
+-b(graph.)21 b(This)14 b(generally)f(impro)o(v)o(es)f(the)i(qualit)o(y)f(of)h
+-(partitions,)g(and)h(since)e(the)255 2631 y(coarsest)k(graph)g(is)f(small,)e
+-(the)i(time)e(for)j(this)f(pro)q(cess)h(is)f(negligible.)977
+-2762 y Fk(32)p eop
+-%%Page: 33 33
+-bop 75 43 a Fg(COARSEN)p 260 43 16 2 v 16 w(VWGTS)22 b Fq(F)l(or)27
+-b(b)q(oth)g(the)e(m)o(ultilev)n(el{KL)e(algorithm)i(and)i(the)f(R)o(QI/Symm)o
+-(lq)d(eigen)255 106 y(solv)o(er,)16 b(w)o(e)h(construct)h(coarse)f(graphs)i
+-(via)e(a)h(sequence)e(of)h(edge)h(con)o(tractions.)24 b(These)255
+-168 y(con)o(tractions)17 b(com)o(bine)e(t)o(w)o(o)i(v)o(ertices)e(in)o(to)i
+-(one.)23 b(Balance)17 b(constrain)o(ts)g(are)g(preserv)o(ed)255
+-230 y(if)24 b(the)h(w)o(eigh)o(t)f(of)h(the)f(com)o(bined)f(v)o(ertex)g(is)i
+-(the)f(sum)g(of)h(the)f(w)o(eigh)o(ts)h(of)g(its)f(t)o(w)o(o)255
+-292 y(constituen)o(ts.)33 b(If)20 b Fg(COARSEN)p 797 292 V
+-16 w(VWGTS)e Fq(is)i Fg(TRUE)f Fq(\(the)h(default\))g(then)g(the)g(new)g(v)o
+-(ertex)f(is)255 355 y(w)o(eigh)o(ted)11 b(in)g(this)h(manner.)18
+-b(Ho)o(w)o(ev)o(er,)10 b(as)j(discussed)e(in)h Fh(x)p Fq(3.6,)g(Bui)f(and)i
+-(Jones)f(prop)q(osed)255 417 y(an)17 b(algorithm)e(where)h(the)g(new)g(v)o
+-(ertex)e(has)j(unit)f(w)o(eigh)o(t.)21 b(This)16 b(can)g(b)q(e)h(implem)o(en)
+-n(ted)255 479 y(b)o(y)f(setting)g Fg(COARSEN)p 668 479 V 16
+-w(VWGTS)e Fq(to)j Fg(FALSE)p Fq(.)75 541 y Fg(COARSEN)p 260
+-541 V 16 w(EWGTS)22 b Fq(Edge)f(con)o(traction)f(can)h(also)g(cause)f(edges)g
+-(in)g(the)g(graph)i(to)e(fall)g(on)h(top)g(of)255 604 y(eac)o(h)13
+-b(other.)21 b(If)14 b(so,)g(the)g(cost)g(of)g(a)h(partition)f(can)g(b)q(e)g
+-(preserv)o(ed)f(b)o(y)g(making)g(the)h(w)o(eigh)o(t)255 666
+-y(of)20 b(the)g(resulting)f(edge)g(equal)h(to)g(the)f(sum)g(of)h(the)f(w)o
+-(eigh)o(ts)g(of)i(those)f(that)g(comprise)255 728 y(it.)h(This)16
+-b(w)o(eigh)o(ting)f(is)g(p)q(erformed)g(if)g Fg(COARSEN)p 1163
+-728 V 16 w(EWGTS)f Fq(is)i Fg(TRUE)e Fq(\(the)i(default\).)21
+-b(In)15 b(the)255 791 y(algorithm)i(b)o(y)g(Bui)g(and)h(Jones)g(the)g
+-(resulting)f(edge)h(is)f(instead)h(giv)o(en)f(a)h(unit)f(w)o(eigh)o(t,)255
+-853 y(whic)o(h)f(will)f(happ)q(en)i(if)e Fg(COARSEN)p 888 853
+-V 16 w(EWGTS)g Fq(is)h Fg(FALSE)p Fq(.)75 915 y Fg(KL)p 130
+-915 V 18 w(ONLY)p 252 915 V 17 w(BNDY)23 b Fq(If)c(the)g(v)o(ertices)f(on)i
+-(the)f(b)q(oundary)i(are)e(kno)o(wn,)h(then)g(it)f(is)g(more)f(e\016cien)o(t)
+-g(to)255 977 y(initialize)11 b(only)j(these)f(v)m(alues)g(when)h(starting)g
+-(Kerninghan{Lin.)21 b(Other)14 b(v)m(alues)f(can)h(b)q(e)255
+-1040 y(ev)m(aluated)j(on)h(an)g(as{needed)g(basis,)f(but)h(t)o(ypically)d
+-(only)i(a)h(small)e(fraction)h(will)f(need)255 1102 y(to)f(b)q(e)f(computed.)
+-19 b(Note)14 b(that)h(v)o(ertices)e(not)i(initially)d(on)j(a)f(b)q(oundary)i
+-(can)f(b)q(e)f(handled)255 1164 y(prop)q(erly;)h(they're)f(just)i(not)g
+-(placed)f(in)o(to)g(the)g(KL)h(data)h(structures)e(un)o(til)f(one)i(of)g
+-(their)255 1226 y(neigh)o(b)q(ors)j(has)h(mo)o(v)o(ed,)d(placing)i(them)e(on)
+-j(the)e(new)h(b)q(oundary)l(.)31 b(In)19 b(the)f(m)o(ultilev)n(el{)255
+-1289 y(KL)h(algorithm,)e(the)i(b)q(oundary)g(can)g(b)q(e)f(easily)g
+-(propagated)i(b)q(et)o(w)o(een)d(lev)o(els,)g(so)i(this)255
+-1351 y(e\016ciency)9 b(can)j(b)q(e)f(realized.)18 b(This)12
+-b(signi\014can)o(tly)e(impro)o(v)o(es)f(the)j(sp)q(eed)f(of)h(the)f
+-(algorithm)255 1413 y(without)19 b(a\013ecting)g(its)f(qualit)o(y)l(.)27
+-b(When)19 b(runing)g(m)o(ultilev)n(el)o({KL,)d(if)i Fg(KL)p
+-1630 1413 V 18 w(ONLY)p 1752 1413 V 17 w(BNDY)f Fq(is)255 1475
+-y(set)c(to)h Fg(TRUE)e Fq(\(the)h(default\))g(then)h(only)f(those)h(v)o
+-(ertices)d(on)j(the)g(b)q(oundary)g(b)q(et)o(w)o(een)f(sets)255
+-1538 y(are)j(initialized.)75 1600 y Fg(KL)p 130 1600 V 18 w(IMBALANCE)21
+-b Fq(See)16 b(discussion)g(in)g Fh(x)p Fq(6.4.)165 1697 y Fm(6.6.)27
+-b(P)n(arameters)18 b(for)g(p)r(ost{pro)r(cessing)g(options.)75
+-1759 y Fg(REFINE)p 234 1759 V 16 w(PARTITION)j Fq(This)f(parameter)f(con)o
+-(trols)h(ho)o(w)g(man)o(y)f(sw)o(eeps)h(are)g(made)e(through)j(the)255
+-1821 y(pairs)16 b(of)g(sets)g(with)f(a)h(nonzero)g(b)q(oundary)h(in)f(an)g
+-(e\013ort)g(to)g(impro)o(v)o(e)d(the)j(partition)f(via)255
+-1883 y(an)k(in)o(v)o(o)q(cation)g(of)g(Kernighan{Lin.)30 b(A)18
+-b(discussion)i(of)f(this)g(approac)o(h)g(can)g(b)q(e)g(found)255
+-1946 y(in)d Fh(x)p Fq(4.3.1.)22 b(The)16 b(default)g(v)m(alue)g(is)g(zero)g
+-(since)f(the)h(pro)q(cess)h(is)f(fairly)g(exp)q(ensiv)o(e.)75
+-2008 y Fg(INTERNAL)p 286 2008 V 16 w(VERTICES)21 b Fq(In)13
+-b(man)o(y)e(parallel)h(computing)g(applications,)h(v)o(ertices)e(with)h(no)i
+-(edges)f(to)255 2070 y(other)g(sets)g(require)e(only)i(lo)q(cal)f(data.)21
+-b(This)13 b(ma)o(y)e(allo)o(w)h(for)h(o)o(v)o(erlap)f(of)h(comm)o(unication)
+-255 2132 y(and)g(computation.)19 b(If)11 b Fg(TRUE)p Fq(,)g(the)h
+-Fg(INTERNAL)p 1112 2132 V 15 w(VERTICES)d Fq(parameter)i(activ)m(ates)h(co)q
+-(de)h(to)255 2195 y(try)h(to)h(increase)f(the)g(minimal)d(n)o(um)o(b)q(er)i
+-(of)i(in)o(ternal)e(v)o(ertices)g(in)h(a)h(set.)21 b(The)14
+-b(algorithm)255 2257 y(for)24 b(this)f(task)g(is)g(sk)o(etc)o(hed)f(in)h
+-Fh(x)p Fq(4.3.2.)42 b(The)24 b(default)f(v)m(alue)g(for)g(this)g(parameter)f
+-(is)255 2319 y Fg(FALSE)e Fq(since)i(this)g(fairly)g(sp)q(ecialized)e
+-(functionalit)o(y)h(is)h(probably)h(not)g(required)e(for)255
+-2382 y(most)15 b(applications.)21 b(W)l(e)16 b(also)h(caution)f(that)g(this)g
+-(can)g(b)q(e)g(a)g(time)e(consuming)h(pro)q(cess)255 2444 y(if)h(the)g
+-(partition)g(submitted)f(is)h(of)g(lo)o(w)g(qualit)o(y)l(.)75
+-2506 y Fg(REFINE)p 234 2506 V 16 w(MAP)24 b Fq(If)d(this)h(parameter)e(is)i
+-Fg(TRUE)e Fq(the)i(mapping)f(of)h(sets)g(to)g(pro)q(cessors)h(is)f(mo)q
+-(di\014ed)255 2568 y(in)g(a)h(greedy)f(manner)f(to)i(impro)o(v)o(e)d(lo)q
+-(calit)o(y)l(.)38 b(Note)22 b(that)h(this)f(do)q(esn't)h(c)o(hange)f(the)255
+-2631 y(comp)q(osition)h(of)h(the)f(sets,)i(just)f(whic)o(h)f(pro)q(cessor)h
+-(eac)o(h)f(set)h(is)f(assigned)h(to.)44 b(The)255 2693 y(algorithm)23
+-b(for)h(this)g(pro)q(cess)h(is)f(describ)q(ed)g(in)f Fh(x)p
+-Fq(4.3.3.)46 b(Since)23 b Fm(Chaco)i Fq(is)f(used)g(for)977
+-2762 y Fk(33)p eop
+-%%Page: 34 34
+-bop 255 43 a Fq(man)o(y)10 b(applications)i(other)g(than)h(parallel)e
+-(computing,)g(the)h(default)f(for)h(this)g(parameter)255 106
+-y(is)21 b Fg(FALSE)p Fq(.)e(But)i(if)f(y)o(ou)i(are)f(really)f(in)o(terested)
+-g(in)h(the)g(qualit)o(y)f(of)h(y)o(our)g(mapping)g(to)255 168
+-y(pro)q(cessors)c(y)o(ou)g(should)f(set)g(it)g(to)h Fg(TRUE)p
+-Fq(.)165 264 y Fm(6.7.)27 b(Arc)n(hitecture)18 b(parameters.)75
+-327 y Fg(ARCHITECTU)o(RE)j Fq(In)16 b(addition)h(to)f(partitioning)h(the)f
+-(graph,)h Fm(Chaco)g Fq(tries)e(to)i(assign)g(subgraphs)255
+-389 y(generated)h(to)g(pro)q(cessors)h(of)g(a)f(parallel)f(computer)f(in)i
+-(an)g(in)o(telligen)o(t)e(manner.)25 b(This)255 451 y(parameter)18
+-b(sp)q(eci\014es)i(the)f(top)q(ology)i(of)f(the)g(parallel)e(computer.)31
+-b(A)19 b(v)m(alue)g(of)h(0)g(\(the)255 514 y(default\))j(sp)q(eci\014es)f(a)i
+-(h)o(yp)q(ercub)q(e,)f(while)f(v)m(alues)h(of)h(1,)g(2)f(or)h(3)f(indicate)f
+-(meshes)g(of)255 576 y(dimensionalit)o(y)14 b(one,)j(t)o(w)o(o)h(or)f(three)g
+-(resp)q(ectiv)o(ely)l(.)k(If)c(y)o(our)g(application)g(do)q(esn't)g(care)255
+-638 y(ab)q(out)k(ho)o(w)f(pieces)e(get)i(assigned)g(to)g(sets,)h(then)e(y)o
+-(ou)h(should)g(simply)d(set)j(this)f(v)m(alue)255 700 y(to)e(1)f(and)h(input)
+-g(the)f(n)o(um)o(b)q(er)e(of)j(sets)f(y)o(ou)h(require)e(when)h(prompted.)21
+-b(This)16 b(migh)o(t)f(b)q(e)255 763 y(the)i(case,)g(for)h(example,)d(if)h(y)
+-o(ou)h(w)o(ere)g(partitioning)g(for)h(a)f(heterogeneous)h(net)o(w)o(ork)f(of)
+-255 825 y(computers)e(coupled)h(b)o(y)g(a)g(slo)o(w)h(or)f(unpredictable)f
+-(net)o(w)o(ork.)165 921 y Fm(6.8.)27 b(Miscellaneous)18 b(parameters.)75
+-984 y Fg(TERM)p 182 984 16 2 v 17 w(PROP)23 b Fq(This)16 b(parameter)e
+-(determines)g(whether)h(or)i(not)f(terminal)e(propagation)j(is)f(in)o(v)o(ok)
+-o(ed)255 1046 y(in)11 b(sp)q(ectral)h(bisection,)f(Kernighan{Lin)i(and)f(m)o
+-(ultilev)n(el)o({KL.)d(Details)j(concerning)f(ter-)255 1108
+-y(minal)h(propagation,)k(a)e(metho)q(d)g(for)g(generating)g(b)q(etter)g
+-(mappings)f(to)i(pro)q(cessors,)g(are)255 1170 y(giv)o(en)f(in)h
+-Fh(x)p Fq(4.2.)22 b(Curren)o(tly)l(,)13 b(sp)q(ectral)i(terminal)f
+-(propagation)i(only)f(w)o(orks)h(in)f(bisection)255 1233 y(mo)q(de,)21
+-b(but)h(with)f(KL)h(and)g(m)o(ultile)o(v)o(e)o(l{KL)d(the)i(metho)q(d)f(can)i
+-(handle)f(an)h(arbitrary)255 1295 y(n)o(um)o(b)q(er)14 b(of)j(sets.)k(The)c
+-(default)f(v)m(alue)g(is)g Fg(FALSE)p Fq(.)75 1357 y Fg(CUT)p
+-156 1357 V 17 w(TO)p 225 1357 V 18 w(HOP)p 321 1357 V 17 w(COST)23
+-b Fq(When)d(p)q(erforming)f(terminal)e(propagation,)22 b(this)d(v)m(alue)h
+-(con)o(trols)f(the)h(rel-)255 1420 y(ativ)o(e)i(imp)q(ortance)g(of)i
+-(generating)g(a)f(new)h(cut)f(edge)g(v)o(ersus)g(increasing)g(the)g(in)o
+-(ter{)255 1482 y(pro)q(cessor)c(distance)f(asso)q(ciated)h(with)e(an)i
+-(existing)e(cut)h(edge.)26 b(This)18 b(parameter)f(th)o(us)255
+-1544 y(allo)o(ws)i(the)f(user)h(to)g(tradeo\013)g(the)g(imp)q(ortance)e(of)i
+-(comm)o(unicati)o(on)e(v)o(olume)f(to)j(com-)255 1606 y(m)o(unication)14
+-b(lo)q(calit)o(y)l(.)20 b(The)d(default)f(v)m(alue)g(is)g(1)p
+-Fj(:)p Fq(0.)75 1669 y Fg(SEQUENCE)21 b Fq(If)12 b(this)g(parameter)f(is)h
+-(set)g(to)g Fg(TRUE)p Fq(,)e Fm(Chaco)j Fq(computes)e(and)i(sorts)g(the)e
+-(Fiedler)g(v)o(ector)255 1731 y(of)16 b(the)f(graph)h(and)g(places)f(the)g
+-(result)f(in)h(a)h(\014le)e(named)h(b)o(y)f Fg(SEQ)p 1461 1731
+-V 18 w(FILENAME)p Fq(.)e(The)j(other)255 1793 y(op)q(erations)k(asso)q
+-(ciated)g(with)e(partitioning)h(are)g(not)g(p)q(erformed.)25
+-b(This)17 b(functionalit)o(y)255 1855 y(is)c(pro)o(vided)g(to)h(assist)g(dev)
+-o(elopmen)o(t)c(of)k(sp)q(ectral)g(graph)g(algorithms,)f(and)h(is)f
+-(discussed)255 1918 y(in)j Fh(x)p Fq(4.1.)22 b(The)16 b(default)g(v)m(alue)g
+-(is)g Fg(FALSE)p Fq(.)75 1980 y Fg(SEQ)p 156 1980 V 17 w(FILENAME)22
+-b Fq(This)15 b(parameter)g(is)g(a)h(c)o(haracter)f(string)g(whic)o(h)g(sp)q
+-(eci\014es)g(the)g(name)g(of)g(the)h(\014le)255 2042 y(to)j(whic)o(h)f(the)h
+-(sorted)g(Fiedler)f(is)g(prin)o(ted)g(if)h Fg(SEQUENCE)d Fq(is)i(nonzero.)30
+-b(The)19 b(default)f(is)255 2104 y(\\)p Fg(Sequence.ou)o(t)p
+-Fq(")75 2167 y Fg(RANDOM)p 234 2167 V 16 w(SEED)23 b Fq(This)17
+-b(is)f(the)g(seed)g(for)g(the)g(random)g(n)o(um)o(b)q(er)e(generator)j
+-(\\rand\(\)".)77 2229 y Fg(NSQRTS)22 b Fq(If)d(y)o(ou)h(are)g(using)h(either)
+-d(m)o(ultilev)n(el{KL)f(or)k(the)e(R)o(QI/Symmlq)d(eigen)k(solv)o(er,)f(then)
+-255 2291 y(coarse)d(v)o(ersions)f(of)h(the)f(graph)h(are)g(created)f(with)g
+-(v)o(ertex)f(w)o(eigh)o(ts.)21 b(The)15 b(square)h(ro)q(ots)255
+-2354 y(of)24 b(these)f(v)o(ertex)e(w)o(eigh)o(ts)i(are)h(also)f(needed.)42
+-b(Since)23 b(these)g(are)g(t)o(ypically)e(in)o(tegers,)255
+-2416 y Fm(Chaco)d Fq(a)o(v)o(oids)e(redundan)o(t)i(computation)e(b)o(y)g
+-(computing)g(the)h(ro)q(ot)h(of)f(eac)o(h)g(distinct)255 2478
+-y(in)o(teger)11 b(once)i(and)g(storing)g(it)f(in)g(the)g(arra)o(y)g
+-Fg(SQRTS)p Fq(.)e(The)j(v)m(alue)f(of)h Fg(NSQRTS)d Fq(is)i(the)g(length)255
+-2540 y(of)17 b(this)g(arra)o(y)l(,)f(and)i(for)f(b)q(est)g(p)q(erformance)e
+-(it)i(should)g(b)q(e)g(somewhat)f(larger)h(than)g(the)255 2603
+-y(n)o(um)o(b)q(er)g(of)h(v)o(ertices)f(in)g(the)i(original)f(graph)h(divided)
+-e(b)o(y)h(the)g(n)o(um)o(b)q(er)e(of)j(v)o(ertices)d(in)255
+-2665 y(the)c(coarsest)h(graph.)21 b(A)12 b(large)g(v)m(alue)g(ma)o(y)f(use)h
+-(a)h(small)e(amoun)o(t)g(of)i(unnecessary)f(space,)977 2762
+-y Fk(34)p eop
+-%%Page: 35 35
+-bop 255 43 a Fq(while)15 b(a)i(small)e(v)m(alue)h(ma)o(y)f(lead)h(to)g(a)h
+-(sligh)o(t)f(excess)g(of)g(computation.)21 b(The)16 b(default)g(is)255
+-106 y(1000.)75 168 y Fg(MAKE)p 182 168 16 2 v 17 w(VWGTS)23
+-b Fq(In)16 b(matrix{v)o(ector)e(m)o(ultipli)o(cation,)f(the)k(cost)f(asso)q
+-(ciated)i(with)e(a)h(ro)o(w)f(is)g(prop)q(or-)255 230 y(tional)c(to)h(the)g
+-(n)o(um)o(b)q(er)d(of)j(nonzeros)g(in)f(that)h(ro)o(w.)21 b(If)12
+-b(v)o(ertices)e(of)j(y)o(our)g(graph)g(represen)o(t)255 292
+-y(ro)o(ws)k(of)f(a)h(matrix,)d Fg(MAKE)p 743 292 V 17 w(VWGTS)g
+-Fq(allo)o(ws)i(y)o(ou)g(to)h(automatically)d(w)o(eigh)o(t)i(them)e(in)i(this)
+-255 355 y(w)o(a)o(y)l(.)25 b(Note)17 b(that)i(if)e Fg(MAKE)p
+-753 355 V 17 w(VWGTS)f Fq(is)h Fg(TRUE)f Fq(then)i(an)o(y)f(w)o(eigh)o(ts)g
+-(in)h(y)o(our)f(graph)i(\014le)e(are)255 417 y(ignored.)k(The)13
+-b(default)g(for)h(this)g(parameter)e(is)h Fg(FALSE)p Fq(,)f(meaning)g(that)i
+-(the)g(option)g(isn't)255 479 y(in)o(v)o(ok)o(ed.)75 541 y
+-Fg(FREE)p 182 541 V 17 w(GRAPH)23 b Fm(Chaco)16 b Fq(\014rst)g(reads)g(a)g
+-(graph)g(in)o(to)f(a)h(simple)e(format)g(b)q(efore)i(con)o(v)o(erting)e(it)h
+-(in)o(to)h(a)255 604 y(more)f(complex)g(data)i(structure.)22
+-b(This)17 b(simple)d(format)i(is)g(used)h(to)g(allo)o(w)f(the)h(co)q(de)g(to)
+-255 666 y(b)q(e)c(called)e(from)h(F)l(ortran)h(as)g(describ)q(ed)f(in)g
+-Fh(x)p Fq(7.)21 b(Once)12 b(the)g(graph)i(has)f(b)q(een)f(reformatted)255
+-728 y(the)k(space)g(used)g(b)o(y)f(the)h(simple)e(format)h(is)h(deleted)f(if)
+-g Fg(FREE)p 1409 728 V 17 w(GRAPH)f Fq(is)i Fg(TRUE)p Fq(,)e(whic)o(h)h(is)
+-255 791 y(the)g(default.)21 b(Ho)o(w)o(ev)o(er,)13 b(if)i(y)o(ou)g(are)h
+-(calling)e(the)i(co)q(de)f(from)g(other)g(soft)o(w)o(are,)g(y)o(ou)h(ma)o(y)
+-255 853 y(wish)d(to)f(sa)o(v)o(e)g(the)h(simple)d(graph)j(structure)f(for)h
+-(other)g(purp)q(oses,)h(or)f(y)o(ou)f(ma)o(y)f(not)i(ha)o(v)o(e)255
+-915 y(generated)18 b(it)f(via)g(C)h Fg(malloc\(\))d Fq(calls.)24
+-b(In)18 b(these)f(cases,)h(y)o(ou)f(should)h(set)g Fg(FREE)p
+-1778 915 V 17 w(GRAPH)255 977 y Fq(to)f Fg(FALSE)p Fq(,)d(to)i(disable)g
+-(this)g(feature.)75 1040 y Fg(PARAMS)p 234 1040 V 16 w(FILENAME)22
+-b Fq(This)11 b(parameter)g(de\014nes)g(the)h(name)e(of)i(the)f(\014le)g(from)
+-g(whic)o(h)g(the)g(co)q(de)h(reads)255 1102 y(parameter)f(mo)q(di\014cations)
+-h(as)h(describ)q(ed)f(in)g Fh(x)p Fq(6.10.)20 b(The)13 b(default)f(is)g
+-(\\User)p 1669 1102 15 2 v 17 w(P)o(arams")g(in)255 1164 y(the)h(executable)g
+-(directory)l(.)19 b(This)14 b(is)f(the)h(only)f(parameter)g(that)h(cannot)g
+-(b)q(e)g(c)o(hanged)g(at)255 1226 y(run)d(time.)17 b(T)l(o)12
+-b(c)o(hange)e(this)h(\014le)f(name)g(y)o(ou)h(m)o(ust)e(edit)h(the)h(\014le)f
+-(\\co)q(de/main/user)p 1788 1226 V 18 w(params.c")255 1289
+-y(and)17 b(recompile.)165 1385 y Fm(6.9.)27 b(P)n(arameters)12
+-b(that)h(con)n(trol)g(debugging)g(output.)24 b Fq(These)11
+-b(parameters)g(allo)o(w)g(y)o(ou)75 1448 y(to)17 b(in)o(v)o(ok)o(e)e
+-Fm(Chaco)p Fq('s)j(built-in)e(debugging)i(capabilities.)k(The)17
+-b(default)g(v)m(alue)g(of)g(these)g(parame-)75 1510 y(ters,)h(with)f(one)h
+-(exception,)e(is)i(0,)g(sp)q(ecifying)f(that)h(no)g(debugging)h(output)f
+-(should)g(b)q(e)g(prin)o(ted.)75 1572 y(\(The)e(exception)g(is)g
+-Fg(DEBUG)p 595 1572 16 2 v 17 w(PARAMS)p Fq(,)d(whic)o(h)j(has)h(a)g(default)
+-f(v)m(alue)h(of)f(2.\))22 b(If)16 b(no)h(range)g(of)g(v)m(alues)75
+-1634 y(is)d(indicated,)f(the)g(parameter)g(is)h(treated)f(as)i(a)f
+-Fg(TRUE/FALSE)c Fq(v)m(alue)k(and)h(an)o(y)e(nonzero)h(v)m(alue)g(will)75
+-1697 y(activ)m(ate)i(it.)75 1759 y Fg(DEBUG)p 208 1759 V 17
+-w(EVECS)22 b Fq(This)c(parameter)e(con)o(trols)i(the)f(quan)o(tit)o(y)f(of)i
+-(debug)g(output)g(concerning)f(calcu-)255 1821 y(lation)h(of)g(eigen)o(v)o
+-(ectors.)24 b(When)18 b(set)g(to)g(zero,)f(no)h(output)h(is)f(generated)f
+-(except)g(when)255 1883 y(an)e(unreco)o(v)o(erable)f(error)g(condition)h(is)g
+-(encoun)o(tered,)e(in)i(whic)o(h)f(case)h(a)g(short)h(message)255
+-1946 y(is)k(prin)o(ted)f(b)q(efore)i(the)e(program)h(ab)q(orts.)35
+-b(A)20 b(v)m(alue)g(of)g(1)h(will)e(pro)q(duce)h(a)h(mo)q(derate)255
+-2008 y(amoun)o(t)12 b(amoun)o(t)h(of)g(information,)f(2)i(a)f(bit)g(more,)f
+-(and)h(so)h(on)g(up)f(to)g(a)h(maxim)n(um)9 b(v)m(alue)255
+-2070 y(of)17 b(5.)75 2132 y Fg(DEBUG)p 208 2132 V 17 w(KL)23
+-b Fq(This)18 b(\015ag)h(con)o(trols)e(the)h(output)g(in)f(the)h
+-(Kernighan{Lin)g(routines.)26 b(No)17 b(debugging)255 2195
+-y(output)f(is)f(generated)g(if)f(the)h(v)m(alue)g(is)g(0,)g(while)f(the)h
+-(impro)o(v)o(em)o(e)o(n)o(t)d(due)j(to)h(KL)f(at)h(eac)o(h)255
+-2257 y(step)i(is)g(sho)o(wn)h(if)f(the)g(v)m(alue)g(is)g(1.)28
+-b(V)l(alues)17 b(of)i(2)g(and)g(3)f(generate)g(large)h(quan)o(tities)e(of)255
+-2319 y(output,)f(and)h(should)g(only)f(b)q(e)g(in)o(v)o(ok)o(ed)f(b)o(y)h(an)
+-g(exp)q(ert.)75 2382 y Fg(DEBUG)p 208 2382 V 17 w(INERTIAL)21
+-b Fq(If)h(y)o(ou)h(are)f(using)h(the)f(inertial)g(metho)q(d,)g(this)h(\015ag)
+-g(will)f(turn)g(on)h(output)255 2444 y(concerning)16 b(the)g(computation)f
+-(of)i(the)f(principle)e(axis)j(of)f(the)g(graph.)75 2506 y
+-Fg(DEBUG)p 208 2506 V 17 w(CONNECTED)21 b Fq(If)i(y)o(ou)g(are)h(enforcing)f
+-(connectivit)o(y)e(and)j(using)g(a)g(sp)q(ectral)g(metho)q(d,)g(a)255
+-2568 y(v)m(alue)16 b(of)h(1)g(for)g(this)g(\015ag)h(turns)f(on)g(a)g(small)e
+-(amoun)o(t)h(of)h(output)g(in)f(the)h(routines)g(that)255 2631
+-y(iden)o(tify)h(connected)i(comp)q(onen)o(ts.)32 b(This)20
+-b(will)f(tell)g(y)o(ou)h(if)f(subgraphs)j(ha)o(v)o(e)d(b)q(ecome)255
+-2693 y(disconnected)d(in)f(the)h(course)h(of)f(a)h(decomp)q(osition.)977
+-2762 y Fk(35)p eop
+-%%Page: 36 36
+-bop 75 43 a Fg(DEBUG)p 208 43 16 2 v 17 w(PERTURB)21 b Fq(A)g(v)m(alue)g(of)h
+-(1)g(for)f(this)h(\015ag)g(turns)g(on)g(a)f(small)f(amoun)o(t)h(of)g(output)h
+-(in)f(the)255 106 y(routines)16 b(for)h(randomly)e(p)q(erturbing)h(the)g
+-(matrix.)75 168 y Fg(DEBUG)p 208 168 V 17 w(ASSIGN)22 b Fq(When)e(using)g(a)g
+-(sp)q(ectral)f(metho)q(d,)h(the)f(mapping)g(from)g(the)h(eigen)o(v)o(ectors)e
+-(to)255 230 y(a)f(partition)f(can)g(b)q(e)h(complicated,)d(particularly)h
+-(for)h(sp)q(ectral)h(quadrisection)e(and)i(o)q(c-)255 292 y(tasection.)28
+-b(This)19 b(parameter)e(turns)i(on)g(output)g(in)f(the)h(routines)f(that)h
+-(compute)e(this)255 355 y(mapping.)75 417 y Fg(DEBUG)p 208
+-417 V 17 w(OPTIMIZE)k Fq(With)16 b(sp)q(ectral)f(quadrisection)h(or)g(sp)q
+-(ectral)g(o)q(ctasection,)g(part)g(of)g(the)g(map-)255 479
+-y(ping)f(to)f(a)h(partition)g(in)o(v)o(olv)o(es)d(a)j(nonlinear)f
+-(optimization.)19 b(This)c(\015ag)g(con)o(trols)f(debug-)255
+-541 y(ging)j(output)g(in)e(the)h(optimization)f(subroutines.)75
+-604 y Fg(DEBUG)p 208 604 V 17 w(BPMATCH)21 b Fq(When)c(using)f(sp)q(ectral)g
+-(quadrisection)g(or)g(o)q(ctasection,)g(the)g(tric)o(kiest)e(part)j(of)255
+-666 y(the)h(mapping)g(from)g(eigen)o(v)o(ectors)f(to)i(a)g(partition)g(in)o
+-(v)o(olv)o(es)e(solving)h(a)i(minim)o(al)c(cost)255 728 y(assignmen)o(t)f
+-(problem)g(in)h(a)h(bipartite)e(graph.)23 b(This)16 b(\015ag)i(turns)e(on)h
+-(the)f(output)h(in)f(the)255 791 y(corresp)q(onding)j(sections)g(of)f(the)g
+-(co)q(de.)28 b(A)18 b(v)m(alue)g(of)h(1)f(giv)o(es)g(a)h(mo)q(derate)e(amoun)
+-o(t)h(of)255 853 y(cryptic)c(output,)i(while)e(a)i(v)m(alue)f(of)g(2)h(do)q
+-(es)g(more)e(error)h(c)o(hec)o(king)e(and)j(can)g(generate)f(a)255
+-915 y(lot)h(of)h(output.)75 977 y Fg(DEBUG)p 208 977 V 17 w(COARSEN)k
+-Fq(If)14 b(y)o(ou)h(in)o(v)o(ok)o(e)d(m)o(ultilev)n(el{KL)g(or)j(the)f(R)o
+-(QI/Symm)o(lq)d(eigen)j(solv)o(er,)g(the)g(co)q(de)255 1040
+-y(will)f(construct)h(a)h(sequence)e(of)i(increasingly)e(coarser)h(appro)o
+-(ximations)g(to)g(the)g(original)255 1102 y(graph.)38 b(This)21
+-b(parameter)g(con)o(trols)g(the)g(output)h(for)g(the)f(routines)h(p)q
+-(erforming)e(this)255 1164 y(pro)q(cess.)75 1226 y Fg(DEBUG)p
+-208 1226 V 17 w(MEMORY)i Fq(This)g(v)m(ariable)g(turns)g(on)h(some)e
+-(consistency)g(c)o(hec)o(ks)g(in)g(the)h(allo)q(cation)g(and)255
+-1289 y(freeing)13 b(of)g(memory)l(.)18 b(Unless)12 b(y)o(ou)i(encoun)o(ter)e
+-(problems)h(y)o(ou)g(think)g(migh)o(t)e(b)q(e)j(memory)255
+-1351 y(related,)h(this)h(v)m(alue)g(should)h(b)q(e)f(left)g(at)g(0.)75
+-1413 y Fg(DEBUG)p 208 1413 V 17 w(INPUT)22 b Fq(If)13 b(this)h(is)f(set)h(to)
+-g(1,)g(a)g(message)f(is)g(prin)o(ted)g(con\014rming)g(that)h(the)f(input)h
+-(\014les)f(ha)o(v)o(e)255 1475 y(b)q(een)j(read.)75 1538 y
+-Fg(DEBUG)p 208 1538 V 17 w(PARAMS)22 b Fq(This)15 b(v)m(alue)f(con)o(trols)h
+-(ho)o(w)g(m)o(uc)o(h)d(output)k(is)e(generated)h(while)e(reading)i(param-)255
+-1600 y(eters)f(from)e(the)i(\\User)p 688 1600 15 2 v 18 w(P)o(arams")f
+-(\014le.)20 b(A)14 b(v)m(alue)f(of)i(1)f(means)f(that)i(the)e(co)q(de)h(will)
+-f(notify)255 1662 y(y)o(ou)j(of)g(an)o(y)g(parameter)f(settings)h(it)g(do)q
+-(es)g(not)h(recognize)e(\(and)i(therefore)e(ignores\).)21 b(A)255
+-1725 y(v)m(alue)d(of)g(2)g(prin)o(ts)g(a)g(con\014rming)f(message)g(for)h
+-(eac)o(h)g(parameter)e(v)m(alue)i(that)g(is)g(reset.)255 1787
+-y(The)e(default)g(v)m(alue)g(is)g(2.)75 1849 y Fg(DEBUG)p 208
+-1849 16 2 v 17 w(INTERNAL)21 b Fq(If)d Fg(INTERNAL)p 713 1849
+-V 16 w(VERTICES)d Fq(is)k(nonzero,)g(then)f(the)g(co)q(de)h(will)f(try)g(to)h
+-(increase)255 1911 y(the)e(n)o(um)o(b)q(er)e(of)j(en)o(tirely)d(in)o(ternal)h
+-(v)o(ertices)g(in)g(the)h(sets)h(with)f(the)g(few)o(est)f(of)i(them)d(as)255
+-1974 y(describ)q(ed)k(in)g Fh(x)p Fq(4.3.2.)31 b(If)19 b Fg(DEBUG)p
+-886 1974 V 17 w(INTERNAL)d Fq(is)j(nonzero,)h(debugging)h(output)f(will)e(b)q
+-(e)255 2036 y(generated)e(in)g(this)g(section)g(of)h(the)f(co)q(de.)75
+-2098 y Fg(DEBUG)p 208 2098 V 17 w(REFINE)p 381 2098 V 16 w(PART)23
+-b Fq(If)d Fg(REFINE)p 733 2098 V 17 w(PARTITION)d Fq(is)k(nonzero)h(then)e
+-Fm(Chaco)i Fq(tries)f(to)g(impro)o(v)o(e)e(a)255 2160 y(partition)c(b)o(y)f
+-(lo)q(cally)g(re\014ning)g(the)h(b)q(oundaries)g(b)q(et)o(w)o(een)f(sets)h
+-(as)g(discussed)g(in)f Fh(x)p Fq(4.3.1.)255 2223 y(If)j Fg(DEBUG)p
+-438 2223 V 17 w(REFINE)p 611 2223 V 16 w(PART)g Fq(is)h(nonzero,)g(the)f(co)q
+-(de)i(will)d(generate)i(debugging)h(output)f(in)255 2285 y(this)e(op)q
+-(eration.)75 2347 y Fg(DEBUG)p 208 2347 V 17 w(REFINE)p 381
+-2347 V 16 w(MAP)23 b Fq(If)14 b Fg(REFINE)p 701 2347 V 16 w(MAP)f
+-Fq(is)g Fg(TRUE)p Fq(,)f(co)q(de)i(is)g(activ)m(ated)g(to)g(sw)o(ap)g(sets)h
+-(among)e(pro)q(ces-)255 2409 y(sors)k(to)g(impro)o(v)o(e)c(lo)q(calit)o(y)l
+-(.)20 b Fg(DEBUG)p 918 2409 V 17 w(REFINE)p 1091 2409 V 16
+-w(MAP)15 b Fq(con)o(trols)i(output)f(in)g(this)g(pro)q(cess.)75
+-2472 y Fg(DEBUG)p 208 2472 V 17 w(TRACE)22 b Fq(If)c(this)g(v)m(alue)g(is)g
+-(nonzero,)h(messages)e(are)i(prin)o(ted)e(whic)o(h)h(rev)o(eal)e(the)i(main)f
+-(ex-)255 2534 y(ecution)i(path.)30 b(If)19 b(the)g(co)q(de)g(is)g(running)g
+-(in)o(to)g(problems,)f(this)h(parameter)f(ma)o(y)g(help)255
+-2596 y(narro)o(w)f(do)o(wn)g(where)f(they)f(are)i(o)q(ccurring.)977
+-2762 y Fk(36)p eop
+-%%Page: 37 37
+-bop 75 43 a Fg(DEBUG)p 208 43 16 2 v 17 w(MACH)p 329 43 V 17
+-w(PARAMS)22 b Fm(Chaco)15 b Fq(needs)f(to)h(compute)e(a)i(few)f(n)o(umerical)
+-e(v)m(alues)i(that)h(are)f(mac)o(hine)255 106 y(dep)q(enden)o(t.)21
+-b(If)16 b(this)h(\015ag)g(is)f(nonzero)h(then)f(the)g(v)m(alues)h(it)f
+-(computes)f(are)h(prin)o(ted)g(out.)255 168 y(If)22 b(y)o(ou)h(are)f(ha)o
+-(ving)h(di\016cult)o(y)d(getting)j(the)f(co)q(de)h(to)g(run)g(on)g(a)g(new)g
+-(mac)o(hine,)e(the)255 230 y(parameter)15 b(calculation)h(ma)o(y)e(b)q(e)j
+-(failing;)e(this)h(\015ag)h(will)e(help)h(y)o(ou)g(detect)f(that.)165
+-327 y Fm(6.10.)27 b(Mo)r(difying)12 b(parameters)f(at)i(run)g(time.)22
+-b Fq(Y)l(ou)11 b(can)h(mo)q(dify)e(the)h(user)g(parameters)75
+-389 y(at)23 b(run)f(time)e(b)o(y)i(sp)q(ecifying)f(the)h(desired)g(c)o
+-(hanges)g(in)g(a)g(\014le)g(called)f(\\User)p 1569 389 15 2
+-v 17 w(P)o(arams")h(in)g(the)75 451 y(executable)16 b(directory)l(.)25
+-b(\(Y)l(ou)18 b(can)g(c)o(hange)f(the)h(name)e(of)i(this)g(\014le)f(b)o(y)g
+-(mo)q(difying)g(the)g(v)m(alue)h(of)75 514 y Fg(PARAMS)p 234
+-514 16 2 v 16 w(FILENAME)c Fq(in)j(\\user)p 641 514 15 2 v
+-18 w(params.c".\))23 b(The)17 b(\014rst)h(thing)f Fm(Chaco)h
+-Fq(do)q(es)g(is)f(read)g(this)g(\014le)g(\(if)75 576 y(it)f(exists\),)f(and)i
+-(mak)o(e)d(the)i(sp)q(eci\014ed)g(c)o(hanges)g(to)h(parameter)e(v)m(alues.)
+-165 638 y(Lines)h(of)g(the)g(\\User)p 556 638 V 18 w(P)o(arams")g(\014le)f
+-(should)i(con)o(tain)e(a)i(parameter)e(name)g(\(using)h(an)o(y)g(com-)75
+-700 y(bination)j(of)f(upp)q(er)h(and)g(lo)o(w)o(er)f(case\))g(follo)o(w)o(ed)
+-g(b)o(y)g(the)g(new)g(v)m(alue.)28 b(An)18 b(`=')g(ma)o(y)e(b)q(e)j(used)g
+-(to)75 763 y(separate)14 b(the)g(parameter)f(name)g(and)h(v)m(alue,)g(but)g
+-(is)g(not)h(required.)k(In)o(teger)13 b(and)h(real)g(v)m(alues)g(are)75
+-825 y(sp)q(eci\014ed)f(in)g(the)g(normal)f(input)h(manner,)f(and)i(logical)f
+-(parameters)f(can)i(b)q(e)f(sp)q(eci\014ed)g(b)o(y)g(strings)75
+-887 y(starting)i(with)f(`T')f(or)h(`t')f(for)i(true)f(\(one\))g(and)g(`F')f
+-(or)i(`f)s(')e(for)i(false)f(\(zero\).)20 b(Lines)14 b(b)q(eginning)g(with)75
+-949 y(a)j(`\045')e(or)h(a)h(`#')e(are)h(ignored.)165 1012 y(If)i(y)o(ou)g
+-(are)h(using)g(a)g(single)f(in)o(v)o(o)q(cation)g(of)h Fm(Chaco)g
+-Fq(to)g(p)q(erform)f(sev)o(eral)f(decomp)q(ositions,)75 1074
+-y(y)o(ou)23 b(can)g(v)m(ary)g(parameters)f(b)q(et)o(w)o(een)g(problems)f(b)o
+-(y)h(adding)i(a)f(line)f(to)h(the)g(\\User)p 1722 1074 V 17
+-w(P)o(arams")75 1136 y(\014le)g(consisting)g(of)h(the)f(string)g
+-Fg(STOP)p Fq(.)f(When)h Fm(Chaco)h Fq(encoun)o(ters)f(a)g Fg(STOP)f
+-Fq(it)h(quits)g(reading)75 1198 y(parameters)15 b(and)i(partitions)g(or)g
+-(sequences)e(the)h(graph.)23 b(When)17 b(the)f(second)g(problem)f(is)h(b)q
+-(egun)75 1261 y Fm(Chaco)e Fq(con)o(tin)o(ues)e(reading)i(new)f(parameter)f
+-(v)m(alues)h(from)f(where)h(it)g(left)f(o\013)j(un)o(til)d(it)g(encoun)o
+-(ters)75 1323 y(another)i Fg(STOP)e Fq(or)i(the)f(end)g(of)h(the)f(\\User)p
+-852 1323 V 17 w(P)o(arams")h(\014le.)19 b(An)o(y)13 b(n)o(um)o(b)q(er)e(of)j
+-(stop)g(commands)e(ma)o(y)75 1385 y(b)q(e)18 b(used.)24 b Fd(Note)19
+-b(that)g(the)g(p)n(ar)n(ameter)e(changes)j(made)f(for)f(the)h(\014rst)f(pr)n
+-(oblem)h(ar)n(e)e(stil)r(l)j(in)f(e\013e)n(ct)75 1448 y(unless)g(later)f
+-(lines)g(pr)n(ovide)f(newer)i(values.)k Fq(Consider)16 b(the)g(follo)o(wing)g
+-(sample)f(\014le.)75 1559 y Fg(\045This)24 b(is)h(a)g(sample)e(run-time)g
+-(parameter)f(modificatio)o(n)h(file.)75 1621 y(Architectu)o(re)f(3)75
+-1683 y(term)p 182 1683 16 2 v 17 w(prop)i(True)75 1745 y(#debug)p
+-234 1745 V 16 w(memory)g(=)h(1)75 1808 y(Stop)75 1870 y(TERM)p
+-182 1870 V 17 w(PROP)f(=)h(f)75 1994 y Fq(In)16 b(the)f(\014rst)h(problem,)e
+-(the)i(arc)o(hitecture)e(is)i(set)f(to)h(b)q(e)g(a)h(three-dimensional)c
+-(mesh,)i(and)h(termi-)75 2057 y(nal)j(propagation)i(is)e(enabled.)29
+-b(In)18 b(the)h(second)g(problem,)f(the)h(arc)o(hitecture)e(remains)h(a)h
+-(three-)75 2119 y(dimensional)c(mesh,)f(but)i(terminal)f(propagation)i(is)g
+-(no)o(w)f(disabled.)165 2181 y(\033)g(v)165 2278 y Fm(7.)28
+-b(Calling)19 b(Chaco)j(from)d(other)g(programs.)j Fq(Throughout)e(this)d(do)q
+-(cumen)o(t)g(w)o(e)g(ha)o(v)o(e)75 2340 y(assumed)c(that)i
+-Fm(Chaco)f Fq(is)g(b)q(eing)g(used)g(as)h(a)f(stand{alone)i(program.)k(Ho)o
+-(w)o(ev)o(er,)12 b(this)i(needn't)f(b)q(e)75 2402 y(the)k(case.)26
+-b(W)l(e)17 b(designed)h(v)o(ersion)f(2.0)h(to)g(allo)o(w)f(for)h(easy)g(in)o
+-(terface)e(with)i(other)f(co)q(des)i(written)75 2465 y(in)i(either)g(C)g(or)h
+-(F)l(ortran.)37 b(The)22 b(mec)o(hanism)c(for)k(this)f(in)o(terface)f(is)h
+-(describ)q(ed)g(b)q(elo)o(w.)37 b(Some)75 2527 y(familiarit)o(y)13
+-b(with)j(the)g(remainder)f(of)h(this)g(do)q(cumen)o(t)f(is)h(assumed.)165
+-2589 y(The)21 b Fg(interface\(\))d Fq(routine)j(and)h(can)g(b)q(e)f(found)h
+-(in)f(the)g(\014le)g(\\co)q(de/main/in)o(terface.c".)75 2651
+-y(This)d(is)f(the)g(routine)g(that)h Fm(Chaco)g Fq(itself)e(in)o(v)o(ok)o(es)
+-g(after)h(prompting)g(the)g(user)h(for)f(all)g(the)g(nec-)977
+-2762 y Fk(37)p eop
+-%%Page: 38 38
+-bop 75 43 a Fq(essary)20 b(input.)32 b(Consequen)o(tly)l(,)20
+-b(no)g(functionalit)o(y)f(is)h(lost)g(b)o(y)f(calling)g Fg(interface\(\))d
+-Fq(y)o(ourself.)75 106 y(The)e(input)g(can)g(still)f(b)q(e)h(c)o(hec)o(k)o
+-(ed)d(for)j(consistency)l(,)g(all)f(the)h(output)g(options)h(are)f(still)f
+-(activ)o(e)f(and)75 168 y(the)17 b(abilit)o(y)g(to)h(mo)q(dify)e(parameters)h
+-(at)h(run)f(time)f(b)o(y)h(reading)h(a)g(\014le)f(as)h(describ)q(ed)f(in)h
+-Fh(x)p Fq(6.10)g(is)75 230 y(main)o(tained.)26 b(\(The)18 b(parameters)g
+-Fg(ARCHITECT)o(URE)o Fq(,)d Fg(EIGEN)p 1202 230 16 2 v 17 w(TOLERANCE)g
+-Fq(and)k Fg(RANDOM)p 1721 230 V 16 w(SEED)e Fq(are)75 292 y(made)f(obsolete)i
+-(b)o(y)f(the)g(argumen)o(ts)g(to)h Fg(interface\()o(\))d Fq(as)j(detailed)f
+-(b)q(elo)o(w,)g(and)h Fg(DEBUG)p 1778 292 V 17 w(INPUT)75 355
+-y Fq(and)j Fg(PROMPT)e Fq(b)q(ecome)g(irrelev)m(an)o(t,)i(but)g(all)f(other)h
+-(parameters)f(remain)f(activ)o(e.\))34 b(The)21 b(abilit)o(y)75
+-417 y(to)d(con)o(trol)f(the)h Fd(go)n(als)f Fq(argumen)o(t)g(describ)q(ed)g
+-(b)q(elo)o(w)g(actually)g(giv)o(es)g(y)o(ou)h(greater)f(functionalit)o(y)75
+-479 y(than)g(y)o(ou)f(w)o(ould)g(ha)o(v)o(e)g(in)g(stand{alone)h(mo)q(de.)165
+-541 y(The)j(in)o(terface)f(routine)h(returns)g(0)h(if)f(the)g(partitioning)g
+-(is)g(successful,)g(and)h(1)g(otherwise.)75 604 y(T)o(ypically)l(,)i(a)h
+-(return)f(co)q(de)g(of)h(1)g(indicates)e(the)i(detection)e(of)i(some)e
+-(inconsistencies)g(in)h(the)75 666 y(input)13 b(argumen)o(ts.)19
+-b(The)14 b(argumen)o(ts)e(to)i Fg(interface\()o(\))c Fq(describ)q(e)j(the)g
+-(graph,)h(input)f(and)h(output)75 728 y(\014les)h(and)g(arra)o(ys,)g(prop)q
+-(erties)h(of)f(the)g(desired)f(decomp)q(osition)g(and)i(the)f(requested)f
+-(partitioning)75 791 y(algorithm.)20 b(The)c(argumen)o(ts)g(are)g(describ)q
+-(ed)g(b)q(elo)o(w)g(in)g(the)g(order)g(in)g(whic)o(h)g(they)f(o)q(ccur.)75
+-853 y(A.)g(Argumen)o(ts)g(describing)h(the)g(graph.)189 915
+-y Fm(1.)i(n)n(vtxs.)24 b Fq(T)o(yp)q(e)d(in)o(t.)34 b(This)21
+-b(is)g(the)g(n)o(um)o(b)q(er)e(of)i(v)o(ertices)e(in)i(the)g(graph.)36
+-b(V)l(ertices)19 b(are)255 977 y(n)o(um)o(b)q(ered)14 b(from)h(1)i(to)g
+-Fd(nvtxs)p Fq(.)189 1040 y Fm(2.)h(start.)24 b Fq(T)o(yp)q(e)15
+-b(in)o(t)g(*.)21 b(Although)16 b Fm(Chaco)g Fq(in)o(ternally)e(uses)i(a)f(C)h
+-(structure)f(to)h(represen)o(t)255 1102 y(the)c(graph,)h(a)f(simpler)e
+-(represen)o(tation)h(at)i(the)e(start)i(allo)o(ws)f(for)g(in)o(terface)f
+-(with)g(F)l(ortran)255 1164 y(programs.)23 b(The)17 b Fd(start)g
+-Fq(arra)o(y)g(is)f(of)h(size)f(\()p Fd(nvtxs)p Fq(+1\).)25
+-b(It's)16 b(v)m(alues)h(are)g(indices)f(in)o(to)g(the)255 1226
+-y Fd(adjac)n(ency)g Fq(arra)o(y)l(.)21 b(The)16 b(v)m(alues)f(in)g
+-Fd(adjac)n(ency)h Fq(from)f Fd(start)p Fq([)p Fj(i)8 b Fh(\000)h
+-Fq(1])16 b(to)g Fd(start)p Fq([)p Fj(i)p Fq(])p Fh(\000)p Fq(1)e(are)h(the)
+-255 1289 y(v)o(ertices)h(adjacen)o(t)h(to)h(v)o(ertex)f Fj(i)g
+-Fq(in)g(the)h(graph.)26 b(\(Note)18 b(that)g(C)g(arra)o(ys)g(b)q(egin)g(at)g
+-(zero,)255 1351 y(so)f(in)f(F)l(ortran,)g(the)g(relev)m(an)o(t)f(range)i(w)o
+-(ould)f(b)q(e)h Fd(start)p Fq([)p Fj(i)p Fq(])e(to)h Fd(start)p
+-Fq(\()p Fj(i)11 b Fq(+)g(1\))g Fh(\000)g Fq(1.\))189 1413 y
+-Fm(3.)18 b(adjacency)-5 b(.)24 b Fq(T)o(yp)q(e)13 b(in)o(t)g(*.)20
+-b(As)13 b(indicated)g(in)f(the)h(description)g(of)g Fd(start)p
+-Fq(,)g(this)g(arra)o(y)h(con-)255 1475 y(tains)k(a)f(list)g(of)h(edges)f(for)
+-h(all)f(v)o(ertices)e(in)i(the)g(graph.)26 b(Note)17 b(that)h(if)f(the)g
+-Fg(FREE)p 1778 1475 V 17 w(GRAPH)255 1538 y Fq(parameter)e(from)g
+-Fh(x)q Fq(6.8)h(is)g(set)h(to)f Fg(TRUE)p Fq(,)f(then)h(after)g(con)o(v)o
+-(erting)g(to)g(a)h(new)g(data)g(struc-)255 1600 y(ture,)h(b)q(oth)h
+-Fd(start)g Fq(and)f Fd(adjac)n(ency)h Fq(are)g(freed.)27 b(If)17
+-b(this)i(is)f(inappropriate)g(for)h(y)o(our)f(ap-)255 1662
+-y(plication)c(\()p Fd(e.g.)38 b Fq(y)o(ou)14 b(w)o(an)o(t)h(to)g(k)o(eep)e
+-(the)i(graph,)g(or)g(y)o(ou)g(didn't)f(dynamically)e(allo)q(cate)255
+-1725 y(these)k(arra)o(ys\),)g(then)g(y)o(ou)g(should)h(set)f
+-Fg(FREE)p 1100 1725 V 17 w(GRAPH)f Fq(to)h Fg(FALSE)p Fq(.)189
+-1787 y Fm(4.)i(vwgts.)24 b Fq(T)o(yp)q(e)e(in)o(t)g(*.)40 b(This)23
+-b(arra)o(y)f(of)h(length)f Fd(nvtxs)i Fq(sp)q(eci\014es)e(w)o(eigh)o(ts)g
+-(for)g(all)g(the)255 1849 y(v)o(ertices.)d(If)14 b(y)o(ou)g(pass)h(in)f(a)h
+-(NULL)f(p)q(oin)o(ter,)g(then)g(all)g(v)o(ertices)e(are)j(giv)o(en)e(unit)h
+-(w)o(eigh)o(t.)255 1911 y(V)l(ertex)h(w)o(eigh)o(ts)g(should)i(b)q(e)g(p)q
+-(ositiv)o(e.)189 1974 y Fm(5.)h(ewgts.)24 b Fq(T)o(yp)q(e)16
+-b(\015oat)h(*)g(\(F)l(ortran)f(t)o(yp)q(e)g(real*4\).)21 b(This)c(arra)o(y)f
+-(sp)q(eci\014es)g(w)o(eigh)o(ts)f(for)i(all)255 2036 y(the)j(edges.)33
+-b(It)20 b(is)g(of)g(the)g(same)f(length)h(as)h Fd(adjac)n(ency)g
+-Fq(and)f(is)g(indexed)f(in)h(the)g(same)255 2098 y(w)o(a)o(y)l(.)26
+-b(If)17 b(y)o(ou)h(use)g(Kernighan{Lin)g(or)g(the)g(m)o(ultilev)n(el)c
+-(partitioner,)k(these)f(v)m(alues)h(will)255 2160 y(b)q(e)d(rounded)f(to)h
+-(the)f(nearest)h(in)o(teger.)k(W)l(e)14 b(suggest)i(scaling)e(them)f(so)i
+-(they)f(are)g(neither)255 2223 y(v)o(ery)h(small)g(nor)h(v)o(ery)f(big.)22
+-b(Edge)16 b(w)o(eigh)o(ts)g(should)h(b)q(e)f(p)q(ositiv)o(e.)189
+-2285 y Fm(6.)i(x.)24 b Fq(T)o(yp)q(e)18 b(\015oat)h(*.)28 b(If)18
+-b(y)o(ou)g(are)h(using)g(the)f(inertial)f(partitioner,)h(y)o(ou)g(need)g(to)h
+-(sp)q(ecify)255 2347 y(geometric)c(co)q(ordinates)j(for)f(eac)o(h)f(v)o
+-(ertex.)22 b(This)17 b(arra)o(y)g(of)g(length)g Fd(nvtxs)h
+-Fq(sp)q(eci\014es)e(the)255 2409 y Fj(x)g Fq(co)q(ordinate)h(for)f(eac)o(h)g
+-(v)o(ertex.)189 2472 y Fm(7.)i(y)-5 b(.)24 b Fq(T)o(yp)q(e)18
+-b(\015oat)h(*.)27 b(This)18 b(arra)o(y)g(sp)q(eci\014es)g(the)g
+-Fj(y)h Fq(co)q(ordinate)g(for)f(eac)o(h)g(v)o(ertex.)25 b(If)18
+-b(it)f(is)255 2534 y(NULL,)f(the)g(geometry)f(is)h(assumed)f(to)i
+-(one-dimensional.)189 2596 y Fm(8.)h(z.)24 b Fq(T)o(yp)q(e)18
+-b(\015oat)h(*.)26 b(This)18 b(arra)o(y)g(sp)q(eci\014es)g(the)f
+-Fj(z)j Fq(co)q(ordinate)f(for)f(he)g(eac)o(h)f(v)o(ertex.)25
+-b(If)17 b Fd(z)255 2659 y Fq(is)f(NULL)g(and)h Fd(y)f Fq(is)g(not)h(NULL,)f
+-(the)g(geometry)f(is)h(assumed)f(to)i(b)q(e)f(t)o(w)o(o-dimensional.)977
+-2762 y Fk(38)p eop
+-%%Page: 39 39
+-bop 75 43 a Fq(B.)15 b(Output)i(\014le)e(names.)189 106 y Fm(9.)j
+-(outassignname.)23 b Fq(T)o(yp)q(e)14 b(c)o(har)f(*.)21 b(If)13
+-b(y)o(ou)h(desire)f(the)h(\014nal)g(assignmen)o(t)e(to)j(b)q(e)f(written)255
+-168 y(to)k(a)g(\014le,)f(this)g(argumen)o(t)f(giv)o(es)h(the)g(name)g(of)g
+-(that)h(\014le.)25 b(If)17 b(this)g(argumen)o(t)g(is)g(NULL)255
+-230 y(or)g(if)f(the)g(parameter)f Fg(OUTPUT)p 836 230 16 2
+-v 16 w(ASSIGN)f Fq(is)j(0,)f(then)g(the)g(assignmen)o(t)g(is)g(not)h(written)
+-f(to)255 292 y(a)h(\014le.)189 355 y Fm(10.)h(out\014lename.)k
+-Fq(T)o(yp)q(e)16 b(c)o(har)g(*.)22 b(This)16 b(is)g(the)g(name)f(of)i(a)g
+-(\014le)e(in)h(whic)o(h)g(the)g(results)g(of)255 417 y(the)k(run)f(are)h
+-(prin)o(ted.)31 b(If)19 b(it)h(is)f(NULL)h(or)g(if)f(the)h(parameter)e
+-Fg(ECHO)h Fq(is)g(not)h(negativ)o(e,)255 479 y(then)c(no)h(\014le)e(output)i
+-(is)f(p)q(erformed.)75 541 y(C.)g(Assignmen)o(t.)189 604 y
+-Fm(11.)i(assignmen)n(t.)23 b Fq(T)o(yp)q(e)11 b(short)g(*.)20
+-b(This)11 b(is)g(the)f(only)h(output)g(argumen)o(t)f(to)h Fg(interface\(\))o
+-Fq(.)255 666 y(It)16 b(is)g(an)g(arra)o(y)g(of)h(length)f Fd(nvtxs)h
+-Fq(and)g(returns)f(the)g(set)g(n)o(um)o(b)q(er)e(to)j(whic)o(h)e(eac)o(h)h(v)
+-o(ertex)255 728 y(is)e(assigned.)22 b(The)14 b(set)h(n)o(um)o(b)q(er)e(for)i
+-(v)o(ertex)e Fj(i)h Fq(is)h(returned)f(in)g Fd(assignment)p
+-Fq([)p Fj(i)8 b Fh(\000)g Fq(1])15 b(\(or)g(for)255 791 y(F)l(ortran,)d(in)f
+-Fd(assignment)p Fq(\()p Fj(i)p Fq(\)\).)21 b(This)11 b(can)g(also)h(b)q(e)f
+-(an)h(input)f(argumen)o(t)f(if)h Fd(glob)n(al)p 1740 791 15
+-2 v 19 w(metho)n(d)p Fq(,)255 853 y(argumen)o(t)i(16)h(b)q(elo)o(w,)g(is)g
+-(set)g(to)g(7.)21 b(A)13 b(description)h(of)g(what)g(functionalit)o(y)f(can)h
+-(b)q(e)g(used)255 915 y(with)i(an)h(input)f(assignmen)o(t)f(can)i(b)q(e)f
+-(found)h(in)f Fh(x)p Fq(4.4)75 977 y(D.)g(Description)g(of)g(the)g(target)h
+-(mac)o(hine.)189 1040 y Fm(12.)h(arc)n(hitecture.)23 b Fq(T)o(yp)q(e)16
+-b(in)o(t.)k(This)d(parameter)d(designates)j(the)f(top)q(ology)h(of)f(the)g
+-(par-)255 1102 y(allel)k(mac)o(hine)g(for)i(whic)o(h)f(y)o(ou)h(are)f
+-(partitioning.)38 b(Curren)o(t)22 b(capabilities)e(include)h(a)255
+-1164 y(h)o(yp)q(ercub)q(e)e(\(indicated)f(b)o(y)h(a)g(v)m(alue)g(of)g(0\),)h
+-(and)g(a)f(one-,)h(t)o(w)o(o-)g(or)f(three-dimensional)255
+-1226 y(mesh)c(\(indicated)h(b)o(y)g(a)h(v)m(alue)f(of)h(1,)f(2)h(or)g(3)g
+-(resp)q(ectiv)o(ely)l(.\))j(Note)c(that)h(this)f(argumen)o(t)255
+-1289 y(o)o(v)o(errides)f(the)h Fg(ARCHITECTU)o(RE)d Fq(parameter.)189
+-1351 y Fm(13.)18 b(ndims)p 430 1351 17 2 v 19 w(tot.)24 b Fq(T)o(yp)q(e)e(in)
+-o(t.)38 b(If)22 b Fd(ar)n(chite)n(ctur)n(e)g Fq(is)g(zero,)h(indicating)f(a)g
+-(h)o(yp)q(ercub)q(e,)h(this)255 1413 y(v)m(alue)16 b(is)g(the)g(n)o(um)o(b)q
+-(er)f(of)h(dimensions)f(in)h(the)g(h)o(yp)q(ercub)q(e.)189
+-1475 y Fm(14.)i(mesh)p 409 1475 V 19 w(dims.)23 b Fq(T)o(yp)q(e)14
+-b(in)o(t)g(arra)o(y)h(of)h(size)e(3.)21 b(If)14 b Fd(ar)n(chite)n(ctur)n(e)h
+-Fq(is)f(1,)i(2)f(or)g(3,)g(indicating)g(a)255 1538 y(mesh,)f(the)i(v)m(alues)
+-h(in)f(this)g(arra)o(y)g(denote)g(the)g(size)g(of)g(the)g(mesh)f(in)h(eac)o
+-(h)g(dimension.)189 1600 y Fm(15.)i(goal.)24 b Fq(T)o(yp)q(e)d(double)f(*.)35
+-b(This)21 b(optional)g(arra)o(y)g(sp)q(eci\014es)f(the)g(desired)g(sizes)g
+-(of)h(the)255 1662 y(di\013eren)o(t)16 b(sets.)24 b(The)17
+-b(total)g(n)o(um)o(b)q(er)e(of)j(sets)f(is)f(implicit)e(in)j(the)f(arc)o
+-(hitectural)g(sp)q(eci\014-)255 1725 y(cations)j(pro)o(vided)f(b)o(y)g(the)g
+-(preceding)g(three)g(parameters.)27 b(If)18 b(a)h(n)o(ull)f(v)m(alue)g(is)g
+-(passed)255 1787 y(for)g Fd(go)n(al)p Fq(,)f(the)g(co)q(de)g(will)g(try)g(to)
+-g(mak)o(e)f(eac)o(h)g(set)h(ha)o(v)o(e)g(the)g(same)f(v)o(ertex)g(w)o(eigh)o
+-(t)g(sum.)255 1849 y(If)i(it)g(is)g(not)h(n)o(ull,)f(the)g
+-Fd(go)n(al)h Fq(arra)o(y)g(should)g(b)q(e)f(as)i(long)e(as)i(the)e(total)h(n)
+-o(um)o(b)q(er)d(of)j(sets.)255 1911 y(The)i(v)m(alue)g(in)g
+-Fd(go)n(al)p Fq([)p Fj(i)p Fq(])f(\(or,)i(for)g(F)l(ortran,)g
+-Fd(go)n(al)p Fq(\()p Fj(i)15 b Fq(+)f(1\)\))22 b(should)f(b)q(e)h(the)f
+-(desired)f(sum)255 1974 y(of)h(v)o(ertex)e(w)o(eigh)o(ts)h(of)h(v)o(ertices)d
+-(assigned)j(to)g(set)g Fj(i)p Fq(.)33 b(Note)20 b(that)h(set)g(n)o(um)o(b)q
+-(ers)e(b)q(egin)255 2036 y(at)g(zero.)29 b Fm(Chaco)19 b Fq(will)f(try)g(to)h
+-(get)g(as)g(close)g(to)g(this)f(goal)i(as)f(p)q(ossible,)g(but)g(ma)o(y)f
+-(not)255 2098 y(succeed)13 b(exactly)l(.)19 b(The)14 b(sum)e(of)i(all)f(the)h
+-(goals)h(should)f(equal)f(the)g(sum)g(of)h(all)f(the)h(v)o(ertex)255
+-2160 y(w)o(eigh)o(ts,)h(and)i(v)m(alues)f(should)h(b)q(e)f(nonnegativ)o(e.)
+-255 2223 y(Although)e(the)f(default)g(is)h(to)g(mak)o(e)d(all)j(set)f(sizes)g
+-(equal,)g(there)g(are)h(applications)f(where)255 2285 y(this)22
+-b(ma)o(y)f(b)q(e)i(undesirable.)39 b(One)22 b(example)f(w)o(ould)h(b)q(e)h
+-(if)f(y)o(ou)g(are)h(decomp)q(osing)f(a)255 2347 y(computation)h(among)g(pro)
+-q(cessors)h(of)g(di\013eren)o(t)f(sp)q(eeds.)43 b(All)22 b(the)h(co)q(de)g
+-(in)g Fm(Chaco)255 2409 y Fq(handles)d(this)f(more)f(general)h(case,)h(and)g
+-(should)g(w)o(ork)f(for)h(an)o(y)f(consisten)o(t)g(v)m(alues)g(in)255
+-2472 y Fd(go)n(al)p Fq(.)75 2534 y(E.)d(P)o(artitioning)g(options.)189
+-2596 y Fm(16.)25 b(global)p 435 2596 V 19 w(metho)r(d.)d Fq(T)o(yp)q(e)d(in)o
+-(t.)29 b(This)19 b(argumen)o(t)f(sp)q(eci\014es)h(the)g(global)g
+-(partitioning)255 2659 y(metho)q(d)i(and)i(should)f(ha)o(v)o(e)f(a)i(v)m
+-(alue)e(from)g(1)h(and)h(7.)39 b(These)21 b(v)m(alues)h(are)g(the)g(same)977
+-2762 y Fk(39)p eop
+-%%Page: 40 40
+-bop 255 43 a Fq(as)19 b(those)g(on)g(the)f(\\Global)h(metho)q(d")f(men)o(u)f
+-(when)i(running)f Fm(Chaco)i Fq(in)e(stand{alone)255 106 y(metho)q(d,)d(as)i
+-(review)o(ed)d(in)i Fh(x)p Fq(5.4.)189 168 y Fm(17.)25 b(lo)r(cal)p
+-403 168 17 2 v 19 w(metho)r(d.)d Fq(T)o(yp)q(e)j(in)o(t.)49
+-b(This)26 b(argumen)o(t)f(sp)q(eci\014es)h(the)f(lo)q(cal)h(partitioning)255
+-230 y(metho)q(d)15 b(and)i(should)g(ha)o(v)o(e)e(a)i(v)m(alue)e(of)i(1)f(or)h
+-(2.)22 b(These)16 b(v)m(alues)g(are)g(the)g(same)f(as)i(those)255
+-292 y(on)e(the)g(\\Lo)q(cal)h(metho)q(d")f(men)o(u)e(when)i(running)h
+-Fm(Chaco)f Fq(in)g(stand{alone)h(metho)q(d,)e(as)255 355 y(review)o(ed)h(in)g
+-Fh(x)q Fq(5.4.)189 417 y Fm(18.)25 b(rqi)p 358 417 V 19 w(\015ag.)f
+-Fq(T)o(yp)q(e)13 b(in)o(t.)20 b(If)13 b(y)o(ou)g(requested)g(sp)q(ectral)h
+-(partitioning)f(and)h(wish)g(to)g(use)f(the)255 479 y(m)o(ultilev)n(el)h(R)o
+-(QI/Symml)o(q)h(eigensolv)o(er,)i(this)g(argumen)o(t)g(should)i(b)q(e)f(set)g
+-(to)g(1.)27 b(If)17 b(y)o(ou)255 541 y(wish)f(instead)h(to)f(use)h(Lanczos,)f
+-(it)g(should)h(b)q(e)f(set)g(to)h(0.)189 604 y Fm(19.)25 b(vmax.)d
+-Fq(T)o(yp)q(e)e(in)o(t.)33 b(If)20 b(y)o(ou)h(are)f(using)h(either)f(the)g(m)
+-o(ultilev)n(el)o({KL)f(partitioner,)i(or)255 666 y(the)15 b(m)o(ultile)o(v)o
+-(e)o(l)d(R)o(QI/Symm)o(lq)f(eigensolv)o(er,)j(y)o(ou)g(need)h(to)g(sp)q
+-(ecify)f(when)h(the)f(coarsest)255 728 y(graph)k(is)e(small)f(enough.)23
+-b(When)17 b(a)g(coarse)g(graph)g(has)h(no)f(more)e(than)i Fd(vmax)g
+-Fq(v)o(ertices,)255 791 y(the)f(recursiv)o(e)f(coarsening)h(is)g(\014nished.)
+-189 853 y Fm(20.)25 b(ndims.)d Fq(T)o(yp)q(e)16 b(in)o(t.)21
+-b(This)c(argumen)o(t)e(should)i(ha)o(v)o(e)f(a)h(v)m(alue)f(of)h(1,)f(2)h(or)
+-g(3)g(indicating)255 915 y(partitioning)f(b)o(y)g(bisection,)f(quadrisection)
+-h(or)g(o)q(ctasection.)189 977 y Fm(21.)25 b(eigtol.)d Fq(T)o(yp)q(e)k
+-(double.)50 b(If)25 b(y)o(ou)h(are)g(using)g(a)g(sp)q(ectral)g(metho)q(d)f
+-(or)h(m)o(ultilev)n(el{)255 1040 y(KL,)20 b(this)g(argumen)o(t)f(sp)q
+-(eci\014es)h(the)f(tolerance)h(y)o(ou)g(request)f(for)h(the)g(eigensolv)o
+-(er.)31 b(A)255 1102 y(discussion)25 b(of)f(an)h(appropriate)h(c)o(hoice)d
+-(can)h(b)q(e)h(found)g(in)f(the)h(description)e(of)i(the)255
+-1164 y Fg(EIGEN)p 388 1164 16 2 v 17 w(TOLERANCE)17 b Fq(parameter)j(in)h
+-Fh(x)p Fq(6.2.)36 b(Note)20 b(that)i(this)f(argumen)o(t)f(o)o(v)o(errides)f
+-(the)255 1226 y(v)m(alue)d(of)h(the)f Fg(EIGEN)p 654 1226 V
+-16 w(TOLERANCE)d Fq(parameter.)189 1289 y Fm(22.)25 b(seed.)e
+-Fq(T)o(yp)q(e)16 b(long.)23 b(This)16 b(is)g(a)h(seed)f(for)h(the)f(random)g
+-(n)o(um)o(b)q(er)f(generator)i(\\rand\(\)".)255 1351 y(Note)f(that)h(it)e(o)o
+-(v)o(errides)g(the)h Fg(RANDOM)p 975 1351 V 16 w(SEED)f Fq(parameter.)165
+-1448 y Fm(8.)28 b(Changes)19 b(since)e(V)-5 b(ersion)19 b(1.)24
+-b Fq(V)l(ersion)15 b(2.0)i(of)f Fm(Chaco)h Fq(di\013ers)f(from)f(earlier)f(v)
+-o(ersions)75 1510 y(in)k(a)g(n)o(um)o(b)q(er)f(of)h(w)o(a)o(ys.)27
+-b(W)l(e)18 b(gratefully)f(ac)o(kno)o(wledge)g(the)h(helpful)f(suggestions)j
+-(of)e(users)g(who)75 1572 y(requested)i(greater)h(functionalit)o(y)l(,)f
+-(critiqued)f(the)i(in)o(terface)e(or)i(rep)q(orted)g(problems.)34
+-b(In)20 b(this)75 1634 y(section)d(w)o(e)f(brie\015y)h(list)f(the)h(most)f
+-(imp)q(ortan)o(t)h(di\013erences)f(b)q(et)o(w)o(een)g(this)h(v)o(ersion)f
+-(and)i(its)f(pre-)75 1697 y(decessor)c([10],)f(and)h(direct)f(the)g(in)o
+-(terested)f(reader)i(to)f(the)h(relev)m(an)o(t)e(sections)i(of)f(this)h
+-(user's)f(guide)75 1759 y(for)17 b(more)d(details.)165 1855
+-y Fm(8.1.)27 b(Enhanced)17 b(functionalit)n(y)-5 b(.)23 b Fq(V)l(ersion)14
+-b(2.0)h(of)f Fm(Chaco)i Fq(can)e(partition)g(for)h(one-,)g(t)o(w)o(o-)75
+-1918 y(and)g(three-dimensional)e Fm(mesh)i(top)r(ologies)p
+-Fq(.)k(Earlier)14 b(v)o(ersions)g(w)o(ork)o(ed)g(only)h(for)g(h)o(yp)q(ercub)
+-q(es.)75 1980 y(There)20 b(are)h(t)o(w)o(o)g(asp)q(ects)h(to)f(this)f
+-(generalization.)35 b(First,)21 b(the)f(co)q(de)h(can)g(no)o(w)h(partition)e
+-(in)o(to)75 2042 y(an)h Fm(arbitrary)j(n)n(um)n(b)r(er)f(of)h(sets)p
+-Fq(.)35 b(And)21 b(second,)h(the)e(sets)h(are)g(assigned)h(to)f(pro)q
+-(cessors)i(to)75 2104 y(maximiz)o(e)13 b(lo)q(calit)o(y)i(on)i(either)e(a)h
+-(h)o(yp)q(ercub)q(e)g(or)g(a)h(mesh.)j(The)c(parameter)f(whic)o(h)g(sp)q
+-(eci\014es)h(the)75 2167 y(top)q(ology)e(is)f Fg(ARCHITECTU)o(RE)d
+-Fq(and)j(is)g(describ)q(ed)f(in)h Fh(x)p Fq(6.8.)21 b(If)12
+-b(y)o(ou)h(don't)g(care)g(ab)q(out)h(the)f(mapping)75 2229
+-y(to)19 b(pro)q(cessors,)g(y)o(ou)f(can)h(simply)d(select)h(a)i
+-(one-dimensional)e(mesh)g(top)q(ology)i(and)g(then)f(input)75
+-2291 y(the)e(n)o(um)o(b)q(er)e(of)j(sets)f(y)o(ou)h(require)d(when)j
+-(prompted.)165 2354 y(W)l(e)23 b(ha)o(v)o(e)f(added)h(options)g(to)h(the)e
+-(implem)o(en)o(tation)e(of)j(our)h(m)o(ultile)o(v)o(e)o(l{KL)d(metho)q(d)h
+-(to)75 2416 y(include)17 b(a)h(closely)f(related)h Fm(m)n(ultilev)n(el)f
+-(algorithm)i(due)i(to)g(Bui)f(and)h(Jones)d Fq([2,)g(15)q(].)26
+-b(W)l(e)75 2478 y(ha)o(v)o(e)18 b(also)i(added)g(the)f(abilit)o(y)e(to)j
+-(prefer)e Fm(high)k(w)n(eigh)n(t)h(matc)n(hing)18 b Fq(edges)h(as)h(adv)o(o)q
+-(cated)g(b)o(y)75 2540 y(Karypis)g(and)g(Kumar)e([16)q(],)h(and)i
+-Fm(di\013eren)n(t)g(matc)n(hing)h(algorithms)17 b Fq(to)j(allo)o(w)g(the)f
+-(user)h(to)75 2603 y(tradeo\013)15 b(b)q(et)o(w)o(een)e(randomness)h(and)h
+-(sp)q(eed.)21 b(The)14 b(sp)q(eed)g(of)h(the)f(m)o(ultilev)n(el)o({KL)e
+-(algorithm)h(has)75 2665 y(b)q(een)k(impro)o(v)o(ed)d(b)o(y)j(using)g(a)h
+-Fm(lazy)h(ev)m(aluation)d Fq(tec)o(hnique)f(for)i(initializing)e(v)m(alues.)
+-24 b(All)15 b(these)977 2762 y Fk(40)p eop
+-%%Page: 41 41
+-bop 75 43 a Fq(options)17 b(are)f(discussed)g(in)g Fh(x)p Fq(3.6)h(and/or)h
+-Fh(x)p Fq(6.5.)165 106 y(The)h(abilit)o(y)e(to)i Fm(relax)i(the)g(strict)f
+-(balanced)i(requireme)o(n)n(t)17 b Fq(has)i(b)q(een)g(added)g(b)o(y)f(the)75
+-168 y Fg(KL)p 130 168 16 2 v 18 w(IMBALANCE)13 b Fq(parameter)i(as)i
+-(discussed)f(in)g Fh(x)p Fq(6.4.)165 230 y(W)l(e)21 b(ha)o(v)o(e)f(added)h(a)
+-h(metho)q(d)e(from)g(the)h(circuit)e(placemen)o(t)g(comm)o(unit)n(y)f(kno)o
+-(wn)j(as)h Fm(ter-)75 292 y(minal)c(propagation)p Fq(.)23 b(This)17
+-b(is)g(a)g(tec)o(hnique)e(for)i(impro)o(ving)e(the)i(mapping)f(to)h(pro)q
+-(cessors)i(b)o(y)75 355 y(incorp)q(orating)c(additional)f(information)e(in)i
+-(the)g(recursion.)20 b(It)13 b(also)i(allo)o(ws)e(the)h(user)g(to)g
+-(tradeo\013)75 417 y(b)q(et)o(w)o(een)h(message)g(congestion)h(and)h(comm)o
+-(unic)o(ation)d(v)o(olume.)k(Details)e(can)g(b)q(e)g(found)g(in)g
+-Fh(x)p Fq(4.2.)165 479 y(Sev)o(eral)c Fm(p)r(ost{pro)r(cessing)i(algorithms)g
+-(for)i(impro)n(ving)d(the)i(partitioning)g(and/or)75 541 y(mapping)g
+-Fq(ha)o(v)o(e)h(b)q(een)g(added.)21 b(These)16 b(tec)o(hniques)f(w)o(ork)h
+-(to)h(reduce)e(the)h(n)o(um)o(b)q(er)e(of)j(edges)f(cut)75
+-604 y(\()p Fh(x)p Fq(4.3.1,)g(increase)g(the)f(n)o(um)o(b)q(er)g(of)h(v)o
+-(ertices)f(with)h(no)g(edges)h(to)f(other)g(sets)h(\()p Fh(x)p
+-Fq(4.3.2\))f(or)h(impro)o(v)o(e)75 666 y(the)f(mapping)g(of)g(sets)g(to)h
+-(pro)q(cessors)h(\()p Fh(x)p Fq(4.3.3\).)165 728 y(Sp)q(ectral)k(graph)h
+-(algorithms)e(are)i(b)q(ecoming)e(imp)q(ortan)o(t)g(to)q(ols)i(for)f(a)h
+-(surprisingly)e(wide)75 791 y(v)m(ariet)o(y)13 b(of)h(problems.)19
+-b(T)l(o)14 b(facilitate)e(these)h(applications,)h Fm(Chaco)h
+-Fq(can)e(no)o(w)i(b)q(e)e(used)h(to)g Fm(gener-)75 853 y(ate)i(and)i(sort)e
+-(the)g(Fiedler)g(v)n(ector)d Fq(of)i(a)g(graph)h(\(without)e(partitioning\).)
+-21 b(This)15 b(is)f(discussed)75 915 y(in)i Fh(x)p Fq(4.1.)165
+-977 y(W)l(e)f(ha)o(v)o(e)f(re-implem)o(en)o(te)o(d)f(and)i
+-Fm(impro)n(v)n(ed)h(b)r(oth)h(sp)r(eed)g(and)h(robustness)d
+-Fq(of)g(most)g(of)75 1040 y(the)20 b(algorithms)e(in)i Fm(Chaco)p
+-Fq(.)32 b(The)20 b(sp)q(eed)g(di\013erences)f(should)h(b)q(e)g(most)f
+-(notable)h(in)f(the)h(m)o(ul-)75 1102 y(tilev)o(el)c(R)o(QI/Symm)o(lq)f
+-(eigensolv)o(er)i(and)j(in)e(the)g(m)o(ultilev)n(el)o({KL)f(partitioning)h
+-(algorithm.)27 b(An)75 1164 y(imp)q(ortan)o(t)14 b(impro)o(v)o(em)o(en)n(t)e
+-(on)k(the)e(robustness)i(side)f(is)f(the)h(inclusion)f(of)h(a)h
+-Fm(graceful)g(reco)n(v)n(ery)75 1226 y(pro)r(cedure)d(for)i(all)f(of)h(the)f
+-(Lanczos)g(eigensolv)n(ers)d Fq(in)i(the)f(ev)o(en)o(t)f(they)h(run)h(out)g
+-(of)g(memory)l(.)75 1289 y(Previously)18 b(they)h(terminated;)g(they)g(no)o
+-(w)g(compute)f(the)h(b)q(est)h(readily)e(a)o(v)m(ailable)h(appro)o(xima-)75
+-1351 y(tion)14 b(to)h(the)f(eigen)o(v)o(ector)e(and)j(allo)o(w)f(the)g(co)q
+-(de)h(to)f(con)o(tin)o(ue.)20 b(They)14 b(also)g(con)o(tain)g(sev)o(eral)g
+-(added)75 1413 y(la)o(y)o(ers)h(of)i Fm(defense)h(against)g(certain)g(n)n
+-(umerical)f(problems)d Fq(\(see)i Fh(x)p Fq(3.3\).)165 1510
+-y Fm(8.2.)27 b(New)19 b(and)h(mo)r(di\014ed)d(parameters.)26
+-b(Chaco)17 b Fq(con)o(tains)g(a)g(v)m(ariet)o(y)f(of)h(parameters)75
+-1572 y(whic)o(h)c(con)o(trol)g(the)g(functionalit)o(y)l(,)f(algorithmic)f
+-(details)i(and)h(input)f(and)h(output)g(options.)21 b(With)75
+-1634 y(v)o(ersion)h(1)g(it)g(w)o(as)h(necessary)f(to)h(recompile)d(the)i(co)q
+-(de)g(to)h(c)o(hange)f(parameter)f(v)m(alues.)40 b(This)75
+-1697 y(limited)16 b(the)j(ease)g(with)f(whic)o(h)h(parameter)e(studies)i
+-(could)g(b)q(e)g(conducted.)29 b(In)19 b(v)o(ersion)f(2.0)i(all)75
+-1759 y Fm(parameters)14 b(can)i(b)r(e)f(mo)r(di\014ed)f(at)i(run)n(time)p
+-Fq(,)c(whic)o(h)h(signi\014can)o(tly)f(increases)i(the)f(usabilit)o(y)75
+-1821 y(of)k(the)f(parameters.)k(Details)c(can)g(b)q(e)g(found)h(in)f
+-Fh(x)p Fq(6.10.)165 1883 y(A)f(n)o(um)o(b)q(er)f(of)i(parameters)e(ha)o(v)o
+-(e)h(b)q(een)h(added)g(to)g(the)f(co)q(de)h(to)g(con)o(trol)f(the)g(new)h
+-(function-)75 1946 y(alit)o(y)g(sk)o(etc)o(hed)f(ab)q(o)o(v)o(e)i(in)g
+-Fh(x)p Fq(8.1.)23 b(The)17 b(follo)o(wing)g Fm(additional)i(parameters)c
+-Fq(ha)o(v)o(e)h(b)q(een)h(added)75 2008 y(or)23 b(had)g(their)e(meaning)g(mo)
+-q(di\014ed.)38 b(W)l(e)22 b(include)f(a)i(brief)f(discussion)g(and)h(a)g(p)q
+-(oin)o(ter)f(to)g(the)75 2070 y(appropriate)17 b(section)f(of)g(text.)75
+-2132 y Fg(OUTPUT)p 234 2132 V 16 w(METRICS)22 b Fq(The)13 b(meaning)f(of)h
+-(this)g(parameter)f(has)i(c)o(hanged)f(to)g(allo)o(w)g(for)g(more)f(detailed)
+-255 2195 y(con)o(trol)k(of)g(the)g(output)h(\()p Fh(x)p Fq(6.1\).)75
+-2257 y Fg(TIME)p 182 2257 V 17 w(KERNELS)22 b Fq(Y)l(ou)i(can)g(no)o(w)g
+-(time)e(common)g(n)o(umerical)g(k)o(ernel)g(op)q(erations)j(lik)o(e)d
+-(matrix-)255 2319 y(v)o(ector)15 b(m)o(ultiplication)e(on)k(y)o(our)f(mac)o
+-(hine)e(\()p Fh(x)p Fq(6.2\).)77 2382 y Fg(PROMPT)22 b Fq(This)c(parameter)f
+-(allo)o(ws)h(y)o(ou)f(to)i(turn)f(o\013)g(the)g(in)o(teractiv)o(e)d(queries.)
+-26 b(This)18 b(mak)o(es)e(for)255 2444 y(cleaner)f(output)i(when)g(y)o(ou)f
+-(are)g(piping)g(the)g(input)g(from)f(a)i(script.)k(See)15 b
+-Fh(x)p Fq(6.1.)75 2506 y Fg(LANCZOS)p 260 2506 V 16 w(CONVERGENC)o(E)p
+-561 2506 V 15 w(MODE)23 b Fq(Rather)g(than)g(determining)d(con)o(v)o(ergence)
+-h(based)i(directly)e(on)255 2568 y(the)c(eigen)g(residual,)f(y)o(ou)h(ma)o(y)
+-f(no)o(w)i(c)o(ho)q(ose)f(to)h(base)g(con)o(v)o(ergence)d(decisions)i(on)h
+-(ho)o(w)255 2631 y(the)e(partition)g(ev)o(olv)o(es)f(during)h(the)g(Lanczos)h
+-(iteration)f(\()p Fh(x)p Fq(6.2\).)977 2762 y Fk(41)p eop
+-%%Page: 42 42
+-bop 75 43 a Fg(LANCZOS)p 260 43 16 2 v 16 w(SO)p 328 43 V 18
+-w(PRECISION)21 b Fq(T)l(o)13 b(sa)o(v)o(e)f(space,)i(y)o(ou)e(can)i(run)f
+-(the)f(selectiv)o(e)f(orthogonalization)j(v)m(ari-)255 106
+-y(an)o(ts)j(of)f(Lanczos)h(in)f(single)g(precision)g(\()p Fh(x)p
+-Fq(6.2\).)75 168 y Fg(RQI)p 156 168 V 17 w(CONVERGENCE)p 458
+-168 V 15 w(MODE)23 b Fq(Rather)h(than)h(determining)d(con)o(v)o(ergence)g
+-(based)j(directly)e(on)h(the)255 230 y(eigen)15 b(residual,)g(y)o(ou)g(can)g
+-(no)o(w)h(base)g(con)o(v)o(ergence)e(decisions)h(on)h(ho)o(w)g(the)f
+-(partition)g(is)255 292 y(ev)o(olving)g(during)h(R)o(QI.)75
+-355 y Fg(COARSE)p 234 355 V 16 w(KL)p 302 355 V 18 w(BOTTOM)22
+-b Fq(In)15 b(m)o(ultile)o(v)o(el)o({KL)e(this)i(parameter)e(forces)i(the)g
+-(in)o(v)o(o)q(cation)f(of)h(KL)h(on)f(the)255 417 y(coarsest)i(graph)g(\()p
+-Fh(x)p Fq(6.5\).)75 479 y Fg(MATCH)p 208 479 V 17 w(TYPE)23
+-b Fq(When)18 b(p)q(erforming)f(coarsening)i(this)f(parameter)f(allo)o(ws)h(y)
+-o(ou)g(to)g(c)o(ho)q(ose)h(sev)o(eral)255 541 y(di\013eren)o(t)24
+-b(maximal)e(matc)o(hing)h(algorithms)h(with)h(di\013eren)o(t)f(cost/qualit)o
+-(y)g(tradeo\013s)255 604 y(\()p Fh(x)p Fq(6.5\).)75 666 y Fg(ARCHITECTU)o(RE)
+-d Fq(This)12 b(imp)q(ortan)o(t)e(new)i(parameter)e(allo)o(ws)i(y)o(ou)f(to)h
+-(select)f(to)h(partition)f(for)h(either)255 728 y(a)17 b(h)o(yp)q(ercub)q(e)e
+-(or)i(a)g(mesh)e(parallel)g(mac)o(hine)f(\()p Fh(x)p Fq(6.7\).)75
+-791 y Fg(MAKE)p 182 791 V 17 w(VWGTS)23 b Fq(This)12 b(\015ag)i(will)d
+-(automatically)g(generate)i(w)o(eigh)o(ts)f(for)h(v)o(ertices)d(that)k(are)e
+-(appropri-)255 853 y(ate)h(for)g(applications)g(in)o(v)o(olving)e
+-Fm(parallel)j(matrix{v)n(ector)e(m)n(ultiplication)e Fq(\()p
+-Fh(x)p Fq(6.8\).)75 915 y Fg(FREE)p 182 915 V 17 w(GRAPH)23
+-b Fq(If)c(y)o(ou)g(are)h(calling)f Fm(Chaco)h Fq(from)f(another)h(co)q(de,)g
+-(this)g(\015ag)h(allo)o(ws)e(y)o(ou)h(to)g(free)255 977 y(the)c(original)g
+-(graph)h(storage)h(to)e(sa)o(v)o(e)g(space)g(\()p Fh(x)p Fq(6.8\).)165
+-1074 y Fm(8.3.)27 b(Changes)e(to)g(input)f(and)h(output)g(formats.)20
+-b Fq(T)l(o)i(b)q(etter)f(handle)g(the)g(input)h(of)75 1136
+-y(v)o(ertices)f(of)i(high)g(degree,)g Fm(v)n(ertex)i(data)h(can)g(b)r(e)g
+-(spread)g(o)n(v)n(er)g(m)n(ultiple)e(lines)d Fq(of)i(the)75
+-1198 y(graph)17 b(input)f(\014le.)21 b(The)16 b(mec)o(hanism)d(enabling)j
+-(this)g(is)g(discussed)g(in)g Fh(x)p Fq(5.1.)165 1261 y(V)l(ersion)f(2.0)g
+-(of)h Fm(Chaco)f Fq(is)g(able)g(to)h Fm(handle)h(unexp)r(ected)f(graph)h
+-(input)h(gracefully)13 b Fq(in)75 1323 y(more)h(instances.)21
+-b(F)l(or)16 b(example,)d(self)h(edges)i(and)g(edges)g(with)f(zero)g(w)o(eigh)
+-o(ts)g(are)g(no)o(w)h(discarded)75 1385 y(instead)g(of)h(causing)g(the)f
+-(program)g(to)g(halt.)165 1448 y(The)c Fm(output)i(format)f(of)h(the)f(co)r
+-(de)g(has)i(b)r(een)e(clari\014ed)g(and)h(enhanced)e Fq(with)g(sev)o(eral)75
+-1510 y(additional)k(metrics)e(of)j(partition)f(qualit)o(y)l(.)k(These)c(are)g
+-(describ)q(ed)g(in)g Fh(x)p Fq(5.5.)165 1572 y(V)l(ersion)11
+-b(2.0)g(of)g Fm(Chaco)h Fq(can)g Fm(read)g(an)i(existing)d(partition)f
+-Fq(from)g(a)i(\014le.)18 b(It)11 b(can)g(then)g(re\014ne)75
+-1634 y(or)20 b(ev)m(aluate)g(the)g(partition)g(in)g(sev)o(eral)f(w)o(a)o(ys.)
+-33 b(Assignmen)o(t)18 b(\014les)i(can)g(no)o(w)g(b)q(e)g(structured)g(in)75
+-1697 y(t)o(w)o(o)13 b(di\013eren)o(t)g(w)o(a)o(ys)g(to)h(simplify)d(in)o
+-(terfacing)i(with)g(other)h(co)q(des.)20 b(These)14 b(c)o(hanges)g(are)f
+-(discussed)75 1759 y(in)j Fh(x)p Fq(4.4.)165 1821 y Fm(Chaco)22
+-b Fq(can)g(no)o(w)f(b)q(e)h(more)e Fm(easily)j(coupled)h(with)g(other)g
+-(programs)p Fq(.)35 b(The)22 b(calling)75 1883 y(sequence)15
+-b(to)i(do)g(this)f(is)g(describ)q(ed)f(in)h Fh(x)p Fq(7.)165
+-1946 y Fm(Chaco)e Fq(can)g(no)o(w)g(p)q(erform)e Fm(m)n(ultiple)h(runs)j
+-(with)f(a)h(single)e(in)n(v)n(o)r(cation)p Fq(.)20 b(This)14
+-b(enables,)75 2008 y(for)j(example,)c(piping)j(man)o(y)f(calculations)h(in)o
+-(to)g(a)g(single)g(run)g(of)h(the)f(program.)165 2070 y(The)24
+-b(lo)q(ok)g(and)g(feel)f(of)h(Chaco)h(has)f(c)o(hanged)g(in)f(a)i(v)m(ariet)o
+-(y)d(of)i(additional)g(w)o(a)o(ys.)44 b(The)75 2132 y(in)o(ten)o(t)19
+-b(of)i(these)f(c)o(hanges)g(w)o(as)h(to)g Fm(simplify)g(the)i(user)g(in)n
+-(terface)c Fq(and)i(pro)o(vide)f(additional)75 2195 y(information.)k
+-(Examples)16 b(include)h(the)g(remo)o(v)m(al)f(of)i(some)f(options)h(from)e
+-(the)i(user)f(men)o(u)f(so)i(as)75 2257 y(to)e(streamline)e(its)h(use,)h(c)o
+-(hanging)g(the)g(structure)f(of)h(the)g(input)f(prompts,)g(and)i(clarifying)d
+-(of)j(all)75 2319 y(phases)g(of)g(output.)165 2416 y Fm(8.4.)27
+-b(In)n(terfaces)15 b(to)h(other)f(co)r(des.)23 b Fq(A)13 b
+-Fd(Matlab)h Fq(fron)o(t)g(end)g(for)f Fm(Chaco)i Fq(has)f(b)q(een)g(written)
+-75 2478 y(b)o(y)d(John)i(Gilb)q(ert)e(as)i(part)f(of)g(the)g
+-Fm(meshpart)e Fq(soft)o(w)o(are)i(\(whic)o(h)f(also)i(con)o(tains)f(implem)o
+-(en)n(tations)75 2540 y(of)22 b(other)g(partitioning)g(algorithms\).)37
+-b(This)22 b(public)f(domain)g(soft)o(w)o(are)g(can)h(b)q(e)g(obtained)g(via)
+-75 2603 y(anon)o(ymous)c(ftp)g(to)g(parcftp.xero)o(x.com)e(in)h(the)h(\014le)
+-g(/pub/gilb)q(ert/meshpart.uu.)26 b(Chaco)19 b(has)75 2665
+-y(also)e(b)q(een)g(in)o(terfaced)e(with)i(a)g(n)o(um)o(b)q(er)e(of)i(imp)q
+-(ortan)o(t)e(scien)o(ti\014c)g(and)i(engineering)f(application)977
+-2762 y Fk(42)p eop
+-%%Page: 43 43
+-bop 75 43 a Fq(co)q(des.)30 b(If)18 b(y)o(ou)h(susp)q(ect)h(this)e(ma)o(y)g
+-(b)q(e)h(true)g(of)g(the)g(co)q(de)g(y)o(ou)g(are)g(w)o(orking)g(with,)g(c)o
+-(hec)o(k)e(with)75 106 y(us.)165 202 y Fm(Ac)n(kno)n(wledgemen)n(ts.)h
+-Fq(W)l(e)24 b(appreciate)g(all)g(the)h(constructiv)o(e)e(feedbac)o(k)h(pro)o
+-(vided)g(b)o(y)75 264 y(earlier)13 b(users)i(of)g(the)g(co)q(de.)21
+-b(These)14 b(include)g(P)o(atric)o(k)f(Ciarlet,)h(Ralf)h(Diekman,)e(Gary)i
+-(Hennigan,)75 327 y(Scott)g(Hutc)o(hinson,)f(F)l(rancoise)h(Lamour,)f(Stev)o
+-(e)g(Plimpton,)f(Rob)q(ert)j(Preis,)e(P)o(adma)g(Ragha)o(v)m(an,)75
+-389 y(Ed)j(Roth)o(b)q(erg,)f(John)h(Shadid,)f(Barry)g(Smith,)e(Rafael)i(V)l
+-(an)g(Driessc)o(he)f(and)i(P)o(eter)f(V)l(an)g(Vleet.)165 451
+-y(The)i(algorithms)f(implem)o(en)o(t)o(ed)e(in)j Fm(Chaco)g
+-Fq(ha)o(v)o(e)f(b)q(een)h(in\015uenced)f(b)o(y)g(n)o(umerous)g(p)q(eople)75
+-514 y(including)g(Stev)o(e)f(Barnard,)i(Thang)h(Bui,)e(John)h(Gilb)q(ert,)f
+-(John)h(Lewis,)g(Cindy)f(Phillips,)f(Stev)o(e)75 576 y(Plimpton,)e(Alex)h(P)o
+-(othen,)h(Horst)g(Simon,)f(Ra)o(y)h(T)l(uminaro)f(and)i(Rafael)f(V)l(an)h
+-(Driessc)o(he.)165 638 y(The)g(dev)o(elopmen)o(t)d(of)j Fm(Chaco)h
+-Fq(w)o(as)f(supp)q(orted)h(b)o(y)e(the)h(Applied)e(Mathematical)g(Sciences)75
+-700 y(program,)k(U.S.)f(Departmen)o(t)g(of)h(Energy)l(,)g(O\016ce)f(of)i
+-(Energy)f(Researc)o(h.)29 b(The)19 b(w)o(ork)g(w)o(as)h(p)q(er-)75
+-763 y(formed)g(at)h(Sandia)h(National)f(Lab)q(oratories,)i(whic)o(h)d(is)h
+-(op)q(erated)h(for)f(the)g(U.S.)f(Departmen)o(t)75 825 y(of)h(Energy)g(under)
+-g(con)o(tract)g(n)o(um)o(b)q(er)e(DE-A)o(C04-76DF00789)q(.)38
+-b(The)21 b Fm(Chaco)g Fq(source)g(co)q(de)g(is)75 887 y(cop)o(yrigh)o(ted)15
+-b(b)o(y)h(Sandia)h(Corp)q(oration.)855 1012 y Fk(REFERENCES)107
+-1107 y([1])23 b Fa(S.)16 b(T.)e(Barnard)i(and)g(H.)e(D.)i(Simon)p
+-Fk(,)d Fc(A)h(fast)f(multilevel)g(implementation)h(of)g(r)n(e)n(cursive)f(sp)
+-n(e)n(ctr)n(al)g(bise)n(c-)242 1157 y(tion)i(for)g(p)n(artitioning)g
+-(unstructur)n(e)n(d)g(pr)n(oblems)p Fk(,)e(in)h(Pro)q(c.)h(6th)f(SIAM)h
+-(Conf.)e(P)o(arallel)h(Pro)q(cessing)h(for)242 1206 y(Scien)o(ti\014c)f
+-(Computing,)d(SIAM,)j(1993,)e(pp.)i(711{718.)107 1256 y([2])23
+-b Fa(T.)17 b(Bui)f(and)h(C.)f(Jones)p Fk(,)f Fc(A)g(heuristic)g(for)g(r)n(e)n
+-(ducing)h(\014l)r(l)f(in)g(sp)n(arse)g(matrix)g(factorization)p
+-Fk(,)f(in)g(Pro)q(c.)h(6th)242 1306 y(SIAM)f(Conf.)f(P)o(arallel)f(Pro)q
+-(cessing)k(for)d(Scien)o(ti\014c)i(Computing,)c(SIAM,)i(1993,)g(pp.)g
+-(445{452.)107 1356 y([3])23 b Fa(A.)g(E.)g(Dunlop)i(and)f(B.)f(W.)g
+-(Kernighan)p Fk(,)g Fc(A)e(pr)n(o)n(c)n(e)n(dur)n(e)g(for)f(plac)n(ement)i
+-(of)f(standar)n(d{c)n(el)r(l)g(VLSI)242 1406 y(cir)n(cuits)p
+-Fk(,)12 b(IEEE)j(T)m(rans.)e(CAD,)g(CAD-4)g(\(1985\),)g(pp.)h(92{98.)107
+-1455 y([4])23 b Fa(C.)g(M.)g(Fiduccia)f(and)h(R.)h(M.)f(Ma)m(ttheyses)p
+-Fk(,)g Fc(A)e(line)n(ar)g(time)f(heuristic)h(for)f(impr)n(oving)h(network)242
+-1505 y(p)n(artitions)p Fk(,)12 b(in)i(Pro)q(c.)g(19th)g(IEEE)g(Design)g
+-(Automation)e(Conference,)j(IEEE,)f(1982,)e(pp.)i(175{181.)107
+-1555 y([5])23 b Fa(M.)16 b(Fiedler)p Fk(,)d Fc(A)o(lgebr)n(aic)h(c)n(onne)n
+-(ctivity)h(of)g(gr)n(aphs)p Fk(,)f(Czec)o(hoslo)o(v)n(ak)f(Math.)h(J.,)f(23)g
+-(\(1973\),)g(pp.)g(298{305.)107 1605 y([6])p 175 1598 96 2
+-v 119 w(,)f Fc(A)i(pr)n(op)n(erty)g(of)g(eigenve)n(ctors)g(of)g(nonne)n
+-(gative)h(symmetric)f(matric)n(es)f(and)i(its)e(applic)n(ation)i(to)f(gr)n
+-(aph)242 1655 y(the)n(ory)p Fk(,)f(Czec)o(hoslo)o(v)n(ak)h(Math.)f(J.,)g(25)g
+-(\(1975\),)g(pp.)h(619{633.)107 1704 y([7])23 b Fa(M.)16 b(Garey,)g(D.)g
+-(Johnson,)h(and)f(L.)g(Stockmeyer)p Fk(,)e Fc(Some)g(simpli\014e)n(d)g(NP-c)n
+-(omplete)h(gr)n(aph)f(pr)n(oblems)p Fk(,)242 1754 y(Theoretical)g(Computer)f
+-(Science,)i(1)e(\(1976\),)g(pp.)h(237{267.)107 1804 y([8])23
+-b Fa(G.)14 b(Golub)h(and)f(C.)f(V)-5 b(an)15 b(Lo)o(an)p Fk(,)e
+-Fc(Matrix)f(Computations,)i(Se)n(c)n(ond)g(Edition)p Fk(,)d(Johns)i(Hopkins)e
+-(Univ)o(ersit)o(y)242 1854 y(Press,)k(Baltimore,)d(MD,)h(1989.)107
+-1904 y([9])23 b Fa(S.)e(Hammond)p Fk(,)f Fc(Mapping)g(unstructur)n(e)n(d)f
+-(grid)g(c)n(omputations)g(to)g(massively)g(p)n(ar)n(al)r(lel)f(c)n(omputers)p
+-Fk(,)h(PhD)242 1954 y(thesis,)14 b(Rensselaer)h(P)o(olytec)o(hnic)f
+-(Institute,)g(Dept.)g(of)f(Computer)h(Science,)g(T)m(ro)o(y)m(,)f(NY,)g
+-(1992.)86 2003 y([10])23 b Fa(B.)17 b(Hendrickson)f(and)h(R.)g(Leland)p
+-Fk(,)e Fc(The)h(Chac)n(o)f(user's)g(guide,)h(version)f(1.0)p
+-Fk(,)f(T)m(ec)o(h.)g(Rep.)g(SAND93{)242 2053 y(2339,)e(Sandia)h(National)g
+-(Lab)q(oratories,)g(Albuquerque,)h(NM,)g(Octob)q(er)h(1993.)86
+-2103 y([11])p 175 2096 V 119 w(,)e Fc(A)o(n)i(impr)n(ove)n(d)g(sp)n(e)n(ctr)n
+-(al)f(lo)n(ad)h(b)n(alancing)g(metho)n(d)p Fk(,)f(in)f(Pro)q(c.)h(6th)g(SIAM)
+-g(Conf.)f(P)o(arallel)g(Pro)q(cessing)242 2153 y(for)g(Scien)o(ti\014c)i
+-(Computing,)c(SIAM,)j(Marc)o(h)g(1993,)e(pp.)i(953{961.)86
+-2203 y([12])p 175 2196 V 119 w(,)c Fc(A)o(n)h(impr)n(ove)n(d)f(sp)n(e)n(ctr)n
+-(al)g(gr)n(aph)h(p)n(artitioning)f(algorithm)h(for)f(mapping)h(p)n(ar)n(al)r
+-(lel)f(c)n(omputations)p Fk(,)h(SIAM)242 2252 y(J.)i(Sci.)h(Comput.,)d(16)j
+-(\(1995\).)86 2302 y([13])p 175 2295 V 119 w(,)j Fc(A)h(multilevel)e
+-(algorithm)h(for)g(p)n(artitioning)h(gr)n(aphs)p Fk(,)f(in)f(Pro)q(c.)i(Sup)q
+-(ercomputing)e('95,)h(A)o(CM,)f(De-)242 2352 y(cem)o(b)q(er)e(1995.)j(T)m(o)c
+-(app)q(ear.)86 2402 y([14])23 b Fa(B.)g(Hendrickson,)h(R.)f(Leland,)i(and)e
+-(R.)f(V)-5 b(an)23 b(Driessche)p Fk(,)f Fc(Enhancing)f(data)g(lo)n(c)n(ality)
+-f(by)h(using)242 2452 y(terminal)13 b(pr)n(op)n(agation)p Fk(,)g(in)f(Pro)q
+-(c.)i(29th)e(Ha)o(w)o(aii)f(Conf.)h(System)g(Sciences,)j(Jan)o(uary)e(1996.)i
+-(T)m(o)d(app)q(ear.)86 2502 y([15])23 b Fa(C.)17 b(A.)g(Jones)p
+-Fk(,)f Fc(V)m(ertex)f(and)i(Edge)f(Partitions)g(of)g(Gr)n(aphs)p
+-Fk(,)f(PhD)g(thesis,)h(P)o(enn)f(State,)h(Dept.)f(Computer)242
+-2551 y(Science,)f(State)h(College,)e(P)m(A,)g(1992.)86 2601
+-y([16])23 b Fa(G.)c(Kar)m(ypis)g(and)g(V.)f(Kumar)p Fk(,)f
+-Fc(A)f(fast)h(and)h(high)f(quality)g(multilevel)e(scheme)j(for)e(p)n
+-(artitioning)g(irr)n(e)n(g-)242 2651 y(ular)h(gr)n(aphs)p Fk(,)h(T)m(ec)o(h.)
+-g(Rep.)f(CORR)f(95{035,)h(Univ)o(ersit)o(y)g(of)g(Minnesota,)h(Dept.)f
+-(Computer)g(Science,)242 2701 y(Minneap)q(olis,)12 b(MN,)i(June)h(1995.)977
+-2762 y(43)p eop
+-%%Page: 44 44
+-bop 86 43 a Fk([17])23 b Fa(B.)14 b(Kernighan)h(and)g(S.)g(Lin)p
+-Fk(,)d Fc(A)o(n)h(e\016cient)g(heuristic)g(pr)n(o)n(c)n(e)n(dur)n(e)g(for)g
+-(p)n(artitioning)f(gr)n(aphs)p Fk(,)g(Bell)g(System)242 93
+-y(T)m(ec)o(hnical)h(Journal,)g(29)h(\(1970\),)e(pp.)i(291{307.)86
+-143 y([18])23 b Fa(R.)c(Leland)h(and)f(B.)g(Hendrickson)p Fk(,)e
+-Fc(A)o(n)h(empiric)n(al)e(study)h(of)h(static)e(lo)n(ad)i(b)n(alancing)g
+-(algorithms)p Fk(,)d(in)242 193 y(Pro)q(c.)f(Scalable)f(High)h(P)o(erf.)g
+-(Comput.)d(Conf.,)i(IEEE,)h(Ma)o(y)f(1994,)g(pp.)g(682{685.)86
+-243 y([19])23 b Fa(C.)18 b(C.)f(P)l(aige)h(and)h(M.)f(A.)f(Sa)o(unders)p
+-Fk(,)h Fc(Solution)f(of)g(sp)n(arse)f(inde\014nite)i(systems)e(of)h(line)n
+-(ar)f(e)n(quations)p Fk(,)242 292 y(SIAM)e(J.)f(Numer.)g(Anal.,)g(12)g
+-(\(1975\),)g(pp.)g(617{629.)86 342 y([20])23 b Fa(B.)f(P)l(arlett)g(and)g(D.)
+-g(Scott)p Fk(,)e Fc(The)f(Lanczos)i(algorithm)e(with)h(sele)n(ctive)f(ortho)n
+-(gonalization)p Fk(,)h(Math.)242 392 y(Comp.,)11 b(33)i(\(1979\),)g(pp.)g
+-(217{238.)86 442 y([21])23 b Fa(B.)16 b(P)l(arlett,)f(H.)g(Simon,)i(and)f(L.)
+-f(Stringer)p Fk(,)e Fc(Estimating)h(the)h(lar)n(gest)e(eigenvalue)i(with)f
+-(the)g(Lanczos)242 492 y(algorithm)p Fk(,)e(Math.)i(Comp.,)d(38)i(\(1982\),)g
+-(pp.)h(153{165.)86 541 y([22])23 b Fa(A.)15 b(Pothen,)g(H.)g(Simon,)g(and)h
+-(K.)e(Liou)p Fk(,)f Fc(Partitioning)h(sp)n(arse)f(matric)n(es)g(with)g
+-(eigenve)n(ctors)h(of)f(gr)n(aphs)p Fk(,)242 591 y(SIAM)h(J.)f(Matrix)h
+-(Anal.,)e(11)i(\(1990\),)e(pp.)i(430{452.)86 641 y([23])23
+-b Fa(W.)13 b(Press,)h(B.)g(Flanner)m(y,)i(S.)d(Teuk)o(olsky,)j(and)e(W.)f
+-(Vetterling)p Fk(,)e Fc(Numeric)n(al)h(R)n(e)n(cip)n(es)g(in)h(C:)f(The)242
+-691 y(A)o(rt)i(of)g(Scienti\014c)i(Computing)p Fk(,)e(Cam)o(bridge)e(Univ)o
+-(ersit)o(y)h(Press,)j(Cam)o(bridge,)11 b(1988.)86 741 y([24])23
+-b Fa(H.)16 b(D.)h(Simon)p Fk(,)d Fc(Partitioning)g(of)h(unstructur)n(e)n(d)g
+-(pr)n(oblems)g(for)f(p)n(ar)n(al)r(lel)g(pr)n(o)n(c)n(essing)p
+-Fk(,)f(in)h(Pro)q(c.)g(Conference)242 791 y(on)9 b(P)o(arallel)g(Metho)q(ds)h
+-(on)g(Large)g(Scale)g(Structural)g(Analysis)f(and)h(Ph)o(ysics)g
+-(Applications,)g(P)o(ergammon)242 840 y(Press,)15 b(1991.)86
+-890 y([25])23 b Fa(P.)17 b(Suaris)h(and)f(G.)h(Kedem)p Fk(,)c
+-Fc(A)o(n)i(algorithm)g(for)f(quadrise)n(ction)h(and)g(its)g(applic)n(ation)g
+-(to)f(standar)n(d)i(c)n(el)r(l)242 940 y(plac)n(ement)p Fk(,)c(IEEE)i(T)m
+-(rans.)e(Circuits)h(and)g(Systems,)f(35)h(\(1988\),)e(pp.)i(294{303.)86
+-990 y([26])23 b Fa(R.)18 b(V)-5 b(an)19 b(Driessche)f(and)h(D.)f(R)o(oose)p
+-Fk(,)f Fc(A)f(sp)n(e)n(ctr)n(al)g(algorithm)g(for)g(c)n(onstr)n(aine)n(d)h
+-(gr)n(aph)g(p)n(artitioning)f(I:)242 1040 y(The)11 b(bise)n(ction)g(c)n(ase)p
+-Fk(,)f(TW)g(Rep)q(ort)g(216,)f(Departmen)o(t)g(of)h(Computer)f(Science,)i
+-(Katholiek)o(e)f(Univ)o(ersiteit)242 1089 y(Leuv)o(en,)k(Belgium,)d(Octob)q
+-(er)16 b(1994.)86 1139 y([27])23 b Fa(J.)16 b(H.)f(Wilkinson)p
+-Fk(,)g Fc(The)g(A)o(lgebr)n(aic)f(Eigenvalue)h(Pr)n(oblem)p
+-Fk(,)e(Oxford)h(Univ)o(ersit)o(y)g(Press,)h(Oxford,)e(1965.)86
+-1189 y([28])23 b Fa(R.)18 b(Williams)p Fk(,)e Fc(Performanc)n(e)g(of)g
+-(dynamic)h(lo)n(ad)g(b)n(alancing)g(algorithms)e(for)h(unstructur)n(e)n(d)g
+-(mesh)h(c)n(alcu-)242 1239 y(lations)p Fk(,)c(Concurrency)m(,)i(3)e
+-(\(1991\),)g(pp.)g(457{481.)977 2762 y(44)p eop
+-%%Trailer
+-end
+-userdict /end-hook known{end-hook}if
+-%%EOF
+Index: ../trunk-jpl/externalpackages/chaco/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/chaco/install.sh	(revision 13947)
++++ ../trunk-jpl/externalpackages/chaco/install.sh	(revision 13948)
+@@ -9,6 +9,7 @@
+ 
+ #Download from ISSM server
+ $ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/Chaco-2.2.tar.gz' 'Chaco-2.2.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/docs/chaco_guide.pdf' 'chaco_guide.pdf'
+ 
+ # Untar 
+ tar -xvzf Chaco-2.2.tar.gz
+Index: ../trunk-jpl/externalpackages/matlab/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/matlab/install.sh	(revision 13947)
++++ ../trunk-jpl/externalpackages/matlab/install.sh	(revision 13948)
+@@ -1,20 +1,3 @@
+ #!/bin/bash
+-set -eu
+-
+-#Erase symlink
+ rm -rf install
+-
+-#Select or create a new simlink
+-#ln -s /usr/local/pkgs/matlab-7.6/ install
+-#ln -s /discover/vis/mathworks/matlab_r2011b/ install
+-#ln -s /usr/local/matlab704/ install
+-#ln -s /usr/local/matlab711/ install
+ ln -s /usr/local/matlab712/ install
+-
+-# Macintosh (OSX) simlink 
+-#ln -s /Applications/MATLAB_R2008a/ install
+-#ln -s /Applications/MATLAB_R2009a.app/ install
+-#ln -s /Applications/MATLAB_R2010a.app/ install
+-#ln -s /Applications/MATLAB_R2012a.app/ install
+-#ln -s /Applications/MATLAB_R2011a.app/ install
+-#ln -s /Applications/MATLAB*.app/ install
+Index: ../trunk-jpl/externalpackages/ec2api/doc/notes
+===================================================================
+--- ../trunk-jpl/externalpackages/ec2api/doc/notes	(revision 13947)
++++ ../trunk-jpl/externalpackages/ec2api/doc/notes	(revision 13948)
+@@ -1,2 +0,0 @@
+-EC2 tutorial at http://s3.amazonaws.com/AmazonEC2Tutorial/AmazonEC2Tutorial.html. 
+-15 cents pr Gb/Month to store images ->  $15/Month to store all our ModelData!
+Index: ../trunk-jpl/externalpackages/ec2api/doc/EC2_API_GET_STARTED.html
+===================================================================
+--- ../trunk-jpl/externalpackages/ec2api/doc/EC2_API_GET_STARTED.html	(revision 13947)
++++ ../trunk-jpl/externalpackages/ec2api/doc/EC2_API_GET_STARTED.html	(revision 13948)
+@@ -1,647 +0,0 @@
+-<!DOCTYPE html>
+-<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
+-<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
+-<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!-->
+-<html class="js video no-maskImage placeholder" lang="en"><!--<![endif]--><head>
+-<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+-  <meta charset="utf-8">
+-  <title>HowTo: Get started with Amazon EC2 api tools - Linux Sysadmin Blog</title>
+-  <meta name="author" content="Promet OPS Team">
+-
+-  
+-  <meta name="description" content="This article is meant to be a quick quide that will introduce the things needed to get you started with Amazon EC2. All this information can be found â¦">
+-  
+-
+-  <!-- http://t.co/dKP3o1e -->
+-  <meta name="HandheldFriendly" content="True">
+-  <meta name="MobileOptimized" content="320">
+-  <meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1">
+-
+-  
+-  <link rel="canonical" href="http://linuxsysadminblog.com/2009/06/howto-get-started-with-amazon-ec2-api-tools/">
+-  <link href="http://linuxsysadminblog.com/favicon.png" rel="icon">
+-  <link href="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+-  <script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/jXHR.js" type="text/javascript"></script><script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/all.js" id="facebook-jssdk"></script><script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/ga.js" async="" type="text/javascript"></script><script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/modernizr-2.js"></script>
+-  <script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/ender.js"></script>
+-  <script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/octopress.js" type="text/javascript"></script>
+-  <link href="http://linuxsysadminblog.com/atom.xml" rel="alternate" title="Linux Sysadmin Blog" type="application/atom+xml">
+-  <!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
+-<link href="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/css_002.css" rel="stylesheet" type="text/css">
+-<link href="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/css.css" rel="stylesheet" type="text/css">
+-
+-<!-- Google Form for Contact Page -->
+-<!-- jQuery -->
+-<script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/jquery_002.js"></script>
+-<script type="text/javascript">
+-    // Avoid conflict with ender.js.
+-jQuery.noConflict();
+-</script>
+-<!-- jQuery Form Plugin -->
+-<script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/jquery_003.js"></script>
+-<script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/jquery.js"></script> 
+-<script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/google_form.js"></script>
+-<!-- Google Form for Contact Page End here -->
+-
+-
+-  
+-  <script type="text/javascript">
+-    var _gaq = _gaq || [];
+-    _gaq.push(['_setAccount', 'UA-120251-38']);
+-    _gaq.push(['_trackPageview']);
+-
+-    (function() {
+-      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+-      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+-      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+-    })();
+-  </script>
+-
+-
+-<script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/embed.js" async="" type="text/javascript"></script><script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/widgets.js" async="" type="text/javascript"></script><script async="" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/promet.html" type="text/javascript"></script><style type="text/css">.fb_hidden{position:absolute;top:-10000px;z-index:10001}
+-.fb_invisible{display:none}
+-.fb_reset{background:none;border-spacing:0;border:0;color:#000;cursor:auto;direction:ltr;font-family:"lucida grande", tahoma, verdana, arial, sans-serif;font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:1;margin:0;overflow:visible;padding:0;text-align:left;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-spacing:normal}
+-.fb_link img{border:none}
+-.fb_dialog{background:rgba(82, 82, 82, .7);position:absolute;top:-10000px;z-index:10001}
+-.fb_dialog_advanced{padding:10px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}
+-.fb_dialog_content{background:#fff;color:#333}
+-.fb_dialog_close_icon{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yA/x/IE9JII6Z1Ys.png) no-repeat scroll 0 0 transparent;_background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/y6/x/s816eWC-2sl.gif);cursor:pointer;display:block;height:15px;position:absolute;right:18px;top:17px;width:15px;top:8px\9;right:7px\9}
+-.fb_dialog_mobile .fb_dialog_close_icon{top:5px;left:5px;right:auto}
+-.fb_dialog_padding{background-color:transparent;position:absolute;width:1px;z-index:-1}
+-.fb_dialog_close_icon:hover{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yA/x/IE9JII6Z1Ys.png) no-repeat scroll 0 -15px transparent;_background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/y6/x/s816eWC-2sl.gif)}
+-.fb_dialog_close_icon:active{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yA/x/IE9JII6Z1Ys.png) no-repeat scroll 0 -30px transparent;_background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/y6/x/s816eWC-2sl.gif)}
+-.fb_dialog_loader{background-color:#f2f2f2;border:1px solid #606060;font-size:24px;padding:20px}
+-.fb_dialog_top_left,
+-.fb_dialog_top_right,
+-.fb_dialog_bottom_left,
+-.fb_dialog_bottom_right{height:10px;width:10px;overflow:hidden;position:absolute}
+-.fb_dialog_top_left{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yR/x/8YeTNIlTZjm.png) no-repeat 0 0;left:-10px;top:-10px}
+-.fb_dialog_top_right{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yR/x/8YeTNIlTZjm.png) no-repeat 0 -10px;right:-10px;top:-10px}
+-.fb_dialog_bottom_left{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yR/x/8YeTNIlTZjm.png) no-repeat 0 -20px;bottom:-10px;left:-10px}
+-.fb_dialog_bottom_right{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yR/x/8YeTNIlTZjm.png) no-repeat 0 -30px;right:-10px;bottom:-10px}
+-.fb_dialog_vert_left,
+-.fb_dialog_vert_right,
+-.fb_dialog_horiz_top,
+-.fb_dialog_horiz_bottom{position:absolute;background:#525252;filter:alpha(opacity=70);opacity:.7}
+-.fb_dialog_vert_left,
+-.fb_dialog_vert_right{width:10px;height:100%}
+-.fb_dialog_vert_left{margin-left:-10px}
+-.fb_dialog_vert_right{right:0;margin-right:-10px}
+-.fb_dialog_horiz_top,
+-.fb_dialog_horiz_bottom{width:100%;height:10px}
+-.fb_dialog_horiz_top{margin-top:-10px}
+-.fb_dialog_horiz_bottom{bottom:0;margin-bottom:-10px}
+-.fb_dialog_iframe{line-height:0}
+-.fb_dialog_content .dialog_title{background:#6d84b4;border:1px solid #3b5998;color:#fff;font-size:14px;font-weight:bold;margin:0}
+-.fb_dialog_content .dialog_title > span{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yD/x/Cou7n-nqK52.gif)
+-no-repeat 5px 50%;float:left;padding:5px 0 7px 26px}
+-body.fb_hidden{-webkit-transform:none;height:100%;margin:0;left:-10000px;overflow:visible;position:absolute;top:-10000px;width:100%
+-}
+-.fb_dialog.fb_dialog_mobile.loading{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yc/x/3rhSv5V8j3o.gif)
+-white no-repeat 50% 50%;min-height:100%;min-width:100%;overflow:hidden;position:absolute;top:0;z-index:10001}
+-.fb_dialog.fb_dialog_mobile.loading.centered{max-height:590px;min-height:590px;max-width:500px;min-width:500px}
+-#fb-root #fb_dialog_ipad_overlay{background:rgba(0, 0, 0, .45);position:absolute;left:0;top:0;width:100%;min-height:100%;z-index:10000}
+-#fb-root #fb_dialog_ipad_overlay.hidden{display:none}
+-.fb_dialog.fb_dialog_mobile.loading iframe{visibility:hidden}
+-.fb_dialog_content .dialog_header{-webkit-box-shadow:white 0 1px 1px -1px inset;background:-webkit-gradient(linear, 0 0, 0 100%, from(#738ABA), to(#2C4987));border-bottom:1px solid;border-color:#1d4088;color:#fff;font:14px Helvetica, sans-serif;font-weight:bold;text-overflow:ellipsis;text-shadow:rgba(0, 30, 84, .296875) 0 -1px 0;vertical-align:middle;white-space:nowrap}
+-.fb_dialog_content .dialog_header table{-webkit-font-smoothing:subpixel-antialiased;height:43px;width:100%
+-}
+-.fb_dialog_content .dialog_header td.header_left{font-size:12px;padding-left:5px;vertical-align:middle;width:60px
+-}
+-.fb_dialog_content .dialog_header td.header_right{font-size:12px;padding-right:5px;vertical-align:middle;width:60px
+-}
+-.fb_dialog_content .touchable_button{background:-webkit-gradient(linear, 0 0, 0 100%, from(#4966A6),
+-color-stop(0.5, #355492), to(#2A4887));border:1px solid #29447e;-webkit-background-clip:padding-box;-webkit-border-radius:3px;-webkit-box-shadow:rgba(0, 0, 0, .117188) 0 1px 1px inset,
+-rgba(255, 255, 255, .167969) 0 1px 0;display:inline-block;margin-top:3px;max-width:85px;line-height:18px;padding:4px 12px;position:relative}
+-.fb_dialog_content .dialog_header .touchable_button input{border:none;background:none;color:#fff;font:12px Helvetica, sans-serif;font-weight:bold;margin:2px -12px;padding:2px 6px 3px 6px;text-shadow:rgba(0, 30, 84, .296875) 0 -1px 0}
+-.fb_dialog_content .dialog_header .header_center{color:#fff;font-size:16px;font-weight:bold;line-height:18px;text-align:center;vertical-align:middle}
+-.fb_dialog_content .dialog_content{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yJ/x/jKEcVPZFk-2.gif) no-repeat 50% 50%;border:1px solid #555;border-bottom:0;border-top:0;height:150px}
+-.fb_dialog_content .dialog_footer{background:#f2f2f2;border:1px solid #555;border-top-color:#ccc;height:40px}
+-#fb_dialog_loader_close{float:left}
+-.fb_dialog.fb_dialog_mobile .fb_dialog_close_button{text-shadow:rgba(0, 30, 84, .296875) 0 -1px 0}
+-.fb_dialog.fb_dialog_mobile .fb_dialog_close_icon{visibility:hidden}
+-.fb_iframe_widget{position:relative;display:-moz-inline-block;display:inline-block}
+-.fb_iframe_widget iframe{position:absolute}
+-.fb_iframe_widget_lift{z-index:1}
+-.fb_iframe_widget span{position:relative;display:inline-block;vertical-align:text-bottom;text-align:justify}
+-.fb_hide_iframes iframe{position:relative;left:-10000px}
+-.fb_iframe_widget_loader{position:relative;display:inline-block}
+-.fb_iframe_widget_fluid{display:inline}
+-.fb_iframe_widget_loader iframe{min-height:32px;z-index:2;zoom:1}
+-.fb_iframe_widget_loader .FB_Loader{background:url(http://static.ak.fbcdn.net/rsrc.php/v2/yJ/x/jKEcVPZFk-2.gif) no-repeat;height:32px;width:32px;margin-left:-16px;position:absolute;left:50%;z-index:4}
+-.fb_button_simple,
+-.fb_button_simple_rtl{background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/yH/x/eIpbnVKI9lR.png);background-repeat:no-repeat;cursor:pointer;outline:none;text-decoration:none}
+-.fb_button_simple_rtl{background-position:right 0}
+-.fb_button_simple .fb_button_text{margin:0 0 0 20px;padding-bottom:1px}
+-.fb_button_simple_rtl .fb_button_text{margin:0 10px 0 0}
+-a.fb_button_simple:hover .fb_button_text,
+-a.fb_button_simple_rtl:hover .fb_button_text,
+-.fb_button_simple:hover .fb_button_text,
+-.fb_button_simple_rtl:hover .fb_button_text{text-decoration:underline}
+-.fb_button,
+-.fb_button_rtl{background:#29447e url(http://static.ak.fbcdn.net/rsrc.php/v2/yl/x/FGFbc80dUKj.png);background-repeat:no-repeat;cursor:pointer;display:inline-block;padding:0 0 0 1px;text-decoration:none;outline:none}
+-.fb_button .fb_button_text,
+-.fb_button_rtl .fb_button_text{background:#5f78ab url(http://static.ak.fbcdn.net/rsrc.php/v2/yl/x/FGFbc80dUKj.png);border-top:solid 1px #879ac0;border-bottom:solid 1px #1a356e;color:#fff;display:block;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-weight:bold;padding:2px 6px 3px 6px;margin:1px 1px 0 21px;text-shadow:none}
+-a.fb_button,
+-a.fb_button_rtl,
+-.fb_button,
+-.fb_button_rtl{text-decoration:none}
+-a.fb_button:active .fb_button_text,
+-a.fb_button_rtl:active .fb_button_text,
+-.fb_button:active .fb_button_text,
+-.fb_button_rtl:active .fb_button_text{border-bottom:solid 1px #29447e;border-top:solid 1px #45619d;background:#4f6aa3;text-shadow:none}
+-.fb_button_xlarge,
+-.fb_button_xlarge_rtl{background-position:left -60px;font-size:24px;line-height:30px}
+-.fb_button_xlarge .fb_button_text{padding:3px 8px 3px 12px;margin-left:38px}
+-a.fb_button_xlarge:active{background-position:left -99px}
+-.fb_button_xlarge_rtl{background-position:right -268px}
+-.fb_button_xlarge_rtl .fb_button_text{padding:3px 8px 3px 12px;margin-right:39px}
+-a.fb_button_xlarge_rtl:active{background-position:right -307px}
+-.fb_button_large,
+-.fb_button_large_rtl{background-position:left -138px;font-size:13px;line-height:16px}
+-.fb_button_large .fb_button_text{margin-left:24px;padding:2px 6px 4px 6px}
+-a.fb_button_large:active{background-position:left -163px}
+-.fb_button_large_rtl{background-position:right -346px}
+-.fb_button_large_rtl .fb_button_text{margin-right:25px}
+-a.fb_button_large_rtl:active{background-position:right -371px}
+-.fb_button_medium,
+-.fb_button_medium_rtl{background-position:left -188px;font-size:11px;line-height:14px}
+-a.fb_button_medium:active{background-position:left -210px}
+-.fb_button_medium_rtl{background-position:right -396px}
+-.fb_button_text_rtl,
+-.fb_button_medium_rtl .fb_button_text{padding:2px 6px 3px 6px;margin-right:22px}
+-a.fb_button_medium_rtl:active{background-position:right -418px}
+-.fb_button_small,
+-.fb_button_small_rtl{background-position:left -232px;font-size:10px;line-height:10px}
+-.fb_button_small .fb_button_text{padding:2px 6px 3px;margin-left:17px}
+-a.fb_button_small:active,
+-.fb_button_small:active{background-position:left -250px}
+-.fb_button_small_rtl{background-position:right -440px}
+-.fb_button_small_rtl .fb_button_text{padding:2px 6px;margin-right:18px}
+-a.fb_button_small_rtl:active{background-position:right -458px}
+-.fb_share_count_wrapper{position:relative;float:left}
+-.fb_share_count{background:#b0b9ec none repeat scroll 0 0;color:#333;font-family:"lucida grande", tahoma, verdana, arial, sans-serif;text-align:center}
+-.fb_share_count_inner{background:#e8ebf2;display:block}
+-.fb_share_count_right{margin-left:-1px;display:inline-block}
+-.fb_share_count_right .fb_share_count_inner{border-top:solid 1px #e8ebf2;border-bottom:solid 1px #b0b9ec;margin:1px 1px 0 1px;font-size:10px;line-height:10px;padding:2px 6px 3px;font-weight:bold}
+-.fb_share_count_top{display:block;letter-spacing:-1px;line-height:34px;margin-bottom:7px;font-size:22px;border:solid 1px #b0b9ec}
+-.fb_share_count_nub_top{border:none;display:block;position:absolute;left:7px;top:35px;margin:0;padding:0;width:6px;height:7px;background-repeat:no-repeat;background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/yP/x/bSOHtKbCGYI.png)}
+-.fb_share_count_nub_right{border:none;display:inline-block;padding:0;width:5px;height:10px;background-repeat:no-repeat;background-image:url(http://static.ak.fbcdn.net/rsrc.php/v2/yL/x/i_oIVTKMYsL.png);vertical-align:top;background-position:right 5px;z-index:10;left:2px;margin:0 2px 0 0;position:relative}
+-.fb_share_no_count{display:none}
+-.fb_share_size_Small .fb_share_count_right .fb_share_count_inner{font-size:10px}
+-.fb_share_size_Medium .fb_share_count_right .fb_share_count_inner{font-size:11px;padding:2px 6px 3px;letter-spacing:-1px;line-height:14px}
+-.fb_share_size_Large .fb_share_count_right .fb_share_count_inner{font-size:13px;line-height:16px;padding:2px 6px 4px;font-weight:normal;letter-spacing:-1px}
+-.fb_share_count_hidden .fb_share_count_nub_top,
+-.fb_share_count_hidden .fb_share_count_top,
+-.fb_share_count_hidden .fb_share_count_nub_right,
+-.fb_share_count_hidden .fb_share_count_right{visibility:hidden}
+-.fb_connect_bar_container div,
+-.fb_connect_bar_container span,
+-.fb_connect_bar_container a,
+-.fb_connect_bar_container img,
+-.fb_connect_bar_container strong{background:none;border-spacing:0;border:0;direction:ltr;font-style:normal;font-variant:normal;letter-spacing:normal;line-height:1;margin:0;overflow:visible;padding:0;text-align:left;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none;visibility:visible;white-space:normal;word-spacing:normal;vertical-align:baseline}
+-.fb_connect_bar_container{position:fixed;left:0 !important;right:0 !important;height:42px !important;padding:0 25px !important;margin:0 !important;vertical-align:middle !important;border-bottom:1px solid #333 !important;background:#3b5998 !important;z-index:99999999 !important;overflow:hidden !important}
+-.fb_connect_bar_container_ie6{position:absolute;top:expression(document.compatMode=="CSS1Compat"? document.documentElement.scrollTop+"px":body.scrollTop+"px")}
+-.fb_connect_bar{position:relative;margin:auto;height:100%;width:100%;padding:6px 0 0 0 !important;background:none;color:#fff !important;font-family:"lucida grande", tahoma, verdana, arial, sans-serif !important;font-size:13px !important;font-style:normal !important;font-variant:normal !important;font-weight:normal !important;letter-spacing:normal !important;line-height:1 !important;text-decoration:none !important;text-indent:0 !important;text-shadow:none !important;text-transform:none !important;white-space:normal !important;word-spacing:normal !important}
+-.fb_connect_bar a:hover{color:#fff}
+-.fb_connect_bar .fb_profile img{height:30px;width:30px;vertical-align:middle;margin:0 6px 5px 0}
+-.fb_connect_bar div a,
+-.fb_connect_bar span,
+-.fb_connect_bar span a{color:#bac6da;font-size:11px;text-decoration:none}
+-.fb_connect_bar .fb_buttons{float:right;margin-top:7px}
+-.fb_edge_widget_with_comment{position:relative;*z-index:1000}
+-.fb_edge_widget_with_comment span.fb_edge_comment_widget{position:absolute}
+-.fb_edge_widget_with_comment span.fb_send_button_form_widget{z-index:1}
+-.fb_edge_widget_with_comment span.fb_send_button_form_widget .FB_Loader{left:0;top:1px;margin-top:6px;margin-left:0;background-position:50% 50%;background-color:#fff;height:150px;width:394px;border:1px #666 solid;border-bottom:2px solid #283e6c;z-index:1}
+-.fb_edge_widget_with_comment span.fb_send_button_form_widget.dark .FB_Loader{background-color:#000;border-bottom:2px solid #ccc}
+-.fb_edge_widget_with_comment span.fb_send_button_form_widget.siderender
+-.FB_Loader{margin-top:0}
+-.fbpluginrecommendationsbarleft,
+-.fbpluginrecommendationsbarright{position:fixed !important;bottom:0;z-index:999}
+-/* @noflip */
+-.fbpluginrecommendationsbarleft{left:10px}
+-/* @noflip */
+-.fbpluginrecommendationsbarright{right:10px}
+-</style><script charset="UTF-8" async="" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/thread.js"></script><link href="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/defaults.css" type="text/css" rel="stylesheet"><script charset="UTF-8" async="" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/disqus.js"></script><link href="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/theme.css" type="text/css" rel="stylesheet"><script charset="UTF-8" async="" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/theme.js"></script><script charset="UTF-8" async="" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/event.js"></script></head>
+-
+-<body data-twttr-rendered="true">
+-  <header role="banner"><hgroup>
+-  <h1><a href="http://linuxsysadminblog.com/">Linux Sysadmin Blog</a></h1>
+-  
+-</hgroup>
+-
+-</header>
+-  <nav role="navigation"><ul class="subscription" data-subscription="rss">
+-  <li><a href="http://linuxsysadminblog.com/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
+-  
+-</ul>
+-  
+-<form action="http://google.com/search" method="get">
+-  <fieldset role="search">
+-    <input name="q" value="site:linuxsysadminblog.com" type="hidden">
+-    <input class="search" name="q" results="0" placeholder="Search" type="text">
+-  </fieldset><fieldset class="mobile-nav"><select><option value="">Navigateâ¦</option><option value="http://linuxsysadminblog.com/">Â» Blog</option><option value="http://linuxsysadminblog.com/blog/our-team">Â» Our Team</option><option value="http://linuxsysadminblog.com/blog/archives">Â» Archives</option><option value="http://linuxsysadminblog.com/blog/about">Â» About</option><option value="http://linuxsysadminblog.com/blog/contact">Â» Contact</option><option selected="selected" value="http://linuxsysadminblog.com/atom.xml">Â» RSS</option></select></fieldset>
+-</form>
+-  
+-<ul class="main-navigation">
+-  <li><a href="http://linuxsysadminblog.com/">Blog</a></li>
+-  <li><a href="http://linuxsysadminblog.com/blog/our-team">Our Team</a></li>
+-  <li><a href="http://linuxsysadminblog.com/blog/archives">Archives</a></li>
+-  <li><a href="http://linuxsysadminblog.com/blog/about">About</a></li>
+-  <li><a href="http://linuxsysadminblog.com/blog/contact">Contact</a></li>
+-</ul>
+-
+-</nav>
+-  <div id="main">
+-    <div id="content">
+-      
+-
+-<div>
+-<article class="hentry" role="article">
+-  
+-  <header>
+-    
+-      <h1 class="entry-title">HowTo: Get Started With Amazon EC2 Api Tools</h1>
+-    
+-    
+-      <p class="meta">
+-        
+-  
+-
+-
+-<span class="byline author vcard">Posted by <span class="fn"><a href="http://linuxsysadminblog.com/blog/our-team/marius-ducea.html">Marius Ducea</a></span></span>
+-
+- - 
+-
+-
+-
+-
+-
+-
+-
+-
+-  
+-
+-
+-<time datetime="2009-06-02T09:57:46+08:00" pubdate="" data-updated="true">Jun 2<span>nd</span>, 2009</time>
+-        
+-         | <a href="#disqus_thread">Comments</a>
+-        
+-      </p>
+-    
+-  </header>
+-
+-
+-<div class="entry-content"><p>This article is meant to be a quick quide that will introduce the things needed to <strong>get you started with Amazon EC2</strong>.
+- All this information can be found in the EC2 api docs, and this is not 
+-meant to be a replacement of the documentation, just trying to show the 
+-things needed in a clear and short form.</p>
+-
+-<h3>Getting Started</h3>
+-
+-<p>First of all you will need one <a href="http://aws.amazon.com/"><strong>Amazon AWS</strong></a> <strong>account </strong>and enable the <strong>EC2 service</strong>; in case you donât have this already now is the time to <a href="http://www.amazon.com/gp/aws/registration/registration-form.html">create</a> your account. Once you do that you can safely return to this doc ;-)</p>
+-
+-<p>Once you have your account working, while still on the aws site, go and create a new <strong>X.509 certificate</strong>
+- (under the AWS Access Identifiers page, in the X.509 certificate 
+-section near the bottom, click Create New). Once this is done, you will 
+-want to <em>download locally the private key file and X.509 certificate</em>.</p>
+-
+-<h3>EC2 API tools</h3>
+-
+-<p>Next you will have to <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=351&amp;categoryID=88">download</a>
+- and install the Amazon EC2 api tools on one system (controlling 
+-machine) that will be used to start your EC2 army of servers, and 
+-control their usage. You will want to use the latest version (2009-05-15
+- at this time) as it will support all the features Amazon is offering 
+-for the EC2 service.</p>
+-
+-<p>The only real dependency of the EC2 API tools is <strong>java </strong>(at
+- least version 1.5) so we will want to install that first. If you are 
+-running debian you can easily do this just by running (for lenny):
+-<code>aptitude install sun-java6-jre</code>
+-while for etch you will have to use: <em>aptitude install sun-java5-jre</em>
+-For other distributions you can either use their internal packaging 
+-mechanism (in case they provide sun-java packages) or just download the 
+-binary from sun and install it manually.</p>
+-
+-<p><strong>Extract </strong>the EC2 APi tools (it is a zip archive called <strong>ec2-api-tools.zip</strong>) and move it under a folder of your preferece. I like to use <strong>~/.ec2</strong> for this, but you can use any folder you prefer. Also copy the <strong>private key</strong> and <strong>X.509 certificate</strong> in the same directory. Those files will look like <em>cert-xxx.pem</em> and <em>pk-xxx.pem</em>.</p>
+-
+-<p>Next we will have to <strong>export some shell variables</strong>. A good place to put this is in ~/.bashrc:</p>
+-
+-<figure class="code"><div class="highlight"><table><tbody><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
+-<span class="line-number">2</span>
+-<span class="line-number">3</span>
+-<span class="line-number">4</span>
+-<span class="line-number">5</span>
+-<span class="line-number">6</span>
+-<span class="line-number">7</span>
+-<span class="line-number">8</span>
+-</pre></td><td class="code"><pre><code class=""><span class="line">export EC2_HOME=~/.ec2
+-</span><span class="line">export PATH=$PATH:$EC2_HOME/bin
+-</span><span class="line">export EC2_PRIVATE_KEY=$EC2_HOME/pk-xxx.pem
+-</span><span class="line">export EC2_CERT=$EC2_HOME/cert-xxx.pem
+-</span><span class="line">#Java home for debian default install path:
+-</span><span class="line">export JAVA_HOME=/usr
+-</span><span class="line">#add ec2 tools to default path
+-</span><span class="line">export PATH=~/.ec2/bin:$PATH</span></code></pre></td></tr></tbody></table></div></figure>
+-
+-
+-<p>Finally source the file to have the changes active in your current shell session:
+-<code>source ~/.bashrc</code>
+-or just open a new shell before starting to use the API tools.</p>
+-
+-<h3>EC2 Keypair</h3>
+-
+-<p>We will need to create one <strong>keypair </strong>that will be used to connect using <strong>ssh</strong> to the EC2 instances we will be using. We will use the <strong>ec2-add-keypair</strong> utility to create the key and register it with amazon:
+-<code>ec2-add-keypair my-keypair</code>
+-This will print out the private key that we will have to save in a file:
+-`cat &gt; ~/.ec2/id_rsa-my-keypair</p>
+-
+-<h1>paste the private key content</h1>
+-
+-<p>sudo chmod 600 <code>`~/.ec2/id_rsa-my-keypair</code></p>
+-
+-<h3>Running your first EC2 instance</h3>
+-
+-<p>Amazon EC2 uses the concept of <strong>AMIs </strong>= Amazon Machine
+- Images. Any EC2 instance is started from one AMI. You can either use 
+-standard, public AMIs or create and customize your own private images. 
+-Creating or modifying existing AMIs is beyond the scope of this article,
+- but just as a general information this is done using special AMI tools.
+- Also before building your AMI you will want to ensure if you want to 
+-use a âsmallâ type of image (i386 os) or a âlargeâ type of instance 
+-(64bit os). These are described under<a href="http://aws.amazon.com/ec2/instance-types/"> http://aws.amazon.com/ec2/instance-types/</a></p>
+-
+-<p>For the scope of our article we will find a standard public image and
+- start one instance of it to see that all is working properly with the 
+-EC2 api tools. You can see all the public images using:
+-<code>ec2-describe-images -a</code>
+-(over 2,300 images ;) ). You should probably grep the result to get any 
+-useful information. There are many good public images to use, like for 
+-example the <a href="http://alestic.com/">alestic</a> ones (for debian and ubuntu)
+-Having the AMI id of the image we want to use we are ready to start our fist EC2 instance:
+-<code>ec2-run-instances ami-e348af8a -k my-keypair</code>
+-that will start a small instance with a 32bit debian lenny server instance from alestic.com.</p>
+-
+-<p><code>ec2-describe-instances</code>
+-- this will describe the status of all the running instances, with their hostname, instance id, etc.</p>
+-
+-<p><code>ec2-authorize default -p 22</code>
+-- in order to connect to your instance you will need to customize the 
+-âdefaultâ firewall rules for your account. The above rule will allow ssh
+- on port 22 from anywhere. If you want to open http traffic you will 
+-have to add a rule like this:
+-<code>ec2-authorize default -p 80</code></p>
+-
+-<p>Finally we can ssh to the ec2 instance using:
+-<code>ssh -i ~/.ec2/id_rsa-my-keypair root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com</code>
+-where ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com is the actual 
+-hostname of the instance as obtained from ec2-describe-instances.</p>
+-
+-<p><em>Note</em>: donât forget to <strong>stop your instance</strong> 
+-when you no longer need it. EC2 is a service paid as you use, hence if 
+-you forget your instance running you will be billed for it ;-). You can 
+-do this by running <strong>shutdown </strong>inside the instance or by using:
+-<code>ec2-terminate-instances i-yourinstance</code>
+-and verify with <strong>ec2-describe-instances</strong> that the instance is indeed stopped.</p>
+-
+-<p>Next step is to create/customize your own EC2 AMI images based on 
+-your needs. This will be covered in a future article. Hopefully you 
+-found this article useful, and it will get you on track quickly with 
+-Amazon EC2 api tools.</p>
+-</div>
+-
+-
+-  <footer>
+-    <p class="meta">
+-      
+-  
+-
+-
+-<span class="byline author vcard">Posted by <span class="fn"><a href="http://linuxsysadminblog.com/blog/our-team/marius-ducea.html">Marius Ducea</a></span></span>
+-
+-
+-      
+-
+-
+-
+-
+-
+-
+-
+-
+-  
+-
+-
+-<time datetime="2009-06-02T09:57:46+08:00" pubdate="" data-updated="true">Jun 2<span>nd</span>, 2009</time>
+-      
+-
+-<span class="categories">
+-  
+-    <a class="category" href="http://linuxsysadminblog.com/category/cli/">CLI</a>, <a class="category" href="http://linuxsysadminblog.com/category/howto/">HowTo</a>, <a class="category" href="http://linuxsysadminblog.com/category/cloud-computing/">cloud computing</a>, <a class="category" href="http://linuxsysadminblog.com/category/sysadmin/">sysadmin</a>
+-  
+-</span>
+-
+-
+-    </p>
+-    
+-      <div class="sharing">
+-  
+-  <iframe data-twttr-rendered="true" title="Twitter Tweet Button" style="width: 107px; height: 20px;" class="twitter-share-button twitter-count-horizontal" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/tweet_button.html" allowtransparency="true" frameborder="0" scrolling="no"></iframe>
+-  
+-  
+-  
+-    <div fb-xfbml-state="rendered" class="fb-like fb_edge_widget_with_comment fb_iframe_widget" data-send="true" data-width="450" data-show-faces="false"><span style="height: 24px; width: 450px;"><iframe src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/like.html" class="fb_ltr" title="Like this content on Facebook." style="border: medium none; overflow: hidden; height: 24px; width: 450px;" name="f24b4a4df68728" id="fd385dd951b88c" scrolling="no"></iframe></span></div>
+-  
+-</div>
+-
+-    
+-    <p class="meta">
+-      
+-        <a class="basic-alignment left" href="http://linuxsysadminblog.com/2009/05/moving-magento-sites/" title="Previous Post: Moving Magento Sites">Â« Moving Magento Sites</a>
+-      
+-      
+-        <a class="basic-alignment right" href="http://linuxsysadminblog.com/2009/06/new-debian-apt-keys/" title="next Post: New Debian apt keys">New Debian apt keys Â»</a>
+-      
+-    </p>
+-  </footer>
+-</article>
+-
+-  <section>
+-    <h1>Comments</h1>
+-    <div id="disqus_thread" aria-live="polite"><noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
+-<div style="display: none;" id="dsq-content-stub"><img alt="DISQUS" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAARCAYAAAH4YIFjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABwdJREFUeNpi/P//PwMhwAIiGBkZGeK6V8JVh9rqdfrc0ixnEDb+wPD2rAAjMSYBBBBRisDWwKxCthIE/q8Q+A8yhCiTAAIIrCi+ZxVMZSAQr19UGs4IMxWd/X8Rw3/GOKDhW43fgzwF1hX7n5EJ2dSp2QFNUKcZwJ31/78CkvPBGkGGMXidSUTWCxBAxAUAEQAcJzCvIXsDBPwsNBU2nbj+AMpdsFA8PAHsLZj3QC5D9hrIAEtN+RMwAzRkxcB0iK3eQ6iQIRAnoMTE//8CyHwmWHQdv/7QAiZ44/ErMP383acsqNB5iMnPlsFdsUZ6IU3CCCCA4AYBw8kBJgj06gGkmHJAFgPyQV4ExeQEoNgHJHUBQMoAWRzoerBeYHgeQOJ/APIvQPkNUP4EuIdADBAGBRMQOABxQcakdSipHZldNGvL2zWHL8kD1d0HieVN33QYqnc/EAfULNwJVw8KTniQwvjAdPz/SEwKmL1KfC5QjwEQr4e5AyVdA3P4ASCe8O3nb1whmtib6r3IXlfpATBEFbpWH9ygJSdmBtXrOHPbyZWPXn1AqOZRwDSBS+YHo82SOQwiZnYMoS+EGC42nGdYzBiAnKpgGAbeA3ECkjwYQNnzH758///6o5cgofVIagy+/vgFF//y/ecHJLn1/18AA+/teZBcPZL4eSTxBJg7AAKIaomRmpkeV2IG5UcDpMSsAM2zF4BiG9DUFaCLQxPwBWCC/QBkg/QqoCVuEN4ASuDIaWc/DIMSItBxH0GCrkaqCVBxWO4BJWBQcK/PmrL+I1S8H0i9h4mjFfX7GTRyIdEuHzIfZtb/Zdw3oGyQnvP/d9pNgRc+MLCwJMxxWk7AI6Ar+YCWVSLLyYkJzIYlZqC6RGBhbg/lFwDlQHoDgfgALLfhjY8/X9XhpWPs/wWM7odyMBwDylU8nOzyILYIH3cZslxBgM0cKHM+MOTAGCZnri7XCdS7ASgGLsc/fPlug9cxlrO/wUvYxYwJwCgLwHAMcrVlqCJ9BVlchJ+7EhRyQPwAyGaAFnhgsOPMzUhQroLVAU76yp/gGp/vtQbTr45pwMWOp1oDQ6QQiGEi6+EJGLmah0YJQ6CVtu3ivecKYHIpE9b8BPqcDSnawHSSu8m3eTvPyAHlzsPkDl25/wXMYAOq+XgtBFwIfn/GwCAOSq8HYCGCsNh8+hvksgYZIJchDkjljAKoHAKVJ6ByBbnmA5XESOL1oFIZSc9/cJkC1IukPuH/z/cw8fswdwyqcgYgwAaVYwYbQEnDSI1LbGABEDcCC1lYS4yhfO42n+fvPm9GKsAZkfJDA7RcwwYmQM1CbpUUADU3AB3AjxJ7wFwAFGsAqp2A0mBDahww8Gv4Mvrf2AKXWyMzgeHbk3wwh5X/DGPkR1OoHlCmn49cGCABkL8SgZn8ANbAQQaV4ZBK6yGwgbDr3G2GNx+/gkqShMTe1V///vsnA/KYjoKECjBwMPQCW0EngOrNQWxbHQWGFA8zBlAj5eztpwwbjl9lyPG1DFOUEAIFDqxJB6ksoC1ZN2NVsDm7zt4GNUhBgdUPrXwckWtQOJB0VQE2XRF8UQt9hodrIGw+FaDcWVjAwAshhsD7kAbPO2Dr78ZEBoZfHxQYHNYbwEogvIGjKSfOiNysBpaEL/acv8MODBhuUX7u00BhVVx6DZWlxHcDAxQEDl95AMZQAGqHLlSSFIanAnZWll0/f/8Bs2OcDB+5GavJVyGZtevsrYdL9p2XQ6rZGcnKI54nZRj2uoMCAVr4K8JkQAKgJsdEYN12AbmYYSGqYGJk/NC8bO91WHKUFRXgwace6ElDIF4PjHWHc3eeMZy98xSU8mB1mwE0FSQCU8ECZiZGVpi+yw9eLIfVlUyMjIf+/f/Pu/bIlTtIdSX5hauo+RagxxMZfr2fwHB3IT/Dy4MMDI/BzTABaP2aAGzmgPpN4gQDB1pmgIA+EAfcfvoGXl/mB1hXFuBxCLDs6oc26kBJZiIoxShLCqs9e/tp+vdfv8ENB08Tdf9FwHKsMtxxTfvK/SGgbHfx3vNyoL2g7DjR30r74vqjV2yA6lXgbnI2WtoH4yhEfGF4sAISSTcm9wOzDcidoE6lPTBLwRuyDMoJ5+DZagnLJIb/f3mh5edGcKoRs+5neHUUUgZxiIrhrK2wFchc7KwMmsByANjiAZUfoGzhCEpJIDlQowOYffqRC2RQS+f1x68HNx6/ygcqY9A7RMZAc5LcTS/zcLLZwcwB1evAzs/8pfsvwDu9yOplgRECzF4M8a7Gryw05NRB+sDtiC/3HjKcKeaDpgAEADVmNIDlsX4DqFPmCOvvMNxdkAAuX95dQFUPKnv06kEBmQgNOLpV5QbQpAsrcz4QUC+AVJsgqxcgoNcBqQy5QIIdONUDALcn6c0dtMJ9AAAAAElFTkSuQmCC" height="17" width="71"><img alt="..." src="data:image/gif;base64,R0lGODlhEAALAPQAAP///z2LqeLt8dvp7u7090GNqz2LqV+fuJ/F1IW2ycrf51aatHWswaXJ14i4ys3h6FmctUCMqniuw+vz9eHs8fb5+meku+Tu8vT4+cfd5bbT3tbm7PH2+AAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA" style="margin: 0pt 0pt 3px 5px;" height="11" width="16"></div><div class="clearfix" style="display: block;" id="dsq-content">      <div id="dsq-global-toolbar" class="dsq-clearfix">        <ul class="dsq-global-toolbar-right dsq-clearfix">                            <li class="dsq-community-box">                <a href="#" class="dsq-toolbar-item dsq-tt" onclick="DISQUS.dtpl.actions.fire('community.show'); return false" title="Expand Community Box"><span class="dsq-toolbar-icon"></span></a>            </li>                            <li class="dsq-global-toolbar-dropdown-container">                    <div id="dsq-toolbar-dropdown">    <a href="#" class="dsq-toolbar-logo dsq-toolbar-item dsq-clearfix"><span class="dsq-toolbar-icon">Disqus</span></a>    <div id="dsq-toolbar-dropdown-wrap" style="display: none">      <ul class="dsq-clearfix">                    <li class="dsq-login-link"><a href="#" onclick="DISQUS.dtpl.actions.fire('auth.login'); return false"><span class="dsq-toolbar-icon"></span><span class="dsq-toolbar-label">Login</span></a></li>                    <li class="dsq-about-link"><a href="http://disqus.com/" target="_blank"><span class="dsq-toolbar-icon"></span><span class="dsq-toolbar-label">About Disqus</span></a></li>      </ul>    </div>  </div>            </li>        </ul>                <ul class="dsq-global-toolbar-left dsq-clearfix">            <li class="dsq-like-thread">                <a href="#" id="dsq-like-thread-button" class="dsq-toolbar-item dsq-clearfix  dsq-tt" onclick="DISQUS.dtpl.actions.fire('thread.vote', 1); return false;" title="I like this page">                    <span class="dsq-toolbar-icon"></span>                    <span class="dsq-toolbar-label">Like</span>                </a>            </li>            <li class="dsq-dislike-thread">                <a href="#" id="dsq-dislike-thread-button" class="dsq-toolbar-item dsq-clearfix  dsq-tt" onclick="DISQUS.dtpl.actions.fire('thread.vote', -1); return false" title="I don't like this page">                    <span class="dsq-toolbar-icon">Dislike</span>                </a>            </li>            <li class="dsq-like-panel">                <ul class="dsq-like-faces dsq-clearfix">                        <li class="dsq-like-activity">    </li>                </ul>            </li>        </ul>            </div>    <div id="dsq-like-tooltip">      <div id="dsq-share-step-1" class="dsq-share-step">        <h3>Glad you liked it. Would you like to share?</h3>        <p class="dsq-tooltip-checkbox"><input id="dsq-share-thread-facebook" value="Facebook" type="checkbox"><label for="dsq-share-thread-facebook"><span class="dsq-facebook">Facebook</span></label></p>        <p class="dsq-tooltip-checkbox"><input id="dsq-share-thread-twitter" value="Twitter" type="checkbox"><label for="dsq-share-thread-twitter"><span class="dsq-twitter">Twitter</span></label></p>        <ul id="dsq-tooltip-actions">                        <li><a href="#" onclick="DISQUS.dtpl.actions.fire('thread.share.send'); return false" class="dsq-primary-action">Share</a></li>                    <li><a href="#" onclick="DISQUS.dtpl.actions.fire('thread.share.cancel'); return false" class="dsq-secondary-action">No thanks</a></li>        </ul>      </div>      <div id="dsq-share-step-2" class="dsq-share-step" style="display:none !important">        <p>Sharing this page â¦</p>      </div>      <div id="dsq-share-step-3" class="dsq-share-step" style="display:none !important">        <p>Thanks! <a href="#" class="dsq-tooltip-decline" onclick="DISQUS.dtpl.actions.fire('thread.share.cancel'); return false">Close</a></p>      </div>    </div>                                <div class="dsq-reply " id="dsq-reply">          <div id="dsq-account-dropdown">                  <a href="#" onclick="DISQUS.dtpl.actions.fire('auth.login'); return false;">Login</a>              </div>      <h3>Add New Comment</h3>        <div class="dsq-avatar">              <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png">          </div>    <div class="dsq-textarea dsq-textarea-reply">      <div class="dsq-textarea-background">        <div style="height: auto;" class="dsq-textarea-wrapper">          <!-- filled dynamically -->        <iframe style="height: 58px;" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/reply.html" id="easyXDM_DISQUS_net_default8491_provider" name="easyXDM_DISQUS_net_default8491_provider" frameborder="0" scrolling="no"></iframe></div>                  <div id="dsq-media-preview" class="dsq-media-preview" style="display:none">          </div>                <div class="dsq-post-tools">          <ul>            <li class="dsq-post-as">                                <button type="button" class="dsq-button" onclick="DISQUS.dtpl.actions.fire('comments.validate', null, this);">                    Post as â¦                  </button>                          </li>                          <li class="dsq-attach-media">                <div class="dsq-attach-media-container">                  <span>Image</span>                  <!-- filled dynamically -->                <iframe src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/upload.html" id="easyXDM_DISQUS_net_default8492_provider" name="easyXDM_DISQUS_net_default8492_provider" frameborder="0" scrolling="no"></iframe></div>              </li>                        <li class="dsq-share-on dsq-clearfix">                            </li>          </ul>        </div>      </div>    </div>  </div>                              <div id="dsq-sort-by">    <select id="dsq-sort-select" onchange="DISQUS.dtpl.actions.fire('thread.sort', this.value);">              <option value="hot" selected="selected">          Sort by popular now        </option>              <option value="best">          Sort by best rating        </option>              <option value="newest">          Sort by newest first        </option>              <option value="oldest">          Sort by oldest first        </option>          </select>  </div>      <h3>            Showing <span id="dsq-num-posts">11</span> comments        </h3>        <ul id="dsq-comments">            <li id="comment-555758785">  </li><li id="dsq-comment-555758785" data-dsq-comment-id="555758785" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Marius Ducea's profile">      <a href="http://disqus.com/twitter-16829516/" onclick="DISQUS.dtpl.actions.fire('profile.show', 555758785, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/avatar32.jpg" class="" alt="">      </a>    </div>    <div id="dsq-comment-body-555758785" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://twitter.com/mariusducea" target="_blank" class="dsq-commenter-name" rel="nofollow">Marius Ducea</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 555758785); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 555758785); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-555758785">                <div class="dsq-comment-text" id="dsq-comment-text-555758785">        <p>@Dfd
+- sun-java was removed from ubuntu. You could still install it manually 
+-from the oracle site, but easier it would be to use openjdk imo.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-555758785"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-555758785">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,555758785); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',555758785, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-555758785" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 555758785);" title="Link to comment by Marius Ducea">          3 months ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-555758785" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 555758785); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 555758785, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-555758785"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-555758785"></li>            <li id="comment-555729014">  </li><li id="dsq-comment-555729014" data-dsq-comment-id="555729014" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Dfd's profile">      <a href="http://disqus.com/guest/be2dadc68bb8d32df521ca5cefa764da/" onclick="DISQUS.dtpl.actions.fire('profile.show', 555729014, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/avatar32_002.jpg" class="" alt="">      </a>    </div>    <div id="dsq-comment-body-555729014" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Dfd</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 555729014); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 555729014); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-555729014">                <div class="dsq-comment-text" id="dsq-comment-text-555729014">        <p>Unforunately&nbsp;</p>
+-
+-<p>aptitude install sun-java6-jre&nbsp;</p>
+-
+-<p>didn't work for me, running ubuntu</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-555729014"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-555729014">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,555729014); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',555729014, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-555729014" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 555729014);" title="Link to comment by Dfd">          3 months ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-555729014" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 555729014); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 555729014, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-555729014"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-555729014"></li>            <li id="comment-552875079">  </li><li id="dsq-comment-552875079" data-dsq-comment-id="552875079" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Shawn Welch's profile">      <a href="http://disqus.com/guest/38b42911484f66ee5aedadaa16846340/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875079, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/avatar32.xml" class="" alt="">      </a>    </div>    <div id="dsq-comment-body-552875079" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://shrimpwagon.wordpress.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Shawn Welch</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875079); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875079); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875079">                <div class="dsq-comment-text" id="dsq-comment-text-552875079">        <p>Thank you sooo much. Very complete and useful. This is exactly what you need to do to setup EC2.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875079"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875079">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875079); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875079, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875079" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875079);" title="Link to comment by Shawn Welch">          1 year ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875079" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875079); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875079, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875079"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875079"></li>            <li id="comment-552875078">  </li><li id="dsq-comment-552875078" data-dsq-comment-id="552875078" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Aret Carlsen's profile">      <a href="http://disqus.com/guest/05335a1c9416420be891a3fac838f774/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875078, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="" alt="">      </a>    </div>    <div id="dsq-comment-body-552875078" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Aret Carlsen</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875078); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875078); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875078">                <div class="dsq-comment-text" id="dsq-comment-text-552875078">        <p>Useful article.</p>
+-
+-<p>You seem to have an advertising virus.  The headline of one section 
+-currently reads, "Running your first EC2 instance", where the second 
+-through fourth words are a link to a 3rd-party website.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875078"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875078">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875078); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875078, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875078" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875078);" title="Link to comment by Aret Carlsen">          1 year ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875078" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875078); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875078, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875078"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875078"></li>            <li id="comment-552875074">  </li><li id="dsq-comment-552875074" data-dsq-comment-id="552875074" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand mitch's profile">      <a href="http://disqus.com/guest/5d6f004d9437535eb1cd0a0d5427aff1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875074, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-552875074" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.devnull.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">mitch</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875074); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875074); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875074">                <div class="dsq-comment-text" id="dsq-comment-text-552875074">        <p>It does show up in Elasticfox. I had the wrong region selected. Thanks for the great post.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875074"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875074">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875074); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875074, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875074" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875074);" title="Link to comment by mitch">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875074" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875074); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875074, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875074"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875074"></li>            <li id="comment-552875073">  </li><li id="dsq-comment-552875073" data-dsq-comment-id="552875073" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand mitch's profile">      <a href="http://disqus.com/guest/5d6f004d9437535eb1cd0a0d5427aff1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875073, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-552875073" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.devnull.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">mitch</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875073); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875073); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875073">                <div class="dsq-comment-text" id="dsq-comment-text-552875073">        <p>I
+- don't see how AWS knows this is running under your account. I have 
+-Elasticfox and in the list of ami's I don't see the same ones listed 
+-using the api-tools. Using this article I can start an ami and login to 
+-it just fine but I don't see any running instances under my aws account 
+-or in elasticfox. Can someone enlighten me please?</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875073"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875073">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875073); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875073, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875073" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875073);" title="Link to comment by mitch">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875073" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875073); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875073, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875073"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875073"></li>            <li id="comment-552875063">  </li><li id="dsq-comment-552875063" data-dsq-comment-id="552875063" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Gabi's profile">      <a href="http://disqus.com/guest/3eda6fcd3204ef285fa52176c28c4d3e/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875063, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/uploads/anonusers/2036/avatar32.jpg?1281549414" alt="">      </a>    </div>    <div id="dsq-comment-body-552875063" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.none.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Gabi</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875063); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875063); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875063">                <div class="dsq-comment-text" id="dsq-comment-text-552875063">        <p>Hi,</p>
+-
+-<p>If I grant access to different people to start different instances is
+- there any way to track who started an instances, for how long he used 
+-it and when did he started?</p>
+-
+-<p>Thank you.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875063"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875063">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875063); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875063, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875063" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875063);" title="Link to comment by Gabi">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875063" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875063); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875063, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875063"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875063"></li>            <li id="comment-552875071">  </li><li id="dsq-comment-552875071" data-dsq-comment-id="552875071" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Jason Liang's profile">      <a href="http://disqus.com/guest/6f1e107d88dce22d3cfd5431d68b25b0/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875071, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-552875071" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.aixmind.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Jason Liang</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875071); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875071); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875071">                <div class="dsq-comment-text" id="dsq-comment-text-552875071">        <p>Very helpful!<br>I've subscribed to your RSS!</p>
+-
+-<p>Keep it up!<br>Jason</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875071"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875071">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875071); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875071, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875071" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875071);" title="Link to comment by Jason Liang">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875071" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875071); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875071, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875071"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875071"></li>            <li id="comment-552875067">  </li><li id="dsq-comment-552875067" data-dsq-comment-id="552875067" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand sudhish's profile">      <a href="http://disqus.com/guest/3ca972ade05174e8939651f7c4f8a084/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875067, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-552875067" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">sudhish</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875067); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875067); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875067">                <div class="dsq-comment-text" id="dsq-comment-text-552875067">        <p>Its a very helpful</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875067"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875067">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875067); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875067, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875067" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875067);" title="Link to comment by sudhish">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875067" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875067); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875067, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875067"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875067"></li>            <li id="comment-552875070">  </li><li id="dsq-comment-552875070" data-dsq-comment-id="552875070" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand marius's profile">      <a href="http://disqus.com/guest/34b742e276f76496c6c3b12d07ee984f/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875070, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/uploads/anonusers/5550/9495/avatar32.jpg?1281549414" alt="">      </a>    </div>    <div id="dsq-comment-body-552875070" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.ducea.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">marius</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875070); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875070); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875070">                <div class="dsq-comment-text" id="dsq-comment-text-552875070">        <p>@Kevin:
+- yes from the path point of view this is the same, but the api tools 
+-need to have defined the variable EC2_HOME so this can't be simplified 
+-like that. </p>
+-
+-<p>Cheers,<br>- Marius -</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875070"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875070">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875070); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875070, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875070" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875070);" title="Link to comment by marius">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875070" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875070); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875070, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875070"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875070"></li>            <li id="comment-552875068">  </li><li id="dsq-comment-552875068" data-dsq-comment-id="552875068" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Kevin's profile">      <a href="http://disqus.com/guest/bc97afb80638c682d0389d7f1c61985a/" onclick="DISQUS.dtpl.actions.fire('profile.show', 552875068, null); return false">        <img src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-552875068" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Kevin</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 552875068); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 552875068); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-552875068">                <div class="dsq-comment-text" id="dsq-comment-text-552875068">        <p>I love the instructions. They were very helpful.</p>
+-
+-<p>Do these two path statements in the instructions do the same thing?<br>  export EC2_HOME=~/.ec2<br>  export PATH=$PATH:$EC2_HOME/bin</p>
+-
+-<p>  export PATH=~/.ec2/bin:$PATH</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-552875068"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-552875068">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,552875068); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',552875068, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-552875068" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 552875068);" title="Link to comment by Kevin">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-552875068" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 552875068); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 552875068, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-552875068"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-552875068"></li>      </ul>        <div id="dsq-pagination">      <ul id="dsq-footer" class="dsq-clearfix">        <div id="dsq-subscribe">            <li>      <a href="#" class="dsq-subscribe-email" onclick="return DISQUS.dtpl.actions.fire('thread.subscribe');">        <span class="dsq-font">M</span> <em>Subscribe by email</em>      </a>    </li>    <li>    <a href="http://linuxsysadminblog.disqus.com/howto_get_started_with_amazon_ec2_api_tools/latest.rss" class="dsq-subscribe-rss">      <span class="dsq-font">S</span> <em>RSS</em>    </a>  </li>    </div>  </ul>    </div>                  <div class="dsq-trackback-url">      Trackback URL      <input onclick="this.select()" readonly="true" value="http://disqus.com/forums/linuxsysadminblog/howto_get_started_with_amazon_ec2_api_tools/trackback/">    </div>      </div><div>  </div></div>
+-  </section>
+-
+-</div>
+-
+-<aside class="sidebar thirds">
+-  
+-    <section class="first odd">
+-  <h1>Recent Posts</h1>
+-  <ul id="recent_posts">
+-    
+-      <li class="post">
+-        <a href="http://linuxsysadminblog.com/2012/08/integrate-sendgrid-with-redmine/">Integrate Sendgrid with Redmine</a>
+-      </li>
+-    
+-      <li class="post">
+-        <a href="http://linuxsysadminblog.com/2012/07/rsback-task-x-is-locked-and-cannot-be-executed/">rsback: task x is locked and cannot be executed</a>
+-      </li>
+-    
+-      <li class="post">
+-        <a href="http://linuxsysadminblog.com/2012/06/restore-xen-vm-from-lvm-snapshot-backups/">Restore Xen VM from LVM Snapshot Backups</a>
+-      </li>
+-    
+-      <li class="post">
+-        <a href="http://linuxsysadminblog.com/2012/06/debian-6-backup-xen-with-lvm-and-rsnapshot/">Debian 6: Backup Xen with LVM and Rsnapshot</a>
+-      </li>
+-    
+-      <li class="post">
+-        <a href="http://linuxsysadminblog.com/2012/06/gitolite-add-edit-or-delete-git-repository-name/">Gitolite: Add, Edit, or Delete Git Repository Name</a>
+-      </li>
+-    
+-  </ul>
+-</section>
+-
+-<section class="even">
+-  <h1>GitHub Repos</h1>
+-  <ul id="gh_repos">
+-    <li class="loading">Status updating...</li>
+-  </ul>
+-  
+-  <a href="https://github.com/promet">@promet</a> on GitHub
+-  
+-  <script type="text/javascript">
+-    $.domReady(function(){
+-        if (!window.jXHR){
+-            var jxhr = document.createElement('script');
+-            jxhr.type = 'text/javascript';
+-            jxhr.src = '/javascripts/libs/jXHR.js';
+-            var s = document.getElementsByTagName('script')[0];
+-            s.parentNode.insertBefore(jxhr, s);
+-        }
+-
+-        github.showRepos({
+-            user: 'promet',
+-            count: 0,
+-            skip_forks: true,
+-            target: '#gh_repos'
+-        });
+-    });
+-  </script>
+-  <script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/github.js" type="text/javascript"> </script>
+-</section>
+-
+-
+-<section class="odd">
+-  <h1>Latest Tweets</h1>
+-  <ul id="tweets"><li><p><a href="http://twitter.com/linuxsysadmnblg/status/8944570719">139w</a>New blog post: Drupal core - killing kittens <a href="http://linuxsysadminblog.com/2010/02/drupal-core-killing-kittens/">linuxsysadminblog.com/2010/02/drupal-core-killing-kittens/</a></p></li><li><p><a href="http://twitter.com/linuxsysadmnblg/status/8581729446">140w</a>New blog post: cvs [checkout aborted]: absolute pathnames invalid for server <a href="http://bit.ly/bTAwEE">bit.ly/bTAwEE</a></p></li><li><p><a href="http://twitter.com/linuxsysadmnblg/status/8560789171">140w</a>New blog post: Drupal Performance improvement for the layment presentation <a href="http://bit.ly/bBfMBi">bit.ly/bBfMBi</a></p></li><li><p><a href="http://twitter.com/linuxsysadmnblg/status/6324746591">149w</a>New blog post: Google to offer free DNS service <a href="http://linuxsysadminblog.com/2009/12/google-to-offer-free-dns-service/">linuxsysadminblog.com/2009/12/google-to-offer-free-dns-service/</a></p></li></ul>
+-  <script type="text/javascript">
+-    $.domReady(function(){
+-      getTwitterFeed("linuxsysadmnblg", 4, false);
+-    });
+-  </script>
+-  <script src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/twitter.js" type="text/javascript"> </script>
+-  
+-    <iframe data-twttr-rendered="true" title="Twitter Follow Button" style="width: 158px; height: 20px;" class="twitter-follow-button" src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/follow_button.html" allowtransparency="true" frameborder="0" scrolling="no"></iframe>
+-  
+-</section>
+-
+-
+-
+-
+-
+-  
+-</aside>
+-
+-
+-    <span class="toggle-sidebar"></span></div>
+-  </div>
+-  <footer role="contentinfo"><p>
+-  Copyright Â© 2012 - Promet OPS Team -
+-  <span class="credit">Powered by <a href="http://octopress.org/">Octopress</a></span>
+-</p>
+-
+-</footer>
+-  
+-
+-<script type="text/javascript">
+-      var disqus_shortname = 'linuxsysadminblog';
+-      
+-        
+-        // var disqus_developer = 1;
+-        var disqus_identifier = 'http://linuxsysadminblog.com/2009/06/howto-get-started-with-amazon-ec2-api-tools/';
+-        var disqus_url = 'http://linuxsysadminblog.com/2009/06/howto-get-started-with-amazon-ec2-api-tools/';
+-        var disqus_script = 'embed.js';
+-      
+-    (function () {
+-      var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+-      dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+-      (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+-    }());
+-</script>
+-
+-
+-
+-<div class=" fb_reset" id="fb-root"><div style="position: absolute; top: -10000px; height: 0pt; width: 0pt;"><div><iframe src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/xd_arbiter.html" name="fb_xdm_frame_http" id="fb_xdm_frame_http"></iframe><iframe src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/xd_arbiter_002.html" name="fb_xdm_frame_https" id="fb_xdm_frame_https"></iframe></div><div><iframe src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/oauth.html" name="f201413aa2819a8" id="f201413aa2819a8" style="display: none;"></iframe></div></div></div>
+-<script>(function(d, s, id) {
+-  var js, fjs = d.getElementsByTagName(s)[0];
+-  if (d.getElementById(id)) {return;}
+-  js = d.createElement(s); js.id = id;
+-  js.src = "//connect.facebook.net/en_US/all.js#appId=212934732101925&xfbml=1";
+-  fjs.parentNode.insertBefore(js, fjs);
+-}(document, 'script', 'facebook-jssdk'));</script>
+-
+-
+-
+-
+-
+-  <script type="text/javascript">
+-    (function(){
+-      var twitterWidgets = document.createElement('script');
+-      twitterWidgets.type = 'text/javascript';
+-      twitterWidgets.async = true;
+-      twitterWidgets.src = 'http://platform.twitter.com/widgets.js';
+-      document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
+-    })();
+-  </script>
+-
+-
+-
+-
+-
+-
+-
+-<iframe src="HowTo_%20Get%20started%20with%20Amazon%20EC2%20api%20tools%20-%20Linux%20Sysadmin%20Blog_files/def.html" style="position: absolute; top: -2000px; left: 0px;" id="easyXDM_DISQUS_net_default8490_provider" name="easyXDM_DISQUS_net_default8490_provider" frameborder="0"></iframe></body></html>
+\ No newline at end of file
+Index: ../trunk-jpl/externalpackages/ec2api/doc/ec2-ug.pdf
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/externalpackages/ec2api/doc/mpi-cluster-with-python-and-amazon-ec2-part-2-of-3.html
+===================================================================
+--- ../trunk-jpl/externalpackages/ec2api/doc/mpi-cluster-with-python-and-amazon-ec2-part-2-of-3.html	(revision 13947)
++++ ../trunk-jpl/externalpackages/ec2api/doc/mpi-cluster-with-python-and-amazon-ec2-part-2-of-3.html	(revision 13948)
+@@ -1,1111 +0,0 @@
+-<!DOCTYPE html>
+-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us"><head>
+-  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+-  <title>MPI Cluster with Python and Amazon EC2 (part 2 of 3) Â» Data Wrangling Blog</title>
+-	<meta name="verify-v1" content="532Q5ykeumd5lwz7oFvo62D7+EX/DOYbH9r/VWbwd+Y=">
+-	<meta name="author" content="Peter Skomoroch">
+-	<meta name="description" content="Today I posted a public Amazon EC2 AMI which can be used to run an on demand beowulf cluster in the cloud">
+-	<meta name="keywords" content="cluster computing, python, mpi, amazon ec2, and cloud computing">
+-
+-   <link href="http://feeds.feedburner.com/DataWrangling" rel="alternate" title="DataWrangling" type="application/atom+xml">
+-
+-   <!-- syntax highlighting CSS -->
+-   <link rel="stylesheet" href="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/syntax.css" type="text/css">
+-
+-   <!-- Homepage CSS -->
+-   <link rel="stylesheet" href="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/screen.css" type="text/css" media="screen, projection">
+-
+-   <!-- Typekit -->
+-   <script type="text/javascript">try{Typekit.load();}catch(e){}</script>
+-	
+-   <!-- Disqus debug -->
+-<script type="text/javascript">  var disqus_developer = 0; </script> 
+-
+-<script src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/embed.js" async="" type="text/javascript"></script><script charset="UTF-8" async="" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/thread.js"></script><link href="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/defaults.css" type="text/css" rel="stylesheet"><script charset="UTF-8" async="" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/disqus.js"></script><link href="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/theme.css" type="text/css" rel="stylesheet"><script charset="UTF-8" async="" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/theme.js"></script><script charset="UTF-8" async="" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/event.js"></script></head>
+-<body id="blog">
+-
+-<div id="container">
+-	<div id="header">
+-	<!-- <h1><a href="http://www.datawrangling.com" title="Data Wrangling" >:Data Wrangling</a></h1> -->
+-   <h1><a href="http://www.datawrangling.com/" title="Data Wrangling"><img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/logo-white.png" alt="Data Wrangling"></a></h1><a href="http://www.datawrangling.com/" title="Data Wrangling">
+-</a> 
+-  <!-- <a href="http://www.datawrangling.com" title="DataWrangling.com"><img src="http://datawrangling.s3.amazonaws.com/datawrangling_logo_white.png" alt="Data Wrangling"/>
+-</a> -->
+-	<div id="subtitle">
+-	<!-- Here's the tagline  -->
+-	Machine Learning, Data Mining, and More    
+-	</div>
+-</div>
+-
+-
+-	
+-<div id="navigation">
+-	<ul>
+-		<li><a href="http://www.datawrangling.com/" id="blognav">Blog</a></li>		
+-		<li><a href="http://www.datawrangling.com/about/" id="aboutnav">About</a></li>
+-		<li><a href="http://www.datawrangling.com/contact/" id="contactnav">Contact</a></li> 
+-		<li><a href="http://www.datawrangling.com/news/" id="newsnav">News</a></li> 
+-		<li><a href="http://www.datawrangling.com/code/" id="codenav">Code</a></li> 				
+-		<!-- TODO: fix CSS and add mobile layout -->
+-		<!-- TODO: if user arrives from search engine display related content -->
+-	</ul>
+-</div>
+-
+-
+-			<div id="navcol">
+-			<ul>
+-				<li class="pagenav">
+-					<h2>
+-						Follow DataWrangling
+-					</h2>
+-				</li>			
+-				<li>
+-					<a href="http://twitter.com/peteskomoroch" id="twitter-link" name="twitter-link"><img title="pete skomoroch on Twitter" alt="follow datawrangling on twitter" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/TwitterBadge.png"></a>
+-				</li>							
+-				<li style="list-style: none">
+-					<p><a href="http://feeds.feedburner.com/DataWrangling" rel="alternate" type="application/rss+xml"><img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/feed-icon16x16.png" alt="" style="vertical-align: middle; border: 0pt none;"></a><a href="http://feeds.feedburner.com/DataWrangling" rel="alternate" type="application/rss+xml"> Subscribe in a reader</a>
+-					</p>
+-				</li>		
+-				<li style="list-style: none">
+-					<p>
+-					<a href="http://www.linkedin.com/in/peterskomoroch"><img alt="pskomoroch" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/linkedin.png" border="0" height="15" width="15"> Connect on LinkedIn</a>
+-					</p>
+-				</li>
+-				<li style="list-style: none">
+-					<p>
+-					<a href="http://github.com/datawrangling"><img alt="pskomoroch" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/github.png" border="0" height="15" width="15"> Watch on Github</a>
+-					</p>
+-				</li>				
+-				<li style="list-style: none">
+-					<p>
+-					<a href="http://www.delicious.com/pskomoroch"><img alt="pskomoroch" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/delicious.png" border="0" height="15" width="15"> Add on Delicious</a>
+-					</p>
+-				</li>
+-							<li style="list-style: none">	
+-								<p><a href="http://feeds.feedburner.com/DataWrangling"><img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/DataWrangling.gif" style="border: 0pt none;" alt="" height="26" width="88"></a></p>
+-								<script type="text/javascript" language="javascript" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/a.html">
+-				</script><div id="TwitterCounter"><a href="http://twittercounter.com/peteskomoroch?utm_source=referring%2Bsites&amp;utm_medium=organic%2Blinks&amp;utm_campaign=twittercounter%2Bbutton" title="Twitter Counter for @peteskomoroch" target="_blank"><img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/a.png" style="border: medium none;" alt="Peter Skomoroch has 9188 followers on Twitter" height="26" width="88"></a></div>
+-							</li>							
+-									
+-			</ul>
+-			<ul>
+-				<li style="list-style: none">
+-					<h2 class="sidebar-title">
+-						Recent Projects
+-					</h2>
+-					<ul>
+- 						<li>
+-							<a href="http://linkedin-on-rails.heroku.com/">linkedin_on_rails</a>
+-						</li>
+-						<li>
+-							<a href="http://github.com/datawrangling/spatialanalytics">spatialanalytics</a>
+-						</li>								
+-						<li>
+-							<a href="http://www.trendingtopics.org/">Trending Topics</a>
+-						</li>
+-						<li>
+-							<a href="http://github.com/datawrangling/ec2cluster/tree/master">ec2cluster (REST Web Service for MPI on EC2)</a>
+-						</li>
+-						<li>
+-							<a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2294&amp;ref=featured">ItemSimilarity with Elastic MapReduce</a>
+-						</li>
+-					</ul>
+-					<h2>
+-						Recent Posts
+-					</h2>
+-					<ul>
+-						<li>
+-							<a href="http://www.datawrangling.com/slides-thoughts-from-hadoop-world-nyc" title="View post Slides &amp;#038; Thoughts from Hadoop World NYC">Slides &amp; Thoughts from Hadoop World NYC</a>
+-						</li>
+-						<li>
+-							<a href="http://www.datawrangling.com/how-flightcaster-squeezes-predictions-from-flight-data" title="View post How FlightCaster Squeezes Predictions from Flight Data">How FlightCaster Squeezes Predictions from Flight Data</a>
+-						</li>
+-						<li>
+-							<a href="http://www.datawrangling.com/wikipedia-page-traffic-statistics-dataset" title="View post Wikipedia Page Traffic Statistics Dataset">Wikipedia Page Traffic Statistics Dataset</a>
+-						</li>
+-						<li>
+-							<a href="http://www.datawrangling.com/quick-visualization-of-irs-search-queries" title="View post Quick Visualization of irs.gov Search Queries">Quick Visualization of irs.gov Search Queries</a>
+-						</li>
+-						<li>
+-							<a href="http://www.datawrangling.com/amazon-elastic-mapreduce-a-web-service-api-for-hadoop" title="View post Amazon Elastic MapReduce: A Web Service API for Hadoop">Amazon Elastic MapReduce: A Web Service API for Hadoop</a>
+-						</li>
+-						<li>
+-							<a href="http://www.datawrangling.com/updated-list-of-datasets-video-lectures" title="View post Updated List of Datasets &amp;#038; Video Lectures">Updated List of Datasets &amp; Video Lectures</a>
+-						</li>
+-					</ul>
+-				</li>
+-			</ul>
+-			<h2>
+-				Popular Posts
+-			</h2>
+-			<ul>
+-				<li>
+-					<a href="http://www.datawrangling.com/hidden-video-courses-in-math-science-and-engineering" rel="bookmark" title="April 9, 2008">Hidden Video Courses in Math, Science, and Engineering</a>
+-				</li>
+-				<li>
+-					<a href="http://www.datawrangling.com/some-datasets-available-on-the-web" rel="bookmark" title="January 17, 2008">Some Datasets Available on the Web</a>
+-				</li>
+-				<li>
+-					<a href="http://www.datawrangling.com/mpi-cluster-with-python-and-amazon-ec2-part-2-of-3" rel="bookmark" title="April 9, 2007">MPI Cluster with Python and Amazon EC2 (part 2 of 3)</a>
+-				</li>
+-				<li>
+-					<a href="http://www.datawrangling.com/on-demand-mpi-cluster-with-python-and-ec2-part-1-of-3" rel="bookmark" title="March 17, 2007">On-Demand MPI Cluster with Python and EC2 (part 1 of 3)</a>
+-				</li>
+-				<li>
+-					<a href="http://www.datawrangling.com/python-montage-code-for-displaying-arrays" rel="bookmark" title="February 29, 2008">Python Montage Code for Displaying Arrays</a>
+-				</li>
+-			</ul>
+-			<ul id="linkslist">
+-				<li id="linkcat-1">
+-					<h2>
+-						Blogroll
+-					</h2>
+-					<ul>
+-						<li>
+-							<a href="http://medriscoll.com/">Data Utopian (Mike Driscoll)</a>
+-						</li>
+-						<li>
+-							<a href="http://www.informationdiet.com/blog">Information Diet (Clay Johnson)</a>
+-						</li>			
+-						<li>
+-							<a href="http://radar.oreilly.com/tim/">Tim O'Reilly</a>
+-						</li>									
+-						<li>
+-							<a href="http://fivethirtyeight.blogs.nytimes.com/">FiveThirtyEight (Nate Silver)</a>
+-						</li>
+-						<li>
+-							<a href="http://blog.okcupid.com/">OkTrends (OkCupid Data blog)</a>
+-						</li>
+-						<li>
+-							<a href="http://sna-projects.com/blog/">SNA Projects Blog (LinkedIn)</a>
+-						</li>					
+-							
+-						<li>
+-							<a href="http://www.hilarymason.com/">Hilary Mason (bit.ly)</a>
+-						</li>												
+-						<li>
+-							<a href="http://mark.reid.name/iem/">Inductio Ex Machina (Mark Reid)</a>
+-						</li>						
+-						<li>
+-							<a href="http://www.riccomini.name/">Chris Riccomini (LinkedIn)</a>
+-						</li>	
+-						<li>
+-							<a href="http://www.igvita.com/blog/">igvita.com</a>
+-						</li>
+-						<li>
+-							<a href="http://dumbotics.com/">Dumbotics (Last.FM)</a>
+-						</li>
+-						<li>
+-							<a href="http://glinden.blogspot.com/">Geeking With Greg</a>
+-						</li>						
+-						<li>
+-							<a href="http://www.juiceanalytics.com/writing/" rel="colleague">Juice Analytics</a>
+-						</li>
+-						<li>
+-							<a href="http://blog.infochimps.org/">Infochimps Blog</a>
+-						</li>					
+-						<li>
+-							<a href="http://www.cloudera.com/blog/">Cloudera Blog</a>
+-						</li>
+-						<li>
+-							<a href="http://petewarden.typepad.com/">Pete Warden</a>
+-						</li>		
+-						<li>
+-							<a href="http://www.cerebralmastication.com/">Cerebral Mastication (J.D. Long)</a>
+-						</li>						
+-						<li>
+-							<a href="http://blog.doloreslabs.com/">Dolores Labs Blog</a>
+-						</li>
+-						<li>
+-							<a href="http://anyall.org/blog/">Brendan O'Connor's Blog</a>
+-						</li>
+-						<li>
+-							<a href="http://blog.kiwitobes.com/">Kiwitobes (Toby Segaran)</a>
+-						</li>						
+-						<li>
+-							<a href="http://informationarbitrage.com/">Information Arbitrage</a>
+-						</li>
+-						<li>
+-							<a href="http://www.iaventurepartners.com/category/blog">IA Ventures</a>
+-						</li>	
+-					</ul>
+-				</li>
+-			</ul>
+-		</div><!-- end sidebar -->
+-
+-
+-	<div class="site">
+-		<div id="maincol"><!-- The main content column begins  -->
+-			<div class="col">
+-	  		<div id="post">
+-  <h3 class="entrytitle">
+-		<a href="http://www.datawrangling.com/mpi-cluster-with-python-and-amazon-ec2-part-2-of-3">MPI Cluster with Python and Amazon EC2 (part 2 of 3)</a>
+-	</h3>
+-	<div class="entrymeta">
+-  <p class="meta">Posted by Peter Skomoroch on Apr 09, 2007 to cluster computing, python, mpi, amazon ec2, and cloud computing</p> </div>
+-  <p>Today I posted a <a href="http://developer.amazonwebservices.com/connect/entry.jspa?categoryID=101&amp;externalID=705">public AMI</a>  which can be used to run a small <a href="http://www.clustermonkey.net//content/category/4/21/33/">beowulf cluster</a> on <a href="http://www.amazon.com/gp/browse.html?node=201590011">Amazon EC2</a> and do some parallel computations with C, Fortran, or <a href="http://www.python.org/">Python</a>.
+-  If you prefer another language (Java, Ruby, etc) just install the 
+-appropriate MPI library and rebundle the EC2 image.  The following set 
+-of Python scripts automate the launch and configuration of an <a href="http://www-unix.mcs.anl.gov/mpi/mpich2/index.htm#docs">MPI</a> cluster on EC2 (currently limited to 20 nodes while EC2 is in beta):</p>
+-
+-<p><strong><em>Update (3-19-08): Code for running a cluster with large 
+-or xlarge 64 bit EC2 instances is now hosted on google code.  The new 
+-images include NFS, ganglia, IPython1, and other useful python packages.</em></strong></p>
+-
+-<p><a href="http://code.google.com/p/elasticwulf/">http://code.google.com/p/elasticwulf/</a></p>
+-
+-<p><strong><em>Update (7-24-07): I've made some important bug fixes to 
+-the scripts to address issues mentioned in the comments.  See the README
+- file for details</em></strong></p>
+-
+-<ul>
+-<li><a href="http://datawrangling.s3.amazonaws.com/AmazonEC2_MPI_scripts_1_5-tar.gz">AmazonEC2_MPI_scripts_1_5.tar.gz</a></li>
+-</ul>
+-
+-
+-<p>The file contains some quick scripts I threw together using the AWS 
+-Python example code.  This is the approach I'm using to bootstrap an MPI
+- cluster until one of the major <a href="http://www.gdargaud.net/Hack/ClusterNotes.html">linux cluster distros</a> is ported to run on EC2.  Details on what is included in the public AMI were covered in <a href="http://www.datawrangling.com/on-demand-mpi-cluster-with-python-and-ec2-part-1-of-3.html">Part 1</a>
+- of the tutorial, Part 3 will cover cluster operation on EC2 in more 
+-detail and show how to use Python to carry out some neat parallel 
+-computations.</p>
+-
+-<p>The cluster launch process is pretty simple once you have an Amazon 
+-EC2 account and keys, just download the Python scripts and you can be 
+-running a compute cluster in a few minutes.  In a later post I will look
+- at cluster bandwidth and performance in detail.  If you have only an 
+-occasional need for running large jobs,  $2/hour for a 20 node MPI 
+-cluster on EC2 is not a bad deal considering the ~ $20K price for 
+-building your own comparable system.</p>
+-
+-<!--more-->
+-
+-
+-<p>Prerequisites:</p>
+-
+-<ol>
+-<li>Get a valid <a href="http://www.amazon.com/b/ref=sc_fe_l_2/104-6132551-0326311?ie=UTF8&amp;node=201590011&amp;no=3435361&amp;me=A36L942TSJ2AJA">Amazon EC2 account</a></li>
+-<li>Complete the most recent <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=992&amp;categoryID=87">"getting started guide"</a> tutorial on Amazon EC2 and create all needed web service accounts, authorizations, and keypairs</li>
+-<li>Download and install the <a href="http://developer.amazonwebservices.com/connect/entry.jspa?categoryID=85&amp;externalID=552">Amazon EC2 Python library</a></li>
+-<li>Download the Amazon <a href="http://datawrangling.s3.amazonaws.com/AmazonEC2_MPI_scripts_1_5-tar.gz">EC2 MPI cluster management scripts</a></li>
+-</ol>
+-
+-
+-<h2 id="LaunchingtheEC2nodes">Launching the EC2 nodes</h2>
+-
+-
+-<p>First , unzip the cluster management scripts and modify the 
+-configuration parameters in '''EC2config.py''',  substituting your own 
+-EC2 keys and changing the cluster size if desired:</p>
+-
+-<div class="highlight"><pre><code class="python"><span class="c">#replace these with your AWS keys</span>
+-<span class="n">AWS_ACCESS_KEY_ID</span> <span class="o">=</span> <span class="s">'YOUR_KEY_ID_HERE'</span>
+-<span class="n">AWS_SECRET_ACCESS_KEY</span> <span class="o">=</span> <span class="s">'YOUR_KEY_HERE'</span>
+-<span class="c">#change this to your keypair location (see the EC2 getting started guide tutorial on using ec2-add-keypair)</span>
+-<span class="n">KEYNAME</span> <span class="o">=</span> <span class="s">"gsg-keypair"</span>
+-<span class="n">KEY_LOCATION</span> <span class="o">=</span> <span class="s">"/Users/pskomoroch/id_rsa-gsg-keypair"</span>
+-<span class="c"># remove these next two lines when you've updated your credentials.</span>
+-<span class="k">print</span> <span class="s">"update </span><span class="si">%s</span><span class="s"> with your AWS credentials"</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+-<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
+-
+-<span class="n">MASTER_IMAGE_ID</span> <span class="o">=</span> <span class="s">"ami-3e836657"</span>
+-<span class="n">IMAGE_ID</span> <span class="o">=</span> <span class="s">"ami-3e836657"</span>
+-
+-<span class="n">DEFAULT_CLUSTER_SIZE</span> <span class="o">=</span> <span class="mi">5</span>
+-</code></pre>
+-</div>
+-
+-
+-<p>Launch the EC2 cluster by running the '''ec2-start_cluster.py''' script from your local machine:</p>
+-
+-<pre><code> 
+-peter-skomorochs-computer:~/AmazonEC2_MPI_scripts pskomoroch$ ./ec2-start-cluster.py 
+-
+-image ami-3e836657
+-master image ami-3e836657
+------ starting master -----
+-RESERVATION r-275eb84e  027811143419    default
+-INSTANCE    i-0ed33167  ami-3e836657            pending
+------ starting workers -----
+-RESERVATION r-265eb84f  027811143419    default
+-INSTANCE    i-01d33168  ami-3e836657            pending
+-INSTANCE    i-00d33169  ami-3e836657            pending
+-INSTANCE    i-03d3316a  ami-3e836657            pending
+-INSTANCE    i-02d3316b  ami-3e836657            pending
+-</code></pre>
+-
+-
+-<p>Verify the EC2 nodes are running with '''./ec2-check-instances.py''':</p>
+-
+-<pre><code>
+-peter-skomorochs-computer:~/AmazonEC2_MPI_scripts pskomoroch$ ./ec2-check-instances.py 
+------ listing instances -----
+-
+-RESERVATION     r-aec420c7      027811143419    default
+-INSTANCE        i-ab41a6c2      ami-3e836657    domU-12-31-33-00-02-5A.usma1.compute.amazonaws.com      running
+-INSTANCE        i-aa41a6c3      ami-3e836657    domU-12-31-33-00-01-E3.usma1.compute.amazonaws.com      running
+-INSTANCE        i-ad41a6c4      ami-3e836657    domU-12-31-33-00-03-AA.usma1.compute.amazonaws.com      running
+-INSTANCE        i-ac41a6c5      ami-3e836657    domU-12-31-33-00-04-19.usma1.compute.amazonaws.com      running
+-INSTANCE        i-af41a6c6      ami-3e836657    domU-12-31-33-00-03-E3.usma1.compute.amazonaws.com      running
+-</code></pre>
+-
+-
+-
+-
+-<h2 id="ConfiguringMPI">Cluster Configuration and Booting MPI</h2>
+-
+-
+-<p>Run '''ec2-mpi-config.py''' to configure MPI on the nodes, this will take a minute or two depending on the number of nodes.</p>
+-
+-<pre><code>
+-peter-skomorochs-computer:~/AmazonEC2_MPI_scripts pskomoroch$ ./ec2-mpi-config.py 
+-
+----- MPI Cluster Details ----
+-Numer of nodes = 5
+-Instance= i-ab41a6c2 hostname= domU-12-31-33-00-02-5A.usma1.compute.amazonaws.com state= running
+-Instance= i-aa41a6c3 hostname= domU-12-31-33-00-01-E3.usma1.compute.amazonaws.com state= running
+-Instance= i-ad41a6c4 hostname= domU-12-31-33-00-03-AA.usma1.compute.amazonaws.com state= running
+-Instance= i-ac41a6c5 hostname= domU-12-31-33-00-04-19.usma1.compute.amazonaws.com state= running
+-Instance= i-af41a6c6 hostname= domU-12-31-33-00-03-E3.usma1.compute.amazonaws.com state= running
+-
+-The master node is ec2-72-44-46-78.z-2.compute-1.amazonaws.com 
+-
+-
+-...<snip> ...
+-
+-Configuration complete, ssh into the master node as lamuser and boot the cluster:
+-$ ssh lamuser@ec2-72-44-46-78.z-2.compute-1.amazonaws.com 
+-&gt; mpdboot -n 5 -f mpd.hosts 
+-&gt; mpdtrace
+-</snip></code></pre>
+-
+-
+-<p>Login to the master node, boot the MPI cluster, and test the connectivity:</p>
+-
+-<pre><code>
+-
+-peter-skomorochs-computer:~/AmazonEC2_MPI_scripts pskomoroch$ ssh lamuser@ec2-72-44-46-78.z-2.compute-1.amazonaws.com 
+-
+-
+-
+-Sample Fedora Core 6 + MPICH2 + Numpy/PyMPI compute node image 
+-
+-http://www.datawrangling.com/on-demand-mpi-cluster-with-python-and-ec2-part-1-of-3
+-
+----- Modified From Marcin's Cool Images: Cool Fedora Core 6 Base + Updates Image v1.0 ---
+-
+-see http://developer.amazonwebservices.com/connect/entry.jspa?externalID=554&amp;categoryID=101
+-
+-
+-Like Marcin's image, standard disclaimer applies, use as you please...
+-
+-Amazon EC2 MPI Compute Node Image
+-Copyright (c) 2006 DataWrangling. All rights reserved.
+-
+-Redistribution and use in source and binary forms, with or without
+-modification, are permitted provided that the following conditions are
+-met:
+-
+-    * Redistributions of source code must retain the above copyright
+-       notice, this list of conditions and the following disclaimer.
+-
+-    * Redistributions in binary form must reproduce the above
+-       copyright notice, this list of conditions and the following
+-       disclaimer in the documentation and/or other materials provided
+-       with the distribution.
+-
+-    * Neither the name of the DataWrangling nor the names of any
+-       contributors may be used to endorse or promote products derived
+-       from this software without specific prior written permission.
+-
+-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-[lamuser@domU-12-31-33-00-02-5A ~]$ 
+-[lamuser@domU-12-31-33-00-02-5A ~]$ mpdboot -n 5 -f mpd.hosts 
+-[lamuser@domU-12-31-33-00-02-5A ~]$ mpdtrace
+-domU-12-31-33-00-02-5A
+-domU-12-31-33-00-01-E3
+-domU-12-31-33-00-03-E3
+-domU-12-31-33-00-03-AA
+-domU-12-31-33-00-04-19
+-
+-</code></pre>
+-
+-
+-<p>The results of the mpdtrace command show we have an MPI cluster 
+-running on 5 nodes. In the next section, we will verify that we can run 
+-some basic MPI tasks.  For more detailed information on these mpi 
+-commands (and MPI in general), see the <a href="http://www-unix.mcs.anl.gov/mpi/mpich2/index.htm#docs">MPICH2 documentation</a>.</p>
+-
+-<h2 id="TestingtheMPICluster">Testing the MPI Cluster</h2>
+-
+-
+-<p>Next we execute a sample C program bundled with MPICH2 which estimates pi using the cluster:</p>
+-
+-<pre><code>
+-[lamuser@domU-12-31-33-00-02-5A ~]$  mpiexec -n 5 /usr/local/src/mpich2-1.0.5/examples/cpi
+-Process 0 of 5 is on domU-12-31-33-00-02-5A
+-Process 1 of 5 is on domU-12-31-33-00-01-E3
+-Process 2 of 5 is on domU-12-31-33-00-03-E3
+-Process 3 of 5 is on domU-12-31-33-00-03-AA
+-Process 4 of 5 is on domU-12-31-33-00-04-19
+-pi is approximately 3.1415926544231230, Error is 0.0000000008333298
+-wall clock time = 0.007539
+-
+-</code></pre>
+-
+-
+-<p>Test the message travel time for the ring of nodes you just created:</p>
+-
+-<pre><code>
+-[lamuser@domU-12-31-33-00-02-5A ~]$ mpdringtest 100
+-time for 100 loops = 0.14577794075 seconds
+-
+-</code></pre>
+-
+-
+-<p>Verify that the cluster can run a multiprocess job:</p>
+-
+-<pre><code>
+-[lamuser@domU-12-31-33-00-02-5A ~]$ mpiexec -l -n 5 hostname
+-3: domU-12-31-33-00-03-AA
+-0: domU-12-31-33-00-02-5A
+-1: domU-12-31-33-00-01-E3
+-4: domU-12-31-33-00-04-19
+-2: domU-12-31-33-00-03-E3
+-
+-</code></pre>
+-
+-
+-
+-
+-<h2 id="TestingpyMPI">Testing PyMPI</h2>
+-
+-
+-<p>Lets verify that the <a href="http://pympi.sourceforge.net/">PyMPI</a> install is working with our running cluster of 5 nodes. Execute the following on the master node:</p>
+-
+-<pre><code>
+-[lamuser@domU-12-31-33-00-02-5A ~]$ mpirun -np 5 pyMPI /usr/local/src/pyMPI-2.4b2/examples/fractal.py
+-Starting computation (groan)
+-
+-process 1 done with computation!!
+-process 3 done with computation!!
+-process 4 done with computation!!
+-process 2 done with computation!!
+-process 0 done with computation!!
+-Header length is  54
+-BMP size is  (400, 400)
+-Data length is  480000
+-[lamuser@domU-12-31-33-00-02-5A ~]$ ls
+-hosts  id_rsa.pub  mpd.hosts  output.bmp
+-
+-</code></pre>
+-
+-
+-<p>This produced the following fractal image (output.bmp):</p>
+-
+-<p><img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/output.dms" alt="output.bmp"></p>
+-
+-<p>We will show some more examples using PyMPI in the next post.</p>
+-
+-<h2 id="ChangingtheClusterSize">Changing the Cluster Size</h2>
+-
+-
+-<p>If we want to modify the number of nodes in the cluster we first need to kill the mpi cluster from the master node as follows:</p>
+-
+-<pre><code>
+-[lamuser@domU-12-31-33-00-02-5A ~]$ mpdallexit
+-[lamuser@domU-12-31-33-00-02-5A ~]$ mpdcleanup
+-</code></pre>
+-
+-
+-<p>Once this is done, you can start additional instances of the public 
+-AMI from your local machine, then re-run the ec2-mpi-config.py script 
+-and reboot the cluster.</p>
+-
+-<h2 id="ClusterShutdown">Cluster Shutdown</h2>
+-
+-
+-<p>Run '''ec2-stop-cluster.py''' to stop all EC2 MPI nodes.  If you just want to stop the slave nodes, run ec2-stop-slaves.py</p>
+-
+-<pre><code>
+-
+-peter-skomorochs-computer:~/AmazonEC2_MPI_scripts pskomoroch$ ./ec2-stop-cluster.py
+-This will stop all your EC2 MPI images, are you sure (yes/no)? yes
+------ listing instances -----
+-RESERVATION     r-aec420c7      027811143419    default
+-INSTANCE        i-ab41a6c2      ami-3e836657    domU-12-31-33-00-02-5A.usma1.compute.amazonaws.com      running
+-INSTANCE        i-aa41a6c3      ami-3e836657    domU-12-31-33-00-01-E3.usma1.compute.amazonaws.com      running
+-INSTANCE        i-ad41a6c4      ami-3e836657    domU-12-31-33-00-03-AA.usma1.compute.amazonaws.com      running
+-INSTANCE        i-ac41a6c5      ami-3e836657    domU-12-31-33-00-04-19.usma1.compute.amazonaws.com      running
+-INSTANCE        i-af41a6c6      ami-3e836657    domU-12-31-33-00-03-E3.usma1.compute.amazonaws.com      running
+-
+----- Stopping instance Id's ----
+-Stoping Instance Id = i-ab41a6c2 
+-Stoping Instance Id = i-aa41a6c3 
+-Stoping Instance Id = i-ad41a6c4 
+-Stoping Instance Id = i-ac41a6c5 
+-Stoping Instance Id = i-af41a6c6 
+-
+-Waiting for shutdown ....
+------ listing new state of instances -----
+-RESERVATION     r-aec420c7      027811143419    default
+-INSTANCE        i-ab41a6c2      ami-3e836657    domU-12-31-33-00-02-5A.usma1.compute.amazonaws.com      shutting-down
+-INSTANCE        i-aa41a6c3      ami-3e836657    domU-12-31-33-00-01-E3.usma1.compute.amazonaws.com      shutting-down
+-INSTANCE        i-ad41a6c4      ami-3e836657    domU-12-31-33-00-03-AA.usma1.compute.amazonaws.com      shutting-down
+-INSTANCE        i-ac41a6c5      ami-3e836657    domU-12-31-33-00-04-19.usma1.compute.amazonaws.com      shutting-down
+-INSTANCE        i-af41a6c6      ami-3e836657    domU-12-31-33-00-03-E3.usma1.compute.amazonaws.com      shutting-down
+-
+-</code></pre>
+-
+-
+-</div>
+-
+-<div id="related">
+-  <h2>Related Posts</h2>
+-  <ul class="posts">
+-    
+-      <li><span>17 Mar 2007</span> Â» <a href="http://www.datawrangling.com/on-demand-mpi-cluster-with-python-and-ec2-part-1-of-3">On-Demand MPI Cluster with Python and EC2 (part 1 of 3)</a></li>
+-    
+-      <li><span>24 Aug 2009</span> Â» <a href="http://www.datawrangling.com/how-flightcaster-squeezes-predictions-from-flight-data">How FlightCaster Squeezes Predictions from Flight Data</a></li>
+-    
+-      <li><span>17 Jan 2008</span> Â» <a href="http://www.datawrangling.com/some-datasets-available-on-the-web">Some Datasets Available on the Web</a></li>
+-    
+-  </ul>
+-</div>
+-
+-<!-- Disqus Comments -->
+-<div id="disqus_thread"><div style="display: none;" id="dsq-content-stub"><img alt="DISQUS" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAARCAYAAAH4YIFjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABwdJREFUeNpi/P//PwMhwAIiGBkZGeK6V8JVh9rqdfrc0ixnEDb+wPD2rAAjMSYBBBBRisDWwKxCthIE/q8Q+A8yhCiTAAIIrCi+ZxVMZSAQr19UGs4IMxWd/X8Rw3/GOKDhW43fgzwF1hX7n5EJ2dSp2QFNUKcZwJ31/78CkvPBGkGGMXidSUTWCxBAxAUAEQAcJzCvIXsDBPwsNBU2nbj+AMpdsFA8PAHsLZj3QC5D9hrIAEtN+RMwAzRkxcB0iK3eQ6iQIRAnoMTE//8CyHwmWHQdv/7QAiZ44/ErMP383acsqNB5iMnPlsFdsUZ6IU3CCCCA4AYBw8kBJgj06gGkmHJAFgPyQV4ExeQEoNgHJHUBQMoAWRzoerBeYHgeQOJ/APIvQPkNUP4EuIdADBAGBRMQOABxQcakdSipHZldNGvL2zWHL8kD1d0HieVN33QYqnc/EAfULNwJVw8KTniQwvjAdPz/SEwKmL1KfC5QjwEQr4e5AyVdA3P4ASCe8O3nb1whmtib6r3IXlfpATBEFbpWH9ygJSdmBtXrOHPbyZWPXn1AqOZRwDSBS+YHo82SOQwiZnYMoS+EGC42nGdYzBiAnKpgGAbeA3ECkjwYQNnzH758///6o5cgofVIagy+/vgFF//y/ecHJLn1/18AA+/teZBcPZL4eSTxBJg7AAKIaomRmpkeV2IG5UcDpMSsAM2zF4BiG9DUFaCLQxPwBWCC/QBkg/QqoCVuEN4ASuDIaWc/DIMSItBxH0GCrkaqCVBxWO4BJWBQcK/PmrL+I1S8H0i9h4mjFfX7GTRyIdEuHzIfZtb/Zdw3oGyQnvP/d9pNgRc+MLCwJMxxWk7AI6Ar+YCWVSLLyYkJzIYlZqC6RGBhbg/lFwDlQHoDgfgALLfhjY8/X9XhpWPs/wWM7odyMBwDylU8nOzyILYIH3cZslxBgM0cKHM+MOTAGCZnri7XCdS7ASgGLsc/fPlug9cxlrO/wUvYxYwJwCgLwHAMcrVlqCJ9BVlchJ+7EhRyQPwAyGaAFnhgsOPMzUhQroLVAU76yp/gGp/vtQbTr45pwMWOp1oDQ6QQiGEi6+EJGLmah0YJQ6CVtu3ivecKYHIpE9b8BPqcDSnawHSSu8m3eTvPyAHlzsPkDl25/wXMYAOq+XgtBFwIfn/GwCAOSq8HYCGCsNh8+hvksgYZIJchDkjljAKoHAKVJ6ByBbnmA5XESOL1oFIZSc9/cJkC1IukPuH/z/cw8fswdwyqcgYgwAaVYwYbQEnDSI1LbGABEDcCC1lYS4yhfO42n+fvPm9GKsAZkfJDA7RcwwYmQM1CbpUUADU3AB3AjxJ7wFwAFGsAqp2A0mBDahww8Gv4Mvrf2AKXWyMzgeHbk3wwh5X/DGPkR1OoHlCmn49cGCABkL8SgZn8ANbAQQaV4ZBK6yGwgbDr3G2GNx+/gkqShMTe1V///vsnA/KYjoKECjBwMPQCW0EngOrNQWxbHQWGFA8zBlAj5eztpwwbjl9lyPG1DFOUEAIFDqxJB6ksoC1ZN2NVsDm7zt4GNUhBgdUPrXwckWtQOJB0VQE2XRF8UQt9hodrIGw+FaDcWVjAwAshhsD7kAbPO2Dr78ZEBoZfHxQYHNYbwEogvIGjKSfOiNysBpaEL/acv8MODBhuUX7u00BhVVx6DZWlxHcDAxQEDl95AMZQAGqHLlSSFIanAnZWll0/f/8Bs2OcDB+5GavJVyGZtevsrYdL9p2XQ6rZGcnKI54nZRj2uoMCAVr4K8JkQAKgJsdEYN12AbmYYSGqYGJk/NC8bO91WHKUFRXgwace6ElDIF4PjHWHc3eeMZy98xSU8mB1mwE0FSQCU8ECZiZGVpi+yw9eLIfVlUyMjIf+/f/Pu/bIlTtIdSX5hauo+RagxxMZfr2fwHB3IT/Dy4MMDI/BzTABaP2aAGzmgPpN4gQDB1pmgIA+EAfcfvoGXl/mB1hXFuBxCLDs6oc26kBJZiIoxShLCqs9e/tp+vdfv8ENB08Tdf9FwHKsMtxxTfvK/SGgbHfx3vNyoL2g7DjR30r74vqjV2yA6lXgbnI2WtoH4yhEfGF4sAISSTcm9wOzDcidoE6lPTBLwRuyDMoJ5+DZagnLJIb/f3mh5edGcKoRs+5neHUUUgZxiIrhrK2wFchc7KwMmsByANjiAZUfoGzhCEpJIDlQowOYffqRC2RQS+f1x68HNx6/ygcqY9A7RMZAc5LcTS/zcLLZwcwB1evAzs/8pfsvwDu9yOplgRECzF4M8a7Gryw05NRB+sDtiC/3HjKcKeaDpgAEADVmNIDlsX4DqFPmCOvvMNxdkAAuX95dQFUPKnv06kEBmQgNOLpV5QbQpAsrcz4QUC+AVJsgqxcgoNcBqQy5QIIdONUDALcn6c0dtMJ9AAAAAElFTkSuQmCC" height="17" width="71"><img alt="..." src="data:image/gif;base64,R0lGODlhEAALAPQAAP///z2LqeLt8dvp7u7090GNqz2LqV+fuJ/F1IW2ycrf51aatHWswaXJ14i4ys3h6FmctUCMqniuw+vz9eHs8fb5+meku+Tu8vT4+cfd5bbT3tbm7PH2+AAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA" style="margin: 0pt 0pt 3px 5px;" height="11" width="16"></div><div class="clearfix" style="display: block;" id="dsq-content">      <div id="dsq-global-toolbar" class="dsq-clearfix">        <ul class="dsq-global-toolbar-right dsq-clearfix">                            <li class="dsq-community-box">                <a href="#" class="dsq-toolbar-item dsq-tt" onclick="DISQUS.dtpl.actions.fire('community.show'); return false" title="Expand Community Box"><span class="dsq-toolbar-icon"></span></a>            </li>                            <li class="dsq-global-toolbar-dropdown-container">                    <div id="dsq-toolbar-dropdown">    <a href="#" class="dsq-toolbar-logo dsq-toolbar-item dsq-clearfix"><span class="dsq-toolbar-icon">Disqus</span></a>    <div id="dsq-toolbar-dropdown-wrap" style="display: none">      <ul class="dsq-clearfix">                    <li class="dsq-login-link"><a href="#" onclick="DISQUS.dtpl.actions.fire('auth.login'); return false"><span class="dsq-toolbar-icon"></span><span class="dsq-toolbar-label">Login</span></a></li>                    <li class="dsq-about-link"><a href="http://disqus.com/" target="_blank"><span class="dsq-toolbar-icon"></span><span class="dsq-toolbar-label">About Disqus</span></a></li>      </ul>    </div>  </div>            </li>        </ul>                <ul class="dsq-global-toolbar-left dsq-clearfix">            <li class="dsq-like-thread">                <a href="#" id="dsq-like-thread-button" class="dsq-toolbar-item dsq-clearfix  dsq-tt" onclick="DISQUS.dtpl.actions.fire('thread.vote', 1); return false;" title="I like this page">                    <span class="dsq-toolbar-icon"></span>                    <span class="dsq-toolbar-label">Like</span>                </a>            </li>            <li class="dsq-dislike-thread">                <a href="#" id="dsq-dislike-thread-button" class="dsq-toolbar-item dsq-clearfix  dsq-tt" onclick="DISQUS.dtpl.actions.fire('thread.vote', -1); return false" title="I don't like this page">                    <span class="dsq-toolbar-icon">Dislike</span>                </a>            </li>            <li class="dsq-like-panel">                <ul class="dsq-like-faces dsq-clearfix">                        <li class="dsq-like-activity">    </li>                </ul>            </li>        </ul>            </div>    <div id="dsq-like-tooltip">      <div id="dsq-share-step-1" class="dsq-share-step">        <h3>Glad you liked it. Would you like to share?</h3>        <p class="dsq-tooltip-checkbox"><input id="dsq-share-thread-facebook" value="Facebook" type="checkbox"><label for="dsq-share-thread-facebook"><span class="dsq-facebook">Facebook</span></label></p>        <p class="dsq-tooltip-checkbox"><input id="dsq-share-thread-twitter" value="Twitter" type="checkbox"><label for="dsq-share-thread-twitter"><span class="dsq-twitter">Twitter</span></label></p>        <ul id="dsq-tooltip-actions">                        <li><a href="#" onclick="DISQUS.dtpl.actions.fire('thread.share.send'); return false" class="dsq-primary-action">Share</a></li>                    <li><a href="#" onclick="DISQUS.dtpl.actions.fire('thread.share.cancel'); return false" class="dsq-secondary-action">No thanks</a></li>        </ul>      </div>      <div id="dsq-share-step-2" class="dsq-share-step" style="display:none !important">        <p>Sharing this page â¦</p>      </div>      <div id="dsq-share-step-3" class="dsq-share-step" style="display:none !important">        <p>Thanks! <a href="#" class="dsq-tooltip-decline" onclick="DISQUS.dtpl.actions.fire('thread.share.cancel'); return false">Close</a></p>      </div>    </div>                                <div class="dsq-reply " id="dsq-reply">          <div id="dsq-account-dropdown">                  <a href="#" onclick="DISQUS.dtpl.actions.fire('auth.login'); return false;">Login</a>              </div>      <h3>Add New Comment</h3>        <div class="dsq-avatar">              <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png">          </div>    <div class="dsq-textarea dsq-textarea-reply">      <div class="dsq-textarea-background">        <div style="height: auto;" class="dsq-textarea-wrapper">          <!-- filled dynamically -->        <iframe style="height: 58px;" src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/reply.html" id="easyXDM_DISQUS_net_default5938_provider" name="easyXDM_DISQUS_net_default5938_provider" frameborder="0" scrolling="no"></iframe></div>                  <div id="dsq-media-preview" class="dsq-media-preview" style="display:none">          </div>                <div class="dsq-post-tools">          <ul>            <li class="dsq-post-as">                                <button type="button" class="dsq-button" onclick="DISQUS.dtpl.actions.fire('comments.validate', null, this);">                    Post as â¦                  </button>                          </li>                          <li class="dsq-attach-media">                <div class="dsq-attach-media-container">                  <span>Image</span>                  <!-- filled dynamically -->                <iframe src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/upload.html" id="easyXDM_DISQUS_net_default5939_provider" name="easyXDM_DISQUS_net_default5939_provider" frameborder="0" scrolling="no"></iframe></div>              </li>                        <li class="dsq-share-on dsq-clearfix">                            </li>          </ul>        </div>      </div>    </div>  </div>                              <div id="dsq-sort-by">    <select id="dsq-sort-select" onchange="DISQUS.dtpl.actions.fire('thread.sort', this.value);">              <option value="hot" selected="selected">          Sort by popular now        </option>              <option value="best">          Sort by best rating        </option>              <option value="newest">          Sort by newest first        </option>              <option value="oldest">          Sort by oldest first        </option>          </select>  </div>      <h3>            Showing <span id="dsq-num-posts">69</span> comments        </h3>        <ul id="dsq-comments">            <li id="comment-67194196">  </li><li id="dsq-comment-67194196" data-dsq-comment-id="67194196" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Aarthi 8288's profile">      <a href="http://disqus.com/guest/f0576509b100bb26bef551d1d0b491f7/" onclick="DISQUS.dtpl.actions.fire('profile.show', 67194196, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-67194196" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Aarthi 8288</span>                <span class="dsq-collapsed-count">                      3 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 67194196); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 67194196); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-67194196">                <div class="dsq-comment-text" id="dsq-comment-text-67194196">        <p>Hi,</p>
+-
+-<p>I was trying to launch a cluster using the given scripts. I got the following error :</p>
+-
+-<p># ./<a href="http://ec2-start-cluster.py/" rel="nofollow">ec2-start-cluster.py</a> <br>Traceback (most recent call last):<br>  File "./<a href="http://ec2-start-cluster.py/" rel="nofollow">ec2-start-cluster.py</a>", line 23, in &lt;module&gt;<br>    import EC2<br>ImportError: No module named EC2</p>
+-
+-<p>Can anyone help me out ?<br>&lt;/module&gt;</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-67194196"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-67194196">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,67194196); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',67194196, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-67194196" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 67194196);" title="Link to comment by Aarthi 8288">          2 years ago      </a></li>            <li>          <a href="#" id="dsq-comment-like-count-67194196" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 67194196); return false">1          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 67194196, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-67194196"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-67194196"></li>            <li id="comment-68258537">  </li><li id="dsq-comment-68258537" data-dsq-comment-id="68258537" class="dsq-comment dsq-clearfix                        " style="margin-left:46px;">    <div class="dsq-avatar dsq-tt" title="Expand Adeel Jan's profile">      <a href="http://disqus.com/guest/755e68a77d0b700b274027f86017d580/" onclick="DISQUS.dtpl.actions.fire('profile.show', 68258537, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-68258537" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Adeel Jan</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 68258537); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 68258537); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-68258537">                <div class="dsq-comment-text" id="dsq-comment-text-68258537">        <p>I think you need to get python library :)</p>
+-
+-<p>Adeel Jan.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-68258537"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-68258537">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,68258537); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',68258537, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-68258537" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 68258537);" title="Link to comment by Adeel Jan">          2 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 67194196); return false" href="#comment-67194196" title="Jump to comment">            in reply to Aarthi 8288          </a>        </li>            <li>          <a href="#" id="dsq-comment-like-count-68258537" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 68258537); return false">2          Likes      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 68258537, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-68258537"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-68258537"></li>            <li id="comment-316963998">  </li><li id="dsq-comment-316963998" data-dsq-comment-id="316963998" class="dsq-comment dsq-clearfix                        " style="margin-left:46px;">    <div class="dsq-avatar dsq-tt" title="Expand Lukearron's profile">      <a href="http://disqus.com/guest/b0ace4c8ac6841adf9bbb2c6a911f85a/" onclick="DISQUS.dtpl.actions.fire('profile.show', 316963998, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-316963998" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Lukearron</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 316963998); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 316963998); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-316963998">                <div class="dsq-comment-text" id="dsq-comment-text-316963998">        <p>Did
+- anyone solve this problem? &nbsp;I had the same problem, and I 
+-downloaded and unpacked the libraries, but perhaps the python library 
+-needs to be _placed_ somewhere?</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-316963998"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-316963998">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,316963998); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',316963998, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-316963998" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 316963998);" title="Link to comment by Lukearron">          1 year ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 67194196); return false" href="#comment-67194196" title="Jump to comment">            in reply to Aarthi 8288          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-316963998" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 316963998); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 316963998, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-316963998"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-316963998"></li>            <li id="comment-250815538">  </li><li id="dsq-comment-250815538" data-dsq-comment-id="250815538" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Easwar's profile">      <a href="http://disqus.com/guest/6a22b4cb802cd0fc3459843d5531b09c/" onclick="DISQUS.dtpl.actions.fire('profile.show', 250815538, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-250815538" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Easwar</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 250815538); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 250815538); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-250815538">                <div class="dsq-comment-text" id="dsq-comment-text-250815538">        <p>Dear Sir,</p>
+-
+-<p>&nbsp; I am trying to use MPI for <br>running Data parallel 
+-applications. I read this post and on following up, I have few queries. 
+-Would be great, if I can get answers to them. </p>
+-
+-<p>a) As of now, I am choosing AMI using the browser interface of 
+-Amazon. You have uploaded two AMI's one for master (ami-e813f681) and 
+-another for slave (ami-eb13f682).<br> When I launch an instance, I can only choose one. Which one should I <br>choose ? (Or how should I choose both, in case I need to)&nbsp; ? Do these <br>AMI's has OPEMPI implementation ?</p>
+-
+-<p>b) Secondly, if I launch multiple instances of a Large CPU (say 3 <br>instances),
+- I would be get many nodes (say m nodes per one instance, hence i would 
+-have m*3 nodes). Can I communicate between nodes <br>of different instances just as we normally do in MPI ?</p>
+-
+-<p>c) Are you aware any MPI image with ubuntu ?</p>
+-
+-<p>d) I am using browser, since I have to connect through proxy. How/Where <br>do set proxy connections, if I need to start cluster using your python <br>scripts ?</p>
+-
+-<p>Easwar</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-250815538"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-250815538">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,250815538); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',250815538, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-250815538" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 250815538);" title="Link to comment by Easwar">          1 year ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-250815538" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 250815538); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 250815538, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-250815538"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-250815538"></li>            <li id="comment-70898888">  </li><li id="dsq-comment-70898888" data-dsq-comment-id="70898888" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Johnliu's profile">      <a href="http://disqus.com/guest/8b2c7a6f55f9dae1487bea3c5d94758f/" onclick="DISQUS.dtpl.actions.fire('profile.show', 70898888, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-70898888" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Johnliu</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 70898888); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 70898888); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-70898888">                <div class="dsq-comment-text" id="dsq-comment-text-70898888">        <p>Hi,</p>
+-
+-<p>Does anyone have this running under cygwin in windows?</p>
+-
+-<p>If so, can you please post your code for <a href="http://ec2-mpi-config.py/?" rel="nofollow">ec2-mpi-config.py?</a> I tried using the current file but get lots of errors.</p>
+-
+-<p>Thanks,<br>John</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-70898888"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-70898888">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,70898888); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',70898888, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-70898888" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 70898888);" title="Link to comment by Johnliu">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-70898888" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 70898888); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 70898888, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-70898888"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-70898888"></li>            <li id="comment-69997433">  </li><li id="dsq-comment-69997433" data-dsq-comment-id="69997433" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Supriyamunshaw's profile">      <a href="http://disqus.com/guest/68f6f02fdffed7fa531101d399bda3d6/" onclick="DISQUS.dtpl.actions.fire('profile.show', 69997433, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-69997433" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Supriyamunshaw</span>                <span class="dsq-collapsed-count">                      2 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 69997433); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 69997433); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-69997433">                <div class="dsq-comment-text" id="dsq-comment-text-69997433">        <p>I have sucessfully connected to 5 nodes but am having trouble with the <a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a> script. When I run it, I repeatedly get the following:</p>
+-
+-<p>---- MPI Cluster Details ----<br>Numer of nodes = 5<br>Instance= i-8d2949e7 external_name = <a href="http://ec2-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">ec2-184-72-183-113.compute-1.a...</a> hostname= ip-10-212-239-33.ec2.internal state= <br>Instance= i-832949e9 external_name = <a href="http://ec2-174-129-138-43.compute-1.amazonaws.com/" rel="nofollow">ec2-174-129-138-43.compute-1.a...</a> hostname= domU-12-31-39-10-6C-13.compute-1.internal state= <br>Instance= i-812949eb external_name = <a href="http://ec2-184-72-141-241.compute-1.amazonaws.com/" rel="nofollow">ec2-184-72-141-241.compute-1.a...</a> hostname= domU-12-31-39-0B-00-F8.compute-1.internal state= <br>Instance= i-872949ed external_name = <a href="http://ec2-174-129-131-171.compute-1.amazonaws.com/" rel="nofollow">ec2-174-129-131-171.compute-1....</a> hostname= domU-12-31-39-09-C4-24.compute-1.internal state= <br>Instance= i-852949ef external_name = <a href="http://ec2-174-129-61-151.compute-1.amazonaws.com/" rel="nofollow">ec2-174-129-61-151.compute-1.a...</a> hostname= domU-12-31-39-0C-D8-57.compute-1.internal state= <br>5</p>
+-
+-<p>The master node is <a href="http://ec2-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">ec2-184-72-183-113.compute-1.a...</a></p>
+-
+-<p>Writing out mpd.hosts file</p>
+-
+-<p>scp -i id_rsa-gsg-keypair -o "StrictHostKeyChecking no" id_rsa-gsg-keypair root@ec2<a href="http://-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">-184-72-183-113.compute-1.amaz...</a>:~/.ssh/id_rsa-gsg-keypair </p>
+-
+-<p>ssh: connect to host <a href="http://ec2-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">ec2-184-72-183-113.compute-1.a...</a> port 22: Connection timed out<br>lost connection</p>
+-
+-<p>ssh -o "StrictHostKeyChecking no" root@ec2<a href="http://-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">-184-72-183-113.compute-1.amaz...</a> "touch .ssh/authorized_keys"  </p>
+-
+-<p>ssh: connect to host <a href="http://ec2-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">ec2-184-72-183-113.compute-1.a...</a> port 22: Connection timed out</p>
+-
+-<p>ssh -o "StrictHostKeyChecking no" root@ec2<a href="http://-184-72-183-113.compute-1.amazonaws.com/" rel="nofollow">-184-72-183-113.compute-1.amaz...</a> "cp -r .ssh /home/lamuser/"  </p>
+-
+-<p>It seems I'm having a connection problem. Does anyone what I can do about this?</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-69997433"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-69997433">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,69997433); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',69997433, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-69997433" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 69997433);" title="Link to comment by Supriyamunshaw">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-69997433" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 69997433); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 69997433, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-69997433"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-69997433"></li>            <li id="comment-70014559">  </li><li id="dsq-comment-70014559" data-dsq-comment-id="70014559" class="dsq-comment dsq-clearfix                        " style="margin-left:46px;">    <div class="dsq-avatar dsq-tt" title="Expand Supriyamunshaw's profile">      <a href="http://disqus.com/guest/68f6f02fdffed7fa531101d399bda3d6/" onclick="DISQUS.dtpl.actions.fire('profile.show', 70014559, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-70014559" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Supriyamunshaw</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 70014559); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 70014559); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-70014559">                <div class="dsq-comment-text" id="dsq-comment-text-70014559">        <p>ok, i figured it out. the connection was being made through my default security group where port 22 was not open.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-70014559"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-70014559">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,70014559); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',70014559, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-70014559" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 70014559);" title="Link to comment by Supriyamunshaw">          2 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 69997433); return false" href="#comment-69997433" title="Jump to comment">            in reply to Supriyamunshaw          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-70014559" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 70014559); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 70014559, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-70014559"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-70014559"></li>            <li id="comment-69464830">  </li><li id="dsq-comment-69464830" data-dsq-comment-id="69464830" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Henrywang41's profile">      <a href="http://disqus.com/guest/a751cbf7143645aaf9032d85af7a0208/" onclick="DISQUS.dtpl.actions.fire('profile.show', 69464830, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-69464830" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Henrywang41</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 69464830); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 69464830); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-69464830">                <div class="dsq-comment-text" id="dsq-comment-text-69464830">        <p>Can someone please help? <a href="http://mc2-mpi-config.py/" rel="nofollow">mc2-mpi-config.py</a> is giving the following error:</p>
+-
+-<p>---- MPI Cluster Details ----<br>Numer of nodes = 2<br>Instance= i-bf90f5d5 external_name = <a href="http://ec2-184-73-36-216.compute-1.amazonaws.com/" rel="nofollow">ec2-184-73-36-216.compute-1.am...</a> hostname= ip-10-242-1<br>18-239.ec2.internal state= running<br>Instance= i-bd90f5d7 external_name = <a href="http://ec2-174-129-77-216.compute-1.amazonaws.com/" rel="nofollow">ec2-174-129-77-216.compute-1.a...</a> hostname= ip-10-242-<br>117-139.ec2.internal state= running</p>
+-
+-<p>The master node is <a href="http://ec2-184-73-36-216.compute-1.amazonaws.com/" rel="nofollow">ec2-184-73-36-216.compute-1.am...</a></p>
+-
+-<p>Writing out mpd.hosts file<br>Traceback (most recent call last):<br>  File "<a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a>", line 210, in &lt;module&gt;<br>    sys.exit(main())<br>  File "<a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a>", line 65, in main<br>    configure()<br>  File "<a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a>", line 151, in configure<br>    rsakeys = open(homedir + "/.ssh/id_rsa", 'r').read()<br>IOError: [Errno 2] No such file or directory: 'C:\\Documents and Settings\\Yunzhi Ma/.ssh/id_rsa'</p>
+-
+-<p>Could this possibly be due to anything about chunk and parsed_response? I printed out parsedresponse:</p>
+-
+-<p> [['RESERVATION', 'r-30733b5b', '219669225938', 'default'], ['INSTANCE', 'i-bf90f5d5', 'ami-e813f681'<br>, '<a href="http://ec2-184-73-36-216.compute-1.amazonaws.com/" rel="nofollow">ec2-184-73-36-216.compute-1.am...</a>', 'ip-10-242-118-239.ec2.internal', 'running'], ['RESER<br>VATION', 'r-36733b5d', '219669225938', 'default'], ['INSTANCE', 'i-bd90f5d7', 'ami-eb13f682', 'ec2-1<br><a href="http://74-129-77-216.compute-1.amazonaws.com/" rel="nofollow">74-129-77-216.compute-1.amazon...</a>', 'ip-10-242-117-139.ec2.internal', 'running']]</p>
+-
+-<p>Thanks so much,<br>Henry&lt;/module&gt;</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-69464830"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-69464830">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,69464830); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',69464830, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-69464830" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 69464830);" title="Link to comment by Henrywang41">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-69464830" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 69464830); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 69464830, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-69464830"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-69464830"></li>            <li id="comment-69256901">  </li><li id="dsq-comment-69256901" data-dsq-comment-id="69256901" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Henrywang41's profile">      <a href="http://disqus.com/guest/a751cbf7143645aaf9032d85af7a0208/" onclick="DISQUS.dtpl.actions.fire('profile.show', 69256901, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-69256901" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Henrywang41</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 69256901); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 69256901); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-69256901">                <div class="dsq-comment-text" id="dsq-comment-text-69256901">        <p>Hi,</p>
+-
+-<p>Amazon just recently (last month) released a cloud computing instance (<a href="http://developer.amazonwebservices.com/connect/ann.jspa?annID=718%29" rel="nofollow">http://developer.amazonwebserv...</a></p>
+-
+-<p>Does the code and what you describe here work for this new released 
+-instance for HPC? (It's CentOS HVM AMI, ami-7ea24a17 under U.S. East)</p>
+-
+-<p>Thanks,</p>
+-
+-<p>Henry</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-69256901"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-69256901">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,69256901); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',69256901, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-69256901" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 69256901);" title="Link to comment by Henrywang41">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-69256901" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 69256901); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 69256901, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-69256901"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-69256901"></li>            <li id="comment-69254750">  </li><li id="dsq-comment-69254750" data-dsq-comment-id="69254750" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Henrywang41's profile">      <a href="http://disqus.com/guest/a751cbf7143645aaf9032d85af7a0208/" onclick="DISQUS.dtpl.actions.fire('profile.show', 69254750, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-69254750" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Henrywang41</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 69254750); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 69254750); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-69254750">                <div class="dsq-comment-text" id="dsq-comment-text-69254750">        <p>Hi,</p>
+-
+-<p>Is Elasticwulf and MPI essentially the same thing? I'm trying to run 
+-some high performance computing using an Amazon EC2 cluster.</p>
+-
+-<p>Also, is boto necessary to set up a cluster on amazon EC2? What's the difference between boto and Elasticwulf?</p>
+-
+-<p>Thanks,</p>
+-
+-<p>Henry</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-69254750"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-69254750">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,69254750); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',69254750, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-69254750" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 69254750);" title="Link to comment by Henrywang41">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-69254750" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 69254750); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 69254750, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-69254750"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-69254750"></li>            <li id="comment-69243905">  </li><li id="dsq-comment-69243905" data-dsq-comment-id="69243905" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Henrywang41's profile">      <a href="http://disqus.com/guest/a751cbf7143645aaf9032d85af7a0208/" onclick="DISQUS.dtpl.actions.fire('profile.show', 69243905, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-69243905" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Henrywang41</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 69243905); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 69243905); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-69243905">                <div class="dsq-comment-text" id="dsq-comment-text-69243905">        <p>Hi,</p>
+-
+-<p>What exactly is the difference between Elasticwulf and MPI? Are they 
+-the same thing? I'm trying to launch a cluster for HPC, which one is 
+-more suitable?</p>
+-
+-<p>Also, is boto necessary too for launching a cluster?</p>
+-
+-<p>Thanks,<br>Henry</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-69243905"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-69243905">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,69243905); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',69243905, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-69243905" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 69243905);" title="Link to comment by Henrywang41">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-69243905" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 69243905); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 69243905, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-69243905"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-69243905"></li>            <li id="comment-65945167">  </li><li id="dsq-comment-65945167" data-dsq-comment-id="65945167" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand bearrito's profile">      <a href="http://disqus.com/guest/fe2e272881aac6b690dd44b665c246e4/" onclick="DISQUS.dtpl.actions.fire('profile.show', 65945167, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-65945167" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">bearrito</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 65945167); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 65945167); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-65945167">                <div class="dsq-comment-text" id="dsq-comment-text-65945167">        <p>Little late on the thread here but would still like some feedback.</p>
+-
+-<p>My issues: </p>
+-
+-<p>1. I was also being prompted for my password. I ended up using the solution that Raghave suggested.</p>
+-
+-<p>2. I am not seeing /usr/local/src/pyMPI-2.4b2/. That directory 
+-doesn't appear to be present. I tried to get around this by copying in <a href="http://fractal.py/" rel="nofollow">fractal.py</a> from my local machine. I end up with the following:</p>
+-
+-<p>mpirun -np 2 pyMPI /home/lamuser/<a href="http://fractal.py/" rel="nofollow">fractal.py</a> <br>pyMPI: can't open file '/home/lamuser/<a href="http://fractal.py/" rel="nofollow">fractal.py</a>': [Errno 2] No such file or directory</p>
+-
+-<p><a href="http://fractal.py/" rel="nofollow">fractal.py</a> is in that directory.</p>
+-
+-<p>Advice?<br></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-65945167"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-65945167">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,65945167); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',65945167, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-65945167" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 65945167);" title="Link to comment by bearrito">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-65945167" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 65945167); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 65945167, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-65945167"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-65945167"></li>            <li id="comment-45550297">  </li><li id="dsq-comment-45550297" data-dsq-comment-id="45550297" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand miccloud's profile">      <a href="http://disqus.com/miccloud/" onclick="DISQUS.dtpl.actions.fire('profile.show', 45550297, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-45550297" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">miccloud</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 45550297); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 45550297); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-45550297">                <div class="dsq-comment-text" id="dsq-comment-text-45550297">        <p>I have a python script that calls a program installed on the master node and slave nodes.<br>Can I run it from the master node and get the results with mpirun?</p>
+-
+-<p>Thanks a lot.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-45550297"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-45550297">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,45550297); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',45550297, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-45550297" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 45550297);" title="Link to comment by miccloud">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-45550297" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 45550297); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 45550297, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-45550297"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-45550297"></li>            <li id="comment-45371085">  </li><li id="dsq-comment-45371085" data-dsq-comment-id="45371085" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand miccloud's profile">      <a href="http://disqus.com/miccloud/" onclick="DISQUS.dtpl.actions.fire('profile.show', 45371085, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-45371085" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">miccloud</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 45371085); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 45371085); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-45371085">                <div class="dsq-comment-text" id="dsq-comment-text-45371085">        <p>Can I execute bash script in a node  with a job?</p>
+-
+-<p>Thanks.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-45371085"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-45371085">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,45371085); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',45371085, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-45371085" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 45371085);" title="Link to comment by miccloud">          2 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-45371085" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 45371085); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 45371085, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-45371085"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-45371085"></li>            <li id="comment-15834770">  </li><li id="dsq-comment-15834770" data-dsq-comment-id="15834770" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Harry's profile">      <a href="http://disqus.com/guest/a693c76dfaa7b34aedef8d18bdcf13e2/" onclick="DISQUS.dtpl.actions.fire('profile.show', 15834770, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-15834770" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Harry</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 15834770); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 15834770); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-15834770">                <div class="dsq-comment-text" id="dsq-comment-text-15834770">        <p>Hello everybody, </p>
+-
+-<p>I had error with Fortran 77 library in AMI ami-e813f681 (Fedora core 6
+- x86- 64 bit) because of two libraries: libf2c or libg2c in the AMI. <br>(....<br>checking for f_exit in -lf2c... no<br>checking for f_exit in -lg2c... no<br>checking for dummy main to link with Fortran 77 libraries... unknown<br>configure: error: linking to Fortran libraries from C fails<br>)</p>
+-
+-<p>Could anybody help me solve the problem? Thanks so much! </p>
+-
+-<p>best regards, </p>
+-
+-<p>Harry<br></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-15834770"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-15834770">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,15834770); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',15834770, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-15834770" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 15834770);" title="Link to comment by Harry">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-15834770" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 15834770); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 15834770, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-15834770"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-15834770"></li>            <li id="comment-11078420">  </li><li id="dsq-comment-11078420" data-dsq-comment-id="11078420" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078420, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078420" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      9 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078420); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078420); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078420">                <div class="dsq-comment-text" id="dsq-comment-text-11078420">        <p></p><p>Jeff,</p><br><p>I'm
+- actually working on a new version of Elasticwulf right now.  Shoot me 
+-an email at pete@datawrangling.com and I'll try to include what you need
+- for Rmpi.  If you have some sample Rmpi code you want to test and that 
+-you don't mind releasing, we can build that into the AMI to ensure 
+-everything you need is installed.</p><br><p>Here are the MPI installs that were included on that Fedora 64 bit image:</p><br><pre># mpich2 <p></p>
+-
+-<p>cd /usr/local/src/<br>wget <a href="http://www.mcs.anl.gov/research/projects/mpich2/downloads/tarballs/mpich2-1.0.6p1.tar.gz" rel="nofollow">http://www.mcs.anl.gov/researc...</a><br>tar -xzvf mpich2-1.0.6p1.tar.gz<br>cd mpich2-1.0.6p1<br>./configure --enable-sharedlibs=gcc --prefix=/usr/local/mpich2<br>make<br>make install</p>
+-
+-<p># openmpi</p>
+-
+-<p>cd /usr/local/src/<br>wget <a href="http://www.open-mpi.org/software/ompi/v1.2/downloads/openmpi-1.2.5.tar.gz" rel="nofollow">http://www.open-mpi.org/softwa...</a><br>#wget <a href="http://www.open-mpi.de/software/ompi/v1.2/downloads/openmpi-1.2.5.tar.gz" rel="nofollow">http://www.open-mpi.de/softwar...</a><br>tar -zxf openmpi-1.2.5.tar.gz<br>cd openmpi-1.2.5<br>./configure --prefix=/usr/local/openmpi<br>make all<br>make install</p>
+-
+-<p>#lam<br>cd /usr/local/src/<br>wget <a href="http://www.lam-mpi.org/download/files/lam-7.1.2.tar.gz" rel="nofollow">http://www.lam-mpi.org/downloa...</a><br>tar -xzvf lam-7.1.2.tar.gz<br>cd lam-7.1.2<br>./configure --enable-shared --prefix=/usr/local/lam<br>make <br>make install</p>
+-
+-<p># mpich1<br>cd /usr/local/src/<br>wget <a href="http://www-unix.mcs.anl.gov/mpi/mpich1/downloads/mpich.tar.gz" rel="nofollow">http://www-unix.mcs.anl.gov/mp...</a><br>tar -zxf mpich.tar.gz<br>cd mpich-1.2.7p1/<br>./configure --enable-sharedlib --prefix=/usr/local/mpich<br>make<br>make install<br></p></pre><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078420"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078420">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078420); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078420, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078420" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078420);" title="Link to comment by Pete">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078420" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078420); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078420, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078420"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078420"></li>            <li id="comment-12182512">  </li><li id="dsq-comment-12182512" data-dsq-comment-id="12182512" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:46px;">    <div class="dsq-avatar dsq-tt" title="Expand Andrew Lonie's profile">      <a href="http://disqus.com/guest/5420aa91d78af66fdcdbd0aebf91e653/" onclick="DISQUS.dtpl.actions.fire('profile.show', 12182512, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-12182512" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Andrew Lonie</span>                <span class="dsq-collapsed-count">                      8 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 12182512); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 12182512); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-12182512">                <div class="dsq-comment-text" id="dsq-comment-text-12182512">        <p>Hi
+- - I'd be very interested in a Elasticwulf cluster that supports R, too.
+-  Did anything come of this? I'd be happy to be involved. </p>
+-
+-<p>Andrew</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-12182512"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-12182512">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,12182512); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',12182512, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-12182512" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 12182512);" title="Link to comment by Andrew Lonie">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 11078420); return false" href="#comment-11078420" title="Jump to comment">            in reply to Pete          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-12182512" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 12182512); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 12182512, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-12182512"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-12182512"></li>            <li id="comment-12182897">  </li><li id="dsq-comment-12182897" data-dsq-comment-id="12182897" class="dsq-comment dsq-clearfix        dsq-comment-is-parent        dsq-moderator        dsq-founder" style="margin-left:92px;">    <div class="dsq-avatar dsq-tt" title="Expand pskomoroch's profile">      <a href="http://disqus.com/pskomoroch/" onclick="DISQUS.dtpl.actions.fire('profile.show', 12182897, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-12182897" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">pskomoroch</span>                <span class="dsq-collapsed-count">                      7 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 12182897); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 12182897); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-12182897">                <div class="dsq-comment-text" id="dsq-comment-text-12182897">        <p>Yes,
+- I have a Rails REST web service on github now for spawning MPI clusters
+- that support R.  Haven't had time yet to finish the docs or write a 
+-blog post about it.  Works fine in operation...</p>
+-
+-<p><a href="http://github.com/datawrangling/ec2cluster/tree/master" rel="nofollow">http://github.com/datawranglin...</a></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-12182897"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-12182897">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,12182897); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',12182897, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-12182897" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 12182897);" title="Link to comment by pskomoroch">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 12182512); return false" href="#comment-12182512" title="Jump to comment">            in reply to Andrew Lonie          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-12182897" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 12182897); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 12182897, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-12182897"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-12182897"></li>            <li id="comment-17402044">  </li><li id="dsq-comment-17402044" data-dsq-comment-id="17402044" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:138px;">    <div class="dsq-avatar dsq-tt" title="Expand Soren Macbeth's profile">      <a href="http://disqus.com/sorenmacbeth/" onclick="DISQUS.dtpl.actions.fire('profile.show', 17402044, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/uploads/users/11091/avatar32.jpg?1324404681" alt="">      </a>    </div>    <div id="dsq-comment-body-17402044" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://dopeness.org/" target="_blank" class="dsq-commenter-name" rel="nofollow">Soren Macbeth</a><span class="dsq-commenter-bio">, Chief Data Scientist @yieldbot. Co-founder of @StockTwits</span>                <span class="dsq-collapsed-count">                      3 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 17402044); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 17402044); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-17402044">                <div class="dsq-comment-text" id="dsq-comment-text-17402044">        <p>Hey Peter,</p>
+-
+-<p>Thanks for the awesome ec2cluster project! I forked it on github so 
+-that I could add the ability to install R packages from CRAN across all 
+-the nodes in the cluster. Basically I added the following to <a href="http://ubuntu_installs.sh/" rel="nofollow">ubuntu_installs.sh</a>:<br>--snip--<br># Custom R packages<br>cat &lt;&lt;eof&gt;&gt; /home/ec2cluster/install_custom_packages.R<br>install.packages("DEoptim",repos="<a href="http://cran.stat.ucla.edu/" rel="nofollow">http://cran.stat.ucla.edu</a>")<br>EOF<br> <br>R CMD BATCH /home/ec2cluster/install_custom_packages.R<br>--snip--</p>
+-
+-<p>A bit crude I know, but something people wanting to do things with R will probably find useful. </p>
+-
+-<p>To actually run the R code, I was successful with the follow approach:</p>
+-
+-<p>1) put your R code in a file and save it as foo.R<br>2) add the following line to a shellscript: mpirun -n 1 -hostfile /mnt/ec2cluster/openmpi_hostfile R CMD BATCH foo.R<br>3) call the shellscript and grab the produced .Rout file to your S3 bucket!<br>&lt;/eof&gt;</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-17402044"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-17402044">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,17402044); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',17402044, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-17402044" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 17402044);" title="Link to comment by Soren Macbeth">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 12182897); return false" href="#comment-12182897" title="Jump to comment">            in reply to pskomoroch          </a>        </li>            <li>          <a href="#" id="dsq-comment-like-count-17402044" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 17402044); return false">1          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 17402044, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-17402044"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-17402044"></li>            <li id="comment-17755101">  </li><li id="dsq-comment-17755101" data-dsq-comment-id="17755101" class="dsq-comment dsq-clearfix        dsq-comment-is-parent        dsq-moderator        dsq-founder" style="margin-left:184px;">    <div class="dsq-avatar dsq-tt" title="Expand pskomoroch's profile">      <a href="http://disqus.com/pskomoroch/" onclick="DISQUS.dtpl.actions.fire('profile.show', 17755101, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-17755101" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">pskomoroch</span>                <span class="dsq-collapsed-count">                      2 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 17755101); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 17755101); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-17755101">                <div class="dsq-comment-text" id="dsq-comment-text-17755101">        <p>Soren,</p>
+-
+-<p>Glad ec2cluster helped, are you guys big R users at StockTwits?</p>
+-
+-<p>-Pete</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-17755101"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-17755101">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,17755101); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',17755101, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-17755101" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 17755101);" title="Link to comment by pskomoroch">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 17402044); return false" href="#comment-17402044" title="Jump to comment">            in reply to Soren Macbeth          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-17755101" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 17755101); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 17755101, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-17755101"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-17755101"></li>            <li id="comment-17816391">  </li><li id="dsq-comment-17816391" data-dsq-comment-id="17816391" class="dsq-comment dsq-clearfix                        " style="margin-left:230px;">    <div class="dsq-avatar dsq-tt" title="Expand Soren Macbeth's profile">      <a href="http://disqus.com/sorenmacbeth/" onclick="DISQUS.dtpl.actions.fire('profile.show', 17816391, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/uploads/users/11091/avatar32.jpg?1324404681" alt="">      </a>    </div>    <div id="dsq-comment-body-17816391" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://dopeness.org/" target="_blank" class="dsq-commenter-name" rel="nofollow">Soren Macbeth</a><span class="dsq-commenter-bio">, Chief Data Scientist @yieldbot. Co-founder of @StockTwits</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 17816391); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 17816391); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-17816391">                <div class="dsq-comment-text" id="dsq-comment-text-17816391">        <p>The
+- very first StockTwits prototype used R to generate some statistics as 
+-well as generate charts of the stocks being talked about in tweets :)</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-17816391"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-17816391">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,17816391); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',17816391, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-17816391" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 17816391);" title="Link to comment by Soren Macbeth">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 17755101); return false" href="#comment-17755101" title="Jump to comment">            in reply to pskomoroch          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-17816391" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 17816391); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 17816391, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-17816391"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-17816391"></li>            <li id="comment-12186904">  </li><li id="dsq-comment-12186904" data-dsq-comment-id="12186904" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:138px;">    <div class="dsq-avatar dsq-tt" title="Expand Andrew Lonie's profile">      <a href="http://disqus.com/guest/5420aa91d78af66fdcdbd0aebf91e653/" onclick="DISQUS.dtpl.actions.fire('profile.show', 12186904, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-12186904" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Andrew Lonie</span>                <span class="dsq-collapsed-count">                      3 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 12186904); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 12186904); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-12186904">                <div class="dsq-comment-text" id="dsq-comment-text-12186904">        <p>Thanks
+- - this is impressive, and a web interface for building clusters would 
+-be very nice, but maybe I'm after something slightly closer to your 
+-original solution. You might already know that R has an in-language 
+-cluster support API built on Rmpi, called SNOW (Simple network of 
+-workstations). It allows for various script commands like 
+-clusterExport(data) and clusterApply(vector, function) which let you 
+-interactively cluster jobs according to the parameter values in a list. <br>Would
+- this be compatible with your cluster app? I notice that it's more 
+-schedule-focused and the nodes need to talk to the app; is the app 
+-acting as the master rather than one of the ec2 nodes? Ideally my 
+-architecture would be something like master Rmpi node running on ec2 
+-talking to arbitrary slave #nodes, accessed through maybe something like
+- the Biocep remote R client (<a href="http://biocep-distrib.r-forge.r-project.org/%29;" rel="nofollow">http://biocep-distrib.r-forge....</a> clustering done in-session.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-12186904"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-12186904">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,12186904); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',12186904, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-12186904" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 12186904);" title="Link to comment by Andrew Lonie">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 12182897); return false" href="#comment-12182897" title="Jump to comment">            in reply to pskomoroch          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-12186904" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 12186904); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 12186904, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-12186904"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-12186904"></li>            <li id="comment-12189262">  </li><li id="dsq-comment-12189262" data-dsq-comment-id="12189262" class="dsq-comment dsq-clearfix        dsq-comment-is-parent        dsq-moderator        dsq-founder" style="margin-left:184px;">    <div class="dsq-avatar dsq-tt" title="Expand pskomoroch's profile">      <a href="http://disqus.com/pskomoroch/" onclick="DISQUS.dtpl.actions.fire('profile.show', 12189262, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-12189262" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">pskomoroch</span>                <span class="dsq-collapsed-count">                      2 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 12189262); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 12189262); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-12189262">                <div class="dsq-comment-text" id="dsq-comment-text-12189262">        <p>Yes,
+- this is compatible with the cluster app. One of the bundled examples 
+-runs some calculations with R and SNOW, another uses Rmpi (see the code 
+-on Github <a href="http://bit.ly/ocKCn" rel="nofollow">http://bit.ly/ocKCn</a> ).</p>
+-
+-<p>The web interface can be run anywhere, but needs to be https 
+-accessible to the EC2 nodes.  I usually just run it as a small ec2 
+-instance as shown in the docs.  You can start a job from the API or the 
+-web console with shutdown_after_complete = false, and the cluster will 
+-remain live for interactive work, just ssh into the master node like you
+- would with Elasticwulf.  The app is not acting as the MPI master node, 
+-but the cluster nodes do talk to the app to handle configuration etc.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-12189262"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-12189262">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,12189262); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',12189262, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-12189262" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 12189262);" title="Link to comment by pskomoroch">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 12186904); return false" href="#comment-12186904" title="Jump to comment">            in reply to Andrew Lonie          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-12189262" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 12189262); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 12189262, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-12189262"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-12189262"></li>            <li id="comment-12236004">  </li><li id="dsq-comment-12236004" data-dsq-comment-id="12236004" class="dsq-comment dsq-clearfix                        " style="margin-left:230px;">    <div class="dsq-avatar dsq-tt" title="Expand Andrew Lonie's profile">      <a href="http://disqus.com/guest/5420aa91d78af66fdcdbd0aebf91e653/" onclick="DISQUS.dtpl.actions.fire('profile.show', 12236004, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-12236004" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Andrew Lonie</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 12236004); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 12236004); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-12236004">                <div class="dsq-comment-text" id="dsq-comment-text-12236004">        <p>OK thanks I understand. I'll try this out properly; it sounds like exactly what I'm after.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-12236004"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-12236004">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,12236004); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',12236004, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-12236004" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 12236004);" title="Link to comment by Andrew Lonie">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 12189262); return false" href="#comment-12189262" title="Jump to comment">            in reply to pskomoroch          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-12236004" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 12236004); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 12236004, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-12236004"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-12236004"></li>            <li id="comment-11078419">  </li><li id="dsq-comment-11078419" data-dsq-comment-id="11078419" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Jeff Howbert's profile">      <a href="http://disqus.com/guest/9a9b88e0baa650e10edffc743d8a932c/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078419, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078419" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.insilicos.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Jeff Howbert</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078419); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078419); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078419">                <div class="dsq-comment-text" id="dsq-comment-text-11078419">        <p></p><p>Hello Pete -</p><br><p>Thanks
+- for putting together your ElsticWulf scripts and AMIs.  They have saved
+- me a huge amount of time and effort compared with building my own from 
+-scratch.</p><br><p>I am interested in parallelizing some machine 
+-learning algorithms written in R.  My interest in ElasticWulf comes 
+-partly from the fact that R is already bundled with its AMIs.  I 
+-discovered, however, that Rmpi is not one of the installed packages.  
+-What were your intentions/plans with R in the ElasticWulf environment?  
+-Did you plan for parallel communication using a mechanism other than 
+-MPI?</p><br><p>It wasn't hard to install Rmpi on top of the ElasticWulf 
+-AMI, but despite a couple of days' struggle, I haven't found a 
+-combination of Rmpi version and paths to the AMI's existing MPI 
+-libraries that fully works.  The best I've been able to do is spawn an R
+- cluster where all the nodes are running on the master node.</p><br><p>Could
+- you tell me what version of R and the various MPI implementations 
+-(OpenMPI, MPICH, LAM) went into your 64-bit AMI?  That might help me 
+-sort things out.  A couple of observations, for what they're worth:</p><br><p>1)
+- Once I have an ElasticWulf cluster up and have run mpdboot, I find that
+- mpiexec works, but orterun (the equivalent in OpenMPI) does not.</p><br><p>2) There has been at least one report of problems between the latest version of Rmpi and OpenMPI:</p><br><p><a href="https://stat.ethz.ch/pipermail/r-sig-hpc/2009-February/000105.html" rel="nofollow">https://stat.ethz.ch/pipermail...</a></p><br><p>Much thanks.</p><br><p>Jeff Howbert</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078419"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078419">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078419); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078419, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078419" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078419);" title="Link to comment by Jeff Howbert">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078419" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078419); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078419, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078419"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078419"></li>            <li id="comment-11078418">  </li><li id="dsq-comment-11078418" data-dsq-comment-id="11078418" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Ben Racine's profile">      <a href="http://disqus.com/guest/73b18fbd0f1831f0816ff3d3bceffe89/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078418, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078418" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.glosten.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Ben Racine</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078418); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078418); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078418">                <div class="dsq-comment-text" id="dsq-comment-text-11078418">        <p></p><p>Hello,</p><br><p>I
+- get the same problem that Michael Creel was having.  I am able to start
+- the instances and get them "running" successfully, by pointing them to 
+-my keypair with the KEYNAME variable, but I believe my KEY_LOCATION 
+-variable in my <a href="http://ec2config.py/" rel="nofollow">EC2config.py</a> file must be causing the prompt for a password.</p><br><p>This is all per the default block of code in <a href="http://ec2config.py/" rel="nofollow">EC2config.py</a>:</p><p></p>
+-
+-<p>change this to your keypair location (see the EC2 getting started guide tutorial on using ec2-add-keypair)</p>
+-
+-<p></p><p>KEYNAME = "my_keypair"<br>KEY_LOCATION = "/Users/pskomoroch/id_rsa-gsg-keypair"</p><br><p>I
+- believe this requires me to go back through the "getting started 
+-guide", but I just wanted to update my progress in case others are 
+-seeing the same thing.</p><br><p>Many thanks for sharing your progress Peter!</p><br><p>Ben Racine</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078418"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078418">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078418); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078418, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078418" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078418);" title="Link to comment by Ben Racine">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078418" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078418); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078418, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078418"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078418"></li>            <li id="comment-11078417">  </li><li id="dsq-comment-11078417" data-dsq-comment-id="11078417" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand ej's profile">      <a href="http://disqus.com/guest/204b597c385120b2d064489cc90bc7d3/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078417, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078417" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">ej</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078417); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078417); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078417">                <div class="dsq-comment-text" id="dsq-comment-text-11078417">        <p></p><p>@Pete - Feb08</p><br><blockquote><br><p>Canât get the ec-mpi-config to work. Says list &gt;index out of range for mpi-externalnames[0] on &gt;line 108</p><br></blockquote><br><p>You are right - the output from ec2-describe-instances has changed. Do the following..</p><br><p>Change</p><br><p>machine_state.append(chunk[-1])</p><br><p>to</p><br><p>machine_state.append(chunk[5])</p><br><p>in "<a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a>"</p><br><p>Or,
+- if the output changes again - just do an "ec2-describe-instances" and 
+-match up the required fields to the index on the chunk[] array</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078417"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078417">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078417); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078417, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078417" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078417);" title="Link to comment by ej">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078417" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078417); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078417, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078417"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078417"></li>            <li id="comment-11078416">  </li><li id="dsq-comment-11078416" data-dsq-comment-id="11078416" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078416, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078416" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078416); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078416); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078416">                <div class="dsq-comment-text" id="dsq-comment-text-11078416">        <p></p><p>Joanne,</p><br><p>Try
+- logging in and running your commands as "lamuser" instead of root.  The
+- default configuration assumes lamuser is running all commands.</p><br><p>$ ssh lamuser@ec2<a href="http://-72-44-46-78.z-2.compute-1.amazonaws.com/" rel="nofollow">-72-44-46-78.z-2.compute-1.ama...</a></p><br><p>See part 1 of the post for details on changing the configuration to run MPI as root.</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078416"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078416">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078416); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078416, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078416" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078416);" title="Link to comment by Pete">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078416" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078416); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078416, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078416"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078416"></li>            <li id="comment-11078415">  </li><li id="dsq-comment-11078415" data-dsq-comment-id="11078415" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand jjiyunlee's profile">      <a href="http://disqus.com/guest/01b0b00819049a0c83ec280ccb4e596a/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078415, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078415" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">jjiyunlee</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078415); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078415); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078415">                <div class="dsq-comment-text" id="dsq-comment-text-11078415">        <p></p><p>Hi,</p><br><p>Thanks
+- for your writeup! It's very helpful. I'm running into an error with 
+-mpdtrace and was hoping for some of your insight into it. I am running 
+-mpd as root, with one node for simplicity.</p><br><p>I can successfully start up mpd on the instance and "mpd &amp;":<br>root@...:/etc# mpdboot -n 1 -f mpd.hosts<br>root@...:/etc# mpd &amp;<br>[1] 2280</p><br><p>but "mpdtrace -l" gives me an error:<br>root@ip-10-251-143-0:/etc# mpdtrace -l<br>mpdtrace: unexpected msg from mpd=:{'error_msg': 'invalid secretword to root mpd'}:</p><br><p>I
+- have tried all pairwise combinations of having MPD_SECRETWORD= or 
+-secretword= in ~/.mpd.conf and /etc/mpd.conf, all of which were set to 
+-read/write for root only.</p><br><p>I also can't do "mpdallexit":<br>I can't mpdallexit:<br>root@...:~# mpdallexit<br>mpdallexit: mpd_uncaught_except_tb handling:<br>  : 'cmd'<br>    /usr/local/bin/mpich2-install/bin/mpdallexit  53  mpdallexit<br>        elif msg['cmd'] != 'mpdallexit_ack':<br>    /usr/local/bin/mpich2-install/bin/mpdallexit  59  <br>        mpdallexit()</p><br><p>I can also run mpdcheck as a server and have it listen for mpdcheck as a client from the same instance (in a different window).</p><br><p>Suggestions/help? I'd greatly appreciate any advice you have on this problem. Thanks --</p><br>&lt;ul&gt;<br>&lt;li&gt;Joanne&lt;/li&gt;<br>&lt;/ul&gt;<p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078415"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078415">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078415); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078415, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078415" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078415);" title="Link to comment by jjiyunlee">          3 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078415" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078415); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078415, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078415"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078415"></li>            <li id="comment-11078414">  </li><li id="dsq-comment-11078414" data-dsq-comment-id="11078414" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Tim Salimans's profile">      <a href="http://disqus.com/guest/d9e0ea5863a3cee8a31febd8494ca6e7/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078414, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078414" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Tim Salimans</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078414); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078414); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078414">                <div class="dsq-comment-text" id="dsq-comment-text-11078414">        <p></p><p>Got it working using OpenSSH, guess PuTTy was the problem after all.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078414"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078414">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078414); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078414, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078414" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078414);" title="Link to comment by Tim Salimans">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078414" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078414); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078414, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078414"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078414"></li>            <li id="comment-11078413">  </li><li id="dsq-comment-11078413" data-dsq-comment-id="11078413" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Tim Salimans's profile">      <a href="http://disqus.com/guest/d9e0ea5863a3cee8a31febd8494ca6e7/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078413, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078413" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Tim Salimans</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078413); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078413); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078413">                <div class="dsq-comment-text" id="dsq-comment-text-11078413">        <p></p><p>Great
+- project and thanks very much for sharing! I do have some trouble 
+-getting it all to work though. Everything works fine until it tries to 
+-run the <a href="http://create_hosts.py/" rel="nofollow">create_hosts.py</a>:</p><br><p>/////// OUTPUT ///////////////</p><br><p>Creating hosts file on master node and copying hosts file to compute nodes...</p><br><p>pscp -scp -i D:\grid\keys\keypair.ppk -q <a href="http://create_hosts.py/" rel="nofollow">create_hosts.py</a> root@ec2-67-202-19-253.<br><a href="http://compute-1.amazonaws.com/" rel="nofollow">compute-1.amazonaws.com</a>:/etc/</p><br><p>plink -ssh -i D:\grid\keys\keypair.ppk root@ec2-67-202-19-253.compute-1.amazonaw<br><a href="http://s.com/" rel="nofollow">s.com</a> "python /etc/<a href="http://create_hosts.py/" rel="nofollow">create_hosts.py</a>"</p><br><p>exporting 10.252.31.48:/home/beowulf<br>exporting 10.252.31.48:/mnt/data<br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<br>@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @<br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<br>Permissions 0644 for '/root/.ssh/id_rsa' are too open.<br>It is recommended that your private key files are NOT accessible by others.<br>This private key will be ignored.<br>bad permissions: ignore key: /root/.ssh/id_rsa<br>Permission denied, please try again.<br>Permission denied, please try again.<br>Permission denied (publickey,gssapi-with-mic,password).<br>lost connection<br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<br>@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @<br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<br>Permissions 0644 for '/root/.ssh/id_rsa' are too open.<br>It is recommended that your private key files are NOT accessible by others.<br>This private key will be ignored.<br>bad permissions: ignore key: /root/.ssh/id_rsa<br>Permission denied, please try again.<br>Permission denied, please try again.<br>Permission denied (publickey,gssapi-with-mic,password).<br>lost connection</p><br><p>etcetera</p><br><p>//////////////////////////////////</p><br><p>As
+- you can see I made some small modifications in order to use PuTTy as my
+- SSH client, but that does not seem to be the problem... Does anyone 
+-else have this problem, and does anyone know how to fix it?</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078413"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078413">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078413); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078413, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078413" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078413);" title="Link to comment by Tim Salimans">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078413" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078413); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078413, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078413"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078413"></li>            <li id="comment-11078412">  </li><li id="dsq-comment-11078412" data-dsq-comment-id="11078412" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078412, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078412" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      4 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078412); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078412); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078412">                <div class="dsq-comment-text" id="dsq-comment-text-11078412">        <p></p><p>Magg,</p><br><p>I
+- wouldn't recommend it, the latency would be huge and I'm not sure how 
+-MPI would handle that.  You would also need to open the mpi ports to the
+- outside world using the EC2 security group authorize commands.</p><br><p>An
+- alternative is to open an X11 session and connect to the head node or 
+-maybe VNC in to the instance.  The 64 bit elasticwulf images are set up 
+-for X11 sessions and adding a desktop package would allow you to VNC in 
+-if you prefer that route.</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078412"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078412">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078412); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078412, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078412" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078412);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078412" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078412); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078412, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078412"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078412"></li>            <li id="comment-11662168">  </li><li id="dsq-comment-11662168" data-dsq-comment-id="11662168" class="dsq-comment dsq-clearfix        dsq-comment-is-parent                " style="margin-left:46px;">    <div class="dsq-avatar dsq-tt" title="Expand Abhimanyu's profile">      <a href="http://disqus.com/guest/a9e5f48763433c486e5ece186f823820/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11662168, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11662168" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Abhimanyu</span>                <span class="dsq-collapsed-count">                      3 comments collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11662168); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11662168); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11662168">                <div class="dsq-comment-text" id="dsq-comment-text-11662168">        <p>I am facing the same problem. I am able to set up the ring manually but mpdboot complains:</p>
+-
+-<p>mpdboot_domU-blah(handle_mpd_output 414): from mpd on domU-blah-, <br>invalid port info:<br>no_port</p>
+-
+-<p>any word on this?<br></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11662168"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11662168">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11662168); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11662168, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11662168" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11662168);" title="Link to comment by Abhimanyu">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 11078412); return false" href="#comment-11078412" title="Jump to comment">            in reply to Pete          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11662168" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11662168); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11662168, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11662168"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11662168"></li>            <li id="comment-11779678">  </li><li id="dsq-comment-11779678" data-dsq-comment-id="11779678" class="dsq-comment dsq-clearfix                        " style="margin-left:92px;">    <div class="dsq-avatar dsq-tt" title="Expand Abhimanyu's profile">      <a href="http://disqus.com/guest/a9e5f48763433c486e5ece186f823820/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11779678, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11779678" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Abhimanyu</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11779678); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11779678); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11779678">                <div class="dsq-comment-text" id="dsq-comment-text-11779678">        <p>I
+- found the problem. Apparently I had forgotten to include the "chown -R 
+-user:user /home/user" command. It didnt have access to the id_rsa file. 
+-As root mpdboot would work. Rather silly error message though.</p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11779678"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11779678">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11779678); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11779678, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11779678" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11779678);" title="Link to comment by Abhimanyu">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 11662168); return false" href="#comment-11662168" title="Jump to comment">            in reply to Abhimanyu          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11779678" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11779678); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11779678, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11779678"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11779678"></li>            <li id="comment-11662255">  </li><li id="dsq-comment-11662255" data-dsq-comment-id="11662255" class="dsq-comment dsq-clearfix                dsq-moderator        dsq-founder" style="margin-left:92px;">    <div class="dsq-avatar dsq-tt" title="Expand pskomoroch's profile">      <a href="http://disqus.com/pskomoroch/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11662255, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11662255" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">pskomoroch</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11662255); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11662255); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11662255">                <div class="dsq-comment-text" id="dsq-comment-text-11662255">        <p>I
+- think there are some SGE grid solutions now that allow you to add EC2 
+-nodes to your existing cluster, but again the performance of MPI from a 
+-local network to EC2 would be horrible...</p>
+-
+-<p>If you are interested in running MPI on EC2, I have a new project on Github I'll be announcing soon:</p>
+-
+-<p><a href="http://github.com/datawrangling/ec2cluster/tree/master" rel="nofollow">http://github.com/datawranglin...</a></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11662255"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11662255">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11662255); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11662255, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11662255" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11662255);" title="Link to comment by pskomoroch">          3 years ago      </a></li>              <li>          <a onclick="DISQUS.dtpl.actions.fire('comments.showParent', 11662168); return false" href="#comment-11662168" title="Jump to comment">            in reply to Abhimanyu          </a>        </li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11662255" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11662255); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11662255, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11662255"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11662255"></li>            <li id="comment-11078411">  </li><li id="dsq-comment-11078411" data-dsq-comment-id="11078411" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand magg's profile">      <a href="http://disqus.com/guest/1772205ff3fd5ccadfd54f60eb981bef/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078411, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078411" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">magg</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078411); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078411); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078411">                <div class="dsq-comment-text" id="dsq-comment-text-11078411">        <p></p><p>Hi Peter,</p><br><p>Have
+- you tried to connect EC2 instances with your local desktops? I am 
+-trying to do that with mpich2 1.0.7 but I am not successful at all. 
+-mpdboot complains about invalid port info (no_port) - actually no port 
+-when I try to do mpdboot -n 2. Even when I tried to mpd&amp; on EC2 
+-machine and then mpdtrace -l and then unblock the port and then mpd -h 
+-ec2-blabla -p ec2-mpdtrace-l-port still I have no luck. Have you faced 
+-similar problems?</p><br><p>Thanks<br>- magg</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078411"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078411">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078411); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078411, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078411" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078411);" title="Link to comment by magg">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078411" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078411); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078411, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078411"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078411"></li>            <li id="comment-11078410">  </li><li id="dsq-comment-11078410" data-dsq-comment-id="11078410" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078410, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078410" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078410); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078410); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078410">                <div class="dsq-comment-text" id="dsq-comment-text-11078410">        <p></p><p>@Theo,</p><br><p>I'm attending MMDS this week at Stanford (<a href="http://www.stanford.edu/group/mmds/" rel="nofollow">http://www.stanford.edu/group/mmds/</a>),
+- and had a chance to ask James Demmel a few questions.  He gave a talk 
+-titled "Avoiding communication in linear algebra algorithms", which was 
+-very relevant.  His advice for matrix multiplication in a high latency 
+-environment like EC2 was to try dialing up the block size as much as 
+-possible in the standard MPI solvers and see how performance was 
+-affected.</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078410"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078410">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078410); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078410, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078410" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078410);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078410" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078410); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078410, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078410"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078410"></li>            <li id="comment-11078409">  </li><li id="dsq-comment-11078409" data-dsq-comment-id="11078409" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078409, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078409" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078409); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078409); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078409">                <div class="dsq-comment-text" id="dsq-comment-text-11078409">        <p></p><p>I found the secret to avoiding a lot of MPI errors on EC2, but haven't found time to do an additional post...</p><br><p>The
+- secret seems to be that just because Amazon says that an instance is 
+-"running", doesn't mean that the ssh daemons are available.  This caused
+- all kinds of intermittent problems setting up the hosts and my old 
+-scripts would fail silently.</p><br><p>In my current codebase, I do some checks like the following:</p><br><pre>    print "Instance is %s" % BOOTING_INSTANCE<br>    <br>    # wait for instance description to return "running" and grab HOSTNAME variable<br>    print "Polling server status (ec2-describe-instances %s)" % BOOTING_INSTANCE<br>    while 1:<br>      print "waiting for instance to boot..."<br>      HOSTNAME = commands.getoutput("ec2-describe-instances %s | grep running | awk '{print $4}'" % BOOTING_INSTANCE)<br>      if len(HOSTNAME) &gt; 1:<br>        print "-------Instance booted, The server is available at %s" % HOSTNAME<br>        DOM_NAME = commands.getoutput("ec2-describe-instances %s | grep running | awk '{print $5}'" % BOOTING_INSTANCE).split('.')[0]<br>        break<br>      time.sleep(1)    <br>    <br>    # sometimes it takes a while for the ssh service to start, even when the ec2 api describes an instance as running.<br>    # A machine in the "running" state may not have finished booting. Try executing a no-op command until a valid response is found<br>    print "verifying ssh daemon has started..."<br>    counter=0<br>    while 1:<br>      print "Waiting for ssh daemon to start..."<br>      counter += 1        <br>      REPLY = commands.getoutput('''ssh %s "root@%s" 'echo "hello"' ''' % (SSH_OPTS, HOSTNAME) )<br>      if REPLY == 'hello':<br>        print "-------ssh has started, proceeding with AMI build"<br>        break<br>      if counter &gt; 24:<br>        print "Instance not respoding to SSH hails, aborting..."<br>        ## sshd should not take more than 2 minutes to launch<br>        terminate_status = commands.getoutput('ec2-terminate-instances %s' % BOOTING_INSTANCE)<br>        ec2_launch_failed = True<br>        print "Base Instance terminated"<br>        break<br>      time.sleep(5)<br>    <br>    if ec2_launch_failed:<br>        print "Aborting build"<br>        return<br>    <p></p>
+-
+-<p></p></pre><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078409"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078409">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078409); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078409, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078409" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078409);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078409" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078409); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078409, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078409"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078409"></li>            <li id="comment-11078408">  </li><li id="dsq-comment-11078408" data-dsq-comment-id="11078408" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Patrick's profile">      <a href="http://disqus.com/guest/83624e3d53e8a4f77fb3638d69412224/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078408, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078408" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Patrick</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078408); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078408); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078408">                <div class="dsq-comment-text" id="dsq-comment-text-11078408">        <p></p><p>Thanks, Peter.  The original <a href="http://ec2.py/" rel="nofollow">EC2.py</a> was the problem.  I now have the large AMIs up and running.  Thanks again for the article and help!</p><br><p>Patrick</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078408"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078408">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078408); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078408, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078408" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078408);" title="Link to comment by Patrick">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078408" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078408); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078408, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078408"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078408"></li>            <li id="comment-11078407">  </li><li id="dsq-comment-11078407" data-dsq-comment-id="11078407" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Theo's profile">      <a href="http://disqus.com/guest/886f1df95cb2acd12d921ce12c253b0e/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078407, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/uploads/anonusers/211/1905/avatar32.jpg?1281549414" alt="">      </a>    </div>    <div id="dsq-comment-body-11078407" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.stillwater-sc.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Theo</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078407); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078407); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078407">                <div class="dsq-comment-text" id="dsq-comment-text-11078407">        <p></p><p>Peter:</p><br><p>I
+- am diving into Hadoop with Map/Reduce as we speak. As you know Google 
+-implemented its environment in C++, so I was a bit disappointed that 
+-Hadoop had chosen Java VM to do its bidding. Java makes interfacing with
+- hardcore numerical operations much harder. The particular problems I am
+- looking at are large scale Lanczos solvers to find eigen values/vectors
+- of large systems of equations. These systems are of interest in 
+-advertising, quantitative finance, and sensor networks. Problem is that 
+-they all are environments in which latency is of the essence. So you 
+-have a capacity component in terms of the size of the system and a 
+-latency issue in terms of the data rate coming in and the opportunity 
+-cost for somebody to get to the answer faster.</p><br><p>I would be 
+-interested in working on this particular benchmark problem: pick a big 
+-eigen value/vector problem and solve it on a cluster, EC2, and via 
+-Hadoop/Map-reduce. Clearly this is going to be a lot of work so this 
+-should be publishing worthy. I am sure many folks would be interested in
+- this experiment, so let me know if this is something that could invest 
+-time in.</p><br><p>Theo</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078407"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078407">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078407); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078407, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078407" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078407);" title="Link to comment by Theo">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078407" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078407); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078407, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078407"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078407"></li>            <li id="comment-11078406">  </li><li id="dsq-comment-11078406" data-dsq-comment-id="11078406" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078406, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078406" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078406); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078406); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078406">                <div class="dsq-comment-text" id="dsq-comment-text-11078406">        <p></p><p>Patrick,</p><br><p>Did you start with a clean install of the 64 bit scripts?  I made some changes to <a href="http://ec2.py/" rel="nofollow">EC2.py</a> in the new scripts to handle the new instance types...</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078406"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078406">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078406); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078406, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078406" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078406);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078406" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078406); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078406, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078406"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078406"></li>            <li id="comment-11078405">  </li><li id="dsq-comment-11078405" data-dsq-comment-id="11078405" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Patrick's profile">      <a href="http://disqus.com/guest/83624e3d53e8a4f77fb3638d69412224/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078405, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078405" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Patrick</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078405); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078405); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078405">                <div class="dsq-comment-text" id="dsq-comment-text-11078405">        <p></p><p>Peter,</p><br><p>Very
+- useful tool!  I've gotten a cluster up and running using the small 
+-instance type but am having difficulty launching the _64 AMIs.</p><br><p>$ ./<a href="http://ec2-start-cluster.py/" rel="nofollow">ec2-start-cluster.py</a><br>m1.large<br>image ami-eb13f682<br>master image ami-e813f681<br>----- starting master -----<br>Traceback (most recent call last):<br>  File "./<a href="http://ec2-start-cluster.py/" rel="nofollow">ec2-start-cluster.py</a>", line 39, in ?<br>
+-    master_response = conn.run_instances(imageId=MASTER_IMAGE_ID, 
+-minCount=1, maxCount=1, keyName= KEYNAME, instanceType=INSTANCE_TYPE )<br>TypeError: run_instances() got an unexpected keyword argument 'instanceType'</p><br><p>If I try to start the cluster without passing an INSTANCE_TYPE arg I get the following:<br>$ ./<a href="http://ec2-start-cluster.py/" rel="nofollow">ec2-start-cluster.py</a><br>m1.large<br>image ami-eb13f682<br>master image ami-e813f681<br>----- starting master -----<br>InvalidParameterValue:
+- The requested instance type's architecture (i386) does not match the 
+-architecture in the manifest for ami-e813f681 (x86_64)<br>----- starting workers -----<br>InvalidParameterValue:
+- The requested instance type's architecture (i386) does not match the 
+-architecture in the manifest for ami-eb13f682 (x86_64)</p><br><p>Any ideas?  Thanks!</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078405"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078405">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078405); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078405, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078405" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078405);" title="Link to comment by Patrick">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078405" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078405); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078405, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078405"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078405"></li>            <li id="comment-11078404">  </li><li id="dsq-comment-11078404" data-dsq-comment-id="11078404" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078404, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078404" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078404); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078404); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078404">                <div class="dsq-comment-text" id="dsq-comment-text-11078404">        <p></p><p>Raghav,</p><br><p>You can ssh in as root instead of lamuser, or compile the output file into your home directory.</p><br><p>Check out the new AMI and managment code:</p><br><p><a href="http://www.datawrangling.com/pycon-2008-elasticwulf-slides.html" rel="nofollow">http://www.datawrangling.com/pycon-2008-elasticwulf-slides.html</a></p><br><p>The
+- new AMI includes a preconfigured NFS mounted directory /home/beowulf.  
+-If you compiled the file there, hellompi would be available on all 
+-nodes.</p><br><p>Note that the new images default to the 'large' instance type which charges .40 cents/hour for each node.</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078404"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078404">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078404); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078404, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078404" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078404);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078404" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078404); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078404, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078404"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078404"></li>            <li id="comment-11078403">  </li><li id="dsq-comment-11078403" data-dsq-comment-id="11078403" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand raghav's profile">      <a href="http://disqus.com/guest/02002de5d523ca7ae7a0b0f85b9da098/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078403, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078403" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">raghav</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078403); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078403); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078403">                <div class="dsq-comment-text" id="dsq-comment-text-11078403">        <p></p><p>i am trying to compile a simple c mpi file "hellompi.c" using the command:</p><br><blockquote><br><p>mpicc -o /usr/hellompi /usr/local/src/hellompi.c</p><br></blockquote><br><p>why does it give me the following error?</p><br><p>/usr/bin/ld: cannot open output file /usr/hellompi: Permission denied<br>collect2: ld returned 1 exit status</p><br><p>how do I get root priveledges?</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078403"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078403">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078403); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078403, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078403" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078403);" title="Link to comment by raghav">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078403" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078403); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078403, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078403"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078403"></li>            <li id="comment-11078402">  </li><li id="dsq-comment-11078402" data-dsq-comment-id="11078402" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Kurt Grandis's profile">      <a href="http://disqus.com/kgrandis/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078402, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078402" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://kurtgrandis.com/blog" target="_blank" class="dsq-commenter-name" rel="nofollow">Kurt Grandis</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078402); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078402); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078402">                <div class="dsq-comment-text" id="dsq-comment-text-11078402">        <p></p><p>Thanks
+- Pete. I wish I had made the PyCon session, but these posts have been 
+-very helpful. The cluster went up pretty quickly and I have already used
+- it to crunch a few minor data runs.<br>In setting everything up I also 
+-ran into a similar problem as Raghav and ended up solving it in a 
+-similar manner by forcing the -i credentials switch. I imagine it has 
+-something to do with the way I configured and placed my certs.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078402"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078402">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078402); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078402, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078402" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078402);" title="Link to comment by Kurt Grandis">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078402" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078402); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078402, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078402"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078402"></li>            <li id="comment-11078401">  </li><li id="dsq-comment-11078401" data-dsq-comment-id="11078401" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand raghav's profile">      <a href="http://disqus.com/guest/02002de5d523ca7ae7a0b0f85b9da098/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078401, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078401" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">raghav</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078401); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078401); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078401">                <div class="dsq-comment-text" id="dsq-comment-text-11078401">        <p></p><p>Thanks pete. For your prompt reply!!</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078401"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078401">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078401); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078401, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078401" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078401);" title="Link to comment by raghav">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078401" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078401); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078401, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078401"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078401"></li>            <li id="comment-11078400">  </li><li id="dsq-comment-11078400" data-dsq-comment-id="11078400" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand raghav's profile">      <a href="http://disqus.com/guest/02002de5d523ca7ae7a0b0f85b9da098/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078400, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078400" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">raghav</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078400); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078400); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078400">                <div class="dsq-comment-text" id="dsq-comment-text-11078400">        <p></p><p>Hey guys,<br>Actually I made a change in the <a href="http://ec2-mpi-cluster.py/" rel="nofollow">ec2-mpi-cluster.py</a> file. I have no clue about python and I dono why it worked but it worked.</p><br><p>I modified:</p><br><p>template = ssh -o "StrictHostKeyChecking no" %(user)s@%(host)s "%(cmd)s" <br>to<br>template = 'ssh -i "/home/id_rsa-gsg-keypair" %(user)s@%(host)s "%(cmd)s"</p><br><p>and</p><br><p>template = '%(cmd)s %(switches)s -o "StrictHostKeyChecking no" %(src)s %(user)s@%(host)s:%(dest)s'<br>to<br>template = '%(cmd)s %(switches)s -i "/home/id_rsa-gsg-keypair" %(src)s %(user)s@%(host)s:%(dest)s'</p><br><p>And it started working perfectly fine. I was able to log in to the master node and the pi problem executed perfectly fine.</p><br><p>Thanks a lot guys</p><br><p>Cheers,<br>Raghav</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078400"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078400">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078400); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078400, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078400" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078400);" title="Link to comment by raghav">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078400" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078400); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078400, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078400"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078400"></li>            <li id="comment-11078399">  </li><li id="dsq-comment-11078399" data-dsq-comment-id="11078399" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078399, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078399" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078399); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078399); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078399">                <div class="dsq-comment-text" id="dsq-comment-text-11078399">        <p></p><p>raghav,</p><br><p>Another suggestion is to make sure the instances are running with ./<a href="http://ec2-check-instances.py/" rel="nofollow">ec2-check-instances.py</a> and then retry the script, sometimes it takes a while for sshd to start up on EC2.</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078399"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078399">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078399); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078399, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078399" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078399);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078399" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078399); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078399, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078399"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078399"></li>            <li id="comment-11078398">  </li><li id="dsq-comment-11078398" data-dsq-comment-id="11078398" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078398, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078398" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078398); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078398); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078398">                <div class="dsq-comment-text" id="dsq-comment-text-11078398">        <p></p><p>raghav,</p><br><p>I assume you were able to start the instances with <a href="http://ec2-start-cluster.py/?" rel="nofollow">ec2-start-cluster.py?</a>
+-  The text on the terminal is normal, but it shouldn't ask you for a 
+-password (I should probably add a verbose option instead of streaming 
+-out text by default). There was a path issue on windows with an earlier 
+-version of the scripts, so that may be the problem.</p><br><p>If you send me the script version number from the README and/or terminal output, I can try to track down what is going on...</p><br><p>peter.skomoroch@gmail.com</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078398"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078398">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078398); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078398, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078398" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078398);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078398" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078398); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078398, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078398"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078398"></li>            <li id="comment-11078397">  </li><li id="dsq-comment-11078397" data-dsq-comment-id="11078397" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand raghav's profile">      <a href="http://disqus.com/guest/02002de5d523ca7ae7a0b0f85b9da098/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078397, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078397" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">raghav</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078397); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078397); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078397">                <div class="dsq-comment-text" id="dsq-comment-text-11078397">        <p></p><p>Why does it ask me for a password when i try to run the <a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a> file.?<br>it says root@xxx password:<br>And I get a lot of text on the terminal when I try running the file.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078397"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078397">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078397); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078397, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078397" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078397);" title="Link to comment by raghav">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078397" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078397); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078397, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078397"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078397"></li>            <li id="comment-11078396">  </li><li id="dsq-comment-11078396" data-dsq-comment-id="11078396" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078396, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078396" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078396); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078396); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078396">                <div class="dsq-comment-text" id="dsq-comment-text-11078396">        <p></p><p>No
+- problem, thanks for finding the typos.  These were meant to be some 
+-quick hacks, but took on a life of their own after a while.</p><br><p>I found this worked for configuring LAM, I'll send you more details in an email...</p><br><p>The contents of bash_profile should be as follows:</p><br><pre> <br>-bash-3.1# more .bash_profile <br># .bash_profile<p></p>
+-
+-<p># Get the aliases and functions<br>if [ -f ~/.bashrc ]; then<br>        . ~/.bashrc<br>fi</p>
+-
+-<p># User specific environment and startup programs</p>
+-
+-<p>LAMRSH="ssh -x"<br>export LAMRSH</p>
+-
+-<p>LD_LIBRARY_PATH="/usr/local/lam-7.1.2/lib/"<br>export LD_LIBRARY_PATH</p>
+-
+-<p>MPICH_PORT_RANGE="2000:8000"<br>export MPICH_PORT_RANGE</p>
+-
+-<p>PATH=$PATH:$HOME/bin</p>
+-
+-<p>PATH=/usr/local/lam-7.1.2/bin:$PATH</p>
+-
+-<p>MANPATH=/usr/local/lam-7.1.2/man:$MANPATH</p>
+-
+-<p>export PATH<br>export MANPATH<br></p></pre><br><p>Launch the cluster on EC2 and try booting LAM manually:</p><br><pre>[lamuser@domU-12-31-33-00-04-4B ~]$ lamboot /etc/mpd.hosts<p></p>
+-
+-<p>[lamuser@domU-12-31-33-00-04-4B ~]$ lamnodes<br>n0      <a href="http://domu-12-31-33-00-04-4b.usma1.compute.amazonaws.com/" rel="nofollow">domU-12-31-33-00-04-4B.usma1.c...</a>:1:origin,this_node<br>n1      <a href="http://domu-12-31-33-00-03-35.usma1.compute.amazonaws.com/" rel="nofollow">domU-12-31-33-00-03-35.usma1.c...</a>:1:<br>n2      <a href="http://domu-12-31-33-00-03-3c.usma1.compute.amazonaws.com/" rel="nofollow">domU-12-31-33-00-03-3C.usma1.c...</a>:1:<br>n3      <a href="http://domu-12-31-34-00-00-55.usma2.compute.amazonaws.com/" rel="nofollow">domU-12-31-34-00-00-55.usma2.c...</a>:1:</p>
+-
+-<p>[lamuser@domU-12-31-33-00-04-4B ~]$ tping N -c3<br>  1 byte from 3 remote nodes and 1 local node: 0.039 secs<br>  1 byte from 3 remote nodes and 1 local node: 0.004 secs<br>  1 byte from 3 remote nodes and 1 local node: 0.002 secs<br></p></pre><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078396"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078396">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078396); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078396, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078396" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078396);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078396" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078396); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078396, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078396"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078396"></li>            <li id="comment-11078395">  </li><li id="dsq-comment-11078395" data-dsq-comment-id="11078395" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand pete's profile">      <a href="http://disqus.com/guest/b528e02034427715c686d1fa1a0906a9/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078395, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078395" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">pete</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078395); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078395); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078395">                <div class="dsq-comment-text" id="dsq-comment-text-11078395">        <p></p><p>Found
+- another typo too, ok I'm nit picking. In the stop-cluster script the 
+-message says Stoping as opposed to stopping. A year ago when you first 
+-posted this stuff you mentioned that the reason why the non-root user 
+-was called lamuser was that the scripts were used for LAM in some 
+-previous incarnation. Since I'm actually trying to use LAM, if you have 
+-any LAM stuff around that might help me to iron out one or two problems I
+- still have.</p><br><p>Anyway, thanks again,<br>Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078395"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078395">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078395); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078395, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078395" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078395);" title="Link to comment by pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078395" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078395); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078395, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078395"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078395"></li>            <li id="comment-11078394">  </li><li id="dsq-comment-11078394" data-dsq-comment-id="11078394" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078394, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078394" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078394); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078394); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078394">                <div class="dsq-comment-text" id="dsq-comment-text-11078394">        <p></p><p>pete
+- found the error... the image Ids he entered into the config module 
+-inadvertently contained a capital letter.  This doesnât cause any 
+-problems for starting images since string case is ignored by Amazon. The
+- corresponding image id response string from AWS is always lowercase, so
+- the python script comparison on image ID string fails.</p><br><p>In the
+- next version of the scripts, I will handle upper/lowercase differences 
+-in the ami strings.  For now, just make sure to use all lower case or 
+-call the python .lower() method,</p><br><pre> <br>&gt;&gt;&gt; test = 'ami-fE9a7f97'<br>&gt;&gt;&gt; test.lower()<br>'ami-fe9a7f97'<br>&gt;&gt;&gt; <p></p>
+-
+-<p></p></pre><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078394"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078394">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078394); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078394, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078394" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078394);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078394" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078394); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078394, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078394"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078394"></li>            <li id="comment-11078393">  </li><li id="dsq-comment-11078393" data-dsq-comment-id="11078393" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand pete's profile">      <a href="http://disqus.com/guest/b528e02034427715c686d1fa1a0906a9/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078393, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078393" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">pete</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078393); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078393); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078393">                <div class="dsq-comment-text" id="dsq-comment-text-11078393">        <p></p><p>Can't get the ec-mpi-config to work. Says list index out of range for mpi-externalnames[0] on line 108<br>start cluster and check instances are OK so I think that python, EC, elementree<br>are OK<br>Any
+- ideas why? Has AWS changed the format of the response you're parsing 
+-(yes I have had a look at the python code but since I haven't used 
+-python before I can't see anything obvious to me)<br>BTW you have a typo in mpi config Numer of nodes as opposed to Number of nodes , it even shows in your example above.<br>Otherwise I like what you've done, I'd just like it to work for me.<br>Thanks,<br>Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078393"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078393">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078393); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078393, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078393" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078393);" title="Link to comment by pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078393" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078393); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078393, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078393"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078393"></li>            <li id="comment-11078392">  </li><li id="dsq-comment-11078392" data-dsq-comment-id="11078392" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078392, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078392" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078392); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078392); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078392">                <div class="dsq-comment-text" id="dsq-comment-text-11078392">        <p></p><p>Theo,</p><br><p>Sorry
+- for the delay in posting this and responding.  I've been working on a 
+-startup for the past 7 months and was in serious crunch mode.  Don't 
+-read too much into the large gap in posts, it is just me working on this
+- as a side-project.  I  finished moving the blog to another host and 
+-finally have some time to get back to the EC2 work.  This experience has
+- taught me to never name a series of blog posts "part 1 of N" :)</p><br><p>You
+- make some excellent points.  One thing that has changed since I wrote 
+-the first post is that EC2 now offers larger 64bit machine images with 
+-better I/O (you can provision an entire physical server and not be 
+-limited by sharing network resources in the virtual instance).  I'd like
+- to see if this improves the network performance.  I'm giving a talk on 
+-this in March, so I'm on the hook to have some benchmarks by then.</p><br><p>I
+- also agree on the mapreduce side.  For embarrassingly parallel 
+-problems, hadoop on ec2 is potentially much more attractive...more 
+-robust, easier for most people to program.  Ideally, I would like to do 
+-some comparisons between the two approaches and run the numbers.</p><br><p>The
+- performance of an EC2 MPI cluster is definitely going to be worse than 
+-your own custom hardware, but it still might fit certain niche 
+-situations.  In my case, I needed to run some MPI code for a large 
+-problem and didn't have access to a large enough cluster.  The 
+-performance on EC2 was nowhere near what you get on a high-end cluster, 
+-but it got the job done for a reasonable price.</p><br><p>This discussion on the beowulf list goes into more detail on the pros/cons:</p><br><p><a href="http://www.beowulf.org/pipermail/beowulf/2008-January/020490.html" rel="nofollow">http://www.beowulf.org/pipermail/beowulf/2008-January/020490.html</a></p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078392"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078392">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078392); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078392, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078392" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078392);" title="Link to comment by Pete">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078392" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078392); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078392, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078392"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078392"></li>            <li id="comment-11078391">  </li><li id="dsq-comment-11078391" data-dsq-comment-id="11078391" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Theo's profile">      <a href="http://disqus.com/guest/886f1df95cb2acd12d921ce12c253b0e/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078391, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/uploads/anonusers/211/1905/avatar32.jpg?1281549414" alt="">      </a>    </div>    <div id="dsq-comment-body-11078391" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.stillwater-sc.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Theo</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078391); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078391); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078391">                <div class="dsq-comment-text" id="dsq-comment-text-11078391">        <p></p><p>Does the 5 month hiatus in this project mean that it was a bad idea and you guys have learnt enough to waste no more time on it?</p><br><p>Given
+- the virtualization uncertainty, finding the right 
+-communication/computation balance for typical MPI programs appears to be
+- very unrewarding. Secondly, MPI development and debug and then QA and 
+-scale out are not addressed, which doesn't bode well. It appears most 
+-productive to have a local small cluster for development and debug, and 
+-then do QA and scale out on EC2, but some benchmarking numbers would 
+-really help.</p><br><p>If EC2 is only robust for embarrassingly parallel
+- problems, then MapReduce style programs are more attractive. There the 
+-size of the data set and how well it integrates in a distributed file 
+-system appear to be the problems to focus on. Or BOINC like approaches 
+-if there is no integrated DFS. Anyone have operational data on these 
+-approaches?</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078391"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078391">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078391); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078391, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078391" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078391);" title="Link to comment by Theo">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078391" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078391); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078391, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078391"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078391"></li>            <li id="comment-11078390">  </li><li id="dsq-comment-11078390" data-dsq-comment-id="11078390" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Patrick Ball's profile">      <a href="http://disqus.com/guest/0fdece3deaec55811c57381701e800d1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078390, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078390" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Patrick Ball</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078390); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078390); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078390">                <div class="dsq-comment-text" id="dsq-comment-text-11078390">        <p></p><p></p><br><p>the first two parts really set the stage ... Part 3?</p><br><p>:)</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078390"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078390">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078390); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078390, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078390" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078390);" title="Link to comment by Patrick Ball">          4 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078390" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078390); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078390, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078390"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078390"></li>            <li id="comment-11078389">  </li><li id="dsq-comment-11078389" data-dsq-comment-id="11078389" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Soo..'s profile">      <a href="http://disqus.com/guest/a652f3e673b4f32fe71b9aa9c63b39d9/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078389, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078389" class="dsq-comment-body">      <div class="dsq-comment-header">        <span class="dsq-commenter-name">Soo..</span>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078389); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078389); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078389">                <div class="dsq-comment-text" id="dsq-comment-text-11078389">        <p></p><p>What about that Part 3?  :)</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078389"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078389">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078389); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078389, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078389" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078389);" title="Link to comment by Soo..">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078389" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078389); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078389, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078389"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078389"></li>            <li id="comment-11078388">  </li><li id="dsq-comment-11078388" data-dsq-comment-id="11078388" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078388, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078388" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078388); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078388); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078388">                <div class="dsq-comment-text" id="dsq-comment-text-11078388">        <p></p><p>Update (7-24-07): Iâve made some important bug fixes to the scripts to address issues mentioned in the comments.</p><br><p>Specific changes made:</p><br>&lt;ul&gt;<br>&lt;li&gt;fixed lamuser home directory permissions bug&lt;/li&gt;<br>&lt;li&gt;fixed section of <a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a> which clobbered existing rsa keys on the client machine&lt;/li&gt;<br>&lt;li&gt;Updated calls of AWS python EC2 library to use API version 2007-01-19<br><a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=552&amp;categoryID=85" rel="nofollow">http://developer.amazonwebserv...</a>&lt;/li&gt;<br>&lt;li&gt;fixed mpdboot issue by using amazon internal DNS names in hosts files&lt;/li&gt;<br>&lt;li&gt;scripts should now work on windows/cygwin client environments&lt;/li&gt;<br>&lt;/ul&gt;<br><p>After
+- I run some benchmarks, I'm hoping to find some time to add LAM and 
+-OpenMPI to the EC2 image along with NFS configuration, C3 cluster tools,
+- Ganglia, and a benchmarking package.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078388"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078388">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078388); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078388, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078388" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078388);" title="Link to comment by Pete">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078388" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078388); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078388, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078388"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078388"></li>            <li id="comment-11078387">  </li><li id="dsq-comment-11078387" data-dsq-comment-id="11078387" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078387, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078387" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078387); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078387); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078387">                <div class="dsq-comment-text" id="dsq-comment-text-11078387">        <p></p><p>Ralph,</p><br><p>More
+- good points. I've been tied up with some other projects, but it sounds 
+-like enough feedback is in to make a revised version of the image and 
+-scripts. I expect the latency to vary a bit depending on the random EC2 
+-network topology when a cluster is launched...(instances on the same box
+- vs. over ethernet) that might explain the ringtest.  The mutual ssh 
+-access was set up since we do a lot of file/data shuffling between nodes
+- outside of MPI.</p><br><p>Thanks again, looking forward to hearing how the regression test system works out.</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078387"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078387">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078387); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078387, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078387" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078387);" title="Link to comment by Pete">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078387" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078387); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078387, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078387"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078387"></li>            <li id="comment-11078386">  </li><li id="dsq-comment-11078386" data-dsq-comment-id="11078386" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Ralph Giles's profile">      <a href="http://disqus.com/guest/ba607955ce29fde652c179bbe9710f63/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078386, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078386" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://advogato.org/person/rillian" target="_blank" class="dsq-commenter-name" rel="nofollow">Ralph Giles</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078386); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078386); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078386">                <div class="dsq-comment-text" id="dsq-comment-text-11078386">        <p></p><p>Yeah, that would work better. Some more detailed comments:</p><br>&lt;ul&gt;<br>&lt;li&gt;<p>Your image has /home/lamuser/.mpd.conf owned by root. I had to chown it to lamuser before I could start mpd.</p>&lt;/li&gt;<br>&lt;li&gt;<p>You
+- script passes the public dns names for the nodes into mpd.hosts. For 
+-that to work, a hole has to be opened in the firewall for the ports the 
+-mpi daemon is using. A simpler solution is to just pass the internal dns
+- names. Then all the traffic happens behind the firewall, which probably
+- also improves latency. (Although my ringtest was noticably slower than 
+-yours, averaging 2.2e-3 seconds/loop so who knows?)</p>&lt;/li&gt;<br>&lt;li&gt;<p>I
+- was surprised that when I originally ran ec2-add-keypair in the EC2 
+-tutorial that it uploaded the public key (ok) and printed out the 
+-private key (ok I guess) but didn't print out the public key locally 
+-(weird). Your scripts seem to assume the public key is available as 
+-id_rsa.pub on the client machine. Shouldn't this first be copied either 
+-from /root/.ssh/authorized_keys on the master node (as installed by 
+-amazon) or retrieved through the query interface?</p>&lt;/li&gt;<br>&lt;/ul&gt;<br><p>Is
+- the mutual ssh access required for more than just launching the MPI 
+-daemon? If all subsequent traffic goes through the mpi daemons, starting
+- mpd from the client machine, or automatically from the init scripts 
+-after pulling mpd.hosts from S3 would save the whole trouble, including 
+-uploading the private key at all.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078386"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078386">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078386); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078386, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078386" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078386);" title="Link to comment by Ralph Giles">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078386" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078386); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078386, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078386"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078386"></li>            <li id="comment-11078385">  </li><li id="dsq-comment-11078385" data-dsq-comment-id="11078385" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078385, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078385" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078385); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078385); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078385">                <div class="dsq-comment-text" id="dsq-comment-text-11078385">        <p></p><p>Ralph,</p><br><p>Good catch.  Thanks for pointing that out. I just lifted those passwordless ssh lines straight from an <a href="http://www.google.com/search?hl=en&amp;safe=off&amp;client=firefox-a&amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;hs=b16&amp;q=cp+id_rsa.pub+password++ssh+mpi+id_rsa&amp;btnG=Search" rel="nofollow">MPI tutorial</a>.</p><br><p>This might solve the clobbering as well (from <a href="http://www.maclife.com/forums/topic/61520" rel="nofollow">http://www.maclife.com/forums/topic/61520</a>):</p><br><p><code>cat id_rsa.pub &gt;&gt; .ssh/authorized_keys</code></p><br><p>"The
+- above command will create the "authorized_keys" file in the ".ssh" 
+-directory if that file doesn't already exist, and it will append the new
+- id_rsa.pub file to it if it does already exist."</p><br><p>I'll add 
+-that change to the scripts.  Good luck with the regression cluster, I 
+-heard Oracle developers do something like that using Condor on otherwise
+- idle desktops (see <a href="http://www.cs.wisc.edu/condor/doc/nmi-lisa2006-slides.pdf" rel="nofollow">http://www.cs.wisc.edu/condor/doc/nmi-lisa2006-slides.pdf</a>).</p><br><p>-Pete</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078385"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078385">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078385); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078385, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078385" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078385);" title="Link to comment by Pete">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078385" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078385); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078385, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078385"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078385"></li>            <li id="comment-11078384">  </li><li id="dsq-comment-11078384" data-dsq-comment-id="11078384" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Ralph Giles's profile">      <a href="http://disqus.com/guest/ba607955ce29fde652c179bbe9710f63/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078384, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078384" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://advogato.org/person/rillian" target="_blank" class="dsq-commenter-name" rel="nofollow">Ralph Giles</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078384); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078384); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078384">                <div class="dsq-comment-text" id="dsq-comment-text-11078384">        <p></p><p>===== DO NOT USE THESE SCRIPTS! =====</p><br><p>This section of <a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a> is a bit problematic:</p><br><p>os.system('cp %s ~/id_rsa.pub' % KEY_LOCATION )<br>os.system('cp ~/id_rsa.pub ~/.ssh/id_rsa')</p><br><p>This
+- will clobber any existing rsa key on the initiating machine's account, 
+-and with break normal auth on the next login if you have a different 
+-default rsa key!</p><br><p>The script should instead copy the private key directly from KEY_LOCATION to the nodes.</p><br><p>===== DO NOT USE THESE SCRIPTS! =====</p><br><p>Otherwise,
+- way cool. Thanks for putting this tutorial together. We're trying EC2 
+-clusters out as a way to get quicker feedback from regression tests 
+-after changes to our software. Unfortunately, with the one hour 
+-granularity I don't think it will be price competitive. We want 20-100 
+-nodes for about 5 minutes at a time.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078384"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078384">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078384); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078384, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078384" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078384);" title="Link to comment by Ralph Giles">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078384" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078384); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078384, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078384"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078384"></li>            <li id="comment-11078383">  </li><li id="dsq-comment-11078383" data-dsq-comment-id="11078383" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078383, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078383" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078383); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078383); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078383">                <div class="dsq-comment-text" id="dsq-comment-text-11078383">        <p></p><p>Mike
+- Cariaso modified my scripts to fix some path issues and got it working 
+-on a windows laptop, he might have also fixed some other errors I didn't
+- notice.  I haven't had a chance to try them yet, but you can download 
+-the modified scripts here:</p><br><p><a href="http://mpiblast.pbwiki.com/AmazonEC2" rel="nofollow">http://mpiblast.pbwiki.com/AmazonEC2</a></p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078383"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078383">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078383); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078383, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078383" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078383);" title="Link to comment by Pete">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078383" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078383); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078383, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078383"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078383"></li>            <li id="comment-11078382">  </li><li id="dsq-comment-11078382" data-dsq-comment-id="11078382" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Michael Creel's profile">      <a href="http://disqus.com/guest/464cf568b5b1dc355cd4dc676d32dda6/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078382, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078382" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://pareto.uab.es/mcreel/blog.html" target="_blank" class="dsq-commenter-name" rel="nofollow">Michael Creel</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078382); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078382); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078382">                <div class="dsq-comment-text" id="dsq-comment-text-11078382">        <p></p><p>Yep,
+- I run the mpi-config script right after creating the instances, doing 
+-just what you suggest. The fact that the instances start up at all seems
+- to me to mean that the keypair information is ok. Do you know if anyone
+- but you has been able to launch a cluster? Very cool stuff. I'm going 
+-to be looking into making a Debian AMI that works the same way.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078382"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078382">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078382); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078382, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078382" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078382);" title="Link to comment by Michael Creel">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078382" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078382); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078382, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078382"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078382"></li>            <li id="comment-11078381">  </li><li id="dsq-comment-11078381" data-dsq-comment-id="11078381" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Pete's profile">      <a href="http://disqus.com/guest/742736902afc4e0926b96932ada8cbc1/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078381, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078381" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://www.datawrangling.com/" target="_blank" class="dsq-commenter-name" rel="nofollow">Pete</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078381); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078381); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078381">                <div class="dsq-comment-text" id="dsq-comment-text-11078381">        <p></p><p>Michael,</p><br><p>I
+- haven't had the scripts prompt me for a password before, are you 
+-running them from your local machine? The mpi-config script expects the 
+-keyname and keypair location to match what was used to start the 
+-instance.  Take a look at your <a href="http://ec2config.py/" rel="nofollow">EC2config.py</a>
+- file and make sure the instances were all started with your own keypair
+- (i used the gsg keypair I created on my laptop in the Amazon "getting 
+-started guide" tutorial):</p><br><p><br><br></p><br><p>AWS_ACCESS_KEY_ID = âYOUR_KEY_ID_HEREâ<br>AWS_SECRET_ACCESS_KEY = âYOUR_KEY_HEREâ<br>MASTER_IMAGE_ID = "ami-3e836657"<br>IMAGE_ID = "ami-3e836657"<br>KEYNAME = "gsg-keypair"<br>KEY_LOCATION = "~/id_rsa-gsg-keypair"<br>DEFAULT_CLUSTER_SIZE = 5</p><br><p><br><br></p><br><p>I'm
+- working on an updated version of the scripts and EC2 image which should
+- make things a bit cleaner.  Sorry the code is ugly right now in terms 
+-of error handling...I just wanted to toss something together to get 
+-people started :)</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078381"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078381">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078381); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078381, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078381" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078381);" title="Link to comment by Pete">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078381" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078381); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078381, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078381"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078381"></li>            <li id="comment-11078380">  </li><li id="dsq-comment-11078380" data-dsq-comment-id="11078380" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Michael Creel's profile">      <a href="http://disqus.com/guest/464cf568b5b1dc355cd4dc676d32dda6/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078380, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078380" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://pareto.uab.es/mcreel/blog.html" target="_blank" class="dsq-commenter-name" rel="nofollow">Michael Creel</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078380); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078380); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078380">                <div class="dsq-comment-text" id="dsq-comment-text-11078380">        <p></p><p>A little report on my trial.<br>1) ./<a href="http://ec2-start_cluster.py/" rel="nofollow">ec2-start_cluster.py</a>
+- is not always successful in getting the requested number of nodes to 
+-come up. The instances sometimes have status "terminated" before 
+-anything is done with them.</p><br><p>2) When the 5 nodes all come up, I still get a problem with ./<a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a> requesting a root password:</p><br><p>michael@yosemite:~/ec2/AmazonEC2_MPI_scripts$ ./<a href="http://ec2-mpi-config.py/" rel="nofollow">ec2-mpi-config.py</a></p><br><p>---- MPI Cluster Details ----<br>Numer of nodes = 5<br>Instance= i-e39c7a8a hostname= <a href="http://ec2-72-44-45-138.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-138.z-2.compute-1...</a> state= running<br>Instance= i-e29c7a8b hostname= <a href="http://ec2-72-44-45-185.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-185.z-2.compute-1...</a> state= running<br>Instance= i-e59c7a8c hostname= <a href="http://ec2-72-44-45-186.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-186.z-2.compute-1...</a> state= running<br>Instance= i-e49c7a8d hostname= <a href="http://ec2-72-44-45-122.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-122.z-2.compute-1...</a> state= running<br>Instance= i-e79c7a8e hostname= <a href="http://ec2-72-44-45-60.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-60.z-2.compute-1....</a> state= running</p><br><p>The master node is <a href="http://ec2-72-44-45-138.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-138.z-2.compute-1...</a></p><br><p>Writing out mpd.hosts file<br>nslookup <a href="http://ec2-72-44-45-138.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-138.z-2.compute-1...</a><br>(0, 'Server:\t\t158.109.0.1\nAddress:\t158.109.0.1#53\n\nNon-authoritative answer:\nName:\<a href="http://tec2-72-44-45-138.z-2.compute-1.amazonaws.com/" rel="nofollow">tec2-72-44-45-138.z-2.compute-...</a>\nAddress: 72.44.45.138\n')<br>nslookup <a href="http://ec2-72-44-45-185.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-185.z-2.compute-1...</a><br>(0, 'Server:\t\t158.109.0.1\nAddress:\t158.109.0.1#53\n\nNon-authoritative answer:\nName:\<a href="http://tec2-72-44-45-185.z-2.compute-1.amazonaws.com/" rel="nofollow">tec2-72-44-45-185.z-2.compute-...</a>\nAddress: 72.44.45.185\n')<br>nslookup <a href="http://ec2-72-44-45-186.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-186.z-2.compute-1...</a><br>(0, 'Server:\t\t158.109.0.1\nAddress:\t158.109.0.1#53\n\nNon-authoritative answer:\nName:\<a href="http://tec2-72-44-45-186.z-2.compute-1.amazonaws.com/" rel="nofollow">tec2-72-44-45-186.z-2.compute-...</a>\nAddress: 72.44.45.186\n')<br>nslookup <a href="http://ec2-72-44-45-122.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-122.z-2.compute-1...</a><br>(0, 'Server:\t\t158.109.0.1\nAddress:\t158.109.0.1#53\n\nNon-authoritative answer:\nName:\<a href="http://tec2-72-44-45-122.z-2.compute-1.amazonaws.com/" rel="nofollow">tec2-72-44-45-122.z-2.compute-...</a>\nAddress: 72.44.45.122\n')<br>nslookup <a href="http://ec2-72-44-45-60.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-60.z-2.compute-1....</a><br>(0, 'Server:\t\t158.109.0.1\nAddress:\t158.109.0.1#53\n\nNon-authoritative answer:\nName:\<a href="http://tec2-72-44-45-60.z-2.compute-1.amazonaws.com/" rel="nofollow">tec2-72-44-45-60.z-2.compute-1...</a>\nAddress: 72.44.45.60\n')<br>Warning: Permanently added '<a href="http://ec2-72-44-45-138.z-2.compute-1.amazonaws.com/" rel="nofollow">ec2-72-44-45-138.z-2.compute-1...</a>,72.44.45.138' (RSA) to the list of known hosts.<br>id_rsa.pub                                                                             100% 1675     1.6KB/s   00:00<br>root@ec2<a href="http://-72-44-45-138.z-2.compute-1.amazonaws.com/" rel="nofollow">-72-44-45-138.z-2.compute-1.am...</a>'s password:</p><br><p>This is as far as I can get at the moment. Looks like a minor problem. Cheers, M.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078380"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078380">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078380); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078380, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078380" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078380);" title="Link to comment by Michael Creel">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078380" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078380); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078380, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078380"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078380"></li>            <li id="comment-11078379">  </li><li id="dsq-comment-11078379" data-dsq-comment-id="11078379" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Michael Creel's profile">      <a href="http://disqus.com/guest/464cf568b5b1dc355cd4dc676d32dda6/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078379, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078379" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://pareto.uab.es/mcreel/blog.html" target="_blank" class="dsq-commenter-name" rel="nofollow">Michael Creel</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078379); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078379); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078379">                <div class="dsq-comment-text" id="dsq-comment-text-11078379">        <p></p><p>One question, do you know if something like an NFS shared home directory is possible. Using S3, possibly?</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078379"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078379">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078379); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078379, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078379" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078379);" title="Link to comment by Michael Creel">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078379" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078379); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078379, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078379"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078379"></li>            <li id="comment-11078378">  </li><li id="dsq-comment-11078378" data-dsq-comment-id="11078378" class="dsq-comment dsq-clearfix                        " style="margin-left:0px;">    <div class="dsq-avatar dsq-tt" title="Expand Michael Creel's profile">      <a href="http://disqus.com/guest/464cf568b5b1dc355cd4dc676d32dda6/" onclick="DISQUS.dtpl.actions.fire('profile.show', 11078378, null); return false">        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/noavatar32.png" class="dsq-deferred-avatar" data-src="http://mediacdn.disqus.com/1349483138/images/noavatar32.png" alt="">      </a>    </div>    <div id="dsq-comment-body-11078378" class="dsq-comment-body">      <div class="dsq-comment-header">        <a href="http://pareto.uab.es/mcreel/blog.html" target="_blank" class="dsq-commenter-name" rel="nofollow">Michael Creel</a>                <span class="dsq-collapsed-count">                      1 comment collapsed                  </span>                <a href="#" class="dsq-collapse-toggle dsq-collapse" title="Collapse thread" onclick="DISQUS.dtpl.actions.fire('comments.collapse', 11078378); return false;"><span>Collapse</span></a>        <a href="#" class="dsq-collapse-toggle dsq-expand" title="Expand thread" onclick="DISQUS.dtpl.actions.fire('comments.expand', 11078378); return false;"><span>Expand</span></a>      </div>        <div class="dsq-comment-message" id="dsq-comment-message-11078378">                <div class="dsq-comment-text" id="dsq-comment-text-11078378">        <p></p><p>Excellent
+- stuff! I've gotten started with EC2 and I'll be trying your images out 
+-soon. I doubt that I'll be trying to make ParallelKnoppix work on EC2, 
+-because your approach is the right one, I think. PK is designed to use 
+-when the hardware is not known ahead of time. With EC2, the hardware is 
+-known, so a tailor-made image is the way to go. Your scripts allow an 
+-on-demand cluster to be created in minutes, and that's all that PK 
+-offers, anyway. PK usually needs some remastering so that users can add 
+-their own packages. Re-bundling an EC2 image is completely analogous. 
+-I'm planning on doing just that, probably starting with your images, and
+- doing some testing of latency on tasks that require different degrees 
+-of internode communication. Thanks for all this, it'll make the rest an 
+-easy job.</p><p></p>      </div>                        </div>            <!-- edit box dynamically inserted here -->      <div id="dsq-append-edit-11078378"></div>        <div class="dsq-comment-footer">    <ul class="dsq-comment-actions">              <li id="dsq-like-11078378">          <span class="dsq-like-thumb dsq-font">A</span>          <a href="#" onclick="DISQUS.dtpl.actions.fire('comments.like', this,11078378); return false">Like</a>        </li>                          <li>          <a href="#" class="dsq-comment-reply" onclick="DISQUS.dtpl.actions.fire('comments.reply',11078378, this); return false">Reply</a>        </li>         </ul>    <ul class="dsq-comment-meta">      <li>  <a href="#comment-11078378" onclick="DISQUS.dtpl.actions.fire('comments.permalink', 11078378);" title="Link to comment by Michael Creel">          5 years ago      </a></li>            <li style="display:none">          <a href="#" id="dsq-comment-like-count-11078378" class="dsq-comment-like-count" onclick="return DISQUS.dtpl.actions.fire('comments.showUserVotes', 11078378); return false">0          Like      </a>      </li>              <li class="dsq-comment-flag" style="visibility: hidden">          <a href="#" class="dsq-comment-flag dsq-font" onclick="return DISQUS.dtpl.actions.fire('comments.report', 11078378, false);">F</a>        </li>          </ul>  </div>      <!-- reply box dynamically inserted here -->      <div id="dsq-append-reply-11078378"></div>    </div>  </li>  <!-- new replies dynamically inserted here -->  <li id="dsq-append-post-11078378"></li>      </ul>        <div id="dsq-pagination">      <ul id="dsq-footer" class="dsq-clearfix">        <div id="dsq-subscribe">            <li>      <a href="#" class="dsq-subscribe-email" onclick="return DISQUS.dtpl.actions.fire('thread.subscribe');">        <span class="dsq-font">M</span> <em>Subscribe by email</em>      </a>    </li>    <li>    <a href="http://datawranglingblog.disqus.com/mpi_cluster_with_python_and_amazon_ec2_part_2_of_3/latest.rss" class="dsq-subscribe-rss">      <span class="dsq-font">S</span> <em>RSS</em>    </a>  </li>    </div>  </ul>    </div>          <h3 class="dsq-h3-reactions">Reactions</h3>    <ul id="dsq-reactions" class="dsq-reactions dsq-clearfix">                <li id="dsq-reaction-12269320">    <div class="dsq-reaction-avatar dsq-avatar dsq-tt" data-dsq-content-id="dsq-reaction-tooltip-12269320">                    <a target="_blank" href="http://twitter.com/mndoci/status/3229425239">                    <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/3719866772_11f68524f0_normal.xml">                    </a>          </div>    <div id="dsq-reaction-tooltip-12269320" class="dsq-reaction-tooltip" style="display:none">      <div class="dsq-reaction-tooltip-container">        <div class="dsq-reaction-body">@mjbommar MPI on EC2 http://bit.ly/13BcCR  and http://arxiv.org/pdf/0901.0029</div>        <div class="dsq-reaction-date">3 years ago</div>        <div class="dsq-reaction-user">@mndoci</div>      </div>    </div>  </li>          </ul>                  <div class="dsq-trackback-url">      Trackback URL      <input onclick="this.select()" readonly="true" value="http://disqus.com/forums/datawranglingblog/mpi_cluster_with_python_and_amazon_ec2_part_2_of_3/trackback/">    </div>      </div><div>  </div></div>
+-<script type="text/javascript">
+-  /**
+-    * var disqus_identifier; [Optional but recommended: Define a unique identifier (e.g. post id or slug) for this thread] 
+-    */
+-  (function() {
+-   var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+-   dsq.src = 'http://datawranglingblog.disqus.com/embed.js';
+-   (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+-  })();
+-</script>
+-<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript=datawranglingblog">comments powered by Disqus.</a></noscript>
+-<a href="http://disqus.com/" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>
+-<!-- End Disqus Comments -->
+-
+-	
+-			  <div class="footer">
+-			    <div class="contact">
+-			      <p>
+-			        Copyright Â© 2007-2012 Data Wrangling, LLC<br>
+-			        info@datawrangling.com
+-			      </p>
+-						<p>
+-							Powered by <a href="http://github.com/">Github, </a><a href="http://jekyllrb.com/">Jekyll</a>, &amp; <a href="http://www.sinatrarb.com/">Sinatra</a>.  Hosted on <a href="http://heroku.com/">Heroku</a>.
+-						</p>	
+-			    </div>
+-			    <div class="contact">
+-			      <!-- <p>
+-			        <a href="http://github.com/datawrangling/">github.com/datawrangling</a><br />
+-			        <a href="http://twitter.com/peteskomoroch/">twitter.com/peteskomoroch</a><br />
+-			        <a href="http://linkedin.com/peterskomoroch/">linkedin.com/peterskomoroch</a>
+-			      </p> -->
+-			    </div>
+-			    <div class="rss">
+-			      <a href="http://feeds.feedburner.com/DataWrangling">
+-			        <img src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/feed-icon32x32.png" alt="Subscribe to RSS Feed">
+-			      </a>
+-			    </div>
+-			  </div>
+-	
+-			</div>
+-			
+-		</div>	
+-
+-
+-
+-	</div>
+-</div>
+-
+-
+-<!-- Google Analytics -->
+-<script type="text/javascript">
+-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+-</script><script src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/ga.js" type="text/javascript"></script>
+-<script type="text/javascript">
+-var pageTracker = _gat._getTracker("UA-3430463-1");
+-pageTracker._trackPageview();
+-</script>
+-<!-- Google Analytics end -->
+-
+-
+-
+-
+-
+-<iframe src="mpi-cluster-with-python-and-amazon-ec2-part-2-of-3_files/def.html" style="position: absolute; top: -2000px; left: 0px;" id="easyXDM_DISQUS_net_default5937_provider" name="easyXDM_DISQUS_net_default5937_provider" frameborder="0"></iframe></body></html>
+\ No newline at end of file
+Index: ../trunk-jpl/externalpackages/ec2api/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/ec2api/install.sh	(revision 13947)
++++ ../trunk-jpl/externalpackages/ec2api/install.sh	(revision 13948)
+@@ -7,6 +7,7 @@
+ 
+ #Download from ISSM server
+ $ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/ec2-api-tools.zip' 'ec2-api-tools.zip'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/docs/ec2-ug.pdf' 'ec2-ug.pdf'
+ 
+ #Untar 
+ unzip ec2-api-tools.zip
+Index: ../trunk-jpl/externalpackages/scotch/ptscotch_user5.1.pdf
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/externalpackages/scotch/scotch_user5.1.pdf
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/externalpackages/scotch/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/scotch/install.sh	(revision 13947)
++++ ../trunk-jpl/externalpackages/scotch/install.sh	(revision 13948)
+@@ -11,6 +11,8 @@
+ 
+ #Download from ISSM server
+ $ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/scotch_5.1.6.tar.gz' 'scotch_5.1.6.tar.gz'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/docs/ptscotch_user5.1.pdf' 'ptscotch_user5.1.pdf'
++$ISSM_DIR/scripts/DownloadExternalPackage.py 'http://issm.jpl.nasa.gov/files/externalpackages/docs/scotch_user5.1.pdf' 'scotch_user5.1.pdf'
+ 
+ # Untar 
+ tar -xvzf scotch_5.1.6.tar.gz
Index: /issm/oecreview/Archive/13393-13976/ISSM-13948-13949.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13948-13949.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13948-13949.diff	(revision 13980)
@@ -0,0 +1,25 @@
+Index: ../trunk-jpl/externalpackages/matlab/install.sh
+===================================================================
+--- ../trunk-jpl/externalpackages/matlab/install.sh	(revision 13948)
++++ ../trunk-jpl/externalpackages/matlab/install.sh	(revision 13949)
+@@ -1,3 +1,20 @@
+ #!/bin/bash
++set -eu
++
++#Erase symlink
+ rm -rf install
++
++#Select or create a new simlink
++#ln -s /usr/local/pkgs/matlab-7.6/ install
++#ln -s /discover/vis/mathworks/matlab_r2011b/ install
++#ln -s /usr/local/matlab704/ install
++#ln -s /usr/local/matlab711/ install
+ ln -s /usr/local/matlab712/ install
++
++# Macintosh (OSX) simlink 
++#ln -s /Applications/MATLAB_R2008a/ install
++#ln -s /Applications/MATLAB_R2009a.app/ install
++#ln -s /Applications/MATLAB_R2010a.app/ install
++#ln -s /Applications/MATLAB_R2012a.app/ install
++#ln -s /Applications/MATLAB_R2011a.app/ install
++#ln -s /Applications/MATLAB*.app/ install
Index: /issm/oecreview/Archive/13393-13976/ISSM-13949-13950.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13949-13950.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13949-13950.diff	(revision 13980)
@@ -0,0 +1,61 @@
+Index: ../trunk-jpl/src/m/io/savevars.py
+===================================================================
+--- ../trunk-jpl/src/m/io/savevars.py	(revision 13949)
++++ ../trunk-jpl/src/m/io/savevars.py	(revision 13950)
+@@ -31,13 +31,14 @@
+ 		raise TypeError("Missing file name.")
+ 
+ 	if   len(args) >= 3 and isinstance(args[1],(str,unicode)):    # (filename,name,value)
+-		nvdict[args[1]]=args[2]
++		for i in xrange(1,len(args),2):
++			nvdict[args[i]]=args[i+1]
+ 
+-	elif len(args) >= 3 and isinstance(args[1],list) and isinstance(args[2],list):    # (filename,[names],[values])
++	elif len(args) == 3 and isinstance(args[1],list) and isinstance(args[2],list):    # (filename,[names],[values])
+ 		for name,value in zip(args[1],args[2]):
+ 			nvdict[name]=value
+ 
+-	elif len(args) >= 2 and isinstance(args[1],dict):    # (filename,{names:values})
++	elif len(args) == 2 and isinstance(args[1],dict):    # (filename,{names:values})
+ 		nvdict=args[1]
+ 
+ 	else:
+Index: ../trunk-jpl/src/m/io/loadvars.py
+===================================================================
+--- ../trunk-jpl/src/m/io/loadvars.py	(revision 13949)
++++ ../trunk-jpl/src/m/io/loadvars.py	(revision 13950)
+@@ -31,13 +31,14 @@
+ 		raise TypeError("Missing file name.")
+ 
+ 	if   len(args) >= 2 and isinstance(args[1],(str,unicode)):    # (filename,name)
+-		nvdict[args[1]]=None
++		for name in args[1:]:
++			nvdict[name]=None
+ 
+-	elif len(args) >= 2 and isinstance(args[1],list):    # (filename,[names])
++	elif len(args) == 2 and isinstance(args[1],list):    # (filename,[names])
+ 		for name in args[1]:
+ 			nvdict[name]=None
+ 
+-	elif len(args) >= 2 and isinstance(args[1],dict):    # (filename,{names:values})
++	elif len(args) == 2 and isinstance(args[1],dict):    # (filename,{names:values})
+ 		nvdict=args[1]
+ 
+ 	elif len(args) == 1:    #  (filename)
+@@ -70,12 +71,13 @@
+ 	my_shelf.close()
+ 
+ 	if   len(args) >= 2 and isinstance(args[1],(str,unicode)):    # (value)
+-		return nvdict[args[1]]
++		value=[nvdict[name] for name in args[1:]]
++		return value
+ 
+-	elif len(args) >= 2 and isinstance(args[1],list):    # ([values])
++	elif len(args) == 2 and isinstance(args[1],list):    # ([values])
+ 		value=[nvdict[name] for name in args[1]]
+ 		return value
+ 
+-	elif (len(args) >= 2 and isinstance(args[1],dict)) or (len(args) == 1):    # ({names:values})
++	elif (len(args) == 2 and isinstance(args[1],dict)) or (len(args) == 1):    # ({names:values})
+ 		return nvdict
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13950-13951.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13950-13951.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13950-13951.diff	(revision 13980)
@@ -0,0 +1,34 @@
+Index: ../trunk-jpl/src/m/classes/mesh.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/mesh.py	(revision 13950)
++++ ../trunk-jpl/src/m/classes/mesh.py	(revision 13951)
+@@ -131,12 +131,12 @@
+ 		md = checkfield(md,'mesh.x','NaN',1,'size',[md.mesh.numberofvertices])
+ 		md = checkfield(md,'mesh.y','NaN',1,'size',[md.mesh.numberofvertices])
+ 		md = checkfield(md,'mesh.z','NaN',1,'size',[md.mesh.numberofvertices])
+-		md = checkfield(md,'mesh.elements','NaN',1,'>',0,'values',range(1,md.mesh.numberofvertices+1))
++		md = checkfield(md,'mesh.elements','NaN',1,'>',0,'values',numpy.arange(1,md.mesh.numberofvertices+1))
+ 		if md.mesh.dimension==2:
+ 			md = checkfield(md,'mesh.elements','size',[md.mesh.numberofelements,3])
+ 		else:
+ 			md = checkfield(md,'mesh.elements','size',[md.mesh.numberofelements,6])
+-		if numpy.any(numpy.logical_not(ismember(range(1,md.mesh.numberofvertices+1),md.mesh.elements))):
++		if numpy.any(numpy.logical_not(ismember(numpy.arange(1,md.mesh.numberofvertices+1),md.mesh.elements))):
+ 			md.checkmessage("orphan nodes have been found. Check the mesh outline")
+ 		md = checkfield(md,'mesh.dimension','values',[2,3])
+ 		md = checkfield(md,'mesh.numberoflayers','>=',0)
+Index: ../trunk-jpl/src/m/classes/flowequation.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/flowequation.py	(revision 13950)
++++ ../trunk-jpl/src/m/classes/flowequation.py	(revision 13951)
+@@ -67,8 +67,8 @@
+ 				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',[1,2])
+ 				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',[1,2])
+ 			else:
+-				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',range(0,7+1))
+-				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',range(0,7+1))
++				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',numpy.arange(0,7+1))
++				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',numpy.arange(0,7+1))
+ 			if not (self.ismacayealpattyn or self.ishutter or self.isstokes or self.isl1l2):
+ 				md.checkmessage("no element types set for this model. At least one of ismacayealpattyn, ishutter or isstokes need to be =1")
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13951-13952.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13951-13952.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13951-13952.diff	(revision 13980)
@@ -0,0 +1,67 @@
+Index: ../trunk-jpl/src/m/plot/radarpower.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/radarpower.m	(revision 13951)
++++ ../trunk-jpl/src/m/plot/radarpower.m	(revision 13952)
+@@ -31,14 +31,14 @@
+ %figure out if we should go look for Greenland or Antarctica geotiff, or if user provided one.
+ if ~exist(options,'overlay_image'),
+ 	if strcmpi(md.mesh.hemisphere,'n'),
+-		%if ~exist([jplsvn() '/projects/ModelData/MOG/mog150_greenland_map.jpg']),
+-		%	error(['radarpower error message: file ' jplsvn() '/projects/ModelData/MOG/mog150_greenland_map.jpg not found.']);
++		%if ~exist(['/u/astrid-r1b/ModelData/MOG/mog150_greenland_map.jpg']),
++		%	error(['radarpower error message: file ' '/u/astrid-r1b/ModelData/MOG/mog150_greenland_map.jpg not found.']);
+ 		%end
+ 		%name = 'mog150_greenland_map';
+ 		%name = 'mog100_hp1_v10';
+ 		%%name = 'mog500_hp1_v10';
+-		%jpgim=[jplsvn() '/projects/ModelData/MOG/' name '.jpg'];
+-		%geom=load([jplsvn() '/projects/ModelData/MOG/' name '.jpgw'],'ascii');
++		%jpgim=['/u/astrid-r1b/ModelData/MOG/' name '.jpg'];
++		%geom=load(['/u/astrid-r1b/ModelData/MOG/' name '.jpgw'],'ascii');
+ 		%%jpgim='/u/astrid-r1b/morlighe/issmjpl/projects/MorlighemGRL2012/Data/Mosaic_amp_asar2010.jpg';
+ 		%%geom=load('/u/astrid-r1b/morlighe/issmjpl/projects/MorlighemGRL2012/Data/Mosaic_amp_asar2010.jpgw');
+ 		%jpgim='/u/astrid-r1b/morlighe/issmjpl/projects/MorlighemGRL2012/Data/Russel_asar2010.png';
+@@ -64,15 +64,15 @@
+ 		%md.radaroverlay.x=(xmin:(xmax-xmin)/(size(md.radaroverlay.pwr,2)-1):xmax);
+ 		%md.radaroverlay.y=(ymin:(ymax-ymin)/(size(md.radaroverlay.pwr,1)-1):ymax);
+ 		if highres,
+-			if ~exist([jplsvn() '/projects/ModelData/MOG/mog100_r2_hp1.tif']),
+-				error(['radarpower error message: file ' jplsvn() '/projects/ModelData/MOG/mog100_r2_hp1.tif not found.']);
++			if ~exist(['/u/astrid-r1b/ModelData/MOG/mog100_r2_hp1.tif']),
++				error(['radarpower error message: file ' '/u/astrid-r1b/ModelData/MOG/mog100_r2_hp1.tif not found.']);
+ 			end
+-			geotiff_name=[jplsvn() '/projects/ModelData/MOG/mog100_r2_hp1.tif'];
++			geotiff_name=['/u/astrid-r1b/ModelData/MOG/mog100_r2_hp1.tif'];
+ 		else
+-			if ~exist([jplsvn() '/projects/ModelData/MOG/mog500_r2_hp1.tif']),
+-				error(['radarpower error message: file ' jplsvn() '/projects/ModelData/MOG/mog500_r2_hp1.tif not found.']);
++			if ~exist(['/u/astrid-r1b/ModelData/MOG/mog500_r2_hp1.tif']),
++				error(['radarpower error message: file ' '/u/astrid-r1b/ModelData/MOG/mog500_r2_hp1.tif not found.']);
+ 			end
+-			geotiff_name=[jplsvn() '/projects/ModelData/MOG/mog500_r2_hp1.tif'];
++			geotiff_name=['/u/astrid-r1b/ModelData/MOG/mog500_r2_hp1.tif'];
+ 		end
+ 
+ 		%Name of image
+@@ -91,15 +91,15 @@
+ 
+ 	elseif strcmpi(md.mesh.hemisphere,'s'),
+ 		if highres,
+-			if ~exist([jplsvn() '/projects/ModelData/MosaicTiffRsat/amm125m_v2_200m.tif']),
+-				error(['radarpower error message: file ' jplsvn() '/projects/ModelData/MosaicTiffRsat/amm125m_v2_200m.tif not found.']);
++			if ~exist(['/u/astrid-r1b/ModelData/MosaicTiffRsat/amm125m_v2_200m.tif']),
++				error(['radarpower error message: file ' '/u/astrid-r1b/ModelData/MosaicTiffRsat/amm125m_v2_200m.tif not found.']);
+ 			end
+-			geotiff_name=[jplsvn() '/projects/ModelData/MosaicTiffRsat/amm125m_v2_200m.tif'];
++			geotiff_name=['/u/astrid-r1b/ModelData/MosaicTiffRsat/amm125m_v2_200m.tif'];
+ 		else
+-			if ~exist([jplsvn() '/projects/ModelData/MosaicTiffRsat/amm125m_v2_1km.tif']),
+-				error(['radarpower error message: file ' jplsvn() '/projects/ModelData/MosaicTiffRsat/amm125m_v2_1km.tif not found.']);
++			if ~exist(['/u/astrid-r1b/ModelData/MosaicTiffRsat/amm125m_v2_1km.tif']),
++				error(['radarpower error message: file ' '/u/astrid-r1b/ModelData/MosaicTiffRsat/amm125m_v2_1km.tif not found.']);
+ 			end
+-			geotiff_name=[jplsvn() '/projects/ModelData/MosaicTiffRsat/amm125m_v2_1km.tif'];
++			geotiff_name=['/u/astrid-r1b/ModelData/MosaicTiffRsat/amm125m_v2_1km.tif'];
+ 		end
+ 
+ 		%Name of image
Index: /issm/oecreview/Archive/13393-13976/ISSM-13952-13953.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13952-13953.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13952-13953.diff	(revision 13980)
@@ -0,0 +1,39 @@
+Index: ../trunk-jpl/src/m/classes/organizer.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/organizer.py	(revision 13952)
++++ ../trunk-jpl/src/m/classes/organizer.py	(revision 13953)
+@@ -4,6 +4,7 @@
+ from loadvars import *
+ from loadmodel import *
+ from savevars import *
++from model import model
+ 
+ class organizer(object):
+ 	"""
+@@ -43,7 +44,7 @@
+ 
+ 		#Get repository
+ 		repository=options.getfieldvalue('repository','./')
+-		if not isinstance(repository(str,unicode)):
++		if not isinstance(repository,(str,unicode)):
+ 			raise TypeError("repository is not a string")
+ 		if not os.path.isdir(repository):
+ 			raise IOError("Directory '%s' not found" % repository)
+@@ -55,7 +56,7 @@
+ 		#Get trunk prefix (only if provided by user)
+ 		if options.exist('trunkprefix'):
+ 			trunkprefix=options.getfieldvalue('trunkprefix','')
+-			if not isinstance(trunkprefix(str,unicode)):
++			if not isinstance(trunkprefix,(str,unicode)):
+ 				raise TypeError("trunkprefix is not a string")
+ 			if not strcmp(trunkprefix,trunkprefix.strip()) or len(trunkprefix.split()) > 1:
+ 				raise TypeError("trunkprefix should not have any white space")
+@@ -136,7 +137,7 @@
+ 		self._currentstep+=1
+ 
+ 		#if requestedsteps = 0, print all steps in self 
+-		if any(self.requestedsteps==0):
++		if 0 in self.requestedsteps:
+ 			if self._currentstep==1:
+ 				print "   prefix: %s" % self.prefix
+ 			print "   step #%2i : %s" % (self.steps[self._currentstep-1]['id'],self.steps[self._currentstep-1]['string'])
Index: /issm/oecreview/Archive/13393-13976/ISSM-13953-13954.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13953-13954.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13953-13954.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/c/solutions/issm.cpp
+===================================================================
+--- ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13953)
++++ ../trunk-jpl/src/c/solutions/issm.cpp	(revision 13954)
+@@ -25,7 +25,7 @@
+ 	delete femmodel;
+ 
+ 	/*Finalize environment:*/
+-	//EnvironmentFinalize();
++	EnvironmentFinalize();
+ 
+ 	/*Finalize exception trapping: */
+ 	ExceptionTrapEnd();
Index: /issm/oecreview/Archive/13393-13976/ISSM-13954-13955.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13954-13955.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13954-13955.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/m/classes/organizer.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/organizer.py	(revision 13954)
++++ ../trunk-jpl/src/m/classes/organizer.py	(revision 13955)
+@@ -132,7 +132,7 @@
+ 
+ 		#Add step
+ 		self.steps.append(OrderedDict())
+-		self.steps[-1]['id']=len(self.steps)+1
++		self.steps[-1]['id']=len(self.steps)
+ 		self.steps[-1]['string']=string
+ 		self._currentstep+=1
+ 
+@@ -140,7 +140,7 @@
+ 		if 0 in self.requestedsteps:
+ 			if self._currentstep==1:
+ 				print "   prefix: %s" % self.prefix
+-			print "   step #%2i : %s" % (self.steps[self._currentstep-1]['id'],self.steps[self._currentstep-1]['string'])
++			print "   step #%i : %s" % (self.steps[self._currentstep-1]['id'],self.steps[self._currentstep-1]['string'])
+ 
+ 		#Ok, now if _currentstep is a member of steps, return true
+ 		if self._currentstep in self.requestedsteps:
Index: /issm/oecreview/Archive/13393-13976/ISSM-13955-13956.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13955-13956.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13955-13956.diff	(revision 13980)
@@ -0,0 +1,46 @@
+Index: ../trunk-jpl/src/android/ISSM/jni/Main_nojavah.cpp
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/Main_nojavah.cpp	(revision 0)
++++ ../trunk-jpl/src/android/ISSM/jni/Main_nojavah.cpp	(revision 13956)
+@@ -0,0 +1,40 @@
++#include <jni.h>
++#include "../../../c/android/fac.h"
++namespace com_example_issm
++{
++	static jlong factorial(JNIEnv *env, jclass clazz, jlong n)
++	{
++		fac *f = new fac();
++		jlong result = (jlong) (f->factorial(n));
++		delete(f);
++		return (jlong) result;
++	}
++//------------------------------------------------------------------------------------
++	static JNINativeMethod method_table[] = {
++			{"fac" ,"(J)J" , (void *) factorial},
++	};
++}
++
++using namespace com_example_issm;
++
++extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
++{
++    JNIEnv* env;
++    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
++        return -1;
++    }
++    else
++    {
++    	jclass clazz = env->FindClass("com/example/issm/IssmJni");
++    	if(clazz)
++    	{
++    		env->RegisterNatives(clazz, method_table, 1);
++    		env->DeleteLocalRef(clazz);
++    		return JNI_VERSION_1_6;
++    	}
++    	else return -1;
++    }
++
++    // Get jclass with env->FindClass.
++    // Register methods with env->RegisterNatives.
++}
+\ No newline at end of file
Index: /issm/oecreview/Archive/13393-13976/ISSM-13956-13957.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13956-13957.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13956-13957.diff	(revision 13980)
@@ -0,0 +1,26 @@
+Index: ../trunk-jpl/src/m/plot/processdata.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/processdata.py	(revision 13956)
++++ ../trunk-jpl/src/m/plot/processdata.py	(revision 13957)
+@@ -37,7 +37,7 @@
+ 	if npy.ndim(data)==1:
+ 		datasize=npy.array([len(data),1])
+ 	else:
+-		datasize=shape(data)
++		datasize=npy.shape(data)
+ 	
+ 	#process NaN's if any
+ 	if options.exist('nan'):
+Index: ../trunk-jpl/src/m/plot/applyoptions.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.py	(revision 13956)
++++ ../trunk-jpl/src/m/plot/applyoptions.py	(revision 13957)
+@@ -151,7 +151,7 @@
+ 	#wrapping
+ 
+ 	#colorbar {{{
+-	if 'on' in options.getfieldvalue('colorbar','on'):
++	if 'on' in options.getfieldvalue('colorbar','off'):
+ 		p.colorbar()
+ 	#}}}
+ 
Index: /issm/oecreview/Archive/13393-13976/ISSM-13957-13958.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13957-13958.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13957-13958.diff	(revision 13980)
@@ -0,0 +1,1163 @@
+Index: ../trunk-jpl/src/android/ISSM_Visual/.classpath
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/.classpath	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/.classpath	(revision 13958)
+@@ -0,0 +1,8 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<classpath>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
++	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
++	<classpathentry kind="src" path="src"/>
++	<classpathentry kind="src" path="gen"/>
++	<classpathentry kind="output" path="bin/classes"/>
++</classpath>
+Index: ../trunk-jpl/src/android/ISSM_Visual/project.properties
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/project.properties	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/project.properties	(revision 13958)
+@@ -0,0 +1,14 @@
++# This file is automatically generated by Android Tools.
++# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
++#
++# This file must be checked in Version Control Systems.
++#
++# To customize properties used by the Ant build system edit
++# "ant.properties", and override values to adapt the script to your
++# project structure.
++#
++# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
++#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
++
++# Project target.
++target=android-16
+Index: ../trunk-jpl/src/android/ISSM_Visual/.project
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/.project	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/.project	(revision 13958)
+@@ -0,0 +1,33 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<projectDescription>
++	<name>ISSM_Visual</name>
++	<comment></comment>
++	<projects>
++	</projects>
++	<buildSpec>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>org.eclipse.jdt.core.javabuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++		<buildCommand>
++			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
++			<arguments>
++			</arguments>
++		</buildCommand>
++	</buildSpec>
++	<natures>
++		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
++		<nature>org.eclipse.jdt.core.javanature</nature>
++	</natures>
++</projectDescription>
+Index: ../trunk-jpl/src/android/ISSM_Visual/proguard-project.txt
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/proguard-project.txt	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/proguard-project.txt	(revision 13958)
+@@ -0,0 +1,20 @@
++# To enable ProGuard in your project, edit project.properties
++# to define the proguard.config property as described in that file.
++#
++# Add project specific ProGuard rules here.
++# By default, the flags in this file are appended to flags specified
++# in ${sdk.dir}/tools/proguard/proguard-android.txt
++# You can edit the include path and order by changing the ProGuard
++# include property in project.properties.
++#
++# For more details, see
++#   http://developer.android.com/guide/developing/tools/proguard.html
++
++# Add any project specific keep options here:
++
++# If your project uses WebView with JS, uncomment the following
++# and specify the fully qualified class name to the JavaScript interface
++# class:
++#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
++#   public *;
++#}
+Index: ../trunk-jpl/src/android/ISSM_Visual/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/AndroidManifest.xml	(revision 13958)
+@@ -0,0 +1,25 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.issm_visual"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="8"
++        android:targetSdkVersion="15" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".ISSMVisual"
++            android:label="@string/title_activity_issmvisual" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM_Visual/src/com/example/issm_visual/ISSMVisual.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/src/com/example/issm_visual/ISSMVisual.java	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/src/com/example/issm_visual/ISSMVisual.java	(revision 13958)
+@@ -0,0 +1,99 @@
++package com.example.issm_visual;
++
++
++import android.app.Activity;
++import android.content.Context;
++import android.opengl.GLES20;
++import android.opengl.GLSurfaceView;
++import android.opengl.GLSurfaceView.Renderer;
++import android.os.Bundle;
++import android.util.AttributeSet;
++import android.view.Menu;
++import android.view.View;
++import android.view.View.OnClickListener;
++import android.widget.Button;
++import android.widget.FrameLayout;
++import android.widget.RelativeLayout;
++import android.widget.SeekBar;
++import android.widget.SeekBar.OnSeekBarChangeListener;
++import android.widget.TextView;
++import android.widget.Toast;
++import java.nio.ByteBuffer;
++import java.nio.ByteOrder;
++import java.nio.FloatBuffer;	 
++import java.nio.ShortBuffer;
++import javax.microedition.khronos.egl.EGLConfig;
++import javax.microedition.khronos.opengles.GL10; 
++
++public class ISSMVisual extends Activity implements OnSeekBarChangeListener
++{
++	private SeekBar bar;
++    private TextView txtStatus, txtValue;
++    private GLSurfaceView mGLView;
++	private FrameLayout frame;
++    @Override
++    public void onCreate(Bundle savedInstanceState) {
++        super.onCreate(savedInstanceState);
++        setContentView(R.layout.activity_issmvisual);
++        
++        bar = (SeekBar)findViewById(R.id.seekBar); // make seekbar object
++        bar.setOnSeekBarChangeListener(this); // set seekbar listener
++        txtValue = (TextView)findViewById(R.id.value);
++        txtStatus = (TextView)findViewById(R.id.status);
++        
++        mGLView = new MyGLSurfaceView(this);
++        frame = (FrameLayout)findViewById(R.id.frame);
++        frame.addView(mGLView);
++    }
++
++
++	@Override
++    public void onProgressChanged(SeekBar seekBar, int val,
++    		boolean fromUser) 
++    {
++    	// change progress text label with current Seekbar value
++    	txtValue.setText("Value: " + val);
++    	txtStatus.setText("Status: changing");
++    }
++	
++    @Override
++    public void onStartTrackingTouch(SeekBar seekBar) 
++    {
++    	txtStatus.setText("Status: Starting to track touch");
++
++    }
++    
++    @Override
++    public void onStopTrackingTouch(SeekBar seekBar) 
++    {
++    	seekBar.setSecondaryProgress(seekBar.getProgress()); // set the shade of the previous value.
++    	txtStatus.setText("Status: Ended tracking touch");
++    }
++    
++    @Override
++    protected void onPause() {
++        super.onPause();
++        // The following call pauses the rendering thread.
++        // If your OpenGL application is memory intensive,
++        // you should consider de-allocating objects that
++        // consume significant memory here.
++        mGLView.onPause();
++    }
++    
++    @Override
++    protected void onResume() {
++        super.onResume();
++        // The following call resumes a paused rendering thread.
++        // If you de-allocated graphic objects for onPause()
++        // this is a good place to re-allocate them.
++        mGLView.onResume();
++    }
++
++    
++    @Override
++    public boolean onCreateOptionsMenu(Menu menu) 
++    {
++        getMenuInflater().inflate(R.menu.activity_issmvisual, menu);
++        return true;
++    }
++}
+Index: ../trunk-jpl/src/android/ISSM_Visual/src/com/example/issm_visual/MyGLRenderer.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/src/com/example/issm_visual/MyGLRenderer.java	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/src/com/example/issm_visual/MyGLRenderer.java	(revision 13958)
+@@ -0,0 +1,248 @@
++/*
++ * Copyright (C) 2012 The Android Open Source Project
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ *      http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++
++package com.example.issm_visual;
++import java.nio.ByteBuffer;
++import java.nio.ByteOrder;
++import java.nio.FloatBuffer;
++
++import javax.microedition.khronos.egl.EGLConfig;
++import javax.microedition.khronos.opengles.GL10;
++
++import android.opengl.GLES20;
++import android.opengl.GLSurfaceView;
++
++public class MyGLRenderer implements GLSurfaceView.Renderer {
++
++    private Triangle mTriangle1, mTriangle2, mTriangle3;
++
++    @Override
++    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
++
++        // Set the background frame color
++        GLES20.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
++
++        mTriangle1 = new Triangle(
++        0.0f,  0.6f, 0.0f,   // top
++       -0.5f, -0.3f, 0.0f,   // bottom left
++        0.5f, -0.3f, 0.0f,
++        0.0f, 0.0f, 1.0f, 1.0f);   // bottom right
++        //mTriangle = new Triangle();
++        
++        mTriangle2 = new Triangle(
++        -0.5f, -0.3f, 0.0f,
++         0.0f, -1.0f, 0.0f,
++         0.5f,  -0.3f, 0.0f,
++         1.0f, 0.0f, 0.0f, 1.0f);
++        
++        mTriangle3 = new Triangle(
++        0.0f,  0.6f, 0.0f,
++        0.5f, -0.3f, 0.0f,
++        1.0f,  0.6f, 0.0f,
++        1.0f, 1.0f, 0.0f, 1.0f);
++    }
++
++    @Override
++    public void onDrawFrame(GL10 unused) {
++
++        // Draw background color
++        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
++
++        // Draw triangle
++        mTriangle1.draw(); 
++        mTriangle2.draw();
++        mTriangle3.draw();
++    }
++
++    @Override
++    public void onSurfaceChanged(GL10 unused, int width, int height) {
++        // Adjust the viewport based on geometry changes,
++        // such as screen rotation
++        GLES20.glViewport(0, 0, width, height);
++    }
++
++    public static int loadShader(int type, String shaderCode){
++
++        // create a vertex shader type (GLES20.GL_VERTEX_SHADER)
++        // or a fragment shader type (GLES20.GL_FRAGMENT_SHADER)
++        int shader = GLES20.glCreateShader(type);
++
++        // add the source code to the shader and compile it
++        GLES20.glShaderSource(shader, shaderCode);
++        GLES20.glCompileShader(shader);
++
++        return shader;
++    }
++
++}
++
++class Triangle 
++{
++
++    private final String vertexShaderCode =
++        "attribute vec4 vPosition;" +
++        "void main() {" +
++        "  gl_Position = vPosition;" +
++        "}";
++
++    private final String fragmentShaderCode =
++        "precision mediump float;" +
++        "uniform vec4 vColor;" +
++        "void main() {" +
++        "  gl_FragColor = vColor;" +
++        "}";
++
++    private final FloatBuffer vertexBuffer;
++    private final int mProgram;
++    private int mPositionHandle;
++    private int mColorHandle;
++
++    // number of coordinates per vertex in this array
++    static final int COORDS_PER_VERTEX = 3;
++    float triangleCoords[] ; /*){ // in counterclockwise order:
++         0.0f,  0.6f, 0.0f,   // top
++        -0.5f, -0.3f, 0.0f,   // bottom left
++         0.5f, -0.3f, 0.0f};  */ // bottom right
++         
++        /* -0.55f, -0.35f, 0.0f,
++         0.0f, -1.2f, 0.0f,
++         0.55f,  -0.35f, 0.0f
++    };*/
++    
++    private final int vertexCount = 9 / COORDS_PER_VERTEX;
++    private final int vertexStride = COORDS_PER_VERTEX * 4; // bytes per vertex
++
++    // Set color with red, green, blue and alpha (opacity) values
++    float color[];
++    //private final FloatBuffer colorBuffer;
++    private final int colorCount = 4/COORDS_PER_VERTEX;
++    
++    public Triangle() 
++    {
++        // initialize vertex byte buffer for shape coordinates
++        ByteBuffer bb = ByteBuffer.allocateDirect(
++                // (number of coordinate values * 4 bytes per float)
++                triangleCoords.length * 4);
++        // use the device hardware's native byte order
++        bb.order(ByteOrder.nativeOrder());
++
++        // create a floating point buffer from the ByteBuffer
++        vertexBuffer = bb.asFloatBuffer();
++        // add the coordinates to the FloatBuffer
++        vertexBuffer.put(triangleCoords);
++        // set the buffer to read the first coordinate
++        vertexBuffer.position(0);
++
++        /*ByteBuffer bb1 = ByteBuffer.allocateDirect(color.length*4);
++        bb1.order(ByteOrder.nativeOrder());
++        colorBuffer = bb1.asFloatBuffer();
++        colorBuffer.put(color);
++        colorBuffer.position(0);*/
++        
++        //GLES20.glEnableVertexAttribArray(1);
++        //GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, colorBuffer);
++        
++        // prepare shaders and OpenGL program
++        int vertexShader = MyGLRenderer.loadShader(GLES20.GL_VERTEX_SHADER,
++                                                   vertexShaderCode);
++        int fragmentShader = MyGLRenderer.loadShader(GLES20.GL_FRAGMENT_SHADER,
++                                                     fragmentShaderCode);
++
++        mProgram = GLES20.glCreateProgram();             // create empty OpenGL Program
++        GLES20.glAttachShader(mProgram, vertexShader);   // add the vertex shader to program
++        GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program
++        GLES20.glLinkProgram(mProgram);                  // create OpenGL program executables
++    }
++    public Triangle(float x1, float y1, float z1,
++    			    float x2, float y2, float z2,
++    			    float x3, float y3, float z3,
++    			    float c1, float c2, float c3, float c4) 
++    {
++    	triangleCoords = new float[9];
++    	color = new float[4];
++    	triangleCoords[0] = x1;
++    	triangleCoords[1] = y1;
++    	triangleCoords[2] = z1;
++    	triangleCoords[3] = x2;
++    	triangleCoords[4] = y2;
++    	triangleCoords[5] = z2;
++    	triangleCoords[6] = x3;
++    	triangleCoords[7] = y3;
++    	triangleCoords[8] = z3;
++    	color[0] = c1;
++    	color[1] = c2;
++    	color[2] = c3;
++    	color[3] = c4;
++        // initialize vertex byte buffer for shape coordinates
++        ByteBuffer bb = ByteBuffer.allocateDirect(
++                // (number of coordinate values * 4 bytes per float)
++                triangleCoords.length * 4);
++        // use the device hardware's native byte order
++        bb.order(ByteOrder.nativeOrder());
++
++        // create a floating point buffer from the ByteBuffer
++        vertexBuffer = bb.asFloatBuffer();
++        // add the coordinates to the FloatBuffer
++        vertexBuffer.put(triangleCoords);
++        // set the buffer to read the first coordinate
++        vertexBuffer.position(0);
++
++        /*ByteBuffer bb1 = ByteBuffer.allocateDirect(color.length*4);
++        bb1.order(ByteOrder.nativeOrder());
++        colorBuffer = bb1.asFloatBuffer();
++        colorBuffer.put(color);
++        colorBuffer.position(0);*/
++           
++        // prepare shaders and OpenGL program
++        int vertexShader = MyGLRenderer.loadShader(GLES20.GL_VERTEX_SHADER,
++                                                   vertexShaderCode);
++        int fragmentShader = MyGLRenderer.loadShader(GLES20.GL_FRAGMENT_SHADER,
++                                                     fragmentShaderCode);
++
++        mProgram = GLES20.glCreateProgram();             // create empty OpenGL Program
++        GLES20.glAttachShader(mProgram, vertexShader);   // add the vertex shader to program
++        GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program
++        GLES20.glLinkProgram(mProgram);                  // create OpenGL program executables
++    }
++
++    public void draw() 
++    {
++        // Add program to OpenGL environment
++        GLES20.glUseProgram(mProgram);
++
++        // get handle to vertex shader's vPosition member
++        mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
++
++        // Enable a handle to the triangle vertices
++        GLES20.glEnableVertexAttribArray(mPositionHandle);
++
++        // Prepare the triangle coordinate data
++        GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX,
++                                     GLES20.GL_FLOAT, false,
++                                     vertexStride, vertexBuffer);
++
++        // get handle to fragment shader's vColor member
++        mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor");
++
++        // Set color for drawing the triangle
++        //GLES20.glUniform4fv(mColorHandle, 0, color, 0);
++        //GLES20.glVertexAttrib4f(0, 0.5f, 0.5f, 0.0f, 1.0f);
++        //GLES20.glVertexAttribPointer(mPositionHandle, 4, GLES20.GL_FLOAT, false, stride, offset)
++        GLES20.glUniform4fv(mColorHandle, 1, color, 0);
++        // Draw the triangle
++        GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);
++    }
++}
+Index: ../trunk-jpl/src/android/ISSM_Visual/src/com/example/issm_visual/MyGLSurfaceView.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/src/com/example/issm_visual/MyGLSurfaceView.java	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/src/com/example/issm_visual/MyGLSurfaceView.java	(revision 13958)
+@@ -0,0 +1,21 @@
++package com.example.issm_visual;
++
++import android.content.Context;
++import android.opengl.GLSurfaceView;
++
++
++class MyGLSurfaceView extends GLSurfaceView {
++
++    public MyGLSurfaceView(Context context) {
++        super(context);
++
++        // Create an OpenGL ES 2.0 context.
++        setEGLContextClientVersion(2);
++
++        // Set the Renderer for drawing on the GLSurfaceView
++        setRenderer(new MyGLRenderer());
++
++        // Render the view only when there is a change in the drawing data
++        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
++    }
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/AndroidManifest.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/AndroidManifest.xml	(revision 13958)
+@@ -0,0 +1,25 @@
++<manifest xmlns:android="http://schemas.android.com/apk/res/android"
++    package="com.example.issm_visual"
++    android:versionCode="1"
++    android:versionName="1.0" >
++
++    <uses-sdk
++        android:minSdkVersion="8"
++        android:targetSdkVersion="15" />
++
++    <application
++        android:icon="@drawable/ic_launcher"
++        android:label="@string/app_name"
++        android:theme="@style/AppTheme" >
++        <activity
++            android:name=".ISSMVisual"
++            android:label="@string/title_activity_issmvisual" >
++            <intent-filter>
++                <action android:name="android.intent.action.MAIN" />
++
++                <category android:name="android.intent.category.LAUNCHER" />
++            </intent-filter>
++        </activity>
++    </application>
++
++</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/ISSM_Visual.apk
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/ISSM_Visual.apk
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/ISSM_Visual.apk	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/ISSM_Visual.apk	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/ISSM_Visual.apk
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/resources.ap_
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/resources.ap_
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/resources.ap_	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/resources.ap_	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/resources.ap_
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-hdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-hdpi/ic_launcher.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-hdpi/ic_launcher.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-hdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-hdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-hdpi/ic_action_search.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-hdpi/ic_action_search.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-hdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-ldpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-ldpi/ic_launcher.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-ldpi/ic_launcher.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-ldpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-mdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-mdpi/ic_launcher.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-mdpi/ic_launcher.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-mdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-mdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-mdpi/ic_action_search.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-mdpi/ic_action_search.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-mdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-xhdpi/ic_launcher.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-xhdpi/ic_launcher.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-xhdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-xhdpi/ic_action_search.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-xhdpi/ic_action_search.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/res/drawable-xhdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/jarlist.cache
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/jarlist.cache	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/jarlist.cache	(revision 13958)
+@@ -0,0 +1,3 @@
++# cache for current jar dependecy. DO NOT EDIT.
++# format is <lastModified> <length> <SHA-1> <path>
++# Encoding is UTF-8
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes.dex
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes.dex
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes.dex	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes.dex	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes.dex
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/MyGLSurfaceView.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/MyGLSurfaceView.class
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/MyGLSurfaceView.class	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/MyGLSurfaceView.class	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/MyGLSurfaceView.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$string.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$string.class
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$string.class	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$string.class	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$string.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/ISSMVisual.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/ISSMVisual.class
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/ISSMVisual.class	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/ISSMVisual.class	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/ISSMVisual.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/MyGLRenderer.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/MyGLRenderer.class
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/MyGLRenderer.class	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/MyGLRenderer.class	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/MyGLRenderer.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$attr.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$attr.class
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$attr.class	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$attr.class	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$attr.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R.class
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R.class	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R.class	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$id.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$id.class
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$id.class	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$id.class	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$id.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$layout.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$layout.class
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$layout.class	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$layout.class	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$layout.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/BuildConfig.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/BuildConfig.class
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/BuildConfig.class	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/BuildConfig.class	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/BuildConfig.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/Triangle.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/Triangle.class
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/Triangle.class	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/Triangle.class	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/Triangle.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$style.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$style.class
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$style.class	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$style.class	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$style.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$drawable.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$drawable.class
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$drawable.class	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$drawable.class	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$drawable.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$menu.class
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$menu.class
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$menu.class	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$menu.class	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/bin/classes/com/example/issm_visual/R$menu.class
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/gen/com/example/issm_visual/R.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/gen/com/example/issm_visual/R.java	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/gen/com/example/issm_visual/R.java	(revision 13958)
+@@ -0,0 +1,40 @@
++/* AUTO-GENERATED FILE.  DO NOT MODIFY.
++ *
++ * This class was automatically generated by the
++ * aapt tool from the resource data it found.  It
++ * should not be modified by hand.
++ */
++
++package com.example.issm_visual;
++
++public final class R {
++    public static final class attr {
++    }
++    public static final class drawable {
++        public static final int ic_action_search=0x7f020000;
++        public static final int ic_launcher=0x7f020001;
++    }
++    public static final class id {
++        public static final int frame=0x7f070003;
++        public static final int menu_settings=0x7f070005;
++        public static final int relativeLay=0x7f070000;
++        public static final int seekBar=0x7f070001;
++        public static final int status=0x7f070002;
++        public static final int value=0x7f070004;
++    }
++    public static final class layout {
++        public static final int activity_issmvisual=0x7f030000;
++    }
++    public static final class menu {
++        public static final int activity_issmvisual=0x7f060000;
++    }
++    public static final class string {
++        public static final int app_name=0x7f040000;
++        public static final int hello_world=0x7f040001;
++        public static final int menu_settings=0x7f040002;
++        public static final int title_activity_issmvisual=0x7f040003;
++    }
++    public static final class style {
++        public static final int AppTheme=0x7f050000;
++    }
++}
+Index: ../trunk-jpl/src/android/ISSM_Visual/gen/com/example/issm_visual/BuildConfig.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/gen/com/example/issm_visual/BuildConfig.java	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/gen/com/example/issm_visual/BuildConfig.java	(revision 13958)
+@@ -0,0 +1,6 @@
++/** Automatically generated file. DO NOT MODIFY */
++package com.example.issm_visual;
++
++public final class BuildConfig {
++    public final static boolean DEBUG = true;
++}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM_Visual/libs/android-support-v4.jar
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/libs/android-support-v4.jar
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/libs/android-support-v4.jar	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/libs/android-support-v4.jar	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/libs/android-support-v4.jar
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/values/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/res/values/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/res/values/styles.xml	(revision 13958)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/values/strings.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/res/values/strings.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/res/values/strings.xml	(revision 13958)
+@@ -0,0 +1,8 @@
++<resources>
++
++    <string name="app_name">ISSM_Visual</string>
++    <string name="hello_world">Hello world!</string>
++    <string name="menu_settings">Settings</string>
++    <string name="title_activity_issmvisual">ISSMVisual</string>
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-hdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/res/drawable-hdpi/ic_launcher.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/res/drawable-hdpi/ic_launcher.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-hdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-hdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-hdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/res/drawable-hdpi/ic_action_search.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/res/drawable-hdpi/ic_action_search.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-hdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/menu/activity_issmvisual.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/res/menu/activity_issmvisual.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/res/menu/activity_issmvisual.xml	(revision 13958)
+@@ -0,0 +1,6 @@
++<menu xmlns:android="http://schemas.android.com/apk/res/android">
++    <item android:id="@+id/menu_settings"
++        android:title="@string/menu_settings"
++        android:orderInCategory="100"
++        android:showAsAction="never" />
++</menu>
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/values-v11/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/res/values-v11/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/res/values-v11/styles.xml	(revision 13958)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-ldpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/res/drawable-ldpi/ic_launcher.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/res/drawable-ldpi/ic_launcher.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-ldpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/values-v14/styles.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/res/values-v14/styles.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/res/values-v14/styles.xml	(revision 13958)
+@@ -0,0 +1,5 @@
++<resources>
++
++    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar" />
++
++</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-mdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/res/drawable-mdpi/ic_launcher.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/res/drawable-mdpi/ic_launcher.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-mdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-mdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-mdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/res/drawable-mdpi/ic_action_search.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/res/drawable-mdpi/ic_action_search.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-mdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/res/drawable-xhdpi/ic_launcher.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/res/drawable-xhdpi/ic_launcher.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-xhdpi/ic_launcher.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-xhdpi/ic_action_search.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/res/drawable-xhdpi/ic_action_search.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/res/drawable-xhdpi/ic_action_search.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/res/drawable-xhdpi/ic_action_search.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/res/layout/activity_issmvisual.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/res/layout/activity_issmvisual.xml	(revision 0)
++++ ../trunk-jpl/src/android/ISSM_Visual/res/layout/activity_issmvisual.xml	(revision 13958)
+@@ -0,0 +1,46 @@
++<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
++    xmlns:tools="http://schemas.android.com/tools"
++    android:id="@+id/relativeLay"
++    android:layout_width="match_parent"
++    android:layout_height="match_parent"
++    android:orientation="horizontal" >
++
++    <SeekBar
++        android:id="@+id/seekBar"
++        android:layout_width="match_parent"
++        android:layout_height="wrap_content"
++        android:layout_alignParentBottom="true"
++        android:layout_alignParentLeft="true"
++        android:layout_marginBottom="41dp" />
++
++    <TextView
++        android:id="@+id/status"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_above="@+id/seekBar"
++        android:layout_centerHorizontal="true"
++        android:layout_marginBottom="16dp"
++        android:text="Status: " />
++
++    <FrameLayout
++        xmlns:android="http://schemas.android.com/apk/res/android"
++        xmlns:tools="http://schemas.android.com/tools"
++        android:id="@+id/frame"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_above="@+id/value"
++        android:layout_centerHorizontal="true"
++        android:layout_marginBottom="16dp" >
++    </FrameLayout>
++
++    <TextView
++        android:id="@+id/value"
++        android:layout_width="wrap_content"
++        android:layout_height="wrap_content"
++        android:layout_above="@+id/status"
++        android:layout_alignRight="@+id/status"
++        android:layout_centerHorizontal="true"
++        android:layout_marginBottom="16dp"
++        android:text="Value: " />
++
++</RelativeLayout>
+Index: ../trunk-jpl/src/android/ISSM_Visual/ic_launcher-web.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_Visual/ic_launcher-web.png
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_Visual/ic_launcher-web.png	(revision 13957)
++++ ../trunk-jpl/src/android/ISSM_Visual/ic_launcher-web.png	(revision 13958)
+
+Property changes on: ../trunk-jpl/src/android/ISSM_Visual/ic_launcher-web.png
+___________________________________________________________________
+Added: svn:mime-type
+## -0,0 +1 ##
++application/octet-stream
Index: /issm/oecreview/Archive/13393-13976/ISSM-13958-13959.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13958-13959.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13958-13959.diff	(revision 13980)
@@ -0,0 +1,126 @@
+Index: ../trunk-jpl/src/android/ISSM/jni/com_example_issm_IssmJni.h
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/com_example_issm_IssmJni.h	(revision 13958)
++++ ../trunk-jpl/src/android/ISSM/jni/com_example_issm_IssmJni.h	(revision 13959)
+@@ -1,21 +0,0 @@
+-/* DO NOT EDIT THIS FILE - it is machine generated */
+-#include <jni.h>
+-/* Header for class com_example_issm_IssmJni */
+-
+-#ifndef _Included_com_example_issm_IssmJni
+-#define _Included_com_example_issm_IssmJni
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-/*
+- * Class:     com_example_issm_IssmJni
+- * Method:    fac
+- * Signature: (J)J
+- */
+-JNIEXPORT jlong JNICALL Java_com_example_issm_IssmJni_fac
+-  (JNIEnv *, jclass, jlong);
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif
+Index: ../trunk-jpl/src/android/ISSM/jni/Main_nojavah.cpp
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/Main_nojavah.cpp	(revision 13958)
++++ ../trunk-jpl/src/android/ISSM/jni/Main_nojavah.cpp	(revision 13959)
+@@ -1,40 +0,0 @@
+-#include <jni.h>
+-#include "../../../c/android/fac.h"
+-namespace com_example_issm
+-{
+-	static jlong factorial(JNIEnv *env, jclass clazz, jlong n)
+-	{
+-		fac *f = new fac();
+-		jlong result = (jlong) (f->factorial(n));
+-		delete(f);
+-		return (jlong) result;
+-	}
+-//------------------------------------------------------------------------------------
+-	static JNINativeMethod method_table[] = {
+-			{"fac" ,"(J)J" , (void *) factorial},
+-	};
+-}
+-
+-using namespace com_example_issm;
+-
+-extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
+-{
+-    JNIEnv* env;
+-    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
+-        return -1;
+-    }
+-    else
+-    {
+-    	jclass clazz = env->FindClass("com/example/issm/IssmJni");
+-    	if(clazz)
+-    	{
+-    		env->RegisterNatives(clazz, method_table, 1);
+-    		env->DeleteLocalRef(clazz);
+-    		return JNI_VERSION_1_6;
+-    	}
+-    	else return -1;
+-    }
+-
+-    // Get jclass with env->FindClass.
+-    // Register methods with env->RegisterNatives.
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM/jni/Main.cpp
+===================================================================
+--- ../trunk-jpl/src/android/ISSM/jni/Main.cpp	(revision 13958)
++++ ../trunk-jpl/src/android/ISSM/jni/Main.cpp	(revision 13959)
+@@ -1,11 +1,40 @@
++#include <jni.h>
+ #include "../../../c/android/fac.h"
+-#include "com_example_issm_IssmJni.h"
+-#include <cstddef>
++namespace com_example_issm
++{
++	static jlong factorial(JNIEnv *env, jclass clazz, jlong n)
++	{
++		fac *f = new fac();
++		jlong result = (jlong) (f->factorial(n));
++		delete(f);
++		return (jlong) result;
++	}
++//------------------------------------------------------------------------------------
++	static JNINativeMethod method_table[] = {
++			{"fac" ,"(J)J" , (void *) factorial},
++	};
++}
+ 
+-JNIEXPORT jlong JNICALL Java_com_example_issm_IssmJni_fac(JNIEnv *env, jclass clazz, jlong n)
++using namespace com_example_issm;
++
++extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
+ {
+-	fac *f = new fac();
+-	jlong result = (jlong) (f->factorial(n));
+-	delete(f);
+-	return (jlong) result;
+-}
++    JNIEnv* env;
++    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
++        return -1;
++    }
++    else
++    {
++    	jclass clazz = env->FindClass("com/example/issm/IssmJni");
++    	if(clazz)
++    	{
++    		env->RegisterNatives(clazz, method_table, 1);
++    		env->DeleteLocalRef(clazz);
++    		return JNI_VERSION_1_6;
++    	}
++    	else return -1;
++    }
++
++    // Get jclass with env->FindClass.
++    // Register methods with env->RegisterNatives.
++}
+\ No newline at end of file
Index: /issm/oecreview/Archive/13393-13976/ISSM-13959-13960.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13959-13960.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13959-13960.diff	(revision 13980)
@@ -0,0 +1,276 @@
+Index: ../trunk-jpl/src/android/ISSM_App/.classpath
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_App/.classpath	(revision 13959)
++++ ../trunk-jpl/src/android/ISSM_App/.classpath	(revision 13960)
+@@ -1,8 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<classpath>
+-	<classpathentry kind="src" path="src"/>
+-	<classpathentry kind="src" path="gen"/>
+-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+-	<classpathentry kind="output" path="bin/classes"/>
+-</classpath>
+Index: ../trunk-jpl/src/android/ISSM_App/project.properties
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_App/project.properties	(revision 13959)
++++ ../trunk-jpl/src/android/ISSM_App/project.properties	(revision 13960)
+@@ -1,14 +0,0 @@
+-# This file is automatically generated by Android Tools.
+-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+-#
+-# This file must be checked in Version Control Systems.
+-#
+-# To customize properties used by the Ant build system edit
+-# "ant.properties", and override values to adapt the script to your
+-# project structure.
+-#
+-# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+-#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+-
+-# Project target.
+-target=android-14
+Index: ../trunk-jpl/src/android/ISSM_App/.project
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_App/.project	(revision 13959)
++++ ../trunk-jpl/src/android/ISSM_App/.project	(revision 13960)
+@@ -1,33 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<projectDescription>
+-	<name>ISSM_App</name>
+-	<comment></comment>
+-	<projects>
+-	</projects>
+-	<buildSpec>
+-		<buildCommand>
+-			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+-			<arguments>
+-			</arguments>
+-		</buildCommand>
+-		<buildCommand>
+-			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+-			<arguments>
+-			</arguments>
+-		</buildCommand>
+-		<buildCommand>
+-			<name>org.eclipse.jdt.core.javabuilder</name>
+-			<arguments>
+-			</arguments>
+-		</buildCommand>
+-		<buildCommand>
+-			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
+-			<arguments>
+-			</arguments>
+-		</buildCommand>
+-	</buildSpec>
+-	<natures>
+-		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+-		<nature>org.eclipse.jdt.core.javanature</nature>
+-	</natures>
+-</projectDescription>
+Index: ../trunk-jpl/src/android/ISSM_App/proguard-project.txt
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_App/proguard-project.txt	(revision 13959)
++++ ../trunk-jpl/src/android/ISSM_App/proguard-project.txt	(revision 13960)
+@@ -1,20 +0,0 @@
+-# To enable ProGuard in your project, edit project.properties
+-# to define the proguard.config property as described in that file.
+-#
+-# Add project specific ProGuard rules here.
+-# By default, the flags in this file are appended to flags specified
+-# in ${sdk.dir}/tools/proguard/proguard-android.txt
+-# You can edit the include path and order by changing the ProGuard
+-# include property in project.properties.
+-#
+-# For more details, see
+-#   http://developer.android.com/guide/developing/tools/proguard.html
+-
+-# Add any project specific keep options here:
+-
+-# If your project uses WebView with JS, uncomment the following
+-# and specify the fully qualified class name to the JavaScript interface
+-# class:
+-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+-#   public *;
+-#}
+Index: ../trunk-jpl/src/android/ISSM_App/AndroidManifest.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_App/AndroidManifest.xml	(revision 13959)
++++ ../trunk-jpl/src/android/ISSM_App/AndroidManifest.xml	(revision 13960)
+@@ -1,23 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+-    package="issm.app"
+-    android:versionCode="1"
+-    android:versionName="1.0" >
+-
+-    <uses-sdk android:minSdkVersion="14" />
+-
+-    <application
+-        android:icon="@drawable/ic_launcher"
+-        android:label="@string/app_name" >
+-        <activity
+-            android:name=".ISSM_AppActivity"
+-            android:label="@string/app_name" >
+-            <intent-filter>
+-                <action android:name="android.intent.action.MAIN" />
+-
+-                <category android:name="android.intent.category.LAUNCHER" />
+-            </intent-filter>
+-        </activity>
+-    </application>
+-
+-</manifest>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM_App/src/issm/app/ISSM_AppActivity.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_App/src/issm/app/ISSM_AppActivity.java	(revision 13959)
++++ ../trunk-jpl/src/android/ISSM_App/src/issm/app/ISSM_AppActivity.java	(revision 13960)
+@@ -1,29 +0,0 @@
+-package issm.app;
+-
+-import android.app.Activity;
+-import android.os.Bundle;
+-import android.view.View;
+-import android.view.View.OnClickListener;
+-import android.widget.TextView;
+-import android.widget.SeekBar;
+-
+-public class ISSM_AppActivity extends Activity implements OnClickListener
+-{
+-	private SeekBar sb;
+-	private TextView tv;
+-	
+-    public void onCreate(Bundle savedInstanceState) 
+-    {
+-        super.onCreate(savedInstanceState);
+-        setContentView(R.layout.main);
+-        sb = (SeekBar)findViewById(R.id.seekBar2);
+-        tv = (TextView)findViewById(R.id.editText2);
+-        tv.setText("Current Progress: " + sb.getProgress());
+-        sb.setOnClickListener(this);
+-    }
+-
+-	public void onClick(View v)
+-	{
+-		tv.setText("Current Progress: " + sb.getProgress());
+-	}
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM_App/bin/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_App/bin/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_App/bin/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_App/bin/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_App/gen/issm/app/R.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_App/gen/issm/app/R.java	(revision 13959)
++++ ../trunk-jpl/src/android/ISSM_App/gen/issm/app/R.java	(revision 13960)
+@@ -1,27 +0,0 @@
+-/* AUTO-GENERATED FILE.  DO NOT MODIFY.
+- *
+- * This class was automatically generated by the
+- * aapt tool from the resource data it found.  It
+- * should not be modified by hand.
+- */
+-
+-package issm.app;
+-
+-public final class R {
+-    public static final class attr {
+-    }
+-    public static final class drawable {
+-        public static final int ic_launcher=0x7f020000;
+-    }
+-    public static final class id {
+-        public static final int editText2=0x7f050000;
+-        public static final int seekBar2=0x7f050001;
+-    }
+-    public static final class layout {
+-        public static final int main=0x7f030000;
+-    }
+-    public static final class string {
+-        public static final int app_name=0x7f040001;
+-        public static final int hello=0x7f040000;
+-    }
+-}
+Index: ../trunk-jpl/src/android/ISSM_App/gen/issm/app/BuildConfig.java
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_App/gen/issm/app/BuildConfig.java	(revision 13959)
++++ ../trunk-jpl/src/android/ISSM_App/gen/issm/app/BuildConfig.java	(revision 13960)
+@@ -1,6 +0,0 @@
+-/** Automatically generated file. DO NOT MODIFY */
+-package issm.app;
+-
+-public final class BuildConfig {
+-    public final static boolean DEBUG = true;
+-}
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM_App/res/values/strings.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_App/res/values/strings.xml	(revision 13959)
++++ ../trunk-jpl/src/android/ISSM_App/res/values/strings.xml	(revision 13960)
+@@ -1,7 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<resources>
+-
+-    <string name="hello">Hello World, ISSM_AppActivity!</string>
+-    <string name="app_name">ISSM_App</string>
+-
+-</resources>
+\ No newline at end of file
+Index: ../trunk-jpl/src/android/ISSM_App/res/drawable-hdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_App/res/drawable-ldpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_App/res/drawable-mdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_App/res/drawable-xhdpi/ic_launcher.png
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/octet-stream
+Index: ../trunk-jpl/src/android/ISSM_App/res/layout/main.xml
+===================================================================
+--- ../trunk-jpl/src/android/ISSM_App/res/layout/main.xml	(revision 13959)
++++ ../trunk-jpl/src/android/ISSM_App/res/layout/main.xml	(revision 13960)
+@@ -1,22 +0,0 @@
+-<?xml version="1.0" encoding="utf-8"?>
+-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+-    android:layout_width="match_parent"
+-    android:layout_height="match_parent"
+-    android:orientation="horizontal" >
+-
+-    <TextView
+-        android:id="@+id/editText2"
+-        android:layout_width="match_parent"
+-        android:layout_height="wrap_content"
+-        android:layout_weight="1"
+-        android:ems="10" android:translationX="0.5in" android:translationY="1in"/>
+-    
+-    <SeekBar
+-        android:id="@+id/seekBar2"
+-        android:layout_width="match_parent"
+-        android:layout_height="wrap_content"
+-        android:layout_weight="1"
+-        android:clickable="true"
+-        android:max="100" android:translationY="2in" android:translationX="-0.5in"/>
+-
+-</LinearLayout>
+\ No newline at end of file
Index: /issm/oecreview/Archive/13393-13976/ISSM-13960-13961.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13960-13961.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13960-13961.diff	(revision 13980)
@@ -0,0 +1,8 @@
+Index: ../trunk-jpl/src/android/Makefile.am
+===================================================================
+--- ../trunk-jpl/src/android/Makefile.am	(revision 13960)
++++ ../trunk-jpl/src/android/Makefile.am	(revision 13961)
+@@ -1,2 +1,2 @@
+-EXTRA_DIST =  Factorial ISSM_App  Makefile.am helloworld issm-android-inputfiles two-libs
++EXTRA_DIST =  Factorial Makefile.am helloworld issm-android-inputfiles two-libs
+ SUBDIRS = ISSM
Index: /issm/oecreview/Archive/13393-13976/ISSM-13961-13962.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13961-13962.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13961-13962.diff	(revision 13980)
@@ -0,0 +1,28 @@
+Index: ../trunk-jpl/src/m/miscellaneous/issmdoc.m
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/issmdoc.m	(revision 13961)
++++ ../trunk-jpl/src/m/miscellaneous/issmdoc.m	(revision 13962)
+@@ -3,13 +3,13 @@
+ %First get ISSM tier: 
+ ISSM_DIR=issmdir();
+ 
+-disp(sprintf('\n%s','  A comprehensive documentation is available on http://issm.jpl.nasa.gov'));
+-disp(sprintf('\n%s','  Example: how to create a square ice shelf'));
+-disp(sprintf('%s','	   go to ',ISSM_DIR,'/examples/SquareIceshelf'));
+-disp(sprintf('%s','	   md=model;                                %creates a new empty model structure'));
+-disp(sprintf('%s','	   md=triangle(md,''DomainOutline.exp'',50000);   %creates a mesh of the domain outline with a resolution of 50000m'));
+-disp(sprintf('%s','	   md=setmask(md,''all'','''');               %defines the glacier system as an ice shelf (no island)'));
+-disp(sprintf('%s','	   md=parameterize(md,''Square.par'');        %fills all the other fields of the model'));
+-disp(sprintf('%s','	   md=setflowequation(md,''macayeal'',''all''); %defines all elements as MacAyeal''s'));
+-disp(sprintf('%s','	   md=solve(md,DiagnosticSolutionEnum());   %generate the velocity field'));
+-disp(sprintf('%s','	   plotmodel(md,''data'',md.results.DiagnosticSolution.Vel);    %displays the velocity (type plotdoc for plotmodel help)'));
++disp('  A comprehensive documentation is available on http://issm.jpl.nasa.gov');
++disp('  Example: how to create a square ice shelf');
++disp(['       go to ',ISSM_DIR,'/examples/SquareIceShelf']);
++disp(sprintf('%-63s %s','       md=model;','%creates a new empty model structure'));
++disp(sprintf('%-63s %s','       md=triangle(md,''DomainOutline.exp'',50000);','%creates a mesh of the domain outline with a resolution of 50000 m'));
++disp(sprintf('%-63s %s','       md=setmask(md,''all'','''');','%defines the glacier system as an ice shelf (no island)'));
++disp(sprintf('%-63s %s','       md=parameterize(md,''Square.par'');','%fills all the other fields of the model'));
++disp(sprintf('%-63s %s','       md=setflowequation(md,''macayeal'',''all'');','%defines all elements as MacAyeal''s SSA'));
++disp(sprintf('%-63s %s','       md=solve(md,DiagnosticSolutionEnum());','%solve for stress balance'));
++disp(sprintf('%-63s %s','       plotmodel(md,''data'',md.results.DiagnosticSolution.Vel);','%displays the velocity (type plotdoc for plotmodel help)'));
Index: /issm/oecreview/Archive/13393-13976/ISSM-13962-13963.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13962-13963.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13962-13963.diff	(revision 13980)
@@ -0,0 +1,22 @@
+Index: ../trunk-jpl/src/m/plot/plot_scatter.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/plot_scatter.m	(revision 13962)
++++ ../trunk-jpl/src/m/plot/plot_scatter.m	(revision 13963)
+@@ -1,6 +1,6 @@
+-function plot_scatter(x,y,level,options),
++function plot_scatter(x,y,level,varargin),
+ 
+-if nargin==3, options=pairoptions(); end
++options=pairoptions(varargin{:}); 
+ 
+ %check input
+ if numel(x)~=numel(y) | numel(x)~=numel(level),
+@@ -12,6 +12,8 @@
+ Max=max(level);
+ Siz=length(level);
+ nlab=10;
++%Min=0;
++%Max=1300;
+ 
+ %OK, should we create a new colorbar for the occasion?
+ if isempty(findobj(gcf,'tag','TMW_COLORBAR')),
Index: /issm/oecreview/Archive/13393-13976/ISSM-13963-13964.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13963-13964.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13963-13964.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/src/m/plot/applyoptions.m
+===================================================================
+--- ../trunk-jpl/src/m/plot/applyoptions.m	(revision 13963)
++++ ../trunk-jpl/src/m/plot/applyoptions.m	(revision 13964)
+@@ -174,7 +174,7 @@
+ 	end
+ 	if exist(options,'colorbarYLabel'),
+ 		set(get(c,'Ylabel'),'FontSize',getfieldvalue(options,'colorbarfontsize',fontsize),'String',getfieldvalue(options,'colorbarYLabel'),...
+-			'Color',getfieldvalue(options,'FontColor','k'),'Interpreter',getfieldvalue(options,'Interpreter','none'));
++			'Color',getfieldvalue(options,'FontColor','k'));
+ 	end
+ 	if exist(options,'colorbarwidth'),
+ 		posaxes=get(gca,'Position');
Index: /issm/oecreview/Archive/13393-13976/ISSM-13964-13965.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13964-13965.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13964-13965.diff	(revision 13980)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/miscellaneous/fielddisplay.py
+===================================================================
+--- ../trunk-jpl/src/m/miscellaneous/fielddisplay.py	(revision 13964)
++++ ../trunk-jpl/src/m/miscellaneous/fielddisplay.py	(revision 13965)
+@@ -50,6 +50,10 @@
+ 	elif isinstance(field,(list,tuple)):
+ 		string=list_display(offset,name,field,comment)
+ 
++	#None
++	elif field is None:
++		string=displayunit(offset,name,"None",comment)
++
+ 	else:
+ 		string=displayunit(offset,name,"not displayed",comment)
+ 		
Index: /issm/oecreview/Archive/13393-13976/ISSM-13965-13966.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13965-13966.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13965-13966.diff	(revision 13980)
@@ -0,0 +1,371 @@
+Index: ../trunk-jpl/src/m/solve/parseresultsfromdisk.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 13965)
++++ ../trunk-jpl/src/m/solve/parseresultsfromdisk.py	(revision 13966)
+@@ -1,6 +1,7 @@
+ import struct
+ import numpy
+ from collections import OrderedDict
++import results as resultsclass
+ from MatlabFuncs import *
+ from MatlabProcessPatch import *
+ 
+@@ -36,24 +37,24 @@
+ 	except IOError as e:
+ 		raise IOError("loadresultsfromdisk error message: could not open '%s' for binary reading." % filename)
+ 
+-	results=OrderedDict()
++	results=[]
+ 
+ 	#Read fields until the end of the file.
+ 	result=ReadData(fid)
+ 	while result:
++		if result['step'] > len(results):
++			for i in xrange(len(results),result['step']-1):
++				results.append(None)
++			results.append(resultsclass.results())
+ 		#Get time and step
+-		if result['step'] not in results:
+-			results[result['step']]=OrderedDict()
+-			results[result['step']]['step']=result['step']
+-			results[result['step']]['time']=result['time'] 
++		setattr(results[result['step']-1],'step',result['step'])
++		setattr(results[result['step']-1],'time',result['time']) 
+ 	
+ 		#Add result
+-		if result['step'] in results and \
+-		   result['fieldname'] in results[result['step']] and \
+-		   not strcmp(result['fieldname'],'SolutionType'):
+-			results[result['step']][result['fieldname']]=numpy.vstack((results[result['step']][result['fieldname']],result['field']))
++		if hasattr(results[result['step']-1],result['fieldname']) and not strcmp(result['fieldname'],'SolutionType'):
++			setattr(results[result['step']-1],result['fieldname'],numpy.vstack((getattr(results[result['step']-1],result['fieldname']),result['field'])))
+ 		else:
+-			results[result['step']][result['fieldname']]=result['field']
++			setattr(results[result['step']-1],result['fieldname'],result['field'])
+ 
+ 		#read next result
+ 		result=ReadData(fid)
+@@ -77,7 +78,7 @@
+ 	except IOError as e:
+ 		raise IOError("loadresultsfromdisk error message: could not open '%s' for binary reading." % filename)
+ 
+-	results=OrderedDict()
++	results=[]
+ 
+ 	#if we have done split I/O, ie, we have results that are fragmented across patches, 
+ 	#do a first pass, and figure out the structure of results
+@@ -85,16 +86,18 @@
+ 	while result:
+ 
+ 		#Get time and step
+-		if result['step'] not in results:
+-			results[result['step']]=OrderedDict()
+-			results[result['step']]['step']=result['step']
+-			results[result['step']]['time']=result['time'] 
++		if result['step'] > len(results):
++			for i in xrange(len(results),result['step']-1):
++				results.append(None)
++			results.append(resultsclass.results())
++		setattr(results[result['step']-1],'step',result['step'])
++		setattr(results[result['step']-1],'time',result['time']) 
+ 
+ 		#Add result
+ 		if strcmpi(result['fieldname'],'Patch'):
+-			results[result['step']][result['fieldname']]=[0,result['N']]
++			setattr(results[result['step']-1],result['fieldname'],[0,result['N']])
+ 		else:
+-			results[result['step']][result['fieldname']]=float('NaN')
++			setattr(results[result['step']-1],result['fieldname'],float('NaN'))
+ 
+ 		#read next result
+ 		result=ReadDataDimensions(fid)
+@@ -106,8 +109,8 @@
+ 
+ 		#Add result
+ 		if strcmpi(result['fieldname'],'Patch'):
+-			patchdimensions=results[result['step']][result['fieldname']]
+-			results[result['step']][result['fieldname']]=[patchdimensions[0]+result['M'],result['N']]
++			patchdimensions=getattr(results[result['step']-1],result['fieldname'])
++			setattr(results[result['step']-1],result['fieldname'],[patchdimensions[0]+result['M'],result['N']])
+ 
+ 		#read next result
+ 		result=ReadDataDimensions(fid)
+@@ -115,8 +118,8 @@
+ 	#allocate patches
+ 	for result in results.itervalues():
+ 		if 'Patch' in result:
+-			result['Patch']=numpy.zeros(shape=(result['Patch'][0],result['Patch'][1]),dtype=float)
+-			result['counter']=0    #use to index into the patch
++			setattr(result,'Patch',numpy.zeros((result['Patch'][0],result['Patch'][1])))
++			setattr(result,'counter',0)    #use to index into the patch
+ 
+ 	#third pass, this time to read the real information
+ 	fid.seek(0)    #rewind
+@@ -124,21 +127,22 @@
+ 	while result:
+ 
+ 		#Get time and step
+-		if result['step'] not in results:
+-			results[result['step']]=OrderedDict()
+-			results[result['step']]['step']=result['step']
+-			results[result['step']]['time']=result['time'] 
++		if result['step']> len(results):
++			for i in xrange(len(results),result['step']-1):
++				results.append(None)
++			results.append(resultsclass.results())
++		setattr(results[result['step']-1],'step',result['step'])
++		setattr(results[result['step']-1],'time',result['time']) 
+ 
+ 		#Add result
+ 		if strcmpi(result['fieldname'],'Patch'):
+-			counter=results[result['step']]['counter']
++			counter=results[result['step']-1].counter
+ 			counter2=counter+result['field'].shape[0]-1
+-			results[result['step']][result['fieldname']][counter:counter2,:]=result['field']
+-
++			getattr(results[result['step']-1],result['fieldname'])[counter:counter2,:]=result['field']
+ 			#increment counter: 
+-			results[result['step']]['counter']=counter2+1
++			results[result['step']-1].counter=counter2+1
+ 		else:
+-			results[result['step']][result['fieldname']]=result['field']
++			setattr(results[result['step']-1],result['fieldname'],result['field'])
+ 
+ 		#read next result
+ 		result=ReadData(fid)
+@@ -187,7 +191,7 @@
+ 		result['field']=field
+ 
+ 	except struct.error as e:
+-		result=OrderedDict()
++		result=None
+ 
+ 	return result
+ 	# }}}
+@@ -229,7 +233,7 @@
+ 		result['N']=N
+ 
+ 	except struct.error as e:
+-		result=OrderedDict()
++		result=None
+ 
+ 	return result
+ 	# }}}
+Index: ../trunk-jpl/src/m/solve/loadresultsfromdisk.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/loadresultsfromdisk.py	(revision 13965)
++++ ../trunk-jpl/src/m/solve/loadresultsfromdisk.py	(revision 13966)
+@@ -1,7 +1,8 @@
+ import os
+-from collections import OrderedDict
++from results import *
+ from parseresultsfromdisk import *
+ from EnumToString import EnumToString
++from MatlabFuncs import *
+ 
+ def loadresultsfromdisk(md,filename):
+ 	"""
+@@ -22,34 +23,38 @@
+ 			raise OSError("binary file '%s' not found." % filename)
+ 
+ 		#initialize md.results if not a structure yet
+-		if not isinstance(md.results,dict):
+-			md.results=OrderedDict()
++		if not isinstance(md.results,results):
++			md.results=results()
+ 
+ 		#load results onto model
+-		structure=parseresultsfromdisk(filename,~md.settings.io_gather)
++		structure=parseresultsfromdisk(filename,not md.settings.io_gather)
+ 		if not len(structure):
+ 			raise RuntimeError("No result found in binary file '%s'. Check for solution crash." % filename)
+-		md.results[structure[1]['SolutionType']]=structure;
++		setattr(md.results,structure[0].SolutionType,structure)
+ 
+ 		#recover solution_type from results
+-		md.private.solution=structure[1]['SolutionType']
++		md.private.solution=structure[0].SolutionType
+ 
+ 		#read log files onto fields
+ 		if os.path.exists(md.miscellaneous.name+'.errlog'):
+ 			with open(md.miscellaneous.name+'.errlog','r') as f:
+-				md.results[structure[1]['SolutionType']]['errlog']=[line[:-1] for line in f]
++				setattr(getattr(md.results,structure[0].SolutionType)[0],'errlog',[line[:-1] for line in f])
+ 		else:
+-			md.results[structure[1]['SolutionType']]['errlog']=[]
++			setattr(getattr(md.results,structure[0].SolutionType)[0],'errlog',[])
+ 
+ 		if os.path.exists(md.miscellaneous.name+'.outlog'):
+ 			with open(md.miscellaneous.name+'.outlog','r') as f:
+-				md.results[structure[1]['SolutionType']]['outlog']=[line[:-1] for line in f]
++				setattr(getattr(md.results,structure[0].SolutionType)[0],'outlog',[line[:-1] for line in f])
+ 		else:
+-			md.results[structure[1]['SolutionType']]['outlog']=[]
++			setattr(getattr(md.results,structure[0].SolutionType)[0],'outlog',[])
+ 
+-		if len(md.results[structure[1]['SolutionType']]['errlog']):
++		if len(getattr(md.results,structure[0].SolutionType)[0].errlog):
+ 			print ("loadresultsfromcluster info message: error during solution. Check your errlog and outlog model fields.")
+ 
++		#if only one solution, extract it from list for user friendliness
++		if len(structure) == 1 and not strcmp(structure[0].SolutionType,'TransientSolution'):
++			setattr(md.results,structure[0].SolutionType,structure[0])
++
+ 	#post processes qmu results if necessary
+ 	else:
+ 
+Index: ../trunk-jpl/src/m/solve/MatlabProcessPatch.py
+===================================================================
+--- ../trunk-jpl/src/m/solve/MatlabProcessPatch.py	(revision 13965)
++++ ../trunk-jpl/src/m/solve/MatlabProcessPatch.py	(revision 13966)
+@@ -7,10 +7,10 @@
+ 	"""
+ 
+ 	#loop over steps
+-	for structurei in structure.itervalues():
++	for structurei in structure:
+ 
+ 		#return if there is no field Patch
+-		if 'Patch' not in structurei:
++		if not hasattr(structurei,'Patch'):
+ 			continue
+ 
+ 		raise SystemError("MatlabProcessPatch not implemented in Python.")
+Index: ../trunk-jpl/src/m/classes/model/model.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/model/model.py	(revision 13965)
++++ ../trunk-jpl/src/m/classes/model/model.py	(revision 13966)
+@@ -30,10 +30,10 @@
+ from flaim import flaim
+ from inversion import inversion
+ from qmu import qmu
++from results import results
+ from radaroverlay import radaroverlay
+ from miscellaneous import miscellaneous
+ from private import private
+-from collections import OrderedDict
+ from EnumDefinitions import *
+ from ismumps import *
+ from mumpsoptions import *
+@@ -86,7 +86,7 @@
+ 		self.inversion        = inversion()
+ 		self.qmu              = qmu()
+ 
+-		self.results          = OrderedDict()
++		self.results          = results()
+ 		self.radaroverlay     = radaroverlay()
+ 		self.miscellaneous    = miscellaneous()
+ 		self.private          = private()
+@@ -409,18 +409,37 @@
+ 
+ 		#Results fields
+ 		if md1.results:
+-			md2.results=OrderedDict()
+-			for solutionfield in md1.results.iterkeys():
+-				#get time step
+-				for i in m1.results[solutionfield].iterkeys():
+-					#get subfields
+-					for solutionsubfield,field in m1.results[solutionfield][i].iteritems():
+-						if   numpy.size(field)==numberofvertices1:
+-							md2.results[solutionfield][i][solutionsubfield]=field[pos_node]
+-						elif numpy.size(field)==numberofelements1:
+-							md2.results[solutionfield][i][solutionsubfield]=field[pos_elem]
++			md2.results=results()
++			for solutionfield,field in md1.results.__dict__.iteritems():
++				if   isinstance(field,list):
++					setattr(md2.results,solutionfield,[])
++					#get time step
++					for i,fieldi in enumerate(field):
++						if isinstance(fieldi,results) and fieldi:
++							getattr(md2.results,solutionfield).append(results())
++							fieldr=getattr(md2.results,solutionfield)[i]
++							#get subfields
++							for solutionsubfield,subfield in fieldi.__dict__.iteritems():
++								if   numpy.size(subfield)==numberofvertices1:
++									setattr(fieldr,solutionsubfield,subfield[pos_node])
++								elif numpy.size(subfield)==numberofelements1:
++									setattr(fieldr,solutionsubfield,subfield[pos_elem])
++								else:
++									setattr(fieldr,solutionsubfield,subfield)
+ 						else:
+-							md2.results[solutionfield][i][solutionsubfield]=field
++							getattr(md2.results,solutionfield).append(None)
++				elif isinstance(field,results):
++					setattr(md2.results,solutionfield,results())
++					if isinstance(field,results) and field:
++						fieldr=getattr(md2.results,solutionfield)
++						#get subfields
++						for solutionsubfield,subfield in field.__dict__.iteritems():
++							if   numpy.size(subfield)==numberofvertices1:
++								setattr(fieldr,solutionsubfield,subfield[pos_node])
++							elif numpy.size(subfield)==numberofelements1:
++								setattr(fieldr,solutionsubfield,subfield[pos_elem])
++							else:
++								setattr(fieldr,solutionsubfield,subfield)
+ 
+ 		#Keep track of pos_node and pos_elem
+ 		md2.mesh.extractedvertices=pos_node.astype(float)+1
+Index: ../trunk-jpl/src/m/classes/results.py
+===================================================================
+--- ../trunk-jpl/src/m/classes/results.py	(revision 0)
++++ ../trunk-jpl/src/m/classes/results.py	(revision 13966)
+@@ -0,0 +1,59 @@
++import numpy
++from pairoptions import *
++from fielddisplay import *
++from MatlabFuncs import *
++from EnumDefinitions import *
++from WriteData import *
++
++class results(object):
++	"""
++	RESULTS class definition
++
++	   Usage:
++	      results=results();
++	"""
++
++	def __init__(self,*args):    # {{{
++		pass
++	# }}}
++
++	def __repr__(self):    # {{{
++		s ="   Model results:\n"
++
++		if 'step' in self.__dict__:
++			s+="%s\n" % fielddisplay(self,'step',"step number")
++		if 'time' in self.__dict__:
++			s+="%s\n" % fielddisplay(self,'time',"time value")
++		if 'SolutionType' in self.__dict__:
++			s+="%s\n" % fielddisplay(self,'SolutionType',"solution type")
++
++		for name in self.__dict__.iterkeys():
++			if name not in ['step','time','SolutionType','errlog','outlog']:
++				if   isinstance(getattr(self,name),list):
++					s+="%s\n" % fielddisplay(self,name,"model results list")
++				elif isinstance(getattr(self,name),results):
++					s+="%s\n" % fielddisplay(self,name,"model results case")
++				else:
++					s+="%s\n" % fielddisplay(self,name,"")
++
++		if 'errlog' in self.__dict__:
++			s+="%s\n" % fielddisplay(self,'errlog',"error log file")
++		if 'outlog' in self.__dict__:
++			s+="%s\n" % fielddisplay(self,'outlog',"output log file")
++
++		return s
++	# }}}
++
++	def setdefaultparameters(self):    # {{{
++		#do nothing
++		return self
++	# }}}
++
++	def checkconsistency(self,md,solution,analyses):    # {{{
++		return md
++	# }}}
++
++	def marshall(self,fid):    # {{{
++		pass
++	# }}}
++
Index: /issm/oecreview/Archive/13393-13976/ISSM-13966-13967.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13966-13967.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13966-13967.diff	(revision 13980)
@@ -0,0 +1,4492 @@
+Index: ../trunk-jpl/test/NightlyRun/test202.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test202.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test202.py	(revision 13967)
+@@ -22,9 +22,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test121.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test121.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test121.py	(revision 13967)
+@@ -27,13 +27,13 @@
+ 	'Enthalpy3','Waterfraction3','Temperature3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-10,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Enthalpy'],\
+-	md.results['TransientSolution'][1]['Waterfraction'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][2]['Enthalpy'],\
+-	md.results['TransientSolution'][2]['Waterfraction'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][3]['Enthalpy'],\
+-	md.results['TransientSolution'][3]['Waterfraction'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
++	md.results.TransientSolution[0].Enthalpy,\
++	md.results.TransientSolution[0].Waterfraction,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[1].Enthalpy,\
++	md.results.TransientSolution[1].Waterfraction,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[2].Enthalpy,\
++	md.results.TransientSolution[2].Waterfraction,\
++	md.results.TransientSolution[2].Temperature,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test511.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test511.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test511.py	(revision 13967)
+@@ -40,11 +40,11 @@
+ field_names     =['Gradient','Misfits','MaterialsRheologyB','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-11,1e-12,1e-12,1e-09,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Gradient1'],\
+-	md.results['DiagnosticSolution'][1]['J'],\
+-	md.results['DiagnosticSolution'][1]['MaterialsRheologyB'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results.DiagnosticSolution.Gradient1,\
++	md.results.DiagnosticSolution.J,\
++	md.results.DiagnosticSolution.MaterialsRheologyB,\
++	md.results.DiagnosticSolution.Pressure,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test430.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test430.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test430.py	(revision 13967)
+@@ -22,9 +22,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-07,1e-07,1e-06,1e-07,1e-07]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test323.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test323.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test323.py	(revision 13967)
+@@ -21,25 +21,25 @@
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test404.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test404.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test404.py	(revision 13967)
+@@ -20,9 +20,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-07,1e-07,1e-06,1e-07,1e-07]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test216.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test216.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test216.py	(revision 13967)
+@@ -30,8 +30,8 @@
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-11,1e-11,1e-11,1e-11]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test109.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test109.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test109.py	(revision 13967)
+@@ -23,6 +23,6 @@
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test606.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test606.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test606.py	(revision 13967)
+@@ -19,6 +19,6 @@
+ field_names     =['BedSlopeX','BedSlopeY']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['BedSlopeSolution'][1]['BedSlopeX'],\
+-	md.results['BedSlopeSolution'][1]['BedSlopeY'],\
++	md.results.BedSlopeSolution.BedSlopeX,\
++	md.results.BedSlopeSolution.BedSlopeY,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test211.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test211.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test211.py	(revision 13967)
+@@ -29,34 +29,34 @@
+ 	1e-08,1e-08,1e-06,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06,\
+ 	1e-07,1e-07,1e-06,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test104.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test104.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test104.py	(revision 13967)
+@@ -19,9 +19,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-08,1e-08,1e-07,1e-08,1e-08]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test601.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test601.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test601.py	(revision 13967)
+@@ -18,5 +18,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['PrognosticSolution'][1]['Thickness'],\
++	md.results.PrognosticSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test306.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test306.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test306.py	(revision 13967)
+@@ -19,9 +19,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test225.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test225.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test225.py	(revision 13967)
+@@ -27,34 +27,34 @@
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,\
+ 	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test118.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test118.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test118.py	(revision 13967)
+@@ -22,5 +22,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['BalancethicknessSolution'][1]['Thickness'],\
++	md.results.BalancethicknessSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test508.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test508.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test508.py	(revision 13967)
+@@ -20,11 +20,11 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-08]
+ field_values=[\
+-	md.results['SteadystateSolution'][1]['Vx'],\
+-	md.results['SteadystateSolution'][1]['Vy'],\
+-	md.results['SteadystateSolution'][1]['Vz'],\
+-	md.results['SteadystateSolution'][1]['Vel'],\
+-	md.results['SteadystateSolution'][1]['Pressure'],\
+-	md.results['SteadystateSolution'][1]['Temperature'],\
+-	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.SteadystateSolution.Vx,\
++	md.results.SteadystateSolution.Vy,\
++	md.results.SteadystateSolution.Vz,\
++	md.results.SteadystateSolution.Vel,\
++	md.results.SteadystateSolution.Pressure,\
++	md.results.SteadystateSolution.Temperature,\
++	md.results.SteadystateSolution.BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test427.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test427.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test427.py	(revision 13967)
+@@ -35,16 +35,16 @@
+ 	1e-13,1e-13,1e-13,1e-13,\
+ 	1e-10,1e-11,1e-10,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['MaskElementonfloatingice'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['MaskElementonfloatingice'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['MaskElementonfloatingice'],\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].MaskElementonfloatingice,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].MaskElementonfloatingice,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].MaskElementonfloatingice,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test220.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test220.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test220.py	(revision 13967)
+@@ -21,9 +21,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-06,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test301.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test301.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test301.py	(revision 13967)
+@@ -18,8 +18,8 @@
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test113.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test113.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test113.py	(revision 13967)
+@@ -19,6 +19,6 @@
+ field_names     =['SurfaceSlopeX','SurfaceSlopeY']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['SurfaceSlopeSolution'][1]['SurfaceSlopeX'],\
+-	md.results['SurfaceSlopeSolution'][1]['SurfaceSlopeY'],\
++	md.results.SurfaceSlopeSolution.SurfaceSlopeX,\
++	md.results.SurfaceSlopeSolution.SurfaceSlopeY,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test610.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test610.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test610.py	(revision 13967)
+@@ -20,5 +20,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['BalancethicknessSolution'][1]['Thickness'],\
++	md.results.BalancethicknessSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test503.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test503.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test503.py	(revision 13967)
+@@ -19,9 +19,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test422.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test422.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test422.py	(revision 13967)
+@@ -21,9 +21,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-06,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test315.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test315.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test315.py	(revision 13967)
+@@ -23,34 +23,34 @@
+ 	1e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
+ 	1e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test208.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test208.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test208.py	(revision 13967)
+@@ -21,25 +21,25 @@
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test274.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test274.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test274.py	(revision 13967)
+@@ -28,8 +28,8 @@
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-11,1e-11,1e-11,1e-11]
+ field_values=[\
+-	   md.results['DiagnosticSolution'][1]['Vx'],\
+-	   md.results['DiagnosticSolution'][1]['Vy'],\
+-	   md.results['DiagnosticSolution'][1]['Vel'],\
+-	   md.results['DiagnosticSolution'][1]['Pressure'],\
++	   md.results.DiagnosticSolution.Vx,\
++	   md.results.DiagnosticSolution.Vy,\
++	   md.results.DiagnosticSolution.Vel,\
++	   md.results.DiagnosticSolution.Pressure,\
+ 	   ]
+Index: ../trunk-jpl/test/NightlyRun/test329.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test329.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test329.py	(revision 13967)
+@@ -40,34 +40,34 @@
+ 	1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
+ 	1e-09,5e-09,1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][1]['TotalSmb'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][2]['TotalSmb'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][3]['TotalSmb'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[0].TotalSmb,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[1].TotalSmb,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[2].TotalSmb,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test3005.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3005.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test3005.py	(revision 13967)
+@@ -19,5 +19,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['PrognosticSolution'][1]['Thickness'],\
++	md.results.PrognosticSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test3019.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3019.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test3019.py	(revision 13967)
+@@ -28,7 +28,7 @@
+ md=solve(md,TransientSolutionEnum())
+ 
+ #recover jacobian: 
+-jac_reverse=md.results['TransientSolution'][1]['AutodiffJacobian']
++jac_reverse=md.results.TransientSolution[0].AutodiffJacobian
+ 
+ #now run vectorial forward mode
+ md.autodiff.independents=[independent('name','Thickness','type','vertex','nods',md.mesh.numberofvertices,'fov_forward_indices',numpy.arange(0,md.mesh.numberofvertices))]
+@@ -38,7 +38,7 @@
+ md=solve(md,TransientSolutionEnum())
+ 
+ #recover jacobian: 
+-jac_forward=md.results['TransientSolution'][1]['AutodiffJacobian']
++jac_forward=md.results.TransientSolution[0].AutodiffJacobian
+ 
+ #Fields and tolerances to track changes
+ field_names     =['Jac Forward','Jac Reverse','Jac Forward - Reverse']
+Index: ../trunk-jpl/test/NightlyRun/test310.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test310.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test310.py	(revision 13967)
+@@ -22,5 +22,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['PrognosticSolution'][1]['Thickness'],\
++	md.results.PrognosticSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test122.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test122.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test122.py	(revision 13967)
+@@ -27,37 +27,37 @@
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,\
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['Enthalpy'],\
+-	md.results['TransientSolution'][1]['Waterfraction'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['Enthalpy'],\
+-	md.results['TransientSolution'][2]['Waterfraction'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['Enthalpy'],\
+-	md.results['TransientSolution'][3]['Waterfraction'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].Enthalpy,\
++	md.results.TransientSolution[0].Waterfraction,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].Enthalpy,\
++	md.results.TransientSolution[1].Waterfraction,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].Enthalpy,\
++	md.results.TransientSolution[2].Waterfraction,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test203.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test203.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test203.py	(revision 13967)
+@@ -22,9 +22,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test431.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test431.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test431.py	(revision 13967)
+@@ -23,12 +23,12 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','Water fraction','Enthalpy']
+ field_tolerances=[1e-10,1e-10,1e-09,1e-10,1e-13,1e-10,1e-10,1e-10]
+ field_values=[\
+-	md.results['SteadystateSolution'][1]['Vx'],\
+-	md.results['SteadystateSolution'][1]['Vy'],\
+-	md.results['SteadystateSolution'][1]['Vz'],\
+-	md.results['SteadystateSolution'][1]['Vel'],\
+-	md.results['SteadystateSolution'][1]['Pressure'],\
+-	md.results['SteadystateSolution'][1]['Temperature'],\
+-	md.results['SteadystateSolution'][1]['Waterfraction'],\
+-	md.results['SteadystateSolution'][1]['Enthalpy'],\
++	md.results.SteadystateSolution.Vx,\
++	md.results.SteadystateSolution.Vy,\
++	md.results.SteadystateSolution.Vz,\
++	md.results.SteadystateSolution.Vel,\
++	md.results.SteadystateSolution.Pressure,\
++	md.results.SteadystateSolution.Temperature,\
++	md.results.SteadystateSolution.Waterfraction,\
++	md.results.SteadystateSolution.Enthalpy,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test512.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test512.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test512.py	(revision 13967)
+@@ -36,11 +36,11 @@
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11,1e-11]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Gradient1'],\
+-	md.results['DiagnosticSolution'][1]['J'],\
+-	md.results['DiagnosticSolution'][1]['FrictionCoefficient'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy']
++	md.results.DiagnosticSolution.Gradient1,\
++	md.results.DiagnosticSolution.J,\
++	md.results.DiagnosticSolution.FrictionCoefficient,\
++	md.results.DiagnosticSolution.Pressure,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test405.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test405.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test405.py	(revision 13967)
+@@ -20,9 +20,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-05,1e-05,1e-05,1e-05,1e-05]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test324.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test324.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test324.py	(revision 13967)
+@@ -26,34 +26,34 @@
+ 	5*1e-11,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
+ 	1e-10,  1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-#	md.results['TransientSolution'][3]['Vx'],\
+-#	md.results['TransientSolution'][3]['Vy'],\
+-#	md.results['TransientSolution'][3]['Vz'],\
+-#	md.results['TransientSolution'][3]['Vel'],\
+-#	md.results['TransientSolution'][3]['Pressure'],\
+-#	md.results['TransientSolution'][3]['Bed'],\
+-#	md.results['TransientSolution'][3]['Surface'],\
+-#	md.results['TransientSolution'][3]['Thickness'],\
+-#	md.results['TransientSolution'][3]['Temperature'],\
+-#	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++#	md.results.TransientSolution[2].Vx,\
++#	md.results.TransientSolution[2].Vy,\
++#	md.results.TransientSolution[2].Vz,\
++#	md.results.TransientSolution[2].Vel,\
++#	md.results.TransientSolution[2].Pressure,\
++#	md.results.TransientSolution[2].Bed,\
++#	md.results.TransientSolution[2].Surface,\
++#	md.results.TransientSolution[2].Thickness,\
++#	md.results.TransientSolution[2].Temperature,\
++#	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test217.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test217.py	(revision 13967)
+@@ -79,4 +79,4 @@
+ # Fields and tolerances to track changes
+ field_names     =['Vy']
+ field_tolerances=[1e-13]
+-field_values=[md.results['DiagnosticSolution'][1]['Vy']]
++field_values=.Vy]
+Index: ../trunk-jpl/test/NightlyRun/test607.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test607.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test607.py	(revision 13967)
+@@ -20,6 +20,6 @@
+ field_names     =['BedSlopeX','BedSlopeY']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['BedSlopeSolution'][1]['BedSlopeX'],\
+-	md.results['BedSlopeSolution'][1]['BedSlopeY'],\
++	md.results.BedSlopeSolution.BedSlopeX,\
++	md.results.BedSlopeSolution.BedSlopeY,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test419.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test419.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test419.py	(revision 13967)
+@@ -20,9 +20,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test212.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test212.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test212.py	(revision 13967)
+@@ -39,11 +39,11 @@
+ field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-md.results['DiagnosticSolution'][1]['Gradient1'],\
+-md.results['DiagnosticSolution'][1]['J'],\
+-md.results['DiagnosticSolution'][1]['MaterialsRheologyBbar'],\
+-md.results['DiagnosticSolution'][1]['Pressure'],\
+-md.results['DiagnosticSolution'][1]['Vel'],\
+-md.results['DiagnosticSolution'][1]['Vx'],\
+-md.results['DiagnosticSolution'][1]['Vy'],\
++md.results.DiagnosticSolution.Gradient1,\
++md.results.DiagnosticSolution.J,\
++md.results.DiagnosticSolution.MaterialsRheologyBbar,\
++md.results.DiagnosticSolution.Pressure,\
++md.results.DiagnosticSolution.Vel,\
++md.results.DiagnosticSolution.Vx,\
++md.results.DiagnosticSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test105.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test105.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test105.py	(revision 13967)
+@@ -18,5 +18,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['PrognosticSolution'][1]['Thickness'],\
++	md.results.PrognosticSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test602.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test602.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test602.py	(revision 13967)
+@@ -23,5 +23,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['PrognosticSolution'][1]['Thickness'],\
++	md.results.PrognosticSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test307.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test307.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test307.py	(revision 13967)
+@@ -19,9 +19,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,2e-10,2e-10,1e-10]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test226.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test226.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test226.py	(revision 13967)
+@@ -20,25 +20,25 @@
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test428.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test428.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test428.py	(revision 13967)
+@@ -21,8 +21,8 @@
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test509.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test509.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test509.py	(revision 13967)
+@@ -20,11 +20,11 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06]
+ field_values=[\
+-	md.results['SteadystateSolution'][1]['Vx'],\
+-	md.results['SteadystateSolution'][1]['Vy'],\
+-	md.results['SteadystateSolution'][1]['Vz'],\
+-	md.results['SteadystateSolution'][1]['Vel'],\
+-	md.results['SteadystateSolution'][1]['Pressure'],\
+-	md.results['SteadystateSolution'][1]['Temperature'],\
+-	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.SteadystateSolution.Vx,\
++	md.results.SteadystateSolution.Vy,\
++	md.results.SteadystateSolution.Vz,\
++	md.results.SteadystateSolution.Vel,\
++	md.results.SteadystateSolution.Pressure,\
++	md.results.SteadystateSolution.Temperature,\
++	md.results.SteadystateSolution.BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test302.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test302.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test302.py	(revision 13967)
+@@ -18,8 +18,8 @@
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test221.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test221.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test221.py	(revision 13967)
+@@ -20,9 +20,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-06,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test114.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test114.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test114.py	(revision 13967)
+@@ -18,6 +18,6 @@
+ field_names     =['BedSlopeX','BedSlopeY']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['BedSlopeSolution'][1]['BedSlopeX'],\
+-	md.results['BedSlopeSolution'][1]['BedSlopeY'],\
++	md.results.BedSlopeSolution.BedSlopeX,\
++	md.results.BedSlopeSolution.BedSlopeY,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test611.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test611.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test611.py	(revision 13967)
+@@ -34,8 +34,8 @@
+ field_names     =['Gradient','Misfits','BalancethicknessThickeningRate','Thickness']
+ field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
+ field_values=[\
+-	md.results['BalancethicknessSolution'][1]['Gradient1'],\
+-	md.results['BalancethicknessSolution'][1]['J'],\
+-	md.results['BalancethicknessSolution'][1]['BalancethicknessThickeningRate'],\
+-	md.results['BalancethicknessSolution'][1]['Thickness']
++	md.results.BalancethicknessSolution.Gradient1,\
++	md.results.BalancethicknessSolution.J,\
++	md.results.BalancethicknessSolution.BalancethicknessThickeningRate,\
++	md.results.BalancethicknessSolution.Thickness
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test423.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test423.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test423.py	(revision 13967)
+@@ -36,11 +36,11 @@
+ #test different grounding line dynamics.
+ md.groundingline.migration='AgressiveMigration'
+ md=solve(md,TransientSolutionEnum())
+-element_on_iceshelf_agressive=md.results['TransientSolution'][1]['MaskElementonfloatingice']
++element_on_iceshelf_agressive=md.results.TransientSolution[0].MaskElementonfloatingice
+ 
+ md.groundingline.migration='SoftMigration'
+ md=solve(md,TransientSolutionEnum())
+-element_on_iceshelf_soft=md.results['TransientSolution'][1]['MaskElementonfloatingice']
++element_on_iceshelf_soft=md.results.TransientSolution[0].MaskElementonfloatingice
+ 
+ #Fields and tolerances to track changes
+ field_names     =['ElementOnIceShelfAgressive','ElementOnIceShelfSoft']
+Index: ../trunk-jpl/test/NightlyRun/test504.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test504.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test504.py	(revision 13967)
+@@ -18,18 +18,18 @@
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test316.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test316.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test316.py	(revision 13967)
+@@ -18,25 +18,25 @@
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test209.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test209.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test209.py	(revision 13967)
+@@ -27,34 +27,34 @@
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,\
+ 	1e-13,1e-13,1e-08,1e-13,1e-13,1e-10,1e-10,1e-10,1e-13,1e-8]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test3006.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3006.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test3006.py	(revision 13967)
+@@ -23,5 +23,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['PrognosticSolution'][1]['Thickness'],\
++	md.results.PrognosticSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test230.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test230.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test230.py	(revision 13967)
+@@ -38,40 +38,40 @@
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][4]['Vx'],\
+-	md.results['TransientSolution'][4]['Vy'],\
+-	md.results['TransientSolution'][4]['Vz'],\
+-	md.results['TransientSolution'][4]['Vel'],\
+-	md.results['TransientSolution'][4]['Pressure'],\
+-	md.results['TransientSolution'][4]['Bed'],\
+-	md.results['TransientSolution'][4]['Surface'],\
+-	md.results['TransientSolution'][4]['Thickness'],\
+-	md.results['TransientSolution'][4]['SurfaceforcingsMassBalance'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[3].Vx,\
++	md.results.TransientSolution[3].Vy,\
++	md.results.TransientSolution[3].Vz,\
++	md.results.TransientSolution[3].Vel,\
++	md.results.TransientSolution[3].Pressure,\
++	md.results.TransientSolution[3].Bed,\
++	md.results.TransientSolution[3].Surface,\
++	md.results.TransientSolution[3].Thickness,\
++	md.results.TransientSolution[3].SurfaceforcingsMassBalance,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test311.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test311.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test311.py	(revision 13967)
+@@ -19,5 +19,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['PrognosticSolution'][1]['Thickness'],\
++	md.results.PrognosticSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test204.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test204.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test204.py	(revision 13967)
+@@ -22,9 +22,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-08,1e-08,1e-07,1e-08,1e-08]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test513.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test513.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test513.py	(revision 13967)
+@@ -37,14 +37,14 @@
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-10,1e-10,1e-10,1e-10,1e-6,1e-6,1e-6,1e-6,1e-6,1e-06]
+ field_values=[\
+-	md.results['SteadystateSolution'][1]['Gradient1'],\
+-	md.results['SteadystateSolution'][1]['J'],\
+-	md.results['SteadystateSolution'][1]['FrictionCoefficient'],\
+-	md.results['SteadystateSolution'][1]['Pressure'],\
+-	md.results['SteadystateSolution'][1]['Vel'],\
+-	md.results['SteadystateSolution'][1]['Vx'],\
+-	md.results['SteadystateSolution'][1]['Vy'],\
+-	md.results['SteadystateSolution'][1]['Vz'],\
+-	md.results['SteadystateSolution'][1]['Temperature'],\
+-	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate']
++	md.results.SteadystateSolution.Gradient1,\
++	md.results.SteadystateSolution.J,\
++	md.results.SteadystateSolution.FrictionCoefficient,\
++	md.results.SteadystateSolution.Pressure,\
++	md.results.SteadystateSolution.Vel,\
++	md.results.SteadystateSolution.Vx,\
++	md.results.SteadystateSolution.Vy,\
++	md.results.SteadystateSolution.Vz,\
++	md.results.SteadystateSolution.Temperature,\
++	md.results.SteadystateSolution.BasalforcingsMeltingRate
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test432.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test432.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test432.py	(revision 13967)
+@@ -23,12 +23,12 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','Water fraction','Enthalpy']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-13,1e-10,1e-10,1e-10]
+ field_values=[\
+-	md.results['SteadystateSolution'][1]['Vx'],\
+-	md.results['SteadystateSolution'][1]['Vy'],\
+-	md.results['SteadystateSolution'][1]['Vz'],\
+-	md.results['SteadystateSolution'][1]['Vel'],\
+-	md.results['SteadystateSolution'][1]['Pressure'],\
+-	md.results['SteadystateSolution'][1]['Temperature'],\
+-	md.results['SteadystateSolution'][1]['Waterfraction'],\
+-	md.results['SteadystateSolution'][1]['Enthalpy'],\
++	md.results.SteadystateSolution.Vx,\
++	md.results.SteadystateSolution.Vy,\
++	md.results.SteadystateSolution.Vz,\
++	md.results.SteadystateSolution.Vel,\
++	md.results.SteadystateSolution.Pressure,\
++	md.results.SteadystateSolution.Temperature,\
++	md.results.SteadystateSolution.Waterfraction,\
++	md.results.SteadystateSolution.Enthalpy,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test270.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test270.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test270.py	(revision 13967)
+@@ -25,8 +25,8 @@
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test406.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test406.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test406.py	(revision 13967)
+@@ -21,6 +21,6 @@
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-13,1e-5]
+ field_values=[\
+-	md.results['ThermalSolution'][1]['Temperature'],\
+-	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.ThermalSolution.Temperature,\
++	md.results.ThermalSolution.BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test325.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test325.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test325.py	(revision 13967)
+@@ -22,7 +22,7 @@
+ field_names     =['Enthalpy','Waterfraction','Temperature']
+ field_tolerances=[1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['EnthalpySolution'][1]['Enthalpy'],\
+-	md.results['EnthalpySolution'][1]['Waterfraction'],\
+-	md.results['EnthalpySolution'][1]['Temperature'],\
++	md.results.EnthalpySolution.Enthalpy,\
++	md.results.EnthalpySolution.Waterfraction,\
++	md.results.EnthalpySolution.Temperature,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test608.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test608.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test608.py	(revision 13967)
+@@ -19,5 +19,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['BalancethicknessSolution'][1]['Thickness'],\
++	md.results.BalancethicknessSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test3001.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3001.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test3001.py	(revision 13967)
+@@ -22,11 +22,11 @@
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
+ 	1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['StressTensorxx'],\
+-	md.results['DiagnosticSolution'][1]['StressTensoryy'],\
+-	md.results['DiagnosticSolution'][1]['StressTensorxy'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
++	md.results.DiagnosticSolution.StressTensorxx,\
++	md.results.DiagnosticSolution.StressTensoryy,\
++	md.results.DiagnosticSolution.StressTensorxy,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test3015.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3015.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test3015.py	(revision 13967)
+@@ -55,7 +55,7 @@
+ md=SetIceShelfBC(md)
+ 
+ md=solve(md,PrognosticSolutionEnum())
+-V0=md.results['PrognosticSolution'][1]['IceVolume']
++V0=md.results.PrognosticSolution.IceVolume
+ 
+ #backward
+ md=copy.deepcopy(md2)
+@@ -66,7 +66,7 @@
+ md=SetIceShelfBC(md)
+ 
+ md=solve(md,PrognosticSolutionEnum())
+-V2=md.results['PrognosticSolution'][1]['IceVolume']
++V2=md.results.PrognosticSolution.IceVolume
+ 
+ #compute resulting derivative
+ dVdh_an=(V2-V0)/deltaH
+@@ -81,7 +81,7 @@
+ 
+ md=solve(md,PrognosticSolutionEnum())
+ #retrieve directly
+-dVdh_ad=md.results['PrognosticSolution'][1]['AutodiffJacobian']
++dVdh_ad=md.results.PrognosticSolution.AutodiffJacobian
+ 
+ print "dV/dh: analytical:  #16.16g\n       using adolc:  #16.16g\n" % (dVdh_an,dVdh_ad)
+ 
+Index: ../trunk-jpl/test/NightlyRun/test320.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test320.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test320.py	(revision 13967)
+@@ -36,11 +36,11 @@
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Gradient1'],\
+-	md.results['DiagnosticSolution'][1]['J'],\
+-	md.results['DiagnosticSolution'][1]['FrictionCoefficient'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results.DiagnosticSolution.Gradient1,\
++	md.results.DiagnosticSolution.J,\
++	md.results.DiagnosticSolution.FrictionCoefficient,\
++	md.results.DiagnosticSolution.Pressure,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test401.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test401.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test401.py	(revision 13967)
+@@ -19,8 +19,8 @@
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test213.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test213.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test213.py	(revision 13967)
+@@ -41,11 +41,11 @@
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ #field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Gradient1'],\
+-	md.results['DiagnosticSolution'][1]['J'],\
+-	md.results['DiagnosticSolution'][1]['MaterialsRheologyB'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results.DiagnosticSolution.Gradient1,\
++	md.results.DiagnosticSolution.J,\
++	md.results.DiagnosticSolution.MaterialsRheologyB,\
++	md.results.DiagnosticSolution.Pressure,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test106.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test106.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test106.py	(revision 13967)
+@@ -22,5 +22,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['PrognosticSolution'][1]['Thickness'],\
++	md.results.PrognosticSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test603.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test603.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test603.py	(revision 13967)
+@@ -20,5 +20,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['PrognosticSolution'][1]['Thickness'],\
++	md.results.PrognosticSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test415.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test415.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test415.py	(revision 13967)
+@@ -37,14 +37,14 @@
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-10,1e-9,1e-10,1e-13,1e-10,1e-09,1e-10,1e-8,1e-09,1e-6]
+ field_values=[\
+-	md.results['SteadystateSolution'][1]['Gradient1'],\
+-	md.results['SteadystateSolution'][1]['J'],\
+-	md.results['SteadystateSolution'][1]['FrictionCoefficient'],\
+-	md.results['SteadystateSolution'][1]['Pressure'],\
+-	md.results['SteadystateSolution'][1]['Vel'],\
+-	md.results['SteadystateSolution'][1]['Vx'],\
+-	md.results['SteadystateSolution'][1]['Vy'],\
+-	md.results['SteadystateSolution'][1]['Vz'],\
+-	md.results['SteadystateSolution'][1]['Temperature'],\
+-	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate']
++	md.results.SteadystateSolution.Gradient1,\
++	md.results.SteadystateSolution.J,\
++	md.results.SteadystateSolution.FrictionCoefficient,\
++	md.results.SteadystateSolution.Pressure,\
++	md.results.SteadystateSolution.Vel,\
++	md.results.SteadystateSolution.Vx,\
++	md.results.SteadystateSolution.Vy,\
++	md.results.SteadystateSolution.Vz,\
++	md.results.SteadystateSolution.Temperature,\
++	md.results.SteadystateSolution.BasalforcingsMeltingRate
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test227.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test227.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test227.py	(revision 13967)
+@@ -26,34 +26,34 @@
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,\
+ 	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test308.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test308.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test308.py	(revision 13967)
+@@ -19,9 +19,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test429.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test429.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test429.py	(revision 13967)
+@@ -22,9 +22,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test3010.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3010.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test3010.py	(revision 13967)
+@@ -23,28 +23,28 @@
+ 						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
+ 						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['IceVolume'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['IceVolume'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['IceVolume'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].IceVolume,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].IceVolume,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].IceVolume,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test101.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test101.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test101.py	(revision 13967)
+@@ -21,11 +21,11 @@
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,\
+ 	1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['StressTensorxx'],\
+-	md.results['DiagnosticSolution'][1]['StressTensoryy'],\
+-	md.results['DiagnosticSolution'][1]['StressTensorxy'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
++	md.results.DiagnosticSolution.StressTensorxx,\
++	md.results.DiagnosticSolution.StressTensoryy,\
++	md.results.DiagnosticSolution.StressTensorxy,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test410.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test410.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test410.py	(revision 13967)
+@@ -21,11 +21,11 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-10,1e-13,1e-10,1e-06]
+ field_values=[\
+-	md.results['SteadystateSolution'][1]['Vx'],\
+-	md.results['SteadystateSolution'][1]['Vy'],\
+-	md.results['SteadystateSolution'][1]['Vz'],\
+-	md.results['SteadystateSolution'][1]['Vel'],\
+-	md.results['SteadystateSolution'][1]['Pressure'],\
+-	md.results['SteadystateSolution'][1]['Temperature'],\
+-	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.SteadystateSolution.Vx,\
++	md.results.SteadystateSolution.Vy,\
++	md.results.SteadystateSolution.Vz,\
++	md.results.SteadystateSolution.Vel,\
++	md.results.SteadystateSolution.Pressure,\
++	md.results.SteadystateSolution.Temperature,\
++	md.results.SteadystateSolution.BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test222.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test222.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test222.py	(revision 13967)
+@@ -19,25 +19,25 @@
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test303.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test303.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test303.py	(revision 13967)
+@@ -18,8 +18,8 @@
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test115.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test115.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test115.py	(revision 13967)
+@@ -19,6 +19,6 @@
+ field_names     =['BedSlopeX','BedSlopeY']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['BedSlopeSolution'][1]['BedSlopeX'],\
+-	md.results['BedSlopeSolution'][1]['BedSlopeY'],\
++	md.results.BedSlopeSolution.BedSlopeX,\
++	md.results.BedSlopeSolution.BedSlopeY,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test612.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test612.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test612.py	(revision 13967)
+@@ -36,8 +36,8 @@
+ field_names     =['Gradient','Misfits','BalancethicknessThickeningRate','Thickness']
+ field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
+ field_values=[\
+-	md.results['BalancethicknessSolution'][1]['Gradient1'],\
+-	md.results['BalancethicknessSolution'][1]['J'],\
+-	md.results['BalancethicknessSolution'][1]['BalancethicknessThickeningRate'],\
+-	md.results['BalancethicknessSolution'][1]['Thickness']
++	md.results.BalancethicknessSolution.Gradient1,\
++	md.results.BalancethicknessSolution.J,\
++	md.results.BalancethicknessSolution.BalancethicknessThickeningRate,\
++	md.results.BalancethicknessSolution.Thickness
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test505.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test505.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test505.py	(revision 13967)
+@@ -21,24 +21,24 @@
+ field_tolerances=[1e-12,1e-12,1e-10,1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13, \
+ 						1e-13,1e-12,1e-10,1e-12,1e-13,1e-11,1e-11,1e-12,1e-11,1e-8]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test424.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test424.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test424.py	(revision 13967)
+@@ -34,16 +34,16 @@
+ 	1e-13,1e-13,1e-13,1e-13,\
+ 	1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['MaskElementonfloatingice'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['MaskElementonfloatingice'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['MaskElementonfloatingice'],\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].MaskElementonfloatingice,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].MaskElementonfloatingice,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].MaskElementonfloatingice,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test236.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test236.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test236.py	(revision 13967)
+@@ -66,31 +66,31 @@
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['SurfaceforcingsMonthlytemperatures'],\
+-	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['SurfaceforcingsMonthlytemperatures'],\
+-	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['SurfaceforcingsMonthlytemperatures'],\
+-	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].SurfaceforcingsMonthlytemperatures,\
++	md.results.TransientSolution[0].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].SurfaceforcingsMonthlytemperatures,\
++	md.results.TransientSolution[1].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].SurfaceforcingsMonthlytemperatures,\
++	md.results.TransientSolution[2].SurfaceforcingsMassBalance,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test317.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test317.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test317.py	(revision 13967)
+@@ -23,34 +23,34 @@
+ 	1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
+ 	1e-09,5e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test3007.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3007.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test3007.py	(revision 13967)
+@@ -20,5 +20,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['PrognosticSolution'][1]['Thickness'],\
++	md.results.PrognosticSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test110.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test110.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test110.py	(revision 13967)
+@@ -22,28 +22,28 @@
+ 						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
+ 						1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['IceVolume'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['IceVolume'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['IceVolume'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].IceVolume,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].IceVolume,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].IceVolume,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test231.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test231.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test231.py	(revision 13967)
+@@ -38,40 +38,40 @@
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,\
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][4]['Vx'],\
+-	md.results['TransientSolution'][4]['Vy'],\
+-	md.results['TransientSolution'][4]['Vz'],\
+-	md.results['TransientSolution'][4]['Vel'],\
+-	md.results['TransientSolution'][4]['Pressure'],\
+-	md.results['TransientSolution'][4]['Bed'],\
+-	md.results['TransientSolution'][4]['Surface'],\
+-	md.results['TransientSolution'][4]['Thickness'],\
+-	md.results['TransientSolution'][4]['SurfaceforcingsMassBalance'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[3].Vx,\
++	md.results.TransientSolution[3].Vy,\
++	md.results.TransientSolution[3].Vz,\
++	md.results.TransientSolution[3].Vel,\
++	md.results.TransientSolution[3].Pressure,\
++	md.results.TransientSolution[3].Bed,\
++	md.results.TransientSolution[3].Surface,\
++	md.results.TransientSolution[3].Thickness,\
++	md.results.TransientSolution[3].SurfaceforcingsMassBalance,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test312.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test312.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test312.py	(revision 13967)
+@@ -20,6 +20,6 @@
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-13,1e-8]
+ field_values=[\
+-	md.results['ThermalSolution'][1]['Temperature'],\
+-	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.ThermalSolution.Temperature,\
++	md.results.ThermalSolution.BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test205.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test205.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test205.py	(revision 13967)
+@@ -22,9 +22,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-05,1e-05,1e-05,1e-05,1e-05]
+ field_values=[\
+-md.results['DiagnosticSolution'][1]['Vx'],\
+-md.results['DiagnosticSolution'][1]['Vy'],\
+-md.results['DiagnosticSolution'][1]['Vz'],\
+-md.results['DiagnosticSolution'][1]['Vel'],\
+-md.results['DiagnosticSolution'][1]['Pressure'],\
++md.results.DiagnosticSolution.Vx,\
++md.results.DiagnosticSolution.Vy,\
++md.results.DiagnosticSolution.Vz,\
++md.results.DiagnosticSolution.Vel,\
++md.results.DiagnosticSolution.Pressure,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test407.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test407.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test407.py	(revision 13967)
+@@ -24,6 +24,6 @@
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test326.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test326.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test326.py	(revision 13967)
+@@ -28,13 +28,13 @@
+ 	'Enthalpy3','Waterfraction3','Temperature3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Enthalpy'],\
+-	md.results['TransientSolution'][1]['Waterfraction'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][2]['Enthalpy'],\
+-	md.results['TransientSolution'][2]['Waterfraction'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][3]['Enthalpy'],\
+-	md.results['TransientSolution'][3]['Waterfraction'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
++	md.results.TransientSolution[0].Enthalpy,\
++	md.results.TransientSolution[0].Waterfraction,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[1].Enthalpy,\
++	md.results.TransientSolution[1].Waterfraction,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[2].Enthalpy,\
++	md.results.TransientSolution[2].Waterfraction,\
++	md.results.TransientSolution[2].Temperature,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test219.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test219.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test219.py	(revision 13967)
+@@ -21,9 +21,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test609.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test609.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test609.py	(revision 13967)
+@@ -22,5 +22,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['BalancethicknessSolution'][1]['Thickness'],\
++	md.results.BalancethicknessSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test3002.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3002.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test3002.py	(revision 13967)
+@@ -20,9 +20,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test321.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test321.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test321.py	(revision 13967)
+@@ -36,11 +36,11 @@
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-08,1e-07,1e-10,1e-10,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Gradient1'],\
+-	md.results['DiagnosticSolution'][1]['J'],\
+-	md.results['DiagnosticSolution'][1]['FrictionCoefficient'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results.DiagnosticSolution.Gradient1,\
++	md.results.DiagnosticSolution.J,\
++	md.results.DiagnosticSolution.FrictionCoefficient,\
++	md.results.DiagnosticSolution.Pressure,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test402.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test402.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test402.py	(revision 13967)
+@@ -20,9 +20,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test214.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test214.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test214.py	(revision 13967)
+@@ -40,11 +40,11 @@
+ field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-07,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Gradient1'],\
+-	md.results['DiagnosticSolution'][1]['J'],\
+-	md.results['DiagnosticSolution'][1]['MaterialsRheologyB'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy']
++	md.results.DiagnosticSolution.Gradient1,\
++	md.results.DiagnosticSolution.J,\
++	md.results.DiagnosticSolution.MaterialsRheologyB,\
++	md.results.DiagnosticSolution.Pressure,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test107.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test107.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test107.py	(revision 13967)
+@@ -19,5 +19,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['PrognosticSolution'][1]['Thickness'],\
++	md.results.PrognosticSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test604.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test604.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test604.py	(revision 13967)
+@@ -19,6 +19,6 @@
+ field_names     =['SurfaceSlopeX','SurfaceSlopeY']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['SurfaceSlopeSolution'][1]['SurfaceSlopeX'],\
+-	md.results['SurfaceSlopeSolution'][1]['SurfaceSlopeY'],\
++	md.results.SurfaceSlopeSolution.SurfaceSlopeX,\
++	md.results.SurfaceSlopeSolution.SurfaceSlopeY,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test416.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test416.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test416.py	(revision 13967)
+@@ -37,14 +37,14 @@
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy','Vz','Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-08,1e-07,1e-08,1e-08,1e-08,1e-08,1e-08,1e-07,1e-08,1e-05]
+ field_values=[\
+-	md.results['SteadystateSolution'][1]['Gradient1'],\
+-	md.results['SteadystateSolution'][1]['J'],\
+-	md.results['SteadystateSolution'][1]['FrictionCoefficient'],\
+-	md.results['SteadystateSolution'][1]['Pressure'],\
+-	md.results['SteadystateSolution'][1]['Vel'],\
+-	md.results['SteadystateSolution'][1]['Vx'],\
+-	md.results['SteadystateSolution'][1]['Vy'],\
+-	md.results['SteadystateSolution'][1]['Vz'],\
+-	md.results['SteadystateSolution'][1]['Temperature'],\
+-	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate']
++	md.results.SteadystateSolution.Gradient1,\
++	md.results.SteadystateSolution.J,\
++	md.results.SteadystateSolution.FrictionCoefficient,\
++	md.results.SteadystateSolution.Pressure,\
++	md.results.SteadystateSolution.Vel,\
++	md.results.SteadystateSolution.Vx,\
++	md.results.SteadystateSolution.Vy,\
++	md.results.SteadystateSolution.Vz,\
++	md.results.SteadystateSolution.Temperature,\
++	md.results.SteadystateSolution.BasalforcingsMeltingRate
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test228.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test228.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test228.py	(revision 13967)
+@@ -37,36 +37,36 @@
+ 	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
+ 	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][4]['Vx'],\
+-	md.results['TransientSolution'][4]['Vy'],\
+-	md.results['TransientSolution'][4]['Vel'],\
+-	md.results['TransientSolution'][4]['Pressure'],\
+-	md.results['TransientSolution'][4]['Bed'],\
+-	md.results['TransientSolution'][4]['Surface'],\
+-	md.results['TransientSolution'][4]['Thickness'],\
+-	md.results['TransientSolution'][4]['SurfaceforcingsMassBalance'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[3].Vx,\
++	md.results.TransientSolution[3].Vy,\
++	md.results.TransientSolution[3].Vel,\
++	md.results.TransientSolution[3].Pressure,\
++	md.results.TransientSolution[3].Bed,\
++	md.results.TransientSolution[3].Surface,\
++	md.results.TransientSolution[3].Thickness,\
++	md.results.TransientSolution[3].SurfaceforcingsMassBalance,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test309.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test309.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test309.py	(revision 13967)
+@@ -18,5 +18,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['PrognosticSolution'][1]['Thickness'],\
++	md.results.PrognosticSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test102.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test102.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test102.py	(revision 13967)
+@@ -19,10 +19,10 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+ 
+Index: ../trunk-jpl/test/NightlyRun/test411.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test411.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test411.py	(revision 13967)
+@@ -22,11 +22,11 @@
+ field_tolerances=[1e-09,1e-09,1e-08,1e-09,1e-09,1e-08,1e-05
+ ]
+ field_values=[\
+-	md.results['SteadystateSolution'][1]['Vx'],\
+-	md.results['SteadystateSolution'][1]['Vy'],\
+-	md.results['SteadystateSolution'][1]['Vz'],\
+-	md.results['SteadystateSolution'][1]['Vel'],\
+-	md.results['SteadystateSolution'][1]['Pressure'],\
+-	md.results['SteadystateSolution'][1]['Temperature'],\
+-	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.SteadystateSolution.Vx,\
++	md.results.SteadystateSolution.Vy,\
++	md.results.SteadystateSolution.Vz,\
++	md.results.SteadystateSolution.Vel,\
++	md.results.SteadystateSolution.Pressure,\
++	md.results.SteadystateSolution.Temperature,\
++	md.results.SteadystateSolution.BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test223.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test223.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test223.py	(revision 13967)
+@@ -21,25 +21,25 @@
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test304.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test304.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test304.py	(revision 13967)
+@@ -19,9 +19,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test116.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test116.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test116.py	(revision 13967)
+@@ -22,5 +22,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['BalancethicknessSolution'][1]['Thickness'],\
++	md.results.BalancethicknessSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test613.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test613.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test613.py	(revision 13967)
+@@ -43,10 +43,10 @@
+ field_names     =['Gradient1','Gradient2','Misfits','Vx','Vy','Thickness']
+ field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
+ field_values=[\
+-	md.results['BalancethicknessSolution'][1]['Gradient1'],\
+-	md.results['BalancethicknessSolution'][1]['Gradient2'],\
+-	md.results['BalancethicknessSolution'][1]['J'],\
+-	md.results['BalancethicknessSolution'][1]['Vx'],\
+-	md.results['BalancethicknessSolution'][1]['Vy'],\
+-	md.results['BalancethicknessSolution'][1]['Thickness'],\
++	md.results.BalancethicknessSolution.Gradient1,\
++	md.results.BalancethicknessSolution.Gradient2,\
++	md.results.BalancethicknessSolution.J,\
++	md.results.BalancethicknessSolution.Vx,\
++	md.results.BalancethicknessSolution.Vy,\
++	md.results.BalancethicknessSolution.Thickness,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test425.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test425.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test425.py	(revision 13967)
+@@ -34,16 +34,16 @@
+ 	1e-13,1e-13,1e-13,1e-13,\
+ 	1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['MaskElementonfloatingice'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['MaskElementonfloatingice'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['MaskElementonfloatingice'],\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].MaskElementonfloatingice,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].MaskElementonfloatingice,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].MaskElementonfloatingice,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test506.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test506.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test506.py	(revision 13967)
+@@ -21,24 +21,24 @@
+ field_tolerances=[1e-10,1e-10,1e-10,1e-10,1e-12,1e-11,1e-12,1e-11,1e-12,1e-12,\
+ 						1e-11,1e-11,1e-09,1e-11,1e-11,1e-10,1e-11,1e-10,1e-11,1e-08]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test318.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test318.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test318.py	(revision 13967)
+@@ -20,11 +20,11 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-13,1e-13,1e-10,1e-10,1e-13,1e-11,1e-6]
+ field_values=[\
+-	md.results['SteadystateSolution'][1]['Vx'],\
+-	md.results['SteadystateSolution'][1]['Vy'],\
+-	md.results['SteadystateSolution'][1]['Vz'],\
+-	md.results['SteadystateSolution'][1]['Vel'],\
+-	md.results['SteadystateSolution'][1]['Pressure'],\
+-	md.results['SteadystateSolution'][1]['Temperature'],\
+-	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.SteadystateSolution.Vx,\
++	md.results.SteadystateSolution.Vy,\
++	md.results.SteadystateSolution.Vz,\
++	md.results.SteadystateSolution.Vel,\
++	md.results.SteadystateSolution.Pressure,\
++	md.results.SteadystateSolution.Temperature,\
++	md.results.SteadystateSolution.BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test237.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test237.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test237.py	(revision 13967)
+@@ -71,40 +71,40 @@
+ 	1e-13,1e-13,1e-13,1e-13,1e-13,1e-8,1e-8,1e-13,1e-13,1e-8,\
+ 	1e-13,1e-13,1e-08,1e-13,1e-13,1e-8,1e-8,1e-10,1e-13,1e-8]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][1]['SurfaceforcingsMonthlytemperatures'],\
+-	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['SurfaceforcingsMonthlytemperatures'],\
+-	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['SurfaceforcingsMonthlytemperatures'],\
+-	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[0].SurfaceforcingsMonthlytemperatures,\
++	md.results.TransientSolution[0].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].SurfaceforcingsMonthlytemperatures,\
++	md.results.TransientSolution[1].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].SurfaceforcingsMonthlytemperatures,\
++	md.results.TransientSolution[2].SurfaceforcingsMassBalance,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test3020.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3020.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test3020.py	(revision 13967)
+@@ -57,8 +57,8 @@
+ md=SetIceShelfBC(md)
+ 
+ md=solve(md,TransientSolutionEnum())
+-V0=md.results['TransientSolution'][3]['IceVolume']
+-MaxV0=md.results['TransientSolution'][3]['MaxVel']
++V0=md.results.TransientSolution[2].IceVolume
++MaxV0=md.results.TransientSolution[2].MaxVel
+ 
+ #backward
+ md=copy.deepcopy(md2)
+@@ -69,8 +69,8 @@
+ md=SetIceShelfBC(md)
+ 
+ md=solve(md,TransientSolutionEnum())
+-V2=md.results['TransientSolution'][3]['IceVolume']
+-MaxV2=md.results['TransientSolution'][3]['MaxVel']
++V2=md.results.TransientSolution[2].IceVolume
++MaxV2=md.results.TransientSolution[2].MaxVel
+ 
+ #compute resulting derivative
+ dVdh_an=(V2-V0)/deltaH
+@@ -86,8 +86,8 @@
+ 
+ md=solve(md,TransientSolutionEnum())
+ #retrieve directly
+-dVdh_ad=md.results['TransientSolution'][1]['AutodiffJacobian'][0]
+-dMaxVdh_ad=md.results['TransientSolution'][1]['AutodiffJacobian'][1]
++dVdh_ad=md.results.TransientSolution[0].AutodiffJacobian[0]
++dMaxVdh_ad=md.results.TransientSolution[0].AutodiffJacobian[1]
+ 
+ print "dV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n" % (dVdh_an,dVdh_ad)
+ print "dMaxV/dh: analytical:  %16.16g\n       using adolc:  %16.16g\n" % (dMaxVdh_an,dMaxVdh_ad)
+Index: ../trunk-jpl/test/NightlyRun/test3008.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3008.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test3008.py	(revision 13967)
+@@ -21,6 +21,6 @@
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['ThermalSolution'][1]['Temperature'],\
+-	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.ThermalSolution.Temperature,\
++	md.results.ThermalSolution.BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test111.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test111.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test111.py	(revision 13967)
+@@ -26,37 +26,37 @@
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,2e-11,\
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05,1e-11]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][1]['IceVolume'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['IceVolume'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['IceVolume'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[0].IceVolume,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].IceVolume,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].IceVolume,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test501.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test501.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test501.py	(revision 13967)
+@@ -18,8 +18,8 @@
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test313.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test313.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test313.py	(revision 13967)
+@@ -24,6 +24,6 @@
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test232.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test232.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test232.py	(revision 13967)
+@@ -27,12 +27,12 @@
+ field_names     =['Temperature1','BasalforcingsMeltingRate1','Temperature2','BasalforcingsMeltingRate2','Temperature3','BasalforcingsMeltingRate3','Temperature4','BasalforcingsMeltingRate4']
+ field_tolerances=[1e-13,1e-6,1e-13,1e-6,1e-13,1e-6,1e-13,1e-6]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][4]['Temperature'],\
+-	md.results['TransientSolution'][4]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[3].Temperature,\
++	md.results.TransientSolution[3].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test206.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test206.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test206.py	(revision 13967)
+@@ -23,6 +23,6 @@
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['ThermalSolution'][1]['Temperature'],\
+-	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.ThermalSolution.Temperature,\
++	md.results.ThermalSolution.BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test272.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test272.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test272.py	(revision 13967)
+@@ -40,11 +40,11 @@
+ field_names     =['Gradient','Misfits','MaterialsRheologyZbar','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12,1e-12]
+ field_values=[\
+-   md.results['DiagnosticSolution'][1]['Gradient1'],\
+-   md.results['DiagnosticSolution'][1]['J'],\
+-   md.results['DiagnosticSolution'][1]['MaterialsRheologyZbar'],\
+-   md.results['DiagnosticSolution'][1]['Pressure'],\
+-   md.results['DiagnosticSolution'][1]['Vel'],\
+-   md.results['DiagnosticSolution'][1]['Vx'],\
+-   md.results['DiagnosticSolution'][1]['Vy'],\
++   md.results.DiagnosticSolution.Gradient1,\
++   md.results.DiagnosticSolution.J,\
++   md.results.DiagnosticSolution.MaterialsRheologyZbar,\
++   md.results.DiagnosticSolution.Pressure,\
++   md.results.DiagnosticSolution.Vel,\
++   md.results.DiagnosticSolution.Vx,\
++   md.results.DiagnosticSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test515.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test515.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test515.py	(revision 13967)
+@@ -25,8 +25,8 @@
+ 				      'Temperature2','BasalforcingsMeltingRate2']
+ field_tolerances=[1e-13,1e-8,1e-13,1e-8]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test327.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test327.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test327.py	(revision 13967)
+@@ -29,37 +29,37 @@
+ 	1e-09,1e-09,1e-10,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
+ 	1e-09,5e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['Enthalpy'],\
+-	md.results['TransientSolution'][1]['Waterfraction'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['Enthalpy'],\
+-	md.results['TransientSolution'][2]['Waterfraction'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['Enthalpy'],\
+-	md.results['TransientSolution'][3]['Waterfraction'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].Enthalpy,\
++	md.results.TransientSolution[0].Waterfraction,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].Enthalpy,\
++	md.results.TransientSolution[1].Waterfraction,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].Enthalpy,\
++	md.results.TransientSolution[2].Waterfraction,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test408.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test408.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test408.py	(revision 13967)
+@@ -19,25 +19,25 @@
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test3003.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3003.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test3003.py	(revision 13967)
+@@ -23,15 +23,15 @@
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,\
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['StressTensorxx'],\
+-	md.results['DiagnosticSolution'][1]['StressTensoryy'],\
+-	md.results['DiagnosticSolution'][1]['StressTensorzz'],\
+-	md.results['DiagnosticSolution'][1]['StressTensorxy'],\
+-	md.results['DiagnosticSolution'][1]['StressTensorxz'],\
+-	md.results['DiagnosticSolution'][1]['StressTensoryz'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
++	md.results.DiagnosticSolution.StressTensorxx,\
++	md.results.DiagnosticSolution.StressTensoryy,\
++	md.results.DiagnosticSolution.StressTensorzz,\
++	md.results.DiagnosticSolution.StressTensorxy,\
++	md.results.DiagnosticSolution.StressTensorxz,\
++	md.results.DiagnosticSolution.StressTensoryz,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test120.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test120.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test120.py	(revision 13967)
+@@ -22,7 +22,7 @@
+ field_names     =['Enthalpy','Waterfraction','Temperature']
+ field_tolerances=[1e-13,1e-10,1e-13]
+ field_values=[\
+-	md.results['EnthalpySolution'][1]['Enthalpy'],\
+-	md.results['EnthalpySolution'][1]['Waterfraction'],\
+-	md.results['EnthalpySolution'][1]['Temperature'],\
++	md.results.EnthalpySolution.Enthalpy,\
++	md.results.EnthalpySolution.Waterfraction,\
++	md.results.EnthalpySolution.Temperature,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test201.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test201.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test201.py	(revision 13967)
+@@ -19,8 +19,8 @@
+ field_names     =['Vx','Vy','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test510.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test510.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test510.py	(revision 13967)
+@@ -20,11 +20,11 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure','Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06]
+ field_values=[\
+-	md.results['SteadystateSolution'][1]['Vx'],\
+-	md.results['SteadystateSolution'][1]['Vy'],\
+-	md.results['SteadystateSolution'][1]['Vz'],\
+-	md.results['SteadystateSolution'][1]['Vel'],\
+-	md.results['SteadystateSolution'][1]['Pressure'],\
+-	md.results['SteadystateSolution'][1]['Temperature'],\
+-	md.results['SteadystateSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.SteadystateSolution.Vx,\
++	md.results.SteadystateSolution.Vy,\
++	md.results.SteadystateSolution.Vz,\
++	md.results.SteadystateSolution.Vel,\
++	md.results.SteadystateSolution.Pressure,\
++	md.results.SteadystateSolution.Temperature,\
++	md.results.SteadystateSolution.BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test403.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test403.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test403.py	(revision 13967)
+@@ -20,9 +20,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test322.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test322.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test322.py	(revision 13967)
+@@ -36,11 +36,11 @@
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-06,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Gradient1'],\
+-	md.results['DiagnosticSolution'][1]['J'],\
+-	md.results['DiagnosticSolution'][1]['FrictionCoefficient'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results.DiagnosticSolution.Gradient1,\
++	md.results.DiagnosticSolution.J,\
++	md.results.DiagnosticSolution.FrictionCoefficient,\
++	md.results.DiagnosticSolution.Pressure,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test215.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test215.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test215.py	(revision 13967)
+@@ -40,11 +40,11 @@
+ field_names     =['Gradient','Misfits','MaterialsRheologyBbar','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Gradient1'],\
+-	md.results['DiagnosticSolution'][1]['J'],\
+-	md.results['DiagnosticSolution'][1]['MaterialsRheologyB'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy']
++	md.results.DiagnosticSolution.Gradient1,\
++	md.results.DiagnosticSolution.J,\
++	md.results.DiagnosticSolution.MaterialsRheologyB,\
++	md.results.DiagnosticSolution.Pressure,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test108.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test108.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test108.py	(revision 13967)
+@@ -20,6 +20,6 @@
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-13,1e-5]
+ field_values=[\
+-	md.results['ThermalSolution'][1]['Temperature'],\
+-	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.ThermalSolution.Temperature,\
++	md.results.ThermalSolution.BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test605.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test605.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test605.py	(revision 13967)
+@@ -20,6 +20,6 @@
+ field_names     =['SurfaceSlopeX','SurfaceSlopeY']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['SurfaceSlopeSolution'][1]['SurfaceSlopeX'],\
+-	md.results['SurfaceSlopeSolution'][1]['SurfaceSlopeY'],\
++	md.results.SurfaceSlopeSolution.SurfaceSlopeX,\
++	md.results.SurfaceSlopeSolution.SurfaceSlopeY,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test229.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test229.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test229.py	(revision 13967)
+@@ -37,36 +37,36 @@
+ 	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10,\
+ 	1e-09,1e-09,1e-10,1e-10,1e-10,1e-10,1e-10,1e-10]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][4]['Vx'],\
+-	md.results['TransientSolution'][4]['Vy'],\
+-	md.results['TransientSolution'][4]['Vel'],\
+-	md.results['TransientSolution'][4]['Pressure'],\
+-	md.results['TransientSolution'][4]['Bed'],\
+-	md.results['TransientSolution'][4]['Surface'],\
+-	md.results['TransientSolution'][4]['Thickness'],\
+-	md.results['TransientSolution'][4]['SurfaceforcingsMassBalance'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[3].Vx,\
++	md.results.TransientSolution[3].Vy,\
++	md.results.TransientSolution[3].Vel,\
++	md.results.TransientSolution[3].Pressure,\
++	md.results.TransientSolution[3].Bed,\
++	md.results.TransientSolution[3].Surface,\
++	md.results.TransientSolution[3].Thickness,\
++	md.results.TransientSolution[3].SurfaceforcingsMassBalance,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test210.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test210.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test210.py	(revision 13967)
+@@ -27,34 +27,34 @@
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,\
+ 	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test103.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test103.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test103.py	(revision 13967)
+@@ -22,15 +22,15 @@
+ field_tolerances=[1e-09,1e-09,1e-09,1e-09,1e-09,\
+ 	1e-09,1e-09,1e-09,1e-09,1e-09,1e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['StressTensorxx'],\
+-	md.results['DiagnosticSolution'][1]['StressTensoryy'],\
+-	md.results['DiagnosticSolution'][1]['StressTensorzz'],\
+-	md.results['DiagnosticSolution'][1]['StressTensorxy'],\
+-	md.results['DiagnosticSolution'][1]['StressTensorxz'],\
+-	md.results['DiagnosticSolution'][1]['StressTensoryz'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
++	md.results.DiagnosticSolution.StressTensorxx,\
++	md.results.DiagnosticSolution.StressTensoryy,\
++	md.results.DiagnosticSolution.StressTensorzz,\
++	md.results.DiagnosticSolution.StressTensorxy,\
++	md.results.DiagnosticSolution.StressTensorxz,\
++	md.results.DiagnosticSolution.StressTensoryz,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test305.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test305.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test305.py	(revision 13967)
+@@ -19,9 +19,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test224.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test224.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test224.py	(revision 13967)
+@@ -25,34 +25,34 @@
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06,\
+ 	1e-09,1e-09,1e-08,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-05]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test117.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test117.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test117.py	(revision 13967)
+@@ -23,5 +23,5 @@
+ field_names     =['Thickness']
+ field_tolerances=[1e-13]
+ field_values=[\
+-	md.results['BalancethicknessSolution'][1]['Thickness'],\
++	md.results.BalancethicknessSolution.Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test426.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test426.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test426.py	(revision 13967)
+@@ -35,16 +35,16 @@
+ 	1e-11,1e-10,1e-11,1e-13,\
+ 	1e-10,1e-10,1e-10,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['MaskElementonfloatingice'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['MaskElementonfloatingice'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['MaskElementonfloatingice'],\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].MaskElementonfloatingice,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].MaskElementonfloatingice,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].MaskElementonfloatingice,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test507.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test507.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test507.py	(revision 13967)
+@@ -20,24 +20,24 @@
+ 				      'Vx2','Vy2','Vz2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Temperature2','BasalforcingsMeltingRate2']
+ field_tolerances=[1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-08,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06,1e-06]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test319.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test319.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test319.py	(revision 13967)
+@@ -35,11 +35,11 @@
+ field_names     =['Gradient','Misfits','FrictionCoefficient','Pressure','Vel','Vx','Vy']
+ field_tolerances=[1e-12,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Gradient1'],\
+-	md.results['DiagnosticSolution'][1]['J'],\
+-	md.results['DiagnosticSolution'][1]['FrictionCoefficient'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
++	md.results.DiagnosticSolution.Gradient1,\
++	md.results.DiagnosticSolution.J,\
++	md.results.DiagnosticSolution.FrictionCoefficient,\
++	md.results.DiagnosticSolution.Pressure,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
+ ]
+Index: ../trunk-jpl/test/NightlyRun/test3009.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3009.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test3009.py	(revision 13967)
+@@ -24,6 +24,6 @@
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test112.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test112.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test112.py	(revision 13967)
+@@ -18,6 +18,6 @@
+ field_names     =['SurfaceSlopeX','SurfaceSlopeY']
+ field_tolerances=[1e-13,1e-13]
+ field_values=[\
+-	md.results['SurfaceSlopeSolution'][1]['SurfaceSlopeX'],\
+-	md.results['SurfaceSlopeSolution'][1]['SurfaceSlopeY'],\
++	md.results.SurfaceSlopeSolution.SurfaceSlopeX,\
++	md.results.SurfaceSlopeSolution.SurfaceSlopeY,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test421.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test421.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test421.py	(revision 13967)
+@@ -20,9 +20,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-08,2e-09,2e-05,1e-09,2e-09]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test502.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test502.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test502.py	(revision 13967)
+@@ -19,9 +19,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-08,1e-08,1e-08,1e-08,1e-08]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test314.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test314.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test314.py	(revision 13967)
+@@ -18,25 +18,25 @@
+ field_names     =['Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-10,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test233.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test233.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test233.py	(revision 13967)
+@@ -29,44 +29,44 @@
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06, \
+ 	1e-09,1e-09,1e-08,1e-09,1e-09,1e-09,1e-09,1e-09,1e-09,1e-06]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][4]['Vx'],\
+-	md.results['TransientSolution'][4]['Vy'],\
+-	md.results['TransientSolution'][4]['Vz'],\
+-	md.results['TransientSolution'][4]['Vel'],\
+-	md.results['TransientSolution'][4]['Pressure'],\
+-	md.results['TransientSolution'][4]['Bed'],\
+-	md.results['TransientSolution'][4]['Surface'],\
+-	md.results['TransientSolution'][4]['Thickness'],\
+-	md.results['TransientSolution'][4]['Temperature'],\
+-	md.results['TransientSolution'][4]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[3].Vx,\
++	md.results.TransientSolution[3].Vy,\
++	md.results.TransientSolution[3].Vz,\
++	md.results.TransientSolution[3].Vel,\
++	md.results.TransientSolution[3].Pressure,\
++	md.results.TransientSolution[3].Bed,\
++	md.results.TransientSolution[3].Surface,\
++	md.results.TransientSolution[3].Thickness,\
++	md.results.TransientSolution[3].Temperature,\
++	md.results.TransientSolution[3].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test207.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test207.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test207.py	(revision 13967)
+@@ -24,10 +24,10 @@
+ field_names     =['Temperature1','BasalforcingsMeltingRate1','Temperature2','BasalforcingsMeltingRate2','Temperature3','BasalforcingsMeltingRate3']
+ field_tolerances=[1e-13,1e-6,1e-13,1e-6,1e-13,1e-6]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test516.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test516.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test516.py	(revision 13967)
+@@ -23,6 +23,6 @@
+ field_names     =['Temperature','BasalforcingsMeltingRate']
+ field_tolerances=[1e-11,1e-11]
+ field_values=[\
+-	md.results['ThermalSolution'][1]['Temperature'],\
+-	md.results['ThermalSolution'][1]['BasalforcingsMeltingRate'],\
++	md.results.ThermalSolution.Temperature,\
++	md.results.ThermalSolution.BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test328.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test328.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test328.py	(revision 13967)
+@@ -37,28 +37,28 @@
+ field_names     =['Vx1','Vy1','Vel1','Bed1','Surface1','Thickness1','SMB1','TotalSmb1','Vx2','Vy2','Vel2','Bed2','Surface2','Thickness2','SMB2','TotalSmb2','Vx3','Vy3','Vel3','Bed3','Surface3','Thickness3','SMB3','TotalSmb3']
+ field_tolerances=[1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][1]['TotalSmb'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['TotalSmb'],\
+-	md.results['TransientSolution'][2]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['SurfaceforcingsMassBalance'],\
+-	md.results['TransientSolution'][3]['TotalSmb'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[0].TotalSmb,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].TotalSmb,\
++	md.results.TransientSolution[1].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].SurfaceforcingsMassBalance,\
++	md.results.TransientSolution[2].TotalSmb,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test409.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test409.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test409.py	(revision 13967)
+@@ -25,34 +25,34 @@
+ 	1e-03,1e-03,1e-02,1e-03,1e-02,1e-04,1e-01,1e-03,1e-01,1e-01,\
+ 	1e-02,1e-02,1e-01,1e-02,1e-01,1e-04,1e-04,1e-04,1e-04,1e-01]
+ field_values=[\
+-	md.results['TransientSolution'][1]['Vx'],\
+-	md.results['TransientSolution'][1]['Vy'],\
+-	md.results['TransientSolution'][1]['Vz'],\
+-	md.results['TransientSolution'][1]['Vel'],\
+-	md.results['TransientSolution'][1]['Pressure'],\
+-	md.results['TransientSolution'][1]['Bed'],\
+-	md.results['TransientSolution'][1]['Surface'],\
+-	md.results['TransientSolution'][1]['Thickness'],\
+-	md.results['TransientSolution'][1]['Temperature'],\
+-	md.results['TransientSolution'][1]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][2]['Vx'],\
+-	md.results['TransientSolution'][2]['Vy'],\
+-	md.results['TransientSolution'][2]['Vz'],\
+-	md.results['TransientSolution'][2]['Vel'],\
+-	md.results['TransientSolution'][2]['Pressure'],\
+-	md.results['TransientSolution'][2]['Bed'],\
+-	md.results['TransientSolution'][2]['Surface'],\
+-	md.results['TransientSolution'][2]['Thickness'],\
+-	md.results['TransientSolution'][2]['Temperature'],\
+-	md.results['TransientSolution'][2]['BasalforcingsMeltingRate'],\
+-	md.results['TransientSolution'][3]['Vx'],\
+-	md.results['TransientSolution'][3]['Vy'],\
+-	md.results['TransientSolution'][3]['Vz'],\
+-	md.results['TransientSolution'][3]['Vel'],\
+-	md.results['TransientSolution'][3]['Pressure'],\
+-	md.results['TransientSolution'][3]['Bed'],\
+-	md.results['TransientSolution'][3]['Surface'],\
+-	md.results['TransientSolution'][3]['Thickness'],\
+-	md.results['TransientSolution'][3]['Temperature'],\
+-	md.results['TransientSolution'][3]['BasalforcingsMeltingRate'],\
++	md.results.TransientSolution[0].Vx,\
++	md.results.TransientSolution[0].Vy,\
++	md.results.TransientSolution[0].Vz,\
++	md.results.TransientSolution[0].Vel,\
++	md.results.TransientSolution[0].Pressure,\
++	md.results.TransientSolution[0].Bed,\
++	md.results.TransientSolution[0].Surface,\
++	md.results.TransientSolution[0].Thickness,\
++	md.results.TransientSolution[0].Temperature,\
++	md.results.TransientSolution[0].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[1].Vx,\
++	md.results.TransientSolution[1].Vy,\
++	md.results.TransientSolution[1].Vz,\
++	md.results.TransientSolution[1].Vel,\
++	md.results.TransientSolution[1].Pressure,\
++	md.results.TransientSolution[1].Bed,\
++	md.results.TransientSolution[1].Surface,\
++	md.results.TransientSolution[1].Thickness,\
++	md.results.TransientSolution[1].Temperature,\
++	md.results.TransientSolution[1].BasalforcingsMeltingRate,\
++	md.results.TransientSolution[2].Vx,\
++	md.results.TransientSolution[2].Vy,\
++	md.results.TransientSolution[2].Vz,\
++	md.results.TransientSolution[2].Vel,\
++	md.results.TransientSolution[2].Pressure,\
++	md.results.TransientSolution[2].Bed,\
++	md.results.TransientSolution[2].Surface,\
++	md.results.TransientSolution[2].Thickness,\
++	md.results.TransientSolution[2].Temperature,\
++	md.results.TransientSolution[2].BasalforcingsMeltingRate,\
+ 	]
+Index: ../trunk-jpl/test/NightlyRun/test3004.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test3004.py	(revision 13966)
++++ ../trunk-jpl/test/NightlyRun/test3004.py	(revision 13967)
+@@ -20,9 +20,9 @@
+ field_names     =['Vx','Vy','Vz','Vel','Pressure']
+ field_tolerances=[1e-08,1e-08,1e-07,1e-08,1e-08]
+ field_values=[\
+-	md.results['DiagnosticSolution'][1]['Vx'],\
+-	md.results['DiagnosticSolution'][1]['Vy'],\
+-	md.results['DiagnosticSolution'][1]['Vz'],\
+-	md.results['DiagnosticSolution'][1]['Vel'],\
+-	md.results['DiagnosticSolution'][1]['Pressure'],\
++	md.results.DiagnosticSolution.Vx,\
++	md.results.DiagnosticSolution.Vy,\
++	md.results.DiagnosticSolution.Vz,\
++	md.results.DiagnosticSolution.Vel,\
++	md.results.DiagnosticSolution.Pressure,\
+ 	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13967-13968.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13967-13968.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13967-13968.diff	(revision 13980)
@@ -0,0 +1,12 @@
+Index: ../trunk-jpl/test/NightlyRun/test217.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test217.py	(revision 13967)
++++ ../trunk-jpl/test/NightlyRun/test217.py	(revision 13968)
+@@ -79,4 +79,6 @@
+ # Fields and tolerances to track changes
+ field_names     =['Vy']
+ field_tolerances=[1e-13]
+-field_values=.Vy]
++field_values=[\
++	md.results.DiagnosticSolution.Vy,\
++	]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13968-13969.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13968-13969.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13968-13969.diff	(revision 13980)
@@ -0,0 +1,15 @@
+Index: ../trunk-jpl/src/m/plot/processdata.py
+===================================================================
+--- ../trunk-jpl/src/m/plot/processdata.py	(revision 13968)
++++ ../trunk-jpl/src/m/plot/processdata.py	(revision 13969)
+@@ -68,6 +68,10 @@
+ 
+ 	#control arrow density if quiver plot
+ 
++	#convert rank-2 array to rank-1
++	if npy.ndim(data)==2 and npy.shape(data)[1]==1:
++		data=data.reshape(-1,)
++
+ 	#if datatype is still zero, error out
+ 	if datatype==0:
+ 		raise ValueError("processdata error: data provided not recognized or not supported")
Index: /issm/oecreview/Archive/13393-13976/ISSM-13969-13970.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13969-13970.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13969-13970.diff	(revision 13980)
@@ -0,0 +1,16 @@
+Index: ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py
+===================================================================
+--- ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 13969)
++++ ../trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py	(revision 13970)
+@@ -41,6 +41,11 @@
+ 
+ 	#Dirichlet Values
+ 	if isinstance(md.inversion.vx_obs,numpy.ndarray) and numpy.size(md.inversion.vx_obs,axis=0)==md.mesh.numberofvertices and isinstance(md.inversion.vy_obs,numpy.ndarray) and numpy.size(md.inversion.vy_obs,axis=0)==md.mesh.numberofvertices:
++		#reshape to rank-2 if necessary to match spc arrays
++		if numpy.ndim(md.inversion.vx_obs)==1:
++			md.inversion.vx_obs=md.inversion.vx_obs.reshape(-1,1)
++		if numpy.ndim(md.inversion.vy_obs)==1:
++			md.inversion.vy_obs=md.inversion.vy_obs.reshape(-1,1)
+ 		print "      boundary conditions for diagnostic model: spc set as observed velocities"
+ 		md.diagnostic.spcvx[pos]=md.inversion.vx_obs[pos]
+ 		md.diagnostic.spcvy[pos]=md.inversion.vy_obs[pos]
Index: /issm/oecreview/Archive/13393-13976/ISSM-13970-13971.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13970-13971.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13970-13971.diff	(revision 13980)
@@ -0,0 +1,255 @@
+Index: ../trunk-jpl/test/NightlyRun/test1602.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1602.m	(revision 13970)
++++ ../trunk-jpl/test/NightlyRun/test1602.m	(revision 13971)
+@@ -3,16 +3,16 @@
+ md=parameterize(md,'../Par/SquareSheetShelf.par');
+ md=extrude(md,5,1.);
+ md=setflowequation(md,'pattyn','all');
+-md.diagnostic.spcvx(find(md.mesh.y>0))=NaN;
+-md.initialization.vx(:)=0;
+-md.initialization.vy(:)=0;
+-md.initialization.vel(:)=0;
++md.diagnostic.spcvx(find(md.mesh.y>0.))=NaN;
++md.initialization.vx(:)=0.;
++md.initialization.vy(:)=0.;
++md.initialization.vel(:)=0.;
+ 
+-md.cluster=generic('name',oshostname,'np',3);
++md.cluster=generic('name',oshostname(),'np',3);
+ md=solve(md,DiagnosticSolutionEnum());
+ vel0=md.results.DiagnosticSolution.Vel;
+ 
+-theta=30*pi/180;
++theta=30.*pi/180.;
+ x=md.mesh.x;
+ y=md.mesh.y;
+ md.mesh.x=cos(theta)*x-sin(theta)*y;
+Index: ../trunk-jpl/test/NightlyRun/runme.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/runme.m	(revision 13970)
++++ ../trunk-jpl/test/NightlyRun/runme.m	(revision 13971)
+@@ -66,7 +66,7 @@
+ 	output='none';
+ end
+ % }}}
+-%GET RANK and NUMPROCS for mutlithreaded runs  {{{
++%GET RANK and NUMPROCS for multithreaded runs  {{{
+ rank=getfieldvalue(options,'rank',1);
+ numprocs=getfieldvalue(options,'numprocs',1);
+ if (numprocs<rank), numprocs=1; end
+Index: ../trunk-jpl/test/NightlyRun/test1601.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1601.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test1601.py	(revision 13971)
+@@ -0,0 +1,56 @@
++import numpy
++import sys
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'all','')
++md=parameterize(md,'../Par/SquareShelf.py')
++md=setflowequation(md,'macayeal','all')
++md.diagnostic.spcvx[numpy.nonzero(md.mesh.y>0.)]=float('NaN')
++md.initialization.vx[:]=0.
++md.initialization.vy[:]=0.
++md.initialization.vel=numpy.zeros_like(md.initialization.vx)
++
++md.cluster=generic('name',oshostname(),'np',2)
++md=solve(md,DiagnosticSolutionEnum())
++vel0=md.results.DiagnosticSolution.Vel
++
++theta=30.*numpy.pi/180.
++x=md.mesh.x
++y=md.mesh.y
++md.mesh.x=numpy.cos(theta)*x-numpy.sin(theta)*y
++md.mesh.y=numpy.sin(theta)*x+numpy.cos(theta)*y
++
++md.diagnostic.referential[:,0:3]=numpy.tile([numpy.cos(theta),numpy.sin(theta),0],(md.mesh.numberofvertices,1))
++md.diagnostic.referential[:,3: ]=numpy.tile([0,0,1],(md.mesh.numberofvertices,1))
++md=solve(md,DiagnosticSolutionEnum())
++vel1=md.results.DiagnosticSolution.Vel
++
++#plotmodel(md,'data',vel0,'data',vel1,'data',vel1-vel0,'title','Cartesian CS','title','Rotated CS','title','difference')
++print "Error between Cartesian and rotated CS: %g" % (numpy.max(numpy.abs(vel0-vel1))/(numpy.max(numpy.abs(vel0))+sys.float_info.epsilon))
++
++#Now, put CS back to normal except on the side where the spc are applied
++pos=numpy.nonzero(numpy.logical_or(x==0.,x==1000000.))[0]
++md.diagnostic.referential[:]=float('NaN')
++md.diagnostic.referential[pos,0:3]=numpy.tile([numpy.cos(theta),numpy.sin(theta),0],(len(pos),1))
++md.diagnostic.referential[pos,3: ]=numpy.tile([0,0,1],(len(pos),1))
++md=solve(md,DiagnosticSolutionEnum())
++vel2=md.results.DiagnosticSolution.Vel
++
++#plotmodel(md,'data',vel0,'data',vel2,'data',vel2-vel0,'title','Cartesian CS','title','Rotated CS','title','difference')
++print "Error between Cartesian and rotated CS: %g" % (numpy.max(numpy.abs(vel0-vel2))/(numpy.max(numpy.abs(vel0))+sys.float_info.epsilon))
++
++#Fields and tolerances to track changes
++field_names     =['vel1','vel2']
++field_tolerances=[1e-11,1e-11]
++field_values=[\
++	vel1, \
++	vel2, \
++	]
+Index: ../trunk-jpl/test/NightlyRun/test1501.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1501.m	(revision 13970)
++++ ../trunk-jpl/test/NightlyRun/test1501.m	(revision 13971)
+@@ -7,12 +7,12 @@
+ md.cluster=generic('name',oshostname(),'np',3);
+ md.transient.isthermal=0;
+ 
+-md.timestepping.time_step=1;
++md.timestepping.time_step=1.;
+ md.settings.output_frequency=1;
+-md.timestepping.final_time=2000;
++md.timestepping.final_time=2000.;
+ 
+ %Solve for thinning rate -> -1 * surface mass balance
+-smb= 2*ones(md.mesh.numberofvertices,1);   
++smb= 2.*ones(md.mesh.numberofvertices,1);   
+ md.surfaceforcings.mass_balance= smb;
+ md.basalforcings.melting_rate= smb;
+ 
+@@ -26,11 +26,11 @@
+ %Set up transient
+ smb = md.surfaceforcings.mass_balance;
+ 
+-tooth= [ [ones(400,1)*(smb') - 10]' [ones(400,1)*(smb')]' ];
++tooth= [ [ones(400,1)*(smb') - 10.]' [ones(400,1)*(smb')]' ];
+ smb=[ [ones(399,1)*(smb')]' smb  tooth tooth];
+ 
+ md.surfaceforcings.mass_balance= smb;
+-md.surfaceforcings.mass_balance(end+1,:)=[1:2000];
++md.surfaceforcings.mass_balance(end+1,:)=[1.:2000.];
+ 
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1602.py
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1602.py	(revision 0)
++++ ../trunk-jpl/test/NightlyRun/test1602.py	(revision 13971)
+@@ -0,0 +1,45 @@
++import numpy
++import sys
++from model import *
++from triangle import *
++from setmask import *
++from parameterize import *
++from setflowequation import *
++from EnumDefinitions import *
++from solve import *
++from MatlabFuncs import *
++
++md=triangle(model(),'../Exp/Square.exp',150000.)
++md=setmask(md,'../Exp/SquareShelf.exp','')
++md=parameterize(md,'../Par/SquareSheetShelf.py')
++md.extrude(5,1.)
++md=setflowequation(md,'pattyn','all')
++md.diagnostic.spcvx[numpy.nonzero(md.mesh.y>0.)]=float('NaN')
++md.initialization.vx[:]=0.
++md.initialization.vy[:]=0.
++md.initialization.vel=numpy.zeros_like(md.initialization.vx)
++
++md.cluster=generic('name',oshostname(),'np',3)
++md=solve(md,DiagnosticSolutionEnum())
++vel0=md.results.DiagnosticSolution.Vel
++
++theta=30.*numpy.pi/180.
++x=md.mesh.x
++y=md.mesh.y
++md.mesh.x=numpy.cos(theta)*x-numpy.sin(theta)*y
++md.mesh.y=numpy.sin(theta)*x+numpy.cos(theta)*y
++
++md.diagnostic.referential[:,0:3]=numpy.tile([numpy.cos(theta),numpy.sin(theta),0],(md.mesh.numberofvertices,1))
++md.diagnostic.referential[:,3: ]=numpy.tile([0,0,1],(md.mesh.numberofvertices,1))
++md=solve(md,DiagnosticSolutionEnum())
++vel1=md.results.DiagnosticSolution.Vel
++
++#plotmodel(md,'data',vel0,'data',vel1,'data',vel1-vel0,'title','Cartesian CS','title','Rotated CS','title','difference','view#all',2)
++print "Error between Cartesian and rotated CS: %g" % (numpy.max(numpy.abs(vel0-vel1))/(numpy.max(numpy.abs(vel0))+sys.float_info.epsilon))
++
++#Fields and tolerances to track changes
++field_names     =['vel1']
++field_tolerances=[1e-9]
++field_values=[\
++	vel1, \
++	];
+Index: ../trunk-jpl/test/NightlyRun/test1502.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1502.m	(revision 13970)
++++ ../trunk-jpl/test/NightlyRun/test1502.m	(revision 13971)
+@@ -8,12 +8,12 @@
+ md.cluster=generic('name',oshostname(),'np',2);
+ md.transient.isthermal=0;
+ 
+-md.timestepping.time_step=1;
++md.timestepping.time_step=1.;
+ md.settings.output_frequency=1;
+-md.timestepping.final_time=2000;
++md.timestepping.final_time=2000.;
+ 
+ %Solve for thinning rate -> -1 * surface mass balance
+-smb= 2*ones(md.mesh.numberofvertices,1);   
++smb= 2.*ones(md.mesh.numberofvertices,1);   
+ md.surfaceforcings.mass_balance= smb;
+ md.basalforcings.melting_rate= smb;
+ 
+@@ -27,11 +27,11 @@
+ %Set up transient
+ smb = md.surfaceforcings.mass_balance;
+ 
+-tooth= [ [ones(400,1)*(smb') - 10]' [ones(400,1)*(smb')]' ];
++tooth= [ [ones(400,1)*(smb') - 10.]' [ones(400,1)*(smb')]' ];
+ smb=[ [ones(399,1)*(smb')]' smb  tooth tooth];
+ 
+ md.surfaceforcings.mass_balance= smb;
+-md.surfaceforcings.mass_balance(end+1,:)=[1:2000];
++md.surfaceforcings.mass_balance(end+1,:)=[1.:2000.];
+ 
+ md=solve(md,TransientSolutionEnum());
+ 
+Index: ../trunk-jpl/test/NightlyRun/test1601.m
+===================================================================
+--- ../trunk-jpl/test/NightlyRun/test1601.m	(revision 13970)
++++ ../trunk-jpl/test/NightlyRun/test1601.m	(revision 13971)
+@@ -2,16 +2,16 @@
+ md=setmask(md,'all','');
+ md=parameterize(md,'../Par/SquareShelf.par');
+ md=setflowequation(md,'macayeal','all');
+-md.diagnostic.spcvx(find(md.mesh.y>0))=NaN;
+-md.initialization.vx(:)=0;
+-md.initialization.vy(:)=0;
+-md.initialization.vel(:)=0;
++md.diagnostic.spcvx(find(md.mesh.y>0.))=NaN;
++md.initialization.vx(:)=0.;
++md.initialization.vy(:)=0.;
++md.initialization.vel(:)=0.;
+ 
+-md.cluster=generic('name',oshostname,'np',2);
++md.cluster=generic('name',oshostname(),'np',2);
+ md=solve(md,DiagnosticSolutionEnum());
+ vel0=md.results.DiagnosticSolution.Vel;
+ 
+-theta=30*pi/180;
++theta=30.*pi/180.;
+ x=md.mesh.x;
+ y=md.mesh.y;
+ md.mesh.x=cos(theta)*x-sin(theta)*y;
+@@ -26,7 +26,7 @@
+ disp(['Error between Cartesian and rotated CS: ' num2str(max(abs(vel0-vel1))/(max(abs(vel0))+eps)) ]);
+ 
+ %Now, put CS back to normal except on the side where the spc are applied
+-pos=find(x==0 | x==1000000);
++pos=find(x==0. | x==1000000.);
+ md.diagnostic.referential(:)=NaN;
+ md.diagnostic.referential(pos,1:3)=repmat([cos(theta),sin(theta),0],size(pos,1),1);
+ md.diagnostic.referential(pos,4:6)=repmat([0,0,1],size(pos,1),1);
Index: /issm/oecreview/Archive/13393-13976/ISSM-13971-13972.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13971-13972.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13971-13972.diff	(revision 13980)
@@ -0,0 +1,13 @@
+Index: ../trunk-jpl/configure.ac
+===================================================================
+--- ../trunk-jpl/configure.ac	(revision 13971)
++++ ../trunk-jpl/configure.ac	(revision 13972)
+@@ -1,7 +1,7 @@
+ # Process this file with autoconf to produce a configure script.
+ 
+ #AUTOCONF
+-AC_INIT([ISSM],[4.2.2],[issm@jpl.nasa.gov],[issm],[http://issm.jpl.nasa.gov]) #Initializing configure
++AC_INIT([ISSM],[4.2.3],[issm@jpl.nasa.gov],[issm],[http://issm.jpl.nasa.gov]) #Initializing configure
+ AC_CONFIG_AUX_DIR([./aux-config])         #Put config files in aux-config
+ AC_CONFIG_MACRO_DIR([m4])                 #m4 macros are located in m4
+ m4_include([m4/issm_options.m4])
Index: /issm/oecreview/Archive/13393-13976/ISSM-13972-13973.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13972-13973.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13972-13973.diff	(revision 13980)
@@ -0,0 +1,9 @@
+Index: ../trunk-jpl/src
+===================================================================
+--- ../trunk-jpl/src	(revision 13972)
++++ ../trunk-jpl/src	(revision 13973)
+
+Property changes on: ../trunk-jpl/src
+___________________________________________________________________
+Modified: svn:mergeinfo
+   Merged /issm/trunk/src:r13397-13972
Index: /issm/oecreview/Archive/13393-13976/ISSM-13973-13974.diff
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-13973-13974.diff	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-13973-13974.diff	(revision 13980)
@@ -0,0 +1,20 @@
+Index: ../trunk-jpl/aux-config
+===================================================================
+--- ../trunk-jpl/aux-config	(revision 13973)
++++ ../trunk-jpl/aux-config	(revision 13974)
+
+Property changes on: ../trunk-jpl/aux-config
+___________________________________________________________________
+Modified: svn:ignore
+## -1 +1 ##
+-*
++
+Index: ../trunk-jpl
+===================================================================
+--- ../trunk-jpl	(revision 13973)
++++ ../trunk-jpl	(revision 13974)
+
+Property changes on: ../trunk-jpl
+___________________________________________________________________
+Modified: svn:mergeinfo
+   Merged /issm/trunk:r13397-13972
Index: /issm/oecreview/Archive/13393-13976/ISSM-DocReview-13393-13976.tex
===================================================================
--- /issm/oecreview/Archive/13393-13976/ISSM-DocReview-13393-13976.tex	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/ISSM-DocReview-13393-13976.tex	(revision 13980)
@@ -0,0 +1,67 @@
+\documentclass[]{report}   % list options between brackets
+\usepackage{graphicx}              % list packages between braces
+
+% type user-defined commands here
+
+\begin{document}
+
+\title{JPL EXPORT ADMINISTRATION \\ DOCUMENT REVIEW RECORD}   % type title between braces
+\author{Tom Scavo}         % type author(s) between braces
+\date{October 27, 1995}    % type date between braces
+%\maketitle
+
+
+\begin{center}
+\begin{tabular}{ |c|c| }
+\hline
+JPL EXPORT ADMINISTRATION \\
+\textit{ DOCUMENT REVIEW RECORD} \\
+\hline
+\end{tabular}
+\end{center}
+
+\hfill Log \#: \underline{\input{LogNumber}}
+
+\vspace{1cm}
+\noindent (Note: This form and process do not replace the procedures described in JPL Policy relating to review and approval of proposals and contractual 
+documents. This process is intended to document the review and coordination of requests to ascertain the export control ramifications relating to specific 
+documents. Export Administration signature does not convey authority to export or release the "Exporter of Record" from any export laws or regulations.)\\
+
+\noindent \textbf{Program:} \underline{ISSM: Ice Sheet System Model} \\ \\
+\noindent \textbf{Person Requesting or Initiating Export}: \underline{Dr. Eric Larour}\\ \\
+\noindent \textbf{Date Received}: \underline{\input{Date}}\\ \\
+\noindent \textbf{Document Title/Description}: ISSM changes from revision \input{r1} to revision \input{r2} \\ \\
+\noindent \textbf{Release to:} \underline{http://issm.ess.uci.edu/svn/issm/issm/trunk on ISSM svn repository}\\ \\
+\noindent \textbf{JPL Intranet:} \underline{murdo.jpl.nasa.gov/proj/ice/larour/issm-uci/trunk-jpl}\\ \\
+
+\noindent \textbf{Disposition: 6 } 
+Does not contain export-controlled information. May be released/disclosed as requested subject to 
+Company guidelines on protection of proprietary information (if applicable). \\
+
+\noindent \textbf{Comments:}  see table of changes below. \\ \\
+\noindent \textbf{Reviewed by ISSM Export Transfer Liaison:} Dr. Eric Larour \hfill \textbf{Date:} \input{Date} \\ 
+\includegraphics[scale=1]{signature}
+
+\noindent JPL Export Administration Form TBS – June 29, 2011
+
+\begin{center}
+\line(1,0){250}
+\end{center}
+
+\noindent \textbf{Disposition:} \\
+1:	  Public Domain Information (Ref ITAR Section 120.11) \\
+2:	  Qualifies for ITAR Exemption				 \\
+3:	  Covered by Department of State License/Agreement Number					  \\
+4:	  Covered by Department of Commerce validated license or exception				 \\
+5:	  New License Required \\
+6:	  Does not contain export-controlled information.  May be released/disclosed as requested subject
+   to Company guidelines on protection of proprietary information (if applicable). \\
+7:	 Other (specify)   
+\begin{center}
+\line(1,0){250}
+\end{center}
+
+
+\input{log}
+
+\end{document}
Index: /issm/oecreview/Archive/13393-13976/LogNumber.tex
===================================================================
--- /issm/oecreview/Archive/13393-13976/LogNumber.tex	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/LogNumber.tex	(revision 13980)
@@ -0,0 +1,1 @@
+13393-13976
Index: /issm/oecreview/Archive/13393-13976/Makefile
===================================================================
--- /issm/oecreview/Archive/13393-13976/Makefile	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/Makefile	(revision 13980)
@@ -0,0 +1,8 @@
+TARGET=ISSM-DocReview-13393-13976
+
+all: 
+	pdflatex -interaction=errorstopmode -file-line-error -halt-on-error $(TARGET).tex
+	rm -rf *.log *.aux 
+
+clean:
+	rm -rf *.log *.aux
Index: /issm/oecreview/Archive/13393-13976/log.tex
===================================================================
--- /issm/oecreview/Archive/13393-13976/log.tex	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/log.tex	(revision 13980)
@@ -0,0 +1,3997 @@
+\noindent \textbf{Change \#1} with diff file ISSM-13393-13394.diff: \\
+Function name: \\
+M /issm/trunk-jpl M /issm/trunk-jpl/src M /issm/trunk-jpl/test\\
+Export determination: 6. \\
+Rationale: merged trunk and trunk-jpl\\
+\vspace{3em}
+
+\noindent \textbf{Change \#2} with diff file ISSM-13397-13398.diff: \\
+Function name: \\
+M /issm/trunk-jpl M /issm/trunk-jpl/src M /issm/trunk-jpl/test\\
+Export determination: 6. \\
+Rationale: Block revision 13395 from being merged into trunk-jpl\\
+\vspace{3em}
+
+\noindent \textbf{Change \#3} with diff file ISSM-13398-13399.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/dox/issm.dox\\
+Export determination: 6. \\
+Rationale: CHG: updated code stats\\
+\vspace{3em}
+
+\noindent \textbf{Change \#4} with diff file ISSM-13401-13402.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/thermal.m M /issm/trunk-jpl/src/m/classes/thermal.py\\
+Export determination: 6. \\
+Rationale: CHG: improved check consistency for enthalpy solution\\
+\vspace{3em}
+
+\noindent \textbf{Change \#5} with diff file ISSM-13407-13408.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp\\
+Export determination: 6. \\
+Rationale: CHG use call to ensure contiguous locations for arguments passed to EDF ; commented out debug prints - to be removed when regression is successfull\\
+\vspace{3em}
+
+\noindent \textbf{Change \#6} with diff file ISSM-13408-13409.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/adolc/install-update-dev.sh\\
+Export determination: 6. \\
+Rationale: NEW: script to just update adolc in larsen larour nightlys\\
+\vspace{3em}
+
+\noindent \textbf{Change \#7} with diff file ISSM-13409-13410.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/adolc/install-2.2.0.sh (from /issm/trunk-jpl/externalpackages/adolc/install.sh:13408) D /issm/trunk-jpl/externalpackages/adolc/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: renaming install.sh install-2.2.0.sh for consistency\\
+\vspace{3em}
+
+\noindent \textbf{Change \#8} with diff file ISSM-13410-13411.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Vertices.cpp M /issm/trunk-jpl/src/c/Container/Vertices.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/classes/objects/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/objects/Node.cpp M /issm/trunk-jpl/src/c/classes/objects/Node.h M /issm/trunk-jpl/src/c/classes/objects/Vertex.cpp M /issm/trunk-jpl/src/c/classes/objects/Vertex.h M /issm/trunk-jpl/src/c/modules/VerticesDofx/VerticesDofx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: renaming vertex->dof vertex->pid for consistency (id, sid and pid) and cleaned up some code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#9} with diff file ISSM-13411-13412.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/pairoptions.py A /issm/trunk-jpl/src/m/classes/plotoptions.py A /issm/trunk-jpl/src/m/plot/checkplotoptions.py A /issm/trunk-jpl/src/m/plot/plot\_manager.py A /issm/trunk-jpl/src/m/plot/plot\_mesh.py A /issm/trunk-jpl/src/m/plot/plotmodel.py\\
+Export determination: 6. \\
+Rationale: NEW: skeleton of plotmodel routine in python, plotmodel(md,'data','mesh') now works\\
+\vspace{3em}
+
+\noindent \textbf{Change \#10} with diff file ISSM-13412-13413.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/DofIndexing.cpp M /issm/trunk-jpl/src/c/classes/DofIndexing.h M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/objects/Node.cpp M /issm/trunk-jpl/src/c/io/PrintfFunction.cpp M /issm/trunk-jpl/src/c/matlab/io/PrintfFunction.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp M /issm/trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp M /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: lots of cleanup\\
+\vspace{3em}
+
+\noindent \textbf{Change \#11} with diff file ISSM-13413-13414.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Nodes.cpp M /issm/trunk-jpl/src/c/Container/Vertices.cpp M /issm/trunk-jpl/src/c/classes/DofIndexing.cpp M /issm/trunk-jpl/src/c/classes/DofIndexing.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/classes/Hook.cpp M /issm/trunk-jpl/src/c/classes/Hook.h M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h M /issm/trunk-jpl/src/c/classes/Patch.cpp M /issm/trunk-jpl/src/c/classes/Patch.h M /issm/trunk-jpl/src/c/classes/Update.h M /issm/trunk-jpl/src/c/classes/objects/Contour.h M /issm/trunk-jpl/src/c/classes/objects/Node.h M /issm/trunk-jpl/src/c/classes/objects/Object.h\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#12} with diff file ISSM-13414-13415.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/bamg/BamgQuadtree.h M /issm/trunk-jpl/src/c/classes/kriging/ExponentialVariogram.h M /issm/trunk-jpl/src/c/classes/kriging/GaussianVariogram.h M /issm/trunk-jpl/src/c/classes/kriging/Observation.h M /issm/trunk-jpl/src/c/classes/kriging/PowerVariogram.h M /issm/trunk-jpl/src/c/classes/kriging/Quadtree.h M /issm/trunk-jpl/src/c/classes/kriging/SphericalVariogram.h M /issm/trunk-jpl/src/c/classes/objects/Constraints/Constraint.h M /issm/trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.cpp M /issm/trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.h M /issm/trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.cpp M /issm/trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.h M /issm/trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.cpp M /issm/trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.h M /issm/trunk-jpl/src/c/classes/objects/Contour.h M /issm/trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.cpp M /issm/trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.h M /issm/trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.cpp M /issm/trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.h M /issm/trunk-jpl/src/c/classes/objects/ElementResults/ElementResult.h M /issm/trunk-jpl/src/c/classes/objects/ElementResults/ElementResultLocal.h M /issm/trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.cpp M /issm/trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.h M /issm/trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.cpp M /issm/trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/BoolInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/IntInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Attribute.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_ColorStyle.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Comment.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Container.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Document.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Feature.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_File.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Folder.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Geometry.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_GroundOverlay.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Icon.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_LatLonBox.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_LineString.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_LineStyle.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_LinearRing.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_MultiGeometry.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Object.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Overlay.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Placemark.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Point.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_PolyStyle.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Polygon.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Style.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_StyleSelector.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_SubStyle.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Unknown.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Load.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Penpair.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Riftfront.h M /issm/trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/classes/objects/Materials/Matdamageice.h M /issm/trunk-jpl/src/c/classes/objects/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/objects/Materials/Matice.h M /issm/trunk-jpl/src/c/classes/objects/Materials/Matpar.cpp M /issm/trunk-jpl/src/c/classes/objects/Materials/Matpar.h M /issm/trunk-jpl/src/c/classes/objects/Node.cpp M /issm/trunk-jpl/src/c/classes/objects/Node.h M /issm/trunk-jpl/src/c/classes/objects/Options/GenericOption.h M /issm/trunk-jpl/src/c/classes/objects/Options/Option.h M /issm/trunk-jpl/src/c/classes/objects/Params/BoolParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/BoolParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/FileParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/FileParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/GenericParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/IntMatParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/IntMatParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/IntParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/IntParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/IntVecParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/IntVecParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/MatrixParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/StringArrayParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/StringArrayParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/StringParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/StringParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/TransientParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/VectorParam.h M /issm/trunk-jpl/src/c/classes/objects/Segment.h M /issm/trunk-jpl/src/c/classes/objects/Vertex.cpp M /issm/trunk-jpl/src/c/classes/objects/Vertex.h M /issm/trunk-jpl/src/c/include/types.h\\
+Export determination: 6. \\
+Rationale: CHG: clean-up removed MyRank which is not used anymore, and removed IssmBool\\
+\vspace{3em}
+
+\noindent \textbf{Change \#13} with diff file ISSM-13415-13416.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: compilation for Dakota fixed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#14} with diff file ISSM-13416-13417.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/Vertex.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed bug in pids\\
+\vspace{3em}
+
+\noindent \textbf{Change \#15} with diff file ISSM-13417-13418.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/plotoptions.py A /issm/trunk-jpl/src/m/plot/applyoptions.py M /issm/trunk-jpl/src/m/plot/plot\_mesh.py M /issm/trunk-jpl/src/m/plot/plotmodel.py A /issm/trunk-jpl/src/m/plot/processmesh.py\\
+Export determination: 6. \\
+Rationale: NEW: processmesh and applyoptions for python plotting, some options enabled\\
+\vspace{3em}
+
+\noindent \textbf{Change \#16} with diff file ISSM-13418-13419.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/regional/regionaltransient2d.m\\
+Export determination: 6. \\
+Rationale: CHG: Update to use model extract local method\\
+\vspace{3em}
+
+\noindent \textbf{Change \#17} with diff file ISSM-13419-13420.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/adolc/install-dev.sh\\
+Export determination: 6. \\
+Rationale: CHG : moved to MCS git clone because gitorrious.org is unreliable and dropped the version string from the local clone name\\
+\vspace{3em}
+
+\noindent \textbf{Change \#18} with diff file ISSM-13420-13421.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/thermal.py\\
+Export determination: 6. \\
+Rationale: CHG: Modified thermal.py corresponding to changeset [13401].\\
+\vspace{3em}
+
+\noindent \textbf{Change \#19} with diff file ISSM-13421-13422.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/thermal.py\\
+Export determination: 6. \\
+Rationale: FIX: Python rusty after a week away.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#20} with diff file ISSM-13422-13423.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/thermal.py\\
+Export determination: 6. \\
+Rationale: FIX: Python even more rusty after a week away.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#21} with diff file ISSM-13423-13424.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/miscellaneous/fielddisplay.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed typo in fielddisplay loop\\
+\vspace{3em}
+
+\noindent \textbf{Change \#22} with diff file ISSM-13424-13425.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/pairoptions.py M /issm/trunk-jpl/src/m/plot/applyoptions.py M /issm/trunk-jpl/src/m/plot/plot\_manager.py\\
+Export determination: 6. \\
+Rationale: NEW: a couple more new plot options\\
+\vspace{3em}
+
+\noindent \textbf{Change \#23} with diff file ISSM-13425-13426.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Parameters.cpp M /issm/trunk-jpl/src/c/Container/Parameters.h M /issm/trunk-jpl/src/c/classes/objects/Params/BoolParam.h A /issm/trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp A /issm/trunk-jpl/src/c/classes/objects/Params/DataSetParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/FileParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/GenericParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/IntMatParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/IntParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/IntVecParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/MatrixParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/Param.h M /issm/trunk-jpl/src/c/classes/objects/Params/StringArrayParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/StringParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/TransientParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/VectorParam.h\\
+Export determination: 6. \\
+Rationale: New DataSet parameter\\
+\vspace{3em}
+
+\noindent \textbf{Change \#24} with diff file ISSM-13426-13427.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/c/classes/objects/DependentObject.cpp A /issm/trunk-jpl/src/c/classes/objects/DependentObject.h A /issm/trunk-jpl/src/c/classes/objects/IndependentObject.cpp A /issm/trunk-jpl/src/c/classes/objects/IndependentObject.h M /issm/trunk-jpl/src/c/classes/objects/objects.h\\
+Export determination: 6. \\
+Rationale: New dependent and independent objects\\
+\vspace{3em}
+
+\noindent \textbf{Change \#25} with diff file ISSM-13427-13428.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h A /issm/trunk-jpl/src/m/enum/AutodiffDependentObjectNamesEnum.m A /issm/trunk-jpl/src/m/enum/AutodiffDependentObjectTypesEnum.m A /issm/trunk-jpl/src/m/enum/AutodiffDependentObjectsEnum.m D /issm/trunk-jpl/src/m/enum/AutodiffDependentsEnum.m A /issm/trunk-jpl/src/m/enum/AutodiffDriverEnum.m A /issm/trunk-jpl/src/m/enum/AutodiffFosForwardIndexEnum.m D /issm/trunk-jpl/src/m/enum/AutodiffFosForwardOutputEnum.m A /issm/trunk-jpl/src/m/enum/AutodiffIndependentObjectNamesEnum.m A /issm/trunk-jpl/src/m/enum/AutodiffIndependentObjectTypesEnum.m A /issm/trunk-jpl/src/m/enum/AutodiffIndependentObjectsEnum.m D /issm/trunk-jpl/src/m/enum/AutodiffIndependentsEnum.m A /issm/trunk-jpl/src/m/enum/AutodiffNumDependentObjectsEnum.m A /issm/trunk-jpl/src/m/enum/AutodiffNumIndependentObjectsEnum.m A /issm/trunk-jpl/src/m/enum/DataSetParamEnum.m A /issm/trunk-jpl/src/m/enum/DependentObjectEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/IndependentObjectEnum.m M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m\\
+Export determination: 6. \\
+Rationale: New enums for dependent and independent variables\\
+\vspace{3em}
+
+\noindent \textbf{Change \#26} with diff file ISSM-13428-13429.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/prognostic\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: correct way of requested dependents\\
+\vspace{3em}
+
+\noindent \textbf{Change \#27} with diff file ISSM-13429-13430.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/autodiff.m A /issm/trunk-jpl/src/m/classes/dependent.m A /issm/trunk-jpl/src/m/classes/independent.m\\
+Export determination: 6. \\
+Rationale: NEW: new dependent and independent classes, added to autodiff class\\
+\vspace{3em}
+
+\noindent \textbf{Change \#28} with diff file ISSM-13430-13431.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp M /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: new enums for dependent and independent objects\\
+\vspace{3em}
+
+\noindent \textbf{Change \#29} with diff file ISSM-13431-13432.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/ad.m\\
+Export determination: 6. \\
+Rationale: CHG: changed ad test run to work in prognostic mode\\
+\vspace{3em}
+
+\noindent \textbf{Change \#30} with diff file ISSM-13432-13433.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.h M /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp M /issm/trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: new way of handling independent and dependent objects. We create a dataset for each of these objects, so that we do not confuse num\_dependents and num\_dependent\_objects, same thing for indepedndents. Makes handling of Autodiff drivers easier too.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#31} with diff file ISSM-13433-13434.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/ad.m M /issm/trunk-jpl/test/NightlyRun/test3001.m M /issm/trunk-jpl/test/NightlyRun/test3002.m M /issm/trunk-jpl/test/NightlyRun/test3003.m M /issm/trunk-jpl/test/NightlyRun/test3004.m M /issm/trunk-jpl/test/NightlyRun/test3005.m M /issm/trunk-jpl/test/NightlyRun/test3006.m M /issm/trunk-jpl/test/NightlyRun/test3007.m M /issm/trunk-jpl/test/NightlyRun/test3008.m M /issm/trunk-jpl/test/NightlyRun/test3009.m M /issm/trunk-jpl/test/NightlyRun/test3010.m\\
+Export determination: 6. \\
+Rationale: CHG: added hooks to verbose autodiff\\
+\vspace{3em}
+
+\noindent \textbf{Change \#32} with diff file ISSM-13434-13435.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/issm.cpp M /issm/trunk-jpl/src/c/solutions/prognostic\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed bug that was calling RequestedDependents repeatedly during transient run\\
+\vspace{3em}
+
+\noindent \textbf{Change \#33} with diff file ISSM-13435-13436.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Numerics/Synchronize.sh M /issm/trunk-jpl/src/c/shared/Numerics/Verbosity.cpp M /issm/trunk-jpl/src/c/shared/Numerics/Verbosity.h M /issm/trunk-jpl/src/m/classes/verbose.m\\
+Export determination: 6. \\
+Rationale: CHG: Added new level of verbosity for autodiff mode. Also updated Synchronize.sh to reflect new structure of m code, and to stop outputting Verbose*.m files, which are not needed anymore since we have stopped supporting the serial m-code.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#34} with diff file ISSM-13436-13437.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/bamggeom.py M /issm/trunk-jpl/src/m/classes/bamgmesh.py M /issm/trunk-jpl/src/m/mesh/bamg.m A /issm/trunk-jpl/src/m/mesh/bamg.py M /issm/trunk-jpl/src/m/mesh/meshconvert.py M /issm/trunk-jpl/src/m/miscellaneous/MatlabFuncs.py\\
+Export determination: 6. \\
+Rationale: NEW: Working python bamg et al.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#35} with diff file ISSM-13437-13438.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test119.m A /issm/trunk-jpl/test/NightlyRun/test119.py\\
+Export determination: 6. \\
+Rationale: NEW: Working python test119.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#36} with diff file ISSM-13438-13439.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp M /issm/trunk-jpl/src/c/solutions/diagnostic\_core.cpp M /issm/trunk-jpl/src/c/solutions/prognostic\_core.cpp M /issm/trunk-jpl/src/m/classes/prognostic.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m A /issm/trunk-jpl/src/m/enum/PrognosticNumRequestedOutputsEnum.m A /issm/trunk-jpl/src/m/enum/PrognosticRequestedOutputsEnum.m A /issm/trunk-jpl/test/Archives/Archive3015.nc M /issm/trunk-jpl/test/NightlyRun/ad.m M /issm/trunk-jpl/test/NightlyRun/runme.m A /issm/trunk-jpl/test/NightlyRun/test3015.m\\
+Export determination: 6. \\
+Rationale: CHG: -added test3015 to check on AD mode runs for prognostic mode and fos\_forward driver. -added RequestedOutputs in prognostic\_core solution. -fixed segfault in IoModel.cpp due to requested\_independents not being initialized to 0.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#37} with diff file ISSM-13439-13440.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/matice.py M /issm/trunk-jpl/src/m/classes/thermal.py\\
+Export determination: 6. \\
+Rationale: FIX: Make thermal.py work for vector, but need to know about multiple columns.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#38} with diff file ISSM-13440-13441.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.py M /issm/trunk-jpl/src/m/plot/plot\_manager.py M /issm/trunk-jpl/src/m/plot/plot\_mesh.py A /issm/trunk-jpl/src/m/plot/plot\_unit.py M /issm/trunk-jpl/src/m/plot/plotmodel.py M /issm/trunk-jpl/src/m/plot/processdata.m A /issm/trunk-jpl/src/m/plot/processdata.py M /issm/trunk-jpl/src/m/plot/processmesh.py\\
+Export determination: 6. \\
+Rationale: NEW: processdata and plot\_unit for python plotting, some new plot options added, preliminary element and node plots\\
+\vspace{3em}
+
+\noindent \textbf{Change \#39} with diff file ISSM-13441-13442.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/modules/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: NEW: Added ContourToMesh to python Makefile.am.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#40} with diff file ISSM-13442-13443.diff: \\
+Function name: \\
+M /issm/trunk-jpl/scripts/report.sh\\
+Export determination: 6. \\
+Rationale: BUG: fixed python NR report\\
+\vspace{3em}
+
+\noindent \textbf{Change \#41} with diff file ISSM-13443-13444.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/prognostic.m M /issm/trunk-jpl/src/m/classes/prognostic.py\\
+Export determination: 6. \\
+Rationale: CHG: updated python version of prognostic.m so that NR works\\
+\vspace{3em}
+
+\noindent \textbf{Change \#42} with diff file ISSM-13444-13445.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/prognostic.py\\
+Export determination: 6. \\
+Rationale: BUG: typo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#43} with diff file ISSM-13445-13446.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp\\
+Export determination: 6. \\
+Rationale: CHG: move trace\_on for ADOLC within the IoModel constructor.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#44} with diff file ISSM-13446-13447.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp\\
+Export determination: 6. \\
+Rationale: CHG : for solver invocations with changing sizes let adol-c track the maximal needed size and allocate accordingly\\
+\vspace{3em}
+
+\noindent \textbf{Change \#45} with diff file ISSM-13447-13448.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp M /issm/trunk-jpl/src/c/matlab/io/matlabio.h M /issm/trunk-jpl/src/c/python/io/WritePythonData.cpp M /issm/trunk-jpl/src/modules/ContourToMesh/ContourToMesh.cpp\\
+Export determination: 6. \\
+Rationale: FIX: For python, modules must return all arguments, so add WriteData functions for null arguments.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#46} with diff file ISSM-13448-13449.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/python/io/pythonio.h\\
+Export determination: 6. \\
+Rationale: FIX: Missing from changeset [13447].\\
+\vspace{3em}
+
+\noindent \textbf{Change \#47} with diff file ISSM-13449-13450.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/geometry/FlagElements.py M /issm/trunk-jpl/src/m/parameterization/setmask.py\\
+Export determination: 6. \\
+Rationale: FIX: Fixed call to ContourToMesh in FlagElements and got setmask working.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#48} with diff file ISSM-13450-13451.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: added new requested output max vel\\
+\vspace{3em}
+
+\noindent \textbf{Change \#49} with diff file ISSM-13451-13452.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Alloc/xNewDelete.h\\
+Export determination: 6. \\
+Rationale: NEW 2-dim variant of zero init array allocation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#50} with diff file ISSM-13452-13453.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp\\
+Export determination: 6. \\
+Rationale: CHG allow more forward variants to be used (note that jacobian may call reverse though)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#51} with diff file ISSM-13453-13454.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp\\
+Export determination: 6. \\
+Rationale: CHG fix error message text and remove extraneous condition\\
+\vspace{3em}
+
+\noindent \textbf{Change \#52} with diff file ISSM-13454-13455.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore ad tests.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#53} with diff file ISSM-13455-13456.diff: \\
+Function name: \\
+A /issm/trunk-jpl/scripts/mToPy.py A /issm/trunk-jpl/scripts/translateToPy.py M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/classes/flowequation.py M /issm/trunk-jpl/src/modules/python/Makefile.am A /issm/trunk-jpl/test/NightlyRun/test201.py A /issm/trunk-jpl/test/NightlyRun/test3001.py A /issm/trunk-jpl/test/NightlyRun/test3002.py A /issm/trunk-jpl/test/NightlyRun/test3003.py A /issm/trunk-jpl/test/NightlyRun/test3004.py A /issm/trunk-jpl/test/NightlyRun/test3005.py A /issm/trunk-jpl/test/NightlyRun/test3006.py A /issm/trunk-jpl/test/NightlyRun/test3007.py A /issm/trunk-jpl/test/NightlyRun/test3008.py A /issm/trunk-jpl/test/NightlyRun/test3009.py A /issm/trunk-jpl/test/NightlyRun/test3010.py A /issm/trunk-jpl/test/Par/SquareShelf.py\\
+Export determination: 6. \\
+Rationale: t cases 201, 3001..3010. Conversion of SquareShelf.par to .py. Creation of matlab script -> python script conversion tool {/scripts/mToPy.py}. Modification of modules/python/Makefile.am to support use of ContourToMesh[cpp]. Utilization of deep copy when marshaling flowequation data. Add support of ice-front-file specification [as param] to SetIceShelfBC.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#54} with diff file ISSM-13456-13457.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.py\\
+Export determination: 6. \\
+Rationale: BUG: fix python NR, do not stop if failure\\
+\vspace{3em}
+
+\noindent \textbf{Change \#55} with diff file ISSM-13457-13458.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#56} with diff file ISSM-13458-13459.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp\\
+Export determination: 6. \\
+Rationale: CHG fix wrong condition\\
+\vspace{3em}
+
+\noindent \textbf{Change \#57} with diff file ISSM-13459-13460.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Alloc/xNewDelete.h\\
+Export determination: 6. \\
+Rationale: CHG fix the operator order with ()\\
+\vspace{3em}
+
+\noindent \textbf{Change \#58} with diff file ISSM-13460-13461.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.py\\
+Export determination: 6. \\
+Rationale: CHG: Take advantage of python syntax.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#59} with diff file ISSM-13461-13462.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h M /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp M /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/independent.m A /issm/trunk-jpl/src/m/enum/AutodiffFovForwardIndicesEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m M /issm/trunk-jpl/test/NightlyRun/ad.m\\
+Export determination: 6. \\
+Rationale: CHG: AutodiffDriversx now driven by the type of driver string supplied in autodiff.m In addition, for fov\_forward driver, we can now supply at the Matlab level (autodiff.m) a list of indices on which we want the forward vector driver to be applied.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#60} with diff file ISSM-13462-13463.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/classes/model/model.py M /issm/trunk-jpl/src/m/classes/thermal.py M /issm/trunk-jpl/src/m/materials/paterson.m M /issm/trunk-jpl/src/m/materials/paterson.py M /issm/trunk-jpl/src/m/parameterization/setflowequation.py M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py\\
+Export determination: 6. \\
+Rationale: CHG: Changed all data 1-d vectors to 2-d arrays to allow multiple columns.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#61} with diff file ISSM-13463-13464.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test121.py M /issm/trunk-jpl/test/NightlyRun/test122.py A /issm/trunk-jpl/test/Par/Pig.py M /issm/trunk-jpl/test/Par/SquareShelfConstrained.py\\
+Export determination: 6. \\
+Rationale: CHG: Changed all data 1-d vectors to 2-d arrays to allow multiple columns.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#62} with diff file ISSM-13464-13465.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/modules/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: BUG: do not compile ContourToMesh twice\\
+\vspace{3em}
+
+\noindent \textbf{Change \#63} with diff file ISSM-13465-13466.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/test/Par/SquareShelf.py\\
+Export determination: 6. \\
+Rationale: minor cleanup\\
+\vspace{3em}
+
+\noindent \textbf{Change \#64} with diff file ISSM-13466-13467.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/SquareShelf.py\\
+Export determination: 6. \\
+Rationale: CHG: Update for multiple columns.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#65} with diff file ISSM-13467-13468.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py\\
+Export determination: 6. \\
+Rationale: FIX: Fixed call to ContourToMesh.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#66} with diff file ISSM-13468-13469.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp\\
+Export determination: 6. \\
+Rationale: CHG ignore the return codes for now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#67} with diff file ISSM-13469-13470.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/prognostic.py\\
+Export determination: 6. \\
+Rationale: CHG: fixed bug in requested\_outputs check consistency\\
+\vspace{3em}
+
+\noindent \textbf{Change \#68} with diff file ISSM-13470-13471.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m A /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py M /issm/trunk-jpl/src/m/classes/model/model.py M /issm/trunk-jpl/src/m/geometry/FlagElements.py M /issm/trunk-jpl/src/m/mesh/bamg.py\\
+Export determination: 6. \\
+Rationale: CHG: More changes relating to python 1-d vectors vs. 2-d arrays (plus some cleanup).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#69} with diff file ISSM-13471-13472.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/Pig.py\\
+Export determination: 6. \\
+Rationale: NEW: Enable SetMarineIceSheetBC in Pig.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#70} with diff file ISSM-13472-13473.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/geometry/GetAreas.py A /issm/trunk-jpl/src/m/mesh/GetNodalFunctionsCoeff.py\\
+Export determination: 6. \\
+Rationale: NEW: Preliminary python versions of GetAreas and GetNodalFunctionsCoeff.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#71} with diff file ISSM-13473-13474.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/ad.m\\
+Export determination: 6. \\
+Rationale: CHG: good test for AD\\
+\vspace{3em}
+
+\noindent \textbf{Change \#72} with diff file ISSM-13474-13475.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/adolc\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#73} with diff file ISSM-13475-13476.diff: \\
+Function name: \\
+M /issm/trunk-jpl/execution\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some svn files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#74} with diff file ISSM-13476-13477.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mech/mechanicalproperties.m\\
+Export determination: 6. \\
+Rationale: CHG: changed mechanicalproperties to sort eigenvalues in descending order by absolute value. Previously the first principal eigenalue was not guaranteed to have the greatest absolute value (as it should), a result of the way the eig() function in matlab sorts results.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#75} with diff file ISSM-13477-13478.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: ISSM now recognizes R2012b Matlab version.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#76} with diff file ISSM-13478-13479.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: BUG: Missing semicolon on prior modification to 'issm\_options.m4'\\
+\vspace{3em}
+
+\noindent \textbf{Change \#77} with diff file ISSM-13479-13480.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mech/mechanicalproperties.m\\
+Export determination: 6. \\
+Rationale: CHG: handle matice and matdamageice separately when calculating viscosity\\
+\vspace{3em}
+
+\noindent \textbf{Change \#78} with diff file ISSM-13480-13481.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/modules/matlab/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: Changed ordering of LD flags.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#79} with diff file ISSM-13481-13482.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp\\
+Export determination: 6. \\
+Rationale: CHG just changed the signature in adol-c so need to mirror it here\\
+\vspace{3em}
+
+\noindent \textbf{Change \#80} with diff file ISSM-13482-13483.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/ComputeHessian.m A /issm/trunk-jpl/src/m/mesh/ComputeHessian.py M /issm/trunk-jpl/src/m/mesh/ComputeMetric.m A /issm/trunk-jpl/src/m/mesh/ComputeMetric.py M /issm/trunk-jpl/src/m/mesh/GetNodalFunctionsCoeff.py M /issm/trunk-jpl/src/m/mesh/bamg.py M /issm/trunk-jpl/src/m/miscellaneous/MatlabFuncs.py\\
+Export determination: 6. \\
+Rationale: NEW: New python functions in support of test514.py (which doesn't yet work).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#81} with diff file ISSM-13483-13484.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h M /issm/trunk-jpl/src/c/classes/objects/DependentObject.cpp M /issm/trunk-jpl/src/c/classes/objects/DependentObject.h M /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp M /issm/trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp M /issm/trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp M /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/dependent.m M /issm/trunk-jpl/src/m/classes/qmu.m A /issm/trunk-jpl/src/m/enum/AutodiffDependentObjectIndicesEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/MassFluxSegmentsEnum.m A /issm/trunk-jpl/src/m/enum/MassFluxSegmentsPresentEnum.m M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m D /issm/trunk-jpl/src/m/enum/QmuMassFluxSegmentsEnum.m M /issm/trunk-jpl/test/NightlyRun/ad.m\\
+Export determination: 6. \\
+Rationale: CHG: added mass flux as a possible dependent variable. In order not to conflict with the qmu Dakota capabilities for computation of mass fluxes, I had to generalize the treatment of mass flux segments in the ModelProcessorx, and throughout the m/classes code.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#82} with diff file ISSM-13484-13485.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/python/io/FetchPythonData.cpp M /issm/trunk-jpl/src/m/classes/bamggeom.py\\
+Export determination: 6. \\
+Rationale: CHG: Change handling of null matrices for python FetchData.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#83} with diff file ISSM-13485-13486.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp\\
+Export determination: 6. \\
+Rationale: BUG: do not check for segment if isautodiff=false\\
+\vspace{3em}
+
+\noindent \textbf{Change \#84} with diff file ISSM-13486-13487.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h M /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/qmu.m A /issm/trunk-jpl/src/m/enum/AutodiffMassFluxSegmentsPresentEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m A /issm/trunk-jpl/src/m/enum/QmuMassFluxSegmentsPresentEnum.m M /issm/trunk-jpl/test/NightlyRun/test223.m\\
+Export determination: 6. \\
+Rationale: CHG: fixed issues with mass flux segments where MassFluxSegmentsPresentEnum was not being marshalled, leading CreateParameters to not know whether mass flux segments were available. The problem is that both autodiff and qmu can upload flux segments. For now, the fix is to have both classes marshall a flag, and get CreateParameters to sort it out.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#85} with diff file ISSM-13487-13488.diff: \\
+Function name: \\
+M /issm/trunk-jpl/etc/environment.sh\\
+Export determination: 6. \\
+Rationale: CHG: swithc from append to prepend on git variables\\
+\vspace{3em}
+
+\noindent \textbf{Change \#86} with diff file ISSM-13488-13489.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-linux64-murdo-ad.sh M /issm/trunk-jpl/configs/config-linux64-murdo.sh\\
+Export determination: 6. \\
+Rationale: CHG: updates to murdo configurations\\
+\vspace{3em}
+
+\noindent \textbf{Change \#87} with diff file ISSM-13489-13490.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/adolc/update.sh\\
+Export determination: 6. \\
+Rationale: NEW: update of adolc clone.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#88} with diff file ISSM-13490-13491.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/autodiff.py M /issm/trunk-jpl/src/m/classes/qmu.py\\
+Export determination: 6. \\
+Rationale: CHG: updated these classes to sync with corresponding .m classes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#89} with diff file ISSM-13491-13492.diff: \\
+Function name: \\
+M /issm/trunk-jpl/scripts/translateToPy.py A /issm/trunk-jpl/test/NightlyRun/test202.py A /issm/trunk-jpl/test/NightlyRun/test203.py A /issm/trunk-jpl/test/NightlyRun/test204.py A /issm/trunk-jpl/test/NightlyRun/test206.py A /issm/trunk-jpl/test/NightlyRun/test207.py A /issm/trunk-jpl/test/NightlyRun/test208.py A /issm/trunk-jpl/test/NightlyRun/test209.py A /issm/trunk-jpl/test/NightlyRun/test210.py A /issm/trunk-jpl/test/NightlyRun/test211.py\\
+Export determination: 6. \\
+Rationale: Checkin last py scripts I was able to test successfully.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#90} with diff file ISSM-13492-13493.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1301.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1302.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1303.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1304.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1501.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1502.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1601.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1602.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test205.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test212.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test213.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test214.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test215.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test216.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test217.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test218.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test219.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test220.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3001.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3002.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3003.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3004.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3005.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3006.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3007.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3008.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3009.py A /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3010.py\\
+Export determination: 6. \\
+Rationale: These are scripts that were in my queue to debug - ran out of time\\
+\vspace{3em}
+
+\noindent \textbf{Change \#91} with diff file ISSM-13493-13494.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.py\\
+Export determination: 6. \\
+Rationale: FIX: Fixed typo and instance dictionary reference.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#92} with diff file ISSM-13494-13495.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test514.m A /issm/trunk-jpl/test/NightlyRun/test514.py\\
+Export determination: 6. \\
+Rationale: NEW: test514.py now running.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#93} with diff file ISSM-13495-13496.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.m M /issm/trunk-jpl/src/m/mesh/bamg.py\\
+Export determination: 6. \\
+Rationale: NEW: Preliminary rifts section of bamg.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#94} with diff file ISSM-13496-13497.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.py\\
+Export determination: 6. \\
+Rationale: CHG: cosmetic.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#95} with diff file ISSM-13497-13498.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/petsc/install-3.2-greenplanet.sh\\
+Export determination: 6. \\
+Rationale: CHG: enable shared libraries\\
+\vspace{3em}
+
+\noindent \textbf{Change \#96} with diff file ISSM-13498-13499.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp\\
+Export determination: 6. \\
+Rationale: CHG implement fos\_reverse for the solver and use a view to the solution vector rather than allocating a new one and copying it\\
+\vspace{3em}
+
+\noindent \textbf{Change \#97} with diff file ISSM-13499-13500.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: problem with driver name\\
+\vspace{3em}
+
+\noindent \textbf{Change \#98} with diff file ISSM-13500-13501.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/autodiff.m\\
+Export determination: 6. \\
+Rationale: CHG: checkconsistency now accepts reverse drivers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#99} with diff file ISSM-13501-13502.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: active keep on in trace for reverse drivers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#100} with diff file ISSM-13502-13503.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/issm.cpp\\
+Export determination: 6. \\
+Rationale: CHG space savers for EDF\\
+\vspace{3em}
+
+\noindent \textbf{Change \#101} with diff file ISSM-13503-13504.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/geometry/FlagElements.py M /issm/trunk-jpl/src/m/geometry/SegIntersect.py M /issm/trunk-jpl/src/m/parameterization/setflowequation.py\\
+Export determination: 6. \\
+Rationale: FIX: Fixes required for test205.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#102} with diff file ISSM-13504-13505.diff: \\
+Function name: \\
+D /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test205.py A /issm/trunk-jpl/test/NightlyRun/test205.py (from /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test205.py:13497)\\
+Export determination: 6. \\
+Rationale: NEW: Working test205.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#103} with diff file ISSM-13505-13506.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/m/classes/autodiff.m A /issm/trunk-jpl/src/m/enum/AutodiffFosReverseIndexEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m\\
+Export determination: 6. \\
+Rationale: CHG: new AutodiffFosReverseIndexEnum for reverse mode. Also changed name of driver from jacobian to fov\_reverse\_all and fov\_forward\_all.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#104} with diff file ISSM-13506-13507.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp M /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: new AutodiffFosReverseIndexEnum for reverse mode. Also changed name of driver from jacobian to fov\_reverse\_all and fov\_forward\_all.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#105} with diff file ISSM-13507-13508.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp\\
+Export determination: 6. \\
+Rationale: CHG factored out EDF allocations, changed driver names, added fos\_reverse case, fov\_reverse doesn't do anything yet\\
+\vspace{3em}
+
+\noindent \textbf{Change \#106} with diff file ISSM-13508-13509.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/Archives/Archive3019.nc M /issm/trunk-jpl/test/NightlyRun/ad.m A /issm/trunk-jpl/test/NightlyRun/test3019.m\\
+Export determination: 6. \\
+Rationale: NEW: test to check forward vectorial vs reverse scalar\\
+\vspace{3em}
+
+\noindent \textbf{Change \#107} with diff file ISSM-13509-13510.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/dependent.m\\
+Export determination: 6. \\
+Rationale: NEW: new fos\_reverse driver capability.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#108} with diff file ISSM-13510-13511.diff: \\
+Function name: \\
+M /issm/trunk-jpl/execution\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some svn files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#109} with diff file ISSM-13511-13512.diff: \\
+Function name: \\
+M /issm/trunk-jpl/execution\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some svn files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#110} with diff file ISSM-13512-13513.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp\\
+Export determination: 6. \\
+Rationale: NEW fov\_reverse solver wrapper\\
+\vspace{3em}
+
+\noindent \textbf{Change \#111} with diff file ISSM-13513-13514.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp\\
+Export determination: 6. \\
+Rationale: NEW fov\_reverse driver\\
+\vspace{3em}
+
+\noindent \textbf{Change \#112} with diff file ISSM-13514-13515.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp\\
+Export determination: 6. \\
+Rationale: CHG indentation only - abide by the ISSM code style\\
+\vspace{3em}
+
+\noindent \textbf{Change \#113} with diff file ISSM-13515-13516.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp\\
+Export determination: 6. \\
+Rationale: CHG consistent naming\\
+\vspace{3em}
+
+\noindent \textbf{Change \#114} with diff file ISSM-13516-13517.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-macosx64-larour-bothapis.sh A /issm/trunk-jpl/externalpackages/esmf/esmf\_4\_0\_0rp2\_src.tar.gz M /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/autodiff.py A /issm/trunk-jpl/src/m/enum/AutodiffKeepEnum.m M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m A /issm/trunk-jpl/test/Archives/Archive3020.nc M /issm/trunk-jpl/test/NightlyRun/test3019.m A /issm/trunk-jpl/test/NightlyRun/test3020.m\\
+Export determination: 6. \\
+Rationale: CHG: modified the way we set keep for trace initialization in AD mode. This is now decided by the AutodiffKeepEnum boolean, which is initialized by the autodiff class, instead of this logic happening inside IoModel.cpp. Also added test3020 which tests forward difference vs AD driver.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#115} with diff file ISSM-13517-13518.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/inversion.py\\
+Export determination: 6. \\
+Rationale: FIX: Fixed InversionControlParameters for test212.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#116} with diff file ISSM-13518-13519.diff: \\
+Function name: \\
+D /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test212.py M /issm/trunk-jpl/test/NightlyRun/test212.m A /issm/trunk-jpl/test/NightlyRun/test212.py (from /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test212.py:13497)\\
+Export determination: 6. \\
+Rationale: NEW: Working test212.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#117} with diff file ISSM-13519-13520.diff: \\
+Function name: \\
+D /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test213.py D /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test214.py D /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test215.py M /issm/trunk-jpl/test/NightlyRun/test212.py A /issm/trunk-jpl/test/NightlyRun/test213.py (from /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test213.py:13497) M /issm/trunk-jpl/test/NightlyRun/test214.m A /issm/trunk-jpl/test/NightlyRun/test214.py (from /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test214.py:13497) M /issm/trunk-jpl/test/NightlyRun/test215.m A /issm/trunk-jpl/test/NightlyRun/test215.py (from /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test215.py:13497)\\
+Export determination: 6. \\
+Rationale: NEW: Working python tests 213-215.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#118} with diff file ISSM-13520-13521.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/triangle.py\\
+Export determination: 6. \\
+Rationale: FIX: Fix handling of variable arguments (and more).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#119} with diff file ISSM-13521-13522.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp M /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp M /issm/trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp M /issm/trunk-jpl/src/m/classes/surfaceforcings.m\\
+Export determination: 6. \\
+Rationale: update of the SMB gradients code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#120} with diff file ISSM-13522-13523.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/helloworld\\
+Export determination: 6. \\
+Rationale: NEW: helloworld prototype directory\\
+\vspace{3em}
+
+\noindent \textbf{Change \#121} with diff file ISSM-13523-13524.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m\\
+Export determination: 6. \\
+Rationale: BUG: fixing number of Enum\\
+\vspace{3em}
+
+\noindent \textbf{Change \#122} with diff file ISSM-13524-13525.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/ElementsFromEdge.m A /issm/trunk-jpl/src/m/mesh/ElementsFromEdge.py M /issm/trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.m A /issm/trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.py A /issm/trunk-jpl/src/m/mesh/rifts/meshprocessrifts.py\\
+Export determination: 6. \\
+Rationale: NEW: Preliminary python versions of some rift functions (not useful until TriMeshProcessRifts module is converted).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#123} with diff file ISSM-13525-13526.diff: \\
+Function name: \\
+D /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test217.py A /issm/trunk-jpl/test/NightlyRun/test217.py (from /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test217.py:13497)\\
+Export determination: 6. \\
+Rationale: NEW: Working test217.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#124} with diff file ISSM-13526-13527.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/helloworld/Google Play Store App Release Tutorial.rtf\\
+Export determination: 6. \\
+Rationale: Process to release an android app on Google Play Store\\
+\vspace{3em}
+
+\noindent \textbf{Change \#125} with diff file ISSM-13527-13528.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/helloworld/HelloWorldJNI A /issm/trunk-jpl/src/android/helloworld/HelloWorldJNI/CLibHelloWorld.dll A /issm/trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.class A /issm/trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.cpp A /issm/trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.h A /issm/trunk-jpl/src/android/helloworld/HelloWorldJNI/HelloWorld.java A /issm/trunk-jpl/src/android/helloworld/HelloWorldJNI/Main.class A /issm/trunk-jpl/src/android/helloworld/HelloWorldJNI/Main.java A /issm/trunk-jpl/src/android/helloworld/HelloWorldJNI/Results.jpg\\
+Export determination: 6. \\
+Rationale: This is a simple HelloWorld that using JNI Header, this is working version on PC compiled by VisualStudio. Check out Result.jpeg image.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#126} with diff file ISSM-13528-13529.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp\\
+Export determination: 6. \\
+Rationale: BUG: reverted back to original regularization\\
+\vspace{3em}
+
+\noindent \textbf{Change \#127} with diff file ISSM-13529-13530.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test328.m M /issm/trunk-jpl/test/NightlyRun/test329.m\\
+Export determination: 6. \\
+Rationale: modified Nightlyruntest for SMB gradients\\
+\vspace{3em}
+
+\noindent \textbf{Change \#128} with diff file ISSM-13530-13531.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am A /issm/trunk-jpl/src/c/classes/AdolcEdf.h M /issm/trunk-jpl/src/c/classes/bamg/BamgGeom.cpp M /issm/trunk-jpl/src/c/classes/bamg/BamgMesh.cpp M /issm/trunk-jpl/src/c/classes/bamg/BamgOpts.cpp M /issm/trunk-jpl/src/c/classes/bamg/BamgQuadtree.cpp M /issm/trunk-jpl/src/c/classes/bamg/BamgVertex.cpp M /issm/trunk-jpl/src/c/classes/bamg/Geometry.cpp M /issm/trunk-jpl/src/c/classes/bamg/ListofIntersectionTriangles.cpp M /issm/trunk-jpl/src/c/classes/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/classes/bamg/SetOfE4.cpp M /issm/trunk-jpl/src/c/classes/bamg/Triangle.cpp M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp M /issm/trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp M /issm/trunk-jpl/src/c/classes/kriging/Observation.cpp M /issm/trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp M /issm/trunk-jpl/src/c/classes/kriging/Quadtree.cpp M /issm/trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp D /issm/trunk-jpl/src/c/classes/objects.h M /issm/trunk-jpl/src/c/include/macros.h M /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp M /issm/trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp D /issm/trunk-jpl/src/c/shared/Numerics/adolc\_edf.h A /issm/trunk-jpl/src/c/solutions/EnvironmentInit.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp M /issm/trunk-jpl/src/c/solutions/kriging.cpp M /issm/trunk-jpl/src/c/solutions/solutions.h\\
+Export determination: 6. \\
+Rationale: CHG and NEW: macros.h: changed name of ISSMBOOT and ISSMEND macros to IssmBoot and IssmEnd. AdolcEdf: moved adolc\_edf to src/c/classes and renamed it AdolcEdf. Updated all headers and Makefile.am accordingly. Noticed dual existence of objects.h in src/c/classes and src/c/classes/objects! Deleted first one and fixed references accordingly in bamg and kriging. Created new EnvironmentInit routine to initialize Petsc and MPI. Updated issm.cpp and kriging.cpp accordingly.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#129} with diff file ISSM-13531-13532.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/include/macros.h M /issm/trunk-jpl/src/c/solutions/issm.cpp M /issm/trunk-jpl/src/c/solutions/kriging.cpp\\
+Export determination: 6. \\
+Rationale: CHG: the IssmBoot and IssmEnd have nothing to do with ISSM booting and finializing, but more with exception trapping. Renamed them accordingly.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#130} with diff file ISSM-13532-13533.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/EnvironmentInit.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp\\
+Export determination: 6. \\
+Rationale: CHG: missing Config.h, which created a problem during issm initialization\\
+\vspace{3em}
+
+\noindent \textbf{Change \#131} with diff file ISSM-13533-13534.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/EnvironmentInit.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed petsc initialization (needed to include config.h)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#132} with diff file ISSM-13534-13535.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h M /issm/trunk-jpl/src/c/Makefile.am A /issm/trunk-jpl/src/c/classes/objects/Profiler.cpp A /issm/trunk-jpl/src/c/classes/objects/Profiler.h M /issm/trunk-jpl/src/c/classes/objects/objects.h M /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp M /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp A /issm/trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp M /issm/trunk-jpl/src/c/solutions/EnvironmentInit.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp M /issm/trunk-jpl/src/c/solutions/kriging.cpp M /issm/trunk-jpl/src/c/solutions/solutions.h M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m A /issm/trunk-jpl/src/m/enum/ProfilerEnum.m A /issm/trunk-jpl/src/m/enum/SurfaceforcingsHrefEnum.m A /issm/trunk-jpl/src/m/enum/SurfaceforcingsSmbrefEnum.m\\
+Export determination: 6. \\
+Rationale: NEW and CHG: added new enums in src/m/enum. Please run source Synchronize.sh when adding new enums in EnumDefinitions.h new Profiler object that stores unlimited number of tags. easier to handle time profiling anywhere in the code. debugged EnvironmentInit, which was duplicating external symbols. new EnvironmentFinalize, to simplify finalization of environment variables like Petsc and MPI. simplified issm.cpp accordingly with new Profiler capabilitlie.s\\
+\vspace{3em}
+
+\noindent \textbf{Change \#133} with diff file ISSM-13535-13536.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/NightlyRun/ad\_maxalloc.m\\
+Export determination: 6. \\
+Rationale: NEW: test maximum allocation in fov\_forward\\
+\vspace{3em}
+
+\noindent \textbf{Change \#134} with diff file ISSM-13536-13537.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/c/shared/Sys\\
+Export determination: 6. \\
+Rationale: CHG: Not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#135} with diff file ISSM-13537-13538.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: Sys directory not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#136} with diff file ISSM-13538-13539.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/shared.h\\
+Export determination: 6. \\
+Rationale: CHG: Sys directory not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#137} with diff file ISSM-13539-13540.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp M /issm/trunk-jpl/src/c/classes/objects/Profiler.cpp M /issm/trunk-jpl/src/c/classes/objects/Profiler.h D /issm/trunk-jpl/src/c/modules/Dakotax/DakotaFree.cpp D /issm/trunk-jpl/src/c/modules/Dakotax/DakotaMPI\_Bcast.cpp D /issm/trunk-jpl/src/c/modules/Dakotax/Dakotax.cpp M /issm/trunk-jpl/src/c/modules/Dakotax/Dakotax.h D /issm/trunk-jpl/src/c/modules/Dakotax/DescriptorIndex.cpp D /issm/trunk-jpl/src/c/modules/Dakotax/SpawnCore.cpp D /issm/trunk-jpl/src/c/modules/Dakotax/SpawnCoreParallel.cpp M /issm/trunk-jpl/src/c/shared/String/sharedstring.h M /issm/trunk-jpl/src/c/shared/shared.h A /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp A /issm/trunk-jpl/src/c/solutions/dakota\_core.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp M /issm/trunk-jpl/src/c/solutions/solutions.h\\
+Export determination: 6. \\
+Rationale: CHG: simplified profiler further. moved Dakotax to solution/dakota\_core and cleanep up the modules/Dakotax code a lot. also took care of reactivating sharedstring and DescriptorIndex.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#138} with diff file ISSM-13540-13541.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/python/install-2.7.3-macosx-lion.sh M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/objects/Profiler.cpp M /issm/trunk-jpl/src/c/classes/objects/Profiler.h D /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp D /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.h M /issm/trunk-jpl/src/c/modules/modules.h M /issm/trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp A /issm/trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp A /issm/trunk-jpl/src/c/solutions/ad\_core.cpp (from /issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp:13530) M /issm/trunk-jpl/src/c/solutions/control\_core.cpp M /issm/trunk-jpl/src/c/solutions/controltao\_core.cpp M /issm/trunk-jpl/src/c/solutions/dakota\_core.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp M /issm/trunk-jpl/src/c/solutions/solutions.h\\
+Export determination: 6. \\
+Rationale: CHG: cleanup issm.cpp. Worked on homogeneizing solutioncore returned by CorePointerFromSolutionEnum. Because we have wrappers (dakota, control), created new PureCorePointerFromSolutionEnum, which only deals with analyses, not wrappers. This new PureCorePointerFromSolutionEnum is called in control\_core, controltao\_core. Also, CorePointerFromSolutionEnum can take in a nodakota flag, to allow for return of all solution types except dakota itself. This is called in dakota\_core. Also move the AutodiffDriversx to ad\_core.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#139} with diff file ISSM-13541-13542.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/c/modules/AutodiffDriversx\\
+Export determination: 6. \\
+Rationale: CHG: not needed anymore, moved to solutions\\
+\vspace{3em}
+
+\noindent \textbf{Change \#140} with diff file ISSM-13542-13543.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp\\
+Export determination: 6. \\
+Rationale: CHG: transferred AD statements to CreateParametersAutodiff, namely the creation of an AdolcEdf parameter to holds solver pointers.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#141} with diff file ISSM-13543-13544.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/ad\_core.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moved tape statistics printing for AD mode to ad\_core from issm.cpp\\
+\vspace{3em}
+
+\noindent \textbf{Change \#142} with diff file ISSM-13544-13545.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/python/install-2.7.3-macosx-lion.sh\\
+Export determination: 6. \\
+Rationale: BUG: revert back to original\\
+\vspace{3em}
+
+\noindent \textbf{Change \#143} with diff file ISSM-13545-13546.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/ad\_core.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp M /issm/trunk-jpl/src/c/solutions/solutions.h\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#144} with diff file ISSM-13546-13547.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/solutions/ad\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: shielding CreateParametersAutodiff with HAVE\_ADOLC macro. Some cosmetics for ad\_core (thanks Mathieu :)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#145} with diff file ISSM-13547-13548.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp D /issm/trunk-jpl/src/c/modules/Dakotax M /issm/trunk-jpl/src/c/modules/modules.h\\
+Export determination: 6. \\
+Rationale: CHG: Dakotax.h does not exist anymore. Updated DakotaPlugin and modules.h accordingly\\
+\vspace{3em}
+
+\noindent \textbf{Change \#146} with diff file ISSM-13548-13549.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp\\
+Export determination: 6. \\
+Rationale: CHG: adding folds\\
+\vspace{3em}
+
+\noindent \textbf{Change \#147} with diff file ISSM-13549-13550.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h A /issm/trunk-jpl/src/c/io/Disk/WriteLockFile.cpp (from /issm/trunk-jpl/src/c/solutions/WriteLockFile.cpp:13532) M /issm/trunk-jpl/src/c/io/Disk/diskio.h M /issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp M /issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp D /issm/trunk-jpl/src/c/solutions/WriteLockFile.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp M /issm/trunk-jpl/src/m/enum/EnumDefinitions.py A /issm/trunk-jpl/src/m/enum/LockFileNameEnum.m M /issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m M /issm/trunk-jpl/src/m/enum/OutputfilenameEnum.m\\
+Export determination: 6. \\
+Rationale: CHG: FemModel constructors and destructors now take care of writing the lock file, and closing the output file descriptor.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#148} with diff file ISSM-13550-13551.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed bug. Solver pointers need to be allocated even when autodiff is not on\\
+\vspace{3em}
+
+\noindent \textbf{Change \#149} with diff file ISSM-13551-13552.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/adolc/install-update-dev.sh\\
+Export determination: 6. \\
+Rationale: CHG: adapt to changes in git repo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#150} with diff file ISSM-13552-13553.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive3020.nc M /issm/trunk-jpl/test/NightlyRun/test3015.m\\
+Export determination: 6. \\
+Rationale: CHG: tighter tolerances, and update on larsen\\
+\vspace{3em}
+
+\noindent \textbf{Change \#151} with diff file ISSM-13553-13554.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/solutions/issm.cpp\\
+Export determination: 6. \\
+Rationale: CHG: issm.cpp now runs the following methods: Constructor, Solve, and delete. Everything such as solution cores, configuration, etc ... has been folded in these methods.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#152} with diff file ISSM-13554-13555.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/issm.h A /issm/trunk-jpl/src/c/solutions/PrintBanner.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp M /issm/trunk-jpl/src/c/solutions/kriging.cpp M /issm/trunk-jpl/src/c/solutions/solutions.h\\
+Export determination: 6. \\
+Rationale: CHG: - profiling is now done entirely inside the FemModel methods - moved globals into issm.h - PrintBanner a new routine to dump ISSM specific information.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#153} with diff file ISSM-13555-13556.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp D /issm/trunk-jpl/src/c/toolkits/mpi/patches/MPI\_Boundariesfromrange.cpp D /issm/trunk-jpl/src/c/toolkits/mpi/patches/MPI\_Lowerrow.cpp D /issm/trunk-jpl/src/c/toolkits/mpi/patches/MPI\_Upperrow.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h\\
+Export determination: 6. \\
+Rationale: CHG: MPI\_Upperrow, MPI\_Boundariesfromrange and MPI\_Upperrow not needed anymore. This is dead code.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#154} with diff file ISSM-13556-13557.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am D /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatPartition.cpp\\
+Export determination: 6. \\
+Rationale: CHG: MatPartition not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#155} with diff file ISSM-13557-13558.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am D /issm/trunk-jpl/src/c/toolkits/petsc/patches/ISFree.cpp\\
+Export determination: 6. \\
+Rationale: CHG: ISFree not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#156} with diff file ISSM-13558-13559.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp\\
+Export determination: 6. \\
+Rationale: CHG: reverted back to previous revision\\
+\vspace{3em}
+
+\noindent \textbf{Change \#157} with diff file ISSM-13559-13560.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h\\
+Export determination: 6. \\
+Rationale: CHG: fixed argument list to DetermineLocalSize\\
+\vspace{3em}
+
+\noindent \textbf{Change \#158} with diff file ISSM-13560-13561.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/helloworld/My First App A /issm/trunk-jpl/src/android/helloworld/My First App/.classpath A /issm/trunk-jpl/src/android/helloworld/My First App/.project A /issm/trunk-jpl/src/android/helloworld/My First App/AndroidManifest.xml A /issm/trunk-jpl/src/android/helloworld/My First App/assets A /issm/trunk-jpl/src/android/helloworld/My First App/bin A /issm/trunk-jpl/src/android/helloworld/My First App/bin/AndroidManifest.xml A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/BuildConfig.class A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/MainActivity.class A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R\$attr.class A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R\$drawable.class A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R\$id.class A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R\$layout.class A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R\$menu.class A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R\$string.class A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R\$style.class A /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes/com/example/my/first/app/R.class A /issm/trunk-jpl/src/android/helloworld/My First App/bin/jarlist.cache A /issm/trunk-jpl/src/android/helloworld/My First App/bin/res A /issm/trunk-jpl/src/android/helloworld/My First App/gen A /issm/trunk-jpl/src/android/helloworld/My First App/gen/com A /issm/trunk-jpl/src/android/helloworld/My First App/gen/com/example A /issm/trunk-jpl/src/android/helloworld/My First App/gen/com/example/my A /issm/trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first A /issm/trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app A /issm/trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app/BuildConfig.java A /issm/trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app/R.java A /issm/trunk-jpl/src/android/helloworld/My First App/ic\_launcher-web.png A /issm/trunk-jpl/src/android/helloworld/My First App/libs A /issm/trunk-jpl/src/android/helloworld/My First App/libs/android-support-v4.jar A /issm/trunk-jpl/src/android/helloworld/My First App/proguard-project.txt A /issm/trunk-jpl/src/android/helloworld/My First App/project.properties A /issm/trunk-jpl/src/android/helloworld/My First App/res A /issm/trunk-jpl/src/android/helloworld/My First App/res/drawable-hdpi A /issm/trunk-jpl/src/android/helloworld/My First App/res/drawable-hdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/My First App/res/drawable-hdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/My First App/res/drawable-ldpi A /issm/trunk-jpl/src/android/helloworld/My First App/res/drawable-ldpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/My First App/res/drawable-mdpi A /issm/trunk-jpl/src/android/helloworld/My First App/res/drawable-mdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/My First App/res/drawable-mdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/My First App/res/drawable-xhdpi A /issm/trunk-jpl/src/android/helloworld/My First App/res/drawable-xhdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/My First App/res/drawable-xhdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/My First App/res/layout A /issm/trunk-jpl/src/android/helloworld/My First App/res/layout/activity\_main.xml A /issm/trunk-jpl/src/android/helloworld/My First App/res/menu A /issm/trunk-jpl/src/android/helloworld/My First App/res/menu/activity\_main.xml A /issm/trunk-jpl/src/android/helloworld/My First App/res/values A /issm/trunk-jpl/src/android/helloworld/My First App/res/values/strings.xml A /issm/trunk-jpl/src/android/helloworld/My First App/res/values/styles.xml A /issm/trunk-jpl/src/android/helloworld/My First App/res/values-v11 A /issm/trunk-jpl/src/android/helloworld/My First App/res/values-v11/styles.xml A /issm/trunk-jpl/src/android/helloworld/My First App/res/values-v14 A /issm/trunk-jpl/src/android/helloworld/My First App/res/values-v14/styles.xml A /issm/trunk-jpl/src/android/helloworld/My First App/src A /issm/trunk-jpl/src/android/helloworld/My First App/src/com A /issm/trunk-jpl/src/android/helloworld/My First App/src/com/example A /issm/trunk-jpl/src/android/helloworld/My First App/src/com/example/my A /issm/trunk-jpl/src/android/helloworld/My First App/src/com/example/my/first A /issm/trunk-jpl/src/android/helloworld/My First App/src/com/example/my/first/app A /issm/trunk-jpl/src/android/helloworld/My First App/src/com/example/my/first/app/MainActivity.java\\
+Export determination: 6. \\
+Rationale: new test app\\
+\vspace{3em}
+
+\noindent \textbf{Change \#159} with diff file ISSM-13561-13562.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/helloworld/Square A /issm/trunk-jpl/src/android/helloworld/Square/.classpath A /issm/trunk-jpl/src/android/helloworld/Square/.project A /issm/trunk-jpl/src/android/helloworld/Square/.settings A /issm/trunk-jpl/src/android/helloworld/Square/.settings/org.eclipse.jdt.core.prefs A /issm/trunk-jpl/src/android/helloworld/Square/AndroidManifest.xml A /issm/trunk-jpl/src/android/helloworld/Square/assets A /issm/trunk-jpl/src/android/helloworld/Square/bin A /issm/trunk-jpl/src/android/helloworld/Square/bin/AndroidManifest.xml A /issm/trunk-jpl/src/android/helloworld/Square/bin/Square.apk A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/BuildConfig.class A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/Main.class A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R\$attr.class A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R\$drawable.class A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R\$id.class A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R\$layout.class A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R\$menu.class A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R\$string.class A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R\$style.class A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/R.class A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/SquareNumber.class A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes/com/example/square/SquareNumber.cpp A /issm/trunk-jpl/src/android/helloworld/Square/bin/classes.dex A /issm/trunk-jpl/src/android/helloworld/Square/bin/jarlist.cache A /issm/trunk-jpl/src/android/helloworld/Square/bin/res A /issm/trunk-jpl/src/android/helloworld/Square/bin/res/drawable-hdpi A /issm/trunk-jpl/src/android/helloworld/Square/bin/res/drawable-hdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/Square/bin/res/drawable-hdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/Square/bin/res/drawable-ldpi A /issm/trunk-jpl/src/android/helloworld/Square/bin/res/drawable-ldpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/Square/bin/res/drawable-mdpi A /issm/trunk-jpl/src/android/helloworld/Square/bin/res/drawable-mdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/Square/bin/res/drawable-mdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/Square/bin/res/drawable-xhdpi A /issm/trunk-jpl/src/android/helloworld/Square/bin/res/drawable-xhdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/Square/bin/res/drawable-xhdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/Square/bin/resources.ap\_ A /issm/trunk-jpl/src/android/helloworld/Square/gen A /issm/trunk-jpl/src/android/helloworld/Square/gen/com A /issm/trunk-jpl/src/android/helloworld/Square/gen/com/example A /issm/trunk-jpl/src/android/helloworld/Square/gen/com/example/square A /issm/trunk-jpl/src/android/helloworld/Square/gen/com/example/square/BuildConfig.java A /issm/trunk-jpl/src/android/helloworld/Square/gen/com/example/square/R.java A /issm/trunk-jpl/src/android/helloworld/Square/ic\_launcher-web.png A /issm/trunk-jpl/src/android/helloworld/Square/jni A /issm/trunk-jpl/src/android/helloworld/Square/jni/Android.mk A /issm/trunk-jpl/src/android/helloworld/Square/jni/square.h A /issm/trunk-jpl/src/android/helloworld/Square/libs A /issm/trunk-jpl/src/android/helloworld/Square/libs/android-support-v4.jar A /issm/trunk-jpl/src/android/helloworld/Square/proguard-project.txt A /issm/trunk-jpl/src/android/helloworld/Square/project.properties A /issm/trunk-jpl/src/android/helloworld/Square/res A /issm/trunk-jpl/src/android/helloworld/Square/res/drawable-hdpi A /issm/trunk-jpl/src/android/helloworld/Square/res/drawable-hdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/Square/res/drawable-hdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/Square/res/drawable-ldpi A /issm/trunk-jpl/src/android/helloworld/Square/res/drawable-ldpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/Square/res/drawable-mdpi A /issm/trunk-jpl/src/android/helloworld/Square/res/drawable-mdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/Square/res/drawable-mdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/Square/res/drawable-xhdpi A /issm/trunk-jpl/src/android/helloworld/Square/res/drawable-xhdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/Square/res/drawable-xhdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/Square/res/layout A /issm/trunk-jpl/src/android/helloworld/Square/res/layout/activity\_main.xml A /issm/trunk-jpl/src/android/helloworld/Square/res/menu A /issm/trunk-jpl/src/android/helloworld/Square/res/menu/activity\_main.xml A /issm/trunk-jpl/src/android/helloworld/Square/res/values A /issm/trunk-jpl/src/android/helloworld/Square/res/values/strings.xml A /issm/trunk-jpl/src/android/helloworld/Square/res/values/styles.xml A /issm/trunk-jpl/src/android/helloworld/Square/res/values-v11 A /issm/trunk-jpl/src/android/helloworld/Square/res/values-v11/styles.xml A /issm/trunk-jpl/src/android/helloworld/Square/res/values-v14 A /issm/trunk-jpl/src/android/helloworld/Square/res/values-v14/styles.xml A /issm/trunk-jpl/src/android/helloworld/Square/src A /issm/trunk-jpl/src/android/helloworld/Square/src/com A /issm/trunk-jpl/src/android/helloworld/Square/src/com/example A /issm/trunk-jpl/src/android/helloworld/Square/src/com/example/square A /issm/trunk-jpl/src/android/helloworld/Square/src/com/example/square/Main.java A /issm/trunk-jpl/src/android/helloworld/Square/src/com/example/square/Square.class A /issm/trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.class A /issm/trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.cpp A /issm/trunk-jpl/src/android/helloworld/Square/src/com/example/square/SquareNumber.java\\
+Export determination: 6. \\
+Rationale: Testing on how to connect c++ librabries with java using jni. UI haven't been created\\
+\vspace{3em}
+
+\noindent \textbf{Change \#160} with diff file ISSM-13562-13563.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/radarpower.m\\
+Export determination: 6. \\
+Rationale: BUG: fixed image name\\
+\vspace{3em}
+
+\noindent \textbf{Change \#161} with diff file ISSM-13563-13564.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.m\\
+Export determination: 6. \\
+Rationale: CHG: number of ticks in log colorbars should not be imposed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#162} with diff file ISSM-13564-13565.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.m\\
+Export determination: 6. \\
+Rationale: CHG: cbYTickLabel option should display exactly what is requested\\
+\vspace{3em}
+
+\noindent \textbf{Change \#163} with diff file ISSM-13565-13566.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_overlay.m\\
+Export determination: 6. \\
+Rationale: CHG: added default xlim and ylim so that lat long do not go beyond the figure\\
+\vspace{3em}
+
+\noindent \textbf{Change \#164} with diff file ISSM-13566-13567.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/parameterization/setflowequation.py\\
+Export determination: 6. \\
+Rationale: FIX: Fixed setflowequation for test219.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#165} with diff file ISSM-13567-13568.diff: \\
+Function name: \\
+D /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test219.py M /issm/trunk-jpl/test/NightlyRun/test217.py A /issm/trunk-jpl/test/NightlyRun/test219.py (from /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test219.py:13497)\\
+Export determination: 6. \\
+Rationale: NEW: Working test219.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#166} with diff file ISSM-13568-13569.diff: \\
+Function name: \\
+D /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test220.py M /issm/trunk-jpl/test/NightlyRun/test219.py A /issm/trunk-jpl/test/NightlyRun/test220.py (from /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test220.py:13497)\\
+Export determination: 6. \\
+Rationale: NEW: Working test220.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#167} with diff file ISSM-13569-13570.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/shared/Sorting/binary\_search.cpp M /issm/trunk-jpl/src/c/shared/Sorting/sorting.h\\
+Export determination: 6. \\
+Rationale: NEW: implemented binary\_search for double sorted array, to speed up the GetTimeInput routine in the Transient Forcings. Indeed, to find the transient forcing input corresponding to a certain time, a forward search was implemented, which would exponentially slow down the transient runs with increasing number of time steps. This is a first attempt at increasing the speed.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#168} with diff file ISSM-13570-13571.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/numpy/install-linux64.sh\\
+Export determination: 6. \\
+Rationale: CHG: do not download latest numpy by 1.7 only for now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#169} with diff file ISSM-13571-13572.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp\\
+Export determination: 6. \\
+Rationale: BUG: PETSc options ending in 'n' were cut off and not recognized\\
+\vspace{3em}
+
+\noindent \textbf{Change \#170} with diff file ISSM-13572-13573.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Sorting/binary\_search.cpp\\
+Export determination: 6. \\
+Rationale: BUG: changed offset==-1 to offset=-1 + some cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#171} with diff file ISSM-13573-13574.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/Profiler.cpp\\
+Export determination: 6. \\
+Rationale: CHG: fixed destructor for memory leaks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#172} with diff file ISSM-13574-13575.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp\\
+Export determination: 6. \\
+Rationale: BUG: rewrote binary\_search for double, there was a segfault in the previous implementation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#173} with diff file ISSM-13575-13576.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Sorting/binary\_search.cpp\\
+Export determination: 6. \\
+Rationale: BUG: rewrote binary\_search for double, there was a segfault in the previous implementation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#174} with diff file ISSM-13576-13577.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: vector\_type is always broadcasted so it needs to be defined anyway, also, rewrote error message\\
+\vspace{3em}
+
+\noindent \textbf{Change \#175} with diff file ISSM-13577-13578.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/shared/Sorting/binary\_search.cpp\\
+Export determination: 6. \\
+Rationale: CHG: even simpler binary\_search for doubles: return segment number\\
+\vspace{3em}
+
+\noindent \textbf{Change \#176} with diff file ISSM-13578-13579.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test111.m M /issm/trunk-jpl/test/NightlyRun/test111.py\\
+Export determination: 6. \\
+Rationale: CHG: tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#177} with diff file ISSM-13579-13580.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Sorting/binary\_search.cpp M /issm/trunk-jpl/src/c/shared/Sorting/sorting.h\\
+Export determination: 6. \\
+Rationale: CHG: had to template the binary\_search for doubles, as AD mode compile was not working.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#178} with diff file ISSM-13580-13581.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/NightlyRun/test221.py A /issm/trunk-jpl/test/NightlyRun/test222.py M /issm/trunk-jpl/test/NightlyRun/test223.m A /issm/trunk-jpl/test/NightlyRun/test223.py M /issm/trunk-jpl/test/NightlyRun/test224.m A /issm/trunk-jpl/test/NightlyRun/test224.py M /issm/trunk-jpl/test/NightlyRun/test225.m A /issm/trunk-jpl/test/NightlyRun/test225.py M /issm/trunk-jpl/test/NightlyRun/test226.m A /issm/trunk-jpl/test/NightlyRun/test226.py M /issm/trunk-jpl/test/NightlyRun/test227.m A /issm/trunk-jpl/test/NightlyRun/test227.py M /issm/trunk-jpl/test/NightlyRun/test228.m A /issm/trunk-jpl/test/NightlyRun/test228.py M /issm/trunk-jpl/test/NightlyRun/test229.m A /issm/trunk-jpl/test/NightlyRun/test229.py\\
+Export determination: 6. \\
+Rationale: NEW: Working test221.py through test229.py (along with cosmetic matlab changes).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#179} with diff file ISSM-13581-13582.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/NightlyRun/python\_skipped\_tests.txt M /issm/trunk-jpl/test/NightlyRun/test101.m M /issm/trunk-jpl/test/NightlyRun/test102.m M /issm/trunk-jpl/test/NightlyRun/test103.m M /issm/trunk-jpl/test/NightlyRun/test104.m M /issm/trunk-jpl/test/NightlyRun/test105.m M /issm/trunk-jpl/test/NightlyRun/test106.m M /issm/trunk-jpl/test/NightlyRun/test107.m M /issm/trunk-jpl/test/NightlyRun/test108.m M /issm/trunk-jpl/test/NightlyRun/test109.m M /issm/trunk-jpl/test/NightlyRun/test110.m M /issm/trunk-jpl/test/NightlyRun/test111.m M /issm/trunk-jpl/test/NightlyRun/test112.m M /issm/trunk-jpl/test/NightlyRun/test113.m M /issm/trunk-jpl/test/NightlyRun/test114.m M /issm/trunk-jpl/test/NightlyRun/test115.m M /issm/trunk-jpl/test/NightlyRun/test116.m M /issm/trunk-jpl/test/NightlyRun/test117.m M /issm/trunk-jpl/test/NightlyRun/test118.m M /issm/trunk-jpl/test/NightlyRun/test119.m M /issm/trunk-jpl/test/NightlyRun/test120.m M /issm/trunk-jpl/test/NightlyRun/test121.m M /issm/trunk-jpl/test/NightlyRun/test122.m M /issm/trunk-jpl/test/NightlyRun/test122.py M /issm/trunk-jpl/test/NightlyRun/test201.m M /issm/trunk-jpl/test/NightlyRun/test202.m M /issm/trunk-jpl/test/NightlyRun/test203.m M /issm/trunk-jpl/test/NightlyRun/test204.m M /issm/trunk-jpl/test/NightlyRun/test205.m M /issm/trunk-jpl/test/NightlyRun/test206.m M /issm/trunk-jpl/test/NightlyRun/test207.m M /issm/trunk-jpl/test/NightlyRun/test208.m M /issm/trunk-jpl/test/NightlyRun/test209.m M /issm/trunk-jpl/test/NightlyRun/test209.py M /issm/trunk-jpl/test/NightlyRun/test210.m M /issm/trunk-jpl/test/NightlyRun/test211.m M /issm/trunk-jpl/test/NightlyRun/test212.m M /issm/trunk-jpl/test/NightlyRun/test213.m M /issm/trunk-jpl/test/NightlyRun/test214.m M /issm/trunk-jpl/test/NightlyRun/test215.m M /issm/trunk-jpl/test/NightlyRun/test216.m M /issm/trunk-jpl/test/NightlyRun/test217.m M /issm/trunk-jpl/test/NightlyRun/test218.m M /issm/trunk-jpl/test/NightlyRun/test219.m M /issm/trunk-jpl/test/NightlyRun/test220.m M /issm/trunk-jpl/test/NightlyRun/test221.m M /issm/trunk-jpl/test/NightlyRun/test222.m M /issm/trunk-jpl/test/NightlyRun/test223.m M /issm/trunk-jpl/test/NightlyRun/test224.m M /issm/trunk-jpl/test/NightlyRun/test225.m M /issm/trunk-jpl/test/NightlyRun/test226.m M /issm/trunk-jpl/test/NightlyRun/test227.m M /issm/trunk-jpl/test/NightlyRun/test228.m M /issm/trunk-jpl/test/NightlyRun/test229.m M /issm/trunk-jpl/test/NightlyRun/test514.m\\
+Export determination: 6. \\
+Rationale: CHG: Functions should have argument lists (and other cosmetics).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#180} with diff file ISSM-13582-13583.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test230.m A /issm/trunk-jpl/test/NightlyRun/test230.py M /issm/trunk-jpl/test/NightlyRun/test231.m A /issm/trunk-jpl/test/NightlyRun/test231.py M /issm/trunk-jpl/test/NightlyRun/test232.m A /issm/trunk-jpl/test/NightlyRun/test232.py M /issm/trunk-jpl/test/NightlyRun/test233.m A /issm/trunk-jpl/test/NightlyRun/test233.py M /issm/trunk-jpl/test/NightlyRun/test234.m M /issm/trunk-jpl/test/NightlyRun/test235.m M /issm/trunk-jpl/test/NightlyRun/test236.m M /issm/trunk-jpl/test/NightlyRun/test237.m\\
+Export determination: 6. \\
+Rationale: NEW: Working test230.py through test233.py (along with cosmetic matlab changes).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#181} with diff file ISSM-13584-13585.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/solver.m\\
+Export determination: 6. \\
+Rationale: BUG: Changed isscalar to isnumeric\\
+\vspace{3em}
+
+\noindent \textbf{Change \#182} with diff file ISSM-13585-13586.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/readline/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: fixed bug in comment\\
+\vspace{3em}
+
+\noindent \textbf{Change \#183} with diff file ISSM-13586-13587.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/modules/BamgMesher/BamgMesher.h M /issm/trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp M /issm/trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h\\
+Export determination: 6. \\
+Rationale: CHG: rewriting TriMeshProcessRifts so that it looks more like a module\\
+\vspace{3em}
+
+\noindent \textbf{Change \#184} with diff file ISSM-13587-13588.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/helloworld/OpenGLES20 A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/.classpath A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/.project A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/AndroidManifest.xml A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/assets A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/AndroidManifest.xml A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/OpenGLES20.apk A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20 A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/BuildConfig.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MainActivity.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MyGL20Renderer.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/MyGLSurfaceView.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R\$attr.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R\$drawable.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R\$id.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R\$layout.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R\$menu.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R\$string.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R\$style.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/R.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/Square.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes/com/example/opengles20/Triangle.class A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes.dex A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/res A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-hdpi A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-hdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-hdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-ldpi A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-ldpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-mdpi A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-mdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-mdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-xhdpi A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-xhdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/res/drawable-xhdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/resources.ap\_ A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/gen A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/gen/com A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/gen/com/example A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/gen/com/example/opengles20 A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/gen/com/example/opengles20/BuildConfig.java A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/gen/com/example/opengles20/R.java A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/ic\_launcher-web.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/libs A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/libs/android-support-v4.jar A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/proguard-project.txt A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/project.properties A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-hdpi A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-hdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-hdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-ldpi A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-ldpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-mdpi A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-mdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-mdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-xhdpi A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-xhdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/drawable-xhdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/layout A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/layout/activity\_main.xml A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/menu A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/menu/activity\_main.xml A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/values A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/values/strings.xml A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/values/styles.xml A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/values-v11 A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/values-v11/styles.xml A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/values-v14 A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/res/values-v14/styles.xml A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/src A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/src/com A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20 A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/MainActivity.java A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/MyGL20Renderer.java A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/Square.java A /issm/trunk-jpl/src/android/helloworld/OpenGLES20/src/com/example/opengles20/Triangle.java\\
+Export determination: 6. \\
+Rationale: Android SDK using OpenGL to draw a triangle\\
+\vspace{3em}
+
+\noindent \textbf{Change \#185} with diff file ISSM-13588-13589.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp\\
+Export determination: 6. \\
+Rationale: CHG: creating x layer (local for now)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#186} with diff file ISSM-13589-13590.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/classes/IoModel.cpp A /issm/trunk-jpl/src/c/classes/IssmComm.cpp A /issm/trunk-jpl/src/c/classes/IssmComm.h M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/include/globals.h M /issm/trunk-jpl/src/c/include/types.h M /issm/trunk-jpl/src/c/solutions/EnvironmentInit.cpp D /issm/trunk-jpl/src/c/solutions/PrintBanner.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp M /issm/trunk-jpl/src/c/solutions/solutions.h\\
+Export determination: 6. \\
+Rationale: CHG: starting transition to model runs where the MPI\_Comm is independent of MPI\_COMM\_WORLD. To do so, we design a static class IssmComm, which encapsulate the communicator for the FemModel. FemModel can set its communicator using a SetStaticComm method. Adapted EnvironmentInit to return the comm accordingly. Also put PrintBanner inside the FemModel constructor, as it needs to know about the communicator to print the banner.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#187} with diff file ISSM-13590-13591.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ThermalConstraintsState.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp M /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp M /issm/trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp M /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp M /issm/trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp M /issm/trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp M /issm/trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp M /issm/trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp M /issm/trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.cpp M /issm/trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.cpp M /issm/trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.cpp M /issm/trunk-jpl/src/c/modules/MaxVelx/MaxVelx.cpp M /issm/trunk-jpl/src/c/modules/MaxVxx/MaxVxx.cpp M /issm/trunk-jpl/src/c/modules/MaxVyx/MaxVyx.cpp M /issm/trunk-jpl/src/c/modules/MaxVzx/MaxVzx.cpp M /issm/trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp M /issm/trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp M /issm/trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp M /issm/trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp M /issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp M /issm/trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp M /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp M /issm/trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/ThicknessAbsGradientx/ThicknessAbsGradientx.cpp M /issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp M /issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp M /issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp M /issm/trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.cpp M /issm/trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: replaced instances of MPI\_COMM\_WORLD in modules with IssmComm::GetComm()\\
+\vspace{3em}
+
+\noindent \textbf{Change \#188} with diff file ISSM-13591-13592.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/Solverx/DofTypesToIndexSet.cpp M /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more changes from MPI\_COMM\_WORLD to IssmComm::GetComm()\\
+\vspace{3em}
+
+\noindent \textbf{Change \#189} with diff file ISSM-13592-13593.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp M /issm/trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp M /issm/trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp M /issm/trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: starting transition from extern int my\_rank to my\_rank2 where my\_rank2 is recovered with IssmComm:GetRank()\\
+\vspace{3em}
+
+\noindent \textbf{Change \#190} with diff file ISSM-13593-13594.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp M /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more changes to switch from my\_rank and num\_procs to IssmComm::GetSize and IssmComm::GetRank\\
+\vspace{3em}
+
+\noindent \textbf{Change \#191} with diff file ISSM-13594-13595.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Elements.cpp M /issm/trunk-jpl/src/c/Container/Nodes.cpp M /issm/trunk-jpl/src/c/Container/Vertices.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more changes to switch from my\_rank and num\_procs to IssmComm::GetSize and IssmComm::GetRank\\
+\vspace{3em}
+
+\noindent \textbf{Change \#192} with diff file ISSM-13595-13596.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h\\
+Export determination: 6. \\
+Rationale: CHG: more changes to switch from my\_rank and num\_procs to IssmComm::GetSize and IssmComm::GetRank\\
+\vspace{3em}
+
+\noindent \textbf{Change \#193} with diff file ISSM-13596-13597.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h\\
+Export determination: 6. \\
+Rationale: CHG: fixed segfault in NewMat call\\
+\vspace{3em}
+
+\noindent \textbf{Change \#194} with diff file ISSM-13597-13598.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am D /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatInvert.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h\\
+Export determination: 6. \\
+Rationale: CHG: MatInvert not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#195} with diff file ISSM-13598-13599.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp M /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp M /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp M /issm/trunk-jpl/src/c/toolkits/plapack/patches/plapackpatches.h\\
+Export determination: 6. \\
+Rationale: CHG: more changes to switch from my\_rank and num\_procs to IssmComm::GetSize and IssmComm::GetRank\\
+\vspace{3em}
+
+\noindent \textbf{Change \#196} with diff file ISSM-13599-13600.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.cpp M /issm/trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp M /issm/trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/SerialToVec.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecPartition.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecTranspose.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h\\
+Export determination: 6. \\
+Rationale: CHG: more changes to switch from my\_rank and num\_procs to IssmComm::GetSize and IssmComm::GetRank\\
+\vspace{3em}
+
+\noindent \textbf{Change \#197} with diff file ISSM-13600-13601.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am D /issm/trunk-jpl/src/c/toolkits/petsc/patches/SerialToVec.cpp D /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecPartition.cpp D /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecTranspose.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h\\
+Export determination: 6. \\
+Rationale: CHG: getting rid of deprecated capabilities\\
+\vspace{3em}
+
+\noindent \textbf{Change \#198} with diff file ISSM-13601-13602.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more changes to switch from my\_rank and num\_procs to IssmComm::GetSize and IssmComm::GetRank\\
+\vspace{3em}
+
+\noindent \textbf{Change \#199} with diff file ISSM-13602-13603.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more changes to switch from my\_rank and num\_procs to IssmComm::GetSize and IssmComm::GetRank\\
+\vspace{3em}
+
+\noindent \textbf{Change \#200} with diff file ISSM-13603-13604.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more changes to switch from my\_rank and num\_procs to IssmComm::GetSize and IssmComm::GetRank\\
+\vspace{3em}
+
+\noindent \textbf{Change \#201} with diff file ISSM-13604-13605.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Constraints.cpp M /issm/trunk-jpl/src/c/Container/Elements.cpp M /issm/trunk-jpl/src/c/Container/Loads.cpp M /issm/trunk-jpl/src/c/Container/Nodes.cpp M /issm/trunk-jpl/src/c/Container/Vertices.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more changes to switch from MPI\_COMM\_WORLD to IssmComm::GetComm()\\
+\vspace{3em}
+
+\noindent \textbf{Change \#202} with diff file ISSM-13605-13606.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Nodes.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more changes to switch from my\_rank and num\_procs to IssmComm::GetSize and IssmComm::GetRank\\
+\vspace{3em}
+
+\noindent \textbf{Change \#203} with diff file ISSM-13606-13607.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/io/Disk/WriteLockFile.cpp M /issm/trunk-jpl/src/c/io/Disk/pfclose.cpp M /issm/trunk-jpl/src/c/io/Disk/pfopen.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more changes to switch from my\_rank and num\_procs to IssmComm::GetSize and IssmComm::GetRank\\
+\vspace{3em}
+
+\noindent \textbf{Change \#204} with diff file ISSM-13607-13608.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/Patch.cpp M /issm/trunk-jpl/src/c/classes/objects/IndependentObject.cpp M /issm/trunk-jpl/src/c/classes/objects/Profiler.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more changes to switch from my\_rank and num\_procs to IssmComm::GetSize and IssmComm::GetRank\\
+\vspace{3em}
+
+\noindent \textbf{Change \#205} with diff file ISSM-13608-13609.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/DependentObject.cpp M /issm/trunk-jpl/src/c/classes/objects/DependentObject.h M /issm/trunk-jpl/src/c/classes/objects/IndependentObject.cpp M /issm/trunk-jpl/src/c/classes/objects/IndependentObject.h M /issm/trunk-jpl/src/c/classes/objects/Node.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/DataSetParam.h M /issm/trunk-jpl/src/c/classes/objects/Vertex.cpp M /issm/trunk-jpl/src/c/solutions/controltao\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: get rid of MyRank routines in Params. Keep transitioning from extern for my\_rank and num\_procs to IssmComm static class\\
+\vspace{3em}
+
+\noindent \textbf{Change \#206} with diff file ISSM-13609-13610.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/Patch.cpp M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h M /issm/trunk-jpl/src/c/include/globals.h M /issm/trunk-jpl/src/c/io/PrintfFunction.cpp M /issm/trunk-jpl/src/c/matlab/io/PrintfFunction.cpp M /issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp M /issm/trunk-jpl/src/c/solutions/dakota\_core.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp M /issm/trunk-jpl/src/c/solutions/kriging.cpp\\
+Export determination: 6. \\
+Rationale: CHG: final transition from extern my\_rank and num\_procs to IssmComm static class object.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#207} with diff file ISSM-13610-13611.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IssmComm.cpp M /issm/trunk-jpl/src/c/include/globals.h M /issm/trunk-jpl/src/c/solutions/issm.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#208} with diff file ISSM-13611-13612.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/issm.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#209} with diff file ISSM-13612-13613.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Elements.cpp M /issm/trunk-jpl/src/c/Container/Nodes.cpp M /issm/trunk-jpl/src/c/Container/Vertices.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/IssmComm.cpp M /issm/trunk-jpl/src/c/classes/Patch.cpp M /issm/trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h M /issm/trunk-jpl/src/c/classes/objects/IndependentObject.cpp M /issm/trunk-jpl/src/c/classes/objects/Node.cpp M /issm/trunk-jpl/src/c/classes/objects/Vertex.cpp M /issm/trunk-jpl/src/c/io/Disk/WriteLockFile.cpp M /issm/trunk-jpl/src/c/io/PrintfFunction.cpp M /issm/trunk-jpl/src/c/matlab/io/PrintfFunction.cpp M /issm/trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp M /issm/trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp M /issm/trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp M /issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp M /issm/trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp M /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp M /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp M /issm/trunk-jpl/src/c/solutions/dakota\_core.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp\\
+Export determination: 6. \\
+Rationale: CHG: switched my\_rank2 to my\_rank and num\_procs2 to num\_procs\\
+\vspace{3em}
+
+\noindent \textbf{Change \#210} with diff file ISSM-13613-13614.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IssmComm.cpp M /issm/trunk-jpl/src/c/include/types.h\\
+Export determination: 6. \\
+Rationale: BUG: include types.h\\
+\vspace{3em}
+
+\noindent \textbf{Change \#211} with diff file ISSM-13614-13615.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/modules/matlab/Makefile.am\\
+Export determination: 6. \\
+Rationale: BUG: include MPI in scotch compilation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#212} with diff file ISSM-13615-13616.diff: \\
+Function name: \\
+D /issm/trunk-jpl/externalpackages/esmf/esmf\_4\_0\_0rp2\_src.tar.gz\\
+Export determination: 6. \\
+Rationale: CHG: do not commit external packages\\
+\vspace{3em}
+
+\noindent \textbf{Change \#213} with diff file ISSM-13616-13617.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#214} with diff file ISSM-13617-13618.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test236.m A /issm/trunk-jpl/test/NightlyRun/test236.py M /issm/trunk-jpl/test/NightlyRun/test237.m A /issm/trunk-jpl/test/NightlyRun/test237.py\\
+Export determination: 6. \\
+Rationale: NEW: Working test236.py and test237.py (along with cosmetic matlab changes).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#215} with diff file ISSM-13618-13619.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/interp/plugvelocities.m\\
+Export determination: 6. \\
+Rationale: CHG: missing end statement for the matlab function\\
+\vspace{3em}
+
+\noindent \textbf{Change \#216} with diff file ISSM-13619-13620.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/ProcessArguments.cpp\\
+Export determination: 6. \\
+Rationale: BUG: check number of arguments BEFORE getting them\\
+\vspace{3em}
+
+\noindent \textbf{Change \#217} with diff file ISSM-13620-13621.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp\\
+Export determination: 6. \\
+Rationale: CHG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#218} with diff file ISSM-13621-13622.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/AdjointCorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/solutions/AnalysisConfiguration.cpp M /issm/trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp M /issm/trunk-jpl/src/c/solutions/EnvironmentInit.cpp M /issm/trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/solutions/ResetBoundaryConditions.cpp M /issm/trunk-jpl/src/c/solutions/ad\_core.cpp M /issm/trunk-jpl/src/c/solutions/adjointbalancethickness\_core.cpp M /issm/trunk-jpl/src/c/solutions/adjointdiagnostic\_core.cpp M /issm/trunk-jpl/src/c/solutions/balancethickness\_core.cpp M /issm/trunk-jpl/src/c/solutions/bedslope\_core.cpp M /issm/trunk-jpl/src/c/solutions/control\_core.cpp M /issm/trunk-jpl/src/c/solutions/dakota\_core.cpp M /issm/trunk-jpl/src/c/solutions/diagnostic\_core.cpp M /issm/trunk-jpl/src/c/solutions/hydrology\_core.cpp M /issm/trunk-jpl/src/c/solutions/hydrology\_core\_step.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp M /issm/trunk-jpl/src/c/solutions/objectivefunction.cpp M /issm/trunk-jpl/src/c/solutions/prognostic\_core.cpp M /issm/trunk-jpl/src/c/solutions/steadystate\_core.cpp M /issm/trunk-jpl/src/c/solutions/steadystateconvergence.cpp M /issm/trunk-jpl/src/c/solutions/surfaceslope\_core.cpp M /issm/trunk-jpl/src/c/solutions/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics, removing all deboule blank lines and indent single white lines correctly\\
+\vspace{3em}
+
+\noindent \textbf{Change \#219} with diff file ISSM-13622-13623.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Constraints.cpp M /issm/trunk-jpl/src/c/Container/DataSet.cpp M /issm/trunk-jpl/src/c/Container/Elements.cpp M /issm/trunk-jpl/src/c/Container/Inputs.cpp M /issm/trunk-jpl/src/c/Container/Loads.cpp M /issm/trunk-jpl/src/c/Container/Nodes.cpp M /issm/trunk-jpl/src/c/Container/Options.cpp M /issm/trunk-jpl/src/c/Container/Parameters.cpp M /issm/trunk-jpl/src/c/Container/Results.cpp M /issm/trunk-jpl/src/c/Container/Vertices.cpp M /issm/trunk-jpl/src/c/classes/DofIndexing.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/Hook.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/Patch.cpp M /issm/trunk-jpl/src/c/classes/bamg/AdjacentTriangle.cpp M /issm/trunk-jpl/src/c/classes/bamg/BamgQuadtree.cpp M /issm/trunk-jpl/src/c/classes/bamg/EigenMetric.cpp M /issm/trunk-jpl/src/c/classes/bamg/Geometry.cpp M /issm/trunk-jpl/src/c/classes/bamg/ListofIntersectionTriangles.cpp M /issm/trunk-jpl/src/c/classes/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/classes/bamg/Metric.cpp M /issm/trunk-jpl/src/c/classes/bamg/Triangle.cpp M /issm/trunk-jpl/src/c/classes/bamg/VertexOnVertex.cpp M /issm/trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp M /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp M /issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp M /issm/trunk-jpl/src/c/classes/objects/Constraints/SpcDynamic.cpp M /issm/trunk-jpl/src/c/classes/objects/Constraints/SpcStatic.cpp M /issm/trunk-jpl/src/c/classes/objects/Constraints/SpcTransient.cpp M /issm/trunk-jpl/src/c/classes/objects/DependentObject.cpp M /issm/trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.cpp M /issm/trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.cpp M /issm/trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.cpp M /issm/trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/TriaHook.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/TriaRef.cpp M /issm/trunk-jpl/src/c/classes/objects/IndependentObject.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/BoolInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/IntInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Document.cpp M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_LatLonBox.cpp M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Polygon.cpp M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_StyleSelector.cpp M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_SubStyle.cpp M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Unknown.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/classes/objects/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/objects/Materials/Matpar.cpp M /issm/trunk-jpl/src/c/classes/objects/Node.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/BoolParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/DataSetParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/FileParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/IntMatParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/IntParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/IntVecParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/StringArrayParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/StringParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Vertex.cpp M /issm/trunk-jpl/src/c/io/Disk/WriteLockFile.cpp M /issm/trunk-jpl/src/c/io/Disk/pfopen.cpp M /issm/trunk-jpl/src/c/io/PrintfFunction.cpp M /issm/trunk-jpl/src/c/matlab/io/CheckNumMatlabArguments.cpp M /issm/trunk-jpl/src/c/matlab/io/FetchMatlabData.cpp M /issm/trunk-jpl/src/c/matlab/io/MatlabMatrixToDoubleMatrix.cpp M /issm/trunk-jpl/src/c/matlab/io/MatlabMatrixToMatrix.cpp M /issm/trunk-jpl/src/c/matlab/io/MatlabMatrixToPetscMat.cpp M /issm/trunk-jpl/src/c/matlab/io/MatlabNArrayToNArray.cpp M /issm/trunk-jpl/src/c/matlab/io/MatlabVectorToDoubleVector.cpp M /issm/trunk-jpl/src/c/matlab/io/MatlabVectorToPetscVec.cpp M /issm/trunk-jpl/src/c/matlab/io/MatlabVectorToVector.cpp M /issm/trunk-jpl/src/c/matlab/io/PrintfFunction.cpp M /issm/trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp M /issm/trunk-jpl/src/c/matlab/io/mxGetAssignedField.cpp M /issm/trunk-jpl/src/c/modules/AddExternalResultx/AddExternalResultx.cpp M /issm/trunk-jpl/src/c/modules/AverageFilterx/AverageFilterx.cpp M /issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp M /issm/trunk-jpl/src/c/modules/Chacox/Chacox.cpp M /issm/trunk-jpl/src/c/modules/Chacox/chaco\_seconds.cpp M /issm/trunk-jpl/src/c/modules/Chacox/input\_parse.cpp M /issm/trunk-jpl/src/c/modules/Chacox/user\_params.cpp M /issm/trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp M /issm/trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp M /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ThermalIsPresent.cpp M /issm/trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.cpp M /issm/trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshxt.cpp M /issm/trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp M /issm/trunk-jpl/src/c/modules/ControlInputScaleGradientx/ControlInputScaleGradientx.cpp M /issm/trunk-jpl/src/c/modules/CostFunctionx/CostFunctionx.cpp M /issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp M /issm/trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp M /issm/trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp M /issm/trunk-jpl/src/c/modules/ElementConnectivityx/ElementConnectivityx.cpp M /issm/trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp M /issm/trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp M /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp M /issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp M /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp M /issm/trunk-jpl/src/c/modules/Gradjx/Gradjx.cpp M /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp M /issm/trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp M /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.cpp M /issm/trunk-jpl/src/c/modules/KMLOverlayx/KMLOverlayx.cpp M /issm/trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp M /issm/trunk-jpl/src/c/modules/MassFluxx/MassFluxx.cpp M /issm/trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.cpp M /issm/trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.cpp M /issm/trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.cpp M /issm/trunk-jpl/src/c/modules/MaxVelx/MaxVelx.cpp M /issm/trunk-jpl/src/c/modules/MaxVxx/MaxVxx.cpp M /issm/trunk-jpl/src/c/modules/MaxVyx/MaxVyx.cpp M /issm/trunk-jpl/src/c/modules/MaxVzx/MaxVzx.cpp M /issm/trunk-jpl/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp M /issm/trunk-jpl/src/c/modules/MeshProfileIntersectionx/ElementSegment.cpp M /issm/trunk-jpl/src/c/modules/MeshProfileIntersectionx/ElementSegmentsIntersection.cpp M /issm/trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp M /issm/trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshSegmentsIntersection.cpp M /issm/trunk-jpl/src/c/modules/MeshProfileIntersectionx/NodeInElement.cpp M /issm/trunk-jpl/src/c/modules/MeshProfileIntersectionx/SegmentIntersect.cpp M /issm/trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp M /issm/trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp M /issm/trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp M /issm/trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/UpdateElementsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/UpdateElementsDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ElementsAndVerticesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/NodesPartitioning.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SortDataSets.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/UpdateElementsSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/UpdateCounters.cpp M /issm/trunk-jpl/src/c/modules/NodeConnectivityx/NodeConnectivityx.cpp M /issm/trunk-jpl/src/c/modules/NodesDofx/NodesDofx.cpp M /issm/trunk-jpl/src/c/modules/Orthx/Orthx.cpp M /issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp M /issm/trunk-jpl/src/c/modules/ParsePetscOptionsx/ParsePetscOptionsx.cpp M /issm/trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp M /issm/trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp M /issm/trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.cpp M /issm/trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp M /issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp M /issm/trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.cpp M /issm/trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp M /issm/trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp M /issm/trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.cpp M /issm/trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp M /issm/trunk-jpl/src/c/modules/Solverx/DofTypesToIndexSet.cpp M /issm/trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp M /issm/trunk-jpl/src/c/modules/SpcNodesx/SpcNodesx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp M /issm/trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp M /issm/trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.cpp M /issm/trunk-jpl/src/c/modules/TriMeshx/TriMeshx.cpp M /issm/trunk-jpl/src/c/modules/TriaSearchx/TriaSearchx.cpp M /issm/trunk-jpl/src/c/modules/UpdateConstraintsx/UpdateConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/UpdateDynamicConstraintsx/UpdateDynamicConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/VecMergex/VecMergex.cpp M /issm/trunk-jpl/src/c/python/io/CheckNumPythonArguments.cpp M /issm/trunk-jpl/src/c/python/io/FetchPythonData.cpp M /issm/trunk-jpl/src/c/python/io/WritePythonData.cpp M /issm/trunk-jpl/src/c/shared/Alloc/alloc.cpp M /issm/trunk-jpl/src/c/shared/Elements/GetGlobalDofList.cpp M /issm/trunk-jpl/src/c/shared/Elements/GetLocalDofList.cpp M /issm/trunk-jpl/src/c/shared/Elements/Paterson.cpp M /issm/trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp M /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp M /issm/trunk-jpl/src/c/shared/Exceptions/exprintf.cpp M /issm/trunk-jpl/src/c/shared/Exp/DomainOutlineWrite.cpp M /issm/trunk-jpl/src/c/shared/Exp/IsInPoly.cpp M /issm/trunk-jpl/src/c/shared/Exp/IsInPolySerial.cpp M /issm/trunk-jpl/src/c/shared/Numerics/BrentSearch.cpp M /issm/trunk-jpl/src/c/shared/Numerics/IsInputConverged.cpp M /issm/trunk-jpl/src/c/shared/Numerics/OptimalSearch.cpp M /issm/trunk-jpl/src/c/shared/Numerics/OptionsFromAnalysis.cpp M /issm/trunk-jpl/src/c/shared/Numerics/UnitConversion.cpp M /issm/trunk-jpl/src/c/shared/Numerics/cross.cpp M /issm/trunk-jpl/src/c/shared/Sorting/binary\_search.cpp M /issm/trunk-jpl/src/c/shared/String/DescriptorIndex.cpp M /issm/trunk-jpl/src/c/shared/Threads/LaunchThread.cpp M /issm/trunk-jpl/src/c/shared/Threads/PartitionRange.cpp M /issm/trunk-jpl/src/c/shared/TriMesh/AssociateSegmentToElement.cpp M /issm/trunk-jpl/src/c/shared/TriMesh/OrderSegments.cpp M /issm/trunk-jpl/src/c/shared/TriMesh/SplitMeshForRifts.cpp M /issm/trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp M /issm/trunk-jpl/src/c/shared/Wrapper/ModuleBoot.cpp M /issm/trunk-jpl/src/c/solutions/diagnostic\_core.cpp M /issm/trunk-jpl/src/c/solvers/solver\_nonlinear.cpp M /issm/trunk-jpl/src/c/solvers/solver\_stokescoupling\_nonlinear.cpp M /issm/trunk-jpl/src/c/solvers/solver\_thermal\_nonlinear.cpp M /issm/trunk-jpl/src/c/toolkits/mpi/patches/DetermineLocalSize.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscInsertMode.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscMatrixType.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscNormMode.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/KSPFree.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatFree.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatToSerial.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecDuplicatePatch.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecFree.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecToMPISerial.cpp M /issm/trunk-jpl/src/c/toolkits/plapack/patches/CyclicalFactorization.cpp M /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp M /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics, removing all deboule blank lines and indent single white lines correctly\\
+\vspace{3em}
+
+\noindent \textbf{Change \#220} with diff file ISSM-13623-13624.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Constraints.h M /issm/trunk-jpl/src/c/Container/DataSet.h M /issm/trunk-jpl/src/c/Container/Inputs.h M /issm/trunk-jpl/src/c/Container/Observations.h M /issm/trunk-jpl/src/c/Container/Options.h M /issm/trunk-jpl/src/c/Container/Parameters.h M /issm/trunk-jpl/src/c/Container/Results.h M /issm/trunk-jpl/src/c/classes/DofIndexing.h M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/classes/IoModel.h M /issm/trunk-jpl/src/c/classes/Patch.h M /issm/trunk-jpl/src/c/classes/bamg/AdjacentTriangle.h M /issm/trunk-jpl/src/c/classes/bamg/Direction.h M /issm/trunk-jpl/src/c/classes/bamg/Edge.h M /issm/trunk-jpl/src/c/classes/bamg/Geometry.h M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/classes/dakota/DakotaPlugin.h M /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.h M /issm/trunk-jpl/src/c/classes/gauss/GaussTria.h M /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.h M /issm/trunk-jpl/src/c/classes/matrix/ElementVector.h M /issm/trunk-jpl/src/c/classes/matrix/Matrix.h M /issm/trunk-jpl/src/c/classes/matrix/Vector.h M /issm/trunk-jpl/src/c/classes/matrix/matrixobjects.h M /issm/trunk-jpl/src/c/classes/objects/Constraints/Constraint.h M /issm/trunk-jpl/src/c/classes/objects/DependentObject.h M /issm/trunk-jpl/src/c/classes/objects/ElementResults/BoolElementResult.h M /issm/trunk-jpl/src/c/classes/objects/ElementResults/DoubleElementResult.h M /issm/trunk-jpl/src/c/classes/objects/ElementResults/ElementResult.h M /issm/trunk-jpl/src/c/classes/objects/ElementResults/PentaP1ElementResult.h M /issm/trunk-jpl/src/c/classes/objects/ElementResults/TriaP1ElementResult.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Element.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/objects/Elements/PentaHook.h M /issm/trunk-jpl/src/c/classes/objects/Elements/PentaRef.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h M /issm/trunk-jpl/src/c/classes/objects/Elements/TriaHook.h M /issm/trunk-jpl/src/c/classes/objects/Elements/TriaRef.h M /issm/trunk-jpl/src/c/classes/objects/ExternalResults/ExternalResult.h M /issm/trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h M /issm/trunk-jpl/src/c/classes/objects/IndependentObject.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/BoolInput.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/ControlInput.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/DoubleInput.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/Input.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/IntInput.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/TransientInput.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.h M /issm/trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Attribute.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_ColorStyle.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Comment.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Container.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Document.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Feature.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_File.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Folder.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Geometry.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_GroundOverlay.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Icon.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_LatLonBox.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_LineString.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_LineStyle.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_LinearRing.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_MultiGeometry.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Object.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Overlay.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Placemark.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Point.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_PolyStyle.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Polygon.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Style.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_StyleSelector.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_SubStyle.h M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_Unknown.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Friction.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Penpair.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Riftfront.h M /issm/trunk-jpl/src/c/classes/objects/Materials/Material.h M /issm/trunk-jpl/src/c/classes/objects/Node.h M /issm/trunk-jpl/src/c/classes/objects/Object.h M /issm/trunk-jpl/src/c/classes/objects/Options/GenericOption.h M /issm/trunk-jpl/src/c/classes/objects/Options/Option.h M /issm/trunk-jpl/src/c/classes/objects/Options/OptionUtilities.h M /issm/trunk-jpl/src/c/classes/objects/Params/BoolParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DataSetParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatArrayParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleMatParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleTransientMatParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/DoubleVecParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/FileParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/GenericParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/IntMatParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/IntParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/IntVecParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/MatrixParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/Param.h M /issm/trunk-jpl/src/c/classes/objects/Params/StringArrayParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/StringParam.h M /issm/trunk-jpl/src/c/classes/objects/Params/VectorParam.h M /issm/trunk-jpl/src/c/classes/objects/Profiler.h M /issm/trunk-jpl/src/c/classes/objects/Vertex.h M /issm/trunk-jpl/src/c/include/globals.h M /issm/trunk-jpl/src/c/include/typedefs.h M /issm/trunk-jpl/src/c/modules/AverageFilterx/AverageFilterx.h M /issm/trunk-jpl/src/c/modules/Chacox/Chacox.h M /issm/trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.h M /issm/trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.h M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStateLocal.h M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.h M /issm/trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.h M /issm/trunk-jpl/src/c/modules/ElementConnectivityx/ElementConnectivityx.h M /issm/trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.h M /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.h M /issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h M /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.h M /issm/trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.h M /issm/trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.h M /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.h M /issm/trunk-jpl/src/c/modules/InputScalex/InputScalex.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.h M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.h M /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.h M /issm/trunk-jpl/src/c/modules/MassFluxx/MassFluxx.h M /issm/trunk-jpl/src/c/modules/MaxAbsVxx/MaxAbsVxx.h M /issm/trunk-jpl/src/c/modules/MaxAbsVyx/MaxAbsVyx.h M /issm/trunk-jpl/src/c/modules/MaxAbsVzx/MaxAbsVzx.h M /issm/trunk-jpl/src/c/modules/MaxVelx/MaxVelx.h M /issm/trunk-jpl/src/c/modules/MaxVxx/MaxVxx.h M /issm/trunk-jpl/src/c/modules/MaxVyx/MaxVyx.h M /issm/trunk-jpl/src/c/modules/MaxVzx/MaxVzx.h M /issm/trunk-jpl/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.h M /issm/trunk-jpl/src/c/modules/MeshPartitionx/MeshPartitionx.h M /issm/trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.h M /issm/trunk-jpl/src/c/modules/MinVelx/MinVelx.h M /issm/trunk-jpl/src/c/modules/MinVxx/MinVxx.h M /issm/trunk-jpl/src/c/modules/MinVyx/MinVyx.h M /issm/trunk-jpl/src/c/modules/MinVzx/MinVzx.h M /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h M /issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.h M /issm/trunk-jpl/src/c/modules/NodeConnectivityx/NodeConnectivityx.h M /issm/trunk-jpl/src/c/modules/Orthx/Orthx.h M /issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.h M /issm/trunk-jpl/src/c/modules/OutputRiftsx/OutputRiftsx.h M /issm/trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsx.h M /issm/trunk-jpl/src/c/modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.h M /issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.h M /issm/trunk-jpl/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.h M /issm/trunk-jpl/src/c/modules/RequestedDependentsx/RequestedDependentsx.h M /issm/trunk-jpl/src/c/modules/RequestedOutputsx/RequestedOutputsx.h M /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.h M /issm/trunk-jpl/src/c/modules/Scotchx/Scotchx.h M /issm/trunk-jpl/src/c/modules/Solverx/Solverx.h M /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.h M /issm/trunk-jpl/src/c/modules/TimeAdaptx/TimeAdaptx.h M /issm/trunk-jpl/src/c/modules/UpdateVertexPositionsx/UpdateVertexPositionsx.h M /issm/trunk-jpl/src/c/modules/VerticesDofx/VerticesDofx.h M /issm/trunk-jpl/src/c/python/include/python\_macros.h M /issm/trunk-jpl/src/c/shared/Alloc/xNewDelete.h M /issm/trunk-jpl/src/c/shared/Bamg/shared.h M /issm/trunk-jpl/src/c/shared/Exceptions/exceptions.h M /issm/trunk-jpl/src/c/shared/Exp/exp.h M /issm/trunk-jpl/src/c/shared/MemOps/xMemCpy.h M /issm/trunk-jpl/src/c/shared/String/sharedstring.h M /issm/trunk-jpl/src/c/shared/Threads/issm\_threads.h M /issm/trunk-jpl/src/c/toolkits/issm/SeqMat.h M /issm/trunk-jpl/src/c/toolkits/issm/SeqVec.h M /issm/trunk-jpl/src/c/toolkits/mpi/patches/mpipatches.h M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.h M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.h M /issm/trunk-jpl/src/c/toolkits/petsc/patches/SolverEnum.h M /issm/trunk-jpl/src/c/toolkits/plapack/plapackincludes.h M /issm/trunk-jpl/src/c/toolkits/python/pythonincludes.h M /issm/trunk-jpl/src/c/toolkits/scalapack/FortranMapping.h M /issm/trunk-jpl/src/c/toolkits/triangle/triangleincludes.h\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics, removing all deboule blank lines and indent single white lines correctly\\
+\vspace{3em}
+
+\noindent \textbf{Change \#221} with diff file ISSM-13624-13625.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/inversion.py A /issm/trunk-jpl/src/m/classes/matdamageice.py\\
+Export determination: 6. \\
+Rationale: NEW: Python version of matdamageice (and update to inversion).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#222} with diff file ISSM-13625-13626.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test270.m A /issm/trunk-jpl/test/NightlyRun/test270.py M /issm/trunk-jpl/test/NightlyRun/test272.m A /issm/trunk-jpl/test/NightlyRun/test272.py M /issm/trunk-jpl/test/NightlyRun/test274.m\\
+Export determination: 6. \\
+Rationale: NEW: Working test270.py and test272.py (along with cosmetic matlab changes).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#223} with diff file ISSM-13626-13627.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/initialization.py\\
+Export determination: 6. \\
+Rationale: CHG: Updated to changeset [13119].\\
+\vspace{3em}
+
+\noindent \textbf{Change \#224} with diff file ISSM-13627-13628.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/python/include/python\_macros.h\\
+Export determination: 6. \\
+Rationale: BUG: reverted back\\
+\vspace{3em}
+
+\noindent \textbf{Change \#225} with diff file ISSM-13628-13629.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/starcluster A /issm/trunk-jpl/externalpackages/starcluster/install.sh\\
+Export determination: 6. \\
+Rationale: NEW: starcluster package\\
+\vspace{3em}
+
+\noindent \textbf{Change \#226} with diff file ISSM-13629-13630.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/classes/clusters/cloud.m A /issm/trunk-jpl/src/m/os/issmstscpin.m\\
+Export determination: 6. \\
+Rationale: NEW: creating cluster class to handle cloud computing.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#227} with diff file ISSM-13630-13631.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/starcluster M /issm/trunk-jpl/externalpackages/starcluster/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: install starcluster package\\
+\vspace{3em}
+
+\noindent \textbf{Change \#228} with diff file ISSM-13631-13632.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/cloud.m M /issm/trunk-jpl/src/m/os/issmstscpin.m A /issm/trunk-jpl/src/m/os/issmstscpout.m A /issm/trunk-jpl/src/m/os/issmstssh.m A /issm/trunk-jpl/src/m/os/starcluster.m M /issm/trunk-jpl/src/m/solve/waitonlock.m\\
+Export determination: 6. \\
+Rationale: NEW: cloud cluster class, to control Amazon cloud computing. Needed equivalents of ssh and scp using the starcluster commands put and get. waitonlock also needed to not depend on the port value of the cluster so much.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#229} with diff file ISSM-13632-13633.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/os/issmstscpin.m M /issm/trunk-jpl/src/m/os/issmstscpout.m\\
+Export determination: 6. \\
+Rationale: CHG: trigger the correct user option\\
+\vspace{3em}
+
+\noindent \textbf{Change \#230} with diff file ISSM-13633-13634.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/os/issmstssh.m\\
+Export determination: 6. \\
+Rationale: CHG: ensure that we are not running root but user.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#231} with diff file ISSM-13634-13635.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/DofIndexing.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h A /issm/trunk-jpl/src/c/classes/RiftStruct.cpp A /issm/trunk-jpl/src/c/classes/RiftStruct.h M /issm/trunk-jpl/src/c/classes/Update.h M /issm/trunk-jpl/src/c/classes/classes.h M /issm/trunk-jpl/src/c/classes/objects/Vertex.h A /issm/trunk-jpl/src/c/modules/TriMeshProcessRiftsx A /issm/trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.cpp A /issm/trunk-jpl/src/c/modules/TriMeshProcessRiftsx/TriMeshProcessRiftsx.h M /issm/trunk-jpl/src/c/modules/modules.h M /issm/trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp M /issm/trunk-jpl/src/c/shared/shared.h M /issm/trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added TriMeshProcessRiftsx, x layer of TriMeshProcessRifts for python port\\
+\vspace{3em}
+
+\noindent \textbf{Change \#232} with diff file ISSM-13635-13636.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.m A /issm/trunk-jpl/src/m/boundaryconditions/SetIceSheetBC.py\\
+Export determination: 6. \\
+Rationale: NEW: Python version of SetIceSheetBC.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#233} with diff file ISSM-13636-13637.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/SquareSheetConstrained.par A /issm/trunk-jpl/test/Par/SquareSheetConstrained.py M /issm/trunk-jpl/test/Par/SquareShelfConstrained.py\\
+Export determination: 6. \\
+Rationale: NEW: Python version of SquareSheetConstrained.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#234} with diff file ISSM-13637-13638.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test301.m A /issm/trunk-jpl/test/NightlyRun/test301.py M /issm/trunk-jpl/test/NightlyRun/test302.m A /issm/trunk-jpl/test/NightlyRun/test302.py M /issm/trunk-jpl/test/NightlyRun/test303.m A /issm/trunk-jpl/test/NightlyRun/test303.py M /issm/trunk-jpl/test/NightlyRun/test304.m A /issm/trunk-jpl/test/NightlyRun/test304.py M /issm/trunk-jpl/test/NightlyRun/test305.m A /issm/trunk-jpl/test/NightlyRun/test305.py M /issm/trunk-jpl/test/NightlyRun/test306.m A /issm/trunk-jpl/test/NightlyRun/test306.py M /issm/trunk-jpl/test/NightlyRun/test307.m A /issm/trunk-jpl/test/NightlyRun/test307.py M /issm/trunk-jpl/test/NightlyRun/test308.m A /issm/trunk-jpl/test/NightlyRun/test308.py M /issm/trunk-jpl/test/NightlyRun/test309.m A /issm/trunk-jpl/test/NightlyRun/test309.py\\
+Export determination: 6. \\
+Rationale: NEW: Working test301.py through test309.py (along with cosmetic matlab changes).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#235} with diff file ISSM-13638-13639.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp M /issm/trunk-jpl/src/c/matlab/io/matlabio.h\\
+Export determination: 6. \\
+Rationale: NEW: added WriteData for riftstruct\\
+\vspace{3em}
+
+\noindent \textbf{Change \#236} with diff file ISSM-13639-13640.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.cpp M /issm/trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h\\
+Export determination: 6. \\
+Rationale: NEW: added WriteData for riftstruct\\
+\vspace{3em}
+
+\noindent \textbf{Change \#237} with diff file ISSM-13640-13641.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/python/io/WritePythonData.cpp M /issm/trunk-jpl/src/c/python/io/pythonio.h M /issm/trunk-jpl/src/c/shared/TriMesh/TriMeshUtils.cpp M /issm/trunk-jpl/src/c/shared/TriMesh/trimesh.h M /issm/trunk-jpl/src/modules/TriMeshProcessRifts/TriMeshProcessRifts.h M /issm/trunk-jpl/src/modules/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: NEW: added WriteData for RiftStruct in python (empty for now). TriMeshProcessRifts is now compiling in python cleaned up TriMesh utils, which had another pnpoly\\
+\vspace{3em}
+
+\noindent \textbf{Change \#238} with diff file ISSM-13641-13642.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/SquareShelfConstrained.py\\
+Export determination: 6. \\
+Rationale: BUG: Fix bug introduced in [13636].\\
+\vspace{3em}
+
+\noindent \textbf{Change \#239} with diff file ISSM-13642-13643.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/inversion.py\\
+Export determination: 6. \\
+Rationale: CHG: Make default number of dimensions consistent.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#240} with diff file ISSM-13643-13644.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/python\_skipped\_tests.txt M /issm/trunk-jpl/test/NightlyRun/test119.m M /issm/trunk-jpl/test/NightlyRun/test212.m M /issm/trunk-jpl/test/NightlyRun/test213.m M /issm/trunk-jpl/test/NightlyRun/test214.m M /issm/trunk-jpl/test/NightlyRun/test215.m M /issm/trunk-jpl/test/NightlyRun/test310.m A /issm/trunk-jpl/test/NightlyRun/test310.py M /issm/trunk-jpl/test/NightlyRun/test311.m A /issm/trunk-jpl/test/NightlyRun/test311.py M /issm/trunk-jpl/test/NightlyRun/test312.m A /issm/trunk-jpl/test/NightlyRun/test312.py M /issm/trunk-jpl/test/NightlyRun/test313.m A /issm/trunk-jpl/test/NightlyRun/test313.py M /issm/trunk-jpl/test/NightlyRun/test314.m A /issm/trunk-jpl/test/NightlyRun/test314.py M /issm/trunk-jpl/test/NightlyRun/test315.m A /issm/trunk-jpl/test/NightlyRun/test315.py M /issm/trunk-jpl/test/NightlyRun/test316.m A /issm/trunk-jpl/test/NightlyRun/test316.py M /issm/trunk-jpl/test/NightlyRun/test317.m A /issm/trunk-jpl/test/NightlyRun/test317.py M /issm/trunk-jpl/test/NightlyRun/test318.m A /issm/trunk-jpl/test/NightlyRun/test318.py M /issm/trunk-jpl/test/NightlyRun/test319.m A /issm/trunk-jpl/test/NightlyRun/test319.py\\
+Export determination: 6. \\
+Rationale: NEW: Working test310.py through test319.py (along with cosmetic matlab changes).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#241} with diff file ISSM-13644-13645.diff: \\
+Function name: \\
+M /issm/trunk-jpl/etc/environment.sh\\
+Export determination: 6. \\
+Rationale: CHG: updated missing ANDROID\_DIR variable\\
+\vspace{3em}
+
+\noindent \textbf{Change \#242} with diff file ISSM-13645-13646.diff: \\
+Function name: \\
+M /issm/trunk-jpl/etc/environment.sh\\
+Export determination: 6. \\
+Rationale: CHG: export ndk and sdk android directories\\
+\vspace{3em}
+
+\noindent \textbf{Change \#243} with diff file ISSM-13646-13647.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/array/array\_numel.m M /issm/trunk-jpl/src/m/array/array\_size.m M /issm/trunk-jpl/src/m/array/str2int.m M /issm/trunk-jpl/src/m/array/struc\_desc.m M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.m M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/dependent.m M /issm/trunk-jpl/src/m/classes/diagnostic.m M /issm/trunk-jpl/src/m/classes/flaim.m M /issm/trunk-jpl/src/m/classes/groundingline.m M /issm/trunk-jpl/src/m/classes/independent.m M /issm/trunk-jpl/src/m/classes/mesh.m M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/modellist.m M /issm/trunk-jpl/src/m/classes/organizer.m M /issm/trunk-jpl/src/m/classes/planetmesh.m M /issm/trunk-jpl/src/m/classes/prognostic.m M /issm/trunk-jpl/src/m/classes/qmu/@dakota\_method/dakota\_method.m M /issm/trunk-jpl/src/m/classes/qmu/@dakota\_method/dmeth\_params\_write.m M /issm/trunk-jpl/src/m/classes/qmu/continuous\_design.m M /issm/trunk-jpl/src/m/classes/qmu/continuous\_state.m M /issm/trunk-jpl/src/m/classes/qmu/least\_squares\_term.m M /issm/trunk-jpl/src/m/classes/qmu/linear\_equality\_constraint.m M /issm/trunk-jpl/src/m/classes/qmu/linear\_inequality\_constraint.m M /issm/trunk-jpl/src/m/classes/qmu/nonlinear\_equality\_constraint.m M /issm/trunk-jpl/src/m/classes/qmu/nonlinear\_inequality\_constraint.m M /issm/trunk-jpl/src/m/classes/qmu/normal\_uncertain.m M /issm/trunk-jpl/src/m/classes/qmu/objective\_function.m M /issm/trunk-jpl/src/m/classes/qmu/response\_function.m M /issm/trunk-jpl/src/m/classes/qmu/uniform\_uncertain.m M /issm/trunk-jpl/src/m/classes/qmu.m M /issm/trunk-jpl/src/m/classes/surfaceforcings.m M /issm/trunk-jpl/src/m/classes/verbose.m M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m M /issm/trunk-jpl/src/m/contrib/bamg/YamsCall.m M /issm/trunk-jpl/src/m/contrib/bamg/yams.m M /issm/trunk-jpl/src/m/contrib/uci/expremovestraightsegments.m M /issm/trunk-jpl/src/m/exp/expcontract.m M /issm/trunk-jpl/src/m/exp/expcreatecontour.m M /issm/trunk-jpl/src/m/exp/expexcludeoutliers.m M /issm/trunk-jpl/src/m/exp/expflip.m M /issm/trunk-jpl/src/m/exp/expll2xy.m M /issm/trunk-jpl/src/m/exp/expswapxy.m M /issm/trunk-jpl/src/m/exp/exptool.m M /issm/trunk-jpl/src/m/exp/expwrite.m M /issm/trunk-jpl/src/m/exp/expxy2ll.m M /issm/trunk-jpl/src/m/exp/manipulation/addcontour.m M /issm/trunk-jpl/src/m/exp/manipulation/addendprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/addinsideprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/addprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/closeprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/cutarea.m M /issm/trunk-jpl/src/m/exp/manipulation/cutprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/modifyposition.m M /issm/trunk-jpl/src/m/exp/manipulation/orientprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/removepoints.m M /issm/trunk-jpl/src/m/exp/manipulation/removeprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/removeseveralpoints.m M /issm/trunk-jpl/src/m/geometry/SegIntersect.m M /issm/trunk-jpl/src/m/interp/SectionValues.m M /issm/trunk-jpl/src/m/inversions/parametercontrolB.m M /issm/trunk-jpl/src/m/kml/edgeadjacency.m M /issm/trunk-jpl/src/m/kml/exp2kml.m M /issm/trunk-jpl/src/m/kml/kml2exp.m M /issm/trunk-jpl/src/m/kml/kml\_colorstyle.m M /issm/trunk-jpl/src/m/kml/kml\_container.m M /issm/trunk-jpl/src/m/kml/kml\_document.m M /issm/trunk-jpl/src/m/kml/kml\_feature.m M /issm/trunk-jpl/src/m/kml/kml\_file\_swrite.m M /issm/trunk-jpl/src/m/kml/kml\_file\_write.m M /issm/trunk-jpl/src/m/kml/kml\_folder.m M /issm/trunk-jpl/src/m/kml/kml\_geometry.m M /issm/trunk-jpl/src/m/kml/kml\_linearring.m M /issm/trunk-jpl/src/m/kml/kml\_linestring.m M /issm/trunk-jpl/src/m/kml/kml\_linestyle.m M /issm/trunk-jpl/src/m/kml/kml\_mesh\_elem.m M /issm/trunk-jpl/src/m/kml/kml\_mesh\_write.m M /issm/trunk-jpl/src/m/kml/kml\_multigeometry.m M /issm/trunk-jpl/src/m/kml/kml\_object.m M /issm/trunk-jpl/src/m/kml/kml\_part\_edges.m M /issm/trunk-jpl/src/m/kml/kml\_part\_elems.m M /issm/trunk-jpl/src/m/kml/kml\_part\_flagedges.m M /issm/trunk-jpl/src/m/kml/kml\_partitions.m M /issm/trunk-jpl/src/m/kml/kml\_placemark.m M /issm/trunk-jpl/src/m/kml/kml\_polygon.m M /issm/trunk-jpl/src/m/kml/kml\_polystyle.m M /issm/trunk-jpl/src/m/kml/kml\_style.m M /issm/trunk-jpl/src/m/kml/kml\_styleselector.m M /issm/trunk-jpl/src/m/kml/kml\_substyle.m M /issm/trunk-jpl/src/m/kml/kml\_unsh\_edges.m M /issm/trunk-jpl/src/m/kml/string\_buf.m M /issm/trunk-jpl/src/m/mech/basalstress.m M /issm/trunk-jpl/src/m/mesh/FixMesh.m M /issm/trunk-jpl/src/m/mesh/NodeInElement.m M /issm/trunk-jpl/src/m/mesh/bamg.m M /issm/trunk-jpl/src/m/mesh/planet/mesh\_refine\_tri4.m M /issm/trunk-jpl/src/m/mesh/planet/planetmixedmesh.m M /issm/trunk-jpl/src/m/mesh/planet/sphere\_project.m M /issm/trunk-jpl/src/m/mesh/planet/sphere\_tri.m M /issm/trunk-jpl/src/m/mesh/rifts/meshaddrifts.m M /issm/trunk-jpl/src/m/mesh/rifts/meshplug.m M /issm/trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.m M /issm/trunk-jpl/src/m/mesh/rifts/rifttipsonmesh.m M /issm/trunk-jpl/src/m/miscellaneous/isnans.m M /issm/trunk-jpl/src/m/miscellaneous/parallelrange.m M /issm/trunk-jpl/src/m/os/ismpi.m M /issm/trunk-jpl/src/m/os/ismumps.m M /issm/trunk-jpl/src/m/os/ispetsc.m M /issm/trunk-jpl/src/m/os/issmbbftpin.m M /issm/trunk-jpl/src/m/os/issmbbftpout.m M /issm/trunk-jpl/src/m/os/issmscpin.m M /issm/trunk-jpl/src/m/os/issmscpout.m M /issm/trunk-jpl/src/m/os/issmssh.m M /issm/trunk-jpl/src/m/os/issmstssh.m M /issm/trunk-jpl/src/m/parameterization/contourenvelope.m M /issm/trunk-jpl/src/m/parameterization/parameterize.m M /issm/trunk-jpl/src/m/partition/AreaAverageOntoPartition.m M /issm/trunk-jpl/src/m/partition/partitioner.m M /issm/trunk-jpl/src/m/plot/applyoptions.m M /issm/trunk-jpl/src/m/plot/arrow.m M /issm/trunk-jpl/src/m/plot/checkplotoptions.m M /issm/trunk-jpl/src/m/plot/latlonoverlay.m M /issm/trunk-jpl/src/m/plot/plot\_manager.m M /issm/trunk-jpl/src/m/plot/plot\_overlay.m M /issm/trunk-jpl/src/m/plot/plot\_qmu\_mass\_flux\_segments.m M /issm/trunk-jpl/src/m/plot/plot\_qmuhistnorm.m M /issm/trunk-jpl/src/m/plot/plot\_qmustddev.m M /issm/trunk-jpl/src/m/plot/plot\_riftnumbering.m M /issm/trunk-jpl/src/m/plot/plot\_riftrelvel.m M /issm/trunk-jpl/src/m/plot/plot\_rifts.m M /issm/trunk-jpl/src/m/plot/plot\_riftvel.m M /issm/trunk-jpl/src/m/plot/plot\_sarpwr.m M /issm/trunk-jpl/src/m/plot/plot\_section.m M /issm/trunk-jpl/src/m/plot/plot\_segments.m M /issm/trunk-jpl/src/m/plot/plot\_thermaltransient\_results.m M /issm/trunk-jpl/src/m/plot/plotmodel.m M /issm/trunk-jpl/src/m/plot/processdata.m M /issm/trunk-jpl/src/m/plot/processmesh.m M /issm/trunk-jpl/src/m/plot/quiver\_colorbar.m M /issm/trunk-jpl/src/m/plot/radarpower.m M /issm/trunk-jpl/src/m/print/printmodel.m M /issm/trunk-jpl/src/m/qmu/MassFluxProcessProfile.m M /issm/trunk-jpl/src/m/qmu/dakota\_cdfs.m M /issm/trunk-jpl/src/m/qmu/dakota\_in\_data.m M /issm/trunk-jpl/src/m/qmu/dakota\_in\_params.m M /issm/trunk-jpl/src/m/qmu/dakota\_in\_parse.m M /issm/trunk-jpl/src/m/qmu/dakota\_moments.m M /issm/trunk-jpl/src/m/qmu/dakota\_out\_parse.m M /issm/trunk-jpl/src/m/qmu/examples/direct.m M /issm/trunk-jpl/src/m/qmu/examples/lrel\_mmf.m M /issm/trunk-jpl/src/m/qmu/expandvariables.m M /issm/trunk-jpl/src/m/qmu/importancefactors.m M /issm/trunk-jpl/src/m/qmu/lclist\_write.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_boxplot.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_cdf.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_hist\_norm.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_hist\_norm\_ci.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_if\_bars.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_if\_spec.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_normdist\_bars.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_normplot.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_prob\_bars.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_rlev\_bars.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_rlev\_bars\_ci.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_rvsv\_line.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_rvsv\_scat3.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_rvsv\_surf.m M /issm/trunk-jpl/src/m/qmu/plot/plot\_sampdist\_bars.m M /issm/trunk-jpl/src/m/qmu/process\_qmu\_options.m M /issm/trunk-jpl/src/m/qmu/process\_qmu\_response\_data.m M /issm/trunk-jpl/src/m/qmu/qmu\_correlation.m M /issm/trunk-jpl/src/m/qmu/qmuisdistributed.m M /issm/trunk-jpl/src/m/qmu/qmumarshall.m M /issm/trunk-jpl/src/m/qmu/qmuresponse.m M /issm/trunk-jpl/src/m/qmu/qmuroot.m M /issm/trunk-jpl/src/m/qmu/rlist\_write.m M /issm/trunk-jpl/src/m/qmu/sensitivities.m M /issm/trunk-jpl/src/m/qmu/setupdesign/IsScaled.m M /issm/trunk-jpl/src/m/qmu/setupdesign/QmuSetupVariables.m M /issm/trunk-jpl/src/m/qmu/vector\_write.m M /issm/trunk-jpl/src/m/regional/basinzoom.m M /issm/trunk-jpl/src/m/regional/regionaltransient2d.m M /issm/trunk-jpl/src/m/regional/showbasins.m M /issm/trunk-jpl/src/m/solve/loadresultsfromdisk.m M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.m M /issm/trunk-jpl/src/m/solve/solve.m M /issm/trunk-jpl/src/m/solvers/asmoptions.m M /issm/trunk-jpl/src/m/solvers/iluasmoptions.m M /issm/trunk-jpl/src/m/solvers/jacobiasmoptions.m M /issm/trunk-jpl/src/m/solvers/jacobicgoptions.m M /issm/trunk-jpl/src/m/solvers/matlaboptions.m M /issm/trunk-jpl/src/m/solvers/soroptions.m M /issm/trunk-jpl/src/m/string/issmprintf.m M /issm/trunk-jpl/src/m/string/strsplit.m M /issm/trunk-jpl/src/m/string/strsplit\_strict.m\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics, removed multiple blank lines\\
+\vspace{3em}
+
+\noindent \textbf{Change \#244} with diff file ISSM-13647-13648.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/android/android\_aux.sh\\
+Export determination: 6. \\
+Rationale: CHG: Added usage information to Android install scripts.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#245} with diff file ISSM-13648-13649.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/issm-android-inputfiles (from /issm/trunk-jpl/src/android/test102:13643) D /issm/trunk-jpl/src/android/test102\\
+Export determination: 6. \\
+Rationale: CHG: test102 is not a good name. These are sample input files needed to run the ISSM android application.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#246} with diff file ISSM-13649-13650.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-arm-linux.sh\\
+Export determination: 6. \\
+Rationale: CHG: no kriging involved in android port\\
+\vspace{3em}
+
+\noindent \textbf{Change \#247} with diff file ISSM-13650-13651.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-macosx64-larour-bothapis.sh\\
+Export determination: 6. \\
+Rationale: CHG: macosx config adjustments\\
+\vspace{3em}
+
+\noindent \textbf{Change \#248} with diff file ISSM-13651-13652.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/modules A /issm/trunk-jpl/src/wrappers (from /issm/trunk-jpl/src/modules:13648)\\
+Export determination: 6. \\
+Rationale: CHG: moved modules to wrappers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#249} with diff file ISSM-13652-13653.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/Makefile.am M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: switching modules to wrappers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#250} with diff file ISSM-13653-13654.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/Makefile.am M /issm/trunk-jpl/src/android/helloworld/My First App/.classpath M /issm/trunk-jpl/src/android/helloworld/OpenGLES20/.classpath M /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes.dex M /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/resources.ap\_ M /issm/trunk-jpl/src/m/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: stop installign wrappers if config says so\\
+\vspace{3em}
+
+\noindent \textbf{Change \#251} with diff file ISSM-13654-13655.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-arm-linux.sh M /issm/trunk-jpl/configs/config-greenplanet.sh M /issm/trunk-jpl/configs/config-linux64-ad.sh M /issm/trunk-jpl/configs/config-macosx64-ad.sh M /issm/trunk-jpl/configs/config-macosx64-gsl.sh M /issm/trunk-jpl/configs/config-macosx64-larour.sh M /issm/trunk-jpl/configs/config-pleiades-petsc2.sh M /issm/trunk-jpl/configs/config-pleiades-petscdev.sh M /issm/trunk-jpl/configs/config-pleiades.sh\\
+Export determination: 6. \\
+Rationale: CHG: new config files switching from modules to wrappers options\\
+\vspace{3em}
+
+\noindent \textbf{Change \#252} with diff file ISSM-13655-13656.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configure.ac M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: switch from modules to wrappers. Some cosmetics also.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#253} with diff file ISSM-13656-13657.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/android/helloworld/My First App/bin M /issm/trunk-jpl/src/android/helloworld/My First App/bin/classes M /issm/trunk-jpl/src/android/helloworld/My First App/bin/res M /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin M /issm/trunk-jpl/src/android/helloworld/OpenGLES20/bin/classes\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore temporary files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#254} with diff file ISSM-13657-13658.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test501.m A /issm/trunk-jpl/test/NightlyRun/test501.py A /issm/trunk-jpl/test/NightlyRun/test502.py A /issm/trunk-jpl/test/NightlyRun/test503.py A /issm/trunk-jpl/test/NightlyRun/test504.py A /issm/trunk-jpl/test/NightlyRun/test505.py\\
+Export determination: 6. \\
+Rationale: NEW: added python tests 501 to 505\\
+\vspace{3em}
+
+\noindent \textbf{Change \#255} with diff file ISSM-13658-13659.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/NightlyRun/test506.py M /issm/trunk-jpl/test/NightlyRun/test507.m A /issm/trunk-jpl/test/NightlyRun/test507.py M /issm/trunk-jpl/test/NightlyRun/test508.m A /issm/trunk-jpl/test/NightlyRun/test508.py A /issm/trunk-jpl/test/NightlyRun/test509.py\\
+Export determination: 6. \\
+Rationale: NEW: added python tests 506 to 510\\
+\vspace{3em}
+
+\noindent \textbf{Change \#256} with diff file ISSM-13659-13660.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/NightlyRun/python\_test\_guidelines.txt\\
+Export determination: 6. \\
+Rationale: NEW: python\_test\_guidelines.txt to describe how to make tests more transportable between languages.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#257} with diff file ISSM-13660-13661.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/python\_test\_guidelines.txt\\
+Export determination: 6. \\
+Rationale: CHG: Already updated.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#258} with diff file ISSM-13661-13662.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test320.m A /issm/trunk-jpl/test/NightlyRun/test320.py M /issm/trunk-jpl/test/NightlyRun/test321.m A /issm/trunk-jpl/test/NightlyRun/test321.py M /issm/trunk-jpl/test/NightlyRun/test322.m A /issm/trunk-jpl/test/NightlyRun/test322.py M /issm/trunk-jpl/test/NightlyRun/test323.m A /issm/trunk-jpl/test/NightlyRun/test323.py M /issm/trunk-jpl/test/NightlyRun/test324.m A /issm/trunk-jpl/test/NightlyRun/test324.py M /issm/trunk-jpl/test/NightlyRun/test325.m A /issm/trunk-jpl/test/NightlyRun/test325.py M /issm/trunk-jpl/test/NightlyRun/test326.m A /issm/trunk-jpl/test/NightlyRun/test326.py M /issm/trunk-jpl/test/NightlyRun/test327.m A /issm/trunk-jpl/test/NightlyRun/test327.py\\
+Export determination: 6. \\
+Rationale: NEW: Working test320.py through test327.py (along with matlab cosmetic changes).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#259} with diff file ISSM-13662-13663.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test510.m A /issm/trunk-jpl/test/NightlyRun/test510.py M /issm/trunk-jpl/test/NightlyRun/test512.m A /issm/trunk-jpl/test/NightlyRun/test512.py M /issm/trunk-jpl/test/NightlyRun/test513.m A /issm/trunk-jpl/test/NightlyRun/test513.py M /issm/trunk-jpl/test/NightlyRun/test514.m A /issm/trunk-jpl/test/NightlyRun/test515.py\\
+Export determination: 6. \\
+Rationale: NEW: added test 510, 512 and 515\\
+\vspace{3em}
+
+\noindent \textbf{Change \#260} with diff file ISSM-13663-13664.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/ad.m M /issm/trunk-jpl/test/NightlyRun/ad\_maxalloc.m M /issm/trunk-jpl/test/NightlyRun/test1101.m M /issm/trunk-jpl/test/NightlyRun/test1102.m M /issm/trunk-jpl/test/NightlyRun/test1103.m M /issm/trunk-jpl/test/NightlyRun/test1104.m M /issm/trunk-jpl/test/NightlyRun/test1105.m M /issm/trunk-jpl/test/NightlyRun/test1106.m M /issm/trunk-jpl/test/NightlyRun/test1107.m M /issm/trunk-jpl/test/NightlyRun/test1108.m M /issm/trunk-jpl/test/NightlyRun/test1109.m M /issm/trunk-jpl/test/NightlyRun/test1110.m M /issm/trunk-jpl/test/NightlyRun/test1201.m M /issm/trunk-jpl/test/NightlyRun/test1202.m M /issm/trunk-jpl/test/NightlyRun/test1203.m M /issm/trunk-jpl/test/NightlyRun/test1204.m M /issm/trunk-jpl/test/NightlyRun/test1205.m M /issm/trunk-jpl/test/NightlyRun/test1206.m M /issm/trunk-jpl/test/NightlyRun/test1207.m M /issm/trunk-jpl/test/NightlyRun/test1208.m M /issm/trunk-jpl/test/NightlyRun/test1301.m M /issm/trunk-jpl/test/NightlyRun/test1302.m M /issm/trunk-jpl/test/NightlyRun/test1303.m M /issm/trunk-jpl/test/NightlyRun/test1304.m M /issm/trunk-jpl/test/NightlyRun/test1401.m M /issm/trunk-jpl/test/NightlyRun/test1402.m M /issm/trunk-jpl/test/NightlyRun/test1501.m M /issm/trunk-jpl/test/NightlyRun/test1502.m M /issm/trunk-jpl/test/NightlyRun/test1601.m M /issm/trunk-jpl/test/NightlyRun/test1602.m M /issm/trunk-jpl/test/NightlyRun/test3001.m M /issm/trunk-jpl/test/NightlyRun/test3002.m M /issm/trunk-jpl/test/NightlyRun/test3003.m M /issm/trunk-jpl/test/NightlyRun/test3004.m M /issm/trunk-jpl/test/NightlyRun/test3005.m M /issm/trunk-jpl/test/NightlyRun/test3006.m M /issm/trunk-jpl/test/NightlyRun/test3007.m M /issm/trunk-jpl/test/NightlyRun/test3008.m M /issm/trunk-jpl/test/NightlyRun/test3009.m M /issm/trunk-jpl/test/NightlyRun/test3010.m M /issm/trunk-jpl/test/NightlyRun/test3015.m M /issm/trunk-jpl/test/NightlyRun/test3019.m M /issm/trunk-jpl/test/NightlyRun/test3020.m M /issm/trunk-jpl/test/NightlyRun/test328.m M /issm/trunk-jpl/test/NightlyRun/test329.m M /issm/trunk-jpl/test/NightlyRun/test401.m M /issm/trunk-jpl/test/NightlyRun/test402.m M /issm/trunk-jpl/test/NightlyRun/test403.m M /issm/trunk-jpl/test/NightlyRun/test404.m M /issm/trunk-jpl/test/NightlyRun/test405.m M /issm/trunk-jpl/test/NightlyRun/test406.m M /issm/trunk-jpl/test/NightlyRun/test407.m M /issm/trunk-jpl/test/NightlyRun/test408.m M /issm/trunk-jpl/test/NightlyRun/test409.m M /issm/trunk-jpl/test/NightlyRun/test410.m M /issm/trunk-jpl/test/NightlyRun/test411.m M /issm/trunk-jpl/test/NightlyRun/test412.m M /issm/trunk-jpl/test/NightlyRun/test413.m M /issm/trunk-jpl/test/NightlyRun/test414.m M /issm/trunk-jpl/test/NightlyRun/test415.m M /issm/trunk-jpl/test/NightlyRun/test416.m M /issm/trunk-jpl/test/NightlyRun/test417.m M /issm/trunk-jpl/test/NightlyRun/test419.m M /issm/trunk-jpl/test/NightlyRun/test420.m M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test422.m M /issm/trunk-jpl/test/NightlyRun/test423.m M /issm/trunk-jpl/test/NightlyRun/test424.m M /issm/trunk-jpl/test/NightlyRun/test425.m M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test427.m M /issm/trunk-jpl/test/NightlyRun/test428.m M /issm/trunk-jpl/test/NightlyRun/test429.m M /issm/trunk-jpl/test/NightlyRun/test430.m M /issm/trunk-jpl/test/NightlyRun/test431.m M /issm/trunk-jpl/test/NightlyRun/test432.m M /issm/trunk-jpl/test/NightlyRun/test501.m M /issm/trunk-jpl/test/NightlyRun/test502.m M /issm/trunk-jpl/test/NightlyRun/test502.py M /issm/trunk-jpl/test/NightlyRun/test503.m M /issm/trunk-jpl/test/NightlyRun/test503.py M /issm/trunk-jpl/test/NightlyRun/test504.m M /issm/trunk-jpl/test/NightlyRun/test504.py M /issm/trunk-jpl/test/NightlyRun/test505.m M /issm/trunk-jpl/test/NightlyRun/test505.py M /issm/trunk-jpl/test/NightlyRun/test506.m M /issm/trunk-jpl/test/NightlyRun/test506.py M /issm/trunk-jpl/test/NightlyRun/test507.m M /issm/trunk-jpl/test/NightlyRun/test507.py M /issm/trunk-jpl/test/NightlyRun/test508.m M /issm/trunk-jpl/test/NightlyRun/test508.py M /issm/trunk-jpl/test/NightlyRun/test509.m M /issm/trunk-jpl/test/NightlyRun/test509.py M /issm/trunk-jpl/test/NightlyRun/test510.m M /issm/trunk-jpl/test/NightlyRun/test510.py M /issm/trunk-jpl/test/NightlyRun/test511.m M /issm/trunk-jpl/test/NightlyRun/test512.m M /issm/trunk-jpl/test/NightlyRun/test513.m M /issm/trunk-jpl/test/NightlyRun/test513.py M /issm/trunk-jpl/test/NightlyRun/test515.m M /issm/trunk-jpl/test/NightlyRun/test515.py M /issm/trunk-jpl/test/NightlyRun/test516.m M /issm/trunk-jpl/test/NightlyRun/test601.m M /issm/trunk-jpl/test/NightlyRun/test602.m M /issm/trunk-jpl/test/NightlyRun/test603.m M /issm/trunk-jpl/test/NightlyRun/test604.m M /issm/trunk-jpl/test/NightlyRun/test605.m M /issm/trunk-jpl/test/NightlyRun/test606.m M /issm/trunk-jpl/test/NightlyRun/test607.m M /issm/trunk-jpl/test/NightlyRun/test608.m M /issm/trunk-jpl/test/NightlyRun/test609.m M /issm/trunk-jpl/test/NightlyRun/test610.m M /issm/trunk-jpl/test/NightlyRun/test611.m M /issm/trunk-jpl/test/NightlyRun/test612.m M /issm/trunk-jpl/test/NightlyRun/test613.m\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics on matlab file (model -> model(); Enum -> Enum())\\
+\vspace{3em}
+
+\noindent \textbf{Change \#261} with diff file ISSM-13664-13665.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/ad.m M /issm/trunk-jpl/test/NightlyRun/ad\_maxalloc.m M /issm/trunk-jpl/test/NightlyRun/test1106.m M /issm/trunk-jpl/test/NightlyRun/test1201.m M /issm/trunk-jpl/test/NightlyRun/test1208.m M /issm/trunk-jpl/test/NightlyRun/test1501.m M /issm/trunk-jpl/test/NightlyRun/test1502.m M /issm/trunk-jpl/test/NightlyRun/test1601.m M /issm/trunk-jpl/test/NightlyRun/test1602.m M /issm/trunk-jpl/test/NightlyRun/test3001.m M /issm/trunk-jpl/test/NightlyRun/test3002.m M /issm/trunk-jpl/test/NightlyRun/test3003.m M /issm/trunk-jpl/test/NightlyRun/test3004.m M /issm/trunk-jpl/test/NightlyRun/test3005.m M /issm/trunk-jpl/test/NightlyRun/test3006.m M /issm/trunk-jpl/test/NightlyRun/test3007.m M /issm/trunk-jpl/test/NightlyRun/test3008.m M /issm/trunk-jpl/test/NightlyRun/test3009.m M /issm/trunk-jpl/test/NightlyRun/test3010.m M /issm/trunk-jpl/test/NightlyRun/test3015.m M /issm/trunk-jpl/test/NightlyRun/test3019.m M /issm/trunk-jpl/test/NightlyRun/test3020.m M /issm/trunk-jpl/test/NightlyRun/test328.m M /issm/trunk-jpl/test/NightlyRun/test329.m M /issm/trunk-jpl/test/NightlyRun/test401.m M /issm/trunk-jpl/test/NightlyRun/test402.m M /issm/trunk-jpl/test/NightlyRun/test403.m M /issm/trunk-jpl/test/NightlyRun/test404.m M /issm/trunk-jpl/test/NightlyRun/test405.m M /issm/trunk-jpl/test/NightlyRun/test406.m M /issm/trunk-jpl/test/NightlyRun/test407.m M /issm/trunk-jpl/test/NightlyRun/test408.m M /issm/trunk-jpl/test/NightlyRun/test409.m M /issm/trunk-jpl/test/NightlyRun/test410.m M /issm/trunk-jpl/test/NightlyRun/test411.m M /issm/trunk-jpl/test/NightlyRun/test412.m M /issm/trunk-jpl/test/NightlyRun/test413.m M /issm/trunk-jpl/test/NightlyRun/test414.m M /issm/trunk-jpl/test/NightlyRun/test415.m M /issm/trunk-jpl/test/NightlyRun/test416.m M /issm/trunk-jpl/test/NightlyRun/test417.m M /issm/trunk-jpl/test/NightlyRun/test418.m M /issm/trunk-jpl/test/NightlyRun/test419.m M /issm/trunk-jpl/test/NightlyRun/test420.m M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test422.m M /issm/trunk-jpl/test/NightlyRun/test423.m M /issm/trunk-jpl/test/NightlyRun/test424.m M /issm/trunk-jpl/test/NightlyRun/test425.m M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test427.m M /issm/trunk-jpl/test/NightlyRun/test428.m M /issm/trunk-jpl/test/NightlyRun/test429.m M /issm/trunk-jpl/test/NightlyRun/test430.m M /issm/trunk-jpl/test/NightlyRun/test431.m M /issm/trunk-jpl/test/NightlyRun/test432.m M /issm/trunk-jpl/test/NightlyRun/test501.m M /issm/trunk-jpl/test/NightlyRun/test502.m M /issm/trunk-jpl/test/NightlyRun/test503.m M /issm/trunk-jpl/test/NightlyRun/test504.m M /issm/trunk-jpl/test/NightlyRun/test505.m M /issm/trunk-jpl/test/NightlyRun/test506.m M /issm/trunk-jpl/test/NightlyRun/test507.m M /issm/trunk-jpl/test/NightlyRun/test508.m M /issm/trunk-jpl/test/NightlyRun/test509.m M /issm/trunk-jpl/test/NightlyRun/test510.m M /issm/trunk-jpl/test/NightlyRun/test511.m M /issm/trunk-jpl/test/NightlyRun/test512.m M /issm/trunk-jpl/test/NightlyRun/test512.py M /issm/trunk-jpl/test/NightlyRun/test513.m M /issm/trunk-jpl/test/NightlyRun/test515.m M /issm/trunk-jpl/test/NightlyRun/test516.m M /issm/trunk-jpl/test/NightlyRun/test601.m M /issm/trunk-jpl/test/NightlyRun/test602.m M /issm/trunk-jpl/test/NightlyRun/test603.m M /issm/trunk-jpl/test/NightlyRun/test604.m M /issm/trunk-jpl/test/NightlyRun/test605.m M /issm/trunk-jpl/test/NightlyRun/test606.m M /issm/trunk-jpl/test/NightlyRun/test607.m M /issm/trunk-jpl/test/NightlyRun/test608.m M /issm/trunk-jpl/test/NightlyRun/test609.m M /issm/trunk-jpl/test/NightlyRun/test610.m M /issm/trunk-jpl/test/NightlyRun/test611.m M /issm/trunk-jpl/test/NightlyRun/test612.m M /issm/trunk-jpl/test/NightlyRun/test613.m\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics on matlab file (model -> model())\\
+\vspace{3em}
+
+\noindent \textbf{Change \#262} with diff file ISSM-13665-13666.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test512.py\\
+Export determination: 6. \\
+Rationale: reverted back\\
+\vspace{3em}
+
+\noindent \textbf{Change \#263} with diff file ISSM-13666-13667.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test512.m\\
+Export determination: 6. \\
+Rationale: CHG: minor cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#264} with diff file ISSM-13667-13668.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test502.m\\
+Export determination: 6. \\
+Rationale: CHG: minor typo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#265} with diff file ISSM-13668-13669.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test601.m A /issm/trunk-jpl/test/NightlyRun/test601.py M /issm/trunk-jpl/test/NightlyRun/test602.m A /issm/trunk-jpl/test/NightlyRun/test602.py M /issm/trunk-jpl/test/NightlyRun/test603.m A /issm/trunk-jpl/test/NightlyRun/test603.py M /issm/trunk-jpl/test/NightlyRun/test604.m A /issm/trunk-jpl/test/NightlyRun/test604.py M /issm/trunk-jpl/test/NightlyRun/test605.m A /issm/trunk-jpl/test/NightlyRun/test605.py M /issm/trunk-jpl/test/NightlyRun/test606.m A /issm/trunk-jpl/test/NightlyRun/test606.py M /issm/trunk-jpl/test/NightlyRun/test607.m A /issm/trunk-jpl/test/NightlyRun/test607.py M /issm/trunk-jpl/test/NightlyRun/test608.m A /issm/trunk-jpl/test/NightlyRun/test608.py M /issm/trunk-jpl/test/NightlyRun/test609.m A /issm/trunk-jpl/test/NightlyRun/test609.py\\
+Export determination: 6. \\
+Rationale: NEW: added test601 to 609\\
+\vspace{3em}
+
+\noindent \textbf{Change \#266} with diff file ISSM-13669-13670.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test1401.m M /issm/trunk-jpl/test/NightlyRun/test1402.m M /issm/trunk-jpl/test/NightlyRun/test272.m M /issm/trunk-jpl/test/NightlyRun/test415.m M /issm/trunk-jpl/test/NightlyRun/test416.m M /issm/trunk-jpl/test/NightlyRun/test511.m M /issm/trunk-jpl/test/NightlyRun/test610.m A /issm/trunk-jpl/test/NightlyRun/test610.py M /issm/trunk-jpl/test/NightlyRun/test611.m A /issm/trunk-jpl/test/NightlyRun/test611.py M /issm/trunk-jpl/test/NightlyRun/test612.m A /issm/trunk-jpl/test/NightlyRun/test612.py M /issm/trunk-jpl/test/NightlyRun/test613.m\\
+Export determination: 6. \\
+Rationale: NEW added tests 610 611 and 612\\
+\vspace{3em}
+
+\noindent \textbf{Change \#267} with diff file ISSM-13670-13671.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/ad.m M /issm/trunk-jpl/test/NightlyRun/ad\_maxalloc.m M /issm/trunk-jpl/test/NightlyRun/test101.m M /issm/trunk-jpl/test/NightlyRun/test102.m M /issm/trunk-jpl/test/NightlyRun/test103.m M /issm/trunk-jpl/test/NightlyRun/test104.m M /issm/trunk-jpl/test/NightlyRun/test105.m M /issm/trunk-jpl/test/NightlyRun/test106.m M /issm/trunk-jpl/test/NightlyRun/test107.m M /issm/trunk-jpl/test/NightlyRun/test108.m M /issm/trunk-jpl/test/NightlyRun/test109.m M /issm/trunk-jpl/test/NightlyRun/test110.m M /issm/trunk-jpl/test/NightlyRun/test1106.m M /issm/trunk-jpl/test/NightlyRun/test111.m M /issm/trunk-jpl/test/NightlyRun/test1110.m M /issm/trunk-jpl/test/NightlyRun/test112.m M /issm/trunk-jpl/test/NightlyRun/test113.m M /issm/trunk-jpl/test/NightlyRun/test114.m M /issm/trunk-jpl/test/NightlyRun/test115.m M /issm/trunk-jpl/test/NightlyRun/test116.m M /issm/trunk-jpl/test/NightlyRun/test117.m M /issm/trunk-jpl/test/NightlyRun/test118.m M /issm/trunk-jpl/test/NightlyRun/test120.m M /issm/trunk-jpl/test/NightlyRun/test1202.m M /issm/trunk-jpl/test/NightlyRun/test1203.m M /issm/trunk-jpl/test/NightlyRun/test1204.m M /issm/trunk-jpl/test/NightlyRun/test121.m M /issm/trunk-jpl/test/NightlyRun/test122.m M /issm/trunk-jpl/test/NightlyRun/test1301.m M /issm/trunk-jpl/test/NightlyRun/test1302.m M /issm/trunk-jpl/test/NightlyRun/test1303.m M /issm/trunk-jpl/test/NightlyRun/test1304.m M /issm/trunk-jpl/test/NightlyRun/test1501.m M /issm/trunk-jpl/test/NightlyRun/test1502.m M /issm/trunk-jpl/test/NightlyRun/test1601.m M /issm/trunk-jpl/test/NightlyRun/test1602.m M /issm/trunk-jpl/test/NightlyRun/test201.m M /issm/trunk-jpl/test/NightlyRun/test202.m M /issm/trunk-jpl/test/NightlyRun/test203.m M /issm/trunk-jpl/test/NightlyRun/test204.m M /issm/trunk-jpl/test/NightlyRun/test205.m M /issm/trunk-jpl/test/NightlyRun/test206.m M /issm/trunk-jpl/test/NightlyRun/test207.m M /issm/trunk-jpl/test/NightlyRun/test208.m M /issm/trunk-jpl/test/NightlyRun/test209.m M /issm/trunk-jpl/test/NightlyRun/test210.m M /issm/trunk-jpl/test/NightlyRun/test211.m M /issm/trunk-jpl/test/NightlyRun/test212.m M /issm/trunk-jpl/test/NightlyRun/test213.m M /issm/trunk-jpl/test/NightlyRun/test214.m M /issm/trunk-jpl/test/NightlyRun/test215.m M /issm/trunk-jpl/test/NightlyRun/test216.m M /issm/trunk-jpl/test/NightlyRun/test217.m M /issm/trunk-jpl/test/NightlyRun/test219.m M /issm/trunk-jpl/test/NightlyRun/test220.m M /issm/trunk-jpl/test/NightlyRun/test221.m M /issm/trunk-jpl/test/NightlyRun/test222.m M /issm/trunk-jpl/test/NightlyRun/test223.m M /issm/trunk-jpl/test/NightlyRun/test224.m M /issm/trunk-jpl/test/NightlyRun/test225.m M /issm/trunk-jpl/test/NightlyRun/test226.m M /issm/trunk-jpl/test/NightlyRun/test227.m M /issm/trunk-jpl/test/NightlyRun/test228.m M /issm/trunk-jpl/test/NightlyRun/test229.m M /issm/trunk-jpl/test/NightlyRun/test230.m M /issm/trunk-jpl/test/NightlyRun/test231.m M /issm/trunk-jpl/test/NightlyRun/test232.m M /issm/trunk-jpl/test/NightlyRun/test233.m M /issm/trunk-jpl/test/NightlyRun/test234.m M /issm/trunk-jpl/test/NightlyRun/test235.m M /issm/trunk-jpl/test/NightlyRun/test236.m M /issm/trunk-jpl/test/NightlyRun/test237.m M /issm/trunk-jpl/test/NightlyRun/test270.m M /issm/trunk-jpl/test/NightlyRun/test272.m M /issm/trunk-jpl/test/NightlyRun/test274.m M /issm/trunk-jpl/test/NightlyRun/test3001.m M /issm/trunk-jpl/test/NightlyRun/test3002.m M /issm/trunk-jpl/test/NightlyRun/test3003.m M /issm/trunk-jpl/test/NightlyRun/test3004.m M /issm/trunk-jpl/test/NightlyRun/test3005.m M /issm/trunk-jpl/test/NightlyRun/test3006.m M /issm/trunk-jpl/test/NightlyRun/test3007.m M /issm/trunk-jpl/test/NightlyRun/test3008.m M /issm/trunk-jpl/test/NightlyRun/test3009.m M /issm/trunk-jpl/test/NightlyRun/test301.m M /issm/trunk-jpl/test/NightlyRun/test3010.m M /issm/trunk-jpl/test/NightlyRun/test3015.m M /issm/trunk-jpl/test/NightlyRun/test3019.m M /issm/trunk-jpl/test/NightlyRun/test302.m M /issm/trunk-jpl/test/NightlyRun/test3020.m M /issm/trunk-jpl/test/NightlyRun/test303.m M /issm/trunk-jpl/test/NightlyRun/test304.m M /issm/trunk-jpl/test/NightlyRun/test305.m M /issm/trunk-jpl/test/NightlyRun/test306.m M /issm/trunk-jpl/test/NightlyRun/test307.m M /issm/trunk-jpl/test/NightlyRun/test308.m M /issm/trunk-jpl/test/NightlyRun/test309.m M /issm/trunk-jpl/test/NightlyRun/test310.m M /issm/trunk-jpl/test/NightlyRun/test311.m M /issm/trunk-jpl/test/NightlyRun/test312.m M /issm/trunk-jpl/test/NightlyRun/test313.m M /issm/trunk-jpl/test/NightlyRun/test314.m M /issm/trunk-jpl/test/NightlyRun/test315.m M /issm/trunk-jpl/test/NightlyRun/test316.m M /issm/trunk-jpl/test/NightlyRun/test317.m M /issm/trunk-jpl/test/NightlyRun/test318.m M /issm/trunk-jpl/test/NightlyRun/test319.m M /issm/trunk-jpl/test/NightlyRun/test320.m M /issm/trunk-jpl/test/NightlyRun/test321.m M /issm/trunk-jpl/test/NightlyRun/test322.m M /issm/trunk-jpl/test/NightlyRun/test323.m M /issm/trunk-jpl/test/NightlyRun/test324.m M /issm/trunk-jpl/test/NightlyRun/test325.m M /issm/trunk-jpl/test/NightlyRun/test326.m M /issm/trunk-jpl/test/NightlyRun/test327.m M /issm/trunk-jpl/test/NightlyRun/test328.m M /issm/trunk-jpl/test/NightlyRun/test329.m M /issm/trunk-jpl/test/NightlyRun/test401.m M /issm/trunk-jpl/test/NightlyRun/test402.m M /issm/trunk-jpl/test/NightlyRun/test403.m M /issm/trunk-jpl/test/NightlyRun/test404.m M /issm/trunk-jpl/test/NightlyRun/test405.m M /issm/trunk-jpl/test/NightlyRun/test406.m M /issm/trunk-jpl/test/NightlyRun/test407.m M /issm/trunk-jpl/test/NightlyRun/test408.m M /issm/trunk-jpl/test/NightlyRun/test409.m M /issm/trunk-jpl/test/NightlyRun/test410.m M /issm/trunk-jpl/test/NightlyRun/test411.m M /issm/trunk-jpl/test/NightlyRun/test412.m M /issm/trunk-jpl/test/NightlyRun/test413.m M /issm/trunk-jpl/test/NightlyRun/test414.m M /issm/trunk-jpl/test/NightlyRun/test415.m M /issm/trunk-jpl/test/NightlyRun/test416.m M /issm/trunk-jpl/test/NightlyRun/test417.m M /issm/trunk-jpl/test/NightlyRun/test418.m M /issm/trunk-jpl/test/NightlyRun/test419.m M /issm/trunk-jpl/test/NightlyRun/test420.m M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test422.m M /issm/trunk-jpl/test/NightlyRun/test424.m M /issm/trunk-jpl/test/NightlyRun/test425.m M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test427.m M /issm/trunk-jpl/test/NightlyRun/test428.m M /issm/trunk-jpl/test/NightlyRun/test429.m M /issm/trunk-jpl/test/NightlyRun/test430.m M /issm/trunk-jpl/test/NightlyRun/test431.m M /issm/trunk-jpl/test/NightlyRun/test432.m M /issm/trunk-jpl/test/NightlyRun/test502.m\\
+Export determination: 6. \\
+Rationale: CHG: added point at the end of triangle command, resolution is a float\\
+\vspace{3em}
+
+\noindent \textbf{Change \#268} with diff file ISSM-13671-13672.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test102.m M /issm/trunk-jpl/test/NightlyRun/test103.m M /issm/trunk-jpl/test/NightlyRun/test104.m M /issm/trunk-jpl/test/NightlyRun/test107.m M /issm/trunk-jpl/test/NightlyRun/test108.m M /issm/trunk-jpl/test/NightlyRun/test109.m M /issm/trunk-jpl/test/NightlyRun/test1101.m M /issm/trunk-jpl/test/NightlyRun/test1102.m M /issm/trunk-jpl/test/NightlyRun/test1103.m M /issm/trunk-jpl/test/NightlyRun/test1104.m M /issm/trunk-jpl/test/NightlyRun/test1105.m M /issm/trunk-jpl/test/NightlyRun/test1106.m M /issm/trunk-jpl/test/NightlyRun/test1107.m M /issm/trunk-jpl/test/NightlyRun/test1108.m M /issm/trunk-jpl/test/NightlyRun/test1109.m M /issm/trunk-jpl/test/NightlyRun/test111.m M /issm/trunk-jpl/test/NightlyRun/test1110.m M /issm/trunk-jpl/test/NightlyRun/test113.m M /issm/trunk-jpl/test/NightlyRun/test115.m M /issm/trunk-jpl/test/NightlyRun/test117.m M /issm/trunk-jpl/test/NightlyRun/test120.m M /issm/trunk-jpl/test/NightlyRun/test1205.m M /issm/trunk-jpl/test/NightlyRun/test1206.m M /issm/trunk-jpl/test/NightlyRun/test1207.m M /issm/trunk-jpl/test/NightlyRun/test1208.m M /issm/trunk-jpl/test/NightlyRun/test121.m M /issm/trunk-jpl/test/NightlyRun/test122.m M /issm/trunk-jpl/test/NightlyRun/test1301.m M /issm/trunk-jpl/test/NightlyRun/test1302.m M /issm/trunk-jpl/test/NightlyRun/test1303.m M /issm/trunk-jpl/test/NightlyRun/test1304.m M /issm/trunk-jpl/test/NightlyRun/test1502.m M /issm/trunk-jpl/test/NightlyRun/test1602.m M /issm/trunk-jpl/test/NightlyRun/test202.m M /issm/trunk-jpl/test/NightlyRun/test203.m M /issm/trunk-jpl/test/NightlyRun/test204.m M /issm/trunk-jpl/test/NightlyRun/test205.m M /issm/trunk-jpl/test/NightlyRun/test206.m M /issm/trunk-jpl/test/NightlyRun/test207.m M /issm/trunk-jpl/test/NightlyRun/test209.m M /issm/trunk-jpl/test/NightlyRun/test210.m M /issm/trunk-jpl/test/NightlyRun/test211.m M /issm/trunk-jpl/test/NightlyRun/test213.m M /issm/trunk-jpl/test/NightlyRun/test214.m M /issm/trunk-jpl/test/NightlyRun/test215.m M /issm/trunk-jpl/test/NightlyRun/test219.m M /issm/trunk-jpl/test/NightlyRun/test220.m M /issm/trunk-jpl/test/NightlyRun/test221.m M /issm/trunk-jpl/test/NightlyRun/test224.m M /issm/trunk-jpl/test/NightlyRun/test225.m M /issm/trunk-jpl/test/NightlyRun/test227.m M /issm/trunk-jpl/test/NightlyRun/test230.m M /issm/trunk-jpl/test/NightlyRun/test231.m M /issm/trunk-jpl/test/NightlyRun/test232.m M /issm/trunk-jpl/test/NightlyRun/test233.m M /issm/trunk-jpl/test/NightlyRun/test237.m M /issm/trunk-jpl/test/NightlyRun/test3002.m M /issm/trunk-jpl/test/NightlyRun/test3003.m M /issm/trunk-jpl/test/NightlyRun/test3004.m M /issm/trunk-jpl/test/NightlyRun/test3007.m M /issm/trunk-jpl/test/NightlyRun/test3008.m M /issm/trunk-jpl/test/NightlyRun/test3009.m M /issm/trunk-jpl/test/NightlyRun/test304.m M /issm/trunk-jpl/test/NightlyRun/test305.m M /issm/trunk-jpl/test/NightlyRun/test306.m M /issm/trunk-jpl/test/NightlyRun/test307.m M /issm/trunk-jpl/test/NightlyRun/test308.m M /issm/trunk-jpl/test/NightlyRun/test311.m M /issm/trunk-jpl/test/NightlyRun/test312.m M /issm/trunk-jpl/test/NightlyRun/test313.m M /issm/trunk-jpl/test/NightlyRun/test315.m M /issm/trunk-jpl/test/NightlyRun/test317.m M /issm/trunk-jpl/test/NightlyRun/test318.m M /issm/trunk-jpl/test/NightlyRun/test320.m M /issm/trunk-jpl/test/NightlyRun/test321.m M /issm/trunk-jpl/test/NightlyRun/test322.m M /issm/trunk-jpl/test/NightlyRun/test324.m M /issm/trunk-jpl/test/NightlyRun/test325.m M /issm/trunk-jpl/test/NightlyRun/test326.m M /issm/trunk-jpl/test/NightlyRun/test327.m M /issm/trunk-jpl/test/NightlyRun/test329.m M /issm/trunk-jpl/test/NightlyRun/test402.m M /issm/trunk-jpl/test/NightlyRun/test403.m M /issm/trunk-jpl/test/NightlyRun/test404.m M /issm/trunk-jpl/test/NightlyRun/test405.m M /issm/trunk-jpl/test/NightlyRun/test406.m M /issm/trunk-jpl/test/NightlyRun/test407.m M /issm/trunk-jpl/test/NightlyRun/test409.m M /issm/trunk-jpl/test/NightlyRun/test410.m M /issm/trunk-jpl/test/NightlyRun/test411.m M /issm/trunk-jpl/test/NightlyRun/test415.m M /issm/trunk-jpl/test/NightlyRun/test416.m M /issm/trunk-jpl/test/NightlyRun/test419.m M /issm/trunk-jpl/test/NightlyRun/test421.m M /issm/trunk-jpl/test/NightlyRun/test422.m M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test427.m M /issm/trunk-jpl/test/NightlyRun/test429.m M /issm/trunk-jpl/test/NightlyRun/test430.m M /issm/trunk-jpl/test/NightlyRun/test431.m M /issm/trunk-jpl/test/NightlyRun/test432.m M /issm/trunk-jpl/test/NightlyRun/test502.m M /issm/trunk-jpl/test/NightlyRun/test503.m M /issm/trunk-jpl/test/NightlyRun/test505.m M /issm/trunk-jpl/test/NightlyRun/test506.m M /issm/trunk-jpl/test/NightlyRun/test507.m M /issm/trunk-jpl/test/NightlyRun/test508.m M /issm/trunk-jpl/test/NightlyRun/test509.m M /issm/trunk-jpl/test/NightlyRun/test510.m M /issm/trunk-jpl/test/NightlyRun/test511.m M /issm/trunk-jpl/test/NightlyRun/test512.m M /issm/trunk-jpl/test/NightlyRun/test513.m M /issm/trunk-jpl/test/NightlyRun/test515.m M /issm/trunk-jpl/test/NightlyRun/test516.m M /issm/trunk-jpl/test/NightlyRun/test603.m M /issm/trunk-jpl/test/NightlyRun/test605.m M /issm/trunk-jpl/test/NightlyRun/test607.m M /issm/trunk-jpl/test/NightlyRun/test610.m\\
+Export determination: 6. \\
+Rationale: CHG: added point at the end of extrude command, extrude exponent is a float and not an integer\\
+\vspace{3em}
+
+\noindent \textbf{Change \#269} with diff file ISSM-13672-13673.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1301.py M /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1302.py M /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1303.py M /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1304.py M /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1502.py M /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test1602.py M /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3002.py M /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3003.py M /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3004.py M /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3007.py M /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3008.py M /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test3009.py M /issm/trunk-jpl/test/NightlyRun/test102.py M /issm/trunk-jpl/test/NightlyRun/test103.py M /issm/trunk-jpl/test/NightlyRun/test104.py M /issm/trunk-jpl/test/NightlyRun/test107.py M /issm/trunk-jpl/test/NightlyRun/test108.py M /issm/trunk-jpl/test/NightlyRun/test109.py M /issm/trunk-jpl/test/NightlyRun/test111.py M /issm/trunk-jpl/test/NightlyRun/test113.py M /issm/trunk-jpl/test/NightlyRun/test115.py M /issm/trunk-jpl/test/NightlyRun/test117.py M /issm/trunk-jpl/test/NightlyRun/test120.py M /issm/trunk-jpl/test/NightlyRun/test121.py M /issm/trunk-jpl/test/NightlyRun/test122.py M /issm/trunk-jpl/test/NightlyRun/test202.py M /issm/trunk-jpl/test/NightlyRun/test203.py M /issm/trunk-jpl/test/NightlyRun/test204.py M /issm/trunk-jpl/test/NightlyRun/test205.py M /issm/trunk-jpl/test/NightlyRun/test206.py M /issm/trunk-jpl/test/NightlyRun/test207.py M /issm/trunk-jpl/test/NightlyRun/test209.py M /issm/trunk-jpl/test/NightlyRun/test210.py M /issm/trunk-jpl/test/NightlyRun/test211.py M /issm/trunk-jpl/test/NightlyRun/test213.py M /issm/trunk-jpl/test/NightlyRun/test214.py M /issm/trunk-jpl/test/NightlyRun/test215.py M /issm/trunk-jpl/test/NightlyRun/test219.py M /issm/trunk-jpl/test/NightlyRun/test220.py M /issm/trunk-jpl/test/NightlyRun/test221.py M /issm/trunk-jpl/test/NightlyRun/test224.py M /issm/trunk-jpl/test/NightlyRun/test225.py M /issm/trunk-jpl/test/NightlyRun/test227.py M /issm/trunk-jpl/test/NightlyRun/test230.py M /issm/trunk-jpl/test/NightlyRun/test231.py M /issm/trunk-jpl/test/NightlyRun/test232.py M /issm/trunk-jpl/test/NightlyRun/test233.py M /issm/trunk-jpl/test/NightlyRun/test237.py M /issm/trunk-jpl/test/NightlyRun/test3002.py M /issm/trunk-jpl/test/NightlyRun/test3003.py M /issm/trunk-jpl/test/NightlyRun/test3004.py M /issm/trunk-jpl/test/NightlyRun/test3007.py M /issm/trunk-jpl/test/NightlyRun/test3008.py M /issm/trunk-jpl/test/NightlyRun/test3009.py M /issm/trunk-jpl/test/NightlyRun/test304.py M /issm/trunk-jpl/test/NightlyRun/test305.py M /issm/trunk-jpl/test/NightlyRun/test306.py M /issm/trunk-jpl/test/NightlyRun/test307.py M /issm/trunk-jpl/test/NightlyRun/test308.py M /issm/trunk-jpl/test/NightlyRun/test311.py M /issm/trunk-jpl/test/NightlyRun/test312.py M /issm/trunk-jpl/test/NightlyRun/test313.py M /issm/trunk-jpl/test/NightlyRun/test315.py M /issm/trunk-jpl/test/NightlyRun/test317.py M /issm/trunk-jpl/test/NightlyRun/test318.py M /issm/trunk-jpl/test/NightlyRun/test320.py M /issm/trunk-jpl/test/NightlyRun/test321.py M /issm/trunk-jpl/test/NightlyRun/test322.py M /issm/trunk-jpl/test/NightlyRun/test324.py M /issm/trunk-jpl/test/NightlyRun/test325.py M /issm/trunk-jpl/test/NightlyRun/test326.py M /issm/trunk-jpl/test/NightlyRun/test327.py M /issm/trunk-jpl/test/NightlyRun/test502.py M /issm/trunk-jpl/test/NightlyRun/test503.py M /issm/trunk-jpl/test/NightlyRun/test505.py M /issm/trunk-jpl/test/NightlyRun/test506.py M /issm/trunk-jpl/test/NightlyRun/test507.py M /issm/trunk-jpl/test/NightlyRun/test508.py M /issm/trunk-jpl/test/NightlyRun/test509.py M /issm/trunk-jpl/test/NightlyRun/test510.py M /issm/trunk-jpl/test/NightlyRun/test512.py M /issm/trunk-jpl/test/NightlyRun/test513.py M /issm/trunk-jpl/test/NightlyRun/test515.py M /issm/trunk-jpl/test/NightlyRun/test603.py M /issm/trunk-jpl/test/NightlyRun/test605.py M /issm/trunk-jpl/test/NightlyRun/test607.py M /issm/trunk-jpl/test/NightlyRun/test610.py\\
+Export determination: 6. \\
+Rationale: CHG: added point at the end of extrude command, extrude exponent is a float and not an integer\\
+\vspace{3em}
+
+\noindent \textbf{Change \#270} with diff file ISSM-13673-13674.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test311.m M /issm/trunk-jpl/test/NightlyRun/test311.py M /issm/trunk-jpl/test/NightlyRun/test315.m M /issm/trunk-jpl/test/NightlyRun/test315.py M /issm/trunk-jpl/test/NightlyRun/test324.m M /issm/trunk-jpl/test/NightlyRun/test324.py M /issm/trunk-jpl/test/NightlyRun/test502.m M /issm/trunk-jpl/test/NightlyRun/test502.py M /issm/trunk-jpl/test/NightlyRun/test503.m M /issm/trunk-jpl/test/NightlyRun/test505.py M /issm/trunk-jpl/test/NightlyRun/test506.py M /issm/trunk-jpl/test/NightlyRun/test507.py M /issm/trunk-jpl/test/NightlyRun/test509.py M /issm/trunk-jpl/test/NightlyRun/test510.py M /issm/trunk-jpl/test/NightlyRun/test512.py M /issm/trunk-jpl/test/NightlyRun/test603.py M /issm/trunk-jpl/test/NightlyRun/test607.py M /issm/trunk-jpl/test/NightlyRun/test610.py\\
+Export determination: 6. \\
+Rationale: CHG: changing exponents\\
+\vspace{3em}
+
+\noindent \textbf{Change \#271} with diff file ISSM-13674-13675.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test315.py M /issm/trunk-jpl/test/NightlyRun/test324.py M /issm/trunk-jpl/test/NightlyRun/test505.m M /issm/trunk-jpl/test/NightlyRun/test506.m M /issm/trunk-jpl/test/NightlyRun/test507.m M /issm/trunk-jpl/test/NightlyRun/test509.m M /issm/trunk-jpl/test/NightlyRun/test510.m M /issm/trunk-jpl/test/NightlyRun/test511.m M /issm/trunk-jpl/test/NightlyRun/test512.m M /issm/trunk-jpl/test/NightlyRun/test513.m M /issm/trunk-jpl/test/NightlyRun/test515.m M /issm/trunk-jpl/test/NightlyRun/test516.m M /issm/trunk-jpl/test/NightlyRun/test603.m M /issm/trunk-jpl/test/NightlyRun/test607.m M /issm/trunk-jpl/test/NightlyRun/test610.m\\
+Export determination: 6. \\
+Rationale: CHG: changing exponents\\
+\vspace{3em}
+
+\noindent \textbf{Change \#272} with diff file ISSM-13675-13676.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/79North.par A /issm/trunk-jpl/test/Par/79North.py\\
+Export determination: 6. \\
+Rationale: NEW: added 79North.py\\
+\vspace{3em}
+
+\noindent \textbf{Change \#273} with diff file ISSM-13676-13677.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/79North.py M /issm/trunk-jpl/test/Par/SquareSheetConstrained.py M /issm/trunk-jpl/test/Par/SquareSheetShelf.par A /issm/trunk-jpl/test/Par/SquareSheetShelf.py\\
+Export determination: 6. \\
+Rationale: NEW: added SquareSheetShelf.py\\
+\vspace{3em}
+
+\noindent \textbf{Change \#274} with diff file ISSM-13677-13678.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/NightlyRun/test401.py A /issm/trunk-jpl/test/NightlyRun/test402.py A /issm/trunk-jpl/test/NightlyRun/test403.py A /issm/trunk-jpl/test/NightlyRun/test404.py A /issm/trunk-jpl/test/NightlyRun/test405.py M /issm/trunk-jpl/test/NightlyRun/test406.m\\
+Export determination: 6. \\
+Rationale: NEW: added test401.py test402.py test403.py test404.py test405.py\\
+\vspace{3em}
+
+\noindent \textbf{Change \#275} with diff file ISSM-13678-13679.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Par/SquareSheetShelf.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed SquareSheetShelf.py (needed to reshape thickness)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#276} with diff file ISSM-13679-13680.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test406.m A /issm/trunk-jpl/test/NightlyRun/test406.py A /issm/trunk-jpl/test/NightlyRun/test407.py A /issm/trunk-jpl/test/NightlyRun/test408.py A /issm/trunk-jpl/test/NightlyRun/test409.py A /issm/trunk-jpl/test/NightlyRun/test410.py A /issm/trunk-jpl/test/NightlyRun/test411.py M /issm/trunk-jpl/test/NightlyRun/test415.m A /issm/trunk-jpl/test/NightlyRun/test415.py M /issm/trunk-jpl/test/NightlyRun/test416.m A /issm/trunk-jpl/test/NightlyRun/test416.py A /issm/trunk-jpl/test/NightlyRun/test419.py\\
+Export determination: 6. \\
+Rationale: NEW: added more python tests, from 405 to 419 (some are missing due to dakota)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#277} with diff file ISSM-13680-13681.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test508.m M /issm/trunk-jpl/test/NightlyRun/test508.py M /issm/trunk-jpl/test/NightlyRun/test605.m M /issm/trunk-jpl/test/NightlyRun/test605.py\\
+Export determination: 6. \\
+Rationale: BUG: some wrong exponents\\
+\vspace{3em}
+
+\noindent \textbf{Change \#278} with diff file ISSM-13681-13682.diff: \\
+Function name: \\
+A /issm/trunk-jpl/test/NightlyRun/test421.py A /issm/trunk-jpl/test/NightlyRun/test422.py M /issm/trunk-jpl/test/NightlyRun/test423.m M /issm/trunk-jpl/test/NightlyRun/test424.m A /issm/trunk-jpl/test/NightlyRun/test424.py A /issm/trunk-jpl/test/NightlyRun/test424.py1 M /issm/trunk-jpl/test/NightlyRun/test425.m A /issm/trunk-jpl/test/NightlyRun/test425.py M /issm/trunk-jpl/test/NightlyRun/test426.m A /issm/trunk-jpl/test/NightlyRun/test426.py M /issm/trunk-jpl/test/NightlyRun/test427.m A /issm/trunk-jpl/test/NightlyRun/test427.py A /issm/trunk-jpl/test/NightlyRun/test427.py1 A /issm/trunk-jpl/test/NightlyRun/test428.py A /issm/trunk-jpl/test/NightlyRun/test429.py A /issm/trunk-jpl/test/NightlyRun/test430.py M /issm/trunk-jpl/test/NightlyRun/test431.m A /issm/trunk-jpl/test/NightlyRun/test431.py M /issm/trunk-jpl/test/NightlyRun/test432.m A /issm/trunk-jpl/test/NightlyRun/test432.py\\
+Export determination: 6. \\
+Rationale: NEW: Added more python test4**\\
+\vspace{3em}
+
+\noindent \textbf{Change \#279} with diff file ISSM-13682-13683.diff: \\
+Function name: \\
+D /issm/trunk-jpl/test/NightlyRun/test424.py1 D /issm/trunk-jpl/test/NightlyRun/test427.py1\\
+Export determination: 6. \\
+Rationale: CHG: files not needed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#280} with diff file ISSM-13683-13684.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test503.py\\
+Export determination: 6. \\
+Rationale: BUG: minor\\
+\vspace{3em}
+
+\noindent \textbf{Change \#281} with diff file ISSM-13684-13685.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/python\_skipped\_tests.txt A /issm/trunk-jpl/test/NightlyRun/test516.py\\
+Export determination: 6. \\
+Rationale: NEW: added test516.py and updated python\_skipped\_tests.txt\\
+\vspace{3em}
+
+\noindent \textbf{Change \#282} with diff file ISSM-13685-13686.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: fix for new Macosx 1.7.4 buggy xcode\\
+\vspace{3em}
+
+\noindent \textbf{Change \#283} with diff file ISSM-13686-13687.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/surfaceforcings.py\\
+Export determination: 6. \\
+Rationale: CHG: Update surfaceforcings.py corresponding to changeset [13521].\\
+\vspace{3em}
+
+\noindent \textbf{Change \#284} with diff file ISSM-13687-13688.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.h D /issm/trunk-jpl/src/c/modules/AddExternalResultx M /issm/trunk-jpl/src/c/modules/modules.h\\
+Export determination: 6. \\
+Rationale: DEL: not needed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#285} with diff file ISSM-13688-13689.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/python\_skipped\_tests.txt A /issm/trunk-jpl/test/NightlyRun/test328.py M /issm/trunk-jpl/test/NightlyRun/test329.m A /issm/trunk-jpl/test/NightlyRun/test329.py\\
+Export determination: 6. \\
+Rationale: NEW: Working test328.py and test329.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#286} with diff file ISSM-13689-13690.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h D /issm/trunk-jpl/src/c/modules/UpdateVertexPositionsx M /issm/trunk-jpl/src/c/modules/modules.h M /issm/trunk-jpl/src/c/solutions/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moved UpdateVertexPositionx to FemModel method\\
+\vspace{3em}
+
+\noindent \textbf{Change \#287} with diff file ISSM-13690-13691.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-macosx64-larour.sh\\
+Export determination: 6. \\
+Rationale: CHG: updated flags\\
+\vspace{3em}
+
+\noindent \textbf{Change \#288} with diff file ISSM-13691-13692.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/solutions/EnvironmentInit.cpp\\
+Export determination: 6. \\
+Rationale: CHG: PrintBanner is now done by EnvironmentInit instead of FemModel so that it is printed only once\\
+\vspace{3em}
+
+\noindent \textbf{Change \#289} with diff file ISSM-13692-13693.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/model/model.py\\
+Export determination: 6. \\
+Rationale: CHG: Get rid of tab+space indent.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#290} with diff file ISSM-13693-13694.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/android/android-ndk/install.sh M /issm/trunk-jpl/externalpackages/android/android-sdk/install.sh M /issm/trunk-jpl/externalpackages/distribute/install.sh M /issm/trunk-jpl/externalpackages/numpy/install-macosx-lion.sh M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h D /issm/trunk-jpl/src/c/modules/UpdateConstraintsx M /issm/trunk-jpl/src/c/modules/modules.h M /issm/trunk-jpl/src/c/solvers/solver\_adjoint\_linear.cpp M /issm/trunk-jpl/src/c/solvers/solver\_linear.cpp M /issm/trunk-jpl/src/c/solvers/solver\_newton.cpp M /issm/trunk-jpl/src/c/solvers/solver\_nonlinear.cpp M /issm/trunk-jpl/src/c/solvers/solver\_stokescoupling\_nonlinear.cpp M /issm/trunk-jpl/src/c/solvers/solver\_thermal\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moved UpdateConstraintsx to FemModel method\\
+\vspace{3em}
+
+\noindent \textbf{Change \#291} with diff file ISSM-13694-13695.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/petsc/install-dev-linux64.sh\\
+Export determination: 6. \\
+Rationale: Updated petsc options...removed plapack (Not supported). Removed prometheus, and so no longer need pastix, ptscotch.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#292} with diff file ISSM-13695-13696.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/matlab/io/WriteMatlabData.cpp M /issm/trunk-jpl/src/c/python/io/WritePythonData.cpp\\
+Export determination: 6. \\
+Rationale: NEW: Implemented RiftStruct for Python WriteData.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#293} with diff file ISSM-13696-13697.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h D /issm/trunk-jpl/src/c/modules/TimeAdaptx M /issm/trunk-jpl/src/c/modules/modules.h M /issm/trunk-jpl/src/c/solutions/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: DEL: moved TimeAdaptx to FemModel method.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#294} with diff file ISSM-13697-13698.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/python/io/WritePythonData.cpp\\
+Export determination: 6. \\
+Rationale: FIX: Remove unallocated array.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#295} with diff file ISSM-13698-13699.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/python/io/WritePythonData.cpp\\
+Export determination: 6. \\
+Rationale: CHG: Removed debug statements.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#296} with diff file ISSM-13699-13700.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h M /issm/trunk-jpl/src/c/classes/objects/DependentObject.cpp M /issm/trunk-jpl/src/c/classes/objects/DependentObject.h D /issm/trunk-jpl/src/c/modules/CostFunctionx D /issm/trunk-jpl/src/c/modules/DakotaResponsesx D /issm/trunk-jpl/src/c/modules/RequestedOutputsx D /issm/trunk-jpl/src/c/modules/Responsex D /issm/trunk-jpl/src/c/modules/ThicknessAbsGradientx M /issm/trunk-jpl/src/c/modules/modules.h M /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp M /issm/trunk-jpl/src/c/solutions/controltao\_core.cpp M /issm/trunk-jpl/src/c/solutions/diagnostic\_core.cpp M /issm/trunk-jpl/src/c/solutions/objectivefunction.cpp M /issm/trunk-jpl/src/c/solutions/prognostic\_core.cpp M /issm/trunk-jpl/src/c/solutions/steadystate\_core.cpp M /issm/trunk-jpl/src/c/solutions/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moved Responsex, ThicknessAbsGradientx, RequestedOutputsx and DakotaResponsesx methods to FemModel.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#297} with diff file ISSM-13700-13701.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h D /issm/trunk-jpl/src/c/modules/RequestedDependentsx M /issm/trunk-jpl/src/c/modules/modules.h M /issm/trunk-jpl/src/c/solutions/diagnostic\_core.cpp M /issm/trunk-jpl/src/c/solutions/prognostic\_core.cpp M /issm/trunk-jpl/src/c/solutions/transient\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moving RequestedDepentsx to FemModel + fixing issues on ADOLC compile\\
+\vspace{3em}
+
+\noindent \textbf{Change \#298} with diff file ISSM-13701-13702.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IssmComm.cpp M /issm/trunk-jpl/src/c/include/macros.h M /issm/trunk-jpl/src/c/matlab/include/matlab\_macros.h D /issm/trunk-jpl/src/c/matlab/io/PrintfFunction.cpp M /issm/trunk-jpl/src/c/python/include/python\_macros.h M /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp M /issm/trunk-jpl/src/c/shared/Exceptions/exceptions.h\\
+Export determination: 6. \\
+Rationale: Better handling of matlab and python errors by putting error message directoy in mexErrTxt Got rid of c/matlab/io/PrintfFunction.cpp Initialize IssmComm for modules as -1 so that my\_rank and num\_proc are still defined\\
+\vspace{3em}
+
+\noindent \textbf{Change \#299} with diff file ISSM-13702-13703.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/include/macros.h\\
+Export determination: 6. \\
+Rationale: BUG: reverted back\\
+\vspace{3em}
+
+\noindent \textbf{Change \#300} with diff file ISSM-13703-13704.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/colors/issm\_black.vim\\
+Export determination: 6. \\
+Rationale: Simplified colors/issm\_black.vim\\
+\vspace{3em}
+
+\noindent \textbf{Change \#301} with diff file ISSM-13704-13705.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/colors/issm\_white.vim\\
+Export determination: 6. \\
+Rationale: simplified issm\_white.vim\\
+\vspace{3em}
+
+\noindent \textbf{Change \#302} with diff file ISSM-13705-13706.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/vim/addons/vim/syntax/c.vim M /issm/trunk-jpl/externalpackages/vim/addons/vimrc\\
+Export determination: 6. \\
+Rationale: NEW: updated c.vim for C-syntax hilighting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#303} with diff file ISSM-13706-13707.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/cmake A /issm/trunk-jpl/externalpackages/dakota/install-linux64-cloud.sh M /issm/trunk-jpl/externalpackages/petsc M /issm/trunk-jpl/externalpackages/petsc/install-dev-linux64.sh\\
+Export determination: 6. \\
+Rationale: CHG: changes made to compile on the cloud\\
+\vspace{3em}
+
+\noindent \textbf{Change \#304} with diff file ISSM-13707-13708.diff: \\
+Function name: \\
+A /issm/trunk-jpl/configs/config-linux64-cloud.sh\\
+Export determination: 6. \\
+Rationale: CHG: config to compile on the cloud\\
+\vspace{3em}
+
+\noindent \textbf{Change \#305} with diff file ISSM-13708-13709.diff: \\
+Function name: \\
+M /issm/trunk-jpl/scripts/report.sh\\
+Export determination: 6. \\
+Rationale: CHG: remove desks from status\\
+\vspace{3em}
+
+\noindent \textbf{Change \#306} with diff file ISSM-13709-13710.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-arm-linux.sh M /issm/trunk-jpl/m4/issm\_options.m4 M /issm/trunk-jpl/src/c/Makefile.am A /issm/trunk-jpl/src/c/android A /issm/trunk-jpl/src/c/android/fac.cpp A /issm/trunk-jpl/src/c/android/fac.h\\
+Export determination: 6. \\
+Rationale: CHG: new android directory in c/ for android objects. new fac class with factorial routine to test JNI interfacing.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#307} with diff file ISSM-13710-13711.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/rifts.m M /issm/trunk-jpl/src/m/classes/rifts.py M /issm/trunk-jpl/src/m/mesh/rifts/meshprocessrifts.py\\
+Export determination: 6. \\
+Rationale: FIX: Fixes to run python rifts (plus a matlab fix as well).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#308} with diff file ISSM-13711-13712.diff: \\
+Function name: \\
+D /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test216.py A /issm/trunk-jpl/test/NightlyRun/test216.py (from /issm/trunk-jpl/test/NightlyRun/InNeedOfDebugging/test216.py:13685) A /issm/trunk-jpl/test/NightlyRun/test274.py\\
+Export determination: 6. \\
+Rationale: NEW: Working test216.py and test274.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#309} with diff file ISSM-13712-13713.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/python\_skipped\_tests.txt\\
+Export determination: 6. \\
+Rationale: NEW: Working test216.py and test274.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#310} with diff file ISSM-13713-13714.diff: \\
+Function name: \\
+M /issm/trunk-jpl/scripts/report.sh\\
+Export determination: 6. \\
+Rationale: NEW: Added python error report\\
+\vspace{3em}
+
+\noindent \textbf{Change \#311} with diff file ISSM-13714-13715.diff: \\
+Function name: \\
+M /issm/trunk-jpl/scripts/report.sh\\
+Export determination: 6. \\
+Rationale: CHG: change MATLAB\_FONT to CODE\_FONT\\
+\vspace{3em}
+
+\noindent \textbf{Change \#312} with diff file ISSM-13715-13716.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/rifts.py\\
+Export determination: 6. \\
+Rationale: BUG: do not marshall rifts if numrifts=0\\
+\vspace{3em}
+
+\noindent \textbf{Change \#313} with diff file ISSM-13716-13717.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/rifts.m M /issm/trunk-jpl/src/m/classes/rifts.py\\
+Export determination: 6. \\
+Rationale: BUG: Fix case for no rifts (in a more python-like way).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#314} with diff file ISSM-13717-13718.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model/model.m\\
+Export determination: 6. \\
+Rationale: BUG: edges need to have -1 instead of nan, update in old models while loading\\
+\vspace{3em}
+
+\noindent \textbf{Change \#315} with diff file ISSM-13718-13719.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model/model.m\\
+Export determination: 6. \\
+Rationale: BUG: revert old materials if statement changed accidentally\\
+\vspace{3em}
+
+\noindent \textbf{Change \#316} with diff file ISSM-13719-13720.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model/model.m\\
+Export determination: 6. \\
+Rationale: BUG: oops, fixing materials again...\\
+\vspace{3em}
+
+\noindent \textbf{Change \#317} with diff file ISSM-13720-13721.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.py\\
+Export determination: 6. \\
+Rationale: NEW: for NR, write PYTHONEXITEDCORRECTLY so that report.sh detects that all tests have been run\\
+\vspace{3em}
+
+\noindent \textbf{Change \#318} with diff file ISSM-13721-13722.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h D /issm/trunk-jpl/src/c/modules/MassFluxx M /issm/trunk-jpl/src/c/modules/modules.h\\
+Export determination: 6. \\
+Rationale: CHG: moved MassFluxx from modules to FemModel method\\
+\vspace{3em}
+
+\noindent \textbf{Change \#319} with diff file ISSM-13722-13723.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h D /issm/trunk-jpl/src/c/modules/MaxAbsVxx D /issm/trunk-jpl/src/c/modules/MaxAbsVyx D /issm/trunk-jpl/src/c/modules/MaxAbsVzx D /issm/trunk-jpl/src/c/modules/MaxVelx D /issm/trunk-jpl/src/c/modules/MaxVxx D /issm/trunk-jpl/src/c/modules/MaxVyx D /issm/trunk-jpl/src/c/modules/MaxVzx M /issm/trunk-jpl/src/c/modules/modules.h\\
+Export determination: 6. \\
+Rationale: CHG: moved a bunch of modules to FemModel and fix bug in MassFluxx\\
+\vspace{3em}
+
+\noindent \textbf{Change \#320} with diff file ISSM-13723-13724.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/mpich2/install-1.0.2-altix64.sh M /issm/trunk-jpl/externalpackages/mpich2/install-1.0.2-linux64.sh M /issm/trunk-jpl/externalpackages/mpich2/install-1.0.2-macosx32.sh M /issm/trunk-jpl/externalpackages/mpich2/install-1.0.2-win32.sh M /issm/trunk-jpl/externalpackages/mpich2/install-1.3.1-linux64-berg.sh M /issm/trunk-jpl/externalpackages/mpich2/install-1.4-linux64.sh M /issm/trunk-jpl/externalpackages/mpich2/install-1.4-macosx32.sh M /issm/trunk-jpl/externalpackages/mpich2/install-1.4-macosx64.sh A /issm/trunk-jpl/externalpackages/mpich2/install-1.5-linux64.sh\\
+Export determination: 6. \\
+Rationale: NEW: added install-1.5-linux64.sh for mpich 1.5, which supports parallel make\\
+\vspace{3em}
+
+\noindent \textbf{Change \#321} with diff file ISSM-13724-13725.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/mpich2/install-1.5-linux64.sh\\
+Export determination: 6. \\
+Rationale: CHG: cleaner install\\
+\vspace{3em}
+
+\noindent \textbf{Change \#322} with diff file ISSM-13725-13726.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/WriteData.m M /issm/trunk-jpl/src/m/solve/WriteData.py\\
+Export determination: 6. \\
+Rationale: CHG: use StringToEnum instead of eval (cleaner)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#323} with diff file ISSM-13726-13727.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/mpich2/install-1.5-linux64.sh\\
+Export determination: 6. \\
+Rationale: BUG: forgot cd src before configure\\
+\vspace{3em}
+
+\noindent \textbf{Change \#324} with diff file ISSM-13727-13728.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/marshall.m\\
+Export determination: 6. \\
+Rationale: CHG: to improve NR elapsed time, removed call to verLessThan\\
+\vspace{3em}
+
+\noindent \textbf{Change \#325} with diff file ISSM-13728-13729.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/waitonlock.m\\
+Export determination: 6. \\
+Rationale: CHG: use isprop matlab function instead of any(strcmp(properties\\
+\vspace{3em}
+
+\noindent \textbf{Change \#326} with diff file ISSM-13729-13730.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m\\
+Export determination: 6. \\
+Rationale: CHG: removed call to verLessThan, taking too long for NR\\
+\vspace{3em}
+
+\noindent \textbf{Change \#327} with diff file ISSM-13730-13731.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/array/str2int.m M /issm/trunk-jpl/src/m/classes/modellist.m M /issm/trunk-jpl/src/m/contrib/bamg/meshread.m M /issm/trunk-jpl/src/m/contrib/bamg/yams.m M /issm/trunk-jpl/src/m/contrib/gslib/gamv.m M /issm/trunk-jpl/src/m/contrib/gslib/gslib.m M /issm/trunk-jpl/src/m/contrib/gslib/pkriging.m M /issm/trunk-jpl/src/m/contrib/gslib/varmap.m M /issm/trunk-jpl/src/m/contrib/massbalance/outflow.m M /issm/trunk-jpl/src/m/exp/expcoarsen.m M /issm/trunk-jpl/src/m/exp/expcreatecontour.m M /issm/trunk-jpl/src/m/exp/expcreateprofile.m M /issm/trunk-jpl/src/m/exp/expread.m M /issm/trunk-jpl/src/m/exp/expwrite.m M /issm/trunk-jpl/src/m/exp/manipulation/addcontour.m M /issm/trunk-jpl/src/m/exp/manipulation/addendprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/addinsideprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/addprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/closeprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/cutarea.m M /issm/trunk-jpl/src/m/exp/manipulation/cutprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/mergeprofiles.m M /issm/trunk-jpl/src/m/exp/manipulation/modifyposition.m M /issm/trunk-jpl/src/m/exp/manipulation/orientprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/removepoints.m M /issm/trunk-jpl/src/m/exp/manipulation/removeprofile.m M /issm/trunk-jpl/src/m/exp/manipulation/removeseveralpoints.m M /issm/trunk-jpl/src/m/extrusion/DepthAverage.m M /issm/trunk-jpl/src/m/extrusion/project3d.m M /issm/trunk-jpl/src/m/interp/PatchToVec.m M /issm/trunk-jpl/src/m/mech/cfl\_step.m M /issm/trunk-jpl/src/m/mesh/MeshQuality.m M /issm/trunk-jpl/src/m/mesh/NodeInElement.m M /issm/trunk-jpl/src/m/mesh/bamg.m M /issm/trunk-jpl/src/m/mesh/rifts/meshaddrifts.m M /issm/trunk-jpl/src/m/mesh/rifts/meshplug.m M /issm/trunk-jpl/src/m/mesh/rifts/rifttipsrefine.m M /issm/trunk-jpl/src/m/miscellaneous/fielddisplay.m M /issm/trunk-jpl/src/m/partition/adjacency.m M /issm/trunk-jpl/src/m/partition/flagedges.m M /issm/trunk-jpl/src/m/plot/checkplotoptions.m M /issm/trunk-jpl/src/m/plot/colormaps/haxby.m M /issm/trunk-jpl/src/m/plot/kmlgroundoverlay.m M /issm/trunk-jpl/src/m/plot/plot\_BC.m M /issm/trunk-jpl/src/m/plot/plot\_basaldrag.m M /issm/trunk-jpl/src/m/plot/plot\_boundaries.m M /issm/trunk-jpl/src/m/plot/plot\_contour.m M /issm/trunk-jpl/src/m/plot/plot\_drivingstress.m M /issm/trunk-jpl/src/m/plot/plot\_edges.m M /issm/trunk-jpl/src/m/plot/plot\_elementnumbering.m M /issm/trunk-jpl/src/m/plot/plot\_elementstype.m M /issm/trunk-jpl/src/m/plot/plot\_highlightelements.m M /issm/trunk-jpl/src/m/plot/plot\_highlightvertices.m M /issm/trunk-jpl/src/m/plot/plot\_icefront.m M /issm/trunk-jpl/src/m/plot/plot\_importancefactors.m M /issm/trunk-jpl/src/m/plot/plot\_manager.m M /issm/trunk-jpl/src/m/plot/plot\_mesh.m M /issm/trunk-jpl/src/m/plot/plot\_none.m M /issm/trunk-jpl/src/m/plot/plot\_parthist.m M /issm/trunk-jpl/src/m/plot/plot\_parthistn.m M /issm/trunk-jpl/src/m/plot/plot\_parthistw.m M /issm/trunk-jpl/src/m/plot/plot\_penalties.m M /issm/trunk-jpl/src/m/plot/plot\_qmu\_mass\_flux\_segments.m M /issm/trunk-jpl/src/m/plot/plot\_qmuhistnorm.m M /issm/trunk-jpl/src/m/plot/plot\_qmumean.m M /issm/trunk-jpl/src/m/plot/plot\_qmustddev.m M /issm/trunk-jpl/src/m/plot/plot\_referential.m M /issm/trunk-jpl/src/m/plot/plot\_riftfraction.m M /issm/trunk-jpl/src/m/plot/plot\_riftnumbering.m M /issm/trunk-jpl/src/m/plot/plot\_riftpenetration.m M /issm/trunk-jpl/src/m/plot/plot\_riftrelvel.m M /issm/trunk-jpl/src/m/plot/plot\_rifts.m M /issm/trunk-jpl/src/m/plot/plot\_riftvel.m M /issm/trunk-jpl/src/m/plot/plot\_sarpwr.m M /issm/trunk-jpl/src/m/plot/plot\_segments.m M /issm/trunk-jpl/src/m/plot/plot\_tensor.m M /issm/trunk-jpl/src/m/plot/plot\_tensor\_components.m M /issm/trunk-jpl/src/m/plot/plot\_tensor\_principal.m M /issm/trunk-jpl/src/m/plot/plot\_tensor\_principalaxis.m M /issm/trunk-jpl/src/m/plot/plot\_transient\_movie.m M /issm/trunk-jpl/src/m/plot/plot\_vertexnumbering.m M /issm/trunk-jpl/src/m/plot/processdata.m M /issm/trunk-jpl/src/m/plot/processmesh.m M /issm/trunk-jpl/src/m/plot/subplotmodel.m M /issm/trunk-jpl/src/m/qmu/MassFluxProcessProfile.m M /issm/trunk-jpl/src/m/qmu/qmumarshall.m M /issm/trunk-jpl/src/m/regional/BasinConstrain.m M /issm/trunk-jpl/src/m/regional/BasinConstrainShelf.m M /issm/trunk-jpl/src/m/solve/MatlabProcessPatch.m\\
+Export determination: 6. \\
+Rationale: CHG: per matlab's request, removed all unnecessary semicolon\\
+\vspace{3em}
+
+\noindent \textbf{Change \#328} with diff file ISSM-13731-13732.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/pairoptions.m\\
+Export determination: 6. \\
+Rationale: CHG: speeding up getfieldvalue\\
+\vspace{3em}
+
+\noindent \textbf{Change \#329} with diff file ISSM-13732-13733.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/os/oshostname.m\\
+Export determination: 6. \\
+Rationale: CHG: cosmetics\\
+\vspace{3em}
+
+\noindent \textbf{Change \#330} with diff file ISSM-13733-13734.diff: \\
+Function name: \\
+D /issm/trunk-jpl/externalpackages/git/install-nopython.sh M /issm/trunk-jpl/externalpackages/git/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: we don't need python for git\\
+\vspace{3em}
+
+\noindent \textbf{Change \#331} with diff file ISSM-13734-13735.diff: \\
+Function name: \\
+D /issm/trunk-jpl/externalpackages/netcdf/install-4.0.sh D /issm/trunk-jpl/externalpackages/netcdf/install-4.2.sh A /issm/trunk-jpl/externalpackages/netcdf/install.sh (from /issm/trunk-jpl/externalpackages/netcdf/install-4.2.sh:13732)\\
+Export determination: 6. \\
+Rationale: CHG: only one netcdf needs to be installed, no need to keep previous version\\
+\vspace{3em}
+
+\noindent \textbf{Change \#332} with diff file ISSM-13735-13736.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/TriMeshx/TriMeshx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: do not error out if triangle is not installed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#333} with diff file ISSM-13736-13737.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp M /issm/trunk-jpl/src/c/solutions/EnvironmentInit.cpp\\
+Export determination: 6. \\
+Rationale: CHG: pushed PetscInitialize and Finalize phases into FemModel constructors and destructors. MPI\_Init and MPI\_Finalize are still done in EnvironmentInit and EnvironmentFinalize. This ensures that we split our communicators and run fully communicator oriented!\\
+\vspace{3em}
+
+\noindent \textbf{Change \#334} with diff file ISSM-13737-13738.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: matlab version does not need to be detected (could not find it for R2012b anyway)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#335} with diff file ISSM-13738-13739.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/distribute/install.sh\\
+Export determination: 6. \\
+Rationale: BUG: reverted back, do not sudo python\\
+\vspace{3em}
+
+\noindent \textbf{Change \#336} with diff file ISSM-13739-13740.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: removed deps += ../../c/libISSMWrappers.a that was there twice, causing the compilation on mac to be extremely slow. I was getting the following warning: "copying selected object files to avoid basename conflicts"\\
+\vspace{3em}
+
+\noindent \textbf{Change \#337} with diff file ISSM-13740-13741.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/diagnostic.py M /issm/trunk-jpl/src/m/classes/flowequation.py M /issm/trunk-jpl/src/m/classes/inversion.py M /issm/trunk-jpl/src/m/classes/verbose.py\\
+Export determination: 6. \\
+Rationale: BUG: Python's habit of copying pointers rather than data can be very frustrating to debug.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#338} with diff file ISSM-13741-13742.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/geometry/FlagElements.py M /issm/trunk-jpl/src/m/mesh/roundmesh.m A /issm/trunk-jpl/src/m/mesh/roundmesh.py\\
+Export determination: 6. \\
+Rationale: NEW: Python version of roundmesh (plus cosmetic Matlab changes).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#339} with diff file ISSM-13742-13743.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/mpich2/install-1.5-macosx64.sh\\
+Export determination: 6. \\
+Rationale: NEW: added install-1.5-macosx64.sh\\
+\vspace{3em}
+
+\noindent \textbf{Change \#340} with diff file ISSM-13743-13744.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: BUG: reverting to previous ordering\\
+\vspace{3em}
+
+\noindent \textbf{Change \#341} with diff file ISSM-13744-13745.diff: \\
+Function name: \\
+M /issm/trunk-jpl/startup.py\\
+Export determination: 6. \\
+Rationale: added plot modules to startup\\
+\vspace{3em}
+
+\noindent \textbf{Change \#342} with diff file ISSM-13745-13746.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/py\\
+Export determination: 6. \\
+Rationale: CHG: not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#343} with diff file ISSM-13746-13747.diff: \\
+Function name: \\
+D /issm/trunk-jpl/configs/config-macosx64-larour-bothapis.sh\\
+Export determination: 6. \\
+Rationale: CHG: not needed anymore.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#344} with diff file ISSM-13747-13748.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/python/pythonincludes.h\\
+Export determination: 6. \\
+Rationale: CHG: boost not used anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#345} with diff file ISSM-13748-13749.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: only include PETSc directories if they exist\\
+\vspace{3em}
+
+\noindent \textbf{Change \#346} with diff file ISSM-13749-13750.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am D /issm/trunk-jpl/src/c/issm-binding.h D /issm/trunk-jpl/src/c/matlab/include D /issm/trunk-jpl/src/c/matlab/io D /issm/trunk-jpl/src/c/python D /issm/trunk-jpl/src/c/toolkits/python/pythonincludes.h M /issm/trunk-jpl/src/c/toolkits/toolkits.h M /issm/trunk-jpl/src/wrappers/AverageFilter/AverageFilter.h M /issm/trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.h M /issm/trunk-jpl/src/wrappers/BamgMesher/BamgMesher.h M /issm/trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.h M /issm/trunk-jpl/src/wrappers/Chaco/Chaco.h M /issm/trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.h M /issm/trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.h M /issm/trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.h M /issm/trunk-jpl/src/wrappers/EnumToString/EnumToString.h M /issm/trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.h M /issm/trunk-jpl/src/wrappers/HoleFiller/HoleFiller.h M /issm/trunk-jpl/src/wrappers/InternalFront/InternalFront.h M /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.h M /issm/trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.h M /issm/trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.h M /issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h M /issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.h M /issm/trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.h M /issm/trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.h M /issm/trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.h M /issm/trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.h M /issm/trunk-jpl/src/wrappers/Kriging/Kriging.h M /issm/trunk-jpl/src/wrappers/Ll2xy/Ll2xy.h M /issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.h M /issm/trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.h M /issm/trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.h M /issm/trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.h M /issm/trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.h M /issm/trunk-jpl/src/wrappers/Scotch/Scotch.h M /issm/trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.h M /issm/trunk-jpl/src/wrappers/StringToEnum/StringToEnum.h M /issm/trunk-jpl/src/wrappers/TriMesh/TriMesh.h M /issm/trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.h M /issm/trunk-jpl/src/wrappers/TriaSearch/TriaSearch.h M /issm/trunk-jpl/src/wrappers/Xy2ll/Xy2ll.h A /issm/trunk-jpl/src/wrappers/bindings.h (from /issm/trunk-jpl/src/c/issm-binding.h:13743) A /issm/trunk-jpl/src/wrappers/include A /issm/trunk-jpl/src/wrappers/include/issm-binding.h (from /issm/trunk-jpl/src/c/issm-binding.h:13737) M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am A /issm/trunk-jpl/src/wrappers/matlab/include (from /issm/trunk-jpl/src/c/matlab/include:13737) D /issm/trunk-jpl/src/wrappers/matlab/include/matlab\_macros.h A /issm/trunk-jpl/src/wrappers/matlab/include/wrapper\_macros.h (from /issm/trunk-jpl/src/c/matlab/include/matlab\_macros.h:13737) A /issm/trunk-jpl/src/wrappers/matlab/io (from /issm/trunk-jpl/src/c/matlab/io:13737) M /issm/trunk-jpl/src/wrappers/matlab/io/CheckNumMatlabArguments.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToDoubleMatrix.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToMatrix.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToPetscMat.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToSeqMat.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/MatlabNArrayToNArray.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/MatlabVectorToDoubleVector.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/MatlabVectorToPetscVec.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/MatlabVectorToSeqVec.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/MatlabVectorToVector.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/OptionParse.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/WriteMatlabData.cpp M /issm/trunk-jpl/src/wrappers/matlab/io/matlabio.h M /issm/trunk-jpl/src/wrappers/matlab/io/mxGetAssignedField.cpp M /issm/trunk-jpl/src/wrappers/python/Makefile.am A /issm/trunk-jpl/src/wrappers/python/include A /issm/trunk-jpl/src/wrappers/python/include/wrapper\_macros.h (from /issm/trunk-jpl/src/c/python/include/python\_macros.h:13747) A /issm/trunk-jpl/src/wrappers/python/io (from /issm/trunk-jpl/src/c/python/io:13743) M /issm/trunk-jpl/src/wrappers/python/io/CheckNumPythonArguments.cpp M /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp M /issm/trunk-jpl/src/wrappers/python/io/WritePythonData.cpp M /issm/trunk-jpl/src/wrappers/python/io/pythonio.h\\
+Export determination: 6. \\
+Rationale: CHG: moved all matlab and python code from src/c/ to src/wrappers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#347} with diff file ISSM-13750-13751.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/wrappers/matlab/include/matlabincludes.h A /issm/trunk-jpl/src/wrappers/python/include/pythonincludes.h\\
+Export determination: 6. \\
+Rationale: CHG: two files needed to compile wrappers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#348} with diff file ISSM-13751-13752.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-macosx64-larour.sh\\
+Export determination: 6. \\
+Rationale: CHG: default config to do both apis\\
+\vspace{3em}
+
+\noindent \textbf{Change \#349} with diff file ISSM-13752-13753.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/c/matlab\\
+Export determination: 6. \\
+Rationale: DEL: not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#350} with diff file ISSM-13753-13754.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am\\
+Export determination: 6. \\
+Rationale: BUG: forgot to add MatlabToPetsc routines\\
+\vspace{3em}
+
+\noindent \textbf{Change \#351} with diff file ISSM-13754-13755.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscMatrixType.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h\\
+Export determination: 6. \\
+Rationale: CHG: added const so that compiler does not complain about deprecated conversion from string constant to ‘char*’\\
+\vspace{3em}
+
+\noindent \textbf{Change \#352} with diff file ISSM-13755-13756.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: BUG: big bug: big big bug: gl\_melting\_rate was never initialized so the melting rate at the grounding line was garbage\\
+\vspace{3em}
+
+\noindent \textbf{Change \#353} with diff file ISSM-13756-13757.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: NEW: detetct if we are using petsc3.3, in which case metis library is automatically included python version is dynamically checked for\\
+\vspace{3em}
+
+\noindent \textbf{Change \#354} with diff file ISSM-13757-13758.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/io/Disk/WriteLockFile.cpp M /issm/trunk-jpl/src/c/io/PrintfFunction.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some cleanup from cppcheck\\
+\vspace{3em}
+
+\noindent \textbf{Change \#355} with diff file ISSM-13758-13759.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Elements/Paterson.cpp M /issm/trunk-jpl/src/c/shared/Elements/PddSurfaceMassBalance.cpp M /issm/trunk-jpl/src/c/shared/Elements/TransformLoadVectorCoord.cpp M /issm/trunk-jpl/src/c/shared/Elements/TransformSolutionCoord.cpp M /issm/trunk-jpl/src/c/shared/Exceptions/exprintf.cpp M /issm/trunk-jpl/src/c/shared/Exp/IsInPolySerial.cpp M /issm/trunk-jpl/src/c/shared/Exp/exp.h M /issm/trunk-jpl/src/c/shared/Numerics/XZvectorsToCoordinateSystem.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some cleanup from cppcheck\\
+\vspace{3em}
+
+\noindent \textbf{Change \#356} with diff file ISSM-13759-13760.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solvers/solver\_newton.cpp M /issm/trunk-jpl/src/c/solvers/solver\_stokescoupling\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some cleanup from cppcheck\\
+\vspace{3em}
+
+\noindent \textbf{Change \#357} with diff file ISSM-13760-13761.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/issm/SeqMat.h M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewVec.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp M /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some cleanup from cppcheck\\
+\vspace{3em}
+
+\noindent \textbf{Change \#358} with diff file ISSM-13761-13762.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/DofIndexing.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/Patch.cpp M /issm/trunk-jpl/src/c/classes/bamg/Geometry.cpp M /issm/trunk-jpl/src/c/classes/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/classes/bamg/R2.h M /issm/trunk-jpl/src/c/classes/kriging/Observation.cpp M /issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/PentaRef.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/objects/ExternalResults/GenericExternalResult.h M /issm/trunk-jpl/src/c/classes/objects/Inputs/PentaP1Input.cpp M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_File.cpp M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_LineStyle.cpp M /issm/trunk-jpl/src/c/classes/objects/KML/KML\_PolyStyle.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Friction.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/classes/objects/Materials/Matdamageice.cpp M /issm/trunk-jpl/src/c/classes/objects/Materials/Matice.cpp M /issm/trunk-jpl/src/c/classes/objects/Node.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/MatrixParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/TransientParam.cpp M /issm/trunk-jpl/src/c/classes/objects/Params/VectorParam.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some cleanup from cppcheck\\
+\vspace{3em}
+
+\noindent \textbf{Change \#359} with diff file ISSM-13762-13763.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp M /issm/trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp M /issm/trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp M /issm/trunk-jpl/src/c/modules/ContourToMeshx/ContourToMeshx.cpp M /issm/trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp M /issm/trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp M /issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp M /issm/trunk-jpl/src/c/modules/MeshProfileIntersectionx/ElementSegment.cpp M /issm/trunk-jpl/src/c/modules/MeshProfileIntersectionx/MeshProfileIntersectionx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateConstraintsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateConstraintsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateLoadsBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/BedSlope/CreateNodesBedSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateLoadsEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateLoadsHydrology.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateConstraintsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateConstraintsSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateLoadsSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/SurfaceSlope/CreateNodesSurfaceSlope.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp M /issm/trunk-jpl/src/c/modules/NodesDofx/NodesDofx.cpp M /issm/trunk-jpl/src/c/modules/Orthx/Orthx.cpp M /issm/trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp M /issm/trunk-jpl/src/c/modules/Solverx/Solverx.cpp M /issm/trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp M /issm/trunk-jpl/src/c/modules/TriaSearchx/TriaSearchx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some cleanup from cppcheck\\
+\vspace{3em}
+
+\noindent \textbf{Change \#360} with diff file ISSM-13763-13764.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/DataSet.cpp M /issm/trunk-jpl/src/c/Container/Elements.cpp M /issm/trunk-jpl/src/c/Container/Observations.cpp M /issm/trunk-jpl/src/c/Container/Options.h\\
+Export determination: 6. \\
+Rationale: CHG: some cleanup from cppcheck\\
+\vspace{3em}
+
+\noindent \textbf{Change \#361} with diff file ISSM-13764-13765.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/ResetBoundaryConditions.cpp M /issm/trunk-jpl/src/c/solutions/controlconvergence.cpp M /issm/trunk-jpl/src/c/solutions/kriging.cpp M /issm/trunk-jpl/src/c/solutions/objectivefunction.cpp M /issm/trunk-jpl/src/c/solutions/thermal\_core.cpp\\
+Export determination: 6. \\
+Rationale: CHG: some cleanup from cppcheck\\
+\vspace{3em}
+
+\noindent \textbf{Change \#362} with diff file ISSM-13765-13766.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: compile petsc initialize and finalize only if petsc is available\\
+\vspace{3em}
+
+\noindent \textbf{Change \#363} with diff file ISSM-13766-13767.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-arm-linux.sh\\
+Export determination: 6. \\
+Rationale: CHG: missing with-android\\
+\vspace{3em}
+
+\noindent \textbf{Change \#364} with diff file ISSM-13767-13768.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/AdolcEdf.h M /issm/trunk-jpl/src/c/classes/objects/Options/GenericOption.h M /issm/trunk-jpl/src/c/include/types.h M /issm/trunk-jpl/src/c/modules/Solverx/Solverx.h M /issm/trunk-jpl/src/c/shared/Numerics/isnan.h M /issm/trunk-jpl/src/c/shared/Numerics/recast.h M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am M /issm/trunk-jpl/src/wrappers/matlab/io/MatlabMatrixToPetscMat.cpp M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: made necessary changes to repair the broken adolc compile. Had to introduce \_WRAPPER\_ symbol for the matlab and python wrapper compile, as they were calling on AD specific capabilities!\\
+\vspace{3em}
+
+\noindent \textbf{Change \#365} with diff file ISSM-13768-13769.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am\\
+Export determination: 6. \\
+Rationale: BUG: could not compile with PETSc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#366} with diff file ISSM-13769-13770.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/AdolcEdf.h M /issm/trunk-jpl/src/c/shared/Numerics/isnan.h\\
+Export determination: 6. \\
+Rationale: CHG: fixed some double blank lines\\
+\vspace{3em}
+
+\noindent \textbf{Change \#367} with diff file ISSM-13770-13771.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: BUG: linking to correct python lib\\
+\vspace{3em}
+
+\noindent \textbf{Change \#368} with diff file ISSM-13771-13772.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.py M /issm/trunk-jpl/src/m/plot/plot\_manager.py M /issm/trunk-jpl/src/m/plot/plot\_mesh.py M /issm/trunk-jpl/src/m/plot/plot\_unit.py M /issm/trunk-jpl/src/m/plot/plotmodel.py\\
+Export determination: 6. \\
+Rationale: BUG: matplotlib might not have been installed, startup.py should not error out (for NR)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#369} with diff file ISSM-13772-13773.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/helloworld/code A /issm/trunk-jpl/src/android/helloworld/code/Main.cpp A /issm/trunk-jpl/src/android/helloworld/code/com\_lan\_factorial\_FacLib.h A /issm/trunk-jpl/src/android/helloworld/code/fac.cpp A /issm/trunk-jpl/src/android/helloworld/code/fac.h\\
+Export determination: 6. \\
+Rationale: this is code for factorial app\\
+\vspace{3em}
+
+\noindent \textbf{Change \#370} with diff file ISSM-13773-13774.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/gmp A /issm/trunk-jpl/externalpackages/gmp/install-linux64.sh\\
+Export determination: 6. \\
+Rationale: NEW: gmp package\\
+\vspace{3em}
+
+\noindent \textbf{Change \#371} with diff file ISSM-13774-13775.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/hdf5/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: multithreaded install\\
+\vspace{3em}
+
+\noindent \textbf{Change \#372} with diff file ISSM-13775-13776.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/gmp\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#373} with diff file ISSM-13776-13777.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: py directory does not exist anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#374} with diff file ISSM-13777-13778.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-linux64-murdo.sh\\
+Export determination: 6. \\
+Rationale: CHG: include python build\\
+\vspace{3em}
+
+\noindent \textbf{Change \#375} with diff file ISSM-13778-13779.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-linux64-murdo.sh\\
+Export determination: 6. \\
+Rationale: CHG: plapack and scalapack not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#376} with diff file ISSM-13779-13780.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-linux64-murdo.sh\\
+Export determination: 6. \\
+Rationale: CHG: python version not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#377} with diff file ISSM-13780-13781.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Elements.cpp M /issm/trunk-jpl/src/c/Container/Loads.cpp M /issm/trunk-jpl/src/c/Container/Observations.cpp M /issm/trunk-jpl/src/c/Container/Options.h M /issm/trunk-jpl/src/c/classes/matrix/Matrix.h M /issm/trunk-jpl/src/c/classes/objects/Options/GenericOption.h M /issm/trunk-jpl/src/c/include/types.h M /issm/trunk-jpl/src/c/modules/TriMeshx/TriMeshx.h M /issm/trunk-jpl/src/c/toolkits/issm/SeqVec.h M /issm/trunk-jpl/src/c/toolkits/mpi/mpiincludes.h M /issm/trunk-jpl/src/c/toolkits/petsc/patches/petscpatches.h\\
+Export determination: 6. \\
+Rationale: CHG: some problems reported by cppcheck\\
+\vspace{3em}
+
+\noindent \textbf{Change \#378} with diff file ISSM-13781-13782.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: bad indexing\\
+\vspace{3em}
+
+\noindent \textbf{Change \#379} with diff file ISSM-13782-13783.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Numerics/isnan.h\\
+Export determination: 6. \\
+Rationale: CHG: resolved bug on murdo with isnan not working when including cmath.h instead of math.h\\
+\vspace{3em}
+
+\noindent \textbf{Change \#380} with diff file ISSM-13783-13784.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: isnan.cpp not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#381} with diff file ISSM-13784-13785.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/KSPFree.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatFree.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/MatMultPatch.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscMatrixToDoubleMatrix.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscVectorToDoubleVector.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecDuplicatePatch.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecFree.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/VecMerge.cpp M /issm/trunk-jpl/src/c/toolkits/plapack/patches/CyclicalFactorization.cpp M /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackInvertMatrix.cpp M /issm/trunk-jpl/src/c/toolkits/plapack/patches/PlapackToPetsc.cpp M /issm/trunk-jpl/src/c/toolkits/plapack/plapackincludes.h\\
+Export determination: 6. \\
+Rationale: CHG: fixed some problems reported by cppcheck\\
+\vspace{3em}
+
+\noindent \textbf{Change \#382} with diff file ISSM-13785-13786.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/c/shared/Numerics/isnan.cpp\\
+Export determination: 6. \\
+Rationale: DEL: not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#383} with diff file ISSM-13786-13787.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-macosx64-chris-bothapis.sh\\
+Export determination: 6. \\
+Rationale: CHG: updated config script\\
+\vspace{3em}
+
+\noindent \textbf{Change \#384} with diff file ISSM-13787-13788.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp M /issm/trunk-jpl/src/c/classes/dakota/DakotaPlugin.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/TriaP1Input.cpp M /issm/trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp M /issm/trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dx.cpp M /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp M /issm/trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp M /issm/trunk-jpl/src/c/solutions/dakota\_core.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscInsertMode.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscMatrixType.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/patches/ISSMToPetscNormMode.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more problems reported by cppcheck\\
+\vspace{3em}
+
+\noindent \textbf{Change \#385} with diff file ISSM-13788-13789.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/dakota/DakotaPlugin.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed compilation of dakota\\
+\vspace{3em}
+
+\noindent \textbf{Change \#386} with diff file ISSM-13789-13790.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/inversions/misfit.m M /issm/trunk-jpl/src/m/plot/northarrow.m M /issm/trunk-jpl/startup.py\\
+Export determination: 6. \\
+Rationale: CHG: modified startup.py to avoid appending redundant directories to search path. Deleted loop through src/py as it no longer exists.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#387} with diff file ISSM-13790-13791.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Elements.cpp M /issm/trunk-jpl/src/c/Container/Nodes.cpp M /issm/trunk-jpl/src/c/Container/Options.h\\
+Export determination: 6. \\
+Rationale: CHG: some issues reported by cppcheck and now use C++ casting operator\\
+\vspace{3em}
+
+\noindent \textbf{Change \#388} with diff file ISSM-13791-13792.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh\\
+Export determination: 6. \\
+Rationale: NEW: 3.3 petsc install on pleiades\\
+\vspace{3em}
+
+\noindent \textbf{Change \#389} with diff file ISSM-13792-13793.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/inversions/misfit.m M /issm/trunk-jpl/src/m/plot/northarrow.m\\
+Export determination: 6. \\
+Rationale: CHG: undoing previous commit to northarrow and misfit, did not mean to commit these\\
+\vspace{3em}
+
+\noindent \textbf{Change \#390} with diff file ISSM-13793-13794.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/petsc/install-dev-pleiades.sh\\
+Export determination: 6. \\
+Rationale: Updating petsc script for pleiades\\
+\vspace{3em}
+
+\noindent \textbf{Change \#391} with diff file ISSM-13794-13795.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh\\
+Export determination: 6. \\
+Rationale: CHG: petsc 3.3 pleaides\\
+\vspace{3em}
+
+\noindent \textbf{Change \#392} with diff file ISSM-13795-13796.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/geometry/isconnected.m\\
+Export determination: 6. \\
+Rationale: NEW: Readded isconnected.m\\
+\vspace{3em}
+
+\noindent \textbf{Change \#393} with diff file ISSM-13796-13797.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh\\
+Export determination: 6. \\
+Rationale: CHG: no need to have 2 steps anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#394} with diff file ISSM-13797-13798.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Constraints.h M /issm/trunk-jpl/src/c/Container/DataSet.h M /issm/trunk-jpl/src/c/Container/Elements.h M /issm/trunk-jpl/src/c/Container/Inputs.cpp M /issm/trunk-jpl/src/c/Container/Inputs.h M /issm/trunk-jpl/src/c/Container/Loads.cpp M /issm/trunk-jpl/src/c/Container/Loads.h M /issm/trunk-jpl/src/c/Container/Materials.cpp M /issm/trunk-jpl/src/c/Container/Materials.h M /issm/trunk-jpl/src/c/Container/Nodes.h M /issm/trunk-jpl/src/c/Container/Observations.cpp M /issm/trunk-jpl/src/c/Container/Options.cpp M /issm/trunk-jpl/src/c/Container/Options.h M /issm/trunk-jpl/src/c/Container/Parameters.cpp M /issm/trunk-jpl/src/c/Container/Results.cpp M /issm/trunk-jpl/src/c/Container/Results.h M /issm/trunk-jpl/src/c/Container/Vertices.cpp M /issm/trunk-jpl/src/c/solutions/EnvironmentFinalize.cpp\\
+Export determination: 6. \\
+Rationale: CHG: use dynamic\_cast instead of C-style casting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#395} with diff file ISSM-13798-13799.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/DataSet.cpp M /issm/trunk-jpl/src/c/Container/Inputs.cpp M /issm/trunk-jpl/src/c/Container/Nodes.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/Hook.cpp M /issm/trunk-jpl/src/c/classes/IoModel.cpp M /issm/trunk-jpl/src/c/classes/bamg/Geometry.cpp M /issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp M /issm/trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp M /issm/trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp M /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp M /issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp M /issm/trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp M /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp M /issm/trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp M /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp M /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp M /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp M /issm/trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp M /issm/trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp M /issm/trunk-jpl/src/c/modules/InputControlUpdatex/InputControlUpdatex.cpp M /issm/trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.cpp M /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp M /issm/trunk-jpl/src/c/modules/InputScalex/InputScalex.cpp M /issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp M /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp M /issm/trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp M /issm/trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp M /issm/trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp M /issm/trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp M /issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp M /issm/trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp M /issm/trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp M /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp M /issm/trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.cpp M /issm/trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp M /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp M /issm/trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp M /issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp M /issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp M /issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp M /issm/trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp M /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp M /issm/trunk-jpl/src/c/solutions/kriging.cpp M /issm/trunk-jpl/src/c/solvers/solver\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: CHG: use dynamic\_cast instead of C-style casting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#396} with diff file ISSM-13799-13800.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp\\
+Export determination: 6. \\
+Rationale: CHG: cannot dynamic\_cast void* to FemModel*, use reinterpret\_cast instead\\
+\vspace{3em}
+
+\noindent \textbf{Change \#397} with diff file ISSM-13800-13801.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/bamg/Mesh.cpp M /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp\\
+Export determination: 6. \\
+Rationale: CHG: safer way to call str().c\_str() (see cppcheck http://sourceforge.net/apps/trac/cppcheck/ticket/3826)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#398} with diff file ISSM-13801-13802.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/matrix/Matrix.h M /issm/trunk-jpl/src/c/classes/matrix/Vector.h\\
+Export determination: 6. \\
+Rationale: CHG: never throw exceptions in destructors as this might trigger weird behavior\\
+\vspace{3em}
+
+\noindent \textbf{Change \#399} with diff file ISSM-13802-13803.diff: \\
+Function name: \\
+M /issm/trunk-jpl/startup.py\\
+Export determination: 6. \\
+Rationale: CHG: startup.py now only appends the search path so that python modules can be loaded; all import statements should be handled within individual modules\\
+\vspace{3em}
+
+\noindent \textbf{Change \#400} with diff file ISSM-13803-13804.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed memory leak for rifts\\
+\vspace{3em}
+
+\noindent \textbf{Change \#401} with diff file ISSM-13804-13805.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-pleiades-petscdev.sh\\
+Export determination: 6. \\
+Rationale: CHG: removed plapack and prometheus\\
+\vspace{3em}
+
+\noindent \textbf{Change \#402} with diff file ISSM-13805-13806.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/controltao\_core.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed problem with femmodel\\
+\vspace{3em}
+
+\noindent \textbf{Change \#403} with diff file ISSM-13806-13807.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/contrib/hack/tres.m M /issm/trunk-jpl/src/m/mesh/rifts/meshprocessoutsiderifts.m M /issm/trunk-jpl/src/m/mesh/rifts/rifttipsonmesh.m\\
+Export determination: 6. \\
+Rationale: CHG: update of rifting capabilities\\
+\vspace{3em}
+
+\noindent \textbf{Change \#404} with diff file ISSM-13807-13808.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/openssl A /issm/trunk-jpl/externalpackages/openssl/install.sh\\
+Export determination: 6. \\
+Rationale: NEW: added openssl package needed to solve python hashlib issue with mpd5\\
+\vspace{3em}
+
+\noindent \textbf{Change \#405} with diff file ISSM-13808-13809.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/roundmesh.m M /issm/trunk-jpl/src/m/mesh/roundmesh.py\\
+Export determination: 6. \\
+Rationale: NEW: Python and Matlab versions of roundmesh with rounding for exp files.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#406} with diff file ISSM-13809-13810.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive423.nc M /issm/trunk-jpl/test/NightlyRun/python\_skipped\_tests.txt M /issm/trunk-jpl/test/NightlyRun/test423.m A /issm/trunk-jpl/test/NightlyRun/test423.py M /issm/trunk-jpl/test/Par/RoundSheetShelf.par A /issm/trunk-jpl/test/Par/RoundSheetShelf.py\\
+Export determination: 6. \\
+Rationale: NEW: Working test423.py and RoundSheetShelf.py (plus archive and cosmetic Matlab changes).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#407} with diff file ISSM-13810-13811.diff: \\
+Function name: \\
+M /issm/trunk-jpl/execution\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore test decks\\
+\vspace{3em}
+
+\noindent \textbf{Change \#408} with diff file ISSM-13811-13812.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/diagnostic.m\\
+Export determination: 6. \\
+Rationale: CHG: more tolerant check on spc\\
+\vspace{3em}
+
+\noindent \textbf{Change \#409} with diff file ISSM-13812-13813.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_highlightvertices.m M /issm/trunk-jpl/src/m/plot/plot\_vertexnumbering.m\\
+Export determination: 6. \\
+Rationale: BUG: no need to have highlight as a line\\
+\vspace{3em}
+
+\noindent \textbf{Change \#410} with diff file ISSM-13813-13814.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Elements.cpp M /issm/trunk-jpl/src/c/Container/Inputs.cpp M /issm/trunk-jpl/src/c/Container/Nodes.cpp M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/ControlInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Inputs/DatasetInput.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp M /issm/trunk-jpl/src/c/modules/ContourToNodesx/ContourToNodesx.cpp M /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp M /issm/trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp M /issm/trunk-jpl/src/c/modules/Solverx/SolverxSeq.cpp M /issm/trunk-jpl/src/c/shared/Exp/exp.h M /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp M /issm/trunk-jpl/src/c/solutions/issm.cpp\\
+Export determination: 6. \\
+Rationale: CHG: more cppcheck issues\\
+\vspace{3em}
+
+\noindent \textbf{Change \#411} with diff file ISSM-13814-13815.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/modules/Solverx/SolverxPetsc.cpp\\
+Export determination: 6. \\
+Rationale: CHG: reverted back\\
+\vspace{3em}
+
+\noindent \textbf{Change \#412} with diff file ISSM-13815-13816.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/issm.cpp\\
+Export determination: 6. \\
+Rationale: CHG: reverted back\\
+\vspace{3em}
+
+\noindent \textbf{Change \#413} with diff file ISSM-13816-13817.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/include/macros.h\\
+Export determination: 6. \\
+Rationale: CHR: return 0 even if an error exception is thrown this will avoid mpich2 (ver >= 1.5) to display: =================================================================================== = BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES = EXIT CODE: 1 = CLEANING UP REMAINING PROCESSES = YOU CAN IGNORE THE BELOW CLEANUP MESSAGES ===================================================================================\\
+\vspace{3em}
+
+\noindent \textbf{Change \#414} with diff file ISSM-13817-13818.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/generic.m\\
+Export determination: 6. \\
+Rationale: CHG: generic assumed etc path was given though issmdir, but in the case where the host is not local, the path of etc/environment.sh might be completely different.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#415} with diff file ISSM-13818-13819.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/petsc/install-3.3-walgreen.sh\\
+Export determination: 6. \\
+Rationale: NEW: added installation script for walgreen (arch=ia64)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#416} with diff file ISSM-13819-13820.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/python/install-2.7.3-macosx-mlion.sh\\
+Export determination: 6. \\
+Rationale: NEW: added installation script for Mountain Lion\\
+\vspace{3em}
+
+\noindent \textbf{Change \#417} with diff file ISSM-13820-13821.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/numpy/install-macosx-mlion.sh\\
+Export determination: 6. \\
+Rationale: NEW: added installation script for Mountain Lion\\
+\vspace{3em}
+
+\noindent \textbf{Change \#418} with diff file ISSM-13821-13822.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/scipy/install-macosx-mlion.sh\\
+Export determination: 6. \\
+Rationale: NEW: added installation script for Mountain Lion\\
+\vspace{3em}
+
+\noindent \textbf{Change \#419} with diff file ISSM-13822-13823.diff: \\
+Function name: \\
+A /issm/trunk-jpl/configs/config-macosx64-mlion-mathieu.sh\\
+Export determination: 6. \\
+Rationale: NEW: added issm configuration for moutain lion\\
+\vspace{3em}
+
+\noindent \textbf{Change \#420} with diff file ISSM-13823-13824.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/git/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: removed python for now\\
+\vspace{3em}
+
+\noindent \textbf{Change \#421} with diff file ISSM-13824-13825.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/mpich2/install-1.5-walgreen.sh\\
+Export determination: 6. \\
+Rationale: NEW: added installation script for walgreen\\
+\vspace{3em}
+
+\noindent \textbf{Change \#422} with diff file ISSM-13825-13826.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/generic.m\\
+Export determination: 6. \\
+Rationale: CHG: added display etcpath\\
+\vspace{3em}
+
+\noindent \textbf{Change \#423} with diff file ISSM-13826-13827.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/os/issmssh.py\\
+Export determination: 6. \\
+Rationale: FIX: Reset i/o streams to avoid ugly crashes on Mac.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#424} with diff file ISSM-13827-13828.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/os/issmssh.py\\
+Export determination: 6. \\
+Rationale: CHG: Added comments for bug fix [13826].\\
+\vspace{3em}
+
+\noindent \textbf{Change \#425} with diff file ISSM-13828-13829.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_riftrelvel.m\\
+Export determination: 6. \\
+Rationale: CHG: added more optoins to control legend\\
+\vspace{3em}
+
+\noindent \textbf{Change \#426} with diff file ISSM-13829-13830.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am A /issm/trunk-jpl/src/c/shared/Numerics/isnan.cpp M /issm/trunk-jpl/src/c/shared/Numerics/isnan.h\\
+Export determination: 6. \\
+Rationale: CHG: avoid double definition of isnan in AD mode compilation.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#427} with diff file ISSM-13830-13831.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Numerics/isnan.cpp M /issm/trunk-jpl/src/c/shared/Numerics/isnan.h\\
+Export determination: 6. \\
+Rationale: CHG: no double blank space please\\
+\vspace{3em}
+
+\noindent \textbf{Change \#428} with diff file ISSM-13831-13832.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am D /issm/trunk-jpl/src/c/shared/Wrapper M /issm/trunk-jpl/src/c/shared/shared.h M /issm/trunk-jpl/src/m/os/issmscpin.m M /issm/trunk-jpl/src/m/os/issmscpout.m M /issm/trunk-jpl/src/wrappers/matlab/Makefile.am M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: renamed libISSMWrappers libISSMModules\\
+\vspace{3em}
+
+\noindent \textbf{Change \#429} with diff file ISSM-13832-13833.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/os/issmscpin.m M /issm/trunk-jpl/src/m/os/issmscpout.m\\
+Export determination: 6. \\
+Rationale: CHG: reverted back\\
+\vspace{3em}
+
+\noindent \textbf{Change \#430} with diff file ISSM-13833-13834.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Nodes.cpp M /issm/trunk-jpl/src/c/Container/Nodes.h\\
+Export determination: 6. \\
+Rationale: NEW: added NumberofDofLocal for matrix allocation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#431} with diff file ISSM-13834-13835.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/android/helloworld/My First App M /issm/trunk-jpl/src/android/helloworld/My First App/bin\\
+Export determination: 6. \\
+Rationale: CHG: getting svn to ignore files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#432} with diff file ISSM-13835-13836.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/android/helloworld/My First App\\
+Export determination: 6. \\
+Rationale: CHG: getting svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#433} with diff file ISSM-13836-13837.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.m M /issm/trunk-jpl/src/m/plot/colormaps/getcolormap.m A /issm/trunk-jpl/src/m/plot/curvedarrow.m M /issm/trunk-jpl/src/m/plot/plot\_riftrelvel.m\\
+Export determination: 6. \\
+Rationale: NEW: curvedarrow routine + changes to add more options.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#434} with diff file ISSM-13837-13838.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/helloworld/ISSM A /issm/trunk-jpl/src/android/helloworld/ISSM/.classpath A /issm/trunk-jpl/src/android/helloworld/ISSM/.project A /issm/trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/assets A /issm/trunk-jpl/src/android/helloworld/ISSM/bin A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/AndroidManifest.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/ISSM.apk A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/BuildConfig.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/ISSM.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLRenderer.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLSurfaceView.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$attr.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$drawable.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$id.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$layout.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$menu.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$string.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$style.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/Triangle.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/jarlist.cache A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/resources.ap\_ A /issm/trunk-jpl/src/android/helloworld/ISSM/gen A /issm/trunk-jpl/src/android/helloworld/ISSM/gen/com A /issm/trunk-jpl/src/android/helloworld/ISSM/gen/com/example A /issm/trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm A /issm/trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/BuildConfig.java A /issm/trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/R.java A /issm/trunk-jpl/src/android/helloworld/ISSM/ic\_launcher-web.png A /issm/trunk-jpl/src/android/helloworld/ISSM/libs A /issm/trunk-jpl/src/android/helloworld/ISSM/libs/android-support-v4.jar A /issm/trunk-jpl/src/android/helloworld/ISSM/proguard-project.txt A /issm/trunk-jpl/src/android/helloworld/ISSM/project.properties A /issm/trunk-jpl/src/android/helloworld/ISSM/res A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/layout A /issm/trunk-jpl/src/android/helloworld/ISSM/res/layout/activity\_issm.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/res/menu A /issm/trunk-jpl/src/android/helloworld/ISSM/res/menu/activity\_issm.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values/strings.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values/styles.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values-v11 A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values-v11/styles.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values-v14 A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values-v14/styles.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/src A /issm/trunk-jpl/src/android/helloworld/ISSM/src/com A /issm/trunk-jpl/src/android/helloworld/ISSM/src/com/example A /issm/trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm A /issm/trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/ISSM.java A /issm/trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java A /issm/trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLSurfaceView.java\\
+Export determination: 6. \\
+Rationale: New ISSM Prototype App with official logo.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#435} with diff file ISSM-13838-13839.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/android/helloworld/ISSM\\
+Export determination: 6. \\
+Rationale: CHG: deleting ISSM app\\
+\vspace{3em}
+
+\noindent \textbf{Change \#436} with diff file ISSM-13839-13840.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/helloworld/ISSM A /issm/trunk-jpl/src/android/helloworld/ISSM/.classpath A /issm/trunk-jpl/src/android/helloworld/ISSM/.project A /issm/trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/assets A /issm/trunk-jpl/src/android/helloworld/ISSM/bin A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/AndroidManifest.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/ISSM.apk A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/BuildConfig.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/ISSM.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLRenderer.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/MyGLSurfaceView.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$attr.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$drawable.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$id.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$layout.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$menu.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$string.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R\$style.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/R.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes/com/example/issm/Triangle.class A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/jarlist.cache A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-hdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-ldpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-mdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/res/drawable-xhdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/bin/resources.ap\_ A /issm/trunk-jpl/src/android/helloworld/ISSM/gen A /issm/trunk-jpl/src/android/helloworld/ISSM/gen/com A /issm/trunk-jpl/src/android/helloworld/ISSM/gen/com/example A /issm/trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm A /issm/trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/BuildConfig.java A /issm/trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm/R.java A /issm/trunk-jpl/src/android/helloworld/ISSM/ic\_launcher-web.png A /issm/trunk-jpl/src/android/helloworld/ISSM/libs A /issm/trunk-jpl/src/android/helloworld/ISSM/libs/android-support-v4.jar A /issm/trunk-jpl/src/android/helloworld/ISSM/proguard-project.txt A /issm/trunk-jpl/src/android/helloworld/ISSM/project.properties A /issm/trunk-jpl/src/android/helloworld/ISSM/res A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-hdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-ldpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-mdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/drawable-xhdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/helloworld/ISSM/res/layout A /issm/trunk-jpl/src/android/helloworld/ISSM/res/layout/activity\_issm.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/res/menu A /issm/trunk-jpl/src/android/helloworld/ISSM/res/menu/activity\_issm.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values/strings.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values/styles.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values-v11 A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values-v11/styles.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values-v14 A /issm/trunk-jpl/src/android/helloworld/ISSM/res/values-v14/styles.xml A /issm/trunk-jpl/src/android/helloworld/ISSM/src A /issm/trunk-jpl/src/android/helloworld/ISSM/src/com A /issm/trunk-jpl/src/android/helloworld/ISSM/src/com/example A /issm/trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm A /issm/trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/ISSM.java A /issm/trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java A /issm/trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLSurfaceView.java\\
+Export determination: 6. \\
+Rationale: CHG: new ISSM app\\
+\vspace{3em}
+
+\noindent \textbf{Change \#437} with diff file ISSM-13840-13841.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: need to ignore seek for compile\\
+\vspace{3em}
+
+\noindent \textbf{Change \#438} with diff file ISSM-13841-13842.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/android/helloworld/ISSM/.classpath M /issm/trunk-jpl/src/android/helloworld/ISSM/AndroidManifest.xml M /issm/trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java\\
+Export determination: 6. \\
+Rationale: Fixed problem from the AndroidManifest.xml file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#439} with diff file ISSM-13842-13843.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/ec2api A /issm/trunk-jpl/externalpackages/ec2api/doc A /issm/trunk-jpl/externalpackages/ec2api/doc/EC2\_API\_GET\_STARTED.html A /issm/trunk-jpl/externalpackages/ec2api/doc/ec2-ug.pdf A /issm/trunk-jpl/externalpackages/ec2api/doc/mpi-cluster-with-python-and-amazon-ec2-part-2-of-3.html A /issm/trunk-jpl/externalpackages/ec2api/doc/notes A /issm/trunk-jpl/externalpackages/ec2api/install.sh\\
+Export determination: 6. \\
+Rationale: NEW: ec2api package for handling amazon clusters\\
+\vspace{3em}
+
+\noindent \textbf{Change \#440} with diff file ISSM-13843-13844.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/ec2ami A /issm/trunk-jpl/externalpackages/ec2ami/ec2-ami-tools.zip A /issm/trunk-jpl/externalpackages/ec2ami/install.sh\\
+Export determination: 6. \\
+Rationale: NEW: ec2ami amazon tool suite\\
+\vspace{3em}
+
+\noindent \textbf{Change \#441} with diff file ISSM-13844-13845.diff: \\
+Function name: \\
+D /issm/trunk-jpl/externalpackages/ec2ami/ec2-ami-tools.zip\\
+Export determination: 6. \\
+Rationale: CHG: not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#442} with diff file ISSM-13845-13846.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/android/android-ndk M /issm/trunk-jpl/externalpackages/android/android-sdk M /issm/trunk-jpl/externalpackages/esmf M /issm/trunk-jpl/externalpackages/gmake\\
+Export determination: 6. \\
+Rationale: CHG: getting svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#443} with diff file ISSM-13846-13847.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-macosx64-larour.sh\\
+Export determination: 6. \\
+Rationale: CHG: not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#444} with diff file ISSM-13847-13848.diff: \\
+Function name: \\
+M /issm/trunk-jpl/etc/environment.sh\\
+Export determination: 6. \\
+Rationale: BUG:Fix prepath and GDAL include\\
+\vspace{3em}
+
+\noindent \textbf{Change \#445} with diff file ISSM-13848-13849.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/gdal/install\_macosx.sh\\
+Export determination: 6. \\
+Rationale: NEW:GDAL for Mac\\
+\vspace{3em}
+
+\noindent \textbf{Change \#446} with diff file ISSM-13849-13850.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/gdal/GDALmake.opt.patch.astrid A /issm/trunk-jpl/externalpackages/gdal/install\_astrid.sh\\
+Export determination: 6. \\
+Rationale: NEW: add specific scripts for astrid\\
+\vspace{3em}
+
+\noindent \textbf{Change \#447} with diff file ISSM-13850-13851.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/gdal/install\_astrid.sh\\
+Export determination: 6. \\
+Rationale: CHG: name patch file with astrid\\
+\vspace{3em}
+
+\noindent \textbf{Change \#448} with diff file ISSM-13851-13852.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/gdal/install-linux64-astrid.sh (from /issm/trunk-jpl/externalpackages/gdal/install\_astrid.sh:13850) A /issm/trunk-jpl/externalpackages/gdal/install-linux64-murdo.sh (from /issm/trunk-jpl/externalpackages/gdal/install-murdo.sh:13850) A /issm/trunk-jpl/externalpackages/gdal/install-macosx64.sh (from /issm/trunk-jpl/externalpackages/gdal/install\_macosx.sh:13850) D /issm/trunk-jpl/externalpackages/gdal/install-murdo.sh D /issm/trunk-jpl/externalpackages/gdal/install.sh D /issm/trunk-jpl/externalpackages/gdal/install\_astrid.sh D /issm/trunk-jpl/externalpackages/gdal/install\_macosx.sh\\
+Export determination: 6. \\
+Rationale: CHG: renamed installation scripts\\
+\vspace{3em}
+
+\noindent \textbf{Change \#449} with diff file ISSM-13852-13853.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/controltao\_core.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed tao, now optimazing actual core\\
+\vspace{3em}
+
+\noindent \textbf{Change \#450} with diff file ISSM-13853-13854.diff: \\
+Function name: \\
+D /issm/trunk-jpl/configs/config-linux64-astrid-python.sh M /issm/trunk-jpl/configs/config-linux64-astrid.sh M /issm/trunk-jpl/configs/config-macosx-snowleopard-bothapis.sh M /issm/trunk-jpl/configs/config-macosx-snowleopard-python.sh M /issm/trunk-jpl/configs/config-macosx64-chris-bothapis.sh M /issm/trunk-jpl/configs/config-macosx64-chris-python.sh M /issm/trunk-jpl/configs/config-macosx64-larour-nopetsc.sh M /issm/trunk-jpl/configs/config-macosx64-larour-python.sh M /issm/trunk-jpl/configs/config-macosx64-lion-helene.sh\\
+Export determination: 6. \\
+Rationale: CHG: python-version not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#451} with diff file ISSM-13854-13855.diff: \\
+Function name: \\
+M /issm/trunk-jpl/etc/environment.csh\\
+Export determination: 6. \\
+Rationale: CHG: need cmake to prepend PATH\\
+\vspace{3em}
+
+\noindent \textbf{Change \#452} with diff file ISSM-13855-13856.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/solutions/AdjointCorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp M /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp D /issm/trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp A /issm/trunk-jpl/src/c/solutions/WrapperCorePointerFromSolutionEnum.cpp (from /issm/trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp:13852) M /issm/trunk-jpl/src/c/solutions/control\_core.cpp M /issm/trunk-jpl/src/c/solutions/controltao\_core.cpp M /issm/trunk-jpl/src/c/solutions/solutions.h\\
+Export determination: 6. \\
+Rationale: CHG: renamed PureCorePointer->CorePointer and CorePointer->WrapperCorePointer\\
+\vspace{3em}
+
+\noindent \textbf{Change \#453} with diff file ISSM-13856-13857.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/inversion.py\\
+Export determination: 6. \\
+Rationale: CHG: Change Python control\_parameter marshaling from column vector to row vector like Matlab.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#454} with diff file ISSM-13857-13858.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetMarineIceSheetBC.py M /issm/trunk-jpl/src/m/classes/model/model.m M /issm/trunk-jpl/src/m/classes/model/model.py M /issm/trunk-jpl/src/m/classes/verbose.py M /issm/trunk-jpl/src/m/mesh/bamg.py M /issm/trunk-jpl/src/m/parameterization/contourenvelope.m A /issm/trunk-jpl/src/m/parameterization/contourenvelope.py\\
+Export determination: 6. \\
+Rationale: NEW: Added python model.extract and contourenvelope (plus matlab cosmetic changes).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#455} with diff file ISSM-13858-13859.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/python\_skipped\_tests.txt M /issm/trunk-jpl/test/NightlyRun/python\_test\_guidelines.txt M /issm/trunk-jpl/test/NightlyRun/test511.m A /issm/trunk-jpl/test/NightlyRun/test511.py M /issm/trunk-jpl/test/NightlyRun/test613.m A /issm/trunk-jpl/test/NightlyRun/test613.py\\
+Export determination: 6. \\
+Rationale: NEW: Working python test511 and test613.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#456} with diff file ISSM-13859-13860.diff: \\
+Function name: \\
+A /issm/trunk-jpl/scripts/BinRead.py (from /issm/trunk-jpl/src/m/miscellaneous/BinRead.py:13709) D /issm/trunk-jpl/src/m/miscellaneous/BinRead.py\\
+Export determination: 6. \\
+Rationale: CHG: Didn't know about scripts directory.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#457} with diff file ISSM-13860-13861.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/Elements/Element.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h\\
+Export determination: 6. \\
+Rationale: NEW: added SetwiseConnectivity for stiffness matrix preallocation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#458} with diff file ISSM-13861-13862.diff: \\
+Function name: \\
+D /issm/trunk-jpl/externalpackages/esmf/doc M /issm/trunk-jpl/externalpackages/esmf/install.sh\\
+Export determination: 6. \\
+Rationale: DEL: documentation is now downloaded at installation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#459} with diff file ISSM-13862-13863.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/autodiff.py M /issm/trunk-jpl/src/m/classes/dependent.m A /issm/trunk-jpl/src/m/classes/dependent.py M /issm/trunk-jpl/src/m/classes/independent.m A /issm/trunk-jpl/src/m/classes/independent.py\\
+Export determination: 6. \\
+Rationale: NEW: Updated python autodiff to matlab version and added python dependent and independent (plus matlab cosmetic changes).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#460} with diff file ISSM-13863-13864.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/autodiff.m M /issm/trunk-jpl/src/m/classes/autodiff.py M /issm/trunk-jpl/src/m/classes/dependent.py M /issm/trunk-jpl/src/m/classes/independent.py\\
+Export determination: 6. \\
+Rationale: FIX: Various small things.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#461} with diff file ISSM-13864-13865.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.cpp M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: Removed mexCallMATLAB and associated Matlab dependencies from MeshProfileIntersection to create Python version.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#462} with diff file ISSM-13865-13866.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/autodiff.py M /issm/trunk-jpl/src/m/classes/dependent.py M /issm/trunk-jpl/src/m/classes/independent.py\\
+Export determination: 6. \\
+Rationale: CHG: Enabling MeshProfileIntersection and more small changes.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#463} with diff file ISSM-13866-13867.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/verbose.py\\
+Export determination: 6. \\
+Rationale: NEW: Updated python verbose to [13435].\\
+\vspace{3em}
+
+\noindent \textbf{Change \#464} with diff file ISSM-13867-13868.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/WriteData.py\\
+Export determination: 6. \\
+Rationale: CHG: Changed checks in WriteData.py to allow lists and tuples.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#465} with diff file ISSM-13868-13869.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp\\
+Export determination: 6. \\
+Rationale: CHG: no need to use MatCompress (never implemented: http://lists.mcs.anl.gov/pipermail/petsc-dev/2010-January/002029.html\\
+\vspace{3em}
+
+\noindent \textbf{Change \#466} with diff file ISSM-13869-13870.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/matrix/Matrix.h M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.h\\
+Export determination: 6. \\
+Rationale: NEW: added AllocationInfo method for matrices\\
+\vspace{3em}
+
+\noindent \textbf{Change \#467} with diff file ISSM-13870-13871.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/curvedarrow.m M /issm/trunk-jpl/src/m/plot/plot\_riftrelvel.m\\
+Export determination: 6. \\
+Rationale: CHG: slight mods to these two routines\\
+\vspace{3em}
+
+\noindent \textbf{Change \#468} with diff file ISSM-13871-13872.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/export\_fig\\
+Export determination: 6. \\
+Rationale: CHG: getting svn to ignore some files.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#469} with diff file ISSM-13872-13873.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/gsl M /issm/trunk-jpl/externalpackages/gsl/install-android.sh\\
+Export determination: 6. \\
+Rationale: CHG: fixing some bugs.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#470} with diff file ISSM-13873-13874.diff: \\
+Function name: \\
+M /issm/trunk-jpl/etc/environment.sh\\
+Export determination: 6. \\
+Rationale: CHG: if MPI is not there, environment.sh was not catching it. Fixed it.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#471} with diff file ISSM-13874-13875.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h D /issm/trunk-jpl/src/c/modules/MinVelx D /issm/trunk-jpl/src/c/modules/MinVxx D /issm/trunk-jpl/src/c/modules/MinVyx D /issm/trunk-jpl/src/c/modules/MinVzx M /issm/trunk-jpl/src/c/modules/modules.h\\
+Export determination: 6. \\
+Rationale: CHG: moved some modules to FemModel.cpp\\
+\vspace{3em}
+
+\noindent \textbf{Change \#472} with diff file ISSM-13875-13876.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h D /issm/trunk-jpl/src/c/modules/ElementResponsex D /issm/trunk-jpl/src/c/modules/IceVolumex D /issm/trunk-jpl/src/c/modules/TotalSmbx M /issm/trunk-jpl/src/c/modules/modules.h\\
+Export determination: 6. \\
+Rationale: CHG: moved some modules to FemModel.cpp\\
+\vspace{3em}
+
+\noindent \textbf{Change \#473} with diff file ISSM-13876-13877.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/c/modules/SmearFunctionx\\
+Export determination: 6. \\
+Rationale: DEL: not needed (not even implemented)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#474} with diff file ISSM-13877-13878.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h D /issm/trunk-jpl/src/c/modules/SystemMatricesx M /issm/trunk-jpl/src/c/modules/modules.h M /issm/trunk-jpl/src/c/solvers/solver\_adjoint\_linear.cpp M /issm/trunk-jpl/src/c/solvers/solver\_linear.cpp M /issm/trunk-jpl/src/c/solvers/solver\_newton.cpp M /issm/trunk-jpl/src/c/solvers/solver\_nonlinear.cpp M /issm/trunk-jpl/src/c/solvers/solver\_stokescoupling\_nonlinear.cpp M /issm/trunk-jpl/src/c/solvers/solver\_thermal\_nonlinear.cpp\\
+Export determination: 6. \\
+Rationale: CHG: moved SystemMatrices to FemModel.cpp (for solver\_nonlinear, needed to change femmodel->load if conserveloads=true)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#475} with diff file ISSM-13878-13879.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h\\
+Export determination: 6. \\
+Rationale: NEW: added allocation module, to be continued\\
+\vspace{3em}
+
+\noindent \textbf{Change \#476} with diff file ISSM-13879-13880.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive237.nc M /issm/trunk-jpl/test/NightlyRun/test108.m M /issm/trunk-jpl/test/NightlyRun/test108.py M /issm/trunk-jpl/test/NightlyRun/test202.py M /issm/trunk-jpl/test/NightlyRun/test203.py M /issm/trunk-jpl/test/NightlyRun/test204.py M /issm/trunk-jpl/test/NightlyRun/test205.py M /issm/trunk-jpl/test/NightlyRun/test206.py M /issm/trunk-jpl/test/NightlyRun/test207.m M /issm/trunk-jpl/test/NightlyRun/test207.py M /issm/trunk-jpl/test/NightlyRun/test208.py M /issm/trunk-jpl/test/NightlyRun/test209.py M /issm/trunk-jpl/test/NightlyRun/test210.py M /issm/trunk-jpl/test/NightlyRun/test211.py M /issm/trunk-jpl/test/NightlyRun/test212.py M /issm/trunk-jpl/test/NightlyRun/test213.py M /issm/trunk-jpl/test/NightlyRun/test214.py M /issm/trunk-jpl/test/NightlyRun/test215.py M /issm/trunk-jpl/test/NightlyRun/test216.py M /issm/trunk-jpl/test/NightlyRun/test217.py M /issm/trunk-jpl/test/NightlyRun/test219.py M /issm/trunk-jpl/test/NightlyRun/test220.py M /issm/trunk-jpl/test/NightlyRun/test232.m M /issm/trunk-jpl/test/NightlyRun/test232.py M /issm/trunk-jpl/test/NightlyRun/test3001.py M /issm/trunk-jpl/test/NightlyRun/test3002.py M /issm/trunk-jpl/test/NightlyRun/test3003.py M /issm/trunk-jpl/test/NightlyRun/test3004.py M /issm/trunk-jpl/test/NightlyRun/test3005.py M /issm/trunk-jpl/test/NightlyRun/test3006.py M /issm/trunk-jpl/test/NightlyRun/test3007.py M /issm/trunk-jpl/test/NightlyRun/test3008.py M /issm/trunk-jpl/test/NightlyRun/test3009.py M /issm/trunk-jpl/test/NightlyRun/test3010.py M /issm/trunk-jpl/test/NightlyRun/test318.m M /issm/trunk-jpl/test/NightlyRun/test318.py M /issm/trunk-jpl/test/NightlyRun/test406.m M /issm/trunk-jpl/test/NightlyRun/test406.py M /issm/trunk-jpl/test/NightlyRun/test415.m M /issm/trunk-jpl/test/NightlyRun/test415.py M /issm/trunk-jpl/test/NightlyRun/test426.m M /issm/trunk-jpl/test/NightlyRun/test426.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed some tolerances, updated test237 archive and removed all headers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#477} with diff file ISSM-13880-13881.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/matrix/Matrix.h M /issm/trunk-jpl/src/c/classes/matrix/Vector.h M /issm/trunk-jpl/src/c/toolkits/issm/SeqMat.h M /issm/trunk-jpl/src/c/toolkits/issm/SeqVec.h M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.h M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.h\\
+Export determination: 6. \\
+Rationale: NEW: added new constructors for matrix and vector, with local and global sizes that are provided\\
+\vspace{3em}
+
+\noindent \textbf{Change \#478} with diff file ISSM-13881-13882.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h\\
+Export determination: 6. \\
+Rationale: NEW: finishing up stiffness matrix allocation algorithm\\
+\vspace{3em}
+
+\noindent \textbf{Change \#479} with diff file ISSM-13882-13883.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/android/issm-android-inputfiles/test102.bin M /issm/trunk-jpl/src/android/issm-android-inputfiles/test102.petsc\\
+Export determination: 6. \\
+Rationale: CHG: updated input files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#480} with diff file ISSM-13883-13884.diff: \\
+Function name: \\
+M /issm/trunk-jpl/etc/environment.sh\\
+Export determination: 6. \\
+Rationale: CHG: new location for arm toolchain\\
+\vspace{3em}
+
+\noindent \textbf{Change \#481} with diff file ISSM-13884-13885.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/android/android-ndk/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: different location for arm toolsuite\\
+\vspace{3em}
+
+\noindent \textbf{Change \#482} with diff file ISSM-13885-13886.diff: \\
+Function name: \\
+M /issm/trunk-jpl/etc/environment.sh\\
+Export determination: 6. \\
+Rationale: CHG: different location for arm toolsuite\\
+\vspace{3em}
+
+\noindent \textbf{Change \#483} with diff file ISSM-13886-13887.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/Elements/Element.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h\\
+Export determination: 6. \\
+Rationale: NEW: added GetMaxNodes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#484} with diff file ISSM-13887-13888.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Elements.cpp M /issm/trunk-jpl/src/c/Container/Elements.h\\
+Export determination: 6. \\
+Rationale: NEW: added GetMaxNodes\\
+\vspace{3em}
+
+\noindent \textbf{Change \#485} with diff file ISSM-13888-13889.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: protect with HAVE\_MPI\\
+\vspace{3em}
+
+\noindent \textbf{Change \#486} with diff file ISSM-13889-13890.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: improved some aspects of stiffness matrix allocation (get number of nodes per elements), still some work to do\\
+\vspace{3em}
+
+\noindent \textbf{Change \#487} with diff file ISSM-13890-13891.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/ISSM A /issm/trunk-jpl/src/android/ISSM/.classpath A /issm/trunk-jpl/src/android/ISSM/.project A /issm/trunk-jpl/src/android/ISSM/AndroidManifest.xml A /issm/trunk-jpl/src/android/ISSM/assets A /issm/trunk-jpl/src/android/ISSM/bin A /issm/trunk-jpl/src/android/ISSM/gen A /issm/trunk-jpl/src/android/ISSM/gen/com A /issm/trunk-jpl/src/android/ISSM/gen/com/example A /issm/trunk-jpl/src/android/ISSM/gen/com/example/issm A /issm/trunk-jpl/src/android/ISSM/gen/com/example/issm/BuildConfig.java A /issm/trunk-jpl/src/android/ISSM/gen/com/example/issm/R.java A /issm/trunk-jpl/src/android/ISSM/ic\_launcher-web.png A /issm/trunk-jpl/src/android/ISSM/jni A /issm/trunk-jpl/src/android/ISSM/jni/Android.mk A /issm/trunk-jpl/src/android/ISSM/jni/Main.cpp A /issm/trunk-jpl/src/android/ISSM/jni/com\_example\_issm\_FacLib.h A /issm/trunk-jpl/src/android/ISSM/jni/issmlib A /issm/trunk-jpl/src/android/ISSM/jni/issmlib/Android.mk A /issm/trunk-jpl/src/android/ISSM/jni/issmlib/include A /issm/trunk-jpl/src/android/ISSM/jni/issmlib/include/fac.h A /issm/trunk-jpl/src/android/ISSM/libs A /issm/trunk-jpl/src/android/ISSM/obj A /issm/trunk-jpl/src/android/ISSM/obj/local A /issm/trunk-jpl/src/android/ISSM/obj/local/armeabi A /issm/trunk-jpl/src/android/ISSM/obj/local/armeabi/objs A /issm/trunk-jpl/src/android/ISSM/obj/local/armeabi/objs/FacLib A /issm/trunk-jpl/src/android/ISSM/obj/local/armeabi/objs/FacLib/Main.o.d A /issm/trunk-jpl/src/android/ISSM/proguard-project.txt A /issm/trunk-jpl/src/android/ISSM/project.properties A /issm/trunk-jpl/src/android/ISSM/res A /issm/trunk-jpl/src/android/ISSM/res/drawable-hdpi A /issm/trunk-jpl/src/android/ISSM/res/drawable-hdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/ISSM/res/drawable-hdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/ISSM/res/drawable-ldpi A /issm/trunk-jpl/src/android/ISSM/res/drawable-ldpi/ic\_launcher.png A /issm/trunk-jpl/src/android/ISSM/res/drawable-mdpi A /issm/trunk-jpl/src/android/ISSM/res/drawable-mdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/ISSM/res/drawable-mdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/ISSM/res/drawable-xhdpi A /issm/trunk-jpl/src/android/ISSM/res/drawable-xhdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/ISSM/res/drawable-xhdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/ISSM/res/layout A /issm/trunk-jpl/src/android/ISSM/res/layout/activity\_issm.xml A /issm/trunk-jpl/src/android/ISSM/res/menu A /issm/trunk-jpl/src/android/ISSM/res/menu/activity\_issm.xml A /issm/trunk-jpl/src/android/ISSM/res/values A /issm/trunk-jpl/src/android/ISSM/res/values/dimens.xml A /issm/trunk-jpl/src/android/ISSM/res/values/strings.xml A /issm/trunk-jpl/src/android/ISSM/res/values/styles.xml A /issm/trunk-jpl/src/android/ISSM/res/values-large A /issm/trunk-jpl/src/android/ISSM/res/values-large/dimens.xml A /issm/trunk-jpl/src/android/ISSM/res/values-v11 A /issm/trunk-jpl/src/android/ISSM/res/values-v11/styles.xml A /issm/trunk-jpl/src/android/ISSM/res/values-v14 A /issm/trunk-jpl/src/android/ISSM/res/values-v14/styles.xml A /issm/trunk-jpl/src/android/ISSM/src A /issm/trunk-jpl/src/android/ISSM/src/com A /issm/trunk-jpl/src/android/ISSM/src/com/example A /issm/trunk-jpl/src/android/ISSM/src/com/example/issm A /issm/trunk-jpl/src/android/ISSM/src/com/example/issm/FacLib.java A /issm/trunk-jpl/src/android/ISSM/src/com/example/issm/ISSM.java\\
+Export determination: 6. \\
+Rationale: NEW: ISSM project that links against libISSMCore.a library\\
+\vspace{3em}
+
+\noindent \textbf{Change \#488} with diff file ISSM-13891-13892.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/android/ISSM/bin A /issm/trunk-jpl/src/android/ISSM/bin/AndroidManifest.xml M /issm/trunk-jpl/src/android/ISSM/libs\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#489} with diff file ISSM-13892-13893.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/Elements/Element.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h\\
+Export determination: 6. \\
+Rationale: NEW: added GetNodesSidList\\
+\vspace{3em}
+
+\noindent \textbf{Change \#490} with diff file ISSM-13893-13894.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added MAT\_NEW\_NONZERO\_ALLOCATION\_ERR as an option for PetscMat.cpp, this is useful when checking for memory allocation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#491} with diff file ISSM-13894-13895.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: CHG: still working on matric preallocation, nothing new at this point. Temporary commit\\
+\vspace{3em}
+
+\noindent \textbf{Change \#492} with diff file ISSM-13895-13896.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp\\
+Export determination: 6. \\
+Rationale: CHG: testing change for petsc-dev (const MatType)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#493} with diff file ISSM-13896-13897.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/ISSM/jni/issmlib/libISSMCore.a\\
+Export determination: 6. \\
+Rationale: Added libISSMCore.a\\
+\vspace{3em}
+
+\noindent \textbf{Change \#494} with diff file ISSM-13897-13898.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/toolkits/petsc/patches/NewMat.cpp\\
+Export determination: 6. \\
+Rationale: CHG: the otehr way around for petsc dev\\
+\vspace{3em}
+
+\noindent \textbf{Change \#495} with diff file ISSM-13898-13899.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/android/helloworld/ISSM/src/com/example/issm/MyGLRenderer.java\\
+Export determination: 6. \\
+Rationale: New triangle added\\
+\vspace{3em}
+
+\noindent \textbf{Change \#496} with diff file ISSM-13899-13900.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/solve/WriteData.py\\
+Export determination: 6. \\
+Rationale: FIX: Try again to allow WriteData.py for lists and tuples.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#497} with diff file ISSM-13900-13901.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test3001.py M /issm/trunk-jpl/test/NightlyRun/test3002.py M /issm/trunk-jpl/test/NightlyRun/test3003.py M /issm/trunk-jpl/test/NightlyRun/test3004.py M /issm/trunk-jpl/test/NightlyRun/test3005.py M /issm/trunk-jpl/test/NightlyRun/test3006.py M /issm/trunk-jpl/test/NightlyRun/test3007.py M /issm/trunk-jpl/test/NightlyRun/test3008.py M /issm/trunk-jpl/test/NightlyRun/test3009.py M /issm/trunk-jpl/test/NightlyRun/test3010.py M /issm/trunk-jpl/test/NightlyRun/test3015.m A /issm/trunk-jpl/test/NightlyRun/test3015.py M /issm/trunk-jpl/test/NightlyRun/test3019.m A /issm/trunk-jpl/test/NightlyRun/test3019.py M /issm/trunk-jpl/test/NightlyRun/test3020.m A /issm/trunk-jpl/test/NightlyRun/test3020.py\\
+Export determination: 6. \\
+Rationale: NEW: Working (up to ADOLC) test3???.py (plus cosmetic Matlab changes).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#498} with diff file ISSM-13901-13902.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Elements/PrintArrays.cpp M /issm/trunk-jpl/src/c/shared/Elements/elements.h\\
+Export determination: 6. \\
+Rationale: NEW: added printsparsity, very useful to debug memory allocation module\\
+\vspace{3em}
+
+\noindent \textbf{Change \#499} with diff file ISSM-13902-13903.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: BUG: fixed issue in matrix preallocation, number of non zeros must be constrained by the number of columns, not the number of lines (for Kfs)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#500} with diff file ISSM-13903-13904.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: NEW: added SetwiseNodeConnectivity for Penta\\
+\vspace{3em}
+
+\noindent \textbf{Change \#501} with diff file ISSM-13904-13905.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: removed some useless code\\
+\vspace{3em}
+
+\noindent \textbf{Change \#502} with diff file ISSM-13905-13906.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/ad/todo\\
+Export determination: 6. \\
+Rationale: CHG: ad todo\\
+\vspace{3em}
+
+\noindent \textbf{Change \#503} with diff file ISSM-13906-13907.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-macosx64-larour-ad.sh M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: missing WRAPPERS symbol for compilation of python modules.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#504} with diff file ISSM-13907-13908.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Nodes.cpp\\
+Export determination: 6. \\
+Rationale: CHG: testing whether a couple of lines of code is necessary (if max\_sid==1), this should not happen\\
+\vspace{3em}
+
+\noindent \textbf{Change \#505} with diff file ISSM-13908-13909.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-macosx64-chris-python.sh\\
+Export determination: 6. \\
+Rationale: CHG: plapack not needed\\
+\vspace{3em}
+
+\noindent \textbf{Change \#506} with diff file ISSM-13909-13910.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp M /issm/trunk-jpl/src/c/classes/objects/Elements/PentaHook.h M /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp\\
+Export determination: 6. \\
+Rationale: CHG: debugged matrix allocation for BedSlopes: confused between configuration\_type and analysis\_type\\
+\vspace{3em}
+
+\noindent \textbf{Change \#507} with diff file ISSM-13910-13911.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.py\\
+Export determination: 6. \\
+Rationale: BUG: reshape arrays for call to ContourToNodes and pass only filename since OrderedDict is not yet supported in FetchData\\
+\vspace{3em}
+
+\noindent \textbf{Change \#508} with diff file ISSM-13911-13912.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/petsc/install-3.3-pleiades.sh\\
+Export determination: 6. \\
+Rationale: CHG: working config file for petsc 3.3\\
+\vspace{3em}
+
+\noindent \textbf{Change \#509} with diff file ISSM-13912-13913.diff: \\
+Function name: \\
+A /issm/trunk-jpl/externalpackages/dakota/install-pleiades-petsc3.3.sh\\
+Export determination: 6. \\
+Rationale: NEW: add install script to match petsc3.3\\
+\vspace{3em}
+
+\noindent \textbf{Change \#510} with diff file ISSM-13913-13914.diff: \\
+Function name: \\
+A /issm/trunk-jpl/configs/config-pleiades-petsc3.3.sh\\
+Export determination: 6. \\
+Rationale: NEW: add install script to match petsc3.3\\
+\vspace{3em}
+
+\noindent \textbf{Change \#511} with diff file ISSM-13914-13915.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/shared/Elements/PrintArrays.cpp\\
+Export determination: 6. \\
+Rationale: NEW: printsparsity now prints number of non zero per row\\
+\vspace{3em}
+
+\noindent \textbf{Change \#512} with diff file ISSM-13915-13916.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Load.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Penpair.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Riftfront.h\\
+Export determination: 6. \\
+Rationale: NEW: added memory allocation methods for loads\\
+\vspace{3em}
+
+\noindent \textbf{Change \#513} with diff file ISSM-13916-13917.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Loads.cpp M /issm/trunk-jpl/src/c/Container/Loads.h\\
+Export determination: 6. \\
+Rationale: NEW: added memory allocation methods for loads\\
+\vspace{3em}
+
+\noindent \textbf{Change \#514} with diff file ISSM-13917-13918.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/mesh/bamg.py\\
+Export determination: 6. \\
+Rationale: BUG: update counter with += not =+\\
+\vspace{3em}
+
+\noindent \textbf{Change \#515} with diff file ISSM-13918-13919.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp\\
+Export determination: 6. \\
+Rationale: NEW: final touches to matrix preallocation\\
+\vspace{3em}
+
+\noindent \textbf{Change \#516} with diff file ISSM-13919-13920.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-discover.sh\\
+Export determination: 6. \\
+Rationale: CHG: add flag needed to avoid error during compile\\
+\vspace{3em}
+
+\noindent \textbf{Change \#517} with diff file ISSM-13920-13921.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/discover.m\\
+Export determination: 6. \\
+Rationale: CHG: need new compiler for compatibility with GEOS-5 modules\\
+\vspace{3em}
+
+\noindent \textbf{Change \#518} with diff file ISSM-13921-13922.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/clusters/discover.m\\
+Export determination: 6. \\
+Rationale: BUG: wrong directory for module\\
+\vspace{3em}
+
+\noindent \textbf{Change \#519} with diff file ISSM-13922-13923.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test410.m M /issm/trunk-jpl/test/NightlyRun/test410.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#520} with diff file ISSM-13923-13924.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.cpp M /issm/trunk-jpl/src/wrappers/python/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: added python support for InterpFromGridtoMesh in wrappers\\
+\vspace{3em}
+
+\noindent \textbf{Change \#521} with diff file ISSM-13924-13925.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test3015.py M /issm/trunk-jpl/test/NightlyRun/test3020.py\\
+Export determination: 6. \\
+Rationale: FIX: In python tests 3015 and 3020, indices get converted to base 0 later.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#522} with diff file ISSM-13925-13926.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Container/Loads.cpp M /issm/trunk-jpl/src/c/Container/Loads.h M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Load.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Penpair.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Penpair.h M /issm/trunk-jpl/src/c/classes/objects/Loads/Riftfront.cpp M /issm/trunk-jpl/src/c/classes/objects/Loads/Riftfront.h M /issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp M /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp\\
+Export determination: 6. \\
+Rationale: NEW: Finished stiffness allocation matrix (still turned off), also, as of PETSC 3.3, no new nonzero can be added after matrix assembly. We now do a dry run to get Kff\_max if penalties are present\\
+\vspace{3em}
+
+\noindent \textbf{Change \#523} with diff file ISSM-13926-13927.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/Archives/Archive237.nc\\
+Export determination: 6. \\
+Rationale: CHG: updated archive\\
+\vspace{3em}
+
+\noindent \textbf{Change \#524} with diff file ISSM-13927-13928.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/android/ISSM/jni/issmlib/libISSMCore.a\\
+Export determination: 6. \\
+Rationale: CHG: not needed here anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#525} with diff file ISSM-13928-13929.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/android/ISSM/jni/issmlib/Android.mk D /issm/trunk-jpl/src/android/ISSM/jni/issmlib/include\\
+Export determination: 6. \\
+Rationale: CHG: not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#526} with diff file ISSM-13929-13930.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/android/helloworld/ISSM/bin/classes.dex\\
+Export determination: 6. \\
+Rationale: CHG: getting svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#527} with diff file ISSM-13930-13931.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/android/helloworld/ISSM/bin M /issm/trunk-jpl/src/android/helloworld/ISSM/gen/com/example/issm M /issm/trunk-jpl/src/android/helloworld/My First App/gen/com/example/my/first/app\\
+Export determination: 6. \\
+Rationale: CHG: getting svn to ignore some files\\
+\vspace{3em}
+
+\noindent \textbf{Change \#528} with diff file ISSM-13931-13932.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/android/ISSM A /issm/trunk-jpl/src/android/ISSM/Makefile.am M /issm/trunk-jpl/src/android/ISSM/jni/Android.mk M /issm/trunk-jpl/src/android/ISSM/jni/Main.cpp D /issm/trunk-jpl/src/android/ISSM/jni/com\_example\_issm\_FacLib.h A /issm/trunk-jpl/src/android/ISSM/jni/com\_example\_issm\_IssmJni.h M /issm/trunk-jpl/src/android/ISSM/jni/issmlib/Android.mk D /issm/trunk-jpl/src/android/ISSM/obj M /issm/trunk-jpl/src/android/ISSM/src/com/example/issm/ISSM.java A /issm/trunk-jpl/src/android/ISSM/src/com/example/issm/IssmJni.java\\
+Export determination: 6. \\
+Rationale: CHG: modified process to create ISSM app, using the autotools\\
+\vspace{3em}
+
+\noindent \textbf{Change \#529} with diff file ISSM-13932-13933.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/android A /issm/trunk-jpl/src/android/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: get svn to ignore some files.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#530} with diff file ISSM-13933-13934.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/android/ISSM/src/com/example/issm/FacLib.java\\
+Export determination: 6. \\
+Rationale: CHG: replaced by IssmJni\\
+\vspace{3em}
+
+\noindent \textbf{Change \#531} with diff file ISSM-13934-13935.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.py\\
+Export determination: 6. \\
+Rationale: CHG: get adolc python benchmarks to be possible\\
+\vspace{3em}
+
+\noindent \textbf{Change \#532} with diff file ISSM-13935-13936.diff: \\
+Function name: \\
+M /issm/trunk-jpl/m4/issm\_options.m4\\
+Export determination: 6. \\
+Rationale: CHG: new options for ISSM JNI and EXE\\
+\vspace{3em}
+
+\noindent \textbf{Change \#533} with diff file ISSM-13936-13937.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configs/config-arm-linux.sh M /issm/trunk-jpl/configure.ac M /issm/trunk-jpl/src/Makefile.am M /issm/trunk-jpl/src/c/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: new Makefiles to reach the ISSM app in src/android\\
+\vspace{3em}
+
+\noindent \textbf{Change \#534} with diff file ISSM-13937-13938.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/io/loadvars.py A /issm/trunk-jpl/src/m/io/savevars.py\\
+Export determination: 6. \\
+Rationale: NEW: Python functions to save and load variables (including models) to files.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#535} with diff file ISSM-13938-13939.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp\\
+Export determination: 6. \\
+Rationale: NEW: turning on new allocation module (will look at NR to see if all tests go through)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#536} with diff file ISSM-13939-13940.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/Makefile.am M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/classes/FemModel.h D /issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx M /issm/trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp M /issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp M /issm/trunk-jpl/src/c/modules/modules.h\\
+Export determination: 6. \\
+Rationale: CHG: reverting back to old allocation, Newton's module needs to be fixed (moved it to FemModel)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#537} with diff file ISSM-13940-13941.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solvers/solver\_newton.cpp\\
+Export determination: 6. \\
+Rationale: CHG: CreateJacobianMatrix is now a method of FemModel\\
+\vspace{3em}
+
+\noindent \textbf{Change \#538} with diff file ISSM-13941-13942.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/classes/FemModel.cpp M /issm/trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp M /issm/trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp M /issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp M /issm/trunk-jpl/src/c/modules/Reducevectorgtosx/Reducevectorgtosx.cpp\\
+Export determination: 6. \\
+Rationale: CHG: switching new allocation back on\\
+\vspace{3em}
+
+\noindent \textbf{Change \#539} with diff file ISSM-13942-13943.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/m/io/loadmodel.py\\
+Export determination: 6. \\
+Rationale: NEW: Python version of loadmodel.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#540} with diff file ISSM-13943-13944.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/gsl/install-android.sh\\
+Export determination: 6. \\
+Rationale: CHG: Android build uses GSL shared libraries for BLAS support. However, 'libgsl.so' is not set with the right dependencies. This patches 'Makefile.am'\\
+\vspace{3em}
+
+\noindent \textbf{Change \#541} with diff file ISSM-13944-13945.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test237.m M /issm/trunk-jpl/test/NightlyRun/test237.py M /issm/trunk-jpl/test/NightlyRun/test312.m M /issm/trunk-jpl/test/NightlyRun/test312.py M /issm/trunk-jpl/test/NightlyRun/test505.m M /issm/trunk-jpl/test/NightlyRun/test505.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed some tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#542} with diff file ISSM-13945-13946.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test119.m M /issm/trunk-jpl/test/NightlyRun/test119.py M /issm/trunk-jpl/test/NightlyRun/test237.m M /issm/trunk-jpl/test/NightlyRun/test237.py M /issm/trunk-jpl/test/NightlyRun/test505.m M /issm/trunk-jpl/test/NightlyRun/test505.py\\
+Export determination: 6. \\
+Rationale: CHG: relaxed tolerances\\
+\vspace{3em}
+
+\noindent \textbf{Change \#543} with diff file ISSM-13946-13947.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/organizer.m A /issm/trunk-jpl/src/m/classes/organizer.py M /issm/trunk-jpl/src/m/classes/verbose.py\\
+Export determination: 6. \\
+Rationale: NEW: Preliminary version of organizer.py (plus Matlab cosmetic changes).\\
+\vspace{3em}
+
+\noindent \textbf{Change \#544} with diff file ISSM-13947-13948.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/organizer.py M /issm/trunk-jpl/src/m/io/loadmodel.py M /issm/trunk-jpl/src/m/io/loadvars.py M /issm/trunk-jpl/src/m/io/savevars.py\\
+Export determination: 6. \\
+Rationale: CHG: Change arguments on Python savevars and loadvars to match Matlab.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#545} with diff file ISSM-13948-13949.diff: \\
+Function name: \\
+D /issm/trunk-jpl/externalpackages/chaco/chaco\_guide.pdf D /issm/trunk-jpl/externalpackages/chaco/chaco\_guide.ps M /issm/trunk-jpl/externalpackages/chaco/install.sh D /issm/trunk-jpl/externalpackages/ec2api/doc M /issm/trunk-jpl/externalpackages/ec2api/install.sh M /issm/trunk-jpl/externalpackages/matlab/install.sh M /issm/trunk-jpl/externalpackages/scotch/install.sh D /issm/trunk-jpl/externalpackages/scotch/ptscotch\_user5.1.pdf D /issm/trunk-jpl/externalpackages/scotch/scotch\_user5.1.pdf M /issm/trunk-jpl/externalpackages/shapelib/install.sh D /issm/trunk-jpl/externalpackages/shapelib/shapefile.pdf\\
+Export determination: 6. \\
+Rationale: DEL: moved documentation to issm website (documentation is downloaded at installation)\\
+\vspace{3em}
+
+\noindent \textbf{Change \#546} with diff file ISSM-13949-13950.diff: \\
+Function name: \\
+M /issm/trunk-jpl/externalpackages/matlab/install.sh\\
+Export determination: 6. \\
+Rationale: CHG: reverted back\\
+\vspace{3em}
+
+\noindent \textbf{Change \#547} with diff file ISSM-13950-13951.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/io/loadvars.py M /issm/trunk-jpl/src/m/io/savevars.py\\
+Export determination: 6. \\
+Rationale: CHG: Allow more inputs in Python savevars and loadvars.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#548} with diff file ISSM-13951-13952.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/flowequation.py M /issm/trunk-jpl/src/m/classes/mesh.py\\
+Export determination: 6. \\
+Rationale: CHG: Go faster!\\
+\vspace{3em}
+
+\noindent \textbf{Change \#549} with diff file ISSM-13952-13953.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/radarpower.m\\
+Export determination: 6. \\
+Rationale: BUG: radar image is now in /u/astrid-r1b/ModelData\\
+\vspace{3em}
+
+\noindent \textbf{Change \#550} with diff file ISSM-13953-13954.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/organizer.py\\
+Export determination: 6. \\
+Rationale: BUG: minor syntax fixes for python organizer class\\
+\vspace{3em}
+
+\noindent \textbf{Change \#551} with diff file ISSM-13954-13955.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/c/solutions/issm.cpp\\
+Export determination: 6. \\
+Rationale: BUG: uncomment EnvironmentFinalize\\
+\vspace{3em}
+
+\noindent \textbf{Change \#552} with diff file ISSM-13955-13956.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/organizer.py\\
+Export determination: 6. \\
+Rationale: BUG: fixed step id numbering\\
+\vspace{3em}
+
+\noindent \textbf{Change \#553} with diff file ISSM-13956-13957.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/ISSM/jni/Main\_nojavah.cpp\\
+Export determination: 6. \\
+Rationale: Main method that requires no javah header file\\
+\vspace{3em}
+
+\noindent \textbf{Change \#554} with diff file ISSM-13957-13958.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.py M /issm/trunk-jpl/src/m/plot/processdata.py\\
+Export determination: 6. \\
+Rationale: CHG: minor changes in plot routines\\
+\vspace{3em}
+
+\noindent \textbf{Change \#555} with diff file ISSM-13958-13959.diff: \\
+Function name: \\
+A /issm/trunk-jpl/src/android/ISSM\_Visual A /issm/trunk-jpl/src/android/ISSM\_Visual/.classpath A /issm/trunk-jpl/src/android/ISSM\_Visual/.project A /issm/trunk-jpl/src/android/ISSM\_Visual/AndroidManifest.xml A /issm/trunk-jpl/src/android/ISSM\_Visual/assets A /issm/trunk-jpl/src/android/ISSM\_Visual/bin A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/AndroidManifest.xml A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/ISSM\_Visual.apk A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual/BuildConfig.class A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual/ISSMVisual.class A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual/MyGLRenderer.class A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual/MyGLSurfaceView.class A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual/R\$attr.class A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual/R\$drawable.class A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual/R\$id.class A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual/R\$layout.class A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual/R\$menu.class A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual/R\$string.class A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual/R\$style.class A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual/R.class A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes/com/example/issm\_visual/Triangle.class A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/classes.dex A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/jarlist.cache A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/res A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/res/drawable-hdpi A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/res/drawable-hdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/res/drawable-hdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/res/drawable-ldpi A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/res/drawable-ldpi/ic\_launcher.png A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/res/drawable-mdpi A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/res/drawable-mdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/res/drawable-mdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/res/drawable-xhdpi A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/res/drawable-xhdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/res/drawable-xhdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/ISSM\_Visual/bin/resources.ap\_ A /issm/trunk-jpl/src/android/ISSM\_Visual/gen A /issm/trunk-jpl/src/android/ISSM\_Visual/gen/com A /issm/trunk-jpl/src/android/ISSM\_Visual/gen/com/example A /issm/trunk-jpl/src/android/ISSM\_Visual/gen/com/example/issm\_visual A /issm/trunk-jpl/src/android/ISSM\_Visual/gen/com/example/issm\_visual/BuildConfig.java A /issm/trunk-jpl/src/android/ISSM\_Visual/gen/com/example/issm\_visual/R.java A /issm/trunk-jpl/src/android/ISSM\_Visual/ic\_launcher-web.png A /issm/trunk-jpl/src/android/ISSM\_Visual/libs A /issm/trunk-jpl/src/android/ISSM\_Visual/libs/android-support-v4.jar A /issm/trunk-jpl/src/android/ISSM\_Visual/proguard-project.txt A /issm/trunk-jpl/src/android/ISSM\_Visual/project.properties A /issm/trunk-jpl/src/android/ISSM\_Visual/res A /issm/trunk-jpl/src/android/ISSM\_Visual/res/drawable-hdpi A /issm/trunk-jpl/src/android/ISSM\_Visual/res/drawable-hdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/ISSM\_Visual/res/drawable-hdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/ISSM\_Visual/res/drawable-ldpi A /issm/trunk-jpl/src/android/ISSM\_Visual/res/drawable-ldpi/ic\_launcher.png A /issm/trunk-jpl/src/android/ISSM\_Visual/res/drawable-mdpi A /issm/trunk-jpl/src/android/ISSM\_Visual/res/drawable-mdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/ISSM\_Visual/res/drawable-mdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/ISSM\_Visual/res/drawable-xhdpi A /issm/trunk-jpl/src/android/ISSM\_Visual/res/drawable-xhdpi/ic\_action\_search.png A /issm/trunk-jpl/src/android/ISSM\_Visual/res/drawable-xhdpi/ic\_launcher.png A /issm/trunk-jpl/src/android/ISSM\_Visual/res/layout A /issm/trunk-jpl/src/android/ISSM\_Visual/res/layout/activity\_issmvisual.xml A /issm/trunk-jpl/src/android/ISSM\_Visual/res/menu A /issm/trunk-jpl/src/android/ISSM\_Visual/res/menu/activity\_issmvisual.xml A /issm/trunk-jpl/src/android/ISSM\_Visual/res/values A /issm/trunk-jpl/src/android/ISSM\_Visual/res/values/strings.xml A /issm/trunk-jpl/src/android/ISSM\_Visual/res/values/styles.xml A /issm/trunk-jpl/src/android/ISSM\_Visual/res/values-v11 A /issm/trunk-jpl/src/android/ISSM\_Visual/res/values-v11/styles.xml A /issm/trunk-jpl/src/android/ISSM\_Visual/res/values-v14 A /issm/trunk-jpl/src/android/ISSM\_Visual/res/values-v14/styles.xml A /issm/trunk-jpl/src/android/ISSM\_Visual/src A /issm/trunk-jpl/src/android/ISSM\_Visual/src/com A /issm/trunk-jpl/src/android/ISSM\_Visual/src/com/example A /issm/trunk-jpl/src/android/ISSM\_Visual/src/com/example/issm\_visual A /issm/trunk-jpl/src/android/ISSM\_Visual/src/com/example/issm\_visual/ISSMVisual.java A /issm/trunk-jpl/src/android/ISSM\_Visual/src/com/example/issm\_visual/MyGLRenderer.java A /issm/trunk-jpl/src/android/ISSM\_Visual/src/com/example/issm\_visual/MyGLSurfaceView.java\\
+Export determination: 6. \\
+Rationale: Drawing triangles diff colors\\
+\vspace{3em}
+
+\noindent \textbf{Change \#556} with diff file ISSM-13959-13960.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/android/ISSM/jni/Main.cpp D /issm/trunk-jpl/src/android/ISSM/jni/Main\_nojavah.cpp D /issm/trunk-jpl/src/android/ISSM/jni/com\_example\_issm\_IssmJni.h\\
+Export determination: 6. \\
+Rationale: CHG: pushed Lan's changes to avoid using Javah on Main.cpp\\
+\vspace{3em}
+
+\noindent \textbf{Change \#557} with diff file ISSM-13960-13961.diff: \\
+Function name: \\
+D /issm/trunk-jpl/src/android/ISSM\_App\\
+Export determination: 6. \\
+Rationale: CHG: not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#558} with diff file ISSM-13961-13962.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/android/Makefile.am\\
+Export determination: 6. \\
+Rationale: CHG: ISSM\_App not needed anymore\\
+\vspace{3em}
+
+\noindent \textbf{Change \#559} with diff file ISSM-13962-13963.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/miscellaneous/issmdoc.m\\
+Export determination: 6. \\
+Rationale: CHG: updated issmdoc for workshop\\
+\vspace{3em}
+
+\noindent \textbf{Change \#560} with diff file ISSM-13963-13964.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/plot\_scatter.m\\
+Export determination: 6. \\
+Rationale: CHG: added options to plot\_scatter\\
+\vspace{3em}
+
+\noindent \textbf{Change \#561} with diff file ISSM-13964-13965.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/applyoptions.m\\
+Export determination: 6. \\
+Rationale: BUG: removed interpreter from colorbartitle\\
+\vspace{3em}
+
+\noindent \textbf{Change \#562} with diff file ISSM-13965-13966.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/miscellaneous/fielddisplay.py\\
+Export determination: 6. \\
+Rationale: NEW: Add explicit printing of None to fielddisplay.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#563} with diff file ISSM-13966-13967.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/classes/model/model.py A /issm/trunk-jpl/src/m/classes/results.py M /issm/trunk-jpl/src/m/solve/MatlabProcessPatch.py M /issm/trunk-jpl/src/m/solve/loadresultsfromdisk.py M /issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py\\
+Export determination: 6. \\
+Rationale: CHG: Changed format of results storage for Python.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#564} with diff file ISSM-13967-13968.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test101.py M /issm/trunk-jpl/test/NightlyRun/test102.py M /issm/trunk-jpl/test/NightlyRun/test103.py M /issm/trunk-jpl/test/NightlyRun/test104.py M /issm/trunk-jpl/test/NightlyRun/test105.py M /issm/trunk-jpl/test/NightlyRun/test106.py M /issm/trunk-jpl/test/NightlyRun/test107.py M /issm/trunk-jpl/test/NightlyRun/test108.py M /issm/trunk-jpl/test/NightlyRun/test109.py M /issm/trunk-jpl/test/NightlyRun/test110.py M /issm/trunk-jpl/test/NightlyRun/test111.py M /issm/trunk-jpl/test/NightlyRun/test112.py M /issm/trunk-jpl/test/NightlyRun/test113.py M /issm/trunk-jpl/test/NightlyRun/test114.py M /issm/trunk-jpl/test/NightlyRun/test115.py M /issm/trunk-jpl/test/NightlyRun/test116.py M /issm/trunk-jpl/test/NightlyRun/test117.py M /issm/trunk-jpl/test/NightlyRun/test118.py M /issm/trunk-jpl/test/NightlyRun/test120.py M /issm/trunk-jpl/test/NightlyRun/test121.py M /issm/trunk-jpl/test/NightlyRun/test122.py M /issm/trunk-jpl/test/NightlyRun/test201.py M /issm/trunk-jpl/test/NightlyRun/test202.py M /issm/trunk-jpl/test/NightlyRun/test203.py M /issm/trunk-jpl/test/NightlyRun/test204.py M /issm/trunk-jpl/test/NightlyRun/test205.py M /issm/trunk-jpl/test/NightlyRun/test206.py M /issm/trunk-jpl/test/NightlyRun/test207.py M /issm/trunk-jpl/test/NightlyRun/test208.py M /issm/trunk-jpl/test/NightlyRun/test209.py M /issm/trunk-jpl/test/NightlyRun/test210.py M /issm/trunk-jpl/test/NightlyRun/test211.py M /issm/trunk-jpl/test/NightlyRun/test212.py M /issm/trunk-jpl/test/NightlyRun/test213.py M /issm/trunk-jpl/test/NightlyRun/test214.py M /issm/trunk-jpl/test/NightlyRun/test215.py M /issm/trunk-jpl/test/NightlyRun/test216.py M /issm/trunk-jpl/test/NightlyRun/test217.py M /issm/trunk-jpl/test/NightlyRun/test219.py M /issm/trunk-jpl/test/NightlyRun/test220.py M /issm/trunk-jpl/test/NightlyRun/test221.py M /issm/trunk-jpl/test/NightlyRun/test222.py M /issm/trunk-jpl/test/NightlyRun/test223.py M /issm/trunk-jpl/test/NightlyRun/test224.py M /issm/trunk-jpl/test/NightlyRun/test225.py M /issm/trunk-jpl/test/NightlyRun/test226.py M /issm/trunk-jpl/test/NightlyRun/test227.py M /issm/trunk-jpl/test/NightlyRun/test228.py M /issm/trunk-jpl/test/NightlyRun/test229.py M /issm/trunk-jpl/test/NightlyRun/test230.py M /issm/trunk-jpl/test/NightlyRun/test231.py M /issm/trunk-jpl/test/NightlyRun/test232.py M /issm/trunk-jpl/test/NightlyRun/test233.py M /issm/trunk-jpl/test/NightlyRun/test236.py M /issm/trunk-jpl/test/NightlyRun/test237.py M /issm/trunk-jpl/test/NightlyRun/test270.py M /issm/trunk-jpl/test/NightlyRun/test272.py M /issm/trunk-jpl/test/NightlyRun/test274.py M /issm/trunk-jpl/test/NightlyRun/test3001.py M /issm/trunk-jpl/test/NightlyRun/test3002.py M /issm/trunk-jpl/test/NightlyRun/test3003.py M /issm/trunk-jpl/test/NightlyRun/test3004.py M /issm/trunk-jpl/test/NightlyRun/test3005.py M /issm/trunk-jpl/test/NightlyRun/test3006.py M /issm/trunk-jpl/test/NightlyRun/test3007.py M /issm/trunk-jpl/test/NightlyRun/test3008.py M /issm/trunk-jpl/test/NightlyRun/test3009.py M /issm/trunk-jpl/test/NightlyRun/test301.py M /issm/trunk-jpl/test/NightlyRun/test3010.py M /issm/trunk-jpl/test/NightlyRun/test3015.py M /issm/trunk-jpl/test/NightlyRun/test3019.py M /issm/trunk-jpl/test/NightlyRun/test302.py M /issm/trunk-jpl/test/NightlyRun/test3020.py M /issm/trunk-jpl/test/NightlyRun/test303.py M /issm/trunk-jpl/test/NightlyRun/test304.py M /issm/trunk-jpl/test/NightlyRun/test305.py M /issm/trunk-jpl/test/NightlyRun/test306.py M /issm/trunk-jpl/test/NightlyRun/test307.py M /issm/trunk-jpl/test/NightlyRun/test308.py M /issm/trunk-jpl/test/NightlyRun/test309.py M /issm/trunk-jpl/test/NightlyRun/test310.py M /issm/trunk-jpl/test/NightlyRun/test311.py M /issm/trunk-jpl/test/NightlyRun/test312.py M /issm/trunk-jpl/test/NightlyRun/test313.py M /issm/trunk-jpl/test/NightlyRun/test314.py M /issm/trunk-jpl/test/NightlyRun/test315.py M /issm/trunk-jpl/test/NightlyRun/test316.py M /issm/trunk-jpl/test/NightlyRun/test317.py M /issm/trunk-jpl/test/NightlyRun/test318.py M /issm/trunk-jpl/test/NightlyRun/test319.py M /issm/trunk-jpl/test/NightlyRun/test320.py M /issm/trunk-jpl/test/NightlyRun/test321.py M /issm/trunk-jpl/test/NightlyRun/test322.py M /issm/trunk-jpl/test/NightlyRun/test323.py M /issm/trunk-jpl/test/NightlyRun/test324.py M /issm/trunk-jpl/test/NightlyRun/test325.py M /issm/trunk-jpl/test/NightlyRun/test326.py M /issm/trunk-jpl/test/NightlyRun/test327.py M /issm/trunk-jpl/test/NightlyRun/test328.py M /issm/trunk-jpl/test/NightlyRun/test329.py M /issm/trunk-jpl/test/NightlyRun/test401.py M /issm/trunk-jpl/test/NightlyRun/test402.py M /issm/trunk-jpl/test/NightlyRun/test403.py M /issm/trunk-jpl/test/NightlyRun/test404.py M /issm/trunk-jpl/test/NightlyRun/test405.py M /issm/trunk-jpl/test/NightlyRun/test406.py M /issm/trunk-jpl/test/NightlyRun/test407.py M /issm/trunk-jpl/test/NightlyRun/test408.py M /issm/trunk-jpl/test/NightlyRun/test409.py M /issm/trunk-jpl/test/NightlyRun/test410.py M /issm/trunk-jpl/test/NightlyRun/test411.py M /issm/trunk-jpl/test/NightlyRun/test415.py M /issm/trunk-jpl/test/NightlyRun/test416.py M /issm/trunk-jpl/test/NightlyRun/test419.py M /issm/trunk-jpl/test/NightlyRun/test421.py M /issm/trunk-jpl/test/NightlyRun/test422.py M /issm/trunk-jpl/test/NightlyRun/test423.py M /issm/trunk-jpl/test/NightlyRun/test424.py M /issm/trunk-jpl/test/NightlyRun/test425.py M /issm/trunk-jpl/test/NightlyRun/test426.py M /issm/trunk-jpl/test/NightlyRun/test427.py M /issm/trunk-jpl/test/NightlyRun/test428.py M /issm/trunk-jpl/test/NightlyRun/test429.py M /issm/trunk-jpl/test/NightlyRun/test430.py M /issm/trunk-jpl/test/NightlyRun/test431.py M /issm/trunk-jpl/test/NightlyRun/test432.py M /issm/trunk-jpl/test/NightlyRun/test501.py M /issm/trunk-jpl/test/NightlyRun/test502.py M /issm/trunk-jpl/test/NightlyRun/test503.py M /issm/trunk-jpl/test/NightlyRun/test504.py M /issm/trunk-jpl/test/NightlyRun/test505.py M /issm/trunk-jpl/test/NightlyRun/test506.py M /issm/trunk-jpl/test/NightlyRun/test507.py M /issm/trunk-jpl/test/NightlyRun/test508.py M /issm/trunk-jpl/test/NightlyRun/test509.py M /issm/trunk-jpl/test/NightlyRun/test510.py M /issm/trunk-jpl/test/NightlyRun/test511.py M /issm/trunk-jpl/test/NightlyRun/test512.py M /issm/trunk-jpl/test/NightlyRun/test513.py M /issm/trunk-jpl/test/NightlyRun/test515.py M /issm/trunk-jpl/test/NightlyRun/test516.py M /issm/trunk-jpl/test/NightlyRun/test601.py M /issm/trunk-jpl/test/NightlyRun/test602.py M /issm/trunk-jpl/test/NightlyRun/test603.py M /issm/trunk-jpl/test/NightlyRun/test604.py M /issm/trunk-jpl/test/NightlyRun/test605.py M /issm/trunk-jpl/test/NightlyRun/test606.py M /issm/trunk-jpl/test/NightlyRun/test607.py M /issm/trunk-jpl/test/NightlyRun/test608.py M /issm/trunk-jpl/test/NightlyRun/test609.py M /issm/trunk-jpl/test/NightlyRun/test610.py M /issm/trunk-jpl/test/NightlyRun/test611.py M /issm/trunk-jpl/test/NightlyRun/test612.py M /issm/trunk-jpl/test/NightlyRun/test613.py\\
+Export determination: 6. \\
+Rationale: CHG: Updated Python test problems for new results format.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#565} with diff file ISSM-13968-13969.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/test217.py\\
+Export determination: 6. \\
+Rationale: FIX: Change script got a little overly ambitious.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#566} with diff file ISSM-13969-13970.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/plot/processdata.py\\
+Export determination: 6. \\
+Rationale: CHG: make sure data has the same rank as x,y arrays for plotting\\
+\vspace{3em}
+
+\noindent \textbf{Change \#567} with diff file ISSM-13970-13971.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.py\\
+Export determination: 6. \\
+Rationale: BUG: catch rank-1 arrays in SetIceShelfBC and reshape to match spc arrays\\
+\vspace{3em}
+
+\noindent \textbf{Change \#568} with diff file ISSM-13971-13972.diff: \\
+Function name: \\
+M /issm/trunk-jpl/test/NightlyRun/runme.m M /issm/trunk-jpl/test/NightlyRun/test1501.m M /issm/trunk-jpl/test/NightlyRun/test1502.m M /issm/trunk-jpl/test/NightlyRun/test1601.m A /issm/trunk-jpl/test/NightlyRun/test1601.py M /issm/trunk-jpl/test/NightlyRun/test1602.m A /issm/trunk-jpl/test/NightlyRun/test1602.py\\
+Export determination: 6. \\
+Rationale: NEW: Working test1601.py and test1602.py.\\
+\vspace{3em}
+
+\noindent \textbf{Change \#569} with diff file ISSM-13972-13973.diff: \\
+Function name: \\
+M /issm/trunk-jpl/configure.ac\\
+Export determination: 6. \\
+Rationale: CHG: preparing merge, increase version number\\
+\vspace{3em}
+
+\noindent \textbf{Change \#570} with diff file ISSM-13973-13974.diff: \\
+Function name: \\
+M /issm/trunk-jpl/src\\
+Export determination: 6. \\
+Rationale: CHG: fixing merge\\
+\vspace{3em}
+
+\noindent \textbf{Change \#571} with diff file ISSM-13974-13975.diff: \\
+Function name: \\
+M /issm/trunk-jpl M /issm/trunk-jpl/aux-config\\
+Export determination: 6. \\
+Rationale: merged trunk and trunk-jpl\\
+\vspace{3em}
+
Index: /issm/oecreview/Archive/13393-13976/r1.tex
===================================================================
--- /issm/oecreview/Archive/13393-13976/r1.tex	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/r1.tex	(revision 13980)
@@ -0,0 +1,1 @@
+13393
Index: /issm/oecreview/Archive/13393-13976/r2.tex
===================================================================
--- /issm/oecreview/Archive/13393-13976/r2.tex	(revision 13980)
+++ /issm/oecreview/Archive/13393-13976/r2.tex	(revision 13980)
@@ -0,0 +1,1 @@
+13976
Index: sm/oecreview/LastMerge
===================================================================
--- /issm/oecreview/LastMerge	(revision 13979)
+++ 	(revision )
@@ -1,1 +1,0 @@
-11236
Index: sm/oecreview/SyncBranches.sh
===================================================================
--- /issm/oecreview/SyncBranches.sh	(revision 13979)
+++ 	(revision )
@@ -1,63 +1,0 @@
-#!/bin/bash
-#Script to synchronize trunk and trunk-jpl
-#http://svnbook.red-bean.com/nightly/en/svn.branchmerge.advanced.html#svn.branchmerge.advanced.reintegratetwice
-#
-#
-#  ___A___________________X______________________________  trunk
-#     \            \     /
-#      \      merge \   / reintegrate
-#       \____________ B _________________________________  trunk-jpl (branch)
-#
-#Step 1: update both branches
-#Step 2: merge trunk back to trunk-jpl
-#        cd trunk-jpl
-#        svn merge -r A:HEAD ../trunk
-#        svn commit -m "merged trunk and trun-jpl for revision HEAD"
-#Step 3: reintegrate trunk-jpl in trunk
-#        cd trunk
-#        svn merge --reintegrate https://issm.ess.uci.edu:80/svn/issm/issm/trunk-jpl
-#        svn commit -m "merged trunk-jpl and trunk for revision HEAD"
-#Step 4: record reintegration
-#        svn merge --record-only -c X ../trunk
-#        svn commit -m "Block revision X from being merged into trunk-jpl"
-
-STEP=4
-LASTMERGEREVISION=`cat LastMerge`
-
-#Check user and get PATH
-if [[ $USER != "larour" ]]; then
-	echo "you are not allowed to synchronize trunk and trunk-jpl" && exit 1 
-fi
-PREFIX=$(pwd)/../
-
-if [ "$STEP" -eq "1" ]; then
-	echo "--- Step 1: updating trunk and trunk-jpl ---"
-	cd $PREFIX/trunk
-	svn update
-	cd $PREFIX/trunk-jpl
-	svn update
-fi
-if [ "$STEP" -eq "2" ]; then
-	echo "--- Step 2: merging trunk in trunk-jpl ---"
-	cd $PREFIX/trunk-jpl
-	svn merge -r $LASTMERGEREVISION:HEAD ../trunk
-	svn commit -m "merged trunk and trunk-jpl"
-fi
-if [ "$STEP" -eq "3" ];
-then
-	echo "--- Step 3: reintegrate trunk-jpl in trunk ---"
-	cd $PREFIX/trunk
-	svn update
-	B=$(svnversion .)
-	svn merge --reintegrate http://issm.ess.uci.edu/svn/issm/issm/trunk-jpl
-	svn commit -m "merged trunk-jpl and trunk for revision $B"
-fi
-if [ "$STEP" -eq "4" ];
-then
-	echo "--- Step 4: record reintegration ---"
-	cd $PREFIX/trunk-jpl
-	X=$(svnversion . | sed -e "s/:/ /" | awk {'print $2'})
-	echo $X > ../oecreview/LastMerge
-	svn merge --record-only -c $X ../trunk
-	svn commit -m "Block revision $X from being merged into trunk-jpl"
-fi
Index: /issm/oecreview/Template/Makefile
===================================================================
--- /issm/oecreview/Template/Makefile	(revision 13979)
+++ /issm/oecreview/Template/Makefile	(revision 13980)
@@ -1,11 +1,8 @@
-name=docreview
-
+TARGET=docreview
 
 all: 
-	latex $(name).tex
-	dvips $(name).dvi
-	ps2pdf $(name).ps  $(name).pdf
-	rm -rf *.dvi *.log *.aux *.ps
+	pdflatex -interaction=errorstopmode -file-line-error -halt-on-error $(TARGET).tex
+	rm -rf *.log *.aux 
 
 clean:
-	rm -rf *.dvi *.log *.aux
+	rm -rf *.log *.aux
Index: /issm/oecreview/Template/docreview.tex
===================================================================
--- /issm/oecreview/Template/docreview.tex	(revision 13979)
+++ /issm/oecreview/Template/docreview.tex	(revision 13980)
@@ -41,5 +41,5 @@
 \noindent \textbf{Comments:}  see table of changes below. \\ \\
 \noindent \textbf{Reviewed by ISSM Export Transfer Liaison:} Dr. Eric Larour \hfill \textbf{Date:} \input{Date} \\ 
-\includegraphics[scale=1]{signature.eps}
+\includegraphics[scale=1]{signature}
 
 \noindent JPL Export Administration Form TBS – June 29, 2011
Index: /issm/oecreview/oecreview.sh
===================================================================
--- /issm/oecreview/oecreview.sh	(revision 13979)
+++ /issm/oecreview/oecreview.sh	(revision 13980)
@@ -99,5 +99,5 @@
 
 #Archive location: 
-UCI_SVN=$ISSM_DIR/../
+UCI_SVN=./../
 ARCHIVE_ROOT=$UCI_SVN/oecreview/Archive
 TEMPLATE_DIR=$UCI_SVN/oecreview/Template
@@ -132,5 +132,5 @@
 cp  $TEMPLATE_DIR/docreview.tex $ARCHIVE_DIR/ISSM-DocReview-$r1-$r2.tex
 cp  $TEMPLATE_DIR/signature.eps $ARCHIVE_DIR/
-cat $TEMPLATE_DIR/Makefile  | sed "s/name=docreview/name=ISSM-DocReview-$r1-$r2/g" > $ARCHIVE_DIR/Makefile
+cat $TEMPLATE_DIR/Makefile  | sed "s/TARGET=docreview/TARGET=ISSM-DocReview-$r1-$r2/g" > $ARCHIVE_DIR/Makefile
 
 COUNTER=0
@@ -175,7 +175,7 @@
 \\noindent \\textbf{Change \#$COUNTER} with diff file ISSM-$i-$j.diff: \\\\
 Function name: \\\\
-$(          echo $changedpath | sed 's/_/\\_/g' | sed 's/#/\\#/g' | sed 's/&/\\&/g')\\\\
+$(          echo $changedpath | sed 's/_/\\_/g' | sed 's/#/\\#/g' | sed 's/&/\\&/g' | sed 's/\$/\\$/g')\\\\
 Export determination: 6. \\\\
-Rationale: $(echo $logmessage | sed 's/_/\\_/g' | sed 's/#/\\#/g' | sed 's/&/\\&/g')\\\\
+Rationale: $(echo $logmessage | sed 's/_/\\_/g' | sed 's/#/\\#/g' | sed 's/&/\\&/g' | sed 's/\$/\\$/g')\\\\
 \\vspace{3em}
 
